From: Laszlo T. <ave...@us...> - 2010-09-27 21:28:07
|
gemrb: Infinity Engine emulator The branch master has been updated via 0d77b2dbae1b17eec46d76cca62ef55da654a77b (commit) Summary of changes: gemrb/core/Interface.cpp | 1 + gemrb/core/Scriptable/Actor.cpp | 43 ++++++++++++++++++------------- gemrb/core/Scriptable/ActorBlock.cpp | 5 +-- gemrb/includes/defsounds.h | 1 + gemrb/includes/globals.h | 3 +- gemrb/override/bg1/defsound.2da | 2 +- gemrb/override/bg1/gemrb.ini | 2 + gemrb/override/bg2/defsound.2da | 2 +- gemrb/override/bg2/gemrb.ini | 2 + gemrb/override/how/defsound.2da | 2 +- gemrb/override/how/gemrb.ini | 1 + gemrb/override/iwd/defsound.2da | 2 +- gemrb/override/iwd/gemrb.ini | 1 + gemrb/override/iwd2/defsound.2da | 2 +- gemrb/override/iwd2/gemrb.ini | 2 + gemrb/override/pst/defsound.2da | 2 +- gemrb/override/pst/gemrb.ini | 1 + gemrb/override/shared/detect.spl | Bin 0 -> 202 bytes gemrb/plugins/FXOpcodes/FXOpcodes.cpp | 45 +++++++++++++++++++++----------- 19 files changed, 75 insertions(+), 44 deletions(-) create mode 100644 gemrb/override/shared/detect.spl from 8117a54cdf6762de90d5ebcb8db9a2f4331eb3b7 (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=0d77b2dbae1b17eec46d76cca62ef55da654a77b commit 0d77b2dbae1b17eec46d76cca62ef55da654a77b Author: Avenger <ave...@so...> Date: Mon Sep 27 23:27:16 2010 +0200 added autodetecting secret doors diff --git a/gemrb/core/Interface.cpp b/gemrb/core/Interface.cpp index edde3f4..1092823 100644 --- a/gemrb/core/Interface.cpp +++ b/gemrb/core/Interface.cpp @@ -2333,6 +2333,7 @@ static const char *game_flags[GF_COUNT+1]={ "StealIsAttack", //50GF_STEAL_IS_ATTACK "CutsceneAreascripts",//51GF_CUTSCENE_AREASCRIPTS "FlexibleWorldmap", //52GF_FLEXIBLE_WMAP + "AutoSearchHidden", //53GF_AUTOSEARCH_HIDDEN NULL //for our own safety, this marks the end of the pole }; diff --git a/gemrb/core/Scriptable/Actor.cpp b/gemrb/core/Scriptable/Actor.cpp index a354555..35d1e91 100644 --- a/gemrb/core/Scriptable/Actor.cpp +++ b/gemrb/core/Scriptable/Actor.cpp @@ -4640,10 +4640,33 @@ void Actor::ModifyDamage(Actor *target, Scriptable *hitter, int &damage, int &re } void Actor::UpdateActorState(ieDword gameTime) { - if (ModalState == MS_NONE) { + if (modalTime==gameTime) { return; } - if (modalTime==gameTime) { + + //IWD2 has no autodetect, you actually should 'search' + if (InParty && core->HasFeature(GF_AUTOSEARCH_HIDDEN) ) { + core->ApplySpell("detect", 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 - 1)) { + 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; + lastattack = 0; + } + + if (ModalState == MS_NONE) { return; } @@ -4674,22 +4697,6 @@ void Actor::UpdateActorState(ieDword gameTime) { } } - // 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 - 1)) { - 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; - lastattack = 0; - } } //idx could be: 0-6, 16-22, 32-38, 48-54 diff --git a/gemrb/core/Scriptable/ActorBlock.cpp b/gemrb/core/Scriptable/ActorBlock.cpp index e8d9114..2086728 100644 --- a/gemrb/core/Scriptable/ActorBlock.cpp +++ b/gemrb/core/Scriptable/ActorBlock.cpp @@ -1780,10 +1780,9 @@ void Door::TryDetectSecret(int skill) { if (Type != ST_DOOR) return; if (Visible()) return; - //FIXME: this part is just copied from the trap detection - if ((skill>=100) && (skill!=256) ) skill = 100; - if (skill/2+core->Roll(1,skill/2,0) > (signed)DiscoveryDiff) { + if (skill > (signed)DiscoveryDiff) { Flags |= DOOR_FOUND; + core->PlaySound(DS_FOUNDSECRET); } } diff --git a/gemrb/includes/defsounds.h b/gemrb/includes/defsounds.h index 3a7fb27..7ce8dc0 100644 --- a/gemrb/includes/defsounds.h +++ b/gemrb/includes/defsounds.h @@ -38,6 +38,7 @@ #define DS_OPEN_FAIL 7 #define DS_CLOSE_FAIL 8 #define DS_ITEM_GONE 9 +#define DS_FOUNDSECRET 10 #define DS_RAIN 20 #define DS_SNOW 21 diff --git a/gemrb/includes/globals.h b/gemrb/includes/globals.h index 661e257..949565c 100644 --- a/gemrb/includes/globals.h +++ b/gemrb/includes/globals.h @@ -135,8 +135,9 @@ #define GF_STEAL_IS_ATTACK 50 //bg2 for sure #define GF_CUTSCENE_AREASCRIPTS 51 //bg1, maybe more #define GF_FLEXIBLE_WMAP 52 //iwd +#define GF_AUTOSEARCH_HIDDEN 53 //all except iwd2 //update this -#define GF_COUNT 53 +#define GF_COUNT 54 //the number of item usage fields (used in CREItem and STOItem) #define CHARGE_COUNTERS 3 diff --git a/gemrb/override/bg1/defsound.2da b/gemrb/override/bg1/defsound.2da index 541b32c..22cfee3 100644 --- a/gemrb/override/bg1/defsound.2da +++ b/gemrb/override/bg1/defsound.2da @@ -11,7 +11,7 @@ BUTTON3 GAM_04 OPENFAIL * CLOSEFAIL * ITEM_GONE EFF_M02 -10 * +SECRET ACT_09 11 * 12 * 13 * diff --git a/gemrb/override/bg1/gemrb.ini b/gemrb/override/bg1/gemrb.ini index 3492f9b..f0b4375 100644 --- a/gemrb/override/bg1/gemrb.ini +++ b/gemrb/override/bg1/gemrb.ini @@ -74,3 +74,5 @@ DeathOnZeroStat = 1 BreakableWeapons = 1 HasSpecificDamageBonus = 0 CutsceneAreascripts = 1 +FlexibleWorldmap = 0 +AutoSearchHidden = 1 diff --git a/gemrb/override/bg2/defsound.2da b/gemrb/override/bg2/defsound.2da index 1dc8986..452610d 100644 --- a/gemrb/override/bg2/defsound.2da +++ b/gemrb/override/bg2/defsound.2da @@ -11,7 +11,7 @@ BUTTON3 GAM_04 OPENFAIL AMB_D20 CLOSEFAIL * ITEM_GONE EFF_M02 -10 * +SECRET ACT_09 11 * 12 * 13 * diff --git a/gemrb/override/bg2/gemrb.ini b/gemrb/override/bg2/gemrb.ini index e7c36bb..3a60af8 100644 --- a/gemrb/override/bg2/gemrb.ini +++ b/gemrb/override/bg2/gemrb.ini @@ -84,3 +84,5 @@ ProperBackstab = 1 HasSpecificDamageBonus = 0 StealIsAttack = 1 CutsceneAreascripts = 0 +FlexibleWorldmap = 0 +AutoSearchHidden = 1 diff --git a/gemrb/override/how/defsound.2da b/gemrb/override/how/defsound.2da index 541b32c..22cfee3 100644 --- a/gemrb/override/how/defsound.2da +++ b/gemrb/override/how/defsound.2da @@ -11,7 +11,7 @@ BUTTON3 GAM_04 OPENFAIL * CLOSEFAIL * ITEM_GONE EFF_M02 -10 * +SECRET ACT_09 11 * 12 * 13 * diff --git a/gemrb/override/how/gemrb.ini b/gemrb/override/how/gemrb.ini index 3f4f2ef..8a9078a 100644 --- a/gemrb/override/how/gemrb.ini +++ b/gemrb/override/how/gemrb.ini @@ -82,6 +82,7 @@ AreaVisitedVar = 1 HasSpecificDamageBonus = 1 BiographyIsRes = 1 FlexibleWorldmap = 1 +AutoSearchHidden = 1 [charset] CharCount = 31 diff --git a/gemrb/override/iwd/defsound.2da b/gemrb/override/iwd/defsound.2da index 541b32c..22cfee3 100644 --- a/gemrb/override/iwd/defsound.2da +++ b/gemrb/override/iwd/defsound.2da @@ -11,7 +11,7 @@ BUTTON3 GAM_04 OPENFAIL * CLOSEFAIL * ITEM_GONE EFF_M02 -10 * +SECRET ACT_09 11 * 12 * 13 * diff --git a/gemrb/override/iwd/gemrb.ini b/gemrb/override/iwd/gemrb.ini index b2be276..213923a 100644 --- a/gemrb/override/iwd/gemrb.ini +++ b/gemrb/override/iwd/gemrb.ini @@ -80,6 +80,7 @@ AreaVisitedVar = 1 HasSpecificDamageBonus = 0 BiographyIsRes = 1 FlexibleWorldmap = 1 +AutoSearchHidden = 1 [charset] CharCount = 31 diff --git a/gemrb/override/iwd2/defsound.2da b/gemrb/override/iwd2/defsound.2da index 541b32c..22cfee3 100644 --- a/gemrb/override/iwd2/defsound.2da +++ b/gemrb/override/iwd2/defsound.2da @@ -11,7 +11,7 @@ BUTTON3 GAM_04 OPENFAIL * CLOSEFAIL * ITEM_GONE EFF_M02 -10 * +SECRET ACT_09 11 * 12 * 13 * diff --git a/gemrb/override/iwd2/gemrb.ini b/gemrb/override/iwd2/gemrb.ini index fd7e420..3c114c6 100644 --- a/gemrb/override/iwd2/gemrb.ini +++ b/gemrb/override/iwd2/gemrb.ini @@ -91,3 +91,5 @@ HasSpecificDamageBonus = 1 StrrefSaveGame = 1 BiographyIsRes = 1 CutsceneAreascripts = 0 +FlexibleWorldmap = 1 +AutoSearchHidden = 0 diff --git a/gemrb/override/pst/defsound.2da b/gemrb/override/pst/defsound.2da index f801be1..e901ae6 100644 --- a/gemrb/override/pst/defsound.2da +++ b/gemrb/override/pst/defsound.2da @@ -11,7 +11,7 @@ BUTTON3 INT_04 OPENFAIL * CLOSEFAIL * ITEM_GONE INT_11 -10 * +SECRET * 11 * 12 * 13 * diff --git a/gemrb/override/pst/gemrb.ini b/gemrb/override/pst/gemrb.ini index f2ba605..7bb4372 100644 --- a/gemrb/override/pst/gemrb.ini +++ b/gemrb/override/pst/gemrb.ini @@ -79,6 +79,7 @@ OverrideCursorPos = 1 OnScreenText = 1 HasSpecificDamageBonus = 0 HasWisdomBonusTable = 1 +AutoSearchHidden = 1 [charset] CharCount = 31 diff --git a/gemrb/override/shared/detect.spl b/gemrb/override/shared/detect.spl new file mode 100644 index 0000000..ca5350a Binary files /dev/null and b/gemrb/override/shared/detect.spl differ diff --git a/gemrb/plugins/FXOpcodes/FXOpcodes.cpp b/gemrb/plugins/FXOpcodes/FXOpcodes.cpp index ce28e82..c73d3de 100644 --- a/gemrb/plugins/FXOpcodes/FXOpcodes.cpp +++ b/gemrb/plugins/FXOpcodes/FXOpcodes.cpp @@ -3816,17 +3816,34 @@ int fx_identify (Scriptable* /*Owner*/, Actor* target, Effect* fx) // (actually, in bg2 the effect targets area objects and the range is implemented // by the inareans projectile) - inanimate, area, no sprite // TODO: effects should target inanimates using different code +// 0 - detect traps automatically +// 1 - detect traps by skill +// 2 - detect secret doors automatically +// 3 - detect secret doors by luck int fx_find_traps (Scriptable* /*Owner*/, Actor* target, Effect* fx) { if (0) printf( "fx_find_traps (%2d)\n", fx->Opcode ); //reveal trapped containers, doors, triggers that are in the visible range ieDword range = target->GetStat(IE_VISUALRANGE)*10; ieDword skill; + bool detecttraps = true; - if (fx->Parameter2 == 0) - skill = 256; //always works - else - skill = target->GetStat(IE_TRAPS); //based on skill + switch(fx->Parameter2) { + case 1: + skill = target->GetStat(IE_TRAPS); + break; //find traps + case 3: + //detect secret doors + skill = target->LuckyRoll(1,100,0); + detecttraps = false; + break; + case 2: + detecttraps = false; + default: + //automatic find traps + skill = 256; + break; + } TileMap *TMap = target->GetCurrentArea()->TMap; @@ -3835,24 +3852,19 @@ int fx_find_traps (Scriptable* /*Owner*/, Actor* target, Effect* fx) Door* door = TMap->GetDoor( Count++ ); if (!door) break; -/* - //not trapped - if (!door->Scripts[0]) { - continue; - } - //not detectable - if (!(door->Flags&DOOR_DETECTABLE)) { - continue; - } -*/ if (Distance(door->Pos, target->Pos)<range) { + if (detecttraps) { //when was door trap noticed - door->DetectTrap(skill); + door->DetectTrap(skill); + } door->TryDetectSecret(skill); -// door->TrapDetected = 1; } } + if (!detecttraps) { + return FX_NOT_APPLIED; + } + Count = 0; while (true) { Container* container = TMap->GetContainer( Count++ ); @@ -3878,6 +3890,7 @@ int fx_find_traps (Scriptable* /*Owner*/, Actor* target, Effect* fx) return FX_NOT_APPLIED; } + // 0x97 ReplaceCreature int fx_replace_creature (Scriptable* Owner, Actor* target, Effect *fx) { ----------------------------------------------------------------------- This is an automated email from the git hooks/post-receive script. -- gemrb: Infinity Engine emulator |