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

Solved Making Citizen Dialogs

so the .c files only need to be copied and renamed? That'll be easy. I definitly can edit these dialogs to make them fit (I hope I don't have to research the exact history of the ports :D ) . But to be sure again:
e.g. I want to make a dialog for Cayman. I copy a citizen dialog file .c and rename it to cayman citizen_dialog.c
Then I copy one of these .h files in the folder ENGLISH and then edit the responses.
Is it right this way?

I think this is enough for the first step, if I finish that, I will ask again about that characters_init ;)
 
Yep, that should work. Though without the character init entry, you can't test your work.

Unless.... REPLACE an existing one, then test in another town. That'd work for intermediate testing.
 
you mean renaming the new written dialog to a port that already have a character in the character_ini list? shouldn't be a problem ;)
 
Exactly. At least that we you can test your work in the wrong port before moving it to the right port.
 
okay. Then I only need the list of ports which need new dialogs. And do I have to make every single dialog or is it enough just to do the way-descriptions? the rumours are in another file, so I don't need to touch this, do I? Only the descriptions, correct the names of the owners.. did I forget something?
 
See here for the list of towns that need doing: http://www.piratesahoy.net/threads/making-citizen-dialogs.18426/page-6#post-453380
NO clue if Tommy is still working on Cayman, but you can leave that one for last to be sure.

Indeed you don't need to do the rumours; they come from somewhere else.
And for all care, you can remove the character descriptions. The store owner or governor don't have ACTUAL personalities that need explaining anyway.
If the directions are in there, that's the most important. People might need it in Realistic Game Mode. :cheeky
 
okay, I'm done with Grand Turks, only need to test it. I added a few other things to the directions, like that the shipyard can flush the ship ;) Anyway, are there different dialogs for different town locations? But I don't see trough the characters_ini file at all :(

EDIT: Okay, I tested it by switching dialog-files and it works :) only a little mistake :D When you ask about the history on grand turks he will respond:
Fellow, I'm drunk's hell nd I think I can't even rememember ma name an' you're ask'ng me 'bout the histry of this goddamn nest?."
But after that he can remember the population :D but that are little things that is (all) easy to merge.
 
Anyway, are there different dialogs for different town locations?
No, there are not. Just one dialog for each town. Would be a tad bit too much work otherwise. ;)

But I don't see trough the characters_ini file at all :(
Basically, you just need to add a few characters like this one to the appropriate town locations:
Code:
    ch.old.name = "Bartholomew";
    ch.old.lastname = "Pardner";
    ch.name     = TranslateString("","Bartholomew");
    ch.lastname     = TranslateString("","Pardner");
    ch.id        = "Bartholomew Pardner";
    ch.model    = "bocman1";
    ch.sex = "man";
    ch.sound_type = "seaman";
    ch.location    = "Oxbay_port";
    ch.location.group = "goto";
    ch.location.locator = "goto9";
    ch.Dialog.Filename = "Oxbay citizen_dialog.c";
    ch.greeting = "Gr_Oxbay Citizen";
    ch.quest.area = "Oxbay";
    ch.nation = ENGLAND;
    ch.rank     = 1;
    ch.reputation = "None";
    ch.experience = "0";
    ch.skill.Leadership = "1";
    ch.skill.Fencing = "1";
    ch.skill.Sailing = "1";
    ch.skill.Accuracy = "1";
    ch.skill.Cannons = "1";
    ch.skill.Grappling = "1";
    ch.skill.Repair = "1";
    ch.skill.Defence = "1";
    ch.skill.Commerce = "1";
    ch.skill.Sneak = "1";
    ch.money = "10";
    LAi_SetCitizenType(ch);
    LAi_group_MoveCharacter(ch, "ENGLAND_CITIZENS");
    AddGameCharacter(n, ch);
Give them an appropriate model, name, dialog file, etc.

