• 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

If you really want a darkened cave then the only thing I can think of is to duplicate "cavernMedium2.gm", rename the duplicate something like "cavernMedium2_torchless.gm", define a new location to use it, and then put this somewhere in storyline code:
But how would the duplicate be dark in that case? It would still need a torchless locator file attached to it. Or in other words: Why would the torchless locators work if I duplicated the location file?

Another question that appeare concerns code such as this:
Code:
LAi_ActorFollowEverywhere(CharacterFromID("id"), "", 1.0);
Is this number at the end a time indicator that shows how many seconds the character follows me? Isn't there a way to make the character follow me until another line of code stops this?

I'm looking for two people in a location, and as soon as I find the first one, he should follow me until I get to the second one, so that in the end, we're all together. Of course I could also assign the first one as an officer/pasenger temporarily, but I thought LAi_ActorFollowEverywhere might be a bit simpler.
 
But how would the duplicate be dark in that case? It would still need a torchless locator file attached to it. Or in other words: Why would the torchless locators work if I duplicated the location file?
That's the whole point. The duplicate has never been associated with the locator file with the torchlight. So you do indeed associate the torchless locator file with this new location, which should then be dark.

Another question that appeare concerns code such as this:
Code:
LAi_ActorFollowEverywhere(CharacterFromID("id"), "", 1.0);
Is this number at the end a time indicator that shows how many seconds the character follows me? Isn't there a way to make the character follow me until another line of code stops this?

I'm looking for two people in a location, and as soon as I find the first one, he should follow me until I get to the second one, so that in the end, we're all together. Of course I could also assign the first one as an officer/pasenger temporarily, but I thought LAi_ActorFollowEverywhere might be a bit simpler.
I'm not sure exactly what it does. 'LAi_ActorFollowEverywhere' is defined:
Code:
void LAi_ActorFollowEverywhere(aref chr, string quest, float timeout)
At a guess, it's how long the character has to get close to you. Sometimes the character might not follow you around in the scene in which you met him, but he should appear when you go to another location and then follow you around. He really will follow you everywhere - ever played the "Missing Son of Spanish Admiral" sidequest and seen Lucas follow you around until you finally deliver him to his father? He'll follow you even to places where officers don't go, such as the tavern room at night.

You can use 'LAi_Type_Actor_Reset' to stop him following you when you find the second character.

One big advantage of using 'LAi_ActorFollowEverywhere' instead of assigning him as an officer is that some sidequests force officers into specific slots, e.g. Artois Voysey goes into slot 3 the first time you hire him and at a couple of other places in his quest. If your character is an officer and the player does one of these sidequests, character 1 might not be there when the player meets the character 2.
 
You can use 'LAi_Type_Actor_Reset' to stop him following you when you find the second character.
This seems to work now the way I want. Even though you shouldn't be able to hire any quest-specific officers during this quick beach search anway.

That's the whole point. The duplicate has never been associated with the locator file with the torchlight. So you do indeed associate the torchless locator file with this new location, which should then be dark.
But this one is weird. I defined Locations[n].id = "Aruba_Dungeon_dark"; in the storyline folder and re-routed the locator in StartStoryline. Console confirms I'm in the right spot. It has Locations[n].models.always.locators = "CavernMedium2_torchless_locators"; assigned to it, which has all the torchlighte-locators removed. I even found this line, which I thought might be the solution, and commented it out: //Locations[n].models.always.l2 = "cavernMedium2_lamps";

Yet the torches are still shining normally.

EDIT: The line I commented out seems to remove the torch models, but not the sources of light.
 
Last edited:
Try this lot. As well as the model and locator files, it also contains the lighting .col files for "cavernMedium2_torchless". If you've been using copies of the "cavernMedium2" .col files, that would explain why you're still getting the torcchlight. Although LocLighter sets lighting for locator groups such as "torchlightes" and "candles", it seems to then set the sources of light permanently even if the locators aren't there. So I used "console" to change "Aruba_Dungeon" to use the "cavernMedium2_torchless" model, then went in and used LocLighter to generate the new .col files.

Yes, you do need to leave that line about "cavernMedium2_lamps" out of the definition for "Aruba_Dungeon_dark". Otherwise you'll get the torch models and even if the .col files aren't putting torchlight on them, the models themselves have red tops which show up.
 

Attachments

  • CavernMedium2_torchless.zip
    1,021.2 KB · Views: 37
This works now as well!

aruba1.png

