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

Ideas for the future!

Does anyone still care about this game?
I've been hiding away, so I really don't know what's been going on.

Improved warnings for potential acts of piracy does indeed sound quite considerate to the players, that's fair.
I must admit I'm no expert on interface coding, but I do recall adding a few text strings here and there.
What if you look for my initials in the Nations Relations interface file?
I added a note there about clicking on flags to change what they look like.
Perhaps that gives you an example of how to do what you've got in mind?

Personally I'm also concerned about the bug that makes ships sink even if you let them go.
That should NOT happen, is pretty evil and didn't use to be the case either.
Have you got any clue when that problem was introduced?
Once upon a time, I would go back through my archive of old mod releases to see which ones do and don't have newly introduced issues.
Knowing this issue exists does quite bother me.
Letting people go should LET THEM GO.
Not kill them anyway. :facepalm
 
What if you look for my initials in the Nations Relations interface file?
I added a note there about clicking on flags to change what they look like.
That's the code to display small one-line hints about changing flags, including the warning that you can't change flag if you're not at sea or on deck. What I want is something like the box of text which appears if you try to put a captain onto a captured ship and your "Leadership" skill is less than 5.

And, of course, I'll want to remove all the code about checking for piracy and applying penalties when a ship sinks.

Personally I'm also concerned about the bug that makes ships sink even if you let them go.
That should NOT happen, is pretty evil and didn't use to be the case either.
Have you got any clue when that problem was introduced?
At a guess, this part of "Cabinfight_dialog.c":
Code:
        case "Exit_release":
            PlayStereoSound("INTERFACE\took_item.wav");
            AddMoneyToCharacter(PChar,sti(NPChar.wealth));
            Log_SetStringToLog(TranslateString("", "CaptainMoney1")+" "+MakeMoneyShow(sti(NPChar.wealth),"",MONEY_DELIVER)+" "+TranslateString("", "CaptainMoney2"));
            if(CheckAttribute(NPChar,"wealth")) NPChar.wealth = "0";
            DialogExit();
            DeleteCharacter(NPChar); //                                                      <---  This might be killing the captain and sinking the ship
            boarding_enemy.status = "live";
            boarding_enemy.position = "loser";
            if (CheckAttribute(PChar, "TalkWithSurrenderedCaptain")) DeleteAttribute(PChar, "TalkWithSurrenderedCaptain"); // KK
            LAi_ReloadBoarding();
        break;
If that is indeed what is doing it, then it's been like that since at least Beta 3.
 
That's the code to display small one-line hints about changing flags, including the warning that you can't change flag if you're not at sea or on deck. What I want is something like the box of text which appears if you try to put a captain onto a captured ship and your "Leadership" skill is less than 5.
Then I fear I know about as much as you do.
I've never added a box text myself either.

And, of course, I'll want to remove all the code about checking for piracy and applying penalties when a ship sinks.
In your thinking, what will still be considered an act of Piracy then?
The way I always figured it, you're not supposed to take cargo or ships or crew or anything, except if the enemy is already a pirate or you've got a LoM.
I want a LoM to actually MEAN something.

If that is indeed what is doing it, then it's been like that since at least Beta 3.
That could indeed be...
But really, THAT long?!?
Have we really had this bug for TEN BLOODY YEARS and I only heard about it really relatively recently?
What the hell???
 
In your thinking, what will still be considered an act of Piracy then?
The way I always figured it, you're not supposed to take cargo or ships or crew or anything, except if the enemy is already a pirate or you've got a LoM.
I want a LoM to actually MEAN something.
That's exactly what it means - you're not allowed to take cargo or prize ships. You should be allowed to sink an enemy ship, though, either by gunfire or by boarding and then abandoning it. So what I want is no check for piracy when a ship sinks, nor just by entering the ransack screen. But if you try to assign a captain or go to the cargo screen, you should get a warning, and if you go ahead anyway, that's piracy. (You can take crew. Otherwise you're leaving them on a ship which is going to sink when you quit the ransack screen. Of course, you could be evil, leave them there, then try to earn reputation points by fishing them out of the water. :g2)

