diff options
author | Eugene Sandulenko | 2015-12-31 22:34:44 +0100 |
---|---|---|
committer | Eugene Sandulenko | 2015-12-31 22:34:44 +0100 |
commit | c001c30547af9197f07227de70a85f09a8c8920a (patch) | |
tree | 9c2e58b0377b981d832a28f6afc0eee95892845a | |
parent | 130a671e8f29d2e6598ff3a67c17947ff2f29b4e (diff) | |
download | scummvm-rg350-c001c30547af9197f07227de70a85f09a8c8920a.tar.gz scummvm-rg350-c001c30547af9197f07227de70a85f09a8c8920a.tar.bz2 scummvm-rg350-c001c30547af9197f07227de70a85f09a8c8920a.zip |
WAGE: Finished world reset
-rw-r--r-- | engines/wage/entities.cpp | 27 | ||||
-rw-r--r-- | engines/wage/entities.h | 81 | ||||
-rw-r--r-- | engines/wage/script.cpp | 72 | ||||
-rw-r--r-- | engines/wage/world.cpp | 7 |
4 files changed, 108 insertions, 79 deletions
diff --git a/engines/wage/entities.cpp b/engines/wage/entities.cpp index c5dd36e222..f9a68d652a 100644 --- a/engines/wage/entities.cpp +++ b/engines/wage/entities.cpp @@ -59,6 +59,19 @@ void Designed::setDesignBounds(Common::Rect *bounds) { _design->setBounds(bounds); } +Context::Context() { + _visits = 0; + _kills = 0; + _experience = 0; + _frozen = false; + + for (int i = 0; i < 26 * 9; i++) + _userVariables[i] = 0; + + for (int i = 0; i < 18; i++) + _statVariables[i] = 0; +} + Scene::Scene() { _script = NULL; _design = NULL; @@ -317,6 +330,20 @@ Chr::Chr(String name, Common::SeekableReadStream *data) { _armor[i] = NULL; } +void Chr::resetState() { + _context._statVariables[PHYS_STR_BAS] = _context._statVariables[PHYS_STR_CUR] = _physicalStrength; + _context._statVariables[PHYS_HIT_BAS] = _context._statVariables[PHYS_HIT_CUR] = _physicalHp; + _context._statVariables[PHYS_ARM_BAS] = _context._statVariables[PHYS_ARM_CUR] = _naturalArmor; + _context._statVariables[PHYS_ACC_BAS] = _context._statVariables[PHYS_ACC_CUR] = _physicalAccuracy; + + _context._statVariables[SPIR_STR_BAS] = _context._statVariables[SPIR_STR_CUR] = _spiritualStength; + _context._statVariables[SPIR_HIT_BAS] = _context._statVariables[SPIR_HIT_CUR] = _spiritialHp; + _context._statVariables[SPIR_ARM_BAS] = _context._statVariables[SPIR_ARM_CUR] = _naturalArmor; + _context._statVariables[SPIR_ACC_BAS] = _context._statVariables[SPIR_ACC_CUR] = _physicalAccuracy; + + _context._statVariables[PHYS_SPE_BAS] = _context._statVariables[PHYS_SPE_CUR] = _runningSpeed; +} + WeaponArray *Chr::getWeapons() { WeaponArray *list = new WeaponArray; diff --git a/engines/wage/entities.h b/engines/wage/entities.h index 5ecd33c846..5c1a902bd2 100644 --- a/engines/wage/entities.h +++ b/engines/wage/entities.h @@ -62,50 +62,53 @@ class Weapon; typedef Common::Array<Weapon *> WeaponArray; +enum StatVariable { +/** The base physical accuracy of the player. */ + PHYS_ACC_BAS = 0, +/** The current physical accuracy of the player. */ + PHYS_ACC_CUR = 1, +/** The base physical armor of the player. */ + PHYS_ARM_BAS = 2, +/** The current physical armor of the player. */ + PHYS_ARM_CUR = 3, +/** The base physical hit points of the player. */ + PHYS_HIT_BAS = 4, +/** The current physical hit points of the player. */ + PHYS_HIT_CUR = 5, +/** The base physical speed of the player. */ + PHYS_SPE_BAS = 6, +/** The current physical speed of the player. */ + PHYS_SPE_CUR = 7, +/** The base physical strength of the player. */ + PHYS_STR_BAS = 8, +/** The current physical strength of the player. */ + PHYS_STR_CUR = 9, +/** The base spiritual accuracy of the player. */ + SPIR_ACC_BAS = 10, +/** The current spiritual accuracy of the player. */ + SPIR_ACC_CUR = 11, +/** The base spiritual armor of the player. */ + SPIR_ARM_BAS = 12, +/** The current spiritual armor of the player. */ + SPIR_ARM_CUR = 13, +/** The base spiritual hit points of the player. */ + SPIR_HIT_BAS = 14, +/** The current spiritual hit points of the player. */ + SPIR_HIT_CUR = 15, +/** The base spiritual strength of the player. */ + SPIR_STR_BAS = 16, +/** The current spiritual strength of the player. */ + SPIR_STR_CUR = 17 +}; + class Context { public: - enum StatVariable { - /** The base physical accuracy of the player. */ - PHYS_ACC_BAS = 0, - /** The current physical accuracy of the player. */ - PHYS_ACC_CUR = 1, - /** The base physical armor of the player. */ - PHYS_ARM_BAS = 2, - /** The current physical armor of the player. */ - PHYS_ARM_CUR = 3, - /** The base physical hit points of the player. */ - PHYS_HIT_BAS = 4, - /** The current physical hit points of the player. */ - PHYS_HIT_CUR = 5, - /** The base physical speed of the player. */ - PHYS_SPE_BAS = 6, - /** The current physical speed of the player. */ - PHYS_SPE_CUR = 7, - /** The base physical strength of the player. */ - PHYS_STR_BAS = 8, - /** The current physical strength of the player. */ - PHYS_STR_CUR = 9, - /** The base spiritual accuracy of the player. */ - SPIR_ACC_BAS = 10, - /** The current spiritual accuracy of the player. */ - SPIR_ACC_CUR = 11, - /** The base spiritual armor of the player. */ - SPIR_ARM_BAS = 12, - /** The current spiritual armor of the player. */ - SPIR_ARM_CUR = 13, - /** The base spiritual hit points of the player. */ - SPIR_HIT_BAS = 14, - /** The current spiritual hit points of the player. */ - SPIR_HIT_CUR = 15, - /** The base spiritual strength of the player. */ - SPIR_STR_BAS = 16, - /** The current spiritual strength of the player. */ - SPIR_STR_CUR = 17 - }; + Context(); int16 _visits; // Number of scenes visited, including repeated visits int16 _kills; // Number of characters killed int16 _experience; + bool _frozen; int16 _userVariables[26 * 9]; int16 _statVariables[18]; }; @@ -284,6 +287,8 @@ public: } int wearObjIfPossible(Obj *obj); void wearObjs(); + + void resetState(); }; class Weapon { diff --git a/engines/wage/script.cpp b/engines/wage/script.cpp index b66e517260..778c0c8269 100644 --- a/engines/wage/script.cpp +++ b/engines/wage/script.cpp @@ -261,41 +261,41 @@ Script::Operand *Script::readOperand() { return new Operand(cont->_userVariables[value - 1], NUMBER); } case 0xD0: - return new Operand(cont->_statVariables[Context::PHYS_STR_BAS], NUMBER); + return new Operand(cont->_statVariables[PHYS_STR_BAS], NUMBER); case 0xD1: - return new Operand(cont->_statVariables[Context::PHYS_HIT_BAS], NUMBER); + return new Operand(cont->_statVariables[PHYS_HIT_BAS], NUMBER); case 0xD2: - return new Operand(cont->_statVariables[Context::PHYS_ARM_BAS], NUMBER); + return new Operand(cont->_statVariables[PHYS_ARM_BAS], NUMBER); case 0xD3: - return new Operand(cont->_statVariables[Context::PHYS_ACC_BAS], NUMBER); + return new Operand(cont->_statVariables[PHYS_ACC_BAS], NUMBER); case 0xD4: - return new Operand(cont->_statVariables[Context::SPIR_STR_BAS], NUMBER); + return new Operand(cont->_statVariables[SPIR_STR_BAS], NUMBER); case 0xD5: - return new Operand(cont->_statVariables[Context::SPIR_HIT_BAS], NUMBER); + return new Operand(cont->_statVariables[SPIR_HIT_BAS], NUMBER); case 0xD6: - return new Operand(cont->_statVariables[Context::SPIR_ARM_BAS], NUMBER); + return new Operand(cont->_statVariables[SPIR_ARM_BAS], NUMBER); case 0xD7: - return new Operand(cont->_statVariables[Context::SPIR_ACC_BAS], NUMBER); + return new Operand(cont->_statVariables[SPIR_ACC_BAS], NUMBER); case 0xD8: - return new Operand(cont->_statVariables[Context::PHYS_SPE_BAS], NUMBER); + return new Operand(cont->_statVariables[PHYS_SPE_BAS], NUMBER); case 0xE0: - return new Operand(cont->_statVariables[Context::PHYS_STR_CUR], NUMBER); + return new Operand(cont->_statVariables[PHYS_STR_CUR], NUMBER); case 0xE1: - return new Operand(cont->_statVariables[Context::PHYS_HIT_CUR], NUMBER); + return new Operand(cont->_statVariables[PHYS_HIT_CUR], NUMBER); case 0xE2: - return new Operand(cont->_statVariables[Context::PHYS_ARM_CUR], NUMBER); + return new Operand(cont->_statVariables[PHYS_ARM_CUR], NUMBER); case 0xE3: - return new Operand(cont->_statVariables[Context::PHYS_ACC_CUR], NUMBER); + return new Operand(cont->_statVariables[PHYS_ACC_CUR], NUMBER); case 0xE4: - return new Operand(cont->_statVariables[Context::SPIR_STR_CUR], NUMBER); + return new Operand(cont->_statVariables[SPIR_STR_CUR], NUMBER); case 0xE5: - return new Operand(cont->_statVariables[Context::SPIR_HIT_CUR], NUMBER); + return new Operand(cont->_statVariables[SPIR_HIT_CUR], NUMBER); case 0xE6: - return new Operand(cont->_statVariables[Context::SPIR_ARM_CUR], NUMBER); + return new Operand(cont->_statVariables[SPIR_ARM_CUR], NUMBER); case 0xE7: - return new Operand(cont->_statVariables[Context::SPIR_ACC_CUR], NUMBER); + return new Operand(cont->_statVariables[SPIR_ACC_CUR], NUMBER); case 0xE8: - return new Operand(cont->_statVariables[Context::PHYS_SPE_CUR], NUMBER); + return new Operand(cont->_statVariables[PHYS_SPE_CUR], NUMBER); default: if (operandType >= 0x20 && operandType < 0x80) { _data->seek(-1, SEEK_CUR); @@ -315,58 +315,58 @@ void Script::assign(byte operandType, int uservar, uint16 value) { cont->_userVariables[uservar - 1] = value; break; case 0xD0: - cont->_statVariables[Context::PHYS_STR_BAS] = value; + cont->_statVariables[PHYS_STR_BAS] = value; break; case 0xD1: - cont->_statVariables[Context::PHYS_HIT_BAS] = value; + cont->_statVariables[PHYS_HIT_BAS] = value; break; case 0xD2: - cont->_statVariables[Context::PHYS_ARM_BAS] = value; + cont->_statVariables[PHYS_ARM_BAS] = value; break; case 0xD3: - cont->_statVariables[Context::PHYS_ACC_BAS] = value; + cont->_statVariables[PHYS_ACC_BAS] = value; break; case 0xD4: - cont->_statVariables[Context::SPIR_STR_BAS] = value; + cont->_statVariables[SPIR_STR_BAS] = value; break; case 0xD5: - cont->_statVariables[Context::SPIR_HIT_BAS] = value; + cont->_statVariables[SPIR_HIT_BAS] = value; break; case 0xD6: - cont->_statVariables[Context::SPIR_ARM_BAS] = value; + cont->_statVariables[SPIR_ARM_BAS] = value; break; case 0xD7: - cont->_statVariables[Context::SPIR_ACC_BAS] = value; + cont->_statVariables[SPIR_ACC_BAS] = value; break; case 0xD8: - cont->_statVariables[Context::PHYS_SPE_BAS] = value; + cont->_statVariables[PHYS_SPE_BAS] = value; break; case 0xE0: - cont->_statVariables[Context::PHYS_STR_CUR] = value; + cont->_statVariables[PHYS_STR_CUR] = value; break; case 0xE1: - cont->_statVariables[Context::PHYS_HIT_CUR] = value; + cont->_statVariables[PHYS_HIT_CUR] = value; break; case 0xE2: - cont->_statVariables[Context::PHYS_ARM_CUR] = value; + cont->_statVariables[PHYS_ARM_CUR] = value; break; case 0xE3: - cont->_statVariables[Context::PHYS_ACC_CUR] = value; + cont->_statVariables[PHYS_ACC_CUR] = value; break; case 0xE4: - cont->_statVariables[Context::SPIR_STR_CUR] = value; + cont->_statVariables[SPIR_STR_CUR] = value; break; case 0xE5: - cont->_statVariables[Context::SPIR_HIT_CUR] = value; + cont->_statVariables[SPIR_HIT_CUR] = value; break; case 0xE6: - cont->_statVariables[Context::SPIR_ARM_CUR] = value; + cont->_statVariables[SPIR_ARM_CUR] = value; break; case 0xE7: - cont->_statVariables[Context::SPIR_ACC_CUR] = value; + cont->_statVariables[SPIR_ACC_CUR] = value; break; case 0xE8: - cont->_statVariables[Context::PHYS_SPE_CUR] = value; + cont->_statVariables[PHYS_SPE_CUR] = value; break; default: debug("No idea what I'm supposed to assign! (%x at %d)!\n", operandType, _data->pos()-1); diff --git a/engines/wage/world.cpp b/engines/wage/world.cpp index e4ce93625d..e7c37c17d5 100644 --- a/engines/wage/world.cpp +++ b/engines/wage/world.cpp @@ -419,13 +419,10 @@ void World::move(Chr *chr, Scene *scene, bool skipSort) { Common::sort(scene->_chrs.begin(), scene->_chrs.end(), ChrComparator); if (scene == _storageScene) { - warning("STUB: World::move (chrState)"); - //chr.setState(new Chr.State(chr)); + chr->resetState(); } else if (chr->_playerCharacter) { scene->_visited = true; - warning("STUB: World::move (visits)"); - //Context context = getPlayerContext(); - //context.setVisits(context.getVisits() + 1); + _player->_context._visits++; } chr->_currentScene = scene; |