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

Including sidequests in a new storyline

Jason Maffettone

Lord of Entropy
Quest Writer
Provisional
Storm Modder
Hey all, I just made a custom storyline and I want to include all the side quests from the main game; everything not related to the main quest. The examples here include a couple here and there but I want all of them and its not obvious what I need to port over into my new folder to accomplish this.

Any help would be greatly appreciated.

bbf.jpg
 
Last edited:
http://www.piratesahoy.net/wiki/new-horizon-quests/
If you copy Master & Commander/The Buccaneer, then you get a whole bunch of sidequests already included.
Not all, because the person who was working on separating them from the Standard storyline stopped work on it at some point.
Each quest is spread out over a great many files, so you'd have to find all relevant code sections and add them into your new storyline folder.
See this thread for further reference: http://www.piratesahoy.net/threads/sidequests-for-additional-storylines.20555/

If you would be interested to work on this, by all means please do so!
Select a quest you'd like to move over and if you get stuck, post here so we can point you in the right direction. :doff
 
What about doing it this way: Can I simply move the ENTIRE standard story, with all the side quests, into the new storyline and simply disable the mainstory missions with an eye twoards stripping them out as I go along? This way, in the end, we would have a compilation of ALL the non-Seahawk quests that could simply be dropped in any current or new storyline folder. Simply preventing the French invasion of Oxbay should render the entire standard storyline inaccessable.
 
You can certainly try. You'd probably end up with quite a lot of code-clutter though.
I never saw any objection to the main quest being there anyway; you can easily ignore it and do something else. :shrug
 
On the case!