That could indeed be...
But really, THAT long?!?
Have we really had this bug for TEN BLOODY YEARS and I only heard about it really relatively recently?
What the hell???
It's been happening for as long as I can remember - which may not mean much since I'm not sure if I'm remembering early B14 games properly. My guess is that leaving the ship intact could cause even more serious bugs. For similar reasons, if you take the captain prisoner, what actually happens is that he's cloned and killed, then you get the clone as a prisoner.
 
That's exactly what it means - you're not allowed to take cargo or prize ships. You should be allowed to sink an enemy ship, though, either by gunfire or by boarding and then abandoning it. So what I want is no check for piracy when a ship sinks, nor just by entering the ransack screen. But if you try to assign a captain or go to the cargo screen, you should get a warning, and if you go ahead anyway, that's piracy.
The way it was, I figured you should either disable the other ship or try to escape.
But I guess sinking in self defence might be acceptable too...?
I guess...

You can take crew. Otherwise you're leaving them on a ship which is going to sink when you quit the ransack screen. Of course, you could be evil, leave them there, then try to earn reputation points by fishing them out of the water. :g2
Ah, but THAT'S just working AROUND a bug.
Better to FIX it if at all possible.

It's been happening for as long as I can remember - which may not mean much since I'm not sure if I'm remembering early B14 games properly. My guess is that leaving the ship intact could cause even more serious bugs. For similar reasons, if you take the captain prisoner, what actually happens is that he's cloned and killed, then you get the clone as a prisoner.
Any chance you could check if that line is indeed the culprit?
I think we can come up with a better solution.
Replace that line with an attribute to be added to the NPC captain.
Then in the section of code that logs out ships from the scene when you reload, have the DeleteCharacter occur there instead.
There must be a way...
 
The way it was, I figured you should either disable the other ship or try to escape.
But I guess sinking in self defence might be acceptable too...?
It was. If I remember reading correctly, at one time, it was not only acceptable, it was required - if you met an enemy ship, you had to attack and sink it. Later the requirement was dropped as it was the navy's job to sink enemy ships, so civilians - i.e. merchants - weren't required to put themselves in harm's way. But it was, and probably still is, legal for a merchant to sink an enemy which is attacking it - it was certainly legal in WW2, which is why merchant ships were equipped with small guns to defend themselves.

Ah, but THAT'S just working AROUND a bug.
Better to FIX it if at all possible.
You mean remove the reputation gain for picking up survivors, or add a reputation gain for taking crew from a ship which you're about to scuttle? :D Otherwise it's not a bug, it's just the way the game works.

Any chance you could check if that line is indeed the culprit?
I think we can come up with a better solution.
Replace that line with an attribute to be added to the NPC captain.
Then in the section of code that logs out ships from the scene when you reload, have the DeleteCharacter occur there instead.
There must be a way...
That's your job. My priority is to fix the problem with relations. ;) (And, if I can ever figure out what's doing it, also fix the real relation bug whereby if a flagship surrenders, the rest of the group becomes neutral.)
 
You mean remove the reputation gain for picking up survivors, or add a reputation gain for taking crew from a ship which you're about to scuttle? :D Otherwise it's not a bug, it's just the way the game works.
No, I mean stopping the sinking of ships you deliberately let go.
So you don't gain reputation from drowning crew, because there won't be drowning crew.

That's your job. My priority is to fix the problem with relations. ;)
Well, you can comment out the line and see what happens while you're testing.
I might indeed eventually be tempted to look at doing what I suggested by moving it afterwards.

And, if I can ever figure out what's doing it, also fix the real relation bug whereby if a flagship surrenders, the rest of the group becomes neutral.
OOOOF, now THAT'LL be a toughie!!
Many very clever people have already failed on that one.
I'm at a loss there...
All I know is that ever since my nation relations rewrite, at least if you save and then reload the scene, they'll properly return to hostile again.
 
No, I mean stopping the sinking of ships you deliberately let go.
So you don't gain reputation from drowning crew, because there won't be drowning crew.
Ah, OK. What confused me was that you wrote that in response to my saying that you can't take the ship, you can't take the cargo but you can take the crew, meaning a ship which you boarded (or which boarded you) and you're now at the ransack screen.

