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

Devlin Opera for the 65742th time

Just for fun I ripped the map you have chosen in two pieces. Use them if you want.
If so you could have three items of the map: part1, part2 and put together.
 

Attachments

  • map ripped apart.7z
    106.4 KB · Views: 205
Another thought:
There is a Monkey Island easter egg in the mod.
Antigua tavern, just outside town, I believe.
Right now it doesn't lead anywhere.
But you could make use of it if you want.
I was there, but not sure what to look for because I don't know Monkey Island. Some bloke told me about cannibals, but not sure if this was a random encounter?

Just for fun I ripped the map you have chosen in two pieces. Use them if you want.
If so you could have three items of the map: part1, part2 and put together.
Great! Absolutely!
 
I was there, but not sure what to look for because I don't know Monkey Island. Some bloke told me about cannibals, but not sure if this was a random encounter?
It was something with an interface showing the Monkey Island map.
If you give the guy the correct responses, that is.
 
The heads all work
Actually there's still a little problem with Blaze's head. When I add a voice clip (greeting) the head moves in a similar weird way to the issue we had with BeatriceB in the other thread…


Plus another question regarding story-specific locations:

Unique locations are placed in a special "location" folder inside the storyline folder, right? But how does it work if I want to change a general location in the storyline? In this case, I wanted to open up a house in Redmond port (starting Location). So I thought if I have Redmond port in both Storylines\DevlinOpera\locations and the normal Location Folder, the storyline one would overwrite the normal one when I'm in the storyline. So I copied the "Redmond" file into Storylines\DevlinOpera\Locations and added my changes there, in this case adding a door to locator Door_4 and it doesn't work. It's not that the door is closed or the new house is broken, it just didn't change anything, no door icon etc.
 
Unique locations are placed in a special "location" folder inside the storyline folder, right? But how does it work if I want to change a general location in the storyline? In this case, I wanted to open up a house in Redmond port (starting Location). So I thought if I have Redmond port in both Storylines\DevlinOpera\locations and the normal Location Folder, the storyline one would overwrite the normal one when I'm in the storyline. So I copied the "Redmond" file into Storylines\DevlinOpera\Locations and added my changes there, in this case adding a door to locator Door_4 and it doesn't work. It's not that the door is closed or the new house is broken, it just didn't change anything, no door icon etc.
You can add the reload in the regular location init files, but set "disable = 1" so it doesn't show.
Then in the StartStoryline file add something like this from the Hornblower one:
Code:
Locations[FindLocation("Santo_Domingo_town")].reload.l25.disable = 0;
 
Actually there's still a little problem with Blaze's head. When I add a voice clip (greeting) the head moves in a similar weird way to the issue we had with BeatriceB in the other thread…
This is strange because when testing on Jupiter I never see anything of it. Can it has to do with how the character is put into play?
I will remove Devlin's head as it doesn't work perfect.

Unique locations: change in the normal locations folder for Redmond Port. You can then choose to have that special door locked as
default:
Code:
Locations[n].reload.l20.disable = 1;

And add a line in your storyline somewhere (maybe StartStoryline) to open it:
Code:
Locations[FindLocation("Redmond_port")].reload.l20.disable = 0;
 
About location: Perfect, I understand. Thanks! For later maybe: And if I want to change where a reload locator leads to? For example fill a junge section between two other jungle sections to allow more paths, for additional quest locations.

About the head and how I put it into play: I'm on a different Computer right now, but in the characters file he has a line which is something like ch.model.animation = "blaze"; because Bonnie Devlin has the same with ch.model.animation = "Beatrice"; so I looked where that Beatrice animation file was and saw one called blaze, so I figured I had to choose that to fill in. Perhaps it has something to do with that?
 
Hmm, I guess so because "Jupiters" head was ok but his body certainly not. And he didn't have that animation.

And if I want to change where a reload locator leads to? For example fill a jungle section between two other jungle sections to allow more paths, for additional quest locations.
If that extra inserted jungle location only should appear in your storyline:
Add the code for where the reload locator leads to for.ex in your StartStoryline.c. (you can see many such lines in WR StartStoryline.c in the beginning)
The extra jungle location can be placed in your Questlocations.c

If the new inserted jungle location should always be there add it in the normal locations folder. But then you'll have dead ends I guess leading nowhere...(except in your storyline)
 
About location: Perfect, I understand. Thanks! For later maybe: And if I want to change where a reload locator leads to? For example fill a junge section between two other jungle sections to allow more paths, for additional quest locations.
You can just about do everything on the fly if you want to.
For an extreme example, look at PROGRAM\KR_Reinit.c .
That entire function can be run from console and vastly extends the Cozumel locations compared to the original game.
Not only does it change the reloads; but it adds whole new locations.
And it would work on an existing savegame; so no New Game required.
 
