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

Fixed Correcting "Early Explorers" Period

At the moment, the only way to do that would be to change his first name from "Francis" to "Sir Francis". Possibly have privateers use noble titles instead of naval ranks, though by the time you finish playing you'd probably be a lot higher than a mere "Sir"...
Changing the first name isn't needed and that wasn't done for Sir Edward Pellew either.
If you look him up either in the Hornblower character init files or in NK.c where I think he's still included, you should see a call to SetRankTitle or something like it.
That allows you to give a title to any character that show on the screen when you're facing an NPC with such a title.
I think it might also be mentioned in dialogs here and there, but I'm not sure of that.
Anyway, that is a one-line trick to make Drake a "Sir" when you give him the Revenge.

What's Pellew doing in the Standard Storyline? He's in "Hornblower", isn't he?
He isn't. I made a typo.
 
Francis Drake was knighted some time before he got the Revenge, so I'll try to arrange for it to happen at rank 6. Then he can get the Revenge at rank 8 when everyone else gets the Corsair's Pride.
 
Francis Drake was knighted some time before he got the Revenge, so I'll try to arrange for it to happen at rank 6. Then he can get the Revenge at rank 8 when everyone else gets the Corsair's Pride.
Fine by me! :cheers
 
I now have a version of "Nk.c" which in theory should call 'SetRankTitle(PChar, ENGLAND, TranslateString("", "Sir"))' to give Drake his knighthood at rank 6, and give him the Revenge at rank 8. It's been tested to the extent that it doesn't have any typo which will crash the game (not any more, anyway :facepalm) but I'm not yet at rank 6, let alone 8, so can't check if it does what it's meant to do. But I should be at rank 6 fairly soon. So if the new version is needed for an update really soon, e.g. if the update is going out tonight, then I'll upload it. Otherwise I'll wait until I've at least reached rank 6 to see whether the knighthood takes effect. (The code for giving the Revenge is copied straight from similar code giving a similar ship but different name to any English naval officer, including the check that you have a free slot, along with an additional check that you're not a naval officer who happens to be called "Francis Drake". He'll get his free ship as part of the regular naval progression anyway.)
 
I now have a version of "Nk.c" which in theory should call 'SetRankTitle(PChar, ENGLAND, TranslateString("", "Sir"))' to give Drake his knighthood at rank 6, and give him the Revenge at rank 8. It's been tested to the extent that it doesn't have any typo which will crash the game (not any more, anyway :facepalm) but I'm not yet at rank 6, let alone 8, so can't check if it does what it's meant to do.
A while ago, I change dthe Numpad 9 behaviour with ENABLE_CHEATMODE at 1 to give you an instant promotion.
That allows testing of the full promotion progression without actually having to play through.
And of course you can always put execute it through console and see what happens.

Otherwise, just post the file and I can have a test myself.
 
Instant promotion won't do any good. It has to be the emissary who gives the promotion as that's when you get the reward. Or does the cheat promotion also call "Nk.c" to give the relevant rewards for the promotion?

Anyway, here's the updated file. Have fun. :D
 

Attachments

  • NK.c
    192.1 KB · Views: 107
Instant promotion won't do any good. It has to be the emissary who gives the promotion as that's when you get the reward. Or does the cheat promotion also call "Nk.c" to give the relevant rewards for the promotion?
It does. A promotion is a promotion.
I know it works; I tested de Ruyter that way and Aubrey and Nelson and....
 
@Grey Roger: Looks like I need an initItems.c update as well:
Code:
              GiveItem2Character(pchar,"bladeFD2");
               EquipCharacterByItem(pchar,"bladeFD2");
 
And "ItemsDescribe.txt".

Here they are...
 

Attachments

  • initItems.c
    295.3 KB · Views: 85
  • ItemsDescribe.txt
    53.6 KB · Views: 151
I now have a version of "Nk.c" which in theory should call 'SetRankTitle(PChar, ENGLAND, TranslateString("", "Sir"))' to give Drake his knighthood at rank 6
Just tested this: It does work in a technical sense, but isn't displayed anywhere.
Looks like we're going to need those separate privateering titles. Here's a first list I made:
Code:
  rNation.Titles.1 = "Gentleman";
   rNation.Titles.2 = "Esquire";
   rNation.Titles.3 = "Knight";
   rNation.Titles.4 = "Baronet";
   rNation.Titles.5 = "Baron";
   rNation.Titles.6 = "Viscount";
   rNation.Titles.7 = "Count";
   rNation.Titles.8 = "Earl";
   rNation.Titles.9 = "Marquess";
   rNation.Titles.10 = "Duke";
   rNation.Titles.11 = "Archduke";
   rNation.Titles.12 = "Grand Duke";