Now, to stop the main storyline from happenning (in the short term before I get it stripped down) I can just comment-out (//) the initial mission, correct?
 
Do it (/* */) and see what happens. Maybe you want to get rid of Malcolm Hatcher too - or not.
You'll see what works.
 
Well, the both_reaction file seemed to have nothing but main story info in it so I just didn't include it and so far everything seems alright. Found and hired Rys Bloom in Port Royal and met the pirate chick on one of the Spanish islands that wants to rob the mine. The only thing that I notice is missing so far is the two guys that are having the fight at the pirate port and one joins you after and you have that trasure mission with. Forget the names. You can stop the bully from killing the navigator when you first enter the pirate settlement. That's not there although I start the player in the tavern of the pirate settlement so maybe that has something to do with it.

Another odd thing. I have you start at the tavern in the pirate port and if you use the quick travel to go to the port it brings you to the tavern while on that island and it doesn't put your ship at the pirate port but rather the English settlement on the far side of the island. Not sure why...
 
Both_reaction.c in the Standard storyline contains a lot of Tutorial stuff, but I think also a bit of Sideques affairs.
Do you have the correct SetCharacterShipLocation line?
 
Didn't think to look at the indicators. Assumed that since I was at the pirate port it would put my ship there. I assumed over much it seems, lol. Where would one locate the SetCharacterShipLocation line?
 
Probably just before the QuestReloadToLocation line. Example from console.c:
Code:
    //   DoQuestReloadToLocation("Oxbay_Port", "reload", "reload1" ,"_");
     //   SetCharacterShipLocation(Pchar, "Oxbay_Port");
 
Okay, how do I prevent the French invasion of Oxbay, so as to derail the whole main storyline, without causing the entire game to foul up. Everything I've tried ends up causing an error to occure.
 
quests_reaction.c, this code is what is triggered for the French Invasion:
Code:
    case "Story_leavingOxbay":
       ChangeCharacterAddress(characterFromID("Guy Gilroy"), "none", ""); // NK 05-07-20

       Locations[FindLocation("Oxbay_town_exit")].locators_radius.goto.citizen08 = 12.0;
       Locations[FindLocation("Falaise_De_Fleur_location_03")].reload.l3.disable = 0; // NK
       //âêëþ÷àåì êîðàáëü îäíîãî èç îôèöåðîâ.
       setCharacterShipLocation(characterFromID("Clair Larrouse"), "Muelle_port"); // boal
       //Óñòàíîâêà àòðèáóòà äëÿ ïðîâåðêè çàõâà÷åííîñòè Îêñáýÿ
       PChar.Quest.Story_OxbayCaptured = "1";
       //Ñìåíà íàöèîíàëüíîñòè ôîðòà Îêñáýÿ
       // KK Characters[GetCharacterIndex("Oxbay Commander")].nation = FRANCE;
       // KK Characters[GetCharacterIndex("Oxbay Commander")].model = "Soldier_fra";
       // NK - LAi_SetImmortal(characterFromID("Oxbay Commander"), true);
       // KK SetTownNation("Oxbay", FRANCE); // NK
       //Ñìåíà àíãëèéñêèõ ñîëäàò â Îêñáýå íà ôðàíöóçñêèõ
       //Óäàëåíèå àíãëèéñêèõ
       CaptureTownForNation("Oxbay", FRANCE);   // KK

       // KK: Set French Soldiers for Oxbay -->
       for (int n = 0; n < CHARACTERS_QUANTITY; n++)
       {
         if (!CheckAttribute(characters[n], "location")) continue;
         if (FindLocation(characters[n].location) == -1) continue;
         if (GetTownIDFromLocID(characters[n].location) == "Oxbay")
         {
           if (isOfficer(characters[n])) continue;     // LDH fix for our officers becoming French soldiers on leaving Oxbay - 19Jan09
           if (isSoldier(characters[n]) != UNKNOWN_NATION)
           {
             characters[n].Dialog.Filename = "Story_Fra_Occup_common_dialog.c";
             characters[n].greeting = "Gr_Story_French Occupant";
           }
         }
       }
       // KK: Set French Soldiers for Oxbay <--

       // ADDING GOODS AND CREW TO THEIR SHIPS // changed by MAXIMUS [gunpowder mod] --> // KK -->
       SetCrewQuantity(characterFromID("Remy Gatien"), makeint(GetMaxCrewQuantity(characterFromID("Remy Gatien"))));
       SetCharacterGoods(characterFromID("Remy Gatien"),GOOD_WHEAT,makeint(sti(GetCrewQuantity(characterFromID("Remy Gatien"))) * FOOD_PER_CREW * WHEAT_DAYS));
       SetCharacterGoods(characterFromID("Remy Gatien"),GOOD_RUM,makeint(GetCrewQuantity(characterFromID("Remy Gatien"))) * FOOD_PER_CREW * RUM_DAYS));
       SetCrewQuantity(characterFromID("Yves Giner"), makeint(GetMaxCrewQuantity(characterFromID("Yves Giner"))));
       SetCharacterGoods(characterFromID("Yves Giner"),GOOD_WHEAT,makeint(sti(GetCrewQuantity(characterFromID("Yves Giner"))) * FOOD_PER_CREW * WHEAT_DAYS));
       SetCharacterGoods(characterFromID("Yves Giner"),GOOD_RUM,makeint(GetCrewQuantity(characterFromID("Yves Giner"))) * FOOD_PER_CREW * RUM_DAYS));
       SetCrewQuantity(characterFromID("Begon Monchaty"), makeint(GetMaxCrewQuantity(characterFromID("Begon Monchaty"))));
       SetCharacterGoods(characterFromID("Begon Monchaty"),GOOD_WHEAT,makeint(sti(GetCrewQuantity(characterFromID("Begon Monchaty"))) * FOOD_PER_CREW * WHEAT_DAYS));
       SetCharacterGoods(characterFromID("Begon Monchaty"),GOOD_RUM,makeint(GetCrewQuantity(characterFromID("Begon Monchaty"))) * FOOD_PER_CREW * RUM_DAYS));
       // ADDING GOODS AND CREW TO THEIR SHIPS // changed by MAXIMUS [gunpowder mod] <-- // <-- KK

       // ADDING GUNPOWDER TO THEIR SHIPS // added by MAXIMUS [gunpowder mod] -->
       if (CANNONPOWDER_MOD) {// TIH --> mod toggle 7-7-06
         canQty = 0;
         crewQty = 0;
         canQty = GetCannonQuantity(characterFromID("Remy Gatien"));
         crewQty = GetCrewQuantity(characterFromID("Remy Gatien"));
         SetCharacterGoods(characterFromID("Remy Gatien"),GOOD_GUNPOWDER,makeint(canQty*5)+makeint(crewQty*3));
         canQty = GetCannonQuantity(characterFromID("Yves Giner"));
         crewQty = GetCrewQuantity(characterFromID("Yves Giner"));
         SetCharacterGoods(characterFromID("Yves Giner"),GOOD_GUNPOWDER,makeint(canQty*5)+makeint(crewQty*3));
         canQty = GetCannonQuantity(characterFromID("Begon Monchaty"));
         crewQty = GetCrewQuantity(characterFromID("Begon Monchaty"));
         SetCharacterGoods(characterFromID("Begon Monchaty"),GOOD_GUNPOWDER,makeint(canQty*5)+makeint(crewQty*3));
       }// TIH <-- mod toggle
       // ADDING GUNPOWDER TO THEIR SHIPS // added by MAXIMUS [gunpowder mod] <--

       Group_CreateGroup("Story_French_Squadron");
       Group_AddCharacter("Story_French_Squadron", "Remy Gatien");
       Group_AddCharacter("Story_French_Squadron", "Yves Giner");
       Group_AddCharacter("Story_French_Squadron", "Begon Monchaty");
       Group_SetGroupCommander("Story_French_Squadron", "Remy Gatien");
       Group_SetAddress("Story_French_Squadron", "Oxbay", "Quest_Ships","Quest_Ship_7");

