• 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

Why would you want to play as a pirate in "Devlin Opera"? Consider:
As a pirate, you'd want a fast, well-armed ship with plenty of hold space for looted cargo. To join the Pirate Brethren, you go to Turks Island, where - for a price - the governor makes the pirates friendly to you. Then you go to Nevis Pirate Settlement to sign up with the Brotherhood.

The first thing "Devlin Opera" does is to give you a fast galleon, which is a disgustingly awesome ship for a pirate. The second thing it does is to send you to San Salvador, alias Turks Island - to the governor's residence, no less! The third thing it does is to send you to Nuestra Señora Nieves, alias Nevis. About the only thing it doesn't do is have Bonnie say that pirates have a lot of fun and she wants to be one. (Though it does tell you to hoist a pirate flag before you go to San Salvador.)
So really, the question is, why would you not want to play as a pirate in "Devlin Opera"? :aar

Cuba: no problem with sending the player to the port, just give a better reason in game for doing so. Spawning right next to the port is fine, it saves a lot of searching around if you don't have a map of the island and can't use Sail-To.

Crewmember: strangely, if I sped up time then he'd always make it to me. Only if I left time at normal rate did he always stop short. He originally had 20 seconds.

Bonnie: there are two obviously different solutions - tell Rocoso to hide, or stay and face Don Evaristo. The latter worked without any trouble. If you hide Rocoso then, when you leave the shipyard, Dragan is right there in front of you. Originally when I couldn't buy the cloak, I thought the quest had broken, and I only found that you could talk to the crew guards when I looked through the code. Besides, given the trouble you had getting the cloak to work, it would be a shame if most players never see it! As for sitting, if you use the jumpstart to get to Santiago straight away then Bonnie will probably sit because 'PChar.model.animation' is probably inherited from the definition of "Beatrice" in "initModels.c", where her animation is set to "woman_sit". But if you go to Martinica and play as either Bonnie or Blaze then it will end with "Switch_to_Beatrice", which sets 'PChar.model.animation' to "Beatrice". From that moment on, Beatrice and Bonnie are doomed never to be able to sit again.

I originally created the blank dialog files to help when I was writing "Ardent". Several of the storyline's dialogs refer to "Taíno", with the accent, and I've never seen this problem before, which is why I didn't give it a second thought when I changed "Rocoso Balboa_dialog.h". Then I tried playing as Bonnie and saw the weirdness.

I'm hoping to get the next update out soon - it's well overdue!
 
So really, the question is, why would you not want to play as a pirate in "Devlin Opera"? :aar
Because pirates suck and being a peaceful explorer and spreader of good will and/or merchant/transporter is FAR more fun.

Funny story...
The above sentence is actually my REAL GENUINE TRUE-TO-LIFE opinion.

For context:
This site is called PIRATESAhoy!
I am its officially registered owner who is personally financing the bills.
And I am (again) going on record here for saying I actually do NOT care for PIRATES!

I say this for the very simple reason:
That this is my TRUTH!
 
Fair enough. I'm just not much of a Free player I guess.

Cloak: I was thinking if you don't have money for Dragan, then you probably go look for some. You'll either find a randitem or you'll find the two troublemakers assigned to guard duty, in which case you probably remember the unused Dragan option for another time (assuming people want to go back and replay certain parts or the whole thing - after all, the first, second and spoiler alert fourth chapter offer different paths). Or you found money in some shape or form already on your way to the tavern. Do you think Dragan spawning near the shipyard makes him that obvious? If so, maybe it's the option to talk to the sailors instead that would go mostly unused, if everybody can always pay Dragan.

Sitting: That makes sense, after all I played through Santiago countless times but I think only once since I started the Bonnie path did I start from the beginning, so that must have been when she didn't sit. But I understand this is fixed? NPC Bonnie, NPC Blaze and player Beatrice are supposed to sit down together in Santo Domingo soon. Instead of always standing in their cabin, this time they are going to discuss stuff in the tavern. :cheers

I'm a bit hesitant to continue on the quest beyond the locators, if I don't have the more or less final version of what's there so far, be it through uploads here or through the next update. Because then I'd have to merge files sooner or later. :cheeky But I'm probably overthinking again.
 
