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

Mod Release Age of Pirates: Caribbean Tales - Historical Immersion Supermod

The following answers are based on what I know. It is probably correct, but I hope somebody will correct me if I do happen to be wrong.

There are several styles, but the real/actuall music_alias.ini is in "\RESOURCE\INI\aliases\music_alias.ini" right? And the "Music Options.exe" just copies the selected .ini to the aforementioned location?
Pretty sure that is indeed the case. :yes

And there are more categories then in the original (like "music_jungle") -> are those added in the game via the mod? Are they not used if not in the .ini? Can one just add new categories?
You can add anything. But you would need to also reference it in the PROGRAM folder so that it does something.
You should check if it need to be registered in sound.c; I think you need to define new "location/sound types" for it.
Then you can change the location init files so that your chosen locations use your new sound profile with custom music instead.

Different music files only get loaded on location change (or reload) right?
Yep.

So if I want more variance I could copy some tracks from Sea Dogs or BuildMod and reference them in the "music_alias.ini"?
Yep.
 
Hi there!
Good to hear that this mod is still active! Thanks for all your hard work!

Might I tell you of some errors I found?
  • k3\music_alias.ini
    • "103-BachBattle4.mp3" doesn't exist, so this line should be changed to "105-BachBattle4.mp3"(?)
  • mc\music_alias.ini
    • following music files that are referenced do not exist:
    • Setting Sail.ogg
    • Caves3.wav
    • Caves2.wav
    • Pir_Town2.ogg
    • Pir_Town3.ogg
  • and these music files DO exist, but are never referenced:
    • 012-CharpentierTeDeum.mp3
    • 016-GeminianiLaFollia.mp3
    • 030-HandelSonata5.mp3
    • 036-LullyIdylle.mp3
    • 046-MaraisPrelude.mp3
    • 053-VitaliFollia.mp3
    • 059-VivaldiRV549.mp3
    • 065-VivaldiLaFolia2.mp3
    • 108-BachInquisition.mp3
    • 121-HandelInside.mp3
    • 125-HandelTeno.mp3
    • 131-LullyFort.mp3
    • 146-VivaldiBrothel.mp3
    • 148-VivaldiCoAS.mp3
    • 152-VivaldiBrothel2.mp3
    • 153-VivaldiBrothel3.mp3
    • 154-VivaldiUnderwater.mp3
    • Hol_Town.ogg
  • the following description in "common.ini" seems... odd:
    • string = Cannons_up,"Every point invested in this skill lowers the chance of a cannon exploding by 2%, and increases reloading times and the grouping of shots by 3%."
    • why would a higher skill increase loading times and the "groups" (which means it would lower accuracy)?
    • is just the description wrong, or is this actually how this skill works?
    • shouldn't it be like this in the description (and the code^^): "Every point invested in this skill lowers the chance of a cannon exploding by 2%, and decreases reloading times and the grouping of shots by 3%."
Also, I got an editing question: I think some weapons are a bit overpowered; as well as spyglass1 and 2.
So I went ahead and edited them in "initItems.c".
No biggi.
BUT: I do need to start a new game for these changes to take effect, right? Is there another way to change item properties, so they are reflected ingame? Maybe open a console and "reloading" this initItems.c?

THANKS!

Hotshot
Sailing1.ogg is the same one as Setting sail, honestly I haven't thought about those that I missed out of the classical music mod I thought I had linked them all appropriately... I have no idea as to the skill upgrade system and how it works, but I suspect that it is a typo issue... Before you go off editing v4.0 how would you like to join in with ChezJefrey and I behind the scenes and contribute to the efforts of the next update? I can see you have some time on your hands and are able to detect things that even I wasn't aware of if you want to take a crack at it. This will also give you access to our test game files as they stand right now... I have the most up to date version as I have been doing most of the work with a few exceptions that have been credited to the proper people (most notably my partner ChezJefrey). I think you would be a great help. If you give me an affirmative answer I will ask ChezJefrey to add you to the conversation.
 
Well, I found another small bug: when you fire cannoneer and the likes it lists the price as "minus", meaning I should get some money. BUT what actually happens is, that one looses money.
I know, I'm a curious feller for who fires his crew :p
But as I'm starting as a small trader, I don't need guns'n'ammo, so I sell that stuff; which also means I don't need as much food and have more cargo space for something else^^

It's debatable if one should get money when firing the lot, but at least one shouldn't loose money....
 
Ok, I've found out on how to correct that error; in "hirecrew.c" you just need to comment out the following
Code:
/*    if(iMoneyForHire<0){AddMoneyToCharacter(pchar,iMoneyForHire);if(sti(pchar.month.money)>0){if(sti(pchar.month.money)+iMoneyForHire<0)pchar.month.money=0;else pchar.month.money=sti(pchar.month.money)+iMoneyForHire;}}
    else
    AddMoneyToCharacter(pchar, -iMoneyForHire);
*/
and instead uncomment this line:
Code:
pchar.money = sti(pchar.money) - iMoneyForHire;

BUT, the crew itself is still not calculated correctly; I've made two videos to show what I mean:
I guess it should be fixed inside this function (same file):
Code:
void CalculateHireFireQuantity(ref rnHire,ref rnFire,ref rnHireCost)
 
And maybe I'm just stupid, or this is indeed intended as is, but... I thought of a trade route (on my way to a mission).
So I looked in the map at my current location, noted the stuff they export (= buy low) and found an island that imports one of these (= sell high).

But now that I'm here, I can only sell my Leather at the same price I bought it for? Even though this town has 0 stock?
TradingLeather1.jpg TradingLeather2.jpg TradingLeather3.jpg

Help / explanation would be really appreciated! :)

Thanks!
 

Attachments

  • TradingLeather1.jpg
    TradingLeather1.jpg
    95.4 KB · Views: 236
Ok, I've found out on how to correct that error; in "hirecrew.c" you just need to comment out the following
Code:
/*    if(iMoneyForHire<0){AddMoneyToCharacter(pchar,iMoneyForHire);if(sti(pchar.month.money)>0){if(sti(pchar.month.money)+iMoneyForHire<0)pchar.month.money=0;else pchar.month.money=sti(pchar.month.money)+iMoneyForHire;}}
    else
    AddMoneyToCharacter(pchar, -iMoneyForHire);
*/
and instead uncomment this line:
Code:
pchar.money = sti(pchar.money) - iMoneyForHire;

BUT, the crew itself is still not calculated correctly; I've made two videos to show what I mean:
I guess it should be fixed inside this function (same file):
Code:
void CalculateHireFireQuantity(ref rnHire,ref rnFire,ref rnHireCost)

In my code the line uncommented has a plus sign instead....
This is the calculation function for v5.0 for crew:
Code:
void CalculateHireFireQuantity(ref rnHire,ref rnFire,ref rnHireCost)
{
   int nHired = 0;
   int nFired = 0;
   int nHireCost = 0;

   int nTmp = sti(refCharacter.ship.crew.SailorCrew) - nSailorsOurQ;
   if( nTmp > 0 ) {
       nHired = nHired + nTmp;
       nHireCost = nHireCost + nTmp*SAILOR_PRICE;
   }
   if( nTmp < 0 ) {nFired = nFired - nTmp;}

   nTmp = sti(refCharacter.ship.crew.BoardingCrew) - nSoldiersOurQ;
   if( nTmp > 0 ) {
       nHired = nHired + nTmp;
       nHireCost = nHireCost + nTmp*BOARDING_PRICE;
   }
   if( nTmp < 0 ) {nFired = nFired - nTmp;}

   nTmp = sti(refCharacter.ship.crew.GunnerCrew) - nGunnersOurQ;
   if( nTmp > 0 ) {
       nHired = nHired + nTmp;
       nHireCost = nHireCost + nTmp*GUNNER_PRICE;
   }
   if( nTmp < 0 ) {nFired = nFired - nTmp;}

   nTmp = sti(refCharacter.ship.crew.CannonerCrew) - nCannonerOurQ;
   if( nTmp > 0 ) {
       nHired = nHired + nTmp;
       nHireCost = nHireCost + nTmp*CANNONER_PRICE;
   }
   if( nTmp < 0 ) {nFired = nFired - nTmp;}

   rnHire = nHired;
   rnFire = nFired;
   rnHireCost = nHireCost;
}