// KK -->
       if (!CheckQuestAttribute("StartAdventure", "begin")) {
         //Ïåðåìåùåíèå Ðåéìñà â ðåçèäåíöèþ ãóáåðíàòîðà
         ChangeCharacterAddress(characterFromID("Raoul Rheims"), "Redmond_residence", "goto1");

         //Çàâåäåíèå êâåñòà íà âñòðå÷ó ñ Ðåéìñîì â ðåçèäåíöèè ãóáåðíàòîðà è óõîä Ðåéìñà
         Pchar.quest.Story_First_Meeting_with_Rheims.win_condition.l1 = "location";
         Pchar.quest.Story_First_Meeting_with_Rheims.win_condition.l1.location = "redmond_residence";
         Pchar.quest.Story_First_Meeting_with_Rheims.win_condition = "Story_First_Meeting_with_Rheims";

         //çàâåäåíèå êâåñòà íà äèàëîã ñî ñòðàæíèêîì
         if(GetServedNation() == ENGLAND || GetServedNation() == PERSONAL_NATION)
         {
           pchar.quest.first_time_to_redmond_townhall.win_condition.l1 = "locator";
           pchar.quest.first_time_to_redmond_townhall.win_condition.l1.location = "Redmond_town_01";
           pchar.quest.first_time_to_redmond_townhall.win_condition.l1.locator_group = "goto";
           pchar.quest.first_time_to_redmond_townhall.win_condition.l1.locator = "goto10";
           pchar.quest.first_time_to_redmond_townhall.win_condition = "first_time_to_redmond_townhall_complete";
         }

         Locations[FindLocation("Redmond_town_01")].locators_radius.goto.goto10 = 2.0;

         DeleteQuestHeader("Tutorial_SpyGlass");
         DeleteQuestHeader("Tutorial_Store");
         DeleteQuestHeader("Tutorial_Shipyard");
         DeleteQuestHeader("Tutorial_Tavern");

         Pchar.quest.Tut_SellGoods.over = "yes";
         Pchar.quest.Tut_RepairShip.over = "yes";
         Pchar.quest.Tut_HireCrew.over = "yes";
       // TIH --> alternative methods for completion finished Sep3'06
         Pchar.quest.Tut_BuySpyGlass.over = "yes";
         Pchar.quest.Tut_BuySpyGlass3.over = "yes";
         Pchar.quest.Tut_BuySpyGlass4.over = "yes";
       // TIH <--
         DeleteAttribute(Pchar, "quest.tutorial.Spyglass");

//KK & TIH -->
         SetQuestHeader("Story_OxbayCaptured");
         if (ENABLE_FLAGS == 0) {
           // do the original code, original quest text only
           AddQuestRecord("Story_OxbayCaptured", 2);
           PostVideoAndQuest("Invasion",500,"Story_MapLoadAfterleavingOxbay");
           bSkipSeaLogin = true;
         } else {
           // do enhanced flag deception and sailing method
           AddQuestRecord("Story_OxbayCaptured", 1);
           Pchar.quest.Story_InvasionVideoAfterLeaveOxbay.win_condition.l1 = "MapEnter";
           Pchar.quest.Story_InvasionVideoAfterLeaveOxbay.win_condition = "Story_InvasionVideoAfterLeaveOxbay";
         }
//KK & TIH <--
         Locations[FindLocation("Oxbay_town")].reload.l2.disable = false;
         Locations[FindLocation("Oxbay_town")].reload.l55.disable = false;
       }
