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 -
// EVENT, calculate dynamic parameters for ship, one per second
void Ship_UpdateParameters()
{
//int tmpLangFileID = LanguageOpenFile("interface_strings.txt");
int iCharacterIndex = GetEventData();
if (iCharacterIndex < 0) return;
ref rCharacter = GetCharacter(iCharacterIndex);
if (CharacterIsDead(rCharacter)) return;
float fSailState = GetEventData();
// NK, Amokachi -->
if(IsMainCharacter(rCharacter))
{
if(!CheckAttribute(rCharacter,"LastSailState")) rCharacter.LastSailState = makeint(fSailState * 2);
if(makeint(fSailState * 2) != sti(rCharacter.LastSailState))
{
switch (makeint(fSailState * 2))
{
case 0:
Log_SetStringToLog(TranslateString("","Strike all sail!"));
//Play3DSound("sails_lowered", fX, fY, fZ);
break;
case 1:
Log_SetStringToLog(TranslateString("","Battle sails!"));
//Play3DSound("sails_battle", fX, fY, fZ);
break;
case 2:
Log_SetStringToLog(TranslateString("","Make all sail!"));
//Play3DSound("full_sails", fX, fY, fZ);
break;
}
if (ENABLE_EXTRA_SOUNDS == 1 && actLoadFlag == 0) { // added by KAM after build 11 // KK
if (stf(rCharacter.LastSailState) > fSailState * 2.0) {
PlayStereoSound("sails_down");
} else {
PlayStereoSound("sails_up");
}
}
rCharacter.LastSailState = makeint(fSailState * 2);
}
}
// NK, Amokachi <--
// PB: Steam Ships -->
else
{
if(!CheckAttribute(rCharacter,"LastSailState")) rCharacter.LastSailState = makeint(fSailState/10 * 2);
}
if(SteamShip(rCharacter))
{
float fX, fY, fZ;
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)
{
switch(sti(rCharacter.LastSailState))
{
case 0: StackSteam(rCharacter, 2); break;
case 1: StackSteam(rCharacter, 4); break;
case 2: StackSteam(rCharacter, 8); break;
}
}
}
// PB: Steam Ships <--
void StackSteam(aref rCharacter, int puffs_per_second)
// Character and number of tentacles
{
if (!bSeaActive) return;
int delay = 0;
for (int i=0; i < puffs_per_second; i++)
{
PostEvent("CreateStackSteam", delay, "i", rCharacter);
delay = delay + 1000/puffs_per_second;
}
}
#event_handler("CreateStackSteam", "StackSteamPuff");
void StackSteamPuff()
{
if (!bSeaActive) return;
aref rCharacter = GetEventData();
float fX, fY, fZ, fAY;
fX = 0; fY = 0; fZ = 0;
if(CheckAttribute(rCharacter,"Ship.pos.x")) fX=stf(rCharacter.Ship.pos.x);
else return;
if(CheckAttribute(rCharacter,"Ship.pos.y")) fY=stf(rCharacter.Ship.pos.y);
else return;
if(CheckAttribute(rCharacter,"Ship.pos.z")) fZ=stf(rCharacter.Ship.pos.z);
else return;
if(CheckAttribute(rCharacter,"Ship.Ang.y")) fAY=stf(rCharacter.Ship.Ang.y);
else return;
float gX, gY, gZ;
gX = 0; gY = 0; gZ = 0;
gX=GetCharacterShipValue(rCharacter, "stack1X");
gY=GetCharacterShipValue(rCharacter, "stack1Y");
gZ=GetCharacterShipValue(rCharacter, "stack1Z");
CreateParticleSystemX("steamer_smoke",fX - gX*cos(fAY) + gZ*sin(fAY), fY + gY, fZ + gX*sin(fAY) + gZ*cos(fAY), Whr_GetWindSpeed()*sin(Whr_GetWindAngle()), 10*Degree2Radian(90.0), Whr_GetWindSpeed()*cos(Whr_GetWindAngle()), 0);
if(HasCharacterShipAttribute(rCharacter, "stack2X") || HasCharacterShipAttribute(rCharacter, "stack2Y") || HasCharacterShipAttribute(rCharacter, "stack2Z"))
{
gX = 0; gY = 0; gZ = 0;
gX=GetCharacterShipValue(rCharacter, "stack2X");
gY=GetCharacterShipValue(rCharacter, "stack2Y");
gZ=GetCharacterShipValue(rCharacter, "stack2Z");
CreateParticleSystemX("steamer_smoke2",fX - gX*cos(fAY) + gZ*sin(fAY), fY + gY, fZ + gX*sin(fAY) + gZ*cos(fAY), Whr_GetWindSpeed()*sin(Whr_GetWindAngle()), 10*Degree2Radian(90.0), Whr_GetWindSpeed()*cos(Whr_GetWindAngle()), 0);
}
if(rCharacter.LastSailState > 0.1)
{
if(HasCharacterShipAttribute(rCharacter, "prop1X") || HasCharacterShipAttribute(rCharacter, "prop1Y") || HasCharacterShipAttribute(rCharacter, "prop1Z"))
{
gX = 0; gY = 0; gZ = 0;
gX=GetCharacterShipValue(rCharacter, "prop1X");
gY=GetCharacterShipValue(rCharacter, "prop1Y");
gZ=GetCharacterShipValue(rCharacter, "prop1Z");
CreateParticleSystemX("steamer_wake",fX - gX*cos(fAY) + gZ*sin(fAY), fY + gY, fZ + gX*sin(fAY) + gZ*cos(fAY), sin(fAY), 0.0, cos(fAY), 0);
}
if(HasCharacterShipAttribute(rCharacter, "prop2X") || HasCharacterShipAttribute(rCharacter, "prop2Y") || HasCharacterShipAttribute(rCharacter, "prop2Z"))
{
gX = 0; gY = 0; gZ = 0;
gX=GetCharacterShipValue(rCharacter, "prop2X");
gY=GetCharacterShipValue(rCharacter, "prop2Y");
gZ=GetCharacterShipValue(rCharacter, "prop2Z");
CreateParticleSystemX("steamer_wake",fX - gX*cos(fAY) + gZ*sin(fAY), fY + gY, fZ + gX*sin(fAY) + gZ*cos(fAY), sin(fAY), 0.0, cos(fAY), 0);
}
}
}
// Steam Effects Coding - PB
// PB: Steam Ships -->
// Stack 1 = coal furnace exhaust
refShip.steamship = true;
refShip.stack1X = 0; // Width
refShip.stack1Y = 4.5; // Height
refShip.stack1Z = 4.5; // Length
// Smokestack 2 - boiler steam release
refShip.stack2X = 4.5; // Width
refShip.stack2Y = 2.5; // Height
refShip.stack2Z = 2.5; // Length
//SWS Prop Wash
refShip.prop1X = 6; // Width
refShip.prop1Y = 0; // Height
refShip.prop1Z = -1.5; // Length
refShip.prop2X = -6; // Width
refShip.prop2Y = 0; // Height
refShip.prop2Z = -1.5; // Length
// PB: Steam Ships <--
In PROGRAM\NK.c (can go in any other general file as well)
"why is my steamer broken?" and filling the forum with same and irritating new threads over and over again.
with full cargo hold the waves are reaching the bottom of portholes and sternhouse. It actually looks like it's sinking.
Excuse me, I fixed Constitution's walk file a long time ago. This will be released along with my other work.
This ship isn't even in internal circulation; there should be no speculation at all. If the ship is in internal testing, it wasn't done without my authorisation and thus contains the wrong config settings,
"why is my steamer broken?" and filling the forum with same and irritating new threads over and over again.
You can direct those issues to me, personally. Be thankful the ship was even made at all. Like all my present and future projects for Build, there will also be a backstory involved.
with full cargo hold the waves are reaching the bottom of portholes and sternhouse. It actually looks like it's sinking.
Intended design specification, which will again, be featured in the ship's "history". In addition to several new ships I've reviewed waterlines for all 220 other vessels in Build as well. Not all experimental ships were practical or boasted perfect seakeeping; without access to modern hydrodynamics theories, many historical ships were incredibly unsafe.