The calculation for goods is in initStore.c and it is randomized to some extent both in the initStore.c file and the initGoods.c. This is the logic responsible for calculating the store sale values from the original values randomized in some cases in initGoods.c...
Code:
           goodBasePrice = MakeInt(goods[i].Cost);
           switch(sti(pRef.Goods.(goodName).TradeType))
           {
               case TRADE_TYPE_NORMAL:
               pRef.Goods.(goodName).Quantity = (300 + Rand(200))*sti(goods[i].Units);
                   pRef.Goods.(goodName).RndPriceModify = frnd() * 0.4;
               break;
   
               case TRADE_TYPE_EXPORT:
                   pRef.Goods.(goodName).Quantity = (500 + Rand(300))*sti(goods[i].Units);
                   pRef.Goods.(goodName).RndPriceModify = frnd() * 0.4;
               break;
   
               case TRADE_TYPE_IMPORT:
                   pRef.Goods.(goodName).Quantity = (100+Rand(100))*sti(goods[i].Units);
                   pRef.Goods.(goodName).RndPriceModify = frnd() * 0.4;
               break;
   
               case TRADE_TYPE_CONTRABAND:
                   pRef.Goods.(goodName).Quantity = 0;
                   pRef.Goods.(goodName).RndPriceModify = frnd();
               break;
           }
