[Scummvm-cvs-logs] SF.net SVN: scummvm:[41348] scummvm/trunk/engines/kyra

athrxx at users.sourceforge.net athrxx at users.sourceforge.net
Sun Jun 7 20:51:13 CEST 2009


Revision: 41348
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41348&view=rev
Author:   athrxx
Date:     2009-06-07 18:51:03 +0000 (Sun, 07 Jun 2009)

Log Message:
-----------
LOL: minor bug fix in battle system

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/lol.cpp
    scummvm/trunk/engines/kyra/lol.h

Modified: scummvm/trunk/engines/kyra/lol.cpp
===================================================================
--- scummvm/trunk/engines/kyra/lol.cpp	2009-06-07 18:07:16 UTC (rev 41347)
+++ scummvm/trunk/engines/kyra/lol.cpp	2009-06-07 18:51:03 UTC (rev 41348)
@@ -242,7 +242,7 @@
 	_compassTimer = 0;
 	_timer3Para = 0;
 	_scriptCharacterCycle = 0;
-	_partyDeathFlag = -1;
+	_partyDamageFlags = -1;
 
 	memset(&_itemScript, 0, sizeof(_itemScript));
 }
@@ -876,9 +876,9 @@
 		else
 			updateEnvironmentalSfx(0);
 
-		if (_partyDeathFlag != -1) {
+		if (_partyDamageFlags != -1) {
 			checkForPartyDeath();
-			_partyDeathFlag = -1;
+			_partyDamageFlags = -1;
 		}
 
 		delay(_tickLength);
@@ -3113,7 +3113,7 @@
 	return res;
 }
 