// <-- KK
     break;
It contains some stuff that you might want to keep, so I'd recommend removing only the lines related to the invasion and main quest.
I'd imagine something like this:
Code:
    case "Story_leavingOxbay":
       ChangeCharacterAddress(characterFromID("Guy Gilroy"), "none", ""); // NK 05-07-20

       Locations[FindLocation("Oxbay_town_exit")].locators_radius.goto.citizen08 = 12.0;
       Locations[FindLocation("Falaise_De_Fleur_location_03")].reload.l3.disable = 0; // NK
       //âêëþ÷àåì êîðàáëü îäíîãî èç îôèöåðîâ.
       setCharacterShipLocation(characterFromID("Clair Larrouse"), "Muelle_port"); // boal
// KK -->
       if (!CheckQuestAttribute("StartAdventure", "begin")) {
         Locations[FindLocation("Redmond_town_01")].locators_radius.goto.goto10 = 2.0;

         DeleteQuestHeader("Tutorial_SpyGlass");
         DeleteQuestHeader("Tutorial_Store");
         DeleteQuestHeader("Tutorial_Shipyard");
         DeleteQuestHeader("Tutorial_Tavern");

         Pchar.quest.Tut_SellGoods.over = "yes";
         Pchar.quest.Tut_RepairShip.over = "yes";
         Pchar.quest.Tut_HireCrew.over = "yes";
       // TIH --> alternative methods for completion finished Sep3'06
         Pchar.quest.Tut_BuySpyGlass.over = "yes";
         Pchar.quest.Tut_BuySpyGlass3.over = "yes";
         Pchar.quest.Tut_BuySpyGlass4.over = "yes";
       // TIH <--
         DeleteAttribute(Pchar, "quest.tutorial.Spyglass");

         Locations[FindLocation("Oxbay_town")].reload.l2.disable = false;
         Locations[FindLocation("Oxbay_town")].reload.l55.disable = false;
       }
// <-- KK
     break;
I think that keeps all tutorial+sidequest code intact.
 
I'm keeping the tutorial in place. I've changed Malcolm to a Brittish naval officer and reworked the dialogue so that it explains the background of the storyline. Essentially you port in Barbados to drop off the officers and crew who didn't want to take part in the mutany and he lets you know that the pirates you captured are willing to stay on as your new officers. I have all that in-game now I haven't been able to disable the main quest without crashing the game though.
 
Okay, that seems to have done the trick, thank you, Peter. there is an issue, however, and it is not unique to me--I've noticed this with the free play story lines already in the game: The quest book does not have any text in it. You have the "?" and check marks for current missions displayed on the right-hand side but the actual text lines are blank.
 
Back
Top