Spoiler alert: It would be better to turn around. Even if you survive a dark cavern maze full of deadly creatures, you won't be able to find the exit yet because the reload locator is blocked.

aruba2.png

Back outside, this dude has appeared. He suggest to look for torches in a nearby shipwreck.

aruba3.png

And there's the shipwreck, imported from VCO.

aruba4.png

There are survivors. Can they be trusted?
 
What then? Do you give the torches to the shaman so he can put them into the cave?
Exactly. Which was actually your idea ;)
This opens up a possibility for your story, should you wish it. It would now be easy to make a new locator file with all the torches removed, making the cave completely dark apart from the exit light. The player would need to complete one of your other quests, then an Arawak could tell the player that a shaman has been to the cave and lit the torches. For amusement, if the player goes into the dark cave before then, you could have an on-screen message "It is pitch black. You are likely to be eaten by a grue." And then see if anyone gets the reference. ;)
 
Sure it doesn't look perfect but I liked the idea that one of the two is slightly hidden in a funny way (the other one is just lying in the grass somewhere).

If I continue at this speed I might be able to somewhat finish the storyline this summer. At least coding is rarely a problem. But I'm gonna have trouble fixing the viewable maps, adding loading screens for the new locations and adding a quest-specific beach (if the last one is even possible).
 
Sure it doesn't look perfect but I liked the idea that one of the two is slightly hidden in a funny way (the other one is just lying in the grass somewhere).

If I continue at this speed I might be able to somewhat finish the storyline this summer. At least coding is rarely a problem. But I'm gonna have trouble fixing the viewable maps, adding loading screens for the new locations and adding a quest-specific beach (if the last one is even possible).
I also prefer the survivors to be in the lifeboat or in the grass.

Ask @Bartolomeu o Portugues about quest-specific beaches. He's already made two - in fact, one of them is on Aruba and it's in the June update. Since you're working on a different storyline, he might let you use the same beach with "StartStoryline.c" changing "reload3" to point to your next quest location.

Loading screens: there are some templates here:
https://piratesahoy.bowengames.com/potc/OFFICIAL/Template_Loading_Screens.zip
If you have Photoshop, you can open those, add a screenshot of your location, change the text, and resize it to match an existing loading screen - typically 1024x1024 or 1024x512. You'll need the "Dolphin Bold" font to edit the text. Or let me have a screenshot of the location, tell me what you want written on it, then I can make the loading screen - and possibly Spanish and Russian versions too.
 
Actually I might just send you the screenshots if that's okay. My Adobe subscription ran out years ago. There are only two loading screens I can think of, for the new VCO locations.

The beach I need would be the destination at the very end of the storyline, where all the combined maps (that still need to go into into the game at some point) lead to. So it wouldn't make much sense for it to be on Aruba, where you just spent an entire chapter. It would need to pass as an uninhabited or somewhat hidden place. Initially I thought it could just be the central american mainland and I would use the beach near Cartagena that isn't connected to any place. But since you have created the sidequest with the snake in the swamp, that one is now actually connected to locations and to the town.
 
@Bartolomeu o Portugues has also added a quest-specific beach to Camahogne - or Grenada in the "Napoleonic" period, which is when his "Family Story" FreePlay quest is set, and that's what uses this beach. Again, assuming he has no objections, you could put code in "StartStoryline.c" to reroute "reload2" and "reload2_back" so that the beach leads to your quest location instead of his - Beatrice Devlin must not be able to visit the ruins of Bartolomeu's mansion!
 
I still ran into a problem with the coding and don't really know what I'm doing wrong. This is in quests_reaction:

Code:
        case "Aidoo_waits_at_ship":
            AddQuestRecord("Bless the rains down in Aruba", 9);

                        pchar.quest.Pick_up_torches.win_condition.l1 = "locator";
                        pchar.quest.Pick_up_torches.win_condition.l1.location = "Aruba Wreckage";
                        pchar.quest.Pick_up_torches.win_condition.l1.locator_group = "barmen";
                        pchar.quest.Pick_up_torches.win_condition.l1.locator = "bar1";
                        pchar.quest.Pick_up_torches.win_condition = "Pick_up_torches";
        break;

        case "Pick_up_torches":
            GiveItem2Character(PChar, "wreckage_torches");
            pchar.quest.TORCHES = "found";
            Pchar.quest.Pick_up_torches.over = "yes";
        break;
