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

Low Priority Improving Steam ships

Levis

Find(Rum) = false;
Staff member
Administrator
Creative Support
Programmer
Storm Modder
So let me see if I remember what we would still want to do on this:
- American non-navy character: Robert Fulton, Engineer in Napoleonic, TODO: Whatever needs to be done to make the steam frigates work better

I'd say adding coal as a resource to power it instead of planks would be nice already. It could also help me with the fetch quests cause that is a resource the smiths would like.

Any more ideas?
 
For Build 14:
- Look at the stats for the steam frigates to actually make them worth using as a player ship
- Figure out why the sails are so prone to damage and hopefully rectify that if possible
- Possibly have a navy officer gain access to a steam frigate for France/England as well, since for America the chance of getting her is now only 25%

For Build 15:
- Add more steam ships for a seventh "Age of Steam" period
- Add "Coal" as fuel
- Have a sidequest in Revolutions that allows you to find the blue prints of an unbuilt steamship and have one created as per this idea by @Levis: http://www.piratesahoy.net/threads/blueprints-to-unlock-certain-ships.25431/
 
I second that definitely...a Seventh age would be an amazing addition and would round the game off nicely...ie from the golden age of sail to its demise. Some interesting gameplay opportunities with that too...ie who wins in a fight between an ironclad and a fleet of frigates :) The important thing to note too is that early beam-driven and single paddle steamers were extremely fragile...so if there's an explosion mechanism that could be implemented I think that's one thing that should be considered for Build 15! :D

Seriously though, I'd be raring to go on researching for that and helping in any way I can when the time comes...I'm going to make a start on my gunboat idea which I think could fit nicely right at the end of the sixth age...could make a good replacement for the Tartane as a absolute starter ship.
 
from the golden age of sail to its demise
From "Early Exporers" even. :cheeky

I'd definitely like to see this being included and I think it can be done.
But it would require quite a lot of work as just one variation of "steam frigate" isn't enough to make a real "Age of Steam".
The following ships would be welcome for this:
- Steam Gunboat
- HMS Warrior
- USS Monitor/Merrimack
- Clippers (fast, no defence cargo ship)
- Maybe the Turtle (experimental submersible)

I might even imagine having a Northern and Southern Not-so-United States. I think all of that is mostly possible and the foundations are already in the game.
Time, effort and manpower required is the main limitation.
 
Having it go up to about 1890 would be perfect as an upper limit, as you're starting to completely lose rigging and sails in that period but you also have certain classes still dependent on auxiliary wind power. An earlier limit could be 1870...so we can have all the iconic ironclad classes but not going so late we totally lose the feel of the game to Battle-Cruisers and early pre-dreadnaughts...just ideas :) I guess we also need to be thinking about on-shore assets which will have changed drastically by about 1850.

I'm happy to take the Gunboat (a later, more armed and armoured version than the one I'm already doing) and Warrior on as a full project for myself in the meantime unless anyone else wants to collaborate on it...my existing model of Monitor is probably not up to scratch but I'd definitely be able to help on that too if need be.

I have a few ideas for the more generic Corvette/Frigate classes from the period as well as special historical vessels which would make great assets too...but as you say, it's manpower that could be an issue...a Civil war/north south addition would be great.

EDIT: My only concern is where the Pirates would fit in :/
 
Last edited:
Having it go up to about 1890 would be perfect as an upper limit, as you're starting to completely lose rigging and sails in that period but you also have certain classes still dependent on auxiliary wind power. An earlier limit could be 1870...so we can have all the stereotypical classes but not going so late we totally lose the feel of the game...just ideas :)
The exact end date is just a number in a code file. I could change the final period right now to finish in the year 2000.
Not that it makes a difference. ;)
 
That's great...perhaps we should do that :D. I'm thinking more though how relevant 18th century buildings/land ordnance will be in the 19th century though :/ We'd need telegraph poles, Railway lines, Breech-loading Rifled guns etc...I know they're islands but they'd still have advanced from the the 18th century. :fiddler

