Log in

View Full Version : NPC Armor Tint


Shendare
05-15-2009, 11:28 PM
NPC Armor tint, working perfectly in SoF and Titanium both.

Happy unbirthday, Trev. :P

http://www.jondjackson.net/EQ/images/armor_tint.jpg

Required SQL:

ALTER TABLE `peq`.`npc_types` ADD COLUMN `armortint_red` TINYINT UNSIGNED NOT NULL DEFAULT 0 AFTER `drakkin_details`,
ADD COLUMN `armortint_green` TINYINT UNSIGNED NOT NULL DEFAULT 0 AFTER `armortint_red`,
ADD COLUMN `armortint_blue` TINYINT UNSIGNED NOT NULL DEFAULT 0 AFTER `armortint_green`;


If red, green, and blue are all zero (the default), regular tint for any worn armor pieces (if any) is applied to the NPC.

If any of the values is nonzero, the tint is applied to all armor pieces on the NPC.

If you absolutely want to give your NPC totally black armor (making it basically impossible to see any detail), just give a blue value of 1 (out of 255). That'll be visually indistinguishable from total black.

Of course, I'm pretty certain tinting is only available on playable-race NPCs.

I was quite pleased to find that even "naked" NPCs have the tint applied to the cloth armor pieces!

Required code changes:

zonedump.h - Line 87


...
int32 drakkin_details;
+ int32 armor_tint;
// int8 aa_title; ////not loaded from DB
int32 min_dmg;
...


zonedb.cpp - Line 1180


...
"npc_types.drakkin_details,"
+ "npc_types.armortint_red,"
+ "npc_types.armortint_green,"
+ "npc_types.armortint_blue,"
"npc_types.see_invis,"
...


zonedb.cpp - Line 1268


...
tmpNPCType->drakkin_details = atoi(row[r++]);
+ tmpNPCType->armor_tint = (atoi(row[r++]) & 0xFF);
+ tmpNPCType->armor_tint |= (atoi(row[r++]) & 0xFF) << 8;
+ tmpNPCType->armor_tint |= (atoi(row[r++]) & 0xFF) << 16;
+ tmpNPCType->armor_tint |= (tmpNPCType->armor_tint) ? (0xFF << 24) : 0;

tmpNPCType->see_invis = atoi(row[r++])==0?false:true; // Mongrel: Set see_invis flag
...


mob.h - Line 371


...
int32 in_drakkin_details,
+ int32 in_armor_tint,
int8 in_aa_title,
...


mob.h - Line 1115


...
int32 drakkin_details;
+ int32 armor_tint;

int8 aa_title;
...


mob.cpp - Line 88


...
int32 in_drakkin_details,
+ int32 in_armor_tint,

int8 in_aa_title,
...


mob.cpp - Line 186


...
drakkin_details = in_drakkin_details;
+ armor_tint = in_armor_tint;
attack_speed= 0;
...


mob.cpp - Line 773


...
for(i = 0; i < MAX_MATERIALS; i++)
{
ns->spawn.equipment[i] = GetEquipmentMaterial(i);
+ if (armor_tint)
+ {
+ ns->spawn.colors[i].color = armor_tint;
+ }
+ else
+ {
ns->spawn.colors[i].color = GetEquipmentColor(i);
+ }
}
...


npc.cpp - Line 96


...
d->drakkin_details,
+ d->armor_tint,
0,
...


PlayerCorpse.cpp - Line 139


...
- 0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0),
+ 0,0,0,0,0,0,0,0,0,0,0,0xff,0,0,0,0,0,0,0),
...


PlayerCorpse.cpp - Line 225


...
client->GetPP().drakkin_details,
+ 0,
0xff, // aa title
...


PlayerCorpse.cpp - Line 342


...
- 0,0,0,0,0,0,0,0,0,0,0xff,
+ 0,0,0,0,0,0,0,0,0,0,0,0xff,
...


client.cpp - Line 130


...
0, // Drakkin Details
+ 0, // Armor Tint
0xff, // AA Title
...


beacon.cpp - Line 48


...
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
...

Andrew80k
05-15-2009, 11:35 PM
Nice work! Thanks!

So_1337
05-15-2009, 11:51 PM
Oh my god... That is so amazing to see. You and Trevius have really been knocking out some work in this area lately, but you especially have come out of nowhere with some amazing contributions! Great job!

(Excuse my exuberance, my alcohol tolerance is pretty low and it's a Friday night!)

ChaosSlayerZ
05-15-2009, 11:56 PM
A+ for the prety colors :D


-seriosly - can we TRY to Tint the non player models?

Shendare
05-16-2009, 12:06 AM
My presumption is that the tint will be visible on any NPC that can visibly wear a piece of armor added to its loot table.

Most likely this limits the feature to playable-race NPCs, but it's certainly possible SOE coded exceptions.

trevius
05-16-2009, 02:42 AM
WOW! Seriously, Shendare, where did you come from? I know you are registered from a long time ago, but you really know your way around the emu code :)

That is some great stuff! Maybe tonight, I can get some work done on the illusion function to add in support for all facial features as well as armor tint. Once that is working, I should be able to get the #fixmob command changed to work for adjusting nearly any feature we could want on-the-fly. After that, the only other thing I would really like to get added at some point would be quest commands that could use the illusion function fully. I always thought it would be cool to have an NPC that had color changing armor that changed color once a second on a timer. You could simply have it add 10 to whatever color field every second and it would cycle through colors. Though, I think illusion makes the NPC kinda jump, so it might not be as cool as I imagine.

Thanks a ton for this Shendare! I will get it tested and put it on the SVN ASAP.

Shendare
05-16-2009, 02:51 AM
Actually, it wasn't all -that- hard to find all the places to change.

All I had to do was run a text search for everywhere you'd added in the drakkin fields and slip the armor_tint field after it. :P

The code was already in place to tint NPC armor based on equipped items' color fields, so it was easy enough to adjust that to make a DB value override.

That said, it was an interesting and rewarding dive into such a complex and diverse community codebase. LOL.

trevius
05-16-2009, 05:09 AM
Hah yeah, you could have probably just checked the diffs on the svn too, since it makes a quick diff for each file if you want to check them. I had never messed with adding new fields before, so it was something completely new to me lol. Was kinda rough figuring out what was breaking what.

I got your code added to the SVN. Had to do a minor adjustment to part of the code you had for player profile, because you had an extra 0, in there. Other than that, it worked perfectly.

It is really awesome to play with this and Drakkin look much better with the colored armor as long as people aren't going overboard with it :P

Now, if I can get the stuff working so we can adjust this quickly and easily in game, this is really going to bring customizing zones to a whole new level that was previously either not possible or was much too tedious to deal with. Thanks again for this :D

Shendare
05-16-2009, 11:31 AM
Extra 0? Odd, I copied and pasted from my successfully compiled version. I must have goofed something somewhere in the copy/pasting.