Least easy is his location ID and locator information. For that, I recommend to set VISIBLE_LOCATORS to 1 at the bottom of PROGRAM\InternalSettigs.h .
And in PROGRAM\console.c change switch(0) into switch(1) . Go to the location where you want the character.
Press F12 to see the location ID you need to use on the screen. Then select one of the random "goto" locators where you want the character generated.
 
Well.. okay and how many characters I need for each town?

EDIT: Can't I just copy the locators from one of the existing people OR even easier, give them the dialog file?
 
Code:
    ch.old.name = "Justin";
    ch.old.lastname = "Boogard";
    ch.name    = TranslateString("","Justin Boogard");
    ch.lastname    = TranslateString("","Justin Boogard");
    ch.id        = "Justin Boogard";
    ch.model    = "bocman1";
    ch.sex = "man";
    ch.sound_type = "seaman";
    ch.location    = "Turks_Town";
    ch.location.group = "goto";
    ch.location.locator = "goto4";
    ch.Dialog.Filename = "GrandTurks citizen_dialog.c";
    ch.greeting = "Gr_Oxbay Citizen";
    ch.quest.area = "Turks";
    ch.nation = PIRATE;
    ch.rank    = 1;
    ch.reputation = "None";
    ch.experience = "0";
    ch.skill.Leadership = "1";
    ch.skill.Fencing = "1";
    ch.skill.Sailing = "1";
    ch.skill.Accuracy = "1";
    ch.skill.Cannons = "1";
    ch.skill.Grappling = "1";
    ch.skill.Repair = "1";
    ch.skill.Defence = "1";
    ch.skill.Commerce = "1";
    ch.skill.Sneak = "1";
    ch.money = "10";
    LAi_SetCitizenType(ch);
    LAi_group_MoveCharacter(ch, "QC_CITIZENS");
    AddGameCharacter(n, ch);

Okay I did that first code.
1. I stole his name from one of the random citizens. Should I delete them (where?)
2. He doesn't spawn :(
 
Well.. okay and how many characters I need for each town?
At least one in each location, maybe 2-3.

EDIT: Can't I just copy the locators from one of the existing people OR even easier, give them the dialog file?
The existing people are random though.
But I wonder... perhaps we could convince some of them to use your town-specific dialogs instead. That's not how it is set up for the original game towns though and would require some figuring out.
Main problem with that is that I've got so much to do as it is, I'd prefer not having to figure it out. Not right now anyway. :facepalm

1. I stole his name from one of the random citizens. Should I delete them (where?)
Random citizens have random names. He won't be back.

1. I stole his name from one of the random citizens. Should I delete them (where?)
2. He doesn't spawn :(
AH! Character init changes require a new game to be started for some reason. But you should be able to convince him to show up through the console.
Use this template:
Code:
            int n = FindBlankCharSlot();
            CHARACTERS_QUANTITY++; // NK 05-04-05
            makeref(ch,Characters[n]);
            ch.nation = SPAIN;
            ch.old.name = "Estrella"; // MAXIMUS 16.10.2006
            ch.old.lastname = "de Alencar"; // MAXIMUS 16.10.2006
            ch.name     = TranslateString("","Estrella");
            ch.lastname     = TranslateString("","de Alencar");
            ch.id        = "Estrella de Alencar";
            ch.model = "imgovwife";
            ch.sex = "woman";
            ch.activity_begin = "0";
            ch.activity_end = "24";
            ch.location    = "";
            ch.location.group = "";
            ch.location.locator = "";
            ch.Dialog.Filename = "Estrella De Alencar_dialog.c";
            ch.greeting = "Gr_Estrella";
            ch.rank     = 1;
            ch.reputation = "None";
            ch.experience = "0";
            ch.skill.Leadership = "1";
            ch.skill.Fencing = "1";
            ch.skill.Sailing = "1";
            ch.skill.Accuracy = "1";
            ch.skill.Cannons = "1";
            ch.skill.Grappling = "1";
            ch.skill.Repair = "1";
            ch.skill.Defence = "1";
            ch.skill.Commerce = "1";
            ch.skill.Sneak = "1";
            ch.money = "10";
            ch.quest.meeting = "0";
            Lai_SetImmortal(ch, true);
            LAi_SetStayType(ch);    
            LAi_group_MoveCharacter(ch, "SPAIN_CITIZENS");
            ch.model.animation = "woman";
            ch.model.height = 1.75;
            facemaker(ch);
