<!--quoteo(post=235933:date=Feb 4 2008, 10:36 AM:name=Estharos)--><div class='quotetop'>QUOTE (Estharos @ Feb 4 2008, 10:36 AM) <a href="index.php?act=findpost&pid=235933"><{POST_SNAPBACK}></a></div><div class='quotemain'><!--quotec-->I try more test and no luck Horatio comes at rank1 with 42hp and when he gain his rank the hp go up by 2 for 44 at rank3 46. <img src="style_emoticons/<#EMO_DIR#>/modding.gif" style="vertical-align:middle" emoid="
" border="0" alt="modding.gif" /> I went to Redmond to recruit Rys to compare his recruitment and once I recruit him he is at rank1 with 42hp and at rank2 he receive only 2 hp the same as Horatio. <img src="style_emoticons/<#EMO_DIR#>/blink.gif" style="vertical-align:middle" emoid=":blink:" border="0" alt="blink.gif" />
Is it the same for you guys or my game is bugged<b>??</b> <img src="style_emoticons/<#EMO_DIR#>/excl.gif" style="vertical-align:middle" emoid=":excl:" border="0" alt="excl.gif" />
....<!--QuoteEnd--></div><!--QuoteEEnd-->
Aye, Sir!
When anybody recruits Rys (unless the player has changed the personal game version to fit own liking) Rys will have rank 1.
This is because a character either stays with the definition in the initial file or is randomly created for the hiring purpose.
Rys is defined in the officer.c file.
Check his rank value as you look at him
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--> makeref(ch,Characters[n]); //Rys Bloom
ch.old.name = "Rys";
ch.old.lastname = "Bloom";
ch.name = LanguageConvertString(tmpNameFileID,"Rys");
ch.lastname = LanguageConvertString(tmpNameFileID,"Bloom");
ch.id = "Rys Bloom";
ch.model = "Chameleon";
ch.sex = "man";
ch.loyality = 15;
ch.alignment = "good";
ch.sound_type = "seaman";
GiveItem2Character(ch, "blade6");
ch.equip.blade = "blade6";
ch.location = "Redmond_port";
ch.location.group = "goto";
ch.location.locator = "cityzen_1";
ch.Dialog.Filename = "Rys Bloom_dialog.c";
ch.greeting = "Gr_Rys Bloom";
ch.rank = 1;
ch.reputation = "45";
TakeNItems(ch,"potion1", Rand(4)+1);
ch.experience = CalculateExperienceFromRank(1)+ (CalculateExperienceFromRank(1)/10 + rand(500));
ch.skill.Leadership = "1";
ch.skill.Fencing = "1";
ch.skill.Sailing = "0";
ch.skill.Accuracy = "1";
ch.skill.Cannons = "1";
ch.skill.Grappling = "1";
ch.skill.Repair = "1";
ch.skill.Defence = "0";
ch.skill.Commerce = "0";
ch.skill.Sneak = "0";
ch.money = "0";
ch.quest.help = "0";
ch.quest.dialog = "0";
LAi_SetCitizenType(ch);
LAi_group_MoveCharacter(ch, "ENGLAND_CITIZENS");
n = n + 1;<!--c2--></div><!--ec2-->
Now notice that abilities (perks) are missing, as well as hitpoints.
By comparison you want to look at Fred Bob in the same file, as Pieter has already suggested.
As you check him out, you see how already mentioned additions including the officer determination explained by Pieter influence the identity of the character.
Pay also attention to a very usefull quotation made by Petros regarding the assignment of hitpoints.
Last but not least notice that Experience has been decided directly.
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1-->
makeref(ch,Characters[n]); //Fred Bob by CatalinaThePirate
ch.old.name = "Fred";
ch.old.lastname = "Bob";
ch.name = LanguageConvertString(tmpNameFileID,"Fred");
ch.lastname = LanguageConvertString(tmpNameFileID,"Bob");
ch.id = "Fred Bob";
ch.model = "FredBob";
ch.sex = "man";
ch.loyality = 15;
ch.alignment = "good";
ch.sound_type = "seaman";
ch.nation = PIRATE;
ch.location = "";
ch.location.group = "";
ch.location.locator = "";
ch.Dialog.Filename = "Fred Bob_dialog.c";
ch.greeting = "Gr_FredBob";
ch.rank = 28;
ch.reputation = "64";
TakeNItems(ch,"potion1", Rand(4)+1);
ch.experience = "2050000";
ch.skill.Leadership = "6";
ch.skill.Fencing = "10";
ch.skill.Sailing = "10";
ch.skill.Accuracy = "5";
ch.skill.Cannons = "5";
ch.skill.Grappling = "8";
ch.skill.Repair = "10";
ch.skill.Defence = "10";
ch.skill.Commerce = "5";
ch.skill.Sneak = "10";
ch.perks.list.BasicDefense = true;
ch.perks.list.AdvancedDefense = true;
ch.perks.list.SwordplayProfessional = true;
ch.perks.list.CriticalHit = true;
ch.perks.list.Gunman = true;
ch.perks.list.ProfessionalGunman = true;
ch.perks.list.Rush = true;
ch.perks.list.IronWill = true;
ch.perks.list.FastReload = true;
ch.perks.list.HullDamageUp = true;
ch.perks.list.BasicBattleState = true;
ch.perks.list.LightRepair = true;
ch.perks.list.SharedExperience = true;
ch.money = "122";
ch.quest.help = "0";
ch.quest.dialog = "0";
LAi_SetCitizenType(ch);
LAi_group_MoveCharacter(ch, "ENGLAND_CITIZENS");
LAi_SetHP(ch, 280.0, 280.0);
ch.HPBonus = 200; // Petros to correct for game only giving 96
LAi_NoRebirthEnable(ch);
// added by MAXIMUS [making him a REAL boatswain] -->
ch.quest.officertype = OFFIC_TYPE_BOATSWAIN;
ch.quest.officerprice = "500";
// added by MAXIMUS [making him a REAL boatswain] <--
n = n + 1;<!--c2--></div><!--ec2-->
Now you have Rys to start with (and if you remodel him up a little it woudn't make your game less interesting) and Fred Bob at the high end of the scale in terms of abilities, strength and usefulness.
Your Horatio should be somewhere in between. Now you have all options available.
If you are entirely done with his definition, you might want to give it a try and paste him in the officer.c file
The reason why I am suggesting this, is because what I call recruitment by story - meaning officers/companions you get during quest progress - uses this officer.c file along with the story files.
The story files are the dialog files and the quest file in which the story case is speciffied.
If we get back to Rys and look into the dialog file: Rys Bloom_dialog c., we will notice that the case which hires him is:
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--> case "exit_hire":
Diag.TempNode = "empty";
Diag.CurrentNode = Diag.TempNode;
DialogExit();
AddDialogExitQuest("rys_becomes_officer");
break;<!--c2--></div><!--ec2-->
Everything else is a reference to the story at Redmond in the port, remember! Rys is banned from his ship, you meet him, you want to help him, you go to the harbormaster, you put a good word, you get back to Rys, you give him 500 gold to settle his accounts and get him a board.
What we really want to notice here is that we do not have an "enlist" case in the dialogue but a reference to a quest.
This quest - real nice and small - is almost at the bottom of the masive : quests_reaction.c
<!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--> case "rys_becomes_officer":
AddMoneyToCharacter(pchar, -500);
AddPassenger(Pchar, characterFromID("Rys Bloom"), 0);
LAi_SetOfficerType(characterFromID("Rys Bloom"));
characters[getCharacterIndex("Rys bloom")].location = "none";
characters[GetCharacterIndex("Rys Bloom")].Dialog.Filename = "Enc_Officer_dialog.c"; // KK
characters[GetCharacterIndex("Rys Bloom")].Dialog.CurrentNode = "Hired"; // KK
break;<!--c2--></div><!--ec2-->
So deeming that you went to Redmond port, found Rys, talked to him, talked to the harbormaster and then helped Rys join you, we have a reference for what you might be looking for in order to get your character exactly how you want him ... and a little tutorial in how to make a quest as well.
You could actually slide your own character's ID right into it, by pasting and adapting the cases and the lines in
quests_reaction.c , for example by adding the case "horatio_becomes_officer"
Horatio Hornblower_dialog.c and Horation Hornblower_dialog.h could be adjustments of Rys Bloom_dialog.c and h.
and with Horatio in the officer.c file you will have him exactly as you want him.
If you want to keep the similarity with Rys' little story then you also want to look into the harbor master's dialog, in case you get inspired and want to make a little story at Oxbay involving a third person.
The harbor master's name is by the way: Laurence Wellman and his dialog files are: Laurence Wellman_dialog.c and h.
Give it a try!
Take your time!
And accept my appologies for not being able to check on this thread earlier... unfortunately I have been on the watch.