And here are the randomized goods in initgoods.c:
Code:
...
    Goods[GOOD_WHEAT].Name       = "Wheat";
   Goods[GOOD_WHEAT].Weight   = 1;
   Goods[GOOD_WHEAT].Cost       = rand(3) + 3;
   Goods[GOOD_WHEAT].Units       = 1;
   Goods[GOOD_WHEAT].Swim.Model   = "sack";
   Goods[GOOD_WHEAT].Swim.Time       = 20;
   Goods[GOOD_WHEAT].AfraidWater = 3;
   Goods[GOOD_WHEAT].canbecontraband   = 0;

   Goods[GOOD_EBONY].Name       = "Ebony";
   Goods[GOOD_EBONY].Weight   = 5;
   Goods[GOOD_EBONY].Cost       = rand(25) + 25;
   Goods[GOOD_EBONY].Units       = 1;
   Goods[GOOD_EBONY].AfraidWater = 1;
   Goods[GOOD_EBONY].canbecontraband   = 1;

   Goods[GOOD_CHOCOLATE].Name       = "Chocolate";
   Goods[GOOD_CHOCOLATE].Weight   = 1;
   Goods[GOOD_CHOCOLATE].Cost       = rand(13) + 13;
   Goods[GOOD_CHOCOLATE].Units       = 1;
   Goods[GOOD_CHOCOLATE].Swim.Model   = "bale";
   Goods[GOOD_CHOCOLATE].Swim.Time       = 15;
   Goods[GOOD_CHOCOLATE].AfraidWater = 3;
   Goods[GOOD_CHOCOLATE].canbecontraband   = 1;

   Goods[GOOD_SUGAR].Name       = "Sugar";
   Goods[GOOD_SUGAR].Weight   = 1;
   Goods[GOOD_SUGAR].Cost       = rand(5) + 5;
   Goods[GOOD_SUGAR].Units       = 1;
   Goods[GOOD_SUGAR].AfraidWater = 3;
   Goods[GOOD_SUGAR].canbecontraband   = 0;

   Goods[GOOD_WINE].Name       = "Wine";
   Goods[GOOD_WINE].Weight       = 1;
   Goods[GOOD_WINE].Cost       = rand(9) + 9;
   Goods[GOOD_WINE].Units       = 1;
   Goods[GOOD_WINE].AfraidWater = 1;
   Goods[GOOD_WINE].canbecontraband   = 0;

   Goods[GOOD_LINEN].Name       = "Linen";
   Goods[GOOD_LINEN].Weight   = 2;
   Goods[GOOD_LINEN].Cost       = rand(7) + 7;
   Goods[GOOD_LINEN].Units       = 1;
   Goods[GOOD_LINEN].Swim.Model   = "roll_of_rolls";
   Goods[GOOD_LINEN].Swim.Time       = 20;
   Goods[GOOD_LINEN].AfraidWater = 1;
   Goods[GOOD_LINEN].canbecontraband   = 0;

   Goods[GOOD_RUM].Name           = "Rum";
   Goods[GOOD_RUM].Weight       = 1;
   Goods[GOOD_RUM].Cost           = rand(5) + 5;
   Goods[GOOD_RUM].Units       = 1;
   Goods[GOOD_RUM].Swim.Model   = "barrel";
   Goods[GOOD_RUM].Swim.Time   = 20;
   Goods[GOOD_RUM].AfraidWater = 1;
   Goods[GOOD_RUM].canbecontraband   = 0;

   Goods[GOOD_TOBACCO].Name   = "Tobacco";
   Goods[GOOD_TOBACCO].Weight   = 3;
   Goods[GOOD_TOBACCO].Cost   = rand(11) + 11;
   Goods[GOOD_TOBACCO].Units   = 1;
   Goods[GOOD_TOBACCO].Swim.Model   = "bale";
   Goods[GOOD_TOBACCO].Swim.Time   = 15;
   Goods[GOOD_TOBACCO].AfraidWater = 3;
   Goods[GOOD_TOBACCO].canbecontraband   = 1;

   Goods[GOOD_COFFEE].Name       = "Coffee";
   Goods[GOOD_COFFEE].Weight   = 1;
   Goods[GOOD_COFFEE].Cost       = rand(13) + 13;
   Goods[GOOD_COFFEE].Units   = 1;
   Goods[GOOD_COFFEE].Swim.Model   = "sack";
   Goods[GOOD_COFFEE].Swim.Time   = 15;
   Goods[GOOD_COFFEE].AfraidWater = 3;
   Goods[GOOD_COFFEE].canbecontraband   = 1;

   Goods[GOOD_MAHOGANY].Name       = "Mahogany";
   Goods[GOOD_MAHOGANY].Weight   = 3;
   Goods[GOOD_MAHOGANY].Cost       = rand(15) + 15;
   Goods[GOOD_MAHOGANY].Units       = 1;
   Goods[GOOD_MAHOGANY].Swim.Model   = "roll_of_planks";
   Goods[GOOD_MAHOGANY].Swim.Time   = 25;
   Goods[GOOD_MAHOGANY].AfraidWater = 1;
   Goods[GOOD_MAHOGANY].canbecontraband   = 1;

   Goods[GOOD_CINNAMON].Name       = "Cinnamon";
   Goods[GOOD_CINNAMON].Weight   = 1;
   Goods[GOOD_CINNAMON].Cost       = rand(15) + 15;
   Goods[GOOD_CINNAMON].Units       = 1;
   Goods[GOOD_CINNAMON].Swim.Model   = "bale";
   Goods[GOOD_CINNAMON].Swim.Time   = 15;
   Goods[GOOD_CINNAMON].AfraidWater = 3;
   Goods[GOOD_CINNAMON].canbecontraband   = 1;

   Goods[GOOD_COPRA].Name       = "Copra";
   Goods[GOOD_COPRA].Weight   = 3;
   Goods[GOOD_COPRA].Cost       = rand(5) + 5;
   Goods[GOOD_COPRA].Units       = 1;
   Goods[GOOD_COPRA].Swim.Model   = "basket";
   Goods[GOOD_COPRA].Swim.Time       = 20;
   Goods[GOOD_COPRA].AfraidWater = 3;
   Goods[GOOD_COPRA].canbecontraband   = 0;

   Goods[GOOD_PAPRIKA].Name   = "Paprika";
   Goods[GOOD_PAPRIKA].Weight   = 2;
   Goods[GOOD_PAPRIKA].Cost   = rand(11) + 11;
   Goods[GOOD_PAPRIKA].Units   = 1;
   Goods[GOOD_PAPRIKA].Swim.Model   = "box";
   Goods[GOOD_PAPRIKA].Swim.Time   = 15;
   Goods[GOOD_PAPRIKA].AfraidWater = 3;
   Goods[GOOD_PAPRIKA].canbecontraband   = 1;

   Goods[GOOD_FRUITS].Name       = "Fruits";
   Goods[GOOD_FRUITS].Weight   = 2;
   Goods[GOOD_FRUITS].Cost       = rand(7) + 7;
   Goods[GOOD_FRUITS].Units   = 1;
   Goods[GOOD_FRUITS].Swim.Model   = "box";
   Goods[GOOD_FRUITS].Swim.Time   = 15;
   Goods[GOOD_FRUITS].AfraidWater = 3;
   Goods[GOOD_FRUITS].canbecontraband   = 0;

   Goods[GOOD_ALE].Name   = "Ale";
   Goods[GOOD_ALE].Weight   = 1;
   Goods[GOOD_ALE].Cost       = rand(2) + 2;
   Goods[GOOD_ALE].Units   = 1;
   Goods[GOOD_ALE].Swim.Model   = "barrel";
   Goods[GOOD_ALE].Swim.Time   = 20;
   Goods[GOOD_ALE].AfraidWater = 1;
   Goods[GOOD_ALE].canbecontraband   = 0;

   Goods[GOOD_SILK].Name   = "Silk";
   Goods[GOOD_SILK].Weight   = 3;
   Goods[GOOD_SILK].Cost   = rand(11) + 11;
   Goods[GOOD_SILK].Units   = 1;
   Goods[GOOD_SILK].Swim.Model   = "roll_of_rolls";
   Goods[GOOD_SILK].Swim.Time   = 20;
   Goods[GOOD_SILK].AfraidWater = 3;
   Goods[GOOD_SILK].canbecontraband   = 1;

   Goods[GOOD_CLOTHES].Name   = "Clothes";
   Goods[GOOD_CLOTHES].Weight   = 3;
   Goods[GOOD_CLOTHES].Cost   = rand(7) + 7;
   Goods[GOOD_CLOTHES].Units   = 1;
   Goods[GOOD_CLOTHES].Swim.Model   = "bale";
   Goods[GOOD_CLOTHES].Swim.Time   = 20;
   Goods[GOOD_CLOTHES].AfraidWater = 2;
   Goods[GOOD_CLOTHES].canbecontraband   = 0;

   Goods[GOOD_COTTON].Name       = "Cotton";
   Goods[GOOD_COTTON].Weight   = 3;
   Goods[GOOD_COTTON].Cost       = rand(5) + 5;
   Goods[GOOD_COTTON].Units   = 1;
   Goods[GOOD_COTTON].Swim.Model   = "bale";
   Goods[GOOD_COTTON].Swim.Time   = 15;
   Goods[GOOD_COTTON].AfraidWater = 3;
   Goods[GOOD_COTTON].canbecontraband   = 0;

   Goods[GOOD_SANDAL].Name       = "Sandal";
   Goods[GOOD_SANDAL].Weight   = 4;
   Goods[GOOD_SANDAL].Cost       = rand(19) + 19;
   Goods[GOOD_SANDAL].Units   = 1;
   Goods[GOOD_SANDAL].Swim.Model   = "box";
   Goods[GOOD_SANDAL].Swim.Time   = 25;
   Goods[GOOD_SANDAL].AfraidWater = 1;
   Goods[GOOD_SANDAL].canbecontraband   = 1;

   Goods[GOOD_LEATHER].Name   = "Leather";
   Goods[GOOD_LEATHER].Weight   = 4;
   Goods[GOOD_LEATHER].Cost   = rand(3) + 3;
   Goods[GOOD_LEATHER].Units   = 1;
   Goods[GOOD_LEATHER].Swim.Model   = "bale";
   Goods[GOOD_LEATHER].Swim.Time   = 20;
   Goods[GOOD_LEATHER].AfraidWater = 1;
   Goods[GOOD_LEATHER].canbecontraband   = 0;

   Goods[GOOD_OIL].Name   = "Oil";
   Goods[GOOD_OIL].Weight   = 2;
   Goods[GOOD_OIL].Cost       = rand(4)+ 4;
   Goods[GOOD_OIL].Units   = 1;
   Goods[GOOD_OIL].AfraidWater = 0;
   Goods[GOOD_OIL].canbecontraband   = 1;
  
   Goods[GOOD_SLAVES].Name       = "Slaves";
   Goods[GOOD_SLAVES].Weight   = 1;
   Goods[GOOD_SLAVES].Cost       = rand(20) + 20;
   Goods[GOOD_SLAVES].Units   = 1;
   Goods[GOOD_SLAVES].AfraidWater = 0;
   Goods[GOOD_SLAVES].canbecontraband   = 0;
 ...
   Goods[GOOD_MEDICINE].Name       = "Medicine";
   Goods[GOOD_MEDICINE].Weight   = 5;
   Goods[GOOD_MEDICINE].Cost       = rand(2)+19;
   Goods[GOOD_MEDICINE].Units       = 1;
   Goods[GOOD_MEDICINE].AfraidWater = 0;
   Goods[GOOD_MEDICINE].canbecontraband   = 0;
