• New Horizons on Maelstrom
    Maelstrom New Horizons


    Visit our website www.piratehorizons.com to quickly find download links for the newest versions of our New Horizons mods Beyond New Horizons and Maelstrom New Horizons!

Included in Build Improving the Smuggling System

In general, this new fancy system does seem to have potential to me and I would hate to damn it to Davy Jones' locker just because it is "different" from before.
That being said, its concept does need to make sense, not mess up gameplay AND it needs to work as intended.

There seems to be a flaw in the "real world" logic of the patrol time system. If there were a set schedule then the first people to know would be the smugglers and there would be no way you would find them hanging round on a beach out of a "safe" period so you couldn't even try to chance it.
That is a valid point to be sure. I wonder what @Levis would think about that one.

Of course assuming that the smugglers DO know the best time to smuggle, shouldn't THEY tell YOU when to meet?
Maybe that can be limited to when you have a high enough "liking" with them, so you would need to "earn their trust" by actually showing up at non-dangerous times at first.

And perhaps if you smuggle "at the wrong time", there should be only a random chance of the smugglers being there at all?

In "gameplay" terms you can get the enhanced rewards of a high risk activity (high prices for contraband) without any of the risk (by staying in the safe period) - There's no gameplay logic there (unless there's new risks hidden in the additional complexities of smugglers liking you, guild etc but I think that's mostly about level of remuneration).
Indeed as long as you plan your escapades properly, there should be little risk of being caught.
Unless the smuggling schedule has just recently been changed and you failed to notice.
So there IS at least that risk.

However that aside, in 3.4 you could ignore all the schedule stuff and immediately have a second chat with the agent and just take your chance (with a back-up saved game in case you ran into trouble you couldn't handle) so fair enough. However now there is no "chance", whilst the land part does still have a chance element it seems the ships will always be there. So either you use a safe period and meet no-one or you are guaranteed at least a sea skirmish (with possible relations consequences) - no option.
The only "chance" then is the random element in the time that the player arrives at the smuggling shore.
If a player doesn't know the correct time, then they may or may not show up during a "gap".

I don't care if the ships are independent or linked to on-land encounter (they never were before anyway) but they should have a chance encounter element for gameplay AND realism. A full time blockade apart from the safe slots makes no "real" sense since if they were already there you would sail away -not land -and as such their "gameplay" timing to arrive just as you leave (you just dump your cargo on the beach) has to be very fortunate not guaranteed.
Indeed I do agree with you there. There IS again a chance element to being caught ashore, but if you're not caught ashore, currently you can be guaranteed to be caught at sea instead.
That only makes sense if:
- The coast guard soldiers ALWAYS arrive by ship and never travel by foot across the island
or
- During the scheduled patrolling times, that ship ALWAYS being anchored there

That does sound a bit silly. Surely even if there IS a patrol going on, the soldiers and coastguard ships can't be everywhere at once.
And if there IS a ship (or three) around the area, what are the chances of neither the player nor the smugglers NOT noticing?
Unless the coastguard always arrives later.... But the soldiers could hardly have called for their help either. So indeed doesn't make so much sense.

[Oh and make sure your ships cannons are only loaded with chain or grape in case if you do meet them you accidentally sink a coastguard]
I can't really think of any logical way around that one.
If you get caught and try to get away, you can hardly expect the nation that caught you to be happy about it. :oops:
 
SUMMARY:

As the above is again a bit of a huge rant, how about I try to summarize what I reckon should be done:

1. Bear with the current system (FOR NOW!), doing tests with DEBUG_SMUGGLING to ensure that it does actually do what is currently intended.
If we find any errors (such as coastguard ships NOT disappearing when escaping to worldmap),
then the compile.log files should tell us what happened and help us to indicate where and how to fix it.

I'd want this to be covered properly before we start introducing random elements again.
This is for the same reason I started with a false flag detection chance of 100% when fixing that mod.
Testing basic game concepts is simply so much easier when its behaviour isn't actually random at all, but can be 100% predicted.

2. Once the current system works, add a "chance factor" for the coastguard ship(s) being there at all.
That would mean that outside the scheduled patrols, you WILL not get caught and during the scheduled patrols, you MAY also get away with your smuggling.

3. OPTIONAL: During the scheduled patrols, have there be a random chance of the smugglers themselves deliberately not being there (THEY know the times).
Combined with #2 above, that means you MAY be able to safely get away, but there is also a random element to being able to complete your smuggling run at all.

4. OPTIONAL: Once you have gained a high enough "liking" with the smugglers, THEY will tell YOU when to show up.
Saves you the trouble of figuring out the appropriate time for it every single time.
Then you can do as you're told, until the schedule changes and then you AND the smugglers get caught out together (that only makes sense, no?).

Of course the "schedule book" that you can loot after being caught also takes care of this; at least partly.


Does that make any sense? Are there any of the above items that you do NOT think are necessary?
Or are there any things that aren't there, that you think SHOULD still be changed?

I'd also like to take this opportunity for you guys providing feedback.
It is impossible to get anything right without feedback, especially complex systems like this one.
So I most certainly do appreciate you taking time and effort to think along with the development process. :doff
 
I am far from expert with this new smuggling system but do not like it. It feels like wearing a straight jacket. There is no freedom.

There seems to be only a 1 hour per day window when one might NOT get caught. That is not even close to reasonable.

The ships being there all the time so you are guaranteed to be caught is completely unrealistic. If I can see them I will not go in there to get caught. Then adding to it the problem of them always being there when you return on top of it all makes smuggling a VERY bad deal.

The old system was a bit easy with high rewards and low risk, but this new system has extreme risk with very low rewards.
 
Ok, now we know you don't like the new system in its current state. I understand that and agree with many of your points.

Next question: What to do about it? Unless absolutely, completely and utterly required, I really wouldn't want to throw out this entire new system.
I'd much rather tweak it so that it DOES become as playable, interesting and hopefully enjoyable as it is meant to be.

So if we make the changes I propose in my Summary above, do you reckon that would help?
Are there any other things you'd like to see tweaked further?
 
SUMMARY:

As the above is again a bit of a huge rant, how about I try to summarize what I reckon should be done:

1. Bear with the current system (FOR NOW!), doing tests with DEBUG_SMUGGLING to ensure that it does actually do what is currently intended.
If we find any errors (such as coastguard ships NOT disappearing when escaping to worldmap),
then the compile.log files should tell us what happened and help us to indicate where and how to fix it.

I'd want this to be covered properly before we start introducing random elements again.
This is for the same reason I started with a false flag detection chance of 100% when fixing that mod.
Testing basic game concepts is simply so much easier when its behaviour isn't actually random at all, but can be 100% predicted.

2. Once the current system works, add a "chance factor" for the coastguard ship(s) being there at all.
That would mean that outside the scheduled patrols, you WILL not get caught and during the scheduled patrols, you MAY also get away with your smuggling.

3. OPTIONAL: During the scheduled patrols, have there be a random chance of the smugglers themselves deliberately not being there (THEY know the times).
Combined with #2 above, that means you MAY be able to safely get away, but there is also a random element to being able to complete your smuggling run at all.

4. OPTIONAL: Once you have gained a high enough "liking" with the smugglers, THEY will tell YOU when to show up.
Saves you the trouble of figuring out the appropriate time for it every single time.
Then you can do as you're told, until the schedule changes and then you AND the smugglers get caught out together (that only makes sense, no?).

Of course the "schedule book" that you can loot after being caught also takes care of this; at least partly.


Does that make any sense? Are there any of the above items that you do NOT think are necessary?
Or are there any things that aren't there, that you think SHOULD still be changed?

I'd also like to take this opportunity for you guys providing feedback.
It is impossible to get anything right without feedback, especially complex systems like this one.
So I most certainly do appreciate you taking time and effort to think along with the development process. :doff

1 & 2 fine.

3 might be nice but it's more complexity at a time when there seems much to do. We would have to ensure that going to the beach cancelled the smuggling run so the player doesn't get penalised for not completing. Conceptually you told the agent "now" but when he told the smugglers that they said "no way".

4. undermines a lot of the schedule work, whilst it seems logical (and you have added in that at some stage the smugglers (and us will be caught out) . I guess it would need an option for you to say "No , I'll just go and check they haven't changed their schedules on us".

Also - I'm not sure when you speak to the agent 2nd time if the smugglers are placed right away (and thus hang around on the beach) - or do you have to wait until the right time slot to set up that 2nd meeting so they only go when it is safe. If you know the time I guess it should be the second of those but then you have the problem of how long will it take to reach the beach - instant for me on sail to but a problem in other modes of travel. I guess you're supposed to sail to the shore but then stay on the ship until the safe time, using your crewmember as required?

It's @Levis work and 3 & 4 should probably be his choice (and for after build 14 4 release. For now we just need to tweak the functionality of what's there. Yes?
 
Also - I'm not sure when you speak to the agent 2nd time if the smugglers are placed right away (and thus hang around on the beach) - or do you have to wait until the right time slot to set up that 2nd meeting so they only go when it is safe. If you know the time I guess it should be the second of those but then you have the problem of how long will it take to reach the beach - instant for me on sail to but a problem in other modes of travel. I guess you're supposed to sail to the shore but then stay on the ship until the safe time, using your crewmember as required?
If I recall, they're placed instantly and will be there waiting for you for 7 days if need be. :cheeky

It's @Levis work and 3 & 4 should probably be his choice (and for after build 14 4 release. For now we just need to tweak the functionality of what's there. Yes?
Very much agreed. For now, all I care about is having it playable WITHOUT adding extra complexity. :woot
 
:ahoy


I have been trying to improve the Smuggler Agent dialog ( when you talk to them in the tavern ).

I have updated the Smuggler Agent_dialog.c and Smuggler Agent_dialog.h files

But when I try to use my new files the game crashes - the dialog boxes on screen are blank . ( see image )

I don't know what I have done wrong.

Copies of my new files & the originals are attached - also the error logs ( I think they mean that the game is not recognizing the extra lines I have added to the .h file - but I don't know why :modding :modding ).

It is probably something stupidly simple that I have done wrong - but I don't know what.:facepalm

:drunk
 

Attachments

  • PotC Smug Dialog Problem.jpg
    PotC Smug Dialog Problem.jpg
    206.7 KB · Views: 192
  • Smuggler Agent_dialog_ORIGINAL.c
    5 KB · Views: 205
  • Smuggler Agent_dialog.c
    5.6 KB · Views: 194
  • Smuggler Agent_dialog_ORIGINAL.h
    1.8 KB · Views: 211
  • Smuggler Agent_dialog.h
    2.4 KB · Views: 219
  • error.log
    822 bytes · Views: 204
  • compile.log
    23.6 KB · Views: 209
  • system.log
    5.8 KB · Views: 201
It is probably something stupidly simple that I have done wrong - but I don't know what.:facepalm
I made some slight changes to the attached files; maybe that will help?
The following was changed:
- Added "," at the end of all the added lines in the dialog.h file
- Moved a comment to the end of a line of code in the dialog.c file

Code:
If there are no soldiers here, spend some time in the tavern room, or go and do something else and come back to the tavern later, there might be some here then.",
^ That should also not happen anymore, though I haven't heard confirmation yet if my quick fix indeed always works.
 

Attachments

  • Smuggler Agent_dialog.zip
    3.1 KB · Views: 203
Code:
If there are no soldiers here, spend some time in the tavern room, or go and do something else and come back to the tavern later, there might be some here then.",
^ That should also not happen anymore, though I haven't heard confirmation yet if my quick fix indeed always works.


:yes - I just left it in there for completeness - and who knows we might go back to having the soldiers appear randomly xD


I made some slight changes to the attached files; maybe that will help?
The following was changed:
- Added "," at the end of all the added lines in the dialog.h file
- Moved a comment to the end of a line of code in the dialog.c file

:dance -- Yes - that worked - also added "," to line 38 in .h file- ( don't know why it was missing :shrug ) -- Thanks for your help. I knew it was something simple that I had overlooked , I just could not figure out what it was.


Attached are my "new" Smugglers Agent dialog files and a slightly changed Quest book.

The quest book removes the beach location from the 1st entry the player gets ( so they have to go back to the agent to find out where to go ). The beach location is also removed from the dialog for the first time the player talks to the Agent ( so again they have to talk to the Agent the 2nd time to find out where to go).

Unlike me who when I first played the new smuggling did not talk to the agent the 2nd time - & could not work out what I had done wrong. :wp - Took me several attempts to realize. :whipa


The dialog with the Agent may now be a bit over the top - but since the smuggling has changed so much it should help both new players and those used to the old system - to get a hang of things. The dialog can always be made less obvious later when people are used to the new system.


Could someone please test this ( install files & start a smuggling run ) and make any suggestions for improvements. @Hylie Pistof @Jason @pedrwyth -- Hint -Hint -- & anyone else who is interested --- you don't have to complete the run just do the dialog bit with the Agent in the Tavern.

@Pieter Boelen - There is a hint in the dialog that it might be possible to cancel the Smuggling Run - if the player wishes to - there is no code for this ( I don't know how to do it or where to put it & am not sure at what point the Smuggling run is activated ) and no specific dialog - but it is an option I think needs to be provided at some time in the future.

:drunk
 
Last edited:
I'm sure @Levis or I can figure out a cancel option some time.

Is the extra dialog there every time or does it get a bit reduced after your first snuggling run?
 
Is the extra dialog there every time or does it get a bit reduced after your first snuggling run?

It is there every time at the moment, so it is going to be a bit annoying after awhile. :yes

I am not sure how to code it so as to remove the extra cases after a couple of meetings with the Agent - - probably needs another "if statement" in case "Meeting_3": and a bit of new dialog text for the link.

:checklist
 
It is there every time at the moment, so it is going to be a bit annoying after awhile. :yes

I am not sure how to code it so as to remove the extra cases after a couple of meetings with the Agent - - probably needs another "if statement" in case "Meeting_3": and a bit of new dialog text for the link.
You can add an attribute to the player character with pchar.smugglertutorial = true; or so.
Then for the second time, you can have an if (CheckAttribute(pchar, "smugglertutorial")) check.
Something like:
Code:
if (CheckAttribute(pchar, "smugglertutorial"))
{
// do normal case
}
else
{
// explain everything
pchar.smugglertutorial = true;
}
That way you would get it only the first time.
 
You can add an attribute to the player character with pchar.smugglertutorial = true; or so.

How do you do that? :read

Then for the second time, you can have an if (CheckAttribute(pchar, "smugglertutorial")) check.
Something like:
Code:
if (CheckAttribute(pchar, "smugglertutorial"))
{
// do normal case
}
else
{
// explain everything
pchar.smugglertutorial = true;
}
That way you would get it only the first time.

Personally I would like the extra dialog for the first 2 times then assume the player knows what they are doing. :yes

:drunk
 
Could I use if(NPChar.quest.meeting == "0")

in
Code:
case "First time":       
       if(NPChar.quest.meeting == "0")
       {
         Dialog.snd = "voice\SMAG\SMAG001";
         d.Text = DLG_TEXT[0];
         Link.l1 = PCharPhrase(DLG_TEXT[1] + GetMyFullName(PChar) + DLG_TEXT[2], DLG_TEXT[3] + GetMyFullName(PChar) + DLG_TEXT[4] + GetMyShipNameShow(PChar) + DLG_TEXT[5]);
         Link.l1.go = "meeting";
         NPC_Meeting = "1";
       }
       else
       {
         Dialog.snd = "voice\SMAG\SMAG002";
         d.Text = DLG_TEXT[6];
         if(FindFirstContrabandGoods(PChar) != -1)
         {
           Link.l1 = DLG_TEXT[7];
           Link.l1.go = "Meeting_3";
         }
         Link.l3 = DLG_TEXT[8];
         Link.l3.go = "Exit";

instead - somehow

:shrug
 
Personally I would like the extra dialog for the first 2 times then assume the player knows what they are doing. :yes
I just saw @Levis already added a counter, so you can just make use of that. ;)
Try this:
Code:
if (CheckAttribute(pchar, "amount_smuggleruns") && sti(pchar.amount_smuggleruns) > 2)
{
// do normal case
}
else
{
// explain everything
}

How do you do that? :read
Which part isn't clear? :confused:
 
Which part isn't clear? :confused:

Ignore me I was being stupid :facepalm



I have now modified the Smuggler Agent_dialog.c file as per your suggestion - but I have done something wrong again :modding.

It looked sensible to me but I get this error log -- and the dialog won't work :facepalm

Code:
COMPILE ERROR - file: dialogs\Smuggler Agent_dialog.c; line: 202
Duplicate variable name: topay
COMPILE ERROR - file: dialogs\Smuggler Agent_dialog.c; line: 202
Duplicate variable name: topay


It is something to do with this

Code:
  case "Meeting_3":
       if(CheckAttribute(Pchar, "quest.Contraband.Active") && Pchar.quest.Contraband.Active == true)
       {
         Dialog.snd = "voice\SMAG\SMAG006";         
         d.Text = DLG_TEXT[17];
         Link.l1 = DLG_TEXT[18];
         Link.l1.go = "Exit";         
       }
       else
       {
         if (CheckAttribute(pchar, "amount_smuggleruns") && sti(pchar.amount_smuggleruns) > 2)  // PB & TALISMAN
         {
         // do normal case  ---- PB & Talisman
         //Added liking check by Levis
           if(CheckSmugglerLiking(pchar) >= 25)
           {
           Pchar.quest.contraband.CurrentPlace = SelectSmugglingLocation();
           Dialog.snd = "voice\SMAG\SMAG007";         
           d.Text = DLG_TEXT[20]+DLG_TEXT[25];  //+locations[FindLocation(Pchar.quest.contraband.CurrentPlace)].name  // TALISMAN - remove beach name so player has to go back to agent to find out where to go.
           Link.l1 = DLG_TEXT[21];
           Link.l1.go = "Smuggling prepare exit";
           }
           else
           {
           //Added by levis to repay for your sins
           int topay = makeint(pow2((25-CheckSmugglerLiking(pchar)),3)*5);   <<<<---------- THIS 
           pchar.quest.smuggling_guild.pay_redeem = topay;
           d.Text = DLG_TEXT[26] + topay + DLG_TEXT[27];
           if (sti(PChar.money) >= topay)
           {
             Link.l1 = DLG_TEXT[29];
             Link.l1.go = "Pay";
           }
           Link.l2 = DLG_TEXT[28];
           Link.l2.go = "Exit";
           }
         }
         else
         {
         // explain everything  ----  PB & TALISMAN
         //Added liking check by Levis
           if(CheckSmugglerLiking(pchar) >= 25)
           {
           Pchar.quest.contraband.CurrentPlace = SelectSmugglingLocation();
           Dialog.snd = "voice\SMAG\SMAG007";         
           d.Text = DLG_TEXT[20]+DLG_TEXT[25];  //+locations[FindLocation(Pchar.quest.contraband.CurrentPlace)].name  // TALISMAN - remove beach name so player has to go back to agent to find out where to go.
           if(!CheckAttribute(Pchar,"quest.smuggling_got_book")) d.Text = d.Text + DLG_TEXT[24];
           Link.l1 = DLG_TEXT[21];
     //       Link.l1.go = "Smuggling prepare exit"; -- TALISMAN - additional dialog added below
           Link.l1.go = "Meeting_4";
           }
           else
           {
           //Added by levis to repay for your sins
           int topay = makeint(pow2((25-CheckSmugglerLiking(pchar)),3)*5);  <<<<-----------THIS LINE
           pchar.quest.smuggling_guild.pay_redeem = topay;
           d.Text = DLG_TEXT[26] + topay + DLG_TEXT[27];
           if (sti(PChar.money) >= topay)
           {
             Link.l1 = DLG_TEXT[29];
             Link.l1.go = "Pay";
           }
           Link.l2 = DLG_TEXT[28];
           Link.l2.go = "Exit";
           }
         }
       }
     break;


I think I have to delete one of the "making a payment to the smugglers guild sections" - but I don't know how to do that and keep Levis's original intentions in the code.

:shrug
 

Attachments

  • Smuggler Agent_dialog.c
    6.8 KB · Views: 191
Perhaps it's because you're using topay variable twice and its code it doesn't need its type defining the second time ie take away the int in front of it the second time it's used??
 
I have now modified the Smuggler Agent_dialog.c file as per your suggestion - but I have done something wrong again :modding.
To compare, this gives an error:
Code:
int topay = makeint(pow2((25-CheckSmugglerLiking(pchar)),3)*5);
int topay = makeint(pow2((25-CheckSmugglerLiking(pchar)),3)*5);
This does not:
Code:
int topay = makeint(pow2((25-CheckSmugglerLiking(pchar)),3)*5);
topay = makeint(pow2((25-CheckSmugglerLiking(pchar)),3)*5);
When you define a variable (as an 'int' in this case), you don't need to do the defining again (doing so will cause the error you got).

Attached file contains a much simpler solution though. Then you don't need to worry about this one at all. ;)
Please have a look at it and see if I got this right.... :wp
I'm a HUGE fan of not copying code if it isn't necessary. Especially on my day job, where that has recently been driving me NUTS! :wp
 

Attachments

  • Smuggler Agent_dialog.zip
    1.9 KB · Views: 193
@pedrwyth -- Thanks you were correct -- that made the file work :bow


@Pieter Boelen

Thanks -- :bow I have used your file as the code is much cleaner :yes and simpler to understand. - I just swapped the Links around because they appeared to be in the wrong order ( is this the cause of the query below - have I misunderstood the code/function):modding

Question : I have just talked to my 3rd Smugglers Agent ( all different ones) and he still used the additional dialog cases :unsure


So does :-

Code:
if (CheckAttribute(pchar, "amount_smuggleruns") && sti(pchar.amount_smuggleruns) > 2)

apply to the number of times you see an individual Agent ( i.e. you have to talk to the same agent twice before he stops using the additional dialog)

or is it supposed to count the conversations with all Agents - so my 3rd Agent should not have used the additional dialog. ( this is what I would like :yes )

There is no error.log - and I can see nothing in the compile & system logs

The last agent was in Speightstown Tavern.


:drunk
 

Attachments

  • system.log
    75.4 KB · Views: 190
  • compile.log
    82.6 KB · Views: 186
  • Smuggler Agent_dialog.c
    5.8 KB · Views: 173
Last edited:
If I understand correctly, that is a counter on the number of Smuggling runs you actually started.
So it doesn't depend on the agents you talk to.
 
Back
Top