• 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!

Fixed Can't take Teacher to Puerto Rico

Grey Roger

Sea Dog
Staff member
Administrator
Storm Modder
In "Strange Things Going On", if you go to Bridgetown prison to talk to the Teacher and don't have high enough Leadership skill to persuade the commandant to let you see him right away, you either threaten the commandant or go to Father Bernard to get a fake release letter. Either way, you then take the Teacher to Puerto Rico, where the screen goes black and the game gets stuck.

Attached are log files, along with a savegame on the worldmap near to Puerto Rico so you can try it for yourself.
 

Attachments

  • compile.log
    7.2 KB · Views: 112
  • error.log
    178 bytes · Views: 93
  • system.log
    6.5 KB · Views: 120
  • -=Player=- Open Sea December 6th, 1578.zip
    731.4 KB · Views: 106
Error:
Code:
RUNTIME ERROR - file: quests\quests.c; line: 880
invalid index -1 [size:900]
RUNTIME ERROR - file: quests\quests.c; line: 880
function 'ReloadFromWMtoL_complete' stack error
Can you post the code from "Quest name with_teacher_to_muelle_2 FOUND in SideQuestComplete"?
 
Code:
    case "with_teacher_to_muelle_2":
       DoQuestReloadToLocation("denielle_deck", "reload", "locator2", "with_teacher_to_muelle_21");
     break;

     case "with_teacher_to_muelle_21":
       DisableFastTravel(false);
       DisableMenuLaunch(false);
       RemoveOfficersIndex(pchar, GetCharacterIndex("Teacher"));
       ChangeCharacterAddress(characterFromID("Teacher"), "denielle_deck", "goto6");
       LAi_SetActorType(characterFromID("Teacher"));
       LAi_ActorDialog(characterFromID("Teacher"), pchar, "with_teacher_to_muelle_3", 2.0, 1.0);
     break;

What is "denielle_deck"?
 
Might be a typo ...
try changing it to "danielle_deck" maybe?
He should come to you when you are on the shipdeck?
 
:aar




denielle_deck --- is a Quest Location. :yes

It appears in QuestLocations.c in Program\Storyline\standard\locations\init

it is also there in the Jack Sparrow Story ( for Sao Feng Missing Bodyguards)

It appears it is just something that has not been moved from the Standard storyline to the new side quests - don't know if it is also used in the actual main Sea Hawk story at some point. :shrug


:type1
 
So copying the entire entry for "denielle_deck" to "PROGRAM\Locations\init\SideQuestLocations.c" ought to fix it?
 
Yes that should fix it indeed.
Make sure you remove it from both the standard and jack sparrow storyline after you set it in the main init
 
Yes that should fix it indeed.
Make sure you remove it from both the standard and jack sparrow storyline after you set it in the main init





If you remove it from the Jack Sparrow Story - will Sao Feng's Missing Bodyguards will break at the same point :shock

:duel:
 
If you remove it from the Jack Sparrow Story - will Sao Feng's Missing Bodyguards will break at the same point :shock

:duel:

If you init it at for all storylines it wouldn't ;).
You want this location to be defined in the main init and not in the storylines. And if you do it in both you will have dublicate locations which you don't want either.
 
If "Sao Feng's Missing Bodyguards" is part of the "Jack Sparrow" main story, will it pick up the location from "PROGRAM\Locations\init\SideQuestLocations.c", which by definition is presumably for side quests?
 
Sao Fengs Missing Bodyguard is an sidequest in the Jack Sparrow storyline. And it will find it in SideQuestLocations yes.
 
Can you take care of this @Grey Roger and report if its working again?
 
If "Sao Feng's Missing Bodyguards" is part of the "Jack Sparrow" main story, will it pick up the location from "PROGRAM\Locations\init\SideQuestLocations.c", which by definition is presumably for side quests?
The game doesn't care what file anything is defined in, as long as it is defined somewhere.
The only reason for having separate files is because it would be annoying for us if everything was thrown on one pile. :cheeky

Glad to hear this was a simple issue related to moving the Sidequests into all other storylines. :woot
 
I moved the entry in my game now as well so it should be fixed for the next versions.
Thanks for figuring this one out, gents! :doff
 
I'm not sure why this was marked "fixed" and archived before testing...

The Teacher does now appear on deck and tells you he doesn't trust you. Then you teleport to the San Juan tavern, he tells you about the island and you tell him to die.

Your ship is not at San Juan port. The icon to board is there, the ship's boat is not there and pressing Space or F3 does nothing. The same is true if you walk to Oyster Beach; the boarding icon is there, the boat isn't, pressing the keys to board doesn't work. You can teleport to your ship, which puts you on your deck; then you try to go to sea, the screen goes black, and the game is stuck.

