From: Laszlo T. <ave...@us...> - 2012-01-31 18:34:08
|
gemrb: Infinity Engine emulator The branch master has been updated via 4ef3f51f844c6015962d5396167c5a7e4154eff9 (commit) via 822ec3f4d46a7977aaf07bd97f4f74f73d0f6fee (commit) Summary of changes: gemrb/core/Inventory.cpp | 21 ++++++--------------- gemrb/core/Item.h | 6 ++++-- gemrb/plugins/ITMImporter/ITMImporter.cpp | 8 ++++++++ 3 files changed, 18 insertions(+), 17 deletions(-) from 0299361e3afe92659594961c98672d4e6686f607 (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=4ef3f51f844c6015962d5396167c5a7e4154eff9 commit 4ef3f51f844c6015962d5396167c5a7e4154eff9 Author: Avenger <ave...@so...> Date: Tue Jan 31 19:33:34 2012 +0100 fixed critical hit aversion (the flag is in the item header, not in the extended header) diff --git a/gemrb/core/Inventory.cpp b/gemrb/core/Inventory.cpp index 9e1f8b4..e4072fc 100644 --- a/gemrb/core/Inventory.cpp +++ b/gemrb/core/Inventory.cpp @@ -1868,21 +1868,12 @@ bool Inventory::ProvidesCriticalAversion() if (!itm) { continue; } - - for (int h = 0; h < itm->ExtHeaderCount; h++) { - ITMExtHeader *header = itm->GetExtHeader(h); - if ((int)i == SLOT_HEAD) { - if (header && (header->RechargeFlags & IE_ITEM_TOGGLE_CRITS)) { - return false; - } else { - return true; - } - } else { - if (header && (header->RechargeFlags & IE_ITEM_TOGGLE_CRITS)) { - return true; - } - } - } + //if the item is worn on head, toggle crits must be 0, otherwise it must be 1 + //this flag is only stored in the item header, so we need to make some efforts + //to get to it (TODO convince ToBEx to move this bit into the accessible range?) - low 24 bits + ieDword flag = itm->Flags; + gamedata->FreeItem( itm, item->ItemResRef, false ); + if (!(flags&IE_ITEM_TOGGLE_CRITS) != (i==SLOT_HEAD) ) return true; } return false; } http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=822ec3f4d46a7977aaf07bd97f4f74f73d0f6fee commit 822ec3f4d46a7977aaf07bd97f4f74f73d0f6fee Author: Avenger <ave...@so...> Date: Tue Jan 31 19:27:01 2012 +0100 use dexterity flag hacked into item diff --git a/gemrb/core/Item.h b/gemrb/core/Item.h index 31f5fe9..149646e 100644 --- a/gemrb/core/Item.h +++ b/gemrb/core/Item.h @@ -51,14 +51,16 @@ class Projectile; #define IE_ITEM_CONVERSABLE 0x00000800 #define IE_ITEM_PULSATING 0x00001000 #define IE_ITEM_UNSELLABLE ( IE_ITEM_CRITICAL | IE_ITEM_STOLEN ) - -//modder extensions +//tobex modder extensions, please note, these are not copied into the local slot bits #define IE_ITEM_NO_DISPEL 0x01000000 //disables destruction by dispelling #define IE_ITEM_TOGGLE_CRITS 0x02000000 //toggles critical hit avertion +#define IE_ITEM_NO_INVIS 0x04000000 //don't target invisible + //Extended header recharge flags #define IE_ITEM_USESTRENGTH 1 //weapon #define IE_ITEM_BREAKABLE 2 //weapon +#define IE_ITEM_USEDEXTERITY 4 //gemrb weapon (move this if tobex implements it elsewhere) #define IE_ITEM_HOSTILE 0x400 //equipment #define IE_ITEM_RECHARGE 0x800 //equipment #define IE_ITEM_IGNORESHIELD 0x10000 //weapon diff --git a/gemrb/plugins/ITMImporter/ITMImporter.cpp b/gemrb/plugins/ITMImporter/ITMImporter.cpp index b82cba8..3144ab8 100644 --- a/gemrb/plugins/ITMImporter/ITMImporter.cpp +++ b/gemrb/plugins/ITMImporter/ITMImporter.cpp @@ -219,6 +219,10 @@ Item* ITMImporter::GetItem(Item *s) return s; } +//unfortunately, i couldn't avoid this hack, unless adding another array +#define IT_DAGGER 0x10 +#define IT_SHORTSWORD 0x13 + void ITMImporter::GetExtHeader(Item *s, ITMExtHeader* eh) { ieByte tmpByte; @@ -249,6 +253,10 @@ void ITMImporter::GetExtHeader(Item *s, ITMExtHeader* eh) str->ReadWord( &eh->Charges ); str->ReadWord( &eh->ChargeDepletion ); str->ReadDword( &eh->RechargeFlags ); + + //hack for default weapon finesse + if (s->ItemType==IT_DAGGER || s->ItemType==IT_SHORTSWORD) eh->RechargeFlags^=IE_ITEM_USEDEXTERITY; + str->ReadWord( &eh->ProjectileAnimation ); //for some odd reasons 0 and 1 are the same if (eh->ProjectileAnimation) { ----------------------------------------------------------------------- This is an automated email from the git hooks/post-receive script. -- gemrb: Infinity Engine emulator |