[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