Most relevant to keep are the opening (first 3) and closing line (just the one) from that.
Character should then show up after reloading to another location and returning.
 
... I don't get it sorry :D
Do I have to add the first 3 lines and the last lines to the character? That's what I've done now but they still don't show up.

Well would the game tell me then if the code is right? (Would it crash if it isn't right?)
 
Figured I'd test it myself, only to find out I had broken my own game version with merging today. :rofl

Anyway, this code executed through console makes him appear; I just saw him. :yes
Code:
    int n = FindBlankCharSlot();
    CHARACTERS_QUANTITY++; // NK 05-04-05
    makeref(ch,Characters[n]);
    ch.old.name = "Justin";
    ch.old.lastname = "Boogard";
    ch.name    = TranslateString("","Justin");
    ch.lastname    = TranslateString("","Boogard");
    ch.id        = "Justin Boogard";
    ch.model    = "bocman1";
    ch.sex = "man";
    ch.sound_type = "seaman";
    ch.location    = "Turks_Town";
    ch.location.group = "goto";
    ch.location.locator = "goto4";
    ch.Dialog.Filename = "GrandTurks citizen_dialog.c";
    ch.greeting = "Gr_Oxbay Citizen";
    ch.nation = PIRATE;
    ch.rank    = 1;
    ch.reputation = "None";
    ch.experience = "0";
    ch.skill.Leadership = "1";
    ch.skill.Fencing = "1";
    ch.skill.Sailing = "1";
    ch.skill.Accuracy = "1";
    ch.skill.Cannons = "1";
    ch.skill.Grappling = "1";
    ch.skill.Repair = "1";
    ch.skill.Defence = "1";
    ch.skill.Commerce = "1";
    ch.skill.Sneak = "1";
    ch.money = "10";
    LAi_SetCitizenType(ch);
    LAi_group_MoveCharacter(ch, "QC_CITIZENS");
    facemaker(ch);
Make sure to add it below this:
Code:
void ExecuteConsole()
{
    ref pchar = GetMainCharacter();
    if (!bSeaActive) ref lcn = &Locations[FindLocation(pchar.location)];
    ref ch;
    int i;
    int limit;
You can further add this line below:
Code:
DoQuestReloadToLocation("Turks_Town", "reload", "reload1" ,"_");
That will instantly reload you to his location. Saves you the trouble of manually going everywhere.

Also, you can remove that ch.quest.area line. It's not needed at all and I've got NO clue why "Bartholomew Pardner" even has it. :shock
 
okay, if he's there and his dialog is proper, it is enough for me ;) I just copy and paste for the other towns ;) I don't need Turks anymore because I finished it! :) 3 guys in the first location and 1 guy+1woman in the second. that would be enough I think. Only thing that I have have forgotten is the description for the blacksmith but I don't have him enabled so that would require a new game. Will do that during the week. Anyway, you can delete Grand Turks from the list of towns we need ;)
 
Santo Domingo/Saint Domingue is finished ;) But also without blacksmith ;)
But I think I stop for today. Need some sleep ;)
I don't know how fast I get through the rest because I start to work this week. Will try my best ;)
 
Brilliant! And no rush; we haven't had those files for years. We'll survive without them for a little while longer.
It's already amazing to have them being worked on at all! :woot

BTW: I can't think why you weren't part of the Modders group, but you sure are now. Welcome, mate! :doff
 
Started a new game, but they still don't show up without executing the console..

The dialog is somehow messed up.. What I dont understand because it worked on douwesen/bonaire and I didn't touch it again. I swapped it with another existing dialog and they get messed up -.-
 
Back
Top