-int LoLEngine::inflictDamage(uint16 target, int damage, uint16 attacker, int skill, int deathFlag) {
+int LoLEngine::inflictDamage(uint16 target, int damage, uint16 attacker, int skill, int flags) {
 	MonsterInPlay *m = 0;
 	LoLCharacter *c = 0;
 
@@ -3133,7 +3133,7 @@
 			m->hitPoints = CLIP<int16>(m->hitPoints, 0, m->properties->hitPoints);
 
 			if (!(attacker & 0x8000))
-				applyMonsterDefenseSkill(m, attacker, deathFlag, skill, damage);
+				applyMonsterDefenseSkill(m, attacker, flags, skill, damage);
 
 			snd_queueEnvironmentalSoundEffect(m->properties->sounds[2], m->block);
 			checkSceneUpdateNeed(m->block);
@@ -3173,13 +3173,13 @@
 		setTemporaryFaceFrame(target, 6, 4, 0);
 
 		// check for equipped cloud ring
-		if (deathFlag == 4 && itemEquipped(target, 229))
+		if (flags == 4 && itemEquipped(target, 229))
 			damage >>= 2;
 
 		setCharacterMagicOrHitPoints(target, 0, -damage, 1);
 
 		if (c->hitPointsCur <= 0) {
-			characterHitpointsZero(target, deathFlag);
+			characterHitpointsZero(target, flags);
 		} else {
 			_characters[target].damageSuffered = damage;
 			setCharacterUpdateEvent(target, 2, 4, 1);
@@ -3196,12 +3196,12 @@
 	return damage;
 }
 
-void LoLEngine::characterHitpointsZero(int16 charNum, int deathFlag) {
+void LoLEngine::characterHitpointsZero(int16 charNum, int flags) {
 	LoLCharacter *c = &_characters[charNum];
 	c->hitPointsCur = 0;
 	c->flags |= 8;
 	removeCharacterEffects(c, 1, 5);
-	_partyDeathFlag = deathFlag;
+	_partyDamageFlags = flags;
 }
 
 void LoLEngine::removeCharacterEffects(LoLCharacter *c, int first, int last) {
@@ -3355,7 +3355,7 @@
 	}
 }
 
-void LoLEngine::applyMonsterDefenseSkill(MonsterInPlay *monster, int16 attacker, int deathFlag, int skill, int damage) {
+void LoLEngine::applyMonsterDefenseSkill(MonsterInPlay *monster, int16 attacker, int flags, int skill, int damage) {
 	if (_rnd.getRandomNumberRng(1, 100) > monster->properties->defenseSkillChance)
 		return;
 
@@ -3364,32 +3364,33 @@
 	switch (monster->properties->defenseSkillType - 1) {
 	case 0:
 	case 1:
-		if ((deathFlag & 0x3f) == 2 || skill)
+		if ((flags & 0x3f) == 2 || skill)
 			return;
 
 		for (int i = 0; i < 3 ; i++) {
 			itm = _characters[attacker].items[i];
 			if (!itm)
 				continue;
-			if ((_itemProperties[_itemsInPlay[itm].itemPropertyIndex].protection & 0x3f) != deathFlag)
+			if ((_itemProperties[_itemsInPlay[itm].itemPropertyIndex].protection & 0x3f) != flags)
 				continue;
 
 			removeCharacterItem(attacker, 0x7fff);
 
 			if (monster->properties->defenseSkillType == 1) {
+				giveItemToMonster(monster, itm);
+				if (characterSays(0x401c, _characters[attacker].id, true))
+					_txt->printMessage(6, getLangString(0x401c));
+
+			} else {
 				deleteItem(itm);
 				if (characterSays(0x401d, _characters[attacker].id, true))
 					_txt->printMessage(6, getLangString(0x401d));
-			} else {
-				giveItemToMonster(monster, itm);
-				if (characterSays(0x401c, _characters[attacker].id, true))
-					_txt->printMessage(6, getLangString(0x401c));
 			}
 		}
 		break;
 
 	case 2:
-		if (!(deathFlag & 0x80))
+		if (!(flags & 0x80))
 			return;
 		monster->flags |= 8;
 		monster->direction = calcMonsterDirection(monster->x, monster->y, _partyPosX, _partyPosY) ^ 4;
@@ -3398,7 +3399,7 @@
 		break;
 
 	case 3:
-		if (deathFlag != 3)
+		if (flags != 3)
 			return;
 		monster->hitPoints += damage;
 		if (monster->hitPoints > monster->properties->hitPoints)
@@ -3406,7 +3407,7 @@
 		break;
 
 	case 4:
-		if (!(deathFlag & 0x80))
+		if (!(flags & 0x80))
 			return;
 		monster->hitPoints += damage;
 		if (monster->hitPoints > monster->properties->hitPoints)
@@ -3414,7 +3415,7 @@
 		break;
 
 	case 5:
-		if ((deathFlag & 0x84) == 0x84)
+		if ((flags & 0x84) == 0x84)
 			monster->numDistAttacks++;
 		break;
 

Modified: scummvm/trunk/engines/kyra/lol.h
===================================================================
--- scummvm/trunk/engines/kyra/lol.h	2009-06-07 18:07:16 UTC (rev 41347)
+++ scummvm/trunk/engines/kyra/lol.h	2009-06-07 18:51:03 UTC (rev 41348)
@@ -1396,14 +1396,14 @@
 	// fight
 	int battleHitSkillTest(int16 attacker, int16 target, int skill);
 	int calcInflictableDamage(int16 attacker, int16 target, int hitType);
-	int inflictDamage(uint16 target, int damage, uint16 attacker, int skill, int deathFlag);
+	int inflictDamage(uint16 target, int damage, uint16 attacker, int skill, int flags);
 	void characterHitpointsZero(int16 charNum, int a);
 	void removeCharacterEffects(LoLCharacter *c, int first, int last);
 	int calcInflictableDamagePerItem(int16 attacker, int16 target, uint16 itemMight, int index, int hitType);
 	void checkForPartyDeath();
 
 	void applyMonsterAttackSkill(MonsterInPlay *monster, int16 target, int16 damage);
-	void applyMonsterDefenseSkill(MonsterInPlay *monster, int16 attacker, int deathFlag, int skill, int damage);
+	void applyMonsterDefenseSkill(MonsterInPlay *monster, int16 attacker, int flags, int skill, int damage);
 	int removeCharacterItem(int charNum, int itemFlags);
 	int paralyzePoisonCharacter(int charNum, int typeFlag, int immunityFlags, int hitChance, int redraw);
 	void paralyzePoisonAllCharacters(int typeFlag, int immunityFlags, int hitChance);
@@ -1420,7 +1420,7 @@
 	uint16 getNearestMonsterFromPos(int x, int y);
 	uint16 getNearestPartyMemberFromPos(int x, int y);
 
-	int _partyDeathFlag;
+	int _partyDamageFlags;
 
 	// magic atlas
 	void displayAutomap();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list