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

Character models and textures

Hello it's me again xD

I got a question, how can I somehow make my saber textures not so shiny in the game?
I plan to add 4 Mystic Rune Sabers with 4 their owners

There are 4 Sabers

Diamond
Emerald
Ruby
Sapphire

I'll place stats of these weapons when I'm done with weapons.

Idea came from Prophesy of Pendor.

EDIT:

I made their existence in the game, here's their model descriptions

// no model assignment quest character -->
model.description = "An undead adventurer who died in duel with Spanish knight, decides to continue where he left off.";
model.id = "Eyegm";
model.FaceId = 611;
model.nation = ENGLAND;
model.price = 3000;
model.assigned = true;
model.height = 1.7;
model.sex = "man";
model.name = "Bertorx";
model.playertype = PLAYER_TYPE_ADVENTURER;
model.difficulty = DIFFICULTY_SWASHBUCKLER;
model.Flags.Pirate = 5;
model.Flags.Personal = 43;
model.ship = "tartane1";
model.shipname = "Devil";
model.date.hour = 10;
model.date.min = 24;
model.date.sec = 42;
model.date.day = 1;
model.date.month = 4;
model.date.year = 1750;
AddCharacterModel(model);
// <-- no model assignment quest character

// no model assignment quest character -->
model.description = "An undead who met his end in a land siege of Nevis, decides to infiltrate to all colonies.";
model.id = "Lehven";
model.FaceId = 612;
model.nation = ENGLAND;
model.price = 3000;
model.assigned = true;
model.height = 1.7;
model.sex = "man";
model.name = "Ertomeus";
model.playertype = PLAYER_TYPE_REBEL;
model.difficulty = DIFFICULTY_SWASHBUCKLER;
model.Flags.Pirate = 5;
model.Flags.Personal = 43;
model.ship = "tartane1";
model.shipname = "Devil";
model.date.hour = 10;
model.date.min = 24;
model.date.sec = 42;
model.date.day = 1;
model.date.month = 4;
model.date.year = 1750;
AddCharacterModel(model);
// <-- no model assignment quest character

// no model assignment quest character -->
model.description = "An undead highwayman who was killed during torturing in one of the colonies, decides to exact the same punishment on all of the Caribbean.";
model.id = "Yuto";
model.FaceId = 613;
model.nation = ENGLAND;
model.price = 3000;
model.assigned = true;
model.height = 1.7;
model.sex = "man";
model.name = "Xertelen";
model.playertype = PLAYER_TYPE_ROGUE;
model.difficulty = DIFFICULTY_SWASHBUCKLER;
model.Flags.Pirate = 5;
model.Flags.Personal = 43;
model.ship = "tartane1";
model.shipname = "Devil";
model.date.hour = 10;
model.date.min = 24;
model.date.sec = 42;
model.date.day = 1;
model.date.month = 4;
model.date.year = 1750;
AddCharacterModel(model);
// <-- no model assignment quest character

I used stock Blaze pirat4 and Fawn .gm files

Here are the sabers

Diamond Rune Saber
Diamond.png

Emerald Rune Saber
Emerald.png

Ruby Rune Saber
Ruby.png

Sapphire Rune Saber
Sapphire.png
 

Attachments

  • Rune Sabers and their owners.zip
    2.7 MB · Views: 103
Last edited:
Good idea alpha channeling the head , (that wasn't an option the last time I used Tool), leaving the horns and scaling them down to fit beatrices' head. That should work ok Jack.
You can thank @DeathDaisy for that (though she hasn't been active on the forum for some time now). She managed to arrange for character models to obey the alpha channel, which previously they did not. That enabled her to give a more detailed hair style to one of her own character models and has since proven useful for a lot more.
Well not only @Jack Rackham but @Grey Roger also helped me in creating a "Strange Ebony Saber" in New monk thread.
All I did was add stuff for the new monk characters into the relevant game files - you did the important work in creating the character and weapon models. The advice on adding horns is entirely thanks to our master of modelling, @Jack Rackham. :onya
 
I had no idea the alpha channel trick didn't work earlier. I couldn't do alpha channels at all
because I had a simplified Photo Shop version.

My workaround tricks come from NOT being able to do proper 3D-modeling in Blender, Maya or so. Like @Adamski62 does.
 
I put a start date of 1741 for the character but I'd like it not to be locked. How do I make it so you can change the date?
This is what I got
Code:
    model.description =  "A Spanish Admiral bearing with pride the scars of many battles.";
    model.id       =  "spa_Lezo";
    model.FaceId    = 608;
    model.nation      =  SPAIN;
    model.price       =  9500;
    model.minlevel     =  8;
    model.minrank    =  10;
    model.assigned    =  true;
    model.name = "Blas";
    model.lastname = "de Lezo";
    model.storytitle = "The Defender of Cartagena";
    model.storytext = "Blas de Lezo started his naval career in 1701 at age twelve, serving France and Spain during the War of Spanish Succession. Never afraid to be under fire, by 1714, he had lost a leg, an eye, and the use of an arm, scars he wore as badges of honor. Despite his injuries he led a successful career and is now in command of the naval forces of Cartagena de Indias.";
    model.playertype = PLAYER_TYPE_NAVAL_OFFICER;
    model.Flags.Pirate = 23;
    model.Flags.Personal = 27;
    model.ship = "PO_Poseidon";
    model.shipname = "Fuerte";
    model.date.year = 1741;
    model.period = "" + PERIOD_GOLDEN_AGE_OF_PIRACY + PERIOD_COLONIAL_POWERS;
    AssignModelTypeNation(isstart, model, "navy", 1.0, SPAIN);
    AddCharacterModel(model);

Also I'd like for him to start in Cartgena instead of the default San Juan.

Also also, his rank 10 as admiral seems to be overwriting the starting ship I chose for him, not even keepng the name. Is there a way to determine his starting ship/fleet manually and have it stick?
I think this got lost so I'll bump it. Any help with this would be welcome.
 
I'll check when I'm next playing, but I don't think that even "Specific" characters have their dates locked. Choosing a character with a set date should change the default date to the one specified for the model, but you should then be able to change it when you return to the main storyline screen.

Setting up a character's ship progression is done in "PROGRAM\NK.c", specifically function "GivePromotionReward". None are set up for any Spanish characters at the moment, so have a look at how some British characters are set up. Perhaps give Blas de Lezo his Fuerte at rank 9, and then give him a companion in charge of the Conquistador at rank 10. (If you can find out the name of the captain of the Conquistador, that can be set in "NK.c" as well.)

It might be possible to arrange for Blas de Lezo to start in Cartagena in "PROGRAM\Storyline\FreePlay\quests\both_reaction.c", case "Custom_Start".
 
I'll check when I'm next playing, but I don't think that even "Specific" characters have their dates locked. Choosing a character with a set date should change the default date to the one specified for the model, but you should then be able to change it when you return to the main storyline screen.
I can change day and month, but not year
upload_2021-9-20_20-16-14.png

Setting up a character's ship progression is done in "PROGRAM\NK.c", specifically function "GivePromotionReward". None are set up for any Spanish characters at the moment, so have a look at how some British characters are set up. Perhaps give Blas de Lezo his Fuerte at rank 9, and then give him a companion in charge of the Conquistador at rank 10. (If you can find out the name of the captain of the Conquistador, that can be set in "NK.c" as well.)

It might be possible to arrange for Blas de Lezo to start in Cartagena in "PROGRAM\Storyline\FreePlay\quests\both_reaction.c", case "Custom_Start".
I'll see what I can do. Thanks!
 
Perhaps give Blas de Lezo his Fuerte at rank 9, and then give him a companion in charge of the Conquistador at rank 10. (If you can find out the name of the captain of the Conquistador, that can be set in "NK.c" as well.)

Well. now that I look at it in detail, it seems he arrived on the Fuerte, but this ship was sent back to Spain in 1738, being replaced by the Dragón. Sadly I can't find who the commander of the Conquistador was, but I suppose I can put Lezo in command of the Conquistador (he did write some letters from aboard that ship) and use the Dragón as companion, for which I can identify the captain.
 
Looking at other characters, I think this should be right but I 'm getting a compile error on startup

Code:
                case 10: // Almirante
                    if (GetCompanionIndex(pchar,1) == -1 || GetCompanionIndex(pchar,2) == -1 || GetCompanionIndex(pchar,3) == -1) // GR
                    {
                        if(GetCurrentPeriod() < PERIOD_COLONIAL_POWERS)
                            ch = CreateOfficer_Cheat(OFFIC_TYPE_CAPNAVY, "Huber_Spa4_17", 3, SPAIN, false);
                        else
                            ch = CreateOfficer_Cheat(OFFIC_TYPE_CAPNAVY, "spa_cpt1_18", 3, SPAIN, false);
                        switch (GetMySimpleOldName(PChar))
                        {
                        case "Blas de Lezo":
                            if (GetCompanionIndex(pchar,1) == -1 || GetCompanionIndex(pchar,2) == -1 || GetCompanionIndex(pchar,3) == -1) // GR
                            {
                                ch = CreateOfficer_Cheat(OFFIC_TYPE_CAPNAVY, "spa_cpt1_18", 3, SPAIN, false);
                                ch.name = TranslateString("","Francisco José");
                                ch.lastname = TranslateString("","de Ovando");
                                GiveShip2Character(ch, "PO_Poseidon", "Dragón", -1, SPAIN, true, true);
                                SetCompanionIndex(pchar, -1, GetCharacterIndex(ch.id));
                                RemovePassenger  (pchar,     CharacterFromID  (ch.id));
                            }
                            else
                                LogIt("You seem to have a pretty impressive squadron of your own. Looks like you won't be needing the promotion ship.");
                        break;
                        // Default
                        switch(GetCurrentPeriod())
                        {
                            case PERIOD_EARLY_EXPLORERS:
                                GiveShip2Character(ch, "FastGalleon2", "San Marcos", -1, SPAIN, true, true); // War Galleon
                            break;

                            case PERIOD_THE_SPANISH_MAIN:
                                GiveShip2Character(ch, "Galeon50", "Nuestra Señora de las Mercedes", -1, SPAIN, true, true); // War Galleon
                            break;

                            case PERIOD_GOLDEN_AGE_OF_PIRACY:
                                GiveShip2Character(ch, "SP_Battleship", "Principe de Asturias", -1, SPAIN, true, true); // Battleship
                            break;

                            case PERIOD_COLONIAL_POWERS:
                                GiveShip2Character(ch, "SP_Trinity", "Principe", -1, SPAIN, true, true); // Trinity class 2nd Rate
                            break;

                            case PERIOD_REVOLUTIONS:
                                GiveShip2Character(ch, "FR_FirstRate", "San Carlos", -1, SPAIN, true, true); // Intrépide class 1st Rate
                            break;

                            case PERIOD_NAPOLEONIC:
                                GiveShip2Character(ch, "FR_FirstRate", "San Carlos", -1, SPAIN, true, true); // Intrépide class 1st Rate
                            break;
                        }
                        SetCompanionIndex(pchar, -1, GetCharacterIndex(ch.id));
                        RemovePassenger  (pchar,     CharacterFromID  (ch.id));
                    }
                    else
                        LogIt("You seem to have a pretty impressive squadron of your own. Looks like you won't be needing the promotion ship.");
                break;

The error
Code:
COMPILE ERROR - file: NK.c; line: 3087
Duplicate variable name: PlayerRank
 
Welp, I made it work in the end. It's probably unnecessarily messy but it does work.

EDIT: Well, not exactly. The game starts smoothly with only the two ships I want in my "Ship" menu, but oonce I get into 3D sailing mode, a third ship is added to my fleet out of nowhere. The ship's name is error. And I get this error log
Code:
RUNTIME ERROR - file: sea_ai\AIFantom.c; line: 313
missed attribute: fantomtype
RUNTIME ERROR - file: sea_ai\AIFantom.c; line: 313
no rAP data
RUNTIME ERROR - file: sea_ai\AIFantom.c; line: 346
missed attribute: fantomtype
RUNTIME ERROR - file: sea_ai\AIFantom.c; line: 346
no rAP data
RUNTIME ERROR - file: interface\ship.c; line: 427
missed attribute: name
RUNTIME ERROR - file: interface\ship.c; line: 427
no rAP data
I was trying to avoid ships being carried over from the earlier ranks, but I guess I could leave it as it was. A frigate as an auxiliary to the two ships of the line is not a bad idea. And it's a rank 10 character after all. In Cartagen he did have six ships of the line under his command.
 
Last edited:
A for the custom start location, I managed to get him to appear in Cartagena, but the storyline selection screen still says San Juan. It would be nice to be able to change it.

It's probably because I'm actually arriving in San Juan and then being reloaded to Cartagena. This is what I perpetrated
Code:
                    case SPAIN:
                        if (GetMySimpleOldName(PChar) == "Blas de Lezo")
                            {
                            loadPort = "Cartagena_Port";
                            gotoGroup = "reload";
                            rldLocator = "reload1_back";
                            }
                        else
                        {
                        loadPort = "Muelle_port";
                        gotoGroup = "reload";
                        rldLocator = "reload1_back";
                        }
                        break;
 
Last edited:
Can you upload your character model? I have my own version of "NK.c" which I'd like to test, which gives Blas de Lezo his own ship at level 9 and gives him a companion at level 10. Besides, if the model is ready, he can go into the next update.

To make Blas de Lezo start at Cartagena, perhaps start him at sea rather than in port, the same way that Ricardo Orellana does:
Code:
                           case PLAYER_TYPE_CURSED:
                               if(HasSubStr(CharShipType, "Mariana"))
                               {
                                   loadPort = "Cartagena_Port";
                                   gotoGroup = "Quest_Ships";
                                   rldLocator = "Quest_Ship_5";
                               }
                               else
                               {
                                   loadPort = "KhaelRoa_port";
                                   gotoGroup = "Quest_Ships";
                                   rldLocator = "Quest_Ship_5";
                               }
                           break;

As for specific characters, I could understand why the year would be locked - these are historical characters with full backstories included in their definitions and it would look weird for them to appear in a different year, such as playing Francis Drake in the Napoleonic period. But I was able to change the starting year for specific characters, including sending Drake to the Napoleonic period!
 
Here it is. I added the portraits as number 608 but seeing that @Jacob is hard at work adding new characters, it may have to be changed.
 

Attachments

  • Blas de Lezo.zip
    2 MB · Views: 91
@Homo eructus Speaking of which it fnished.
6 characters and 6 unique weapons written for them and their story written in logs

This happened thanks to @Grey Roger

EDIT

I forgot the head texture for Dervia
 

Attachments

  • New Rune Swords and Characters.zip
    2.9 MB · Views: 96
  • Dervia head texture.zip
    106.5 KB · Views: 87
  • initModels.c
    513.7 KB · Views: 80
  • characters_init.c
    45.6 KB · Views: 92
  • ItemsDescribe.txt
    67.4 KB · Views: 89
Last edited:
@Homo eructus: I found out why Blas de Lezo has his starting year locked. It's a feature for any naval officer who has a ship assigned in his model definition. The idea is probably to ensure that you don't start in a period when that ship shouldn't exist. Other characters need to allow the year to change because you can also choose a different ship to match, but naval officers also have their ship locked. So you'll definitely get that ship, which means you need to stay in the correct period.

If you really want to be able to change the year, you could remove the "model.ship" and "model.shipname" lines from Blas de Lezo's definition in "initModels.c". Then, in "NK.c", move the check for 'GetMySimpleOldName(PChar)' inside the 'case PERIOD_COLONIAL_POWERS' sections for both rank 9 and rank 10, so that he only gets his historically accurate ships if you left the year in the correct period. If you want to send him to a different period then he'll get the normal ships assigned for that period.

Otherwise there's a workround which involves no coding at all. In the storyline selection screen, after you've chosen Blas de Lezo, change his player type to something else - it doesn't matter what, you won't be keeping this new type. Now you can change his starting year. Then change him back to "Naval Officer" and his year will be locked to your new choice.

And then you could play Blas de Lezo in 1690. He wouldn't be fighting against the British, partly because that's in the War of the League of Augsburg when Spain was allied with Britain (and several other nations) against France; but mainly because in 1690, Blas de Lezo would have been a baby incapable of even commanding a toy ship in a bathtub. xD
 
@Homo eructus: I found out why Blas de Lezo has his starting year locked. It's a feature for any naval officer who has a ship assigned in his model definition. The idea is probably to ensure that you don't start in a period when that ship shouldn't exist. Other characters need to allow the year to change because you can also choose a different ship to match, but naval officers also have their ship locked. So you'll definitely get that ship, which means you need to stay in the correct period.

If you really want to be able to change the year, you could remove the "model.ship" and "model.shipname" lines from Blas de Lezo's definition in "initModels.c". Then, in "NK.c", move the check for 'GetMySimpleOldName(PChar)' inside the 'case PERIOD_COLONIAL_POWERS' sections for both rank 9 and rank 10, so that he only gets his historically accurate ships if you left the year in the correct period. If you want to send him to a different period then he'll get the normal ships assigned for that period.

Otherwise there's a workround which involves no coding at all. In the storyline selection screen, after you've chosen Blas de Lezo, change his player type to something else - it doesn't matter what, you won't be keeping this new type. Now you can change his starting year. Then change him back to "Naval Officer" and his year will be locked to your new choice.

And then you could play Blas de Lezo in 1690. He wouldn't be fighting against the British, partly because that's in the War of the League of Augsburg when Spain was allied with Britain (and several other nations) against France; but mainly because in 1690, Blas de Lezo would have been a baby incapable of even commanding a toy ship in a bathtub. xD
Last bit nicely put...bravo.
 
To be honest, I never wanted to use him for a wildly different time period, I only wanted to have the option to start a couple years before 1741 for roleplaying pruposes, so that last workaround suits me perfectly.

Can you upload your character model? I have my own version of "NK.c" which I'd like to test, which gives Blas de Lezo his own ship at level 9 and gives him a companion at level 10.
When you test it, please pass it along, I'm sure it'll be much better than what I came up with.
 
Last edited:
Try this.

It might be worth starting Blas de Lezo a couple of years earlier by default as Blas de Lezo died in 1741 soon after the battle. Perhaps start him in 1737, which according to Wikipedia was when he was sent to Cartagena. Or, if starting in 1737 means Spain and Britain are at peace, start in 1739 instead - and if they're still at peace in 1739, FreePlay's "StartStoryline.c" will need a new entry for the War of Jenkin's Ear.

Maybe start him at rank 9 in 1739? It's not strictly accurate, Wikipedia says he was promoted to Lieutenat General of the Navy, which would be Teniente General or rank 10, in 1734. But it would mean the player would need to earn the promotion to rank 10, giving something a bit easier than earning a promotion from rank 10 ro rank 11 (which Blas de Lezo never did anyway due to being dead).
 

Attachments

  • NK.c
    204.1 KB · Views: 86
Maybe start him at rank 9 in 1739? It's not strictly accurate, Wikipedia says he was promoted to Lieutenat General of the Navy, which would be Teniente General or rank 10, in 1734. But it would mean the player would need to earn the promotion to rank 10, giving something a bit easier than earning a promotion from rank 10 ro rank 11 (which Blas de Lezo never did anyway due to being dead).
That sounds like a good solution. There is not a specific entry for the war in StartStoryline.c because it soon was subsumed in the War of Austrian Succession starting in 1740. Normally that'd be close enough but now we have a character relevant to that specific war, it may be worth it to add it.

Edit: I think the default setting for the period whenever there's not a specific war set leaves Spain and Britain at war anyway, as seems to be true for every periodxD. After all there's a (completely apocryphal and rather in poor taste) quote attributed to Blas de Lezo himself saying that "every good Spaniard's duty is to always piss facing England" (of course it's apocryphal because, as the good sailor he was, he should know you always piss facing leeward, and considerig the prevailing winds in the Bay of Biscay where he hailed from, facing England would end more often tan not with you showered in your own urine).
 
Last edited:
Here's the character and all accompanying files, it should be ready to be added into the next build, barring the portrait numbers possibly needing to be updated.
 

Attachments

  • Blas de Lezo.zip
    2 MB · Views: 93
Back
Top