Well, you can comment out the line and see what happens while you're testing.
I might indeed eventually be tempted to look at doing what I suggested by moving it afterwards.
The problem caused by a non-sinking captain might not show up right away. Perhaps a character who should have been killed but wasn't, could persist and cause another captain to fail to show up; or it might simply make the game a bit less stable; or some other bug which doesn't bite until later. In any case, that still requires someone to fight ships until one surrenders, the captain really does surrender, and then the player remembers to say "Let's be civilised" instead of capturing or looting the ship. (Which I might do, but what I'll be checking is a new version of the dialog in which the captain accuses you of piracy if you say anything other than "Let's be civilised" and you don't have a LoM. Then you'll have the option to change your mind.)
 
In any case, that still requires someone to fight ships until one surrenders, the captain really does surrender, and then the player remembers to say "Let's be civilised" instead of capturing or looting the ship. (Which I might do, but what I'll be checking is a new version of the dialog in which the captain accuses you of piracy if you say anything other than "Let's be civilised" and you don't have a LoM. Then you'll have the option to change your mind.)
Hammie tried to do something, maybe it will help you look:
 
Ah, OK. What confused me was that you wrote that in response to my saying that you can't take the ship, you can't take the cargo but you can take the crew, meaning a ship which you boarded (or which boarded you) and you're now at the ransack screen.
My apologies for the confusion then.

The problem caused by a non-sinking captain might not show up right away. Perhaps a character who should have been killed but wasn't, could persist and cause another captain to fail to show up; or it might simply make the game a bit less stable; or some other bug which doesn't bite until later. In any case, that still requires someone to fight ships until one surrenders, the captain really does surrender, and then the player remembers to say "Let's be civilised" instead of capturing or looting the ship. (Which I might do, but what I'll be checking is a new version of the dialog in which the captain accuses you of piracy if you say anything other than "Let's be civilised" and you don't have a LoM. Then you'll have the option to change your mind.)
Ships sinking when they shouldn't could cause its own problems too.
For starters with the weird graphical artefacts from the Different Flags mod.

How about you comment out the line and just see what happens next time(s) you manage to encourage a proper surrender?
We'll learn something new then one way or the other.

I assume you are concerned about the Marie Celeste bug you've been battling with yourself?
From what I gather, despite everything we tried, that still happens to players even now.
Supposedly your console code does work to restore the game back to normal though.
But somehow there's characters still NOT being deleted when they should be and I'm not sure where.
Maybe we could just add your little section too the default F12 behaviour to make it easier for players to use?
Or how about triggering it periodically, probably best are midnight while being ashore.
That's more a bandaid than an actual fix, but I'm not quite sure how to do it the right way anymore...
 
Ships sinking when they shouldn't could cause its own problems too.
For starters with the weird graphical artefacts from the Different Flags mod.
That's caused by masts being knocked down. If anything, sinking the released ship might help with that. If you shot away one of its masts before boarding, that will cause the graphics problem. Once the ship is sunk and has disappeared, the problem may also disappear unless there's another ship with a mast missing.

How about you comment out the line and just see what happens next time(s) you manage to encourage a proper surrender?
We'll learn something new then one way or the other.
If it's that easy, you can do it. ;) Otherwise, we seem to be getting off topic - what I'm aiming to do is shift the check for piracy from when a ship is sunk to when you either capture or loot the ship. That's going to take enough effort without being distracted by other issues. Except the one below, and that only because I thought it was already fixed:
I assume you are concerned about the Marie Celeste bug you've been battling with yourself?
From what I gather, despite everything we tried, that still happens to players even now.
Supposedly your console code does work to restore the game back to normal though.
If so, it means some "Enc_CabinCaptain" characters aren't being properly wiped. However, looking at bug reports, it hasn't happened for some time, the last report being in 2023. Possibly you've seen more recent reports somewhere other than this forum? If so, tell anyone who reports the bug that I need a "compile.log" to see which versions of NH they're using, and a savegame immediately before boarding - either a single ship which surrendered or the last ship of a group.

But yes, that's the sort of thing I fear could happen if a released ship isn't sunk - perhaps the captain isn't properly cleared, but no problem shows up unless it's happened enough times to use up all captain slots and prevent another one from appearing.
 
Looking at "PROGRAM\INTERFACE\ransack_main.c", I haven't yet managed to work out how interface boxes work. But I think I've found what causes released ships to sink. As the old saying goes, it's not a bug, it's a feature.

Function "ProcessCancelExit()", specifically this line:
Code:
if (frnd() > 0.7) PostEvent("Ship_BranderDetonate", 16000, "i", refEnemyCharacter); // TIH a little fun
I've followed through what event "Ship_BranderDetonate" does, and that would certainly sink the ship and blame "Hand of God" for it. The comment says "a little fun" and it only happens sometimes, so it's not a fix for any bug caused by leaving the ship afloat.

It's an Easter egg. So presumably you'll want it left in. ;)
 
If it's that easy, you can do it. ;) Otherwise, we seem to be getting off topic - what I'm aiming to do is shift the check for piracy from when a ship is sunk to when you either capture or loot the ship. That's going to take enough effort without being distracted by other issues.
You're trying to fix a personal preference.
I care about fixing a bug.
This thread is about "Ideas of the Future", so both are kind-of ON topic.
And both should probably ideally get their own threads instead.

And you're not funny, despite your winky face.
It's EASY to combine with what you are already doing.
It's HARD to do from scratch PLUS doubly time-consuming if I have to do it.
I do have other fish to fry, such as Nautical Academy, Uniting Maritime Enthusiasts, Saving Trees, Saving Whales and arranging what I announced through PM last week.
Did you see that, by the way?
I'm shocked by how few people gave any sense of life on that one.
Though at least the one and only @Inez Dias did, so I'm not complaining.
She's ACTUALLY COMING! Hotel already booked and everything!! It'll be EPIC!!!

However, looking at bug reports, it hasn't happened for some time, the last report being in 2023. Possibly you've seen more recent reports somewhere other than this forum? If so, tell anyone who reports the bug that I need a "compile.log" to see which versions of NH they're using, and a savegame immediately before boarding
Discord.
These people are on Discord
Nowadays MOST people are on Discord.
Virtually all ignore the forum.
Just like you and @Jack Rackham aren't on the Discord.
Our community is SPLIT due to dumb technical progress reasons and I HATE IT with a passion.
Made EVEN WORSE by me being virtually the only person, to some extent with @Mirsaneli , who is stuck between BOTH places.

I KEEP telling people who report issues and have questions to get in touch with you here on the forum and NOBODY BLOODY DOES IT.
It's absolutely UNBEARABLE!!!

It's an Easter egg. So presumably you'll want it left in. ;)
Probably yes.
I can't remember what that was for.
It was an The Incredible Hat thing.
You know... from the "Hook & Hat" tavern fame.
 
You're trying to fix a personal preference.
I care about fixing a bug.
I'd say it's the other way round. The relation system is definitely bugged, though I'm unlikely to find any way to fix the most serious bug (fleet turning neutral when flagship surrenders). The problem about sinking an enemy ship counting as piracy is my main target as it's almost certainly one of the reasons why @Hylie Pistof is no longer with us - he was attacked, defended himself, lost his merchant licence and had a near immediate crew mutiny as a result.

Whereas the chance of a released ship exploding isn't a bug, it's intentional code. And because it does a random check, the ship doesn't always explode, which is why, when I was testing my new "Cabinfight_dialog.c" and released a ship, it stayed afloat. A variable in "InternalSettings.h" would probably do the job. Try the attached zip, containing both "InternalSettings.h" with new variable SURR_EXPLODE set to the current value of 0.7, and "ransack_main.c" edited to use it.

I do have other fish to fry, such as Nautical Academy, Uniting Maritime Enthusiasts, Saving Trees, Saving Whales and arranging what I announced through PM last week.
Did you see that, by the way?
Yes, but unfortunately I already have something else arranged for 18-25 August.

I KEEP telling people who report issues and have questions to get in touch with you here on the forum and NOBODY BLOODY DOES IT.
In that case, could you ask one of those who still find captains missing to upload a savegame ready to board and a "compile.log", then relay them to here? If there is still a problem, I want to fix it!
 

Attachments

  • surrender_explode.zip
    31.1 KB · Views: 7
I'd say it's the other way round. The relation system is definitely bugged,
But it's not bugged at all.
It works exactly as I designed it.
You may disagree with the design choices, but the behaviour is not unintentional.
Which is the definition of a proper bug.

The problem about sinking an enemy ship counting as piracy is my main target as it's almost certainly one of the reasons why @Hylie Pistof is no longer with us - he was attacked, defended himself, lost his merchant licence and had a near immediate crew mutiny as a result.
Then why on earth or on the sea did he never bother to talk to me about it?
I have zero memory of any of that ever happening.
So it slipped completely below my conscious radar.

Whereas the chance of a released ship exploding isn't a bug, it's intentional code.
Why did you suddenly bring exploding ships into things?
The problem I understand is that EVERY freed ship always SINKS.
Not explodes.

Yes, but unfortunately I already have something else arranged for 18-25 August.
Come some other time then.
I'll make it worth your while either way.
There's enough awesome stuff even outside the regular public event.

In that case, could you ask one of those who still find captains missing to upload a savegame ready to board and a "compile.log", then relay them to here? If there is still a problem, I want to fix it!
Thanks!
Unfortunately whatever reports there were, are now ages old and that means they're lost to Davy Jones' Locker.
Technically the record still exists somewhere, but there's effectively zero chance of finding it again.
It's too well hidden in the chaos of the past.
Discord is good for instant messaging.
It's atrocious for anything long term.
 
Why did you suddenly bring exploding ships into things?
The problem I understand is that EVERY freed ship always SINKS.
Not explodes.
It doesn't explode as in disappear completely in a sheet of flame. But the code which makes it go bang a few times and then sink is 'PostEvent("Ship_BranderDetonate", 16000, "i", refEnemyCharacter)'. And it doesn't always sink, it should only do so 'if (frnd() > 0.7)' which should be about 30% of the time. So, last time I released a surrendered ship, it stayed afloat. Anyway, try the files I uploaded and set SURR_EXPLODE to 1.0. That ought to completely stop released ships from sinking.

Thanks!
Unfortunately whatever reports there were, are now ages old and that means they're lost to Davy Jones' Locker.
Technically the record still exists somewhere, but there's effectively zero chance of finding it again.
It's too well hidden in the chaos of the past.
Discord is good for instant messaging.
It's atrocious for anything long term.
Whereas PA! has a very long memory, which means:
Then why on earth or on the sea did he never bother to talk to me about it?
I have zero memory of any of that ever happening.
So it slipped completely below my conscious radar.
He did:
My strange asks are really a must-have!
I was approaching Marigot. The French and English were hostile but I was ok with no LoM. I raised the French flag and sank an English Heavy Barque and captured an English Light Fluyt of War. From there I sailed into Marigot where I was attacked by everybody. I was also unable to sail away from there because the crews immediately mutinied. I had to delete those saves to continue the game.
 
It doesn't explode as in disappear completely in a sheet of flame. But the code which makes it go bang a few times and then sink is 'PostEvent("Ship_BranderDetonate", 16000, "i", refEnemyCharacter)'. And it doesn't always sink, it should only do so 'if (frnd() > 0.7)' which should be about 30% of the time. So, last time I released a surrendered ship, it stayed afloat. Anyway, try the files I uploaded and set SURR_EXPLODE to 1.0. That ought to completely stop released ships from sinking.
So that line you found about DeleteCharacter turned out to have nothing to do with it after all?

Whereas PA! has a very long memory, which means:
One of the reasons I really do love having our good 'ol forum.
It's really an external memory for stuff that just doesn't fit in my brain.

I've been having dark, dark years indeed and been neglecting everything, from my Atlantis to PiratesAhoy!
I may have skimmed over that message at the time, but it never really registered with me properly.
Someone should've sent me a targeted single-topic PM before Hylie would leave being all Pistof.
 
So that line you found about DeleteCharacter turned out to have nothing to do with it after all?
Probably not. I suspected it only because, if a character is killed on land, his ship is lost as well, so perhaps deleting a character after he surrendered would sink his ship too. On the other hand, that 'PostEvent("Ship_BranderDetonate", 16000, "i", refEnemyCharacter)' line would certainly do it - I traced what event "ShipBranderDetonate" does, and it does exactly what you see - there are bangs, flame and smoke, the ship sinks, and an on-screen message credits it to "Hand of God". And because it's controlled by 'if (frnd() > 0.7)' and is accompanied by a comment "a little fun", it's unlikely to be a fix for a bug caused by a released captain remaining afloat - which he should do about 70% of the time.

Meanwhile, I've added a bit to "Cabinfight_dialog" so that, if your attack is not covered by a valid LoM or naval commission, the captain will accuse you of piracy when you demand money. You then have the option to switch to releasing him without taking money or cargo (but with the option to unlock perks if you're playing with locked perks), or to go ahead anyway. But really, I need to tackle "ransack_main.c" to check for piracy when you take cargo or capture the ship...

Hammie tried to do something, maybe it will help you look:
I'm not sure that's a good idea. The reason for duelling is that you need to do something to earn the right to capture the ship. That prevents you from being in a little frigate, hammering a 1st rate ship of the line with grapeshot until it surrenders, then helping yourself to the big ship. More importantly, it means that if an enemy ship has surrendered after fighting another ship or a fort, you can't just take it without any sort of risk on your part. Also, that version checks if your current crew is larger than the enemy's to decide whether your attempt to refuse a duel succeeds. If the enemy ship has surrendered then it probably is short of crew - that's why it surrendered. The only time you should not need to duel an enemy captain is if your ship is significantly larger than his, and that's already the case - if your ship is at least 2 tiers bigger, he will never duel you.
 
Probably not. I suspected it only because, if a character is killed on land, his ship is lost as well, so perhaps deleting a character after he surrendered would sink his ship too. On the other hand, that 'PostEvent("Ship_BranderDetonate", 16000, "i", refEnemyCharacter)' line would certainly do it - I traced what event "ShipBranderDetonate" does, and it does exactly what you see - there are bangs, flame and smoke, the ship sinks, and an on-screen message credits it to "Hand of God". And because it's controlled by 'if (frnd() > 0.7)' and is accompanied by a comment "a little fun", it's unlikely to be a fix for a bug caused by a released captain remaining afloat - which he should do about 70% of the time.
Oh, so it appears there isn't even a bug there to begin with? Must've been some misunderstanding then.
All the better. The best bugs are the bugs that aren't there!