Making some babysteps every day currently... Prepared the house in the Redmond port as a future setting for jumpstarts (the idea is that you find it if you follow the messenger when he runs away) and did some tweaks and changes according to my ideas up until the meeting with Short Jack Gold. No major questions right now, but there soon will be a few but I'll ask them when I actually get there.

The only thing I'm wondering right now is that sometimes I start the quest and it's raining heavily. Even though there is the line SetNextWeather("Blue Sky"); both in StartStoryline and quest_reaction in the case "Start". And as everybody knows:

I hate rain both in game and in real life
 
SetNextWeather cannot change the existing weather. As best it can give you clear weather in the next location (after a reload). But I'm not quite sure
that's always the case either.

I use SetNextWeather("Clear"); maybe it's the same as Blue Sky.
 
More babysteps have happened and here's another question:

What would be the best way to disable the Artois Voysey and Nigel Blythe quests? For most other sidequests, I could just move the character to nowhere in an early quest case (and move him back when the storyline is finished). Bur for Artois and Nigel it feels a bit more complicated. Will it be enough to change their character adress to "none" or could I maybe interrupt the quest condition based on entering QC_town?

The reason is that I don't really want side quests to interfere with the main story before it's finished, and with Artois and Nigel the problem is that even when you refuse to take them on as an officer you get a quest book entry and a sort of story cutscene, you basically get the quest thrown at you. And because Beatrice visits the pirate settlement early in the main story I don't really want a sidequest being "forced" upon you at this point in the story.
 
I have these lines in WR StartStoryline:

Code:
DeleteAttribute(PChar, "quest.Install_Voysey_And_Blythe");                                //disables sidequest in Nevis
    DeleteAttribute(&Locations[FindLocation("QC_town")],"vcskip");                                //disables sidequest in Nevis
    ChangeCharacterAddress(characterFromID("Marc Blacque"), "none", "");                             //disables Blaque sidequest in Port Royal
    ChangeCharacterAddress(characterFromID("Milon Blacque"), "none", "");                            //disables sidequest
    ChangeCharacterAddress(characterFromID("Willem Voigt"), "none", "");                            //disables sidequest
    ChangeCharacterAddress(characterFromID("Rian Dekkers"), "none", "");                            //disables sidequest
    ChangeCharacterAddress(characterFromID("Janneke Blinkerhof"), "none", "");                        //disables sidequest
    ChangeCharacterAddress(characterFromID("Lisebet Schefold"), "none", "");                        //disables sidequest

Someone helped me with that. It disables at least some sidequests including Voysey/Blyhte.
 
This helped for my purpose. Of course it would be 'fair' to make the quests available again later, but on the other side I feel like a main quest can (should) be its own thing and doesn't need to have everything for free play etc. I leave it without the side quests for the moment.

And now for something completely different:

If there are quest scenes, talking scenes on my ship (for example in the cabin) do I use my actual ship as if I go from port to sea? or do I 'fake' it with quest locations?

If it's the actual ship, then what are the location id's for that, and also how is it determine if and how many of the officers join me there? Sometimes an officer follows me into the captain cabin, but only one of the etc... If I want talking scenes with Blaze and Bonnie (officers) in the cabin I maybe needed to bring them there manually.

If it's a quest location, couldn't be a problem that the cabin for example is a different one than the cabin of the player's actual ship at that moment?
 
If it's the actual ship, then what are the location id's for that
Put this in console.c to check that:
Code:
Logit("Location: "+ locations[FindLocation(Pchar.location)].id);
and if you want to check which locatorfile is used:
Code:
Logit("Locatorfile: "+ locations[FindLocation(Pchar.location)].models.always.locators);

Officers normally follow you into a new location IF there are officers locators for them.
To see the locators go to the last part of internalsettings and turn it on.
Not sure about ship cabins and officers though.

The easiest way to use a fake cabin is to "jump" from a seashore or whatever. When the action is done "jump" back or elsewhere.
The only problem is like you said the cabin may differ from the real one.

