To the players, does this seem better again now?
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!
Quick links for Beyond New Horizons
- Download latest version
- Wiki
- FAQ
- Report bugs here
- Bug Tracker on Github
Quick links for Maelstrom
- Download the latest version of Maelstrom
- Download the latest version of ERAS II
- Download the latest version of New Horizons on Maelstrom
Quick links for PotC: New Horizons
- Download latest version
- Wiki
- FAQ
- Report bugs here
Thanks to YOUR votes, GOG.com now sells:
- Sea Dogs
- Sea Dogs: Caribbean Tales
- Sea Dogs: City of Abandoned Ships
Vote now to add Pirates of the Caribbean to the list!
Quick links for AoP2: Gentlemen of Fortune 2
- Downloads and info
- ModDB Profile
- Forums Archive
A Pirate Podcast with Interviews
Music, Comedy and all things Pirate!
- Episode Guide - About - Subscribe -
- Twitter - Facebook - iTunes - Android -
- Youtube - Fill the Coffers -
That's good news indeed! The FEMALE_OFFICER_PERCENTAGE code that I re-removed must have indeed caused weird issues then.First test result: there is certainly more variety in what women are wearing on the streets of Kingston. Blue "towngirl1" has returned, and some of the variants of "towngirl5" and "towngirl7" have also been sighted. No news on female officers yet, unless it's broken entirely. I went in and out of the tavern repeatedly and saw some officers; there isn't always an officer present at all, but all those I did see were male. Further searching, preferably after I've made it to another port, may give different results...
Still sounds promising to me!It's difficult to know which female officers are being generated by "Female Officer Percentage" and which ones would have appeared anyway. They're still rare in taverns but I met two in the last play session. One was a "Taegan in a vest" variant, sitting near the door; talking to her resulted in "Wait a minute while I adjust my collar", which is also an outdoor citizen's second line if he or she is asking to be recruited. (The citizen's first line is "Not often do I encounter such a respectable person. You must be a captain". The officer in the tavern skipped that bit.) The other female officer was the one with brown skin and a flower in her hair, whose recruitment dialogue was the normal one for a tavern officer; she was sitting in the same seat normally occupied by male officers. There was one other female character, a "Catalina" variant, who wanted to trade in contraband.
What do you mean by the "Female Officers" mod? They always were there; the only thing that was introduced as per Beta 3.2 is an InternalSettings.h tweak that can be used to make them less common.Having spent a good part of the weekend chasing women around the Caribbean, I'm now fairly convinced that the "Female Officers" mod is either not working properly or not working at all.
From "initModels.c":There are indeed three types of hiring officers:
1. Regular hirable officers from the taverns that always sit in the same seat: Sounds like these have proper variety in their models.
2. Enc_walkers (eg. characters using the PROGRAM\DIALOGS\enc_walker.c file). These are the ones you mention saving in front of and finding different behaviour each time.
There is code in their dialog file to prevent certain character models from being hireable as officers, because the game considers them inappropriate for that.
Whether a model can be used as officer is defined in PROGRAM\Models\initModels.c .
It is weird that you can recruit some of those "towngirl" models, because I don't think they have an officer type defined.
model.description = "This nice dress compliments the blonde hair to create a beautiful picture of the nice town girl.";
model.id = "towngirl1";
model.FaceId = 52;
model.nation = ENGLAND; // made buyable
model.price = 1000;
model.assigned = true;
model.sex = "woman";
model.ani = "towngirl";
model.height = 1.75;
AssignModelType(isstart, model, "women", 1.0);
AssignModelTypeNatMask(isstart, model, "Upper_Citizens", 1.0, GetNationStringNorthEuroFr());
AssignModelTypeNation(isstart, model, "Upper_Citizens", 0.1, PIRATE);
AddCharacterModel(model);
model.description = "This dress is designed to nicely accent black hair for the urban lass.";
model.id = "towngirl1_1";
model.FaceId = 162;
model.nation = SPAIN; // made buyable
model.price = 1000;
model.assigned = true;
model.sex = "woman";
model.ani = "towngirl";
model.height = 1.75;
model.iscombat = false;
AssignModelType(isstart, model, "women", 1.0);
AssignModelType(isstart, model, "Upper_Citizens", 1.0);
AssignModelTypeNation(isstart, model, "Upper_Citizens", 0.1, PIRATE);
AddCharacterModel(model);
AssignModelType(isstart, model, "women", 1.0);
AssignModelTypeNation(isstart, model, "Mates", 1.0, PIRATE);
AssignModelType(isstart, model, OFFIC_TYPE_ABORDAGE, 1.0);
AssignModelTypeNation(isstart, model, OFFIC_TYPE_BOATSWAIN, 1.0, PIRATE);
if(location.type == "tavern")
{
// SCREWFACE : RANDOM TAVERNBRAWL MOD & sailors
if (LANDCREWMEMBERS && ivcskip == 0) {
PChar.TAVERNBRAWL = true;// TIH
if(rand(10)==0)
{
LAi_LocationFightDisable(&locations[FindLocation(Pchar.location)], false);
Random_Raid("smugglers", 5, PIRATE,"enemy","friend","TAVERNBRAWL !!!!");
}
DeleteAttribute(PChar,"TAVERNBRAWL");// TIH
} else {
if (ivcskip == 1) return false; // KK
}
// END
LEnc_MonstersLoginObject.type = "tavern";
// KK -->
//bChance = false;
//if (ivcskip != -1) bChance = frnd() < TAVERN_ENC_CHANCE;
//if (!bChance) return false;
// <-- KK
//Levis Extra atmosphere -->
if (ivcskip != -1)
{
if (Whr_IsNight())
{
//Night
if(sti(GetStorylineVar(FindCurrentStoryline(), "WR_PUZZLES")) > 0 || sti(GetStorylineVar(FindCurrentStoryline(), "BUG_PUZZLES")) > 0)
{
//JRH
Random_sailors_sit_tavern(3+RAND(3), GetLocationNation(location));
Random_guard_sit_tavern ( RAND(2), GetLocationNation(location));
Random_sailors_group (1+RAND(3), GetLocationNation(location));
Random_guards_group ( RAND(1), GetLocationNation(location));
}
else
{ // PB: Total number of characters: Between 2 and 9
Random_sailors_sit_tavern(1+RAND(2), GetLocationNation(location)); // 1-3 sitting sailors : always one sitting sailor
Random_guard_sit_tavern (2*RAND(1), GetLocationNation(location)); // 0-2 sitting soldiers: they come together or not at all
Random_sailors_group ( RAND(2), GetLocationNation(location)); // 0-2 walking sailors
Random_guards_group (1+RAND(1), GetLocationNation(location)); // 1-2 walking soldiers: always one walking soldier
}
}
else
{
//Day
if(sti(GetStorylineVar(FindCurrentStoryline(), "WR_PUZZLES")) > 0 || sti(GetStorylineVar(FindCurrentStoryline(), "BUG_PUZZLES")) > 0)
{
//JRH
Random_sailors_sit_tavern(1+RAND(1), GetLocationNation(location));
Random_guard_sit_tavern ( RAND(2), GetLocationNation(location));
Random_sailors_group ( RAND(3), GetLocationNation(location));
Random_guards_group ( RAND(1), GetLocationNation(location));
}
else
{ // PB: Total number of characters: Between 1 and 5
Random_sailors_sit_tavern(1+RAND(1), GetLocationNation(location)); // 1-2 sitting sailors : always one sitting sailor
Random_guard_sit_tavern ( RAND(1), GetLocationNation(location)); // 0-1 sitting soldiers
Random_sailors_group ( RAND(1), GetLocationNation(location)); // 0-1 walking sailors
Random_guards_group ( RAND(1), GetLocationNation(location)); // 0-1 walking soldiers
}
}
}
//<--Levis extra atmosphere
float tvag = TAVERN_ENC_QTY;
if(frnd() < TAVERN_BANDIT_CHANCE) tvag = frnd()/4.0;
LEnc_MonstersLoginObject.bandit = TAVERN_ENC_QTY-tvag;
LEnc_MonstersLoginObject.skeleton = "0";
LEnc_MonstersLoginObject.monkey = "0";
LEnc_MonstersLoginObject.mummy = "0";
//LEnc_MonstersLoginObject.vagabond = tvag; // NK
LEnc_MonstersLoginObject.vagabond = "0"; // Levis extra atmosphere
done = true;
}
// NK <--
}
LEnc_MonstersLoginObject.current = "";
if(ivcskip == 1) return false; // NK
if(!done) { // NK
void Random_sailors_sit_tavern(int bmax, int nation)
{
if(bmax==0) return;
//Log_SetStringToLog("sailors sit");
ref chr;
float hasgun;
string ani, group, locator;
hasgun = 0.5;
ani = "man";
group = "sit";
for(int i = 0; i < bmax; i++)
{
float x,y,z;
GetCharacterPos(GetMainCharacter(), &x, &y, &z);
if(i>0)
{
GetCharacterPos(chr, &x, &y, &z);
}
//locator = Lai_FindNearestFreeLocator(group, x, y, z);
locator = LAi_FindRandomLocator(group);
if (locator!="")
{
if(rand(10)>9)
{
if(rand(4)>3){ani="woman";}else{ani="man";}
chr=LAi_CreateFantomCharacterEx(false, 0, true, true, hasgun, GetRandomModelForTypeExSubCheck(1, "Captains", ani, nation), ani, group, locator);
chr.Dialog.filename="Random_captains_sit_tavern_dialog.c";
}
else
{
if(rand(10)>8)
{
if(rand(99) < FEMALE_OFFICER_PERCENTAGE)
ani = "woman";
else
ani = "man";
chr=LAi_CreateFantomCharacterEx(false, 0, true, true, hasgun, GetRandomModelForTypeExSubCheck(1, "mates", ani, nation), ani, group, locator);
chr.Dialog.filename="Random_mates_sit_tavern_dialog.c";
}
else
{
ani="man";
chr=LAi_CreateFantomCharacterEx(false, 0, true, true, hasgun, GetRandomModelForTypeExSubCheck(1, "sailors", ani, nation), ani, group, locator);
chr.Dialog.Filename = "Random_sailors_sit_tavern_dialog.c";
chr.sex ="man";
}
}
LAi_SetSitType(chr);
chr.nation = nation;
//if(chr.sex=="woman"){chr.ani="woman";}
LAi_group_MoveCharacter(chr, "random_sailors_sit");
}
}
LAi_group_SetRelation(LAI_GROUP_PLAYER, "random_sailors_sit", LAI_GROUP_NEITRAL);
LAi_group_SetRelation("random_sailors_sit", "random_sailors_group", LAI_GROUP_NEITRAL);
LAi_group_SetRelation(LAI_GROUP_GUARDS, "random_sailors_sit", LAI_GROUP_NEITRAL);
LAi_group_SetRelation(LAI_DEFAULT_GROUP, "random_sailors_sit", LAI_GROUP_NEITRAL);
LAi_group_SetRelation(LAI_GROUP_MONSTERS, "random_sailors_sit", LAI_GROUP_NEITRAL);
LAi_group_SetRelation(GetCurrentCitizenGroup(), "random_sailors_sit", LAI_GROUP_NEITRAL);
LAi_group_SetRelation(GetCurrentSoldierGroup(), "random_sailors_sit", LAI_GROUP_NEITRAL);
}