From: <ave...@us...> - 2007-04-28 07:32:51
|
Revision: 4612 http://gemrb.svn.sourceforge.net/gemrb/?rev=4612&view=rev Author: avenger_teambg Date: 2007-04-28 00:32:50 -0700 (Sat, 28 Apr 2007) Log Message: ----------- moved location parsing to SetColorMod, allowing full body rgb glow (used in iwd) Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp gemrb/trunk/gemrb/plugins/Core/Actor.h gemrb/trunk/gemrb/plugins/FXOpcodes/FXOpc.cpp gemrb/trunk/gemrb/plugins/IWDOpcodes/IWDOpc.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2007-04-24 16:34:56 UTC (rev 4611) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2007-04-28 07:32:50 UTC (rev 4612) @@ -2302,15 +2302,14 @@ */ } -void Actor::SetColorMod( int location, RGBModifier::Type type, int speed, - unsigned char r, unsigned char g, unsigned char b, - int phase) +void Actor::SetColorMod( ieByte location, RGBModifier::Type type, int speed, + unsigned char r, unsigned char g, unsigned char b, + int phase) { CharAnimations* ca = GetAnims(); if (!ca) return; - if (location >= 32) return; - if (location == -1) { + if (location == 0xff) { ca->GlobalColorMod.type = type; ca->GlobalColorMod.speed = speed; ca->GlobalColorMod.rgb.r = r; @@ -2318,15 +2317,18 @@ ca->GlobalColorMod.rgb.b = b; if (phase >= 0) ca->GlobalColorMod.phase = phase; - } else { - ca->ColorMods[location].type = type; - ca->ColorMods[location].speed = speed; - ca->ColorMods[location].rgb.r = r; - ca->ColorMods[location].rgb.g = g; - ca->ColorMods[location].rgb.b = b; - if (phase >= 0) - ca->ColorMods[location].phase = phase; + return; } + //00xx0yyy-->000xxyyy + if (location&0xc8) return; //invalid location + location = (location &7) | ((location>>1)&0x18); + ca->ColorMods[location].type = type; + ca->ColorMods[location].speed = speed; + ca->ColorMods[location].rgb.r = r; + ca->ColorMods[location].rgb.g = g; + ca->ColorMods[location].rgb.b = b; + if (phase >= 0) + ca->ColorMods[location].phase = phase; } void Actor::SetLeader(Actor *actor, int xoffset, int yoffset) Modified: gemrb/trunk/gemrb/plugins/Core/Actor.h =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.h 2007-04-24 16:34:56 UTC (rev 4611) +++ gemrb/trunk/gemrb/plugins/Core/Actor.h 2007-04-28 07:32:50 UTC (rev 4612) @@ -386,7 +386,7 @@ /* sets a colour gradient stat, handles location */ void SetColor( ieDword idx, ieDword grd); /* sets an RGB colour modification effect; location -1 for global */ - void SetColorMod( int location, RGBModifier::Type type, int speed, + void SetColorMod( ieByte location, RGBModifier::Type type, int speed, unsigned char r, unsigned char g, unsigned char b, int phase=-1 ); bool Schedule(ieDword gametime); Modified: gemrb/trunk/gemrb/plugins/FXOpcodes/FXOpc.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/FXOpcodes/FXOpc.cpp 2007-04-24 16:34:56 UTC (rev 4611) +++ gemrb/trunk/gemrb/plugins/FXOpcodes/FXOpc.cpp 2007-04-28 07:32:50 UTC (rev 4612) @@ -929,9 +929,9 @@ { if (0) printf( "fx_set_color_rgb (%2d): RGB: %x, Location: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); - int location = (fx->Parameter2 & 0xF) + 8*((fx->Parameter2 & 0xF0)>>4); + ieByte location = fx->Parameter2 & 0xff; target->SetColorMod(location, RGBModifier::ADD, -1, fx->Parameter1 >> 8, - fx->Parameter1 >> 16, fx->Parameter1 >> 24); + fx->Parameter1 >> 16, fx->Parameter1 >> 24); return FX_APPLIED; } @@ -940,9 +940,8 @@ { if (0) printf( "fx_set_color_rgb_global (%2d): RGB: %x, Location: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); - int location = -1; - target->SetColorMod(location, RGBModifier::ADD, -1, fx->Parameter1 >> 8, - fx->Parameter1 >> 16, fx->Parameter1 >> 24); + target->SetColorMod(0xff, RGBModifier::ADD, -1, fx->Parameter1 >> 8, + fx->Parameter1 >> 16, fx->Parameter1 >> 24); return FX_APPLIED; } @@ -952,11 +951,11 @@ { if (0) printf( "fx_set_color_pulse_rgb (%2d): RGB: %x, Location: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); - int location = (fx->Parameter2 & 0xF) + 8*((fx->Parameter2 & 0xF0)>>4); + ieByte location = fx->Parameter2 & 0xff; int speed = (fx->Parameter2 >> 16) & 0xFF; target->SetColorMod(location, RGBModifier::ADD, speed, - fx->Parameter1 >> 8, fx->Parameter1 >> 16, - fx->Parameter1 >> 24); + fx->Parameter1 >> 8, fx->Parameter1 >> 16, + fx->Parameter1 >> 24); return FX_APPLIED; } @@ -967,9 +966,9 @@ if (0) printf( "fx_set_color_pulse_rgb_global (%2d): RGB: %x, Location: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); int speed = (fx->Parameter2 >> 16) & 0xFF; - target->SetColorMod(-1, RGBModifier::ADD, speed, - fx->Parameter1 >> 8, fx->Parameter1 >> 16, - fx->Parameter1 >> 24); + target->SetColorMod(0xff, RGBModifier::ADD, speed, + fx->Parameter1 >> 8, fx->Parameter1 >> 16, + fx->Parameter1 >> 24); return FX_APPLIED; } @@ -1624,9 +1623,9 @@ if (0) printf( "fx_brief_rgb (%2d): RGB: %d, Location and speed: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); int speed = (fx->Parameter2 >> 16) & 0xFF; - target->SetColorMod(-1, RGBModifier::ADD, speed, - fx->Parameter1 >> 8, fx->Parameter1 >> 16, - fx->Parameter1 >> 24, 0); + target->SetColorMod(0xff, RGBModifier::ADD, speed, + fx->Parameter1 >> 8, fx->Parameter1 >> 16, + fx->Parameter1 >> 24, 0); return FX_NOT_APPLIED; } @@ -1635,9 +1634,9 @@ { if (0) printf( "fx_darken_rgb (%2d): RGB: %d, Location and speed: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); - int location = (fx->Parameter2 & 0xF) + 8*((fx->Parameter2 & 0xF0)>>4); + ieByte location = fx->Parameter2 & 0xff; target->SetColorMod(location, RGBModifier::TINT, -1, fx->Parameter1 >> 8, - fx->Parameter1 >> 16, fx->Parameter1 >> 24); + fx->Parameter1 >> 16, fx->Parameter1 >> 24); return FX_APPLIED; } // 0x34 Color:GlowRGB @@ -1645,10 +1644,10 @@ { if (0) printf( "fx_glow_rgb (%2d): RGB: %d, Location and speed: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); - int location = (fx->Parameter2 & 0xF) + 8*((fx->Parameter2 & 0xF0)>>4); + ieByte location = fx->Parameter2 & 0xff; target->SetColorMod(location, RGBModifier::BRIGHTEN, -1, - fx->Parameter1 >> 8, fx->Parameter1 >> 16, - fx->Parameter1 >> 24); + fx->Parameter1 >> 8, fx->Parameter1 >> 16, + fx->Parameter1 >> 24); return FX_APPLIED; } Modified: gemrb/trunk/gemrb/plugins/IWDOpcodes/IWDOpc.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/IWDOpcodes/IWDOpc.cpp 2007-04-24 16:34:56 UTC (rev 4611) +++ gemrb/trunk/gemrb/plugins/IWDOpcodes/IWDOpc.cpp 2007-04-28 07:32:50 UTC (rev 4612) @@ -344,9 +344,9 @@ if (0) printf( "fx_fade_rgb (%2d): \n", fx->Opcode ); int speed = (fx->Parameter2 >> 16) & 0xFF; - target->SetColorMod(-1, RGBModifier::ADD, speed, - fx->Parameter1 >> 8, fx->Parameter1 >> 16, - fx->Parameter1 >> 24, speed); + target->SetColorMod(0xff, RGBModifier::ADD, speed, + fx->Parameter1 >> 8, fx->Parameter1 >> 16, + fx->Parameter1 >> 24, speed); return FX_NOT_APPLIED; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |