From: Jaka K. <lyn...@us...> - 2013-01-03 17:28:13
|
gemrb: Infinity Engine emulator The branch master has been updated via 24bf2c93792a90f3655dcefb317964e1e39ff4f7 (commit) via ee4a0550ee04729126dac12aab44ceee7e5d4551 (commit) Summary of changes: gemrb/core/GameScript/Actions.cpp | 14 ++++++++++++++ gemrb/core/GameScript/GameScript.cpp | 2 +- gemrb/core/GameScript/GameScript.h | 1 + gemrb/core/Scriptable/Actor.cpp | 4 ++-- gemrb/plugins/FXOpcodes/FXOpcodes.cpp | 6 ++++++ 5 files changed, 24 insertions(+), 3 deletions(-) from 355da3588de1cbfbc3aa77c3a9b3dd3e0ddef808 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=24bf2c93792a90f3655dcefb317964e1e39ff4f7 commit 24bf2c93792a90f3655dcefb317964e1e39ff4f7 Author: Jaka Kranjc <lyn...@us...> Date: Thu Jan 3 18:25:47 2013 +0100 added a hack so only disintegration can destroy equipment, not all magic damage magic missile, moonblade, cera sumat, ctrl-y, horrid wilting would all wipe it before this if they had the killing blow diff --git a/gemrb/core/Scriptable/Actor.cpp b/gemrb/core/Scriptable/Actor.cpp index ec73dad..4e60028 100644 --- a/gemrb/core/Scriptable/Actor.cpp +++ b/gemrb/core/Scriptable/Actor.cpp @@ -4800,8 +4800,8 @@ bool Actor::CheckOnDeath() // .. but this can't go in Die() because that is called // from effects and dropping items might change effects! - //destroy normal items if difficulty level is high enough - if ((LastDamageType & DAMAGE_MAGIC) && (GameDifficulty>DIFF_CORE) ) { + // disintegration destroys normal items if difficulty level is high enough (STATE_INFRA is just a conduct) + if ((BaseStats[IE_STATE_ID]&STATE_INFRA) && (LastDamageType & DAMAGE_MAGIC) && (GameDifficulty>DIFF_CORE) ) { inventory.DestroyItem("", IE_INV_ITEM_DESTRUCTIBLE, (ieDword) ~0); } DropItem("",0); diff --git a/gemrb/plugins/FXOpcodes/FXOpcodes.cpp b/gemrb/plugins/FXOpcodes/FXOpcodes.cpp index bc6eb6d..bcad317 100644 --- a/gemrb/plugins/FXOpcodes/FXOpcodes.cpp +++ b/gemrb/plugins/FXOpcodes/FXOpcodes.cpp @@ -1353,6 +1353,11 @@ int fx_death (Scriptable* /*Owner*/, Actor* target, Effect* fx) default: damagetype = DAMAGE_ACID; } + if (fx->Parameter3) { + // disintegration marked this, so it can be discerned from other magic damage + // hack: reuse a state bit to convey this info to Actor::CheckOnDeath + target->SetBaseBit(IE_STATE_ID, STATE_INFRA, true); + } if (damagetype!=DAMAGE_COLD) { //these two bits are turned off on death @@ -6133,6 +6138,7 @@ int fx_disintegrate (Scriptable* /*Owner*/, Actor* target, Effect* fx) fx->TimingMode = FX_DURATION_INSTANT_PERMANENT; fx->Parameter1 = 0; fx->Parameter2 = 0x200; + fx->Parameter3 = 1; // mark it as disintegration, so we can destroy items later properly return FX_APPLIED; } return FX_NOT_APPLIED; http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=ee4a0550ee04729126dac12aab44ceee7e5d4551 commit ee4a0550ee04729126dac12aab44ceee7e5d4551 Author: Jaka Kranjc <lyn...@us...> Date: Thu Jan 3 14:24:32 2013 +0100 added a better ChunkCreature though we still don't do chunking explosions diff --git a/gemrb/core/GameScript/Actions.cpp b/gemrb/core/GameScript/Actions.cpp index cd69350..530c02b 100644 --- a/gemrb/core/GameScript/Actions.cpp +++ b/gemrb/core/GameScript/Actions.cpp @@ -7053,4 +7053,18 @@ void GameScript::SetNamelessDeath(Scriptable* Sender, Action* parameters) sp->SetNamelessDeath(area, parameters->pointParameter, parameters->int1Parameter); } +// like GameScript::Kill, but forces chunking damage (disabling resurrection) +void GameScript::ChunkCreature(Scriptable *Sender, Action* parameters) +{ + Scriptable* tar = GetActorFromObject(Sender, parameters->objects[1]); + if (!tar || tar->Type != ST_ACTOR) { + return; + } + + Actor *target = (Actor *) tar; + Effect *fx = EffectQueue::CreateEffect(fx_death_ref, 0, 8, FX_DURATION_INSTANT_PERMANENT); + target->fxqueue.AddEffect(fx, false); + delete fx; +} + } diff --git a/gemrb/core/GameScript/GameScript.cpp b/gemrb/core/GameScript/GameScript.cpp index fcf8360..fc6a692 100644 --- a/gemrb/core/GameScript/GameScript.cpp +++ b/gemrb/core/GameScript/GameScript.cpp @@ -479,7 +479,7 @@ static const ActionLink actionnames[] = { {"changestoremarkup", GameScript::ChangeStoreMarkup, 0},//iwd2 {"changeteam", GameScript::SetTeam, 0}, //pst {"changetilestate", GameScript::ChangeTileState, 0}, //bg2 - {"chunkcreature", GameScript::Kill, 0}, //should be more graphical + {"chunkcreature", GameScript::ChunkCreature, 0}, //should be more graphical {"clearactions", GameScript::ClearActions, 0}, {"clearallactions", GameScript::ClearAllActions, 0}, {"clearpartyeffects", GameScript::ClearPartyEffects, 0}, diff --git a/gemrb/core/GameScript/GameScript.h b/gemrb/core/GameScript/GameScript.h index fde5ff6..33b5d59 100644 --- a/gemrb/core/GameScript/GameScript.h +++ b/gemrb/core/GameScript/GameScript.h @@ -981,6 +981,7 @@ public: static void ChangeStatGlobal(Scriptable* Sender, Action* parameters); static void ChangeStoreMarkup(Scriptable* Sender, Action* parameters); static void ChangeTileState(Scriptable* Sender, Action* parameters); + static void ChunkCreature(Scriptable *Sender, Action* parameters); static void ClearActions(Scriptable* Sender, Action* parameters); static void ClearAllActions(Scriptable* Sender, Action* parameters); static void ClearPartyEffects(Scriptable* Sender, Action* parameters); ----------------------------------------------------------------------- This is an automated email from the git hooks/post-receive script. -- gemrb: Infinity Engine emulator |