From 7f421be835a694233ab238a13ffc89ce76624723 Mon Sep 17 00:00:00 2001 From: Peter Kohaut Date: Mon, 28 Jan 2019 19:23:30 +0100 Subject: BLADERUNNER: Fixed small issue in combat calculation Better variable names in actor combat classes. --- engines/bladerunner/actor.cpp | 4 +-- engines/bladerunner/actor.h | 2 +- engines/bladerunner/actor_combat.cpp | 58 +++++++++++++++++------------------ engines/bladerunner/actor_combat.h | 12 ++++---- engines/bladerunner/script/script.cpp | 6 ++-- engines/bladerunner/script/script.h | 2 +- 6 files changed, 42 insertions(+), 42 deletions(-) diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp index c9528cf2ef..d0ba7cc7e8 100644 --- a/engines/bladerunner/actor.cpp +++ b/engines/bladerunner/actor.cpp @@ -1009,13 +1009,13 @@ void Actor::modifyMaxHP(signed int change) { } -void Actor::combatModeOn(int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int actionRatio, int damage, int range, bool unstoppable) { +void Actor::combatModeOn(int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int attackRatio, int damage, int range, bool unstoppable) { _animationModeCombatIdle = animationModeCombatIdle; _animationModeCombatWalk = animationModeCombatWalk; _animationModeCombatRun = animationModeCombatRun; _inCombat = true; if (_id != kActorMcCoy) { - _combatInfo->combatOn(_id, initialState, rangedAttack, enemyId, waypointType, fleeRatio, coverRatio, actionRatio, damage, range, unstoppable); + _combatInfo->combatOn(_id, initialState, rangedAttack, enemyId, waypointType, fleeRatio, coverRatio, attackRatio, damage, range, unstoppable); } stopWalking(false); changeAnimationMode(_animationModeCombatIdle, false); diff --git a/engines/bladerunner/actor.h b/engines/bladerunner/actor.h index 896f3a2e52..90588c80dd 100644 --- a/engines/bladerunner/actor.h +++ b/engines/bladerunner/actor.h @@ -229,7 +229,7 @@ public: void retire(bool isRetired, int width, int height, int retiredByActorId); - void combatModeOn(int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int actionRatio, int damage, int range, bool unstoppable); + void combatModeOn(int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int attackRatio, int damage, int range, bool unstoppable); void combatModeOff(); void setGoal(int goalNumber); diff --git a/engines/bladerunner/actor_combat.cpp b/engines/bladerunner/actor_combat.cpp index 4bcce5d3bf..727174943b 100644 --- a/engines/bladerunner/actor_combat.cpp +++ b/engines/bladerunner/actor_combat.cpp @@ -50,7 +50,7 @@ void ActorCombat::setup() { reset(); } -void ActorCombat::combatOn(int actorId, int initialState, bool rangedAttackFlag, int enemyId, int waypointType, int fleeRatio, int coverRatio, int actionRatio, int damage, int range, bool unstoppable) { +void ActorCombat::combatOn(int actorId, int initialState, bool rangedAttackFlag, int enemyId, int waypointType, int fleeRatio, int coverRatio, int attackRatio, int damage, int range, bool unstoppable) { _actorId = actorId; _state = initialState; _rangedAttack = rangedAttackFlag; @@ -59,10 +59,10 @@ void ActorCombat::combatOn(int actorId, int initialState, bool rangedAttackFlag, _damage = damage; _fleeRatioConst = fleeRatio; _coverRatioConst = coverRatio; - _actionRatioConst = actionRatio; + _attackRatioConst = attackRatio; _fleeRatio = fleeRatio; _coverRatio = coverRatio; - _actionRatio = actionRatio; + _attackRatio = attackRatio; _active = true; if (_rangedAttack) { _range = range; @@ -133,10 +133,10 @@ void ActorCombat::tick() { _actorPosition = actor->getXYZ(); _enemyPosition = enemy->getXYZ(); - if (_actionRatioConst >= 0) { - _actionRatio = _actionRatioConst; + if (_attackRatioConst >= 0) { + _attackRatio = _attackRatioConst; } else { - _actionRatio = calculateActionRatio(); + _attackRatio = calculateAttackRatio(); } if (_vm->_combat->findCoverWaypoint(_waypointType, _actorId, _enemyId) != -1) { @@ -158,8 +158,8 @@ void ActorCombat::tick() { float dist = actor->distanceFromActor(_enemyId); int oldState = _state; - if (_actionRatio < _fleeRatio || _actionRatio < _coverRatio) { - if (_coverRatio >= _fleeRatio && _coverRatio >= _actionRatio) { + if (_attackRatio < _fleeRatio || _attackRatio < _coverRatio) { + if (_coverRatio >= _fleeRatio && _coverRatio >= _attackRatio) { _state = kActorCombatStateCover; } else { _state = kActorCombatStateFlee; @@ -236,20 +236,20 @@ void ActorCombat::hitAttempt() { return; } - int aggressiveness = 0; + int attackCoefficient = 0; if (_rangedAttack) { - aggressiveness = _rangedAttack == 1 ? getaggressivenessRangedAttack() : 0; + attackCoefficient = _rangedAttack ? getCoefficientRangedAttack() : 0; } else { - aggressiveness = getaggressivenessCloseAttack(); + attackCoefficient = getCoefficientCloseAttack(); } - if (aggressiveness == 0) { + if (attackCoefficient == 0) { return; } int random = _vm->_rnd.getRandomNumberRng(1, 100); - if (random <= aggressiveness) { + if (random <= attackCoefficient) { if (enemy->isWalking()) { enemy->stopWalking(true); } @@ -263,9 +263,9 @@ void ActorCombat::hitAttempt() { int damage = 0; if (_rangedAttack) { - damage = getDamageRangedAttack(random, aggressiveness); + damage = getDamageRangedAttack(random, attackCoefficient); } else { - damage = getDamageCloseAttack(random, aggressiveness); + damage = getDamageCloseAttack(random, attackCoefficient); } int enemyHp = MAX(enemy->getCurrentHP() - damage, 0); @@ -274,9 +274,9 @@ void ActorCombat::hitAttempt() { if (enemyHp <= 0) { if (!enemy->isRetired()) { if (enemy->inCombat()) { - enemy->changeAnimationMode(49, false); + enemy->changeAnimationMode(kAnimationModeCombatDie, false); } else { - enemy->changeAnimationMode(48, false); + enemy->changeAnimationMode(kAnimationModeDie, false); } sentenceId = 9020; } @@ -301,10 +301,10 @@ void ActorCombat::save(SaveFileWriteStream &f) { f.writeInt(_damage); f.writeInt(_fleeRatio); f.writeInt(_coverRatio); - f.writeInt(_actionRatio); + f.writeInt(_attackRatio); f.writeInt(_fleeRatioConst); f.writeInt(_coverRatioConst); - f.writeInt(_actionRatioConst); + f.writeInt(_attackRatioConst); f.writeInt(_range); f.writeInt(_unstoppable); f.writeInt(_actorHp); @@ -325,10 +325,10 @@ void ActorCombat::load(SaveFileReadStream &f) { _damage = f.readInt(); _fleeRatio = f.readInt(); _coverRatio = f.readInt(); - _actionRatio = f.readInt(); + _attackRatio = f.readInt(); _fleeRatioConst = f.readInt(); _coverRatioConst = f.readInt(); - _actionRatioConst = f.readInt(); + _attackRatioConst = f.readInt(); _range = f.readInt(); _unstoppable = f.readInt(); _actorHp = f.readInt(); @@ -349,13 +349,13 @@ void ActorCombat::reset() { _damage = 0; _fleeRatio = -1; _coverRatio = -1; - _actionRatio = -1; + _attackRatio = -1; _fleeRatioConst = -1; _coverRatioConst = -1; - _actionRatioConst = -1; + _attackRatioConst = -1; _actorHp = 0; _range = 300; - _unstoppable = false; + _unstoppable = false; _actorPosition = Vector3(0.0f, 0.0f, 0.0f); _enemyPosition = Vector3(0.0f, 0.0f, 0.0f); _coversWaypointCount = 0; @@ -515,7 +515,7 @@ void ActorCombat::faceEnemy() { _vm->_actors[_actorId]->setFacing(angle_1024(_actorPosition.x, _actorPosition.z, _enemyPosition.x, _enemyPosition.z), false); } -int ActorCombat::getaggressivenessCloseAttack() const{ +int ActorCombat::getCoefficientCloseAttack() const{ Actor *actor = _vm->_actors[_actorId]; Actor *enemy = _vm->_actors[_enemyId]; @@ -545,7 +545,7 @@ int ActorCombat::getaggressivenessCloseAttack() const{ return aggressiveness + (abs(angle - 128) / 3.7f); } -int ActorCombat::getaggressivenessRangedAttack() const { +int ActorCombat::getCoefficientRangedAttack() const { Actor *actor = _vm->_actors[_actorId]; Actor *enemy = _vm->_actors[_enemyId]; @@ -588,7 +588,7 @@ int ActorCombat::getDamageRangedAttack(int min, int max) const { return ((MIN(max - min, 30) * 100.0f / 60.0f) + 50) * _damage / 100; } -int ActorCombat::calculateActionRatio() const { +int ActorCombat::calculateAttackRatio() const { Actor *actor = _vm->_actors[_actorId]; Actor *enemy = _vm->_actors[_enemyId]; @@ -597,7 +597,7 @@ int ActorCombat::calculateActionRatio() const { int enemyHpFactor = 100 - enemy->getCurrentHP(); int combatFactor = enemy->inCombat() ? 0 : 100; int angleFactor = (100 * abs(enemy->angleTo(_actorPosition))) / 512; - int distanceFactor = 2 * (50 - MAX(actor->distanceFromActor(_enemyId) / 12.0f, 50.0f)); + int distanceFactor = 2 * (50 - MIN(actor->distanceFromActor(_enemyId) / 12.0f, 50.0f)); if (_rangedAttack) { return @@ -629,7 +629,7 @@ int ActorCombat::calculateCoverRatio() const { int actorHpFactor = 100 - actor->getCurrentHP(); int enemyHpFactor = enemy->getCurrentHP(); int aggressivenessFactor = 100 - actor->getCombatAggressiveness(); - int distanceFactor = 2 * MAX(actor->distanceFromActor(_enemyId) / 12.0f, 50.0f); + int distanceFactor = 2 * MIN(actor->distanceFromActor(_enemyId) / 12.0f, 50.0f); if (_rangedAttack) { return diff --git a/engines/bladerunner/actor_combat.h b/engines/bladerunner/actor_combat.h index 8f36445008..1b76463458 100644 --- a/engines/bladerunner/actor_combat.h +++ b/engines/bladerunner/actor_combat.h @@ -43,10 +43,10 @@ class ActorCombat { int _damage; int _fleeRatio; int _coverRatio; - int _actionRatio; + int _attackRatio; int _fleeRatioConst; int _coverRatioConst; - int _actionRatioConst; + int _attackRatioConst; int _actorHp; int _range; bool _unstoppable; @@ -62,7 +62,7 @@ public: void setup(); - void combatOn(int actorId, int initialState, bool rangedAttack, int enemyId, int waypointType, int fleeRatio, int coverRatio, int actionRatio, int damage, int range, bool unstoppable); + void combatOn(int actorId, int initialState, bool rangedAttack, int enemyId, int waypointType, int fleeRatio, int coverRatio, int attackRatio, int damage, int range, bool unstoppable); void combatOff(); void tick(); @@ -86,13 +86,13 @@ private: void faceEnemy(); - int getaggressivenessCloseAttack() const; - int getaggressivenessRangedAttack() const; + int getCoefficientCloseAttack() const; + int getCoefficientRangedAttack() const; int getDamageCloseAttack(int min, int max) const; int getDamageRangedAttack(int min, int max) const; - int calculateActionRatio() const; + int calculateAttackRatio() const; int calculateCoverRatio() const; int calculateFleeRatio() const; diff --git a/engines/bladerunner/script/script.cpp b/engines/bladerunner/script/script.cpp index 21ddebdf3f..9795e296ae 100644 --- a/engines/bladerunner/script/script.cpp +++ b/engines/bladerunner/script/script.cpp @@ -266,9 +266,9 @@ void ScriptBase::Actor_Combat_AI_Hit_Attempt(int actorId) { } } -void ScriptBase::Non_Player_Actor_Combat_Mode_On(int actorId, int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int actionRatio, int damage, int range, bool unstoppable) { - debugC(kDebugScript, "Non_Player_Actor_Combat_Mode_On(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", actorId, initialState, rangedAttack, enemyId, waypointType, animationModeCombatIdle, animationModeCombatWalk, animationModeCombatRun, fleeRatio, coverRatio, actionRatio, damage, range, unstoppable); - _vm->_actors[actorId]->combatModeOn(initialState, rangedAttack, enemyId, waypointType, animationModeCombatIdle, animationModeCombatWalk, animationModeCombatRun, fleeRatio, coverRatio, actionRatio, damage, range, unstoppable); +void ScriptBase::Non_Player_Actor_Combat_Mode_On(int actorId, int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int attackRatio, int damage, int range, bool unstoppable) { + debugC(kDebugScript, "Non_Player_Actor_Combat_Mode_On(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", actorId, initialState, rangedAttack, enemyId, waypointType, animationModeCombatIdle, animationModeCombatWalk, animationModeCombatRun, fleeRatio, coverRatio, attackRatio, damage, range, unstoppable); + _vm->_actors[actorId]->combatModeOn(initialState, rangedAttack, enemyId, waypointType, animationModeCombatIdle, animationModeCombatWalk, animationModeCombatRun, fleeRatio, coverRatio, attackRatio, damage, range, unstoppable); } void ScriptBase::Non_Player_Actor_Combat_Mode_Off(int actorId) { diff --git a/engines/bladerunner/script/script.h b/engines/bladerunner/script/script.h index 3b35f3a81d..e2e3e2772a 100644 --- a/engines/bladerunner/script/script.h +++ b/engines/bladerunner/script/script.h @@ -80,7 +80,7 @@ protected: void Actor_Set_Flag_Damage_Anim_If_Moving(int actorId, bool value); bool Actor_Query_Flag_Damage_Anim_If_Moving(int actorId); void Actor_Combat_AI_Hit_Attempt(int actorId); - void Non_Player_Actor_Combat_Mode_On(int actorId, int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int actionRatio, int damage, int range, bool unstoppable); + void Non_Player_Actor_Combat_Mode_On(int actorId, int initialState, bool rangedAttack, int enemyId, int waypointType, int animationModeCombatIdle, int animationModeCombatWalk, int animationModeCombatRun, int fleeRatio, int coverRatio, int attackRatio, int damage, int range, bool unstoppable); void Non_Player_Actor_Combat_Mode_Off(int actorId); void Actor_Set_Health(int actorId, int hp, int maxHp); void Actor_Set_Targetable(int actorId, bool targetable); -- cgit v1.2.3