DoQuestReloadToLocation(etc etc is a way to jump.
 
Put this in console.c to check that:

DoQuestReloadToLocation(etc etc is a way to jump.
Based on some tests I did, reloading to tutorial_deck kinda works, but there are very few locators in the small cabin, for other cabins they may be different and sometimes it was very unstable, for example when I executed the console from my ship deck, I suddenly had the cabin floating OVER the deck and stuff.

I think the best way for quest scenes where they meet in the cabin is:
- lock the choice of starting ship (I wanted to do that anyway as soon as I commit to a ship)
- use a quest location for the cabin
- when a player desperately wants to obtain a different ship with a different cabin, which is not the idea of my story, then it's their fault if the quest cabin isn't the same as the proper cabin, but it still wouldn't be game-breaking or anything like that

But maybe someone like @Pieter Boelen has some input or idea for that.
 
This helped for my purpose. Of course it would be 'fair' to make the quests available again later, but on the other side I feel like a main quest can (should) be its own thing and doesn't need to have everything for free play etc. I leave it without the side quests for the moment.
Choice is yours, of course.
But should be easy enough to reinstate the sidequest availability once you reached a point in the story where you feel that is OK.

If there are quest scenes, talking scenes on my ship (for example in the cabin) do I use my actual ship as if I go from port to sea? or do I 'fake' it with quest locations?
Fake quest locations are far easier.
I tried once with the real ship location in the "Davy Jones"-at-sea scene in First Contact.
That was tricky...

So tricky, in fact, that it looks like @konradk had to fix it up for me.
Here's the relevant section of code from quests_side.c:
Code:
       case "Contact_NoLuck":
           Characters[GetCharacterIndex("antigua_portadmiral")].dialog.CurrentNode = "First time";
           PChar.quest.Firstcontact = "prepare_davyencounter";
           AddQuestRecord("Contact", 11);
           Group_CreateGroup("FlyingDutchman");
           Group_AddCharacter("FlyingDutchman", "Davy Jones");
           Group_SetGroupCommander("FlyingDutchman", "Davy Jones");
           Group_SetPursuitGroup("FlyingDutchman", PLAYER_GROUP);
           Group_SetTaskAttack("FlyingDutchman", PLAYER_GROUP, true);
           Group_SetAddress("FlyingDutchman", "Cayman", "Quest_ships", "Quest_ship_12");
           Group_LockTask("FlyingDutchman");
           UpdateRelations();
           characters[GetCharacterIndex("Davy Jones")].nosurrender = 2;
           Characters[GetCharacterIndex("Davy Jones")].recognized = true;
           Character_SetAbordageEnable(characterFromID("Davy Jones"), false);
// KK -->
           PChar.quest.PrepareDavyEncounter.win_condition.l1 = "MapEnter";
           PChar.quest.PrepareDavyEncounter.win_condition = "PrepareDavyEncounter";
// <-- KK
       break;

// KK -->
       case "PrepareDavyEncounter":
           SetNextWeather("Day Storm");
           PChar.quest.StartDavyEncounter.win_condition.l1 = "SeaEnter";
           PChar.quest.StartDavyEncounter.win_condition = "StartDavyEncounter";
       break;

       case "StartDavyEncounter":
           PChar.quest.voirdavy.win_condition.l1 = "location";
           PChar.quest.voirdavy.win_condition.l1.location = GetCharacterShipQDeck(PChar);
           PChar.quest.voirdavy.win_condition = "voirdavy";

           bQuestDisableAllCommands = true;
           Sea_DeckStartNow(GetMainCharacterIndex(), GetCharacterShipQDeck(PChar));
       break;
// <-- KK

       case "voirdavy":
           //ChangeCharacterAddressGroup(CharacterFromID("Davycrew_01"), PChar.location, "rld", "loc0");
           SetCharacterToNearLocatorFromMe("Davy Jones", 3);
           //SetCharacterToNearLocatorFromMe("Davycrew_01", 10);

           LAi_type_actor_Reset(characterFromID("Davycrew_02"));
           //ChangeCharacterAddressGroup(CharacterFromID("Davy Jones"), PChar.location, "rld", "loc2");
           LAi_SetActorType(pchar);
           LAi_SetActorType(characterFromID("Davy Jones"));
           LAi_ActorWaitDialog(CharacterFromID("Davy Jones"), Pchar);
           LAi_ActorDialog(pchar, characterFromID("Davy Jones"), "", 10.0, 1.0);
       break;

You could experiment with that if you think it might suit your purposes.
But:
I think the best way for quest scenes where they meet in the cabin is:
- lock the choice of starting ship (I wanted to do that anyway as soon as I commit to a ship)
- use a quest location for the cabin
- when a player desperately wants to obtain a different ship with a different cabin, which is not the idea of my story, then it's their fault if the quest cabin isn't the same as the proper cabin, but it still wouldn't be game-breaking or anything like that
That right there is far easier to control. :onya
 
Back
Top