I'm just not much of a Free player I guess.
And yet...
You are clearly VERY MUCH a Free STORYLINE CREATOR!
Plus a Free PIRATE too!

And despite my outlook on pirates and piracy...
It cannot be denied...
That I AM a Free Pirate also.
Same as yerself. :cheers


So FREE we are.
That much we have proved just now.


I guess we're not really players though.
Same goes for me too.

Which is a shame.
PLAYERS are the ones who get all the girls... :love
 
I'm a bit hesitant to continue on the quest beyond the locators, if I don't have the more or less final version of what's there so far, be it through uploads here or through the next update. Because then I'd have to merge files sooner or later. :cheeky But I'm probably overthinking again.
We need a better code-sharing system.
A better update-creation system also.

I believe @Hammie, @Mad Jack Wolfe and/or @Levis should be capable to help.
Maybe even the NOT-late, VERY great @NathanKell! :bow
 
Cloak: I was thinking if you don't have money for Dragan, then you probably go look for some. You'll either find a randitem or you'll find the two troublemakers assigned to guard duty, in which case you probably remember the unused Dragan option for another time (assuming people want to go back and replay certain parts or the whole thing - after all, the first, second and spoiler alert fourth chapter offer different paths). Or you found money in some shape or form already on your way to the tavern. Do you think Dragan spawning near the shipyard makes him that obvious? If so, maybe it's the option to talk to the sailors instead that would go mostly unused, if everybody can always pay Dragan.
It's your story, so the final decision is yours - if you want Bonnie to have 0 money and be unable to pay Dragan except by being lucky enough to find some lying around, I'll just leave the 100 gold fix out of the version going into the update. Otherwise the crew guards are a failsafe in case Bonnie loses that 100. Assuming a player is going straight for the story (especially if you ever set up the trap for Beatrice running out of time to round up the sailors and the player has fallen into it), and therefore has little chance of randomly finding gold lying around, which would you prefer to be the default route for Bonnie - buy the cloak or talk to the sailors?

Dragan spawning near the shipyard was obvious to me, possibly because I knew you'd been working on a way to get a cloak for Rocoso, this guy is wearing a cloak, so I drew the obvious conclusion. ;) It's a black cloak on a dark night so other players might not spot him as easily, nor guess his significance.
 
which would you prefer to be the default route for Bonnie - buy the cloak or talk to the sailors?

Dragan spawning near the shipyard was obvious to me, possibly because I knew you'd been working on a way to get a cloak for Rocoso, this guy is wearing a cloak, so I drew the obvious conclusion. ;) It's a black cloak on a dark night so other players might not spot him as easily, nor guess his significance.
When you put it like this, okay, let's keep the money fix.

I'm installing a fresh PotC:NH as we speak (while trying to set up a new phone at the same time, because the last one went river swimming with me), then I feel like continuing the quest tonight.
 
Here's my current version of "quests_reaction.c". It's the result of my recent playing through "Devlin Opera", and is based on your latest version with the tweaks I've been making. This, plus any anything you add soon, is what's going into the update, hopefully by the end of this week.
 

Attachments

  • quests_reaction.c
    126.1 KB · Views: 57
Thanks, in the meantime I set up a whole new game, NH6 it is now. Might continue a bit with the storyline, but don't expect a whole playable chapter by the end of this week. ;)
 
Last edited:
One thing I have not much experience with is coding locations. Just for this story, I want to add a jungle location between two other jungle locations to have an additional turnoff for another quest location. This is in the storyline folder:

Code:
    Locations[n].filespath.models = "locations\Outside\Jungle_4";

    Locations[n].id = "Hispaniola_Jungle_Devlin";
    locations[n].id.label = "Jungle";
    Locations[n].image = "Outside_Jungle_4.tga";
    //Sound
    locations[n].type = "jungle";
    LAi_LocationMonstersGen(&locations[n], true);
    LAi_LocationSetMonstersTime(&locations[n], 22, 6);

    //Town sack
    Locations[n].townsack = "Santo Domingo";

    //Models
    //Always
    Locations[n].models.always.locators = "Jungle04_l";
    Locations[n].models.always.jungle = "Jungle04";
    Locations[n].models.always.grassPatch = "JUNGLE04_g";
    Locations[n].models.always.l1 = "plan_1";
    Locations[n].models.always.l1.level = 9;
    Locations[n].models.always.l1.tech = "LocationModelBlend";
    Locations[n].models.always.l2 = "plan_2";
    Locations[n].models.always.l2.level = 8;
    Locations[n].models.always.l2.tech = "LocationModelBlend";
    Locations[n].models.always.l3 = "plan_3";
    Locations[n].models.always.l3.level = 7;
    Locations[n].models.always.l3.tech = "LocationModelBlend";

    //Day
    Locations[n].models.day.charactersPatch = "Jungle04_p";
    //Night
    Locations[n].models.night.charactersPatch = "Jungle04_p";
    //Environment
    Locations[n].environment.weather = "true";
    Locations[n].environment.sea = "false";
    //Reload map
    Locations[n].reload.l1.name = "reload1";
    Locations[n].reload.l1.go = "Hispaniola_Jungle_08";
    Locations[n].reload.l1.emerge = "reload3";
    Locations[n].reload.l1.autoreload = "1";
    Locations[n].reload.l1.label = "Jungle.";
    Locations[n].locators_radius.reload.reload1 = 4;

    Locations[n].reload.l4.name = "reload1_back";
    Locations[n].reload.l4.go = "Hispaniola_Jungle_08";
    Locations[n].reload.l4.emerge = "reload3";
    Locations[n].reload.l4.autoreload = "1";
    Locations[n].reload.l4.label = "Jungle.";
    Locations[n].locators_radius.reload.reload1_back = 2;

    Locations[n].reload.l2.name = "reload2";
    Locations[n].reload.l2.go = "Hispaniola_village_exit";
    Locations[n].reload.l2.emerge = "reload3";
    Locations[n].reload.l2.autoreload = "1";
    Locations[n].reload.l2.label = "Jungle.";
    Locations[n].locators_radius.reload.reload2 = 4;

    Locations[n].reload.l5.name = "reload2_back";
    Locations[n].reload.l5.go = "Hispaniola_village_exit";
    Locations[n].reload.l5.emerge = "reload3";
    Locations[n].reload.l5.autoreload = "1";
    Locations[n].reload.l5.label = "Jungle.";
    Locations[n].locators_radius.reload.reload2_back = 2;

    Locations[n].reload.l3.name = "reload3";
    Locations[n].reload.l3.go = "Devlin_tavern_outside";
    Locations[n].reload.l3.emerge = "reload2";
    Locations[n].reload.l3.autoreload = "1";
    Locations[n].reload.l3.label = "Jungle.";
    Locations[n].locators_radius.reload.reload3 = 4;

    Locations[n].reload.l6.name = "reload3_back";
    Locations[n].reload.l6.go = "Devlin_tavern_outside";
    Locations[n].reload.l6.emerge = "reload2";
    Locations[n].reload.l6.autoreload = "1";
    Locations[n].reload.l6.label = "Jungle.";
    Locations[n].locators_radius.reload.reload3_back = 3;

    Locations[n].island = "Hispaniola"; // NK 04-08-29
    n = n + 1;

And then this is in StartStoryline, which I thought should override where the reload locators of the adjacent jungles lead to normally:

Code:
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l3.name = "reload3";
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l3.go = "Hispaniola_Jungle_Devlin";
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l3.emerge = "reload1";
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l3.autoreload = "1";
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l3.label = "Jungle.";

    Locations[FindLocation("Hispaniola_village_exit")].reload.l3.name = "reload3";
    Locations[FindLocation("Hispaniola_village_exit")].reload.l3.go = "Hispaniola_Jungle_Devlin";
    Locations[FindLocation("Hispaniola_village_exit")].reload.l3.emerge = "reload2";
    Locations[FindLocation("Hispaniola_village_exit")].reload.l3.autoreload = "1";
    Locations[FindLocation("Hispaniola_village_exit")].reload.l3.label = "Jungle.";