Now to see if I can get that to work for non-navy characters....
 
1 probably isn't anything, or else it's "Mr." I'm not sure that Britain has Archdukes or Grand Dukes. Even some royalty are just Duke, including the current Queen's husband, who is Duke of Edinburgh. A person of rank 3 is a Knight but his title as it would appear attached to his name would be Sir. It also means Drake is getting his knighthood rather earlier than I'd planned!

There's a list of corresponding titles in different languages here:
https://en.wikipedia.org/wiki/Royal_and_noble_ranks#Corresponding_titles_between_languages

Note that "Prince" can have two meanings. English doesn't have different names for them but other languages do, including Dutch. "Prins" is the son of a king. "Vorst" is ruler of a principality. (At least, assuming they're equivalent to the similar sounding German words "Prinz" and "Fürst", which definitely have those meanings.) However, that level ought to be far beyond the reach of any privateer!

Suggestion: stick with military ranks up to level 6, "Captain". Then move onto noble titles, starting with "Sir" at rank 7. That leaves you at Marquess at rank 12, which as I recall was also the maximum title you could get in earlier versions. That way privateers don't end up the way I did with my last play through "Bartolomeu", which is personally in charge of the entire English, Dutch and Portuguese navies. xD (The reason I've counted to Marquess at 12 is that I'm looking at that Wikipedia table, which has Count and Earl as the same.)

And then there's the little problem of female characters...
 
1 probably isn't anything, or else it's "Mr." I'm not sure that Britain has Archdukes or Grand Dukes. Even some royalty are just Duke, including the current Queen's husband, who is Duke of Edinburgh. A person of rank 3 is a Knight but his title as it would appear attached to his name would be Sir. It also means Drake is getting his knighthood rather earlier than I'd planned!
"Gentleman" isn't much different from "Mr." anyway.

Already ahead of you....

Note that "Prince" can have two meanings. English doesn't have different names for them but other languages do, including Dutch. "Prins" is the son of a king. "Vorst" is ruler of a principality. (At least, assuming they're equivalent to the similar sounding German words "Prinz" and "Fürst", which definitely have those meanings.) However, that level ought to be far beyond the reach of any privateer!
Yes! I deliberately left out any REAL royalty.

Suggestion: stick with military ranks up to level 6, "Captain". Then move onto noble titles, starting with "Sir" at rank 7. That leaves you at Marquess at rank 12, which as I recall was also the maximum title you could get in earlier versions. That way privateers don't end up the way I did with my last play through "Bartolomeu", which is personally in charge of the entire English, Dutch and Portuguese navies. xD (The reason I've counted to Marquess at 12 is that I'm looking at that Wikipedia table, which has Count and Earl as the same.)
That would be very similar to the old Build 12 list of ranks.
A privateer as "Lieutenant" sounds odd to me though....
Anyway, I'm just trying to figure out the system itself. You're welcome to change the names later.

And then there's the little problem of female characters...
Very much so! Not quite sure what to do about that.... :oops:
 
This is what I came up with so far:
Code:
//returns the name of char's rank with nation.
string GetRankName(ref char, int iNation)
{
   if (iNation < -1 || iNation > NATIONS_QUANTITY) return ""; // KK
   int iRank = GetRank(char, iNation);
   return GetRankNameDirect(char, iNation, iRank);
}

//returns the name of rank in iNation
string GetRankNameDirect(ref char, int iNation, int rank)
{
   if (iNation < -1 || iNation > NATIONS_QUANTITY) return ""; // KK
   string rn = rank;
   if (iNation == PERSONAL_NATION)   // PB: Use this as flag to return fame level instead of PIRATE
   {
     rn = iclamp(1, sti(Nations[PIRATE].Ranks.Quantity), rank);   // LDH 08Oct06 fix for "Known as mister" at rank 13
     if(CheckAttribute(Nations[PIRATE],"Ranks."+rn))     return Nations[PIRATE].Ranks.(rn);     // PB: Fame Levels
   }

   if (CheckAttribute(char, "professionalnavy"))
   {
     if(CheckAttribute(Nations[iNation],"Ranks."+rn))   return Nations[iNation].Ranks.(rn);     // NK: Navy Ranks
   }
   else
   {
     if(CheckAttribute(Nations[iNation],"Titles."+rn))   return Nations[iNation].Titles.(rn);   // PB: Privateer Titles
   }
// KK -->
   rn = "" + iNation;
   if (CheckAttribute(char, "nations." + rn + ".Title"))   return char.nations.(rn).Title;
// <-- KK
   // 05-07-18 fix to use getmyaddress
   object tempchar;
   tempchar.nation = iNation;
   return GetMyAddressForm(&tempchar, &char, ADDR_CIVIL, false, false);
}
Seems to be working. No more "admiral" for privateers.
Also, the fame level in the F2>Nation Relations interface now uses something else than the original pirate ranks.
So famous navy officers won't be shown as "Scourge of the Seven Seas" any longer. :cheeky
 