Meanwhile, I've added a bit to "Cabinfight_dialog" so that, if your attack is not covered by a valid LoM or naval commission, the captain will accuse you of piracy when you demand money. You then have the option to switch to releasing him without taking money or cargo (but with the option to unlock perks if you're playing with locked perks), or to go ahead anyway.
Oooh, that'll be a GREAT improvement!
I always found the existing Cabinfight dialog file very confusing.
I could never quite figure out when playing what does what and how I should navigate through the tree to get the result I intend.

I'm not sure that's a good idea. The reason for duelling is that you need to do something to earn the right to capture the ship. That prevents you from being in a little frigate, hammering a 1st rate ship of the line with grapeshot until it surrenders, then helping yourself to the big ship. More importantly, it means that if an enemy ship has surrendered after fighting another ship or a fort, you can't just take it without any sort of risk on your part. Also, that version checks if your current crew is larger than the enemy's to decide whether your attempt to refuse a duel succeeds. If the enemy ship has surrendered then it probably is short of crew - that's why it surrendered. The only time you should not need to duel an enemy captain is if your ship is significantly larger than his, and that's already the case - if your ship is at least 2 tiers bigger, he will never duel you.
I'm inclined to agree with you.
But some people don't.
So I'd say: TOGGLE TIME!
Perhaps combine it with Arcade Game Mode for simplicity.
 
Back
Top