Try comparing that to CT v4.0 to see if there are differences...
 
Last edited:
Using a plus sign cause a negative balance on the hiring and firing crew, while using the original calculation causes a double negative (as in you lose money both for buying and selling crew) imbalance... Changing to the minus side made it positive balance. For the most basic unit, you can fire crew by receiving 10 gold in your coffers, while hiring takes 5 gold. Still testing the effect on others, but shouldn't there be a positive balance, in theory, by firing and hiring. I know that does allow for exploiting, but shouldn't it be a positive balance for each crew type as the crew salaries make you pay vast sums for upkeep?

EDIT: Just tested the crew hiring system, here is what I found.
1.The sale price for sailors is -10 while the buy price is 5
2.The sale price of soldiers is -10 and the buy price is 7
3.The sale price of musketeers is -10 and the by price is 10
4.The sell price for cannoneers is -10 and the buy price is 12.

-40 + 34 = a positive balance of 6 gold per transaction of 1 type of crew each.

I also looked at the store and see what you mean... The unit price of selling goods assumes that they are "used" or damaged and therefore even if the goods are "undamaged" you will have to recieve less for it...
 
Last edited:
Btw this is the file for the bowsprit locators....
Currently they are doing this to my manowar's sails:
 

Attachments

  • Mast1.zip
    422 bytes · Views: 199
  • Corsairs3_0000.jpg
    Corsairs3_0000.jpg
    350.4 KB · Views: 215