I'd be happy to start research and compiling a list of possibilities model-wise if required? Just so we have a rough heading we know we can head in once we're ready to start working on it. I'm a complete noob with scripting but I might even be able to do some minor stuff for that if shown how :rolleyes:
 
Scripting can be arranged. Research can also be arranged. In the end, it comes down to "who is going to actually make the work happen".
And then I'm referring specifically to the required modeling and texture work.

For starters, we'd need enough ships to be able to call it a new "Age of Steam". Without that, doing anything else is pointless.
Once those ships are there and working in the game (in the current latest period), we can see about what next.
 
Ok, I know this is very low priority for the community at the immediate moment, but I'll jump on some research and decide how to balance the ships/what may be required both historically and realistically to make it work...so long as I'm not stepping on anyone's toes I can happily get on with that alongside modelling :) That way, we'll have something to present which may help drum up some interest and possibly more manpower to get said ships off the ground and into the engine. I'm just wary of biting off more than we can chew, as you say.

Should I make a new thread as this is starting to go off topic? That way I can update the community and collaborate if anyone else wants to get on this at such an early time...:cheeky
 
Last edited:
Feel free to make a new thread on this new "Age of Steam" and gather your thoughts there. They might as well be written down.
Just don't bother putting too much time and effort into it. Just enough for promotional purposes and possibly attracting attention should be enough.

Can't make anything happen without people to do the work, after all. Until then, anything is just dreaming.
Which is perfectly fine, but not at the expense of other things. ;)
 
I don't know if I'm doing anything wrong, but I keep filling up the Hudson with fuel to capture some footage for the trailer, and all the wood goes the second I enter world map. Is this known? As it means the engines are useless unless you remain at the port you bought the cargo at...which seems pointless. Is there a code in place which dictates that the wood is used when on the world map? As that too wouldn't make much sense seeing as the engines are auxiliary...? Am I missing out on something here? :confused: I don't recall Astrea doing this.
 
All the ships are identical apart from their textures.
The engine uses wood only when actually used and never on the worldmap.
Maybe you simply have damage that is being repaired?
 
I'd considered that but damage always gets repaired a lot more slowly for me; I was buying 100 units of planks and it was being used with a matter of hours on the world map. Perhaps you're right though, it is just repairing more quickly than I'm accustomed to!

So to confirm, planks are *only* consumed on steam ships when manually toggling the engine? That's good :)
 
Last edited:
Correct. Though it could be that the consumption when the engine is on its not quite well balanced.
If I recall, I just put some simple code in place and nobody ever commented on it one way of another.

So I haven't a clue if I accidentally made it brilliantly balanced on first try (not likely) or simply nobody tried it or bothered to comment.
Silence is always so very ambiguous.
 
Is there a way of coding it in to be more accurate by someone such as myself? As if it isn't, it'd be good to get that working accurately, especially if coal is to be introduced at some later stage...
 
Should be easy enough.
Remind me next week to find the relevant code; I'm not near my game right now and don't quite remember.
Might have been AIShip.c where it is handled.
 
Will do! If it's straightforward enough I can do that and archive it for when/if this moves up in priority.
 
Tutorial - Modding Tips & Tricks | PiratesAhoy!
Use the Windows Search Index trick described there to search for "StackSteamPuff"; with a bit of luck, that will lead you to the code you need.
Search then for GOOD_PLANKS near that.

If you can determine a better balancing for the consumption, by all means be my guest. :doff
 
This is the code from PROGRAM\SEA_AI\AIShip.c:
Code:
  // PB: Steam Ships -->
   if(SteamShip(rCharacter))
   {
     if(!IsMainCharacter(rCharacter))
     {
       switch(sti(fSailState * 2))
       {
         case 0:
           rCharacter.Ship.Power = 0;
         break;
         case 1:
           rCharacter.Ship.Power = 50;
         break;
         case 2:
           rCharacter.Ship.Power = 100;
         break;
       }
     }
     if(GetCargoGoods(rCharacter, GOOD_PLANKS) > 0 || !IsMainCharacter(rCharacter))
     {
       ref MyShipType = GetShipByType(GetCharacterShipType(rCharacter));
       aref arship; makearef(arship, rCharacter.ship);
       float PowerScalar = stf(GetAttribute(rCharacter,"Ship.Power"))/100;
       float SpeedRateScalar = stf(GetLocalShipAttrib(arship, MyShipType, "SpeedRate"))/10
       float DamageScalar = makefloat(GetCurrentShipHP(rCharacter)) / makefloat(GetCharacterShipHP(rCharacter));
       float SailCompensation = 1.0;
       if(sti(rCharacter.LastSailState) == 0)   SailCompensation = 0.5;
       rCharacter.Ship.Impulse.Rotate.z = 0.2 * PowerScalar * SpeedRateScalar * DamageScalar * SailCompensation;

       fX = 0; fY = 0; fZ = 0;
       if(CheckAttribute(rCharacter,"Ship.pos.x")) fX=stf(rCharacter.Ship.pos.x);
       if(CheckAttribute(rCharacter,"Ship.pos.y")) fY=stf(rCharacter.Ship.pos.y);
       if(CheckAttribute(rCharacter,"Ship.pos.z")) fZ=stf(rCharacter.Ship.pos.z);

       if(fX != 0 && fY != 0 && fZ != 0)   StackSteam(rCharacter, makeint(abs(stf(GetAttribute(rCharacter,"Ship.Power")))/12.5));
     }
   }
   // PB: Steam Ships <--
That gets executed once every second.
But it turns out, the code you need is actually in PROGRAM\NK.c:
Code:
void StackSteam(aref rCharacter, int puffs_per_second)
// Character and number of tentacles
{
   if (!bSeaActive) return;
   bool PlayEngineSound = false;
   int delay = 0;

   // Particle Effects
   for (int i=0; i < puffs_per_second; i++)
   {
     PostEvent("CreateStackSteam", delay, "i", rCharacter);
     delay = delay + 1000/puffs_per_second;
   }

   if(IsMainCharacter(rCharacter) && abs(sti(GetAttribute(rCharacter,"Ship.Power"))) > 0)
   {
     // Sound
     if(!CheckAttribute(rCharacter,"Ship.PlayedEngineSound"))
     {
       rCharacter.Ship.PlayedEngineSound = GetSeaTime();
       PlayEngineSound = true;
     }
     if(GetSeaTime() >= sti(rCharacter.Ship.PlayedEngineSound) + sti(rCharacter.basetime)) PlayEngineSound = true;

     if(PlayEngineSound)
     {
       int SoundID;
       SoundID = PlayStereoSound("objects\engine.wav");
       float volume;
       volume = 0.1 + 0.9*abs(stf(GetAttribute(rCharacter,"Ship.Power")))/100;
       SendMessage(Sound,"llf",MSG_SOUND_SET_VOLUME, SoundID, volume);
       rCharacter.Ship.PlayedEngineSound = GetSeaTime();
     }

     // Fuel Consumption
     if(!CheckAttribute(rCharacter,"Ship.FuelConsumption"))   rCharacter.Ship.FuelConsumption = 0;
     else   rCharacter.Ship.FuelConsumption = stf(rCharacter.Ship.FuelConsumption) + abs(stf(GetAttribute(rCharacter,"Ship.Power")))/100;
     if(stf(rCharacter.Ship.FuelConsumption) >= 60)
     {
       RemoveCharacterGoods(rCharacter,GOOD_PLANKS,1);
       rCharacter.Ship.FuelConsumption = 0;
     }
   }
}
That last part indicates that you use 1 unit of planks every 60 seconds on full power.
If you find that a bit too much, you can increase that '60' to a value that seems more reasonable to you.
Once you find a good number that makes sense, let me know and I can change it in the mod itself too. :doff
 
Back
Top