Update of /cvsroot/gemrb/gemrb/gemrb/plugins/Core In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24934/plugins/Core Modified Files: Actor.cpp EffectQueue.cpp EffectQueue.h GlobalTimer.cpp Interface.cpp Inventory.cpp Inventory.h Map.cpp Map.h Log Message: Implemented automatic update of effects Item equipping/removing now updates effects as well Index: GlobalTimer.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/GlobalTimer.cpp,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** GlobalTimer.cpp 17 May 2005 17:13:56 -0000 1.20 --- GlobalTimer.cpp 6 Jul 2005 23:37:34 -0000 1.21 *************** *** 71,75 **** if (game) { Map* map = game->GetCurrentArea(); ! if (map) map->UpdateFog(); } if (CutScene) { --- 71,78 ---- if (game) { Map* map = game->GetCurrentArea(); ! if (map) { ! map->UpdateFog(); ! map->UpdateEffects(); ! } } if (CutScene) { Index: EffectQueue.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/EffectQueue.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** EffectQueue.h 9 Jan 2005 15:08:17 -0000 1.3 --- EffectQueue.h 6 Jul 2005 23:37:34 -0000 1.4 *************** *** 37,51 **** class EffectQueue { std::vector< Effect* > effects; ! public: EffectQueue(); virtual ~EffectQueue(); // Returns true is successful. fx is just a reference, AddEffect() // will malloc its own copy bool AddEffect(Effect* fx); void ApplyAllEffects(Actor* target); void ApplyEffect(Actor* target, Effect* fx); }; --- 37,56 ---- class EffectQueue { std::vector< Effect* > effects; ! Actor* Owner; public: EffectQueue(); virtual ~EffectQueue(); + void SetOwner(Actor* act) { Owner = act; } + Actor* GetOwner() { return Owner; } + // Returns true is successful. fx is just a reference, AddEffect() // will malloc its own copy bool AddEffect(Effect* fx); + bool RemoveEffect(Effect* fx); void ApplyAllEffects(Actor* target); void ApplyEffect(Actor* target, Effect* fx); + void dump(); }; Index: Map.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Map.cpp,v retrieving revision 1.174 retrieving revision 1.175 diff -C2 -d -r1.174 -r1.175 *** Map.cpp 5 Jul 2005 17:25:45 -0000 1.174 --- Map.cpp 6 Jul 2005 23:37:34 -0000 1.175 *************** *** 760,763 **** --- 760,775 ---- } + void Map::UpdateEffects() + { + unsigned int i = actors.size(); + while (i--) { + Actor* actor = actors[i]; + if (! IsVisible( actor->Pos, true ) ) + continue; + + actor->fxqueue.ApplyAllEffects( actor ); + } + } + void Map::Shout(Scriptable* actor, int shoutID, unsigned int radius) { Index: Map.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Map.h,v retrieving revision 1.80 retrieving revision 1.81 diff -C2 -d -r1.80 -r1.81 *** Map.h 5 Jul 2005 17:25:45 -0000 1.80 --- Map.h 6 Jul 2005 23:37:34 -0000 1.81 *************** *** 185,188 **** --- 185,189 ---- void CreateMovement(char *command, const char *area, const char *entrance); void UpdateScripts(); + void UpdateEffects(); /* removes empty heaps and returns total itemcount */ int ConsolidateContainers(); Index: Actor.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Actor.cpp,v retrieving revision 1.112 retrieving revision 1.113 diff -C2 -d -r1.112 -r1.113 *** Actor.cpp 25 Jun 2005 20:05:52 -0000 1.112 --- Actor.cpp 6 Jul 2005 23:37:33 -0000 1.113 *************** *** 158,161 **** --- 158,163 ---- InternalFlags = 0; inventory.SetInventoryType(INVENTORY_CREATURE); + fxqueue.SetOwner( this ); + inventory.SetOwner( this ); if (classcount<0) { InitActorTables(); *************** *** 550,553 **** --- 552,556 ---- inventory.dump(); spellbook.dump(); + fxqueue.dump(); } Index: Inventory.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Inventory.cpp,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** Inventory.cpp 24 Jun 2005 23:20:01 -0000 1.55 --- Inventory.cpp 6 Jul 2005 23:37:34 -0000 1.56 *************** *** 32,35 **** --- 32,36 ---- Inventory::Inventory() { + Owner = NULL; InventoryType = INVENTORY_HEAP; Changed = false; *************** *** 115,118 **** --- 116,149 ---- } + void Inventory::AddSlotEffects(CREItem* slot) + { + Item* itm = core->GetItem( slot->ItemResRef ); + for (int i = 0; i < itm->EquippingFeatureCount; i++) { + Owner->fxqueue.AddEffect( &itm->equipping_features[i] ); + } + } + + void Inventory::AddAllEffects() + { + for (size_t i = 0; i < Slots.size(); i++) { + CREItem *slot = Slots[i]; + if (slot && core->QuerySlotEffects( i )) { + AddSlotEffects( slot ); + } + } + } + + void Inventory::RemoveSlotEffects(CREItem* slot) + { + Item* itm = core->GetItem( slot->ItemResRef ); + for (int i = 0; i < itm->EquippingFeatureCount; i++) { + Effect* fx = &itm->equipping_features[i]; + if (fx->TimingMode == FX_DURATION_INSTANT_WHILE_EQUIPPED) { + Owner->fxqueue.RemoveEffect( fx ); + } + } + } + + void Inventory::SetInventoryType(int arg) { *************** *** 353,357 **** for (size_t i = 0; i<Slots.size(); i++) { //looking for default inventory slot (-1) ! if (core->QuerySlotType(i)!=-1) { continue; } --- 384,388 ---- for (size_t i = 0; i<Slots.size(); i++) { //looking for default inventory slot (-1) ! if (core->QuerySlotType(i) != -1) { continue; } *************** *** 480,483 **** --- 511,518 ---- item->Flags|=IE_INV_ITEM_UNDROPPABLE; } + // add effects of an item just being equipped to actor's effect queue + if (core->QuerySlotEffects( slot )) { + AddSlotEffects( item ); + } return true; } *************** *** 499,506 **** } } ! if (item->Flags&IE_INV_ITEM_UNDROPPABLE) { return false; } ! item->Flags&=IE_INV_ITEM_EQUIPPED; return true; } --- 534,544 ---- } } ! if (item->Flags & IE_INV_ITEM_UNDROPPABLE) { return false; } ! item->Flags &= ~IE_INV_ITEM_EQUIPPED; ! if (core->QuerySlotEffects( slot )) { ! RemoveSlotEffects( item ); ! } return true; } Index: Interface.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Interface.cpp,v retrieving revision 1.331 retrieving revision 1.332 diff -C2 -d -r1.331 -r1.332 *** Interface.cpp 2 Jul 2005 08:47:16 -0000 1.331 --- Interface.cpp 6 Jul 2005 23:37:34 -0000 1.332 *************** *** 2711,2715 **** //make sure unsigned int is 32 bits slottypes = (SlotType *) malloc(SlotTypes * sizeof(SlotType) ); ! for (int i=0;i<SlotTypes;i++) { slottypes[i].slottype = (ieDword) strtol(st->QueryField(i,0),NULL,0 ); slottypes[i].slotid = (ieDword) strtol(st->QueryField(i,1),NULL,0 ); --- 2711,2715 ---- //make sure unsigned int is 32 bits slottypes = (SlotType *) malloc(SlotTypes * sizeof(SlotType) ); ! for (int i = 0; i < SlotTypes; i++) { slottypes[i].slottype = (ieDword) strtol(st->QueryField(i,0),NULL,0 ); slottypes[i].slotid = (ieDword) strtol(st->QueryField(i,1),NULL,0 ); *************** *** 2722,2728 **** strupr(slottypes[i].slotresref); */ ! strnuprcpy(slottypes[i].slotresref, st->QueryField(i,2), 8); } ! DelTable(SlotTypeTable); } return (it && st); --- 2722,2728 ---- strupr(slottypes[i].slotresref); */ ! strnuprcpy( slottypes[i].slotresref, st->QueryField(i,2), 8 ); } ! DelTable( SlotTypeTable ); } return (it && st); Index: EffectQueue.cpp =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/EffectQueue.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** EffectQueue.cpp 5 Jun 2005 12:12:10 -0000 1.17 --- EffectQueue.cpp 6 Jul 2005 23:37:33 -0000 1.18 *************** *** 60,66 **** int fx_playsound (Actor* target, Effect* fx); static int initialized = 0; ! static EffectFunction effect_fns[MAX_EFFECTS]; ! static int efftexts[MAX_EFFECTS]; //from efftext.2da // FIXME: this list should be dynamic (stl::vector). It should be populated --- 60,72 ---- int fx_playsound (Actor* target, Effect* fx); + struct EffectRef { + const char* Name; + EffectFunction Function; + int EffText; + }; + static int initialized = 0; ! static EffectRef effect_refs[MAX_EFFECTS]; ! //static int efftexts[MAX_EFFECTS]; //from efftext.2da // FIXME: this list should be dynamic (stl::vector). It should be populated *************** *** 85,88 **** --- 91,95 ---- { "Stat:StrengthModifier", fx_strength_modifier }, { "Stat:WisdomModifier", fx_wisdom_modifier }, + { "Stat:THAC0Modifier", fx_to_hit_modifier }, { "State:Berserk", fx_set_berserk_state }, { "State:Charmed", fx_set_charmed_state }, *************** *** 119,124 **** TableMgr* efftextTable=NULL; SymbolMgr* effectsTable; ! memset( effect_fns, 0, sizeof( effect_fns ) ); ! memset( efftexts, -1, sizeof( efftexts ) ); initialized = 1; --- 126,132 ---- TableMgr* efftextTable=NULL; SymbolMgr* effectsTable; ! memset( effect_refs, 0, sizeof( effect_refs ) ); ! // FIXME ! //memset( efftexts, -1, sizeof( efftexts ) ); initialized = 1; *************** *** 129,138 **** int eT = core->LoadSymbol( "EFFECTS" ); if (eT < 0) { ! printMessage( "IEScript","A critical scripting file is missing!\n",LIGHT_RED ); return false; } effectsTable = core->GetSymbol( eT ); if (!effectsTable) { ! printMessage( "IEScript","A critical scripting file is damaged!\n",LIGHT_RED ); return false; } --- 137,146 ---- int eT = core->LoadSymbol( "EFFECTS" ); if (eT < 0) { ! printMessage( "EffectQueue","A critical scripting file is missing!\n",LIGHT_RED ); return false; } effectsTable = core->GetSymbol( eT ); if (!effectsTable) { ! printMessage( "EffectQueue","A critical scripting file is damaged!\n",LIGHT_RED ); return false; } *************** *** 140,150 **** for (int i = 0; i < MAX_EFFECTS; i++) { char* effectname = effectsTable->GetValue( i ); ! if(efftextTable) { ! int row=efftextTable->GetRowCount(); ! while(row--) { char* ret = efftextTable->GetRowName( row ); long val; if (valid_number( ret, val ) && (i == val) ) { ! efftexts[i] = atoi(efftextTable->QueryField( row, 1 ) ); } } --- 148,158 ---- for (int i = 0; i < MAX_EFFECTS; i++) { char* effectname = effectsTable->GetValue( i ); ! if (efftextTable) { ! int row = efftextTable->GetRowCount(); ! while (row--) { char* ret = efftextTable->GetRowName( row ); long val; if (valid_number( ret, val ) && (i == val) ) { ! effect_refs[i].EffText = atoi( efftextTable->QueryField( row, 1 ) ); } } *************** *** 152,165 **** EffectLink* poi = FindEffect( effectname ); ! if (poi == NULL) { ! effect_fns[i] = NULL; ! } ! else { ! effect_fns[i] = poi->Function; } ! printf("-------- FN: %d, %s\n", i, effectname); } core->DelSymbol( eT ); ! if( efftextTable ) core->DelTable( effT ); } return true; --- 160,171 ---- EffectLink* poi = FindEffect( effectname ); ! if (poi != NULL) { ! effect_refs[i].Function = poi->Function; ! effect_refs[i].Name = poi->Name; } ! //printf("-------- FN: %d, %s\n", i, effectname); } core->DelSymbol( eT ); ! if ( efftextTable ) core->DelTable( effT ); } return true; *************** *** 171,175 **** EffectQueue::EffectQueue() { ! } --- 177,181 ---- EffectQueue::EffectQueue() { ! Owner = NULL; } *************** *** 198,204 **** --- 204,230 ---- new_fx->random_value = core->Roll( fx->DiceThrown, fx->DiceSides, 0 ); + ApplyAllEffects( Owner ); + return true; } + bool EffectQueue::RemoveEffect(Effect* fx) + { + int invariant_size = offsetof( Effect, random_value ); + + for (std::vector< Effect* >::iterator f = effects.begin(); f != effects.end(); f++ ) { + Effect* fx2 = *f; + + if (! memcmp( fx, fx2, invariant_size)) { + delete fx2; + effects.erase( f ); + ApplyAllEffects( Owner ); + return true; + } + } + return false; + + } + void EffectQueue::ApplyAllEffects(Actor* target) { *************** *** 215,236 **** - // these opcodes are true for PS:T void EffectQueue::ApplyEffect(Actor* target, Effect* fx) { ! printf( "FX 0x%02x: %s(%d, %d)\n", fx->Opcode, effectnames[fx->Opcode].Name, fx->Parameter1, fx->Parameter2 ); ! EffectFunction fn = effectnames[fx->Opcode].Function; ! if( efftexts[fx->Opcode]>0 ) { ! char *text = core->GetString( efftexts[fx->Opcode] ); core->DisplayString( text ); free( text ); } if (fn) fn( target, fx ); ! else ! printf( "Not found\n" ); } #define CHECK_LEVEL() { \ int level = target->GetStat( IE_LEVEL ); \ --- 241,275 ---- void EffectQueue::ApplyEffect(Actor* target, Effect* fx) { ! //printf( "FX 0x%02x: %s(%d, %d)\n", fx->Opcode, effectnames[fx->Opcode].Name, fx->Parameter1, fx->Parameter2 ); ! if ( effect_refs[fx->Opcode].EffText > 0 ) { ! char *text = core->GetString( effect_refs[fx->Opcode].EffText ); core->DisplayString( text ); free( text ); } + EffectFunction fn = effect_refs[fx->Opcode].Function; if (fn) fn( target, fx ); ! //else ! // printf( "FX function not found: 0x%02x\n", fx->Opcode ); ! ! } ! ! void EffectQueue::dump() ! { ! printf( "EFFECT QUEUE:\n" ); ! for (unsigned int i = 0; i < effects.size (); i++ ) { ! Effect* fx = effects[i]; ! if (fx) { ! printf( " %2d: 0x%02x: %s (%d, %d)\n", i, fx->Opcode, effect_refs[fx->Opcode].Name, fx->Parameter1, fx->Parameter2 ); ! } ! } } + // Helper macros and functions for effect opcodes + #define CHECK_LEVEL() { \ int level = target->GetStat( IE_LEVEL ); \ *************** *** 264,276 **** #define STATE_SET( mod ) target->Modified[ IE_STATE_ID ] |= (ieDword) ( mod ) // 0x00 int fx_ac_vs_damage_type_modifier (Actor* target, Effect* fx) { ! printf( "fx_ac_vs_damage_type_modifier (%2d): AC Modif: %d ; Type: %d ; MinLevel: %d ; MaxLevel: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2, (int) fx->DiceSides, (int) fx->DiceThrown ); CHECK_LEVEL(); // it is a bitmask int type = fx->Parameter2; ! if (type == 0) type = 15; if (type & 1) STAT_ADD( IE_ACCRUSHINGMOD, fx->Parameter1 ); --- 303,326 ---- #define STATE_SET( mod ) target->Modified[ IE_STATE_ID ] |= (ieDword) ( mod ) + + // Effect opcodes + // FIXME: These should be moved into their own plugins + // NOTE: These opcode numbers are true for PS:T and are meant just for + // better orientation + // 0x00 int fx_ac_vs_damage_type_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_ac_vs_damage_type_modifier (%2d): AC Modif: %d ; Type: %d ; MinLevel: %d ; MaxLevel: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2, (int) fx->DiceSides, (int) fx->DiceThrown ); CHECK_LEVEL(); // it is a bitmask int type = fx->Parameter2; ! if (type == 0) { ! // FIXME: this is probably wrong, but it's hack to see ! // anything in PST ! STAT_ADD( IE_ARMORCLASS, fx->Parameter1 ); ! type = 15; ! } if (type & 1) STAT_ADD( IE_ACCRUSHINGMOD, fx->Parameter1 ); *************** *** 289,293 **** int fx_attacks_per_round_modifier (Actor* target, Effect* fx) { ! printf( "fx_attacks_per_round_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_NUMBEROFATTACKS, fx->Parameter1, fx->Parameter2 ); return FX_APPLIED; --- 339,343 ---- int fx_attacks_per_round_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_attacks_per_round_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_NUMBEROFATTACKS, fx->Parameter1, fx->Parameter2 ); return FX_APPLIED; *************** *** 297,301 **** int fx_cure_sleep_state (Actor* target, Effect* fx) { ! printf( "fx_cure_sleep_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_CURE( STATE_SLEEP ); return FX_APPLIED; --- 347,351 ---- int fx_cure_sleep_state (Actor* target, Effect* fx) { ! if (0) printf( "fx_cure_sleep_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_CURE( STATE_SLEEP ); return FX_APPLIED; *************** *** 305,309 **** int fx_cure_berserk_state (Actor* target, Effect* fx) { ! printf( "fx_cure_berserk_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_CURE( STATE_BERSERK ); return FX_APPLIED; --- 355,359 ---- int fx_cure_berserk_state (Actor* target, Effect* fx) { ! if (0) printf( "fx_cure_berserk_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_CURE( STATE_BERSERK ); return FX_APPLIED; *************** *** 313,317 **** int fx_set_berserk_state (Actor* target, Effect* fx) { ! printf( "fx_set_berserk_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_SET( STATE_BERSERK ); return FX_APPLIED; --- 363,367 ---- int fx_set_berserk_state (Actor* target, Effect* fx) { ! if (0) printf( "fx_set_berserk_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_SET( STATE_BERSERK ); return FX_APPLIED; *************** *** 322,326 **** int fx_set_charmed_state (Actor* target, Effect* fx) { ! printf( "fx_set_charmed_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_SET( STATE_CHARMED ); return FX_APPLIED; --- 372,376 ---- int fx_set_charmed_state (Actor* target, Effect* fx) { ! if (0) printf( "fx_set_charmed_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_SET( STATE_CHARMED ); return FX_APPLIED; *************** *** 330,334 **** int fx_charisma_modifier (Actor* target, Effect* fx) { ! printf( "fx_charisma_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_CHR, fx->Parameter1, fx->Parameter2 ); --- 380,384 ---- int fx_charisma_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_charisma_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_CHR, fx->Parameter1, fx->Parameter2 ); *************** *** 339,343 **** int fx_constitution_modifier (Actor* target, Effect* fx) { ! printf( "fx_constitution_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_CON, fx->Parameter1, fx->Parameter2 ); --- 389,393 ---- int fx_constitution_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_constitution_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_CON, fx->Parameter1, fx->Parameter2 ); *************** *** 348,352 **** int fx_cure_poisoned_state (Actor* target, Effect* fx) { ! printf( "fx_cure_poisoned_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_CURE( STATE_POISONED ); return FX_APPLIED; --- 398,402 ---- int fx_cure_poisoned_state (Actor* target, Effect* fx) { ! if (0) printf( "fx_cure_poisoned_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_CURE( STATE_POISONED ); return FX_APPLIED; *************** *** 357,361 **** int fx_damage (Actor* target, Effect* fx) { ! printf( "fx_damage (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); int damage; //FIXME damage calculation, random damage, etc --- 407,411 ---- int fx_damage (Actor* target, Effect* fx) { ! if (0) printf( "fx_damage (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); int damage; //FIXME damage calculation, random damage, etc *************** *** 368,372 **** int fx_death (Actor* target, Effect* fx) { ! printf( "fx_death (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->Die(target); //FIXME! return FX_APPLIED; --- 418,422 ---- int fx_death (Actor* target, Effect* fx) { ! if (0) printf( "fx_death (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->Die(target); //FIXME! return FX_APPLIED; *************** *** 376,380 **** int fx_maximum_hp_modifier (Actor* target, Effect* fx) { ! printf( "fx_maximum_hp_modifier (%2d): Stat Modif: %d ; Modif Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); int bonus; --- 426,430 ---- int fx_maximum_hp_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_maximum_hp_modifier (%2d): Stat Modif: %d ; Modif Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); int bonus; *************** *** 411,415 **** int fx_intelligence_modifier (Actor* target, Effect* fx) { ! printf( "fx_intelligence_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_INT, fx->Parameter1, fx->Parameter2 ); --- 461,465 ---- int fx_intelligence_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_intelligence_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_INT, fx->Parameter1, fx->Parameter2 ); *************** *** 420,424 **** int fx_save_vs_death_modifier (Actor* target, Effect* fx) { ! printf( "fx_save_vs_death_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSDEATH, fx->Parameter1, fx->Parameter2 ); --- 470,474 ---- int fx_save_vs_death_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_save_vs_death_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSDEATH, fx->Parameter1, fx->Parameter2 ); *************** *** 429,433 **** int fx_save_vs_wands_modifier (Actor* target, Effect* fx) { ! printf( "fx_save_vs_wands_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSWANDS, fx->Parameter1, fx->Parameter2 ); --- 479,483 ---- int fx_save_vs_wands_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_save_vs_wands_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSWANDS, fx->Parameter1, fx->Parameter2 ); *************** *** 438,442 **** int fx_save_vs_poly_modifier (Actor* target, Effect* fx) { ! printf( "fx_save_vs_poly_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSPOLY, fx->Parameter1, fx->Parameter2 ); --- 488,492 ---- int fx_save_vs_poly_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_save_vs_poly_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSPOLY, fx->Parameter1, fx->Parameter2 ); *************** *** 447,451 **** int fx_save_vs_breath_modifier (Actor* target, Effect* fx) { ! printf( "fx_save_vs_breath_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSBREATH, fx->Parameter1, fx->Parameter2 ); --- 497,501 ---- int fx_save_vs_breath_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_save_vs_breath_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSBREATH, fx->Parameter1, fx->Parameter2 ); *************** *** 456,460 **** int fx_save_vs_spell_modifier (Actor* target, Effect* fx) { ! printf( "fx_save_vs_spell_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSSPELL, fx->Parameter1, fx->Parameter2 ); --- 506,510 ---- int fx_save_vs_spell_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_save_vs_spell_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_SAVEVSSPELL, fx->Parameter1, fx->Parameter2 ); *************** *** 465,469 **** int fx_set_sleep_state (Actor* target, Effect* fx) { ! printf( "fx_set_sleep_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_SET( STATE_SLEEP ); return FX_APPLIED; --- 515,519 ---- int fx_set_sleep_state (Actor* target, Effect* fx) { ! if (0) printf( "fx_set_sleep_state (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); STATE_SET( STATE_SLEEP ); return FX_APPLIED; *************** *** 473,477 **** int fx_bonus_wizard_spells (Actor* target, Effect* fx) { ! printf( "fx_bonus_wizard_spells (%2d): Spell Add: %d ; Spell Level: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); int i=1; --- 523,527 ---- int fx_bonus_wizard_spells (Actor* target, Effect* fx) { ! if (0) printf( "fx_bonus_wizard_spells (%2d): Spell Add: %d ; Spell Level: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); int i=1; *************** *** 492,496 **** int fx_strength_modifier (Actor* target, Effect* fx) { ! printf( "fx_strength_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_STR, fx->Parameter1, fx->Parameter2 ); --- 542,546 ---- int fx_strength_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_strength_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_STR, fx->Parameter1, fx->Parameter2 ); *************** *** 501,505 **** int fx_wisdom_modifier (Actor* target, Effect* fx) { ! printf( "fx_wisdom_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_WIS, fx->Parameter1, fx->Parameter2 ); --- 551,555 ---- int fx_wisdom_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_wisdom_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_WIS, fx->Parameter1, fx->Parameter2 ); *************** *** 510,514 **** int fx_to_hit_modifier (Actor* target, Effect* fx) { ! printf( "fx_to_hit_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_THAC0, fx->Parameter1, fx->Parameter2 ); --- 560,564 ---- int fx_to_hit_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_to_hit_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_THAC0, fx->Parameter1, fx->Parameter2 ); *************** *** 519,523 **** int fx_stealth_bonus (Actor* target, Effect* fx) { ! printf( "fx_stealth_bonus (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_STEALTH, fx->Parameter1, fx->Parameter2 ); --- 569,573 ---- int fx_stealth_bonus (Actor* target, Effect* fx) { ! if (0) printf( "fx_stealth_bonus (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_STEALTH, fx->Parameter1, fx->Parameter2 ); *************** *** 528,532 **** int fx_damage_bonus (Actor* target, Effect* fx) { ! printf( "fx_damage_bonus (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_DAMAGEBONUS, fx->Parameter1, fx->Parameter2 ); --- 578,582 ---- int fx_damage_bonus (Actor* target, Effect* fx) { ! if (0) printf( "fx_damage_bonus (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_DAMAGEBONUS, fx->Parameter1, fx->Parameter2 ); *************** *** 537,541 **** int fx_open_locks_modifier (Actor* target, Effect* fx) { ! printf( "fx_open_locks_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_LOCKPICKING, fx->Parameter1, fx->Parameter2 ); --- 587,591 ---- int fx_open_locks_modifier (Actor* target, Effect* fx) { ! if (0) printf( "fx_open_locks_modifier (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_LOCKPICKING, fx->Parameter1, fx->Parameter2 ); *************** *** 546,550 **** int fx_resistance_to_magic_damage (Actor* target, Effect* fx) { ! printf( "fx_resistance_to_magic_damage (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_MAGICDAMAGERESISTANCE, fx->Parameter1, fx->Parameter2 ); --- 596,600 ---- int fx_resistance_to_magic_damage (Actor* target, Effect* fx) { ! if (0) printf( "fx_resistance_to_magic_damage (%2d): Mod: %d, Type: %d\n", fx->Opcode, fx->Parameter1, fx->Parameter2 ); target->NewStat( IE_MAGICDAMAGERESISTANCE, fx->Parameter1, fx->Parameter2 ); *************** *** 556,560 **** { //this is a hack, the variable name spreads across the resources ! printf( "fx_local_variable (%s=%d)", fx->Resource, fx->Parameter2); target->locals->SetAt(fx->Resource, fx->Parameter2); return FX_APPLIED; --- 606,610 ---- { //this is a hack, the variable name spreads across the resources ! if (0) printf( "fx_local_variable (%s=%d)", fx->Resource, fx->Parameter2 ); target->locals->SetAt(fx->Resource, fx->Parameter2); return FX_APPLIED; *************** *** 563,567 **** int fx_playsound (Actor* target, Effect* fx) { ! printf( "fx_playsound (%s)", fx->Resource); //this is probably inaccurate if (target) { --- 613,617 ---- int fx_playsound (Actor* target, Effect* fx) { ! if (0) printf( "fx_playsound (%s)", fx->Resource ); //this is probably inaccurate if (target) { Index: Inventory.h =================================================================== RCS file: /cvsroot/gemrb/gemrb/gemrb/plugins/Core/Inventory.h,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** Inventory.h 22 Jun 2005 15:55:26 -0000 1.35 --- Inventory.h 6 Jul 2005 23:37:34 -0000 1.36 *************** *** 122,125 **** --- 122,126 ---- private: std::vector<CREItem*> Slots; + Actor* Owner; int InventoryType; int Changed; *************** *** 147,150 **** --- 148,152 ---- void CalculateWeight(void); void SetInventoryType(int arg); + void SetOwner(Actor* act) { Owner = act; }; /** returns number of all slots in the inventory */ *************** *** 184,187 **** --- 186,192 ---- void SetEquippedSlot(ieDword slotcode) { Equipped = slotcode; } ieDword GetEquippedSlot() { return Equipped; } + void AddSlotEffects( CREItem* slot ); + void AddAllEffects(); + void RemoveSlotEffects( CREItem* slot ); // Returns item in specified slot. Does NOT change inventory CREItem* GetSlotItem(unsigned int slot); |