From: <fu...@us...> - 2009-06-27 21:45:31
|
Revision: 6640 http://gemrb.svn.sourceforge.net/gemrb/?rev=6640&view=rev Author: fuzzie Date: 2009-06-27 21:45:30 +0000 (Sat, 27 Jun 2009) Log Message: ----------- add some hacks to UpdateActorState to force actors out of attacks, for now Modified Paths: -------------- gemrb/trunk/gemrb/plugins/Core/Actor.cpp gemrb/trunk/gemrb/plugins/Core/Actor.h gemrb/trunk/gemrb/plugins/Core/Map.cpp Modified: gemrb/trunk/gemrb/plugins/Core/Actor.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-06-27 21:16:17 UTC (rev 6639) +++ gemrb/trunk/gemrb/plugins/Core/Actor.cpp 2009-06-27 21:45:30 UTC (rev 6640) @@ -3530,6 +3530,8 @@ //don't continue if we can't make the attack yet //we check lastattack because we will get the same gameTime a few times if ((nextattack > gameTime) || (gameTime == lastattack)) { + // fuzzie added the following line as part of the UpdateActorState hack below + lastattack = gameTime; return; } @@ -3743,7 +3745,7 @@ return; } -void Actor::ApplyModalSpell(ieDword gameTime) { +void Actor::UpdateActorState(ieDword gameTime) { //apply the modal effect on the beginning of each round if (((gameTime-roundTime)%ROUND_SIZE==0) && ModalState) { if (!ModalSpell[0]) { @@ -3753,6 +3755,23 @@ core->ApplySpell(ModalSpell, this, this, 0); } } + + // this is a HACK, fuzzie can't work out where else to do this for now + // but we shouldn't be resetting rounds/attacks just because the actor + // wandered away, the action code should probably be responsible somehow + // see also line above (search for comment containing UpdateActorState)! + if (LastTarget && lastattack && lastattack != gameTime) { + Actor *target = area->GetActorByGlobalID(LastTarget); + if (!target || target->GetStat(IE_STATE_ID)&STATE_DEAD) { + StopAttack(); + } else { + printMessage("Attack","(Leaving attack)", GREEN); + core->GetGame()->OutAttack(GetID()); + } + + roundTime = 0; + LastTarget = 0; + } } //idx could be: 0-6, 16-22, 32-38, 48-54 Modified: gemrb/trunk/gemrb/plugins/Core/Actor.h =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Actor.h 2009-06-27 21:16:17 UTC (rev 6639) +++ gemrb/trunk/gemrb/plugins/Core/Actor.h 2009-06-27 21:45:30 UTC (rev 6640) @@ -472,8 +472,8 @@ void PerformAttack(ieDword gameTime); /* ensures we can deal damage to a target */ void ModifyDamage(Actor *target, int &damage, int damagetype, WeaponInfo *wi, bool critical); - /* applies modal spell, if needed */ - void ApplyModalSpell(ieDword gameTime); + /* applies modal spell etc, if needed */ + void UpdateActorState(ieDword gameTime); /* sets a colour gradient stat, handles location */ void SetColor( ieDword idx, ieDword grd); /* sets an RGB colour modification effect; location 0xff for global */ Modified: gemrb/trunk/gemrb/plugins/Core/Map.cpp =================================================================== --- gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-06-27 21:16:17 UTC (rev 6639) +++ gemrb/trunk/gemrb/plugins/Core/Map.cpp 2009-06-27 21:45:30 UTC (rev 6640) @@ -587,7 +587,7 @@ actor->ExecuteScript( MAX_SCRIPTS ); actor->ProcessActions(false); - actor->ApplyModalSpell(core->GetGame()->GameTime); + actor->UpdateActorState(core->GetGame()->GameTime); actor->inventory.CalculateWeight(); actor->SetBase( IE_ENCUMBRANCE, actor->inventory.GetWeight() ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |