From: Laszlo T. <ave...@us...> - 2006-07-30 13:11:53
|
Update of /cvsroot/gemrb/gemrb/gemrb/plugins/FXOpcodes In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv4389/FXOpcodes Modified Files: FXOpc.cpp Log Message: improved some effect opcodes fixed? timing of effects (duration/delayed) Index: FXOpc.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/FXOpcodes/FXOpc.cpp,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** FXOpc.cpp 29 Jul 2006 18:17:27 -0000 1.35 --- FXOpc.cpp 30 Jul 2006 13:11:50 -0000 1.36 *************** *** 45,48 **** --- 45,52 ---- #define COND_ALWAYS 9 + //FIXME: find a way to handle portrait icons + #define PI_SLOWED 41 + #define PI_STUN 55 + static ieResRef *casting_glows = NULL; static int cgcount = -1; *************** *** 1048,1055 **** case 0: //normal haste if ( STATE_GET(STATE_SLOWED) ) { ! STATE_CURE( STATE_SLOWED ); target->fxqueue.RemoveAllEffects( fx_set_slow_state_ref ); } else { ! STATE_SET( STATE_HASTED ); } break; --- 1052,1059 ---- case 0: //normal haste if ( STATE_GET(STATE_SLOWED) ) { ! BASE_STATE_CURE( STATE_SLOWED ); target->fxqueue.RemoveAllEffects( fx_set_slow_state_ref ); } else { ! BASE_STATE_SET( STATE_HASTED ); } break; *************** *** 1396,1402 **** --- 1400,1408 ---- // 0x27 State:Helpless // this effect sets both bits, but 'awaken' only removes the sleep bit + // FIXME: this is probably a persistent effect int fx_set_unconscious_state (Actor* /*Owner*/, Actor* target, Effect* fx) { if (0) printf( "fx_set_unconscious_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); + target->SetStance(IE_ANI_SLEEP); if (fx->Parameter2) { BASE_STATE_SET( STATE_HELPLESS | STATE_SLEEP ); //don't awaken on damage *************** *** 1420,1427 **** if (0) printf( "fx_set_slowed_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); if (STATE_GET(STATE_HASTED) ) { ! STATE_CURE( STATE_HASTED ); target->fxqueue.RemoveAllEffects( fx_set_haste_state_ref ); } else { STATE_SET( STATE_SLOWED ); } return FX_APPLIED; --- 1426,1434 ---- if (0) printf( "fx_set_slowed_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); if (STATE_GET(STATE_HASTED) ) { ! BASE_STATE_CURE( STATE_HASTED ); target->fxqueue.RemoveAllEffects( fx_set_haste_state_ref ); } else { STATE_SET( STATE_SLOWED ); + target->AddPortraitIcon(PI_SLOWED); } return FX_APPLIED; *************** *** 1443,1447 **** int i=1; ! for( int j=0;j<MAX_SPELL_LEVEL;j++) { if (fx->Parameter2&i) { target->spellbook.SetMemorizableSpellsCount(fx->Parameter1, IE_SPELL_TYPE_WIZARD, j, true); --- 1450,1467 ---- int i=1; ! //if param2 is 0, then double spells ! if(!fx->Parameter2) { ! for (unsigned int j=0;j<fx->Parameter1 && j<MAX_SPELL_LEVEL;j++) { ! target->spellbook.SetMemorizableSpellsCount(0, IE_SPELL_TYPE_WIZARD, j, true); ! } ! return FX_APPLIED; ! } ! //no bonus to give ! /* ! if (!fx->Parameter1) { ! return FX_NOT_APPLIED; ! } ! */ ! for(unsigned int j=0;j<MAX_SPELL_LEVEL;j++) { if (fx->Parameter2&i) { target->spellbook.SetMemorizableSpellsCount(fx->Parameter1, IE_SPELL_TYPE_WIZARD, j, true); *************** *** 1456,1460 **** { if (0) printf( "fx_cure_petrified_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! STATE_CURE( STATE_PETRIFIED ); return FX_NOT_APPLIED; } --- 1476,1480 ---- { if (0) printf( "fx_cure_petrified_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! BASE_STATE_CURE( STATE_PETRIFIED ); return FX_NOT_APPLIED; } *************** *** 1478,1481 **** --- 1498,1502 ---- if (0) printf( "fx_set_stun_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_SET( STATE_STUNNED ); + target->AddPortraitIcon(PI_STUN); return FX_APPLIED; } *************** *** 1483,1492 **** // 0x2E Cure:Stun EffectRef fx_set_stun_state_ref={"State:Stun",NULL,-1}; int fx_cure_stun_state (Actor* /*Owner*/, Actor* target, Effect* fx) { if (0) printf( "fx_cure_stun_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! STATE_CURE( STATE_STUNNED ); target->fxqueue.RemoveAllEffects(fx_set_stun_state_ref); return FX_NOT_APPLIED; } --- 1504,1515 ---- // 0x2E Cure:Stun EffectRef fx_set_stun_state_ref={"State:Stun",NULL,-1}; + EffectRef fx_hold_creature_no_icon_ref={"State:Hold3",NULL,-1}; int fx_cure_stun_state (Actor* /*Owner*/, Actor* target, Effect* fx) { if (0) printf( "fx_cure_stun_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! BASE_STATE_CURE( STATE_STUNNED ); target->fxqueue.RemoveAllEffects(fx_set_stun_state_ref); + target->fxqueue.RemoveAllEffects(fx_hold_creature_no_icon_ref); return FX_NOT_APPLIED; } *************** *** 1498,1503 **** { if (0) printf( "fx_cure_invisible_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! STATE_CURE( STATE_INVISIBLE ); ! target->fxqueue.RemoveAllEffects(fx_set_invisible_state_ref); return FX_NOT_APPLIED; } --- 1521,1528 ---- { if (0) printf( "fx_cure_invisible_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! if (!STATE_GET(STATE_NONDET)) { ! BASE_STATE_CURE( STATE_INVISIBLE ); ! target->fxqueue.RemoveAllEffects(fx_set_invisible_state_ref); ! } return FX_NOT_APPLIED; } *************** *** 1509,1513 **** { if (0) printf( "fx_cure_silenced_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! STATE_CURE( STATE_SILENCED ); target->fxqueue.RemoveAllEffects(fx_set_silenced_state_ref); return FX_NOT_APPLIED; --- 1534,1538 ---- { if (0) printf( "fx_cure_silenced_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! BASE_STATE_CURE( STATE_SILENCED ); target->fxqueue.RemoveAllEffects(fx_set_silenced_state_ref); return FX_NOT_APPLIED; *************** *** 1700,1704 **** int i=1; ! for( int j=0;j<MAX_SPELL_LEVEL;j++) { if (fx->Parameter2&i) { target->spellbook.SetMemorizableSpellsCount(fx->Parameter1, IE_SPELL_TYPE_PRIEST, j, true); --- 1725,1738 ---- int i=1; ! //if param2 is 0, then double spells ! if(!fx->Parameter2) { ! for (unsigned int j=0;j<fx->Parameter1 && j<MAX_SPELL_LEVEL;j++) { ! target->spellbook.SetMemorizableSpellsCount(0, IE_SPELL_TYPE_PRIEST, j, true); ! } ! return FX_APPLIED; ! } ! //shall we check for 0 bonus here? ! ! for(unsigned int j=0;j<MAX_SPELL_LEVEL;j++) { if (fx->Parameter2&i) { target->spellbook.SetMemorizableSpellsCount(fx->Parameter1, IE_SPELL_TYPE_PRIEST, j, true); *************** *** 1748,1751 **** --- 1782,1798 ---- if (0) printf( "fx_transparency_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); + //maybe this needs some timing + switch (fx->Parameter2) { + case 1: //fade in + if (fx->Parameter1<255) { + fx->Parameter1++; + } + break; + case 2://fade out + if (fx->Parameter1) { + fx->Parameter1--; + } + break; + } STAT_MOD( IE_TRANSLUCENT ); return FX_APPLIED; *************** *** 1796,1801 **** { if (0) printf( "fx_cure_nondetection_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! STATE_CURE( STATE_NONDET ); ! target->fxqueue.RemoveAllEffects(fx_set_infravision_state_ref); return FX_NOT_APPLIED; } --- 1843,1848 ---- { if (0) printf( "fx_cure_nondetection_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); ! BASE_STATE_CURE( STATE_NONDET ); ! target->fxqueue.RemoveAllEffects(fx_set_nondetection_state_ref); return FX_NOT_APPLIED; } |