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

Planned Feature Fame to Affect Gameplay in Multiple Ways

Pieter Boelen

Navigation Officer
Administrator
Storm Modder
Hearts of Oak Donator
Copied from WIP - Pirates and Privateers | PiratesAhoy!:

Also, paying by dividing plunder means some of the plunder goes into your personal wealth, which increases your fame, which could perhaps do with getting some positive consequences to balance out the negative of having your false flag being easier to recognise (even more significant now that forts can join in).

Indeed the chance increasing with fame was originally my idea, mainly because I figured it would make logical sense.
But of course it is no so nice from a gameplay point of view. You can decrease that chance again with Luck and some abilities though.

My hope always was that in the later game, when you're more famous, the gameplay would shift so you end up focusing on different things and using false flags won't be so important anymore.
For example because you took over all the towns in the Caribbean and are busy with managing them instead.
But of course the game isn't like that and probably won't be for quite some time to come.

I do agree that there should be more positive benefits to being famous in addition to the adverse effect on false flag detection.
At the moment the only thing I can think of is that eventually that allows you to marry a governor's daughter/niece.
But then.... that serves very little purpose right now, other than to further increase your Fame.
Definitely room for improvement there!


Originally "Fame" was mainly added to the game as a way of "keeping score", but I don't think much of anyone actually uses it like that.
Perhaps we should have a forum "Wall of Fame" at some point where players can post screenshots/saves showing their "high scores".

Fame plus reputation could factor into the enemy's chance of surrendering early in boarding. If you're Hero then you're likely to treat prisoners well; if you're Horror of the High Seas then you're liable to slaughter the lot if they annoy you; none of which matters if the enemy captain has never heard of you. Fame in a hostile port increases your chances of being recognised and the shopkeepers refusing to deal with you; perhaps allow fame to influence your prices in a friendly port as the shopkeepers want to do business with you, then they get to put "Captain Famous buys his stuff here" on their windows as an advertisement.

All good ideas. Maybe we can factor that in when we get to my intended Reputation Rewrite some time.

Most relevant parts above marked in bold.
 
Another thing I learned while reading up about the Jolly Roger:
Privateers and naval vessels were required to take an enemy crew prisoner instead of executing the lot if they started resisting and then surrendered. Pirates were under no such restriction. One intentional effect of raising a Jolly Roger, then, was to give the target a chance to surrender right away. Because if it didn't, the pirate was liable to take down the Jolly Roger and hoist a red flag, which means no quarter was going to be expected or given. On the other hand, merchants were expected to fight back against pirates and could expect to face legal consequences if they didn't. (Mind you, paying a fine for not fighting pirates was probably preferable to being fed to the sharks because you did!)

So fame could do different things depending on whether you're playing pirate or privateer. If you're a privateer, the enemy may be more likely to fight back at first and also more likely to surrender after a round or two of deck battle, especially if you're famous. If you're a pirate then the enemy may be more likely either to surrender at once or fight to the end, especially if you're famous. Reputation could also be considered. If you're evil then the enemy may react as if you're a pirate even if you're a privateer; if you're good then the enemy may react as if you're a privateer even if you're a pirate; both conditional upon a fame check so that the enemy knows who you are.
 
Thanks for the ideas. I do remember the "red flag=no quarter" thing from history.
Of course at the moment the different pirate flags are purely cosmetical, but maybe one day that can be changed as well.

Does sound like this can get very cool and very complicated. So it'll need some good thinking through before implementing a system.
 
The red flag of death is indeed something for future. The main point was the difference between pirates and privateers. If you're flying a pirate flag then the enemy is likely to surrender right away or fight to the end. If you're a privateer then the enemy is likely to try his luck with a round or two of deck combat, then realise he can't win and surrender. Fame can improve a privateer's chance of an early surrender and a pirate's chance of any surrender, and extreme reputation can override the distinction.
 
How about characters who have a loyalty to the pirates AND have a LoM?
That is currently possible in the game, even if it may be unlikely that players do that. ;)
 
The enemy captain should react based on what flag you're flying as that indicates your intention. If you fly a friendly flag (and he hasn't spotted it as false) then you mean him no harm. If you fly a flag from a hostile nation then you're presumably either naval or a privateer and expected to behave accordingly. If you fly a pirate flag then you're a pirate!
 
Regarding the fame-level:

What effects does it actually have? So what are the benefits of reaching legendary-status in the first place?
 
What effects does it actually have? So what are the benefits of reaching legendary-status in the first place?
Hehe; that's a nasty question, that is! :cheeky

Originally "Fame" was added purely as a way to "keep score", so players might be able to brag about how famous they managed to get.
When we added false flags, we figured that it would make sense that if you are famous, enemies are more likely to recognize you.
Of course this isn't actually an advantage at all, but that is literally the only impact it has on actual gameplay.

We once did some brainstorming on improving on that here: Planned Feature - Fame to Affect Gameplay in Multiple Ways
But nothing ever came of it. I wonder if @Grey Roger can think of any clever things to do with this...
 
I did have a few ideas, which I mentioned in that thread. ;) What I don't have is any idea of how to implement them, though...

I did get some advice from you on how to add extra fame in a quest, which went straight into the ending of the "Kapitein of Kralendijk" sidequest. Backtracking from there, fame is calculated by the function 'GetFame(ref pchar, int iNation)' - you have different fame levels for each nation. A Windows search for "GetFame" shows a few hits:
"Dialog_func.c": fame is factored into your chances of getting married to a governor's female relative.
"CharacterUtilite.c": as well as the definition of 'GetFame', this also contains 'GetScore', which determines your visible fame level in the interface, and which is based on the total of your national fame levels plus whether you're married.
"Towntable.c": 'GetFame' is factored into the number of crew available for hire.

It is 'GetScore' which is factored into false flag detection. 'GetScore' also shows up in "Random_sailors_sit_tavern_dialog.c" - it doesn't affect your chances of getting a free recruit but it does affect what he says when he wants to join you. Likewise "random_pirates_group_dialog.c" takes account of 'GetScore' in deciding what someone says to you, but it's only a choice of what he says if he's already decided to be friendly.

Summary: as well as affecting your chances of your false flag being detected, fame improves your chances of getting a wife (or mistress, or several of them ;)) which in turn affects your visible fame level in the interface. Fame also affects how many crew you can hire in a tavern.
 
Just throwing my 2 cents in on how Cutthroats: Terror of the High Seas did it:

First of, a high fame-score (You had a bar which kept track of all the fame-points gathered, instead of simply stating if you are famous or not) would make flying a false flag harder, of course. On the other hand, merchants would just surrender without a fight when you hoist the jolly roger, enabling you to rob them effortlessly.
Next, it handled how your "conversations" (You basically pick one of many options and look what happens) with governors went. But due to the heavy RNG-nature, it was more of a positive modifier. If you are unlucky, you could meet a governor that hated pirates with a burning passion, so your fame didn't mean shit in that situation. Oh, and such a dude could also end your game instantly by execution, and you couldn't do anything against it.

The game had a "notoriety"-counter separately which worked like "Bad karma", but that system is horrible designed, since the game railroads you into being a colossal asshole.

So some ideas, next to the existing ones:
-Decrease prices from merchants, like "Holy moly, the great captain XYZ seeks my services NOTICE ME SENPAI?! I would love to just give you everything I have, but unfortunately, I also have to make a living..."
-Increased chance of merchantships (or maybe even small warships) instantly surrendering when they are under your attack (Except when escorted).
 
I did have a few ideas, which I mentioned in that thread. ;) What I don't have is any idea of how to implement them, though...
If you have some specific questions, I should probably be able to find the time to at least give you some half-sensible answers. :doff
 
The main one is probably: where is the code that determines whether a ship will surrender?
Had a quick look and found these:

PROGRAM\Loc_ai\LAi_boarding.c for during boarding:
Code:
bool CheckForSurrender(ref mchr, ref echr)

PROGRAM\SEA_AI\AIShip.c for in 3D Sailing Mode:
Code:
            // start surrender checking 05-04-20
            // below also check nosurrender 05-07-06
            if(SURR_GLOBAL_SCL >0 && !IsCompanion(&rCharacter) && targetidx != -1 && lasthit != -1 && !CheckAttribute(&rCharacter, "nosurrender")) // for now comps can't either. Makes life simpler. Also, must be an enemy nearby, and must have been hit.
            {
                float ftmult = 1.0;
                // LDH was using ship's character index as distance - 07Mar09
//                float fdist = DIST_NOSHIP; fdist = FindClosestShipofRel(chridx, &fdist, RELATION_FRIEND);
                float fdist; if (FindClosestShipofRel(chridx, &fdist, RELATION_FRIEND) == -1) fdist = DIST_NOSHIP;    // LDH 07Mar09
                if (CheckAttribute(rCharacter, "fantomtype")) {
                    switch(rCharacter.fantomtype)
                    {
                        case "trade" : ftmult = 1.25; break;
                        case "pirate": ftmult = 0.75; break;
                    }
                }
                float mrlmod = Bring2Range(SURR_MRL_SCL_MAX, SURR_MRL_SCL_MIN, 0.1, 1.4, stf(rCharacter.TmpSkill.Leadership)+ AIShip_isPerksUse(rCharacter.TmpPerks.IronWill, 0.0, 0.4));
                ref pch = GetMainCharacter();
                //if(CheckAttribute(rCharacter,"lastballcharacter")) { if(sti(rCharacter.lastballcharacter) == GetMainCharacterIndex()) { if(CheckAttribute(pch,"surmult")) ftmult = 99999.9; } }
                ref rGroup = Group_FindOrCreateGroup(Ship_GetGroupID(rCharacter));
                float surmorale = SURR_MAX_MORALE * mrlmod * ftmult;
//if (chridx && DEBUGINFO) trace("Ship_Checkmorale probe 2");
                if (tempmorale > surmorale) {
                    // put ship back in group and do group's task.
                    if(CheckAttribute(rGroup,"task") && rGroup.task != AITASK_RUNAWAY && CheckAttribute(rCharacter,"SeaAI.task") && rCharacter.SeaAI.task != rGroup.task) { Ship_SetTaskGroupTask(SECONDARY_TASK, chridx); }
                    return;
                }
// LDH fix for possible divide by zero crash -->
                float surch = 0.01;
                if (surmorale != 0.01) surch = Bring2Range(0.75, 0.01, 0.01, surmorale, tempmorale);    // original code
// LDH <--
                float HP = GetCurrentShipHP(&rCharacter);
                float HPr = HP / makefloat(GetCharacterShipHP(&rCharacter));
                // LDH HPr was tested against 20 in following lines, should have been 0.2, changed to 0.4 - 07Mar09
                if(surch > 0.25 || HPr < 0.4) Ship_SetTaskRunaway(SECONDARY_TASK, chridx);    // LDH HPr 0.2 - 07Mar09
//TraceAndLog("**** Surr: surch = " + surch + ", fdist = " + fdist + ", enemydist = " + enemydistance);    // LDH test 07Mar09
                if(HPr > 0.4 && fdist <= enemydistance) return; // if friend closer than enemy, no surrender.
                if (enemydistance > 1600.0) return;                // LDH don't surrender if enemy not on radar - 24Mar09
                if(HPr < 0.4) surch *= Bring2Range(6.0 * (1.0 + makefloat(fdist+200 < enemydistance)), 1.25 * (0.5 + makefloat(fdist+200 < enemydistance)/2.0), 0.1, sqrt(20), sqrt(HPr)); // should often surrender when low on HP, but not if a friend is nearer (to pick them up).
                //ref echr = GetCharacter(targetidx);
                float strengthrat = sqrt(FindPowerRatio(chridx));
                float SP = GetSailPercent(rCharacter);
                if(strengthrat > 1.0) { // they're stronger
                    if (SP < 40)
                        surch *= Bring2Range(5.0, 0.5, 0.1, sqrt(40), sqrt(SP));
                    else
                        surch *= 0.5;
                }
                surch *= SURR_GLOBAL_SCL; // LDH
                //Trace("SURR: for char " + rCharacter.id + " of ship " + rCharacter.ship.name + " surrender chance is " + round(surch*100.0)+"%");
                if (frnd() < surch) Ship_Surrender(chridx);
            }

Both of them are completely separated. I wonder if that is necessary or if they could be consolidated in a general function instead.
 
Back
Top