Log files, one savegame on worldmap before you talk to the Teacher, and one savegame at San Juan port after you've killed the Teacher and want to go to the animists' island.
 

Attachments

  • compile.log
    13.8 KB · Views: 105
  • error.log
    2.8 KB · Views: 99
  • system.log
    3.9 KB · Views: 90
  • -=Player=- Open Sea December 15th, 1578.zip
    740 KB · Views: 76
  • -=Player=- Puerto Rico. San Juan port. December 15th, 1578.zip
    741.6 KB · Views: 87
Sounds like the player ship location isn't being set properly.
How do you get to San Juan? Is there another automatic reload from sea?
A SetFleetNearShore line (sp? Check console.c) might help to actually put your ship in an appropriate location.
 
I think the fleet ought to be set here:
Code:
    case "with_teacher_to_muelle_3":
       pchar.quest.ANIMISTS = "with_teacher_in_tavern";
       ChangeCharacterAddress(characterFromID("Teacher"), "Muelle_tavern_upstairs", "goto4");
       DoQuestReloadToLocation("Muelle_tavern_upstairs", "goto", "goto3", "with_teacher_to_muelle_4");
       if (GetNationRelation2MainCharacter(SPAIN) != RELATION_ENEMY)
       {
         pchar.location.from_sea = "Muelle_port";
         SetFleetInTown(GetTownIDFromLocID(pchar.location.from_sea), "pchar"); // NK 05-04-02 WM/IT set fleet.
       }
       else
       {
         pchar.location.from_sea = "Muelle_shore_01";
         SetFleetInTown(GetTownIDFromLocID(pchar.location.from_sea), "pchar"); // NK 05-04-02 WM/IT set fleet.
       }
     break;
As Francis Drake, I am indeed hostile to Spain, so that ought to send me to "Muelle_shore_01". But I tried hiking to the beach and still did not see the ship or the boat. Perhaps 'SetFleetInTown' ought to be 'SetFleetNearShore'?
 
I think the fleet ought to be set here:
Code:
    case "with_teacher_to_muelle_3":
       pchar.quest.ANIMISTS = "with_teacher_in_tavern";
       ChangeCharacterAddress(characterFromID("Teacher"), "Muelle_tavern_upstairs", "goto4");
       DoQuestReloadToLocation("Muelle_tavern_upstairs", "goto", "goto3", "with_teacher_to_muelle_4");
       if (GetNationRelation2MainCharacter(SPAIN) != RELATION_ENEMY)
       {
         pchar.location.from_sea = "Muelle_port";
         SetFleetInTown(GetTownIDFromLocID(pchar.location.from_sea), "pchar"); // NK 05-04-02 WM/IT set fleet.
       }
       else
       {
         pchar.location.from_sea = "Muelle_shore_01";
         SetFleetInTown(GetTownIDFromLocID(pchar.location.from_sea), "pchar"); // NK 05-04-02 WM/IT set fleet.
       }
     break;
As Francis Drake, I am indeed hostile to Spain, so that ought to send me to "Muelle_shore_01". But I tried hiking to the beach and still did not see the ship or the boat. Perhaps 'SetFleetInTown' ought to be 'SetFleetNearShore'?
I never did understand what "SetFleetInTown" does, but it does NOT do what you need it to do. Check console.c near the QuestReloadToLocation lines that are near the top of the file and see the function that is called there.
Pretty sure that is a different function and that is the one you need.

(Yes, it's confusing. :facepalm )
 
There are several things confusing me. One is what these various functions do. Another is why some refer to "GetTownIDFromLocID(pchar.location.from_sea)" while others simply look at "pchar.location.from_sea". And then there's why I had to look at "console.c" when there's an even better example further up in "quests_side.c", specifically where a very similar piece of code places your fleet after meeting up with the Montanez depending on whether you're hostile to Bridgetown. ;)

Judging by that (and a couple of other lines), what I want is 'PlaceFleetNearShore(pchar.location.from_sea)'.
 
Another is why some refer to "GetTownIDFromLocID(pchar.location.from_sea)" while others simply look at "pchar.location.from_sea".
Because whatever SetFleetInTown does, it is something COMPLETELY UNRELATED to actually putting your ship in a real location.
I never did understand and I think it is related to a mod that was never finished anyway or something related to the town economy. Or something. o_O

And then there's why I had to look at "console.c" when there's an even better example further up in "quests_side.c", specifically where a very similar piece of code places your fleet after meeting up with the Montanez depending on whether you're hostile to Bridgetown. ;)
If you found an example in quests_side.c, that's of course also fine.
Reason I suggested console.c is because I know it is there and I know exactly where. But of course it is used in various other spots too.

Judging by that (and a couple of other lines), what I want is 'PlaceFleetNearShore(pchar.location.from_sea)'.
Yep, that's the one you want. :onya
 
Back
Top