EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Development (https://www.eqemulator.org/forums/forumdisplay.php?f=590)
-   -   NPC Armor Tint (https://www.eqemulator.org/forums/showthread.php?t=28230)

Shendare 05-15-2009 11:28 PM

NPC Armor Tint
 
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:
Code:

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

Code:

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

zonedb.cpp - Line 1180

Code:

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

zonedb.cpp - Line 1268

Code:

...
  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

Code:

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

mob.h - Line 1115

Code:

...
  int32  drakkin_details;
+ int32 armor_tint;

  int8  aa_title;
...

mob.cpp - Line 88

Code:

...
  int32  in_drakkin_details,
+ int32  in_armor_tint,

  int8  in_aa_title,
...

mob.cpp - Line 186

Code:

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

mob.cpp - Line 773

Code:

...
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

Code:

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

PlayerCorpse.cpp - Line 139

Code:

...
- 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

Code:

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

PlayerCorpse.cpp - Line 342

Code:

...
- 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

Code:

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

beacon.cpp - Line 48

Code:

...
- 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.


All times are GMT -4. The time now is 12:03 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.