The "Sir" for the knight rank is going to be tricky because when to show that and when not?
The rank name goes mainly into the F2>Character and F2>Nation Relation menus, where that doesn't make sense.
For the "address forms" in dialogs, I'm not sure if that actually mentions your rank name.
 
You can find the privateering ranks in the attached file. You're welcome to make any adjustments you see fit.

I also removed all "complex" characters from the navy titles because those characters didn't display in the interface at all. :(
 

Attachments

  • nations_init.zip
    5 KB · Views: 90
Count and Earl are the same; Earl is used in Britain, Count is the English word for the similar rank in other countries. Except that we'll be using those nations' own words, e.g. Graaf.

I still think privateers ought to start off with naval ranks and then switch to the lower to middle noble titles, starting with Knight. A privateer Lieutenant isn't as odd as a privateer Grand Duke, which doesn't exist in Britain anyway. Also, perhaps privateers should only start earning land when they switch to noble titles. At the moment they can end up with silly amounts of land, especially if they get it from several sources. (By the time I'd finished with Bartolomeu, I had 35,400 acres total. That's about 55 square miles. For comparison, Nevis is 35.9 square miles.)

If titles can't be made to appear as part of the character's name on the "Characters" screen or in dialogs, then the only way we're going to get Sir Francis Drake is if his first name changes. For comparison, Edward Pellew might not have a title or rank as part of his name, but some of the other officers in "Hornblower" do.

The change to fame labels is a good idea. The original higher fame labels weren't too bad for naval officers but the lower ones were definitely inappropriate; Michiel De Ruyter may very well have been "Scourge of the Seven Seas" but he certainly wasn't "Dread Pirate". xD
 
Count and Earl are the same; Earl is used in Britain, Count is the English word for the similar rank in other countries.
I know; but I needed some extra titles, so I counted some double.
You'll also notice the "High Count" ones in different languages, which is completely made up by me.... :rolleyes:

I still think privateers ought to start off with naval ranks and then switch to the lower to middle noble titles, starting with Knight. A privateer Lieutenant isn't as odd as a privateer Grand Duke, which doesn't exist in Britain anyway.
Editing the file I posted should be easy enough. You're welcome to make whatever changes you see fit.
I know what I did for now is imperfect and it was intended mainly as temporarily placeholder stuff. My main focus was on getting the functionality working.

Also, perhaps privateers should only start earning land when they switch to noble titles. At the moment they can end up with silly amounts of land, especially if they get it from several sources. (By the time I'd finished with Bartolomeu, I had 35,400 acres total. That's about 55 square miles. For comparison, Nevis is 35.9 square miles.)
That is already the case for Navy Officers and is handled in PROGRAM\Characters\CharacterUtilite.c in the Promote function.
You're welcome to change that as well.

Though in this case, it does pose a question: As a navy officer, you get a ship and officers upon promotion.
If you don't get land early on as privateer, what purpose is there to the LoM in the first place?

I think I know what your answer is going to be on that one, and you'd be right, but that requires a substantial rewrite of the nations relations code, the flags code and impact of player actions on both.
That is something I do want to work on at some point, but not yet. Would it be an idea to remove the privateers receiving land later when other LoM systems are also in place?

If titles can't be made to appear as part of the character's name on the "Characters" screen or in dialogs, then the only way we're going to get Sir Francis Drake is if his first name changes. For comparison, Edward Pellew might not have a title or rank as part of his name, but some of the other officers in "Hornblower" do.
True. "Captain Harvey" springs to mind. He doesn't even HAVE a first name.
I think to ensure that the title of "Sir" doesn't interfere with anything, indeed it is probably easiest to add it to his first name.
ch.name = "Sir " + ch.name; might do the trick. Note that any name-based switches after that should be changed to match or they won't work anymore.

The change to fame labels is a good idea. The original higher fame labels weren't too bad for naval officers but the lower ones were definitely inappropriate; Michiel De Ruyter may very well have been "Scourge of the Seven Seas" but he certainly wasn't "Dread Pirate". xD
Nelson as "Scourge of the Seven Seas" doesn't sound entirely right to me either. :no
 