What am I doing wrong, when I still go directly from Hispaniola_Jungle_08 to Hispaniola_village_exit?
 
Try adding this as well:
Code:
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l5.name = "reload3_back";
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l5.go = "Hispaniola_Jungle_Devlin";
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l5.emerge = "reload1";
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l5.autoreload = "1";
    Locations[FindLocation("Hispaniola_Jungle_08")].reload.l5.label = "Jungle.";

    Locations[FindLocation("Hispaniola_village_exit")].reload.l5.name = "Reload3_back";
    Locations[FindLocation("Hispaniola_village_exit")].reload.l5.go = "Hispaniola_Jungle_Devlin";
    Locations[FindLocation("Hispaniola_village_exit")].reload.l5.emerge = "reload2";
    Locations[FindLocation("Hispaniola_village_exit")].reload.l5.autoreload = "1";
    Locations[FindLocation("Hispaniola_village_exit")].reload.l5.label = "Jungle..";

In both locations, "reload3" is probably some way underground and is where you spawn when you enter the location, then you're zapped automatically to ground level. "Reload3_back" is at ground level and is the locator you need to hit to exit the area.
 
The file encodings can be a bit of a mess though, and I converted everything to UTF-8. Which causes issues with the vanilla engine for non-english dialog.
Thanks, @Hammie! I'd forgotten that UTF-8 can foul up non-English characters. And so...
There's something odd about either "Rocoso Balboa_dialog.c" or "Rocoso Balboa_dialog.h". The correct spelling for the natives is "Taíno" - note the accent over the "i". This works for Blaze but does something silly in Rocoso Balboa's dialog
... that's due to UTF-8. For some reason, "Rocoso Balboa_dialog.h" is in UTF-8. When I saved it back with ANSI encoding, the weirdness stopped. Rocoso can now pronounce "Taíno" correctly. :D
 
The file encodings can be a bit of a mess though, and I converted everything to UTF-8.
I do not even begin to understand "flat text file encodings".

Starting with:
WHY is this a thing???

Srsly, it strikes me as DUMB!
And guaranteed to NOT EVER stop causing problems.
 
WHY is this a thing???
The original game uses separate encodings for the english and russian files, because russian characters could not be presented in the western encoding and reversed: Windows-1252 (Western) and Windows-1251 (Cyrillic).

The latest engine has been upgraded to use Unicode (utf-8 specifically) because it supports both character sets (and a whole lot more) and is pretty much the standard these days, simplifying things greatly.

I've managed to convert most files to utf-8 correctly - I think there might still be a few mistakes - but converting it back to the old system is also not an automated process (yet?).
 
The original game uses separate encodings for the english and russian files, because russian characters could not be presented in the western encoding and reversed: Windows-1252 (Western) and Windows-1251 (Cyrillic).

The latest engine has been upgraded to use Unicode (utf-8 specifically) because it supports both character sets (and a whole lot more) and is pretty much the standard these days, simplifying things greatly.

I've managed to convert most files to utf-8 correctly - I think there might still be a few mistakes - but converting it back to the old system is also not an automated process (yet?).
Interesting background.

I still feel like I want to ask the same question.

WHY is it like this?

...it strikes me as [...] guaranteed to NOT EVER stop causing problems.
 
In both locations, "reload3" is probably some way underground and is where you spawn when you enter the location, then you're zapped automatically to ground level. "Reload3_back" is at ground level and is the locator you need to hit to exit the area.
This worked, thank you!

I've just reconnoitered something for the not so far future. In the model LargeTavern I'd like to make a few new sit locators at tables which are currently unoccupied, probably make a separate locator file for my quest use. I thought this would be quite simple to figure out the coordinates using side step and console, then copy those coordinates into TOOL. Turns out it's not that simple. Using sidesteps, I often jump to the other floor, either upper or lower floor. Also some of the already existing locators seem to be underground, with their locator names just above the floor and no bubble visible. Only recently I've heard about underground locators. Is there a locator expert who can help? Maybe @Jack Rackham ? I've seen locators in some of the most remote corners in your stories.
 
Back
Top