wreckage_torches is included in PROGRAM\Storyline\DevlinOpera\items\initQuestItems like all the other items I used in so far. It also got a name and description in RESOURCE\INI\TEXTS\ENGLISH\Storyline\DevlinOpera\ItemsDescribe.

I don't receive the item when I go to the locator bar1. There is no error.log but compile.log says this:

WARNING!!! Character 'Bonnie Devlin': + Item id = wreckage_torches not implemented

I have no idea what this could mean.
 
Never mind... Until now I only tested this quest case with a save, after I fixed a typo in the code. It works now with a new game.
 
Bonnie and the Shaman now sit around the fireplace. The Shaman tells an Arawak folk story, Bonnie tells an amusing pirate joke I recently heard.

Except Bonnie doesn't sit around the fireplace. If there's a scene where she visits the tavern, I'd use

Code:
            LAi_SetActorType(Pchar);
            LAi_ActorSetSitMode(Pchar);

for a scene AFTER she visits the tavern, I'd use the same with SetLayMode. :p But according to testing and error.log, setting Pchar to ActorSetPoorMode doesn't exist. Not the end of the world, it would have been a nice-to-have detail. But is there a reason it doesn't exist or doesn't work?

For a second question: How again do I make the whole screen interface invisible in free-cam, so I can make screenshots for the loading screen?
 
Bonnie and the Shaman now sit around the fireplace. The Shaman tells an Arawak folk story, Bonnie tells an amusing pirate joke I recently heard.

Except Bonnie doesn't sit around the fireplace. If there's a scene where she visits the tavern, I'd use

Code:
            LAi_SetActorType(Pchar);
            LAi_ActorSetSitMode(Pchar);

for a scene AFTER she visits the tavern, I'd use the same with SetLayMode. :p But according to testing and error.log, setting Pchar to ActorSetPoorMode doesn't exist. Not the end of the world, it would have been a nice-to-have detail. But is there a reason it doesn't exist or doesn't work?
Look at "PROGRAM\Characters\init\Redmond.c". The first character in the file is Henry, the beggar near the shipyard, who is definitely poor. In his definition:
Code:
LAi_SetPoorType(ch);
Try that.

But I'm not sure if a character can initiate a dialog with the player if the player is in poor mode. In "Ardent", when you're a prisoner in your own ship and sitting in the hold like any other prisoner, I used 'LAi_ActorSetSitMode(PChar);' to make the player sit.

For a second question: How again do I make the whole screen interface invisible in free-cam, so I can make screenshots for the loading screen?
F9.
 
I'll look into it, but something in my memory tells me that I already tried it once and it didn't work for the Beatrice models.

As for loading screens? Do you have time to make these? I guess it would save a lot of time since I don't have a good image editing programme and even when I had, I haven't had much success when I tried to work with PotC image files.

There are the screenshots I made, I would name them "Wreckage Cove" (1), "Sacred Forest" (2) and "Offering Room" (3).
 

Attachments

  • screenshot1.png
    screenshot1.png
    1 MB · Views: 56
  • screenshot2.png
    screenshot2.png
    1.4 MB · Views: 59
  • screenshot3.png
    screenshot3.png
    1.4 MB · Views: 50
Can you get a screenshot of Wreckage Cove with better water? Indeed, are all those screenshots from within the game or from a tool such as Blender?

Beatrice should certainly be able to sit, and has been since 2016:
Screenshots thread
 
If you make loading screens for the Russian language:
1) "Бухта Кораблекрушения"
2) "Священный Лес"
3) "Место Подношений"
 

Attachments

  • PiecesofEightCyrillicAAV2 (1).7z
    47.3 KB · Views: 18
Beatrice should certainly be able to sit, and has been since 2016:
Screenshots thread
For clarification: I'm talking about sitting on the ground, or in other words: PoorType and about doing it with the player. And all my tests indicate that PoorType simply doesn't work for the Beatrice models. For example: executing LAi_SetPoorType(Pchar); through console makes player character Blaze sit on the ground, but player character Beatrice keeps standing, frozen in place. And creating an NPC with that model and in that type actually results in an invisible NPC (see picture):

EDIT: Probably PoorType doesn't work for female characters at all? Indian_girl1 also disappears.

invisible_poor.png

The screenshots are from within the game with free camera. I agree that the water looks a bit cheap there, but I wouldn't know to how to change that. I think it looked always that way. When the location model was transferred from VCO, @Jack Rackham raised (or lowered?) the water level a bit for me.
 
Last edited:
Back
Top