I know; but I needed some extra titles, so I counted some double.
You'll also notice the "High Count" ones in different languages, which is completely made up by me.... :rolleyes:

Editing the file I posted should be easy enough. You're welcome to make whatever changes you see fit.
I know what I did for now is imperfect and it was intended mainly as temporarily placeholder stuff. My main focus was on getting the functionality working.
I know the feeling - get the mechanism working, sort out the details later. That's what I did with Francis Drake's sword (both for his own use and the changes to the Moulin quest) too. ;)

At the moment I'm putting the suggestion forward for discussion, rather than just doing it and hoping people like it...

Though in this case, it does pose a question: As a navy officer, you get a ship and officers upon promotion.
If you don't get land early on as privateer, what purpose is there to the LoM in the first place?

I think I know what your answer is going to be on that one, and you'd be right, but that requires a substantial rewrite of the nations relations code, the flags code and impact of player actions on both.
That is something I do want to work on at some point, but not yet. Would it be an idea to remove the privateers receiving land later when other LoM systems are also in place?
You're probably thinking that I'm thinking that pirates are criminals hated by everyone whereas privateers are sort of officers of their nation and treated as such. ;) Which would require a lot more work than that, because the reason some captains took LoM's was so that if they were caught, they'd be treated as prisoners of war rather than executed as pirates, which in game terms doesn't make any difference, it's game over either way. That is, unless someone writes code for you to be taken prisoner and then try to escape. So, not any time soon then. xD

But for some people, the rank and subsequent noble title might be a goal in and of itself. Then there are the introductions to governors' daughters, though those don't happen until later either. And ultimately there's still the land reward, you just need to do more to earn it. Also, for those players who buy ships rather than take them from someone else, you still need to be high enough rank to buy a warship.

I think to ensure that the title of "Sir" doesn't interfere with anything, indeed it is probably easiest to add it to his first name.
ch.name = "Sir " + ch.name; might do the trick. Note that any name-based switches after that should be changed to match or they won't work anymore.
That's what I was originally planning to do. ;)

I tried starting a quick game of "Hornblower", couldn't figure out how to use cheatmode to skip to a chapter of the story, but it's not long before you meet Pellew anyway if you concentrate on the story. Rush through the preliminaries on Antigua, quick trip to Guadeloupe, quick trip to Jamaica, get transferred to the Indy, where Pellew talks to you on deck. And despite the 'SetRankTitle', he doesn't have "Sir" either on the dialog talking head or in the "Characters" display. So 'SetRankTitle' doesn't work for him any better than for Drake.
 
At the moment I'm putting the suggestion forward for discussion, rather than just doing it and hoping people like it...
There are absolutely no objections to you extending out the titles a bit further and putting some non-noble ones at the front.
That is what we had in Build 12 as well. The only reason we changed it is because people wanted correct navy ranks, which they got.
But now that they're independent, we can finally have both.

You're probably thinking that I'm thinking that pirates are criminals hated by everyone whereas privateers are sort of officers of their nation and treated as such. ;) Which would require a lot more work than that, because the reason some captains took LoM's was so that if they were caught, they'd be treated as prisoners of war rather than executed as pirates, which in game terms doesn't make any difference, it's game over either way. That is, unless someone writes code for you to be taken prisoner and then try to escape. So, not any time soon then. xD
I was thinking along the lines of "if you don't have a LoM, but are attacking other nation' ships, that constitutes an act of piracy.
Right now that isn't handled quite like that. It is all part of your Served Nation/False Flag suggestions.

The "getting captured and escaping" thing would certainly be a nice addition. Could add a lot to the story element in Free Play.
Maybe one day....

I tried starting a quick game of "Hornblower", couldn't figure out how to use cheatmode to skip to a chapter of the story, but it's not long before you meet Pellew anyway if you concentrate on the story. Rush through the preliminaries on Antigua, quick trip to Guadeloupe, quick trip to Jamaica, get transferred to the Indy, where Pellew talks to you on deck. And despite the 'SetRankTitle', he doesn't have "Sir" either on the dialog talking head or in the "Characters" display. So 'SetRankTitle' doesn't work for him any better than for Drake.
It displays when you face the character below the portrait in the upper-left corner, but indeed NOT in the dialog.
I'm thinking of making SetRankTitle store the title in pchar.title = "whatever"; and then always append that for the GetMyName(sp?) function.
That way it is independent from the actual rank but still generic in a way. Does that sound like an option?
 
Back
Top