@Modder01
Thanks again for you quick replies!!! Very much appreciated! I'll try it as soon as I'm back from work^^

In my code the line uncommented has a plus sign instead....
That's true; but you need a minus or else you'd get money when hiring people :)

This is the calculation function for v5.0 for crew:
That's the same as v4. Maybe the problem lies somewhere else... as I said, I'm no software engineer :-(

This is the logic responsible for calculating the store sale values
This too is the same.

But if I see this correctly: it doesn't matter if goods import or export, they all get calculated the same?
Code:
pRef.Goods.(goodName).RndPriceModify = frnd() * 0.4;

Using a plus sign cause a negative balance
Ok, I have to further test that...
 
@Trade: ok, I'm gonna try these values. They don't to much but at least it's a little bit different:
Code:
case TRADE_TYPE_EXPORT: pRef.Goods.(goodName).RndPriceModify = frnd() * 0.05;
case TRADE_TYPE_IMPORT: pRef.Goods.(goodName).RndPriceModify = frnd() * 0.65;
 
I GOT IT! (even fixed the buggy original hire/fire calculation^^)

  • Exchange this:
    Code:
    void Hire()
    ...
        if(iCost > 0)
        {
            iMoneyForHire = iCost;
        }
    with that:
    Code:
        iMoneyForHire = iCost;
  • and exchange this:
    Code:
    void Fire()
    ...
        if(nCrewHired > 0)
        {
            iCost = iHireCost * nCrewHired;
        }
    with that:
    Code:
        iCost = iHireCost * nCrewHired;
  • and you'll also need the 'original' calculation:
    Code:
    void Fire()
    ...
    /*_*/int j,cn,crewQ;ref chref;crewQ=0;for(j=0;j<COMPANION_MAX;j++){cn=GetCompanionIndex(pchar,j);if(cn>=1 && GetRemovable(&Characters[cn]))
    /*_*/{chref=GetCharacter(cn);if(checkattribute(&characters[cn],"quest.OfficerPrice")){crewQ=crewQ+GetCrewQuantity(chref);}}}j=0;
    /*_*/j=sti(pchar.month.money)*GetPercentPaymentForCrew()/100;if(crewQ==0){j=0;}else{if(j<0){j=crewQ*5;}else{if(j<crewQ*10){j=crewQ*10;}}}
    /*_*/j=nCrewHired*(j/crewQ);iMoneyForHire = j;
    Replace with:
    Code:
    iMoneyForHire = iCost;
  • lastly you need to remove this:
    Code:
    void confirmHire()
    ...
    /*_*/if(iMoneyForHire<0){AddMoneyToCharacter(pchar,iMoneyForHire);if(sti(pchar.month.money)>0){if(sti(pchar.month.money)+iMoneyForHire<0)pchar.month.money=0;else pchar.month.money=sti(pchar.month.money)+iMoneyForHire;}}
    /*_*/else
I would've had it sooner, but I didn't realize there were two functions; one for hiring and one for firing people... wtf...^^

Edit: I've uploaded my changed v4-file
 

Attachments

  • hirecrew.c
    54.7 KB · Views: 232
Last edited:
Major Update:
-Incorporated Hotshot's fixed crew hiring system into the game (now a balanced 1:1 ratio for hiring and firing crew of any type)
-Performed Hotshot's enhancements on the goods system. From testing, most imports showed a 6-10 gold profit per unit when bought from an export nation. Testing on this for optimization will continue, but the current one seems to be more balanced than originally in game
-Fixed the worldmap port flags for France as they were untouched in the original flag revamp for France
-I have tried to test the POTC national soldier and officer models (for historical accuracy) and even with the anis from POTC, they still performed ugly, despite their appearances in ani viewer. Development on this idea will cease indefinitely as I have no way of fixing it, nor would it be likely for anyone else to have such ability.
-ChezJefrey found a way to allow accents (for accented names in French, Spanish and Dutch ships) in the game, but it broke the Russian cryllic for Russian users of the supermod. He has installed an option that allows it to be toggled in options.exe.

Possible work:
-Make the game's content consistent across all localizations available for the game (i.e. Russian, French, Spanish, Italian, German) in addition to the English version

Notes:
It has also come to my attention that land weapons are somewhat imbalanced in the game. I will look into this and correct if necessary.

Current Work:
-Dutchman Quest
 
I have tried to test the POTC national soldier and officer models (for historical accuracy) and even with the anis from POTC, they still performed ugly, despite their appearances in ani viewer. Development on this idea will cease indefinitely as I have no way of fixing it, nor would it be likely for anyone else to have such ability.
Credit for trying though!

Compared to the later games, the character models in PotC are a bit underdetailed.
Even though I personally do like the art style a little bit more.
 
Credit for trying though!

Compared to the later games, the character models in PotC are a bit underdetailed.
Even though I personally do like the art style a little bit more.
Thanks Pieter. By the by I have new Weapon damage values:
SWORDS:
Cheap Sabre: 1-6dmg
Cheap Cutlass: 2-5dmg
Broadsword: 3-6dmg
Cutlass: 4-9dmg
Epee: 5-8dmg
"El Katanto": 6-9dmg
Military Rapier: 7-12dmg
Sword: 8-11dmg
Ceremonial Sword: 9-11dmg
Mercenary Sword: 10-15dmg
Sabre: 11-14dmg
"Ugly Duckling": 12-14dmg
Expensive Rapier: 13-18dmg
"Golden Needle"(unique): 13-19dmg
"Wasp"(unique): 14-20dmg
"Ching's Sabre"(unique/storyline): 15-20dmg
"Blackbeard's Sword" (unique/storyline): 20-25dmg
"Davy Jones' Sword"(unique/dutchman quest): 25-30dmg
"Astalaid"(unique): 35-40dmg

GUNS:
"Shorty": 8-18 dmg
"Long Tom": 10-17 dmg
"Doublet": 10-17 dmg
"Negotiator": 17-25 dmg
"Ladies' Man": 18-25 dmg
"Black Blunder" (blunderbuss): 20-50 dmg
Musketoon: 25-30 dmg
Musket: 35-40 dmg
"The Widowmaker" (unique/dutchman quest): 25-30 dmg
"Duelist's Dream" (unique): 35-40 dmg
 
nice additions @Modder01

What I do have to test further though are the goods modifiers... I know that a change of 0.1 doesn't bring much, but right now I'm at an early game and when they have goods to export, it's quite easy to make money. Too good? Idk yet :-\
case TRADE_TYPE_EXPORT: pRef.Goods.(goodName).RndPriceModify = frnd() * 0.05;
case TRADE_TYPE_IMPORT: pRef.Goods.(goodName).RndPriceModify = frnd() * 0.65;

Currently I cannot do many trading runs, because the goods just aren't available. I guess that changes as the towns get more "developed"? In two play sessions I did one trading run (coffee I think) and with the Sloop of War (1500 capacity) I got 4k in profit, if I remember correctly.
But at least trading now IS profitable^^
 
nice additions @Modder01

What I do have to test further though are the goods modifiers... I know that a change of 0.1 doesn't bring much, but right now I'm at an early game and when they have goods to export, it's quite easy to make money. Too good? Idk yet :-\


Currently I cannot do many trading runs, because the goods just aren't available. I guess that changes as the towns get more "developed"? In two play sessions I did one trading run (coffee I think) and with the Sloop of War (1500 capacity) I got 4k in profit, if I remember correctly.
But at least trading now IS profitable^^
If you specify large towns as the development state before you create your character, you may see more in the way of goods to buy and sell. Also you will have access to larger trade class ships in the shipyard.

Historically by the 1600s, trade had evolved to be more lucrative and profitable. One of the most profitable ventures was the slave trade before it was outlawed in England. Still at the time after abolishment, smuggling runs of slaves were commonplace. Rarer goods with these modifiers should have this much profit. Also the smuggler goods (selected at random in the game) that were outlawed in the colonies will already have increased profit as they are sold because the smuggled goods can only be found off of pirate vessels and not purchased from smuggler ships. Even if this is possible you would get a 1:1 profit margin if you did so. Depending on the size of your haul will depend on how much you profit from it.
 
Last edited:
Can I somehow find out which goods that would be?
StoreUtilite.c is where the contraband is calculated and selected, but the selection system only selects 3 contraband out of those that can be contraband in initGoods.c (1 is yes) and that becomes the contraband when this function is called.
 
Ok, but is there some console command (is there even a console?^^) or any other way to check the contraband for the current game?
 
Back
Top