Skip to content

Commit

Permalink
XEEN: Fixes for speed table calculation, RT_HIT range type cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Jan 22, 2018
1 parent ce3b1af commit a06bf75
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 18 deletions.
28 changes: 11 additions & 17 deletions engines/xeen/combat.cpp
Expand Up @@ -1085,8 +1085,8 @@ void Combat::setupCombatParty() {
void Combat::setSpeedTable() {
Map &map = *_vm->_map;
Common::Array<int> charSpeeds;
bool hasSpeed = _whosSpeed != -1 && _whosSpeed < (int)_speedTable.size();
int oldSpeed = hasSpeed ? _speedTable[_whosSpeed] : 0;
bool hasSpeed = _whosSpeed != -1;
int oldSpeed = hasSpeed && _whosSpeed < (int)_speedTable.size() ? _speedTable[_whosSpeed] : 0;

// Set up speeds for party membres
int maxSpeed = 0;
Expand Down Expand Up @@ -1122,12 +1122,13 @@ void Combat::setSpeedTable() {

if (hasSpeed) {
if (_speedTable[_whosSpeed] != oldSpeed) {
for (uint idx = 0; idx < charSpeeds.size(); ++idx) {
if (oldSpeed == _speedTable[idx]) {
_whosSpeed = idx;
for (_whosSpeed = 0; _whosSpeed < (int)charSpeeds.size(); ++_whosSpeed) {
if (oldSpeed == _speedTable[_whosSpeed])
break;
}
}

if (_whosSpeed == (int)charSpeeds.size())
error("Could not reset next speedy character. Beep beep.");
}
}
}
Expand Down Expand Up @@ -1211,7 +1212,6 @@ void Combat::attack(Character &c, RangeType rangeType) {
_vm->getRandomNumber(1, 100 + _oldCharacter->getCurrentLevel())) {
if (_monsterDamage != 0) {
attack2(damage, rangeType);
setSpeedTable();
} else {
switch (_damageType) {
case DT_SLEEP:
Expand All @@ -1225,26 +1225,22 @@ void Combat::attack(Character &c, RangeType rangeType) {
&& !monsterSavingThrow(monsterDataIndex)) {
damage = MIN(monster._hp, 50);
attack2(damage, RT_ALL);
setSpeedTable();
}
break;
case DT_HOLYWORD:
if (monsterData._monsterType == MONSTER_UNDEAD) {
attack2(monster._hp, RT_ALL);
setSpeedTable();
}
break;
case DT_MASS_DISTORTION:
attack2(MAX(monster._hp / 2, 1), RT_ALL);
setSpeedTable();
break;
case DT_UNDEAD:
if (monsterData._monsterType == MONSTER_UNDEAD)
damage = 25;
else
rangeType = RT_ALL;
attack2(damage, rangeType);
setSpeedTable();
break;
case DT_BEASTMASTER:
if ((monsterData._monsterType == MONSTER_ANIMAL || monsterData._monsterType == MONSTER_HUMANOID)
Expand All @@ -1259,7 +1255,6 @@ void Combat::attack(Character &c, RangeType rangeType) {
case DT_GOLEMSTOPPER:
if (monsterData._monsterType == MONSTER_GOLEM) {
attack2(100, rangeType);
setSpeedTable();
}
break;
case DT_HYPNOTIZE:
Expand All @@ -1271,12 +1266,10 @@ void Combat::attack(Character &c, RangeType rangeType) {
case DT_INSECT_SPRAY:
if (monsterData._monsterType == MONSTER_INSECT) {
attack2(25, rangeType);
setSpeedTable();
}
break;
case DT_MAGIC_ARROW:
attack2(8, rangeType);
setSpeedTable();
break;
default:
break;
Expand All @@ -1296,7 +1289,7 @@ void Combat::attack(Character &c, RangeType rangeType) {
} else {
damage = _monsterDamage ? _monsterDamage : _weaponDamage;
_shootingRow[charIndex] = 0;
attack2(damage, rangeType);
attack2(damage, RT_HIT);

if (map._isOutdoors) {
intf._outdoorList._attackImgs1[charIndex]._scale = 0;
Expand Down Expand Up @@ -1393,8 +1386,9 @@ void Combat::attack(Character &c, RangeType rangeType) {
}

attack2(damage, rangeType);
setSpeedTable();
}

setSpeedTable();
}

void Combat::attack2(int damage, RangeType rangeType) {
Expand Down Expand Up @@ -1742,7 +1736,7 @@ int Combat::getMonsterResistence(RangeType rangeType) {
MonsterStruct &monsterData = *monster._monsterData;
int resistence = 0, damage = 0;

if (rangeType != RT_SINGLE && rangeType != RT_3) {
if (rangeType != RT_SINGLE && rangeType != RT_HIT) {
switch (_damageType) {
case DT_PHYSICAL:
resistence = monsterData._phsyicalResistence;
Expand Down
2 changes: 1 addition & 1 deletion engines/xeen/combat.h
Expand Up @@ -58,7 +58,7 @@ enum ElementalCategory {
};

enum RangeType {
RT_SINGLE = 0, RT_GROUP = 1, RT_ALL = 2, RT_3 = 3
RT_SINGLE = 0, RT_GROUP = 1, RT_ALL = 2, RT_HIT = 3
};

enum ShootType {
Expand Down

0 comments on commit a06bf75

Please sign in to comment.