diff --git a/common/scummsys.h b/common/scummsys.h index b15a76e5b999..48dffc53a675 100644 --- a/common/scummsys.h +++ b/common/scummsys.h @@ -405,6 +405,8 @@ typedef unsigned int uint32; typedef signed int int32; typedef unsigned int uint; + typedef signed long long int64; + typedef unsigned long long uint64; #endif diff --git a/engines/agi/detection_tables.h b/engines/agi/detection_tables.h index f1bb079ffcf1..a7a3920df834 100644 --- a/engines/agi/detection_tables.h +++ b/engines/agi/detection_tables.h @@ -849,6 +849,7 @@ static const AGIGameDescription gameDescriptions[] = { FANMADE("Tonight The Shrieking Corpses Bleed (Demo v0.11)", "bcc57a7c8d563fa0c333107ae1c0a6e6"), FANMADE("Tonight The Shrieking Corpses Bleed (v1.01)", "36b38f621b38e8d104aa0807302dc8c9"), FANMADE("Turks' Quest - Heir to the Planet", "3d19254b737c8b218e5bc4580542b79a"), + FANMADE("Ultimate AGI Fangame (Demo)", "2d14d6fa2a2136d681e46e06821905bf"), FANMADE("URI Quest (v0.173 Feb 27)", "3986eefcf546dafc45f920ae91a697c3"), FANMADE("URI Quest (v0.173 Jan 29)", "494150940d34130605a4f2e67ee40b12"), { diff --git a/engines/avalanche/avalanche.cpp b/engines/avalanche/avalanche.cpp index e373ab58c321..beb6333daa53 100644 --- a/engines/avalanche/avalanche.cpp +++ b/engines/avalanche/avalanche.cpp @@ -57,7 +57,6 @@ AvalancheEngine::AvalancheEngine(OSystem *syst, const AvalancheGameDescription * _sound = nullptr; _platform = gd->desc.platform; - initVariables(); } @@ -90,15 +89,11 @@ AvalancheEngine::~AvalancheEngine() { } void AvalancheEngine::initVariables() { - resetVariables(); - for (int i = 0; i < 31; i++) { _also[i][0] = nullptr; _also[i][1] = nullptr; } - _totalTime = 0; - memset(_fxPal, 0, 16 * 16 * 3); for (int i = 0; i < 15; i++) { @@ -129,7 +124,7 @@ void AvalancheEngine::initVariables() { _him = kPeoplePardon; _her = kPeoplePardon; _it = Parser::kPardon; - _roomTime = 0; + _roomCycles = 0; _doingSpriteRun = false; _isLoaded = false; _soundFx = true; @@ -146,6 +141,32 @@ void AvalancheEngine::initVariables() { _seeScroll = false; _currentMouse = 177; _holdLeftMouse = false; + + _jumpStatus = 0; + _mushroomGrowing = false; + _crapulusWillTell = false; + _enterCatacombsFromLustiesRoom = false; + _teetotal = false; + _malagauche = 0; + _drinking = '\0'; + _enteredLustiesRoomAsMonk = false; + _catacombX = 0; + _catacombY = 0; + _avvysInTheCupboard = false; + _geidaFollows = false; + _givenPotionToGeida = false; + _lustieIsAsleep = false; + _beenTiedUp = false; + _sittingInPub = false; + _spurgeTalkCount = 0; + _metAvaroid = false; + _takenMushroom = false; + _givenPenToAyles = false; + _askedDogfoodAboutNim = false; + _ableToAddTimer = false; + _spludwickAtHome = false; + _passedCwytalotInHerts = false; + _lastRoom = _lastRoomNotMap = kRoomDummy; } Common::ErrorCode AvalancheEngine::initialize() { @@ -363,6 +384,8 @@ bool AvalancheEngine::saveGame(const int16 slot, const Common::String &desc) { f->writeSint16LE(t.tm_mon); f->writeSint16LE(t.tm_year); + _totalTime += getTimeInSeconds() - _startTime; + Common::Serializer sz(NULL, f); synchronize(sz); f->finalize(); @@ -425,6 +448,7 @@ bool AvalancheEngine::loadGame(const int16 slot) { delete f; _isLoaded = true; + _ableToAddTimer = false; _seeScroll = true; // This prevents display of the new sprites before the new picture is loaded. if (_holdTheDawn) { @@ -482,6 +506,12 @@ Common::String AvalancheEngine::expandDate(int d, int m, int y) { return day + ' ' + month + ' ' + intToStr(y + 1900); } +uint32 AvalancheEngine::getTimeInSeconds() { + TimeDate time; + _system->getTimeAndDate(time); + return time.tm_hour * 3600 + time.tm_min * 60 + time.tm_sec; +} + void AvalancheEngine::updateEvents() { Common::Event event; diff --git a/engines/avalanche/avalanche.h b/engines/avalanche/avalanche.h index b6e168f83063..2734155b7dd3 100644 --- a/engines/avalanche/avalanche.h +++ b/engines/avalanche/avalanche.h @@ -111,6 +111,7 @@ class AvalancheEngine : public Engine { Common::Error loadGameState(int slot); bool loadGame(const int16 slot); Common::String expandDate(int d, int m, int y); + uint32 getTimeInSeconds(); void updateEvents(); bool getEvent(Common::Event &event); // A wrapper around _eventMan->pollEvent(), so we can use it in Scrolls::normscroll() for example. @@ -210,7 +211,8 @@ class AvalancheEngine : public Engine { bool _takenPen; // Have you taken the pen (in Cardiff?) bool _arrowInTheDoor; // Did the arrow hit the wall? Common::String _favoriteDrink, _favoriteSong, _worstPlaceOnEarth, _spareEvening; // Personalisation str's - uint32 _totalTime; // Your total time playing this game, in ticks. + uint32 _startTime; // When did you start playing this session? + uint32 _totalTime; // Your total time playing this game, in seconds. Updated only at saving and loading. byte _jumpStatus; // Fixes how high you're jumping. bool _mushroomGrowing; // Is the mushroom growing in 42? bool _crapulusWillTell; // Will Crapulus tell you about Spludwick being away? @@ -257,12 +259,16 @@ class AvalancheEngine : public Engine { byte _subjectNum; // The same thing. People _him, _her; byte _it; - uint32 _roomTime; // Set to 0 when you enter a room, added to in every loop. + uint32 _roomCycles; // Set to 0 when you enter a room, added to in every loop. Cycles since you've been in this room. bool _doingSpriteRun; // Only set to True if we're doing a sprite_run at this moment. This stops the trippancy system from moving any of the sprites. - bool _isLoaded; // Is it a loaded gamestate? bool _soundFx; + // These two have very similar purpose, but it's crucial not to modify _isLoaded later than the actual loading + // or at the begginning of the game, and _ablteToAddTimer must be modified in addTimer(). + bool _isLoaded; // Is it a loaded gamestate? + bool _ableToAddTimer; + void callVerb(VerbCode id); void loadRoom(byte num); void thinkAbout(byte object, bool type); // Hey!!! Get it and put it!!! diff --git a/engines/avalanche/avalot.cpp b/engines/avalanche/avalot.cpp index 36ce16d09c9d..5d360d1c3fa4 100644 --- a/engines/avalanche/avalot.cpp +++ b/engines/avalanche/avalot.cpp @@ -295,7 +295,6 @@ void AvalancheEngine::setup() { loadGame(loadSlot); } else { - _isLoaded = false; // Set to true in _vm->loadGame(). newGame(); _soundFx = !_soundFx; @@ -639,8 +638,7 @@ void AvalancheEngine::enterRoom(Room roomId, byte ped) { if (_geidaFollows) _whereIs[kPeopleGeida - 150] = roomId; - _roomTime = 0; - + _roomCycles = 0; if ((_lastRoom == kRoomMap) && (_lastRoomNotMap != _room)) enterNewTown(); @@ -1006,7 +1004,6 @@ void AvalancheEngine::enterRoom(Room roomId, byte ped) { } _seeScroll = false; // Now it can work again! - _isLoaded = false; } void AvalancheEngine::thinkAbout(byte object, bool type) { @@ -1461,8 +1458,8 @@ void AvalancheEngine::resetVariables() { _jumpStatus = 0; _mushroomGrowing = false; _spludwickAtHome = false; - _lastRoom = 0; - _lastRoomNotMap = 0; + _lastRoom = kRoomDummy; + _lastRoomNotMap = kRoomDummy; _crapulusWillTell = false; _enterCatacombsFromLustiesRoom = false; _teetotal = false; @@ -1482,6 +1479,7 @@ void AvalancheEngine::resetVariables() { _takenMushroom = false; _givenPenToAyles = false; _askedDogfoodAboutNim = false; + _startTime = getTimeInSeconds(); _parser->resetVariables(); _animation->resetVariables(); @@ -1532,6 +1530,9 @@ void AvalancheEngine::newGame() { _doingSpriteRun = false; _avvyInBed = true; + _ableToAddTimer = true; // Set to false in _vm->loadGame(). + _isLoaded = false; + enterRoom(kRoomYours, 1); avvy->_visible = false; drawScore(); diff --git a/engines/avalanche/background.cpp b/engines/avalanche/background.cpp index 4d71550213df..523b7a6826db 100644 --- a/engines/avalanche/background.cpp +++ b/engines/avalanche/background.cpp @@ -53,23 +53,23 @@ void Background::update() { switch (_vm->_room) { case kRoomOutsideArgentPub: - if ((_vm->_roomTime % 12) == 0) - draw(-1, -1, (_vm->_roomTime / 12) % 4); + if ((_vm->_roomCycles % 12) == 0) + draw(-1, -1, (_vm->_roomCycles / 12) % 4); break; case kRoomBrummieRoad: - if ((_vm->_roomTime % 2) == 0) - draw(-1, -1, (_vm->_roomTime / 2) % 4); + if ((_vm->_roomCycles % 2) == 0) + draw(-1, -1, (_vm->_roomCycles / 2) % 4); break; case kRoomBridge: - if ((_vm->_roomTime % 2) == 0) - draw(-1, -1, 3 + (_vm->_roomTime / 2) % 4); + if ((_vm->_roomCycles % 2) == 0) + draw(-1, -1, 3 + (_vm->_roomCycles / 2) % 4); break; case kRoomYours: - if ((!_vm->_avvyIsAwake) && ((_vm->_roomTime % 4) == 0)) - draw(-1, -1, (_vm->_roomTime / 12) % 2); + if ((!_vm->_avvyIsAwake) && ((_vm->_roomCycles % 4) == 0)) + draw(-1, -1, (_vm->_roomCycles / 12) % 2); break; case kRoomArgentPub: - if (((_vm->_roomTime % 7) == 1) && (_vm->_malagauche != 177)) { + if (((_vm->_roomCycles % 7) == 1) && (_vm->_malagauche != 177)) { // Malagauche cycle. _vm->_malagauche++; switch (_vm->_malagauche) { @@ -93,7 +93,7 @@ void Background::update() { } } - switch (_vm->_roomTime % 200) { + switch (_vm->_roomCycles % 200) { case 179: case 197: draw(-1, -1, 4); // Dogfood's drinking cycle. @@ -109,7 +109,7 @@ void Background::update() { _vm->_npcFacing = 177; // Impossible value for this. break; default: - if (_vm->_roomTime % 200 <= 178) { // Normally. + if (_vm->_roomCycles % 200 <= 178) { // Normally. byte direction = 1; uint16 angle = _vm->bearing(1); if (((angle >= 1) && (angle <= 90)) || ((angle >= 358) && (angle <= 360))) @@ -127,8 +127,8 @@ void Background::update() { } break; case kRoomWestHall: - if ((_vm->_roomTime % 3) == 0) { - switch ((_vm->_roomTime / 3) % 6) { + if ((_vm->_roomCycles % 3) == 0) { + switch ((_vm->_roomCycles / 3) % 6) { case 4: draw(-1, -1, 0); break; @@ -148,7 +148,7 @@ void Background::update() { if (!(_vm->_lustieIsAsleep)) { byte direction = 0; uint16 angle = _vm->bearing(1); - if ((_vm->_roomTime % 45) > 42) + if ((_vm->_roomCycles % 45) > 42) direction = 4; // du Lustie blinks. // Bearing of Avvy from du Lustie. else if ((angle <= 45) || ((angle >= 315) && (angle <= 360))) @@ -165,8 +165,8 @@ void Background::update() { } break; case kRoomAylesOffice: - if ((!_vm->_aylesIsAwake) && (_vm->_roomTime % 14 == 0)) { - switch ((_vm->_roomTime / 14) % 2) { + if ((!_vm->_aylesIsAwake) && (_vm->_roomCycles % 14 == 0)) { + switch ((_vm->_roomCycles / 14) % 2) { case 0: draw(-1, -1, 0); // Frame 2: EGA. break; @@ -178,7 +178,7 @@ void Background::update() { break; case kRoomRobins: if (_vm->_tiedUp) { - switch (_vm->_roomTime % 54) { + switch (_vm->_roomCycles % 54) { case 20: draw(-1, -1, 3); // Frame 4: Avalot blinks. break; @@ -199,7 +199,7 @@ void Background::update() { else if ((angle >= 181) && (angle <= 314)) direction = 8; // Right. - if ((_vm->_roomTime % 60) > 57) + if ((_vm->_roomCycles % 60) > 57) direction--; // Blinks. if (direction != _vm->_npcFacing) { // Port. @@ -207,7 +207,7 @@ void Background::update() { _vm->_npcFacing = direction; } - switch (_vm->_roomTime % 50) { + switch (_vm->_roomCycles % 50) { case 45 : draw(-1, -1, 8); // Spurge blinks. break; @@ -218,8 +218,8 @@ void Background::update() { break; } case kRoomDucks: { - if ((_vm->_roomTime % 3) == 0) // The fire flickers. - draw(-1, -1, (_vm->_roomTime / 3) % 3); + if ((_vm->_roomCycles % 3) == 0) // The fire flickers. + draw(-1, -1, (_vm->_roomCycles / 3) % 3); // Bearing of Avvy from Duck. byte direction = 0; @@ -231,7 +231,7 @@ void Background::update() { else if ((angle >= 181) && (angle <= 314)) direction = 8; // Right. - if ((_vm->_roomTime % 45) > 42) + if ((_vm->_roomCycles % 45) > 42) direction++; // Duck blinks. if (direction != _vm->_npcFacing) { // Duck. @@ -246,7 +246,7 @@ void Background::update() { if ((_vm->_bellsAreRinging) && (_vm->getFlag('B'))) { // They're ringing the bells. - switch (_vm->_roomTime % 4) { + switch (_vm->_roomCycles % 4) { case 1: if (_nextBell < 5) _nextBell = 12; diff --git a/engines/avalanche/parser.cpp b/engines/avalanche/parser.cpp index 9b6b841c8adb..6090dc967a9f 100644 --- a/engines/avalanche/parser.cpp +++ b/engines/avalanche/parser.cpp @@ -603,8 +603,12 @@ Common::String Parser::rank() { Common::String Parser::totalTime() { uint16 h, m, s; - h = (uint16)(_vm->_totalTime / 65535); - s = (uint16)(_vm->_totalTime % 65535); + uint32 curTime = _vm->getTimeInSeconds() - _vm->_startTime; + if (_vm->_isLoaded) + curTime += _vm->_totalTime; + + h = (uint16)(curTime / 3600); + s = (uint16)(curTime % 3600); m = s / 60; s = s % 60; diff --git a/engines/avalanche/timer.cpp b/engines/avalanche/timer.cpp index 4e90c7fe4848..8a4ee7ed227c 100644 --- a/engines/avalanche/timer.cpp +++ b/engines/avalanche/timer.cpp @@ -48,7 +48,7 @@ Timer::Timer(AvalancheEngine *vm) { * @remarks Originally called 'set_up_timer' */ void Timer::addTimer(int32 duration, byte action, byte reason) { - if ((_vm->_isLoaded == false) || (_timerLost == true)) { + if ((_vm->_ableToAddTimer == false) || (_timerLost == true)) { byte i = 0; while ((i < 7) && (_times[i]._timeLeft != 0)) i++; @@ -61,7 +61,7 @@ void Timer::addTimer(int32 duration, byte action, byte reason) { _times[i]._action = action; _times[i]._reason = reason; } else { - _vm->_isLoaded = false; + _vm->_ableToAddTimer = false; return; } } @@ -208,8 +208,8 @@ void Timer::updateTimer() { } } } - _vm->_roomTime++; // Cycles since you've been in this room. - _vm->_totalTime++; // Total amount of time for this game. + + _vm->_roomCycles++; // Cycles since you've been in this room. } void Timer::loseTimer(byte which) { diff --git a/engines/drascula/drascula.cpp b/engines/drascula/drascula.cpp index 159ceb9bf0c4..163f0077fc97 100644 --- a/engines/drascula/drascula.cpp +++ b/engines/drascula/drascula.cpp @@ -176,6 +176,20 @@ DrasculaEngine::DrasculaEngine(OSystem *syst, const DrasculaGameDescription *gam _rightMouseButton = 0; *textName = 0; + crosshairCursor = 0; + mouseCursor = 0; + bgSurface = 0; + backSurface = 0; + cursorSurface = 0; + drawSurface3 = 0; + drawSurface2 = 0; + tableSurface = 0; + extraSurface = 0; + screenSurface = 0; + frontSurface = 0; + previousMusic = 0; + roomMusic = 0; + _rnd = new Common::RandomSource("drascula"); _console = 0; diff --git a/engines/dreamweb/dreamweb.cpp b/engines/dreamweb/dreamweb.cpp index a91e41ea6791..7323dfc4a87f 100644 --- a/engines/dreamweb/dreamweb.cpp +++ b/engines/dreamweb/dreamweb.cpp @@ -241,6 +241,33 @@ DreamWebEngine::DreamWebEngine(OSystem *syst, const DreamWebGameDescription *gam for (uint i = 0; i < kNumExObjects; i++) memset(&_exData[i], 0, sizeof(DynObject)); + + memset(&_vars, 0, sizeof(GameVars)); + + for (uint i = 0; i < 96; i++) + memset(&_backdropFlags[i], 0, sizeof(BackdropMapFlag)); + + for (uint i = 0; i < kNumReelRoutines+1; i++) + memset(&_reelRoutines[i], 0, sizeof(ReelRoutine)); + + _personData = 0; + + for (uint i = 0; i < 16; i++) + memset(&_openInvList[i], 0, sizeof(ObjectRef)); + + for (uint i = 0; i < 30; i++) + memset(&_ryanInvList[i], 0, sizeof(ObjectRef)); + + for (uint i = 0; i < 11*10; i++) + memset(&_mapFlags[i], 0, sizeof(MapFlag)); + + for (uint i = 0; i < kNumChanges; i++) + memset(&_listOfChanges[i], 0, sizeof(Change)); + + _currentCharset = 0; + + for (uint i = 0; i < 36; i++) + memset(&_pathData[i], 0, sizeof(RoomPaths)); } DreamWebEngine::~DreamWebEngine() { diff --git a/engines/fullpipe/constants.h b/engines/fullpipe/constants.h index c0034e444d7d..9d8f503857ae 100644 --- a/engines/fullpipe/constants.h +++ b/engines/fullpipe/constants.h @@ -29,6 +29,12 @@ namespace Fullpipe { #define ANI_DOMINO_3 2732 #define ANI_EGGEATER 334 #define ANI_IN1MAN 5110 +#define ANI_INV_COIN 875 +#define ANI_INV_EGGAPL 1564 +#define ANI_INV_EGGBOOT 1570 +#define ANI_INV_EGGCOIN 1567 +#define ANI_INV_EGGDOM 1561 +#define ANI_INV_EGGGLS 1573 #define ANI_INV_MAP 5321 #define ANI_LIFTBUTTON 2751 #define ANI_MAN 322 @@ -41,12 +47,24 @@ namespace Fullpipe { #define MSG_INTR_GETUPMAN 5135 #define MSG_INTR_SWITCHTO1 5145 #define MSG_INTR_SWITCHTO2 5134 +#define MSG_LIFT_CLICKBUTTON 2780 +#define MSG_LIFT_CLOSEDOOR 5194 +#define MSG_LIFT_EXITLIFT 5187 +#define MSG_LIFT_GO 1065 +#define MSG_LIFT_STARTEXITQUEUE 5186 #define MSG_MANSHADOWSOFF 5196 #define MSG_MANSHADOWSON 5197 #define MSG_RESTARTGAME 4767 #define MSG_SC1_SHOWOSK 1019 #define MSG_SC1_SHOWOSK2 468 #define MSG_SC1_UTRUBACLICK 1100 +#define MSG_SC3_HIDEDOMINO 3177 +#define MSG_SC3_ONTAKECOIN 5338 +#define MSG_SC3_RELEASEEGG 2681 +#define MSG_SC3_TAKEEGG 1583 +#define MSG_SC3_TESTFAT 1582 +#define MSG_SC3_UTRUBACLICK 1103 +#define MV_EGTR_FATASK 5332 #define MV_IN1MAN_SLEEP 5111 #define MV_MAN_GOLADDER 451 #define MV_MAN_GOLADDER2 2844 @@ -101,6 +119,7 @@ namespace Fullpipe { #define PIC_SC1_OSK 1018 #define PIC_SC1_OSK2 2932 #define PIC_SC3_DOMIN 5182 +#define PIC_SC3_LADDER 1102 #define PIC_SCD_SEL 734 #define QU_EGTR_MD2_SHOW 4698 #define QU_EGTR_MD1_SHOW 4697 diff --git a/engines/fullpipe/fullpipe.h b/engines/fullpipe/fullpipe.h index 7f1c9baa9bca..2cd0f87d3243 100644 --- a/engines/fullpipe/fullpipe.h +++ b/engines/fullpipe/fullpipe.h @@ -232,6 +232,13 @@ class FullpipeEngine : public ::Engine { int lift_getButtonIdP(int objid); void lift_sub5(Scene *sc, int qu1, int qu2); + void lift_exitSeq(ExCommand *ex); + void lift_closedoorSeq(); + void lift_animation3(); + void lift_goAnimation(); + void lift_sub1(StaticANIObject *ani); + void lift_startExitQueue(); + void lift_sub05(ExCommand *ex); public: diff --git a/engines/fullpipe/lift.cpp b/engines/fullpipe/lift.cpp index 8fa6cf744dd2..0e38c4f94854 100644 --- a/engines/fullpipe/lift.cpp +++ b/engines/fullpipe/lift.cpp @@ -68,4 +68,32 @@ void FullpipeEngine::lift_sub5(Scene *sc, int qu1, int qu2) { warning("STUB: FullpipeEngine::lift_sub5()"); } +void FullpipeEngine::lift_exitSeq(ExCommand *ex) { + warning("STUB: FullpipeEngine::lift_exitSeq()"); +} + +void FullpipeEngine::lift_closedoorSeq() { + warning("STUB: FullpipeEngine::lift_closedoorSeq()"); +} + +void FullpipeEngine::lift_animation3() { + warning("STUB: FullpipeEngine::lift_animation3()"); +} + +void FullpipeEngine::lift_goAnimation() { + warning("STUB: FullpipeEngine::lift_goAnimation()"); +} + +void FullpipeEngine::lift_sub1(StaticANIObject *ani) { + warning("STUB: FullpipeEngine::lift_sub1()"); +} + +void FullpipeEngine::lift_startExitQueue() { + warning("STUB: FullpipeEngine::lift_startExitQueue()"); +} + +void FullpipeEngine::lift_sub05(ExCommand *ex) { + warning("STUB: FullpipeEngine::lift_sub05()"); +} + } // End of namespace Fullpipe diff --git a/engines/fullpipe/modal.cpp b/engines/fullpipe/modal.cpp index 44e7b46184c9..f766be3eac9d 100644 --- a/engines/fullpipe/modal.cpp +++ b/engines/fullpipe/modal.cpp @@ -48,6 +48,11 @@ ModalIntro::ModalIntro() { _sfxVolume = g_fullpipe->_sfxVolume; } +ModalIntro::~ModalIntro() { + g_fullpipe->stopAllSounds(); + g_fullpipe->_sfxVolume = _sfxVolume; +} + bool ModalIntro::handleMessage(ExCommand *message) { if (message->_messageKind != 17) return false; diff --git a/engines/fullpipe/modal.h b/engines/fullpipe/modal.h index f3f571e2a93e..b57d1fbd0645 100644 --- a/engines/fullpipe/modal.h +++ b/engines/fullpipe/modal.h @@ -52,6 +52,7 @@ class ModalIntro : public BaseModalObject { public: ModalIntro(); + virtual ~ModalIntro(); virtual bool pollEvent() { return true; } virtual bool handleMessage(ExCommand *message); diff --git a/engines/fullpipe/motion.cpp b/engines/fullpipe/motion.cpp index 8fecd8304ee9..2c61330ea1bb 100644 --- a/engines/fullpipe/motion.cpp +++ b/engines/fullpipe/motion.cpp @@ -658,6 +658,146 @@ void MovGraph2::buildMovInfo1SubItems(MovInfo1 *movinfo, Common::Arraypt1.x; + curY = movInfo->pt1.y; + curDistance = movInfo->distance1; + + mq = new MessageQueue(g_fullpipe->globalMessageQueueList->compact()); + + for (int i = 0; i < movInfo->_itemsCount - 1; i++) { + v9 = (MovInfo1Sub *)movInfo->items; + v10 = v9[i + 1].subIndex; + + if (v10 != 10) { + if (v40 >= movInfo->_itemsCount - 2 || v9[i + 2].subIndex != 10) { + v16 = v9[i].subIndex; + v17 = (char *)this->items[1] + 16 * (v10 + 8); + subidx = 93 * movInfo->field_0; + movinfo.flags = 0; + v14 = 8 * subidx; + v15 = (MovGraph2Item *)(&v17[184 * v16] + v14); + } else { + v11 = v9[i].subIndex; + v12 = (char *)this->items[1] + 16 * (v10 + 4); + v13 = 93 * movInfo->field_0; + movinfo.flags = 2; + v14 = 8 * v13; + v15 = (MovGraph2Item *)(&v12[184 * v11] + v14); + } + if (v40 < movInfo->_itemsCount - 2 + || (v19 = v9[i + 1].x, v20 = (char *)&v9[i].x, v47 = (int *)v20, v21 = *(_DWORD *)v20, v21 == v19) + && v9[i].y == v9[i + 1].y + || v21 == -1 + || v9[i].y == -1 + || v19 == -1 + || v9[i + 1].y == -1) { + + ExCommand *ex = new ExCommand(_items[1][movInfo->field_0].objectId, 1, v15->objectId, 0, 0, 0, 1, 0, 0, 0); + + ex->_excFlags |= 2u; + ex->_keyCode = _items[1][movInfo->field_0].obj->GameObject.okeyCode; + ex->_field_24 = 1; + ex->_field_14 = -1; + mq->_exCommands.push_back(ex); + + curX += v15->subItems[0].staticsId2; + curY += v15->subItems[0].staticsId1; + } else { + memset(mgminfo, 0, sizeof(mgminfo)); + + HIWORD(v22) = 0a; + v23 = v15->obj; + mgminfo.ani = *(StaticANIObject **)((char *)&this->items[1]->obj + v14); + LOWORD(v22) = *(_WORD *)(v23->callback1 + 132); + mgminfo.staticsId2 = v22; + mgminfo.x1 = v9[i + 1].x; + mgminfo.y1 = v9[i + 1].y; + mgminfo.field_1C = v9[i + 1].field_C; + mgminfo.staticsId1 = *(_WORD *)(v23->initialCounter + 132); + mgminfo.x2 = *v47; + v24 = v15->objectId; + mgminfo.y2 = v9[i].y; + mgminfo.field_10 = 1; + mgminfo.flags = 127; + mgminfo.movementId = v24; + + v25 = (MessageQueue *)MGM_sub_445330((MGM *)&this->movGraph.mgm, &mgminfo); + MessageQueue_transferExCommands(mq, v25); + + if (v25) + (*(void (__thiscall **)(MessageQueue *, signed int))(v25->CObject.vmt + 4))(v25, 1); + + v26 = (MovInfo1Sub *)movInfo->items; + curX = v26[i + 1].x; + curY = v26[i + 1].y; + } + } else { + movinfo.item1Index = v9[i].subIndex; + movinfo.subIndex = movinfo.item1Index; + movinfo.pt1.y = curY; + movinfo.pt1.x = curX; + movinfo.distance1 = curDistance; + v29 = v9[i + 2].x; + movinfo.pt2.x = v9[i + 2].x; + movinfo.pt2.y = v9[i + 2].y; + movinfo.distance2 = v9[i + 2].field_C; + + if (v40 >= movInfo->_itemsCount - 4 + || (v30 = v9[i + 2].subIndex, v30 == 10) + || (v31 = v9[i + 3].subIndex, v31 == 10) + || v30 == v31 + || v9[i + 4].subIndex != 10) { + if (v40 >= movInfo->itemsCount - 3 + || (v33 = v9[i + 2].subIndex, v33 == 10) + || (v34 = v9[i + 3].subIndex, v34 == 10) + || v33 == v34) { + movinfo.flags = movinfo.flags & 2 | movInfo->flags & 1; + } else { + v35 = (MovInfo1 *)((char *)&this->items[1][movInfo->field_0] + 184 * v33 + 16 * (v34 + 8)); + movinfo.pt2.x = v29 - v35->pt1.y; + movinfo.pt2.y -= v35->pt2.x; + movinfo.flags = movinfo.flags & 2 | movInfo->flags & 1; + } + } else { + v32 = (MovInfo1 *)((char *)&this->items[1][movInfo->field_0] + 184 * v30 + 16 * (v31 + 4)); + + if (movinfo.item1Index && movinfo.item1Index != 1) { + movinfo.pt2.y -= v32->pt2.x; + movinfo.flags = movinfo.flags & 2 | 1; + } else { + movinfo.pt2.x = v29 - v32->pt1.y; + movinfo.flags = movinfo.flags & 2 | 1; + } + } + i++; + + v36 = MovGraph2_sub_454CD0(this, &movinfo); + + if (!v36) { + delete mq; + return 0; + } + MessageQueue_transferExCommands(mq, v36); + + delete v36; + + curX = movinfo.pt2.x; + curY = movinfo.pt2.y; + curDistance = movinfo.distance2; + } + } + + movInfo->pt2.x = movinfo.pt2.x; + movInfo->pt2.y = movinfo.pt2.y; + + return mq; + +#endif warning("STUB: MovGraph2::buildMovInfo1MessageQueue()"); return 0; diff --git a/engines/fullpipe/scenes.cpp b/engines/fullpipe/scenes.cpp index fdc28e8092e7..c266a819ede1 100644 --- a/engines/fullpipe/scenes.cpp +++ b/engines/fullpipe/scenes.cpp @@ -1600,8 +1600,213 @@ int scene03_updateCursor() { return g_fullpipe->_cursorId; } +void sceneHandler03_eaterFat() { + g_vars->scene03_eggeater->_flags &= 0xFF7F; + + g_vars->scene03_eggeater->startAnim(MV_EGTR_FATASK, 0, -1); +} + +void sceneHandler03_swallowEgg(int item) { + if (!g_vars->swallowedEgg1->_value.intValue) { + g_vars->swallowedEgg1->_value.intValue = item; + } else if (!g_vars->swallowedEgg2->_value.intValue) { + g_vars->swallowedEgg2->_value.intValue = item; + } else if (!g_vars->swallowedEgg3->_value.intValue) { + g_vars->swallowedEgg3->_value.intValue = item; + + g_fullpipe->setObjectState(sO_EggGulperGaveCoin, g_fullpipe->getObjectEnumState(sO_EggGulperGaveCoin, sO_Yes)); + + scene03_setEaterState(); + } +} + +void sceneHandler03_giveItem(ExCommand *ex) { + if (ex->_parentId == ANI_INV_EGGAPL || ex->_parentId == ANI_INV_EGGDOM || + ex->_parentId == ANI_INV_EGGCOIN || ex->_parentId == ANI_INV_EGGBOOT || + ex->_parentId == ANI_INV_EGGGLS) + sceneHandler03_swallowEgg(ex->_parentId); +} + +int sceneHandler03_swallowedEgg1State() { + return g_vars->swallowedEgg1->_value.intValue; +} + +void sceneHandler03_giveCoin(ExCommand *ex) { + MessageQueue *mq = g_fullpipe->_globalMessageQueueList->getMessageQueueById(ex->_parId); + + if (mq && mq->getCount() > 0) { + ExCommand *ex0 = mq->getExCommandByIndex(0); + ExCommand *ex1 = mq->getExCommandByIndex(1); + + if (sceneHandler03_swallowedEgg1State()) { + ex0->_messageKind = 1; + ex1->_messageKind = 1; + + getGameLoaderInventory()->removeItem(ANI_INV_COIN, 1); + } else { + ex0->_messageKind = 0; + ex0->_excFlags |= 1; + + ex1->_messageKind = 0; + ex1->_excFlags |= 1; + + g_vars->scene03_eggeater->_flags &= 0xFF7Fu; + } + } +} + +void sceneHandler03_goLadder() { + handleObjectInteraction(g_fullpipe->_aniMan, g_fullpipe->_currentScene->getPictureObjectById(PIC_SC3_LADDER, 0), 0); +} + +void sceneHandler03_pushEggStack() { + g_vars->swallowedEgg1->_value.intValue = g_vars->swallowedEgg2->_value.intValue; + g_vars->swallowedEgg2->_value.intValue = g_vars->swallowedEgg3->_value.intValue; + g_vars->swallowedEgg3->_value.intValue = 0; + + if (g_vars->swallowedEgg2->_value.intValue == ANI_INV_EGGBOOT + && g_vars->swallowedEgg1->_value.intValue == ANI_INV_EGGAPL) { + g_vars->swallowedEgg1->_value.intValue = ANI_INV_EGGBOOT; + g_vars->swallowedEgg2->_value.intValue = ANI_INV_EGGAPL; + } +} + +void sceneHandler03_releaseEgg() { + g_vars->scene03_eggeater->_flags &= 0xFF7F; + + g_vars->scene03_eggeater->show1(-1, -1, -1, 0); +} + +void sceneHandler03_takeEgg(ExCommand *ex) { + MessageQueue *mq = g_fullpipe->_globalMessageQueueList->getMessageQueueById(ex->_parId); + + if (mq && mq->getCount() > 0) { + ExCommand *ex0 = mq->getExCommandByIndex(0); + ExCommand *ex1 = mq->getExCommandByIndex(1); + + int egg1 = sceneHandler03_swallowedEgg1State(); + + if (egg1 && ex0) { + ex0->_parentId = egg1; + sceneHandler03_pushEggStack(); + } + + if ( g_vars->swallowedEgg1->_value.intValue == ANI_INV_EGGAPL + && !g_vars->swallowedEgg2->_value.intValue + && !g_vars->swallowedEgg3->_value.intValue + && ex1) { + + if (ex1->_objtype == kObjTypeObjstateCommand) { + ObjstateCommand *com = (ObjstateCommand *)ex1; + + com->_value = g_fullpipe->getObjectEnumState(sO_EggGulper, sO_WantsNothing); + } + } + } +} + int sceneHandler03(ExCommand *ex) { - warning("STUB: sceneHandler03()"); + if (ex->_messageKind != 17) { + if (ex->_messageKind == 57) + sceneHandler03_giveItem(ex); + return 0; + } + + switch (ex->_messageNum) { + case MSG_LIFT_EXITLIFT: + g_fullpipe->lift_exitSeq(ex); + break; + + case MSG_LIFT_CLOSEDOOR: + g_fullpipe->lift_closedoorSeq(); + break; + + case MSG_SC3_ONTAKECOIN: + sceneHandler03_eaterFat(); + break; + + case MSG_LIFT_STARTEXITQUEUE: + g_fullpipe->lift_startExitQueue(); + break; + + case MSG_SC3_RELEASEEGG: + sceneHandler03_releaseEgg(); + break; + + case MSG_LIFT_CLICKBUTTON: + g_fullpipe->lift_animation3(); + break; + + case MSG_SC3_HIDEDOMINO: + g_vars->scene03_domino->_flags &= 0xFFFB; + break; + + case MSG_SC3_TAKEEGG: + sceneHandler03_takeEgg(ex); + break; + + case MSG_LIFT_GO: + g_fullpipe->lift_goAnimation(); + break; + + case MSG_SC3_UTRUBACLICK: + sceneHandler03_goLadder(); + break; + + case MSG_SC3_TESTFAT: + sceneHandler03_giveCoin(ex); + break; + + case 64: + g_fullpipe->lift_sub05(ex); + break; + + case 93: + { + StaticANIObject *ani = g_fullpipe->_currentScene->getStaticANIObjectAtPos(ex->_sceneClickX, ex->_sceneClickY); + if (ani && ani->_id == ANI_LIFTBUTTON) { + g_fullpipe->lift_sub1(ani); + ex->_messageKind = 0; + + return 0; + } + + if (g_fullpipe->_currentScene->getPictureObjectIdAtPos(ex->_sceneClickX, ex->_sceneClickY) == PIC_SC3_DOMIN) { + if (g_vars->scene03_domino) + if (g_vars->scene03_domino->_flags & 4) + if (g_fullpipe->_aniMan->isIdle()) + if (!(g_fullpipe->_aniMan->_flags & 0x100) && g_fullpipe->_msgObjectId2 != g_vars->scene03_domino->_id) { + handleObjectInteraction(g_fullpipe->_aniMan, g_vars->scene03_domino, ex->_keyCode); + ex->_messageKind = 0; + + return 0; + } + } + + break; + } + + case 97: + { + int res = 0; + + if (g_fullpipe->_aniMan2) { + if (g_fullpipe->_aniMan2->_ox < g_fullpipe->_sceneRect.left + 200) + g_fullpipe->_currentScene->_x = g_fullpipe->_aniMan2->_ox - g_fullpipe->_sceneRect.left - 300; + + if (g_fullpipe->_aniMan2->_ox > g_fullpipe->_sceneRect.right - 200) + g_fullpipe->_currentScene->_x = g_fullpipe->_aniMan2->_ox - g_fullpipe->_sceneRect.right + 300; + + res = 1; + } + + g_fullpipe->_behaviorManager->updateBehaviors(); + + g_fullpipe->startSceneTrack(); + + return res; + } + } return 0; } diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp index 0599125269d7..e281b9bbfbc1 100644 --- a/engines/fullpipe/statics.cpp +++ b/engines/fullpipe/statics.cpp @@ -1201,8 +1201,86 @@ Movement::Movement(Movement *src, StaticANIObject *ani) { updateCurrDynamicPhase(); } -Movement::Movement(Movement *src, int *flag1, int flag2, StaticANIObject *ani) { - warning("STUB: Movement(src, %p, %d, ani)", (void *)flag1, flag2); +Movement::Movement(Movement *src, int *oldIdxs, int newSize, StaticANIObject *ani) : GameObject(src) { + _lastFrameSpecialFlag = 0; + _updateFlag1 = 1; + _staticsObj1 = 0; + _staticsObj2 = 0; + _mx = 0; + _my = 0; + _m2x = 0; + _m2y = 0; + + _field_78 = 0; + _framePosOffsets = 0; + _field_84 = 0; + _currDynamicPhase = 0; + _field_8C = 0; + _currDynamicPhaseIndex = 0; + _field_94 = 0; + + _field_50 = src->_field_50; + _flipFlag = src->_flipFlag; + _currMovement = 0; + _mx = src->_mx; + _my = src->_my; + _m2x = src->_m2x; + _m2y = src->_m2y; + + if (newSize != -1) { + if (newSize >= src->_dynamicPhases.size() + 1) + newSize = src->_dynamicPhases.size() + 1; + } else { + newSize = src->_dynamicPhases.size(); + } + + _framePosOffsets = (Common::Point **)calloc(newSize, sizeof(Common::Point *)); + + for (int i = 0; i < newSize; i++) + _framePosOffsets[i] = new Common::Point(); + + if (oldIdxs) { + for (int i = 0; i < newSize - 1; i++, oldIdxs++) { + if (oldIdxs[i] == -1) { + _dynamicPhases.push_back(src->_staticsObj1); + + _framePosOffsets[i]->x = 0; + _framePosOffsets[i]->y = 0; + } else { + src->setDynamicPhaseIndex(oldIdxs[i]); + + _dynamicPhases.push_back(src->_currDynamicPhase); + + _framePosOffsets[i]->x = src->_framePosOffsets[oldIdxs[i]]->x; + _framePosOffsets[i]->y = src->_framePosOffsets[oldIdxs[i]]->y; + } + } + _staticsObj1 = (Statics *)_dynamicPhases.front(); + _staticsObj2 = (Statics *)_dynamicPhases.back(); + } else { + for (int i = 0; i < newSize; i++) { + src->setDynamicPhaseIndex(i); + + if (i < newSize - 1) + _dynamicPhases.push_back(new DynamicPhase(src->_currDynamicPhase, 0)); + + _framePosOffsets[i]->x = src->_framePosOffsets[i]->x; + _framePosOffsets[i]->y = src->_framePosOffsets[i]->y; + } + + _staticsObj1 = ani->getStaticsById(src->_staticsObj1->_staticsId); + _staticsObj2 = ani->getStaticsById(src->_staticsObj2->_staticsId); + + _dynamicPhases.push_back(_staticsObj2); + + this->_updateFlag1 = src->_updateFlag1; + } + + updateCurrDynamicPhase(); + removeFirstPhase(); + + _counterMax = src->_counterMax; + _counter = src->_counter; } bool Movement::load(MfcArchive &file) { diff --git a/engines/hopkins/computer.cpp b/engines/hopkins/computer.cpp index c09d748b97a3..f9e3ecafcd04 100644 --- a/engines/hopkins/computer.cpp +++ b/engines/hopkins/computer.cpp @@ -349,15 +349,21 @@ void ComputerManager::loadMenu() { char *ptr; if (_vm->_fileIO->fileExists("COMPUTAN.TXT")) { ptr = (char *)_vm->_fileIO->loadFile("COMPUTAN.TXT"); - } else if (_vm->_globals->_language == LANG_FR) { - ptr = (char *)_vm->_globals->allocMemory(sizeof(_frenchText)); - strcpy(ptr, _frenchText); - } else if (_vm->_globals->_language == LANG_SP) { - ptr = (char *)_vm->_globals->allocMemory(sizeof(_spanishText)); - strcpy(ptr, _spanishText); } else { - ptr = (char *)_vm->_globals->allocMemory(sizeof(_englishText)); - strcpy(ptr, _englishText); + switch (_vm->_globals->_language) { + case LANG_FR: + ptr = (char *)_vm->_globals->allocMemory(sizeof(_frenchText)); + strcpy(ptr, _frenchText); + break; + case LANG_SP: + ptr = (char *)_vm->_globals->allocMemory(sizeof(_spanishText)); + strcpy(ptr, _spanishText); + break; + default: + ptr = (char *)_vm->_globals->allocMemory(sizeof(_englishText)); + strcpy(ptr, _englishText); + break; + } } char *tmpPtr = ptr; @@ -479,12 +485,17 @@ void ComputerManager::readText(int idx) { _vm->_events->_escKeyFl = false; Common::String filename; - if (_vm->_globals->_language == LANG_EN) + switch (_vm->_globals->_language) { + case LANG_EN: filename = "THOPKAN.TXT"; - else if (_vm->_globals->_language == LANG_FR) + break; + case LANG_FR: filename = "THOPK.TXT"; - else if (_vm->_globals->_language == LANG_SP) + break; + case LANG_SP: filename = "THOPKES.TXT"; + break; + } byte *ptr = _vm->_fileIO->loadFile(filename); uint16 fileSize = _vm->_fileIO->fileSize(filename); diff --git a/engines/hopkins/dialogs.cpp b/engines/hopkins/dialogs.cpp index 3b8fedf0eeda..8c944167ae0e 100644 --- a/engines/hopkins/dialogs.cpp +++ b/engines/hopkins/dialogs.cpp @@ -84,12 +84,17 @@ void DialogsManager::showOptionsDialog() { if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS) filename = "OPTION.SPR"; else { - if (_vm->_globals->_language == LANG_FR) + switch (_vm->_globals->_language) { + case LANG_FR: filename = "OPTIFR.SPR"; - else if (_vm->_globals->_language == LANG_EN) + break; + case LANG_EN: filename = "OPTIAN.SPR"; - else if (_vm->_globals->_language == LANG_SP) + break; + case LANG_SP: filename = "OPTIES.SPR"; + break; + } } _vm->_globals->_optionDialogSpr = _vm->_fileIO->loadFile(filename); diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp index a9a0a81f08be..cd66a84b73a9 100644 --- a/engines/hopkins/globals.cpp +++ b/engines/hopkins/globals.cpp @@ -148,7 +148,7 @@ void Globals::setConfig() { _language = LANG_SP; break; default: - warning("Unknown language in internal language mapping"); + error("Hopkins - SetConfig(): Unknown language in internal language mapping"); break; } // End of CHECKME diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp index 9e317804caba..adf7580e6be2 100644 --- a/engines/hopkins/hopkins.cpp +++ b/engines/hopkins/hopkins.cpp @@ -210,12 +210,17 @@ bool HopkinsEngine::runWin95Demo() { if (getPlatform() == Common::kPlatformOS2 || getPlatform() == Common::kPlatformBeOS) _graphicsMan->loadImage("fond"); else { - if (_globals->_language == LANG_FR) + switch (_globals->_language) { + case LANG_FR: _graphicsMan->loadImage("fondfr"); - else if (_globals->_language == LANG_EN) + break; + case LANG_EN: _graphicsMan->loadImage("fondan"); - else if (_globals->_language == LANG_SP) + break; + case LANG_SP: _graphicsMan->loadImage("fondes"); + break; + } } _graphicsMan->fadeInLong(); _events->delay(500); @@ -521,12 +526,17 @@ bool HopkinsEngine::runLinuxDemo() { if (getPlatform() == Common::kPlatformOS2 || getPlatform() == Common::kPlatformBeOS) _graphicsMan->loadImage("fond"); else { - if (_globals->_language == LANG_FR) + switch (_globals->_language) { + case LANG_FR: _graphicsMan->loadImage("fondfr"); - else if (_globals->_language == LANG_EN) + break; + case LANG_EN: _graphicsMan->loadImage("fondan"); - else if (_globals->_language == LANG_SP) + break; + case LANG_SP: _graphicsMan->loadImage("fondes"); + break; + } } _graphicsMan->fadeInLong(); _events->delay(500); @@ -867,12 +877,17 @@ bool HopkinsEngine::runFull() { if (getPlatform() == Common::kPlatformOS2 || getPlatform() == Common::kPlatformBeOS) _graphicsMan->loadImage("fond"); else { - if (_globals->_language == LANG_FR) + switch (_globals->_language) { + case LANG_FR: _graphicsMan->loadImage("fondfr"); - else if (_globals->_language == LANG_EN) + break; + case LANG_EN: _graphicsMan->loadImage("fondan"); - else if (_globals->_language == LANG_SP) + break; + case LANG_SP: _graphicsMan->loadImage("fondes"); + break; + } } _graphicsMan->fadeInLong(); _events->delay(500); diff --git a/engines/hopkins/menu.cpp b/engines/hopkins/menu.cpp index 455f4ad8d48f..048d1b2ceffe 100644 --- a/engines/hopkins/menu.cpp +++ b/engines/hopkins/menu.cpp @@ -69,23 +69,37 @@ int MenuManager::menu() { if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS) _vm->_graphicsMan->loadImage("MENU"); - else if (_vm->_globals->_language == LANG_EN) - _vm->_graphicsMan->loadImage("MENUAN"); - else if (_vm->_globals->_language == LANG_FR) - _vm->_graphicsMan->loadImage("MENUFR"); - else if (_vm->_globals->_language == LANG_SP) - _vm->_graphicsMan->loadImage("MENUES"); + else { + switch (_vm->_globals->_language) { + case LANG_EN: + _vm->_graphicsMan->loadImage("MENUAN"); + break; + case LANG_FR: + _vm->_graphicsMan->loadImage("MENUFR"); + break; + case LANG_SP: + _vm->_graphicsMan->loadImage("MENUES"); + break; + } + } _vm->_graphicsMan->fadeInLong(); if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS) spriteData = _vm->_objectsMan->loadSprite("MENU.SPR"); - else if (_vm->_globals->_language == LANG_EN) - spriteData = _vm->_objectsMan->loadSprite("MENUAN.SPR"); - else if (_vm->_globals->_language == LANG_FR) - spriteData = _vm->_objectsMan->loadSprite("MENUFR.SPR"); - else if (_vm->_globals->_language == LANG_SP) - spriteData = _vm->_objectsMan->loadSprite("MENUES.SPR"); + else { + switch (_vm->_globals->_language) { + case LANG_EN: + spriteData = _vm->_objectsMan->loadSprite("MENUAN.SPR"); + break; + case LANG_FR: + spriteData = _vm->_objectsMan->loadSprite("MENUFR.SPR"); + break; + case LANG_SP: + spriteData = _vm->_objectsMan->loadSprite("MENUES.SPR"); + break; + } + } _vm->_events->mouseOn(); _vm->_events->changeMouseCursor(0); diff --git a/engines/hopkins/script.cpp b/engines/hopkins/script.cpp index 7e150624b86f..09b0641a12ef 100644 --- a/engines/hopkins/script.cpp +++ b/engines/hopkins/script.cpp @@ -148,12 +148,18 @@ int ScriptManager::handleOpcode(const byte *dataP) { _vm->_soundMan->mixVoice(635, 4, displayedTxtFl); } else { int textPosX = READ_LE_INT16(dataP + 9); - if (_vm->_globals->_language == LANG_FR && !_vm->_soundMan->_textOffFl) - _vm->_fontMan->initTextBuffers(9, mesgId, "OBJET1.TXT", 2 * textPosX, 60, 6, dataP[7], 253); - else if (_vm->_globals->_language == LANG_EN && !_vm->_soundMan->_textOffFl) - _vm->_fontMan->initTextBuffers(9, mesgId, "OBJETAN.TXT", 2 * textPosX, 60, 6, dataP[7], 253); - else if (_vm->_globals->_language == LANG_SP && !_vm->_soundMan->_textOffFl) { - _vm->_fontMan->initTextBuffers(9, mesgId, "OBJETES.TXT", 2 * textPosX, 60, 6, dataP[7], 253); + if (!_vm->_soundMan->_textOffFl) { + switch (_vm->_globals->_language) { + case LANG_FR: + _vm->_fontMan->initTextBuffers(9, mesgId, "OBJET1.TXT", 2 * textPosX, 60, 6, dataP[7], 253); + break; + case LANG_EN: + _vm->_fontMan->initTextBuffers(9, mesgId, "OBJETAN.TXT", 2 * textPosX, 60, 6, dataP[7], 253); + break; + case LANG_SP: + _vm->_fontMan->initTextBuffers(9, mesgId, "OBJETES.TXT", 2 * textPosX, 60, 6, dataP[7], 253); + break; + } } bool displayedTxtFl = false; diff --git a/engines/hopkins/sound.cpp b/engines/hopkins/sound.cpp index bf816c08a40c..92c5f5146252 100644 --- a/engines/hopkins/sound.cpp +++ b/engines/hopkins/sound.cpp @@ -520,12 +520,19 @@ bool SoundManager::mixVoice(int voiceId, int voiceMode, bool dispTxtFl) { if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS) filename = "ENG_VOI.RES"; // Win95 and Linux versions uses another set of names - else if (_vm->_globals->_language == LANG_FR) - filename = "RES_VFR.RES"; - else if (_vm->_globals->_language == LANG_EN) - filename = "RES_VAN.RES"; - else if (_vm->_globals->_language == LANG_SP) - filename = "RES_VES.RES"; + else { + switch (_vm->_globals->_language) { + case LANG_FR: + filename = "RES_VFR.RES"; + break; + case LANG_EN: + filename = "RES_VAN.RES"; + break; + case LANG_SP: + filename = "RES_VES.RES"; + break; + } + } catPos = _vm->_fileIO->_catalogPos; catLen = _vm->_fileIO->_catalogSize; @@ -535,12 +542,19 @@ bool SoundManager::mixVoice(int voiceId, int voiceMode, bool dispTxtFl) { if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS) filename = "ENG_VOI.RES"; // Win95 and Linux versions uses another set of names - else if (_vm->_globals->_language == LANG_FR) - filename = "RES_VFR.RES"; - else if (_vm->_globals->_language == LANG_EN) - filename = "RES_VAN.RES"; - else if (_vm->_globals->_language == LANG_SP) - filename = "RES_VES.RES"; + else { + switch (_vm->_globals->_language) { + case LANG_FR: + filename = "RES_VFR.RES"; + break; + case LANG_EN: + filename = "RES_VAN.RES"; + break; + case LANG_SP: + filename = "RES_VES.RES"; + break; + } + } catPos = _vm->_fileIO->_catalogPos; catLen = _vm->_fileIO->_catalogSize; @@ -550,12 +564,19 @@ bool SoundManager::mixVoice(int voiceId, int voiceMode, bool dispTxtFl) { if (_vm->getPlatform() == Common::kPlatformOS2 || _vm->getPlatform() == Common::kPlatformBeOS) filename = "ENG_VOI.RES"; // Win95 and Linux versions uses another set of names - else if (_vm->_globals->_language == LANG_FR) - filename = "RES_VFR.RES"; - else if (_vm->_globals->_language == LANG_EN) - filename = "RES_VAN.RES"; - else if (_vm->_globals->_language == LANG_SP) - filename = "RES_VES.RES"; + else { + switch (_vm->_globals->_language) { + case LANG_FR: + filename = "RES_VFR.RES"; + break; + case LANG_EN: + filename = "RES_VAN.RES"; + break; + case LANG_SP: + filename = "RES_VES.RES"; + break; + } + } catPos = _vm->_fileIO->_catalogPos; catLen = _vm->_fileIO->_catalogSize; diff --git a/engines/hopkins/talk.cpp b/engines/hopkins/talk.cpp index 736ec9865cac..1bb6701fc8da 100644 --- a/engines/hopkins/talk.cpp +++ b/engines/hopkins/talk.cpp @@ -68,12 +68,17 @@ void TalkManager::startAnimatedCharacterDialogue(const Common::String &filename) getStringFromBuffer(40, spriteFilename, (const char *)_characterBuffer); getStringFromBuffer(0, _questionsFilename, (const char *)_characterBuffer); getStringFromBuffer(20, _answersFilename, (const char *)_characterBuffer); - if (_vm->_globals->_language == LANG_FR) { + + switch (_vm->_globals->_language) { + case LANG_FR: _answersFilename = _questionsFilename = "RUE.TXT"; - } else if (_vm->_globals->_language == LANG_EN) { + break; + case LANG_EN: _answersFilename = _questionsFilename = "RUEAN.TXT"; - } else if (_vm->_globals->_language == LANG_SP) { + break; + case LANG_SP: _answersFilename = _questionsFilename = "RUEES.TXT"; + break; } _dialogueMesgId1 = READ_LE_INT16((uint16 *)_characterBuffer + 40); _paletteBufferIdx = 20 * READ_LE_INT16((uint16 *)_characterBuffer + 42) + 110; diff --git a/engines/kyra/animator_lok.cpp b/engines/kyra/animator_lok.cpp index c246eebd46e1..945a51a4ec92 100644 --- a/engines/kyra/animator_lok.cpp +++ b/engines/kyra/animator_lok.cpp @@ -491,7 +491,7 @@ Animator_LoK::AnimObject *Animator_LoK::objectAddHead(AnimObject *queue, AnimObj } Animator_LoK::AnimObject *Animator_LoK::objectQueue(AnimObject *queue, AnimObject *add) { - if (add->drawY <= queue->drawY || !queue) { + if (!queue || add->drawY <= queue->drawY) { add->nextAnimObject = queue; return add; } diff --git a/engines/mortevielle/utils.cpp b/engines/mortevielle/utils.cpp index 0b13df239c3e..c4f2d5714b12 100644 --- a/engines/mortevielle/utils.cpp +++ b/engines/mortevielle/utils.cpp @@ -2933,7 +2933,9 @@ void MortevielleEngine::testKey(bool d) { do { _mouse.getMousePosition(x, y, click); - keyPressed(); + quest = keyPressed(); + if (quest && shouldQuit()) + return; } while (click); // Event loop diff --git a/engines/parallaction/font.cpp b/engines/parallaction/font.cpp index 03b1ced8e173..627c6ebe22e1 100644 --- a/engines/parallaction/font.cpp +++ b/engines/parallaction/font.cpp @@ -518,6 +518,9 @@ AmigaFont::AmigaFont(Common::SeekableReadStream &stream) { _charSpace = 0; _charKern = 0; + _cp = 0; + _pitch = 0; + if (_font->_charSpace != 0) _charSpace = (uint16 *)(_data + FROM_BE_32(_font->_charSpace)); if (_font->_charKern != 0) diff --git a/engines/parallaction/graphics.h b/engines/parallaction/graphics.h index 550f9d1dd9d4..401e753775f1 100644 --- a/engines/parallaction/graphics.h +++ b/engines/parallaction/graphics.h @@ -138,7 +138,7 @@ struct Cnv : public Frames { } Cnv(uint16 numFrames, uint16 width, uint16 height, byte* data, bool freeData = false) - : _count(numFrames), _width(width), _height(height), _data(data), _freeData(freeData) { + : _count(numFrames), _width(width), _height(height), _data(data), _freeData(freeData), field_8(0) { } diff --git a/engines/parallaction/gui.h b/engines/parallaction/gui.h index a6eed240c4e0..9f2e96475b1c 100644 --- a/engines/parallaction/gui.h +++ b/engines/parallaction/gui.h @@ -43,7 +43,7 @@ class MenuInputHelper { MenuInputState *_newState; public: - MenuInputHelper() : _state(0) { + MenuInputHelper() : _state(0), _newState(0) { } ~MenuInputHelper(); diff --git a/engines/parallaction/gui_br.cpp b/engines/parallaction/gui_br.cpp index ddbc31d730de..2ec5ba6e8da3 100644 --- a/engines/parallaction/gui_br.cpp +++ b/engines/parallaction/gui_br.cpp @@ -196,6 +196,11 @@ class MainMenuInputState_BR : public MenuInputState { public: MainMenuInputState_BR(Parallaction_br *vm, MenuInputHelper *helper) : MenuInputState("mainmenu", helper), _vm(vm) { memset(_lines, 0, sizeof(_lines)); + + _menuStrings = 0; + _options = 0; + _availItems = 0; + _selection = 0; } ~MainMenuInputState_BR() { diff --git a/engines/parallaction/gui_ns.cpp b/engines/parallaction/gui_ns.cpp index 082c37f66602..ea3c39468407 100644 --- a/engines/parallaction/gui_ns.cpp +++ b/engines/parallaction/gui_ns.cpp @@ -117,6 +117,7 @@ class ChooseLanguageInputState_NS : public MenuInputState { _allowChoice = false; _nextState = "selectgame"; _label = 0; + _blocks = 0; _dosLanguageSelectBlocks[0] = Common::Rect( 80, 110, 128, 180 ); // Italian _dosLanguageSelectBlocks[1] = Common::Rect( 129, 85, 177, 155 ); // French diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp index f868abfbf45f..e7be1eb8a371 100644 --- a/engines/parallaction/parallaction.cpp +++ b/engines/parallaction/parallaction.cpp @@ -59,6 +59,33 @@ Parallaction::Parallaction(OSystem *syst, const PARALLACTIONGameDescription *gam DebugMan.addDebugChannel(kDebugAudio, "audio", "Audio debug level"); DebugMan.addDebugChannel(kDebugMenu, "menu", "Menu debug level"); DebugMan.addDebugChannel(kDebugInventory, "inventory", "Inventory debug level"); + + _screenHeight = 0; + _screenSize = 0; + _gameType = 0; + _gfx = 0; + _disk = 0; + _input = 0; + _debugger = 0; + _saveLoad = 0; + _menuHelper = 0; + _soundMan = 0; + _labelFont = 0; + _menuFont = 0; + _introFont = 0; + _dialogueFont = 0; + _globalFlagsNames = 0; + _objectsNames = 0; + _objects = 0; + _callableNames = 0; + _localFlagNames = 0; + _cmdExec = 0; + _programExec = 0; + _balloonMan = 0; + _inventoryRenderer = 0; + _inventory = 0; + _currentLocationIndex = 0; + _numLocations = 0; } Parallaction::~Parallaction() { @@ -882,6 +909,9 @@ void CharacterName::dummify() { CharacterName::CharacterName() { dummify(); + + _suffix = 0; + _prefix = 0; } CharacterName::CharacterName(const char *name) { diff --git a/engines/parallaction/parallaction_br.cpp b/engines/parallaction/parallaction_br.cpp index f9df9d85db40..586e4bbd6a53 100644 --- a/engines/parallaction/parallaction_br.cpp +++ b/engines/parallaction/parallaction_br.cpp @@ -45,6 +45,18 @@ const char *Parallaction_br::_partNames[] = { Parallaction_br::Parallaction_br(OSystem* syst, const PARALLACTIONGameDescription *gameDesc) : Parallaction(syst, gameDesc), _locationParser(0), _programParser(0), _soundManI(0) { + _audioCommandsNamesRes = 0; + _part = 0; + _nextPart = 0; + _subtitleY = 0; + _subtitle[0] = 0; + _subtitle[1] = 0; + _charInventories[0] = 0; + _charInventories[1] = 0; + _charInventories[2] = 0; + _countersNames = 0; + _callables = 0; + _walker = 0; } Common::Error Parallaction_br::init() { diff --git a/engines/parallaction/parallaction_ns.cpp b/engines/parallaction/parallaction_ns.cpp index 49b63dcac3dc..91e8c78fc258 100644 --- a/engines/parallaction/parallaction_ns.cpp +++ b/engines/parallaction/parallaction_ns.cpp @@ -145,6 +145,18 @@ void LocationName::bind(const char *s) { Parallaction_ns::Parallaction_ns(OSystem* syst, const PARALLACTIONGameDescription *gameDesc) : Parallaction(syst, gameDesc), _locationParser(0), _programParser(0), _walker(0) { + _soundManI = 0; + _score = 0; + _inTestResult = 0; + _callables = 0; + num_foglie = 0; + _sarcophagusDeltaX = 0; + _movingSarcophagus = 0; + _freeSarcophagusSlotX = 0; + _intro = 0; + + _testResultLabels[0] = 0; + _testResultLabels[1] = 0; } Common::Error Parallaction_ns::init() { diff --git a/engines/parallaction/parser.h b/engines/parallaction/parser.h index 3e2604eda281..e55df686e0fd 100644 --- a/engines/parallaction/parser.h +++ b/engines/parallaction/parser.h @@ -207,6 +207,11 @@ class LocationParser_ns { public: LocationParser_ns(Parallaction_ns *vm) : _vm(vm), _commandsNames(0), _locationStmt(0), _locationZoneStmt(0), _locationAnimStmt(0) { + _script = 0; + _parser = 0; + _zoneTypeNames = 0; + _zoneFlagNames = 0; + _zoneProg = 0; } virtual void init(); @@ -299,7 +304,7 @@ class LocationParser_br : public LocationParser_ns { public: LocationParser_br(Parallaction_br *vm) : LocationParser_ns((Parallaction_ns*)vm), _vm(vm), - _audioCommandsNames(0) { + _audioCommandsNames(0), _out(0) { } virtual void init(); @@ -363,7 +368,7 @@ class ProgramParser_ns { } public: - ProgramParser_ns(Parallaction_ns *vm) : _vm(vm), _parser(0), _instructionNames(0) { + ProgramParser_ns(Parallaction_ns *vm) : _vm(vm), _parser(0), _instructionNames(0), _script(0), _currentInstruction(0) { } virtual void init(); diff --git a/engines/sci/engine/script_patches.cpp b/engines/sci/engine/script_patches.cpp index ac42764e5b8e..9bf284d543ab 100644 --- a/engines/sci/engine/script_patches.cpp +++ b/engines/sci/engine/script_patches.cpp @@ -30,6 +30,52 @@ namespace Sci { +// IMPORTANT: +// every patch entry needs the following: +// - script number (pretty obvious) +// +// - apply count +// specifies the number of times a patch is supposed to get applied. +// Most of the time, it should be 1. +// +// - magicDWORD + magicOffset +// please ALWAYS put 0 for those two. Both will get filled out at runtime by the patcher. +// +// - signature data (is used to identify certain script code, that needs patching) +// every signature needs to contain SIG_MAGICDWORD once. +// The following 4 bytes after SIG_MAGICDWORD - which don't have to be fixed, you may for example +// use SIG_SELECTOR16, will get used to quickly search for a partly match before verifying that +// the whole signature actually matches. If it's not included, the script patcher will error() out +// right when loading up the game. +// If selector-IDs are included, please use SIG_SELECTOR16 + SIG_SELECTOR8 [1]. Simply +// specify the selector that way, so that the patcher will search for the specific +// selector instead of looking for a hardcoded value. Selectors may not be the same +// between game versions. +// For UINT16s either use SIG_UINT16 or SIG_SELECTOR16. +// Macintosh versions of SCI games are using BE ordering instead of LE since SCI1.1 for UINT16s in scripts +// By using those 2 commands, it's possible to make patches work for PC and Mac versions of the same game. +// You may also skip bytes by using the SIG_ADDTOOFFSET command +// Every signature data needs to get terminated using SIGNATURE_END +// +// - patch data (is used for actually patching scripts) +// When a match is found, the patch data will get applied. +// Patch data is similar to signature data. Just use PATCH_SELECTOR16 + PATCH_SELECTOR8 [1] +// for patching in selectors. +// There are also patch specific commands. +// Those are PATCH_GETORIGINALBYTE, which fetches a byte from the original script +// and PATCH_GETORIGINALBYTEADJUST, which does the same but gets a second value +// from the uint16 array and uses that value to adjust the original byte. +// Every patch data needs to get terminated using PATCH_END +// +// - and please always add a comment about why the patch was done and what's causing issues. +// If possible make sure, that the patch works on localized (or just different) game versions +// as well in case those need patching too. +// +// [1] - selectors need to get specified in selectorTable[] and ScriptPatcherSelectors-enum +// before they can get used using the SIG_SELECTORx and PATCH_SELECTORx commands. +// You have to use the exact same order in both the table and the enum, otherwise +// it won't work. + #define SIG_END 0xFFFF #define SIG_MISMATCH 0xFFFE #define SIG_COMMANDMASK 0xF000 @@ -965,6 +1011,35 @@ SciScriptPatcherEntry larry2Signatures[] = { SCI_SIGNATUREENTRY_TERMINATOR }; +// =========================================================================== +// Leisure Suit Larry 5 +// In one of the conversations near the end (to be exact - room 380 and the text +// about using champagne on Reverse Biaz - only used when you actually did that +// in the game), the German text is too large, causing the textbox to get too large. +// Because of that the talking head of Patti is drawn over the textbox. A translation oversight. +// Applies to at least: German floppy +// Responsible method: none, position of talker object on screen needs to get modified +const uint16 larry5SignatureGermanEndingPattiTalker[] = { + SIG_MAGICDWORD, + SIG_UINT16 + 0x6e, 0x00, // object pattiTalker::x (110) + SIG_UINT16 + 0xb4, 0x00, // object pattiTalker::y (180) + SIG_ADDTOOFFSET + 469, // verify that it's really the German version + 0x59, 0x6f, 0x75, // (object name) "You" + 0x23, 0x47, 0x44, 0x75, // "#GDu" + SIG_END +}; + +const uint16 larry5PatchGermanEndingPattiTalker[] = { + PATCH_UINT16 + 0x5a, 0x00, // change pattiTalker::x to 90 + PATCH_END +}; + +// script, description, signature patch +SciScriptPatcherEntry larry5Signatures[] = { + { 380, "German-only: Enlarge Patti Textbox", 1, 0, 0, larry5SignatureGermanEndingPattiTalker, larry5PatchGermanEndingPattiTalker }, + SCI_SIGNATUREENTRY_TERMINATOR +}; + // =========================================================================== // this is called on every death dialog. Problem is at least the german // version of lsl6 gets title text that is far too long for the @@ -2030,6 +2105,9 @@ void Script::patcherProcessScript(uint16 scriptNr, byte *scriptData, const uint3 case GID_LSL2: signatureTable = larry2Signatures; break; + case GID_LSL5: + signatureTable = larry5Signatures; + break; case GID_LSL6: signatureTable = larry6Signatures; break; diff --git a/engines/sword25/util/pluto/pluto.cpp b/engines/sword25/util/pluto/pluto.cpp index b7a8fd3c8b35..fb477c1687a9 100644 --- a/engines/sword25/util/pluto/pluto.cpp +++ b/engines/sword25/util/pluto/pluto.cpp @@ -19,7 +19,6 @@ * for Mobile Lua (http://luaos.net/pages/mobile-lua.php) */ -#include "config.h" #include "sword25/util/lua/lua.h" #include "pluto.h" diff --git a/engines/toon/audio.cpp b/engines/toon/audio.cpp index 50b559ee00c9..303f6774faaf 100644 --- a/engines/toon/audio.cpp +++ b/engines/toon/audio.cpp @@ -228,6 +228,7 @@ void AudioManager::stopMusic() { AudioStreamInstance::AudioStreamInstance(AudioManager *man, Audio::Mixer *mixer, Common::SeekableReadStream *stream , bool looping, bool deleteFileStreamAtEnd) { _compBufferSize = 0; _buffer = NULL; + _bufferSize = 0; _bufferMaxSize = 0; _mixer = mixer; _compBuffer = NULL; diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp index a97bfd55e8dd..7b1456b05c66 100644 --- a/engines/toon/toon.cpp +++ b/engines/toon/toon.cpp @@ -952,6 +952,18 @@ ToonEngine::ToonEngine(OSystem *syst, const ADGameDescription *gameDescription) _lastRenderTime = 0; _firstFrame = false; _needPaletteFlush = true; + + _numVariant = 0; + _currentCutaway = nullptr; + for (int i = 0; i < 4; i++) { + _scriptState[i].ip = nullptr; + _scriptState[i].dataPtr = nullptr; + _scriptState[i].retValue = 0; + _scriptState[i].bp = 0; + _scriptState[i].sp = 0; + _scriptState[i].running = false; + } + _currentScriptRegion = 0; } ToonEngine::~ToonEngine() { diff --git a/engines/touche/touche.cpp b/engines/touche/touche.cpp index 6ca17c86a166..b3e3ca5b505b 100644 --- a/engines/touche/touche.cpp +++ b/engines/touche/touche.cpp @@ -135,6 +135,38 @@ ToucheEngine::ToucheEngine(OSystem *system, Common::Language language) for (uint i = 0; i < NUM_SEQUENCES; i++) memset(&_sequenceEntryTable[i], 0, sizeof(SequenceEntry)); + + _talkListEnd = 0; + _talkListCurrent = 0; + _talkTextRectDefined = 0; + _talkTextDisplayed = 0; + _talkTextInitialized = 0; + _skipTalkText = 0; + _talkTextSpeed = 0; + _keyCharTalkCounter = 0; + _talkTableLastTalkingKeyChar = 0; + _talkTableLastOtherKeyChar = 0; + _talkTableLastStringNum = 0; + + for (uint i = 0; i < NUM_TALK_ENTRIES; i++) + memset(&_talkTable[i], 0, sizeof(TalkEntry)); + + _conversationChoicesUpdated = 0; + _conversationReplyNum = 0; + _conversationEnded = 0; + _conversationNum = 0; + _scrollConversationChoiceOffset = 0; + _currentConversation = 0; + _disableConversationScript = 0; + _conversationAreaCleared = 0; + + for (uint i = 0; i < NUM_CONVERSATION_CHOICES; i++) + memset(&_conversationChoicesTable[i], 0, sizeof(ConversationChoice)); + + for (uint i = 0; i < NUM_KEYCHARS; i++) + _sortedKeyCharsTable[i] = 0; + + _currentKeyCharNum = 0; } ToucheEngine::~ToucheEngine() { diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index e703b714b2da..fd36d4fb0155 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2106,7 +2106,7 @@ SceneObject::SceneObject() : SceneHotspot() { _endFrame = 0; _field68 = 0; _regionIndex = 0; - _field9C = NULL; + _shadowMap = NULL; } SceneObject::SceneObject(const SceneObject &so) : SceneHotspot() { @@ -2735,9 +2735,24 @@ void SceneObject::draw() { Rect destRect = _bounds; destRect.translate(-g_globals->_sceneManager._scene->_sceneBounds.left, -g_globals->_sceneManager._scene->_sceneBounds.top); - Region *priorityRegion = g_globals->_sceneManager._scene->_priorities.find(_priority); GfxSurface frame = getFrame(); - g_globals->gfxManager().copyFrom(frame, destRect, priorityRegion); + Region *priorityRegion = g_globals->_sceneManager._scene->_priorities.find(_priority); + + if (g_vm->getGameID() == GType_Ringworld2) { + switch (_effect) { + case EFFECT_SHADOW_MAP: { + assert(_shadowMap); + + GLOBALS.gfxManager().getSurface().copyFrom(frame, frame.getBounds(), + destRect, priorityRegion, _shadowMap); + return; + } + default: + break; + } + } + + GLOBALS.gfxManager().copyFrom(frame, destRect, priorityRegion); } /** diff --git a/engines/tsage/core.h b/engines/tsage/core.h index 2c88f6be7955..05f6f4b3a097 100644 --- a/engines/tsage/core.h +++ b/engines/tsage/core.h @@ -466,8 +466,9 @@ enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MOD ANIM_MODE_9 = 9 }; -enum Effect { EFFECT_NONE = 0, EFFECT_SHADED = 1, EFFECT_2 = 2, EFFECT_3 = 3, - EFFECT_4 = 4, EFFECT_5 = 5 }; +// Actor effect enumeration used in Return to Ringworld 2 +enum Effect { EFFECT_NONE = 0, EFFECT_SHADED = 1, EFFECT_3 = 3, + EFFECT_SHADOW_MAP = 5, EFFECT_SHADED2 = 6 }; class SceneObject; @@ -552,7 +553,7 @@ class SceneObject : public SceneHotspot { uint32 _regionBitList; // Ringworld 2 specific fields - byte *_field9C; + byte *_shadowMap; int _shade, _oldShade; int _effect; SceneObject *_linkedActor; diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp index a8ab145dbb6e..6540f4dccc56 100644 --- a/engines/tsage/globals.cpp +++ b/engines/tsage/globals.cpp @@ -426,11 +426,11 @@ Ringworld2Globals::Ringworld2Globals() { _balloonAltitude = 5; _scene1925CurrLevel = 0; _walkwaySceneNumber = 0; - _v56AA0 = 0; + _mirandaJailState = 0; _scientistConvIndex = 0; - _v56AA6 = 1; - _v56AA7 = 1; - _v56AA8 = 1; + _ductMazePanel1State = 1; + _ductMazePanel2State = 1; + _ductMazePanel3State = 1; _scene180Mode = -1; _v57709 = 0; _v5780C = 0; @@ -443,10 +443,8 @@ Ringworld2Globals::Ringworld2Globals() { _animationCtr = 0; _electromagnetChangeAmount = 0; _electromagnetZoom = 0; - _v565E5 = 0; - _v565E7 = 0; - _v565E9 = -5; - _v565EB = 26; + _tractorField = false; + _cableAttached = 0; _foodCount = 0; _rimLocation = 0; _rimTransportLocation = 0; @@ -478,15 +476,11 @@ void Ringworld2Globals::reset() { Common::fill(&_paletteMap[0], &_paletteMap[4096], 0); _fadePaletteFlag = false; - _v5589E.set(0, 0, 0, 0); - _v558B6.set(0, 0, 0, 0); _animationCtr = 0; _electromagnetChangeAmount = 0; _electromagnetZoom = 0; - _v565E5 = 0; - _v565E7 = 0; - _v565E9 = -5; - _v565EB = 26; + _tractorField = false; + _cableAttached = 0; _foodCount = 0; _rimLocation = 0; _rimTransportLocation = 0; @@ -543,12 +537,12 @@ void Ringworld2Globals::reset() { _balloonAltitude = 5; _scene1925CurrLevel = 0; //_v56A9C _walkwaySceneNumber = 0; - _v56AA0 = 0; + _mirandaJailState = 0; _scientistConvIndex = 0; _ventCellPos = Common::Point(60, 660); - _v56AA6 = 1; - _v56AA7 = 1; - _v56AA8 = 1; + _ductMazePanel1State = 1; + _ductMazePanel2State = 1; + _ductMazePanel3State = 1; _scene180Mode = -1; _v57709 = 0; _v5780C = 0; @@ -586,16 +580,11 @@ void Ringworld2Globals::synchronize(Serializer &s) { TsAGE2Globals::synchronize(s); int i; - _v5589E.synchronize(s); - _v558B6.synchronize(s); - s.syncAsSint16LE(_animationCtr); s.syncAsSint16LE(_electromagnetChangeAmount); s.syncAsSint16LE(_electromagnetZoom); - s.syncAsSint16LE(_v565E5); - s.syncAsSint16LE(_v565E7); - s.syncAsSint16LE(_v565E9); - s.syncAsSint16LE(_v565EB); + s.syncAsSint16LE(_tractorField); + s.syncAsSint16LE(_cableAttached); s.syncAsSint16LE(_foodCount); s.syncAsSint32LE(_rimLocation); s.syncAsSint16LE(_rimTransportLocation); @@ -626,11 +615,11 @@ void Ringworld2Globals::synchronize(Serializer &s) { s.syncAsByte(_desertStepsRemaining); s.syncAsByte(_desertCorrectDirection); s.syncAsByte(_desertPreviousDirection); - s.syncAsByte(_v56AA0); + s.syncAsByte(_mirandaJailState); s.syncAsByte(_scientistConvIndex); - s.syncAsByte(_v56AA6); - s.syncAsByte(_v56AA7); - s.syncAsByte(_v56AA8); + s.syncAsByte(_ductMazePanel1State); + s.syncAsByte(_ductMazePanel2State); + s.syncAsByte(_ductMazePanel3State); for (i = 0; i < 14; ++i) s.syncAsByte(_spillLocation[i]); diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h index b9c80760429a..4523a7bca073 100644 --- a/engines/tsage/globals.h +++ b/engines/tsage/globals.h @@ -252,15 +252,11 @@ class Ringworld2Globals: public TsAGE2Globals { byte _paletteMap[4096]; int _insetUp; int _frameEdgeColor; - Rect _v5589E; - Rect _v558B6; int _animationCtr; int _electromagnetChangeAmount; int _electromagnetZoom; - int _v565E5; - int _v565E7; - int _v565E9; - int _v565EB; // CHECKME: IS it a constant? + bool _tractorField; + bool _cableAttached; int _foodCount; int _rimLocation; int _rimTransportLocation; @@ -279,12 +275,12 @@ class Ringworld2Globals: public TsAGE2Globals { byte _balloonAltitude; int _scene1925CurrLevel; //_v56A9C int _walkwaySceneNumber; - byte _v56AA0; + byte _mirandaJailState; byte _scientistConvIndex; Common::Point _ventCellPos; - byte _v56AA6; - byte _v56AA7; - byte _v56AA8; + byte _ductMazePanel1State; + byte _ductMazePanel2State; + byte _ductMazePanel3State; int _scene180Mode; // _v575f7 int _v57709; int _v5780C; diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp index 32810626e7a2..f00dcf03783d 100644 --- a/engines/tsage/graphics.cpp +++ b/engines/tsage/graphics.cpp @@ -559,9 +559,11 @@ static GfxSurface ResizeSurface(GfxSurface &src, int xSize, int ySize, int trans } /** - * Copys an area from one GfxSurface to another + * Copys an area from one GfxSurface to another. + * */ -void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Region *priorityRegion) { +void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, + Region *priorityRegion, const byte *shadowMap) { GfxSurface srcImage; if (srcBounds.isEmpty()) return; @@ -631,8 +633,15 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi if (!priorityRegion || !priorityRegion->contains(Common::Point( xp + g_globals->_sceneManager._scene->_sceneBounds.left, destBounds.top + y + g_globals->_sceneManager._scene->_sceneBounds.top))) { - if (*tempSrc != src._transColor) - *tempDest = *tempSrc; + if (*tempSrc != src._transColor) { + if (shadowMap) { + // Using a shadow map, so translate the dest pixel using the mapping array + *tempDest = shadowMap[*tempDest]; + } else { + // Otherwise, it's a standard pixel copy + *tempDest = *tempSrc; + } + } } ++tempSrc; ++tempDest; diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h index 497cd76ad63f..d31bac0738d7 100644 --- a/engines/tsage/graphics.h +++ b/engines/tsage/graphics.h @@ -105,7 +105,8 @@ class GfxSurface { void setBounds(const Rect &bounds) { _bounds = bounds; } const Rect &getBounds() const { return _bounds; } - void copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Region *priorityRegion = NULL); + void copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, + Region *priorityRegion = NULL, const byte *shadowMap = NULL); void copyFrom(GfxSurface &src, Rect destBounds, Region *priorityRegion = NULL) { copyFrom(src, src.getBounds(), destBounds, priorityRegion); } diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp index e5d8b0702b88..b495a7e052c9 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.cpp +++ b/engines/tsage/ringworld2/ringworld2_logic.cpp @@ -336,7 +336,7 @@ SceneExt::SceneExt(): Scene() { _stripManager._onEnd = SceneExt::endStrip; for (int i = 0; i < 256; i++) - _field312[i] = 0; + _shadowPaletteMap[i] = 0; _savedPlayerEnabled = false; _savedUiEnabled = false; @@ -356,7 +356,7 @@ SceneExt::SceneExt(): Scene() { void SceneExt::synchronize(Serializer &s) { Scene::synchronize(s); - s.syncBytes(&_field312[0], 256); + s.syncBytes(&_shadowPaletteMap[0], 256); _sceneAreas.synchronize(s); } @@ -585,7 +585,7 @@ void SceneExt::scalePalette(int RFactor, int GFactor, int BFactor) { varC = tmp; varD = j; } - this->_field312[i] = varD; + this->_shadowPaletteMap[i] = varD; } } @@ -1285,7 +1285,7 @@ void SceneActor::postInit(SceneObjectList *OwnerList) { void SceneActor::remove() { R2_GLOBALS._sceneItems.remove(this); - _field9C = NULL; + _shadowMap = NULL; _linkedActor = NULL; SceneObject::remove(); @@ -1326,26 +1326,6 @@ bool SceneActor::startAction(CursorType action, Event &event) { GfxSurface SceneActor::getFrame() { GfxSurface frame = SceneObject::getFrame(); - // TODO: Proper effects handling - switch (_effect) { - case EFFECT_NONE: - case EFFECT_5: - // TODO: Figure out purpose of setting image flags to 64, and getting - // scene priorities -1 or _shade - break; - case EFFECT_SHADED: - // TODO: Transposing using R2_GLOBALS._pixelArrayMap - break; - case EFFECT_2: - // No effect - break; - case EFFECT_4: - break; - default: - // TODO: Default effect - break; - } - return frame; } diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h index ff5bfc0b6f69..50e506de1106 100644 --- a/engines/tsage/ringworld2/ringworld2_logic.h +++ b/engines/tsage/ringworld2/ringworld2_logic.h @@ -81,7 +81,7 @@ class SceneExt: public Scene { static void startStrip(); static void endStrip(); public: - byte _field312[256]; + byte _shadowPaletteMap[256]; bool _savedPlayerEnabled; bool _savedUiEnabled; bool _savedCanWalk; diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp index aabcd261c761..d673c33c5a04 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes0.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp @@ -3491,7 +3491,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == 1500) { R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] = 3150; R2_GLOBALS._player._characterScene[R2_MIRANDA] = 3150; - R2_GLOBALS._player._effect = 0; + R2_GLOBALS._player._effect = EFFECT_NONE; R2_GLOBALS._player.setAction(NULL); R2_GLOBALS._player.disableControl(); @@ -3676,7 +3676,7 @@ void Scene300::signal() { case 313: _sceneMode = 14; - R2_GLOBALS._player._effect = 0; + R2_GLOBALS._player._effect = EFFECT_NONE; _seeker.setAction(&_sequenceManager3, this, 314, &_seeker, &_doorway, NULL); R2_GLOBALS._events.setCursor(CURSOR_ARROW); _stripManager.start(301, this); @@ -3685,7 +3685,7 @@ void Scene300::signal() { case 314: R2_GLOBALS._player.disableControl(); _sceneMode = 315; - R2_GLOBALS._player._effect = 1; + R2_GLOBALS._player._effect = EFFECT_SHADED; setAction(&_sequenceManager1, this, 315, &R2_GLOBALS._player, &_doorway, NULL); break; @@ -5290,7 +5290,7 @@ void Scene500::PanelDialog::Button::doButtonPress() { } else { scene->_suit.postInit(); scene->_suit.hide(); - scene->_suit._effect = 1; + scene->_suit._effect = EFFECT_SHADED; scene->_suit.setDetails(500, -1, -1, -1, 2, (SceneItem *)NULL); scene->_suit.setup(502, R2_GLOBALS._landerSuitNumber + 2, 1); @@ -5325,14 +5325,14 @@ void Scene500::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._walkRegions.enableRegion(1); _seeker.postInit(); - _seeker._effect = 1; + _seeker._effect = EFFECT_SHADED; _seeker.setup(1505, 1, 1); _seeker._moveDiff.x = 5; _seeker.setPosition(Common::Point(42, 151)); _seeker.setDetails(500, 34, 35, 36, 1, (SceneItem *)NULL); } else if (R2_GLOBALS._player._characterScene[R2_QUINN] == 500) { _seeker.postInit(); - _seeker._effect = 1; + _seeker._effect = EFFECT_SHADED; _seeker.setup(R2_GLOBALS.getFlag(26) ? 1500 : 10, 1, 1); _seeker.setPosition(Common::Point(42, 151)); @@ -5407,7 +5407,7 @@ void Scene500::postInit(SceneObjectList *OwnerList) { } _suits.postInit(); - _suits._effect = 1; + _suits._effect = EFFECT_SHADED; _suits.setup(502, 1, 1); _suits.setPosition(Common::Point(258, 99)); _suits.fixPriority(50); @@ -5421,7 +5421,7 @@ void Scene500::postInit(SceneObjectList *OwnerList) { _transparentDoor.setup(500, 8, 7); _suit.postInit(); - _suit._effect = 1; + _suit._effect = EFFECT_SHADED; _suit.setPosition(Common::Point(247, 52)); _suit.setDetails(500, -1, -1, -1, 2, (SceneItem *)NULL); @@ -5594,7 +5594,7 @@ void Scene525::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(105); _actor1.postInit(); - _actor1._effect = 1; + _actor1._effect = EFFECT_SHADED; R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -5767,7 +5767,7 @@ bool Scene600::Laser::startAction(CursorType action, Event &event) { scene->_smoke.postInit(); scene->_smoke.setup(601, 3, 1); - scene->_smoke._effect = 3; + scene->_smoke._effect = EFFECT_3; scene->_smoke._moveDiff = Common::Point(1, 1); scene->_smoke._moveRate = 2; scene->_smoke._numFrames = 3; @@ -5948,7 +5948,7 @@ void Scene600::postInit(SceneObjectList *OwnerList) { _smoke._numFrames = 3; _smoke.animate(ANIM_MODE_2, NULL); _smoke.fixPriority(130); - _smoke._effect = 3; + _smoke._effect = EFFECT_3; _smoke.setDetails(600, 24, 25, 26, 1, (SceneItem *) NULL); _smoke.signal(); } @@ -6019,7 +6019,7 @@ void Scene600::signal() { R2_INVENTORY.setObjectScene(R2_AEROSOL, 600); R2_GLOBALS.setFlag(5); - _smoke._effect = 3; + _smoke._effect = EFFECT_3; _smoke.signal(); break; case 606: @@ -6127,6 +6127,9 @@ void Scene600::dispatch() { * *--------------------------------------------------------------------------*/ +#define CABLE700_X 26 +#define CABLE700_Y -5 + Scene700::Scene700() { _rotation = NULL; } @@ -6293,8 +6296,6 @@ void Scene700::postInit(SceneObjectList *OwnerList) { loadScene(700); if (R2_GLOBALS._sceneManager._previousScene == 900) _sceneBounds = Rect(160, 0, 480, 200); - - R2_GLOBALS._v558B6.set(60, 0, 260, 200); SceneExt::postInit(); _rotation = R2_GLOBALS._scenePalette.addRotation(237, 246, -1); @@ -6352,7 +6353,7 @@ void Scene700::postInit(SceneObjectList *OwnerList) { break; case 700: _cable.setup(701, 3, 1); - _cable.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); + _cable.setPosition(Common::Point(356 - (CABLE700_X * 8), 148 - (((CABLE700_Y + 10) / 5) * 4))); _cable.setDetails(700, 37, -1, -1, 1, (SceneItem *) NULL); break; default: @@ -6362,7 +6363,7 @@ void Scene700::postInit(SceneObjectList *OwnerList) { case 700: switch (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS)) { case 0: - if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) + if (R2_GLOBALS._tractorField && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) _cable.setup(701, 2, 1); else _cable.setup(701, 2, 8); @@ -6372,8 +6373,8 @@ void Scene700::postInit(SceneObjectList *OwnerList) { break; case 700: _cable.setup(701, 1, 8); - if (R2_GLOBALS._v565E7 == 0) { - _cable.setPosition(Common::Point(356 - (R2_GLOBALS._v565EB * 8), 148 - (((R2_GLOBALS._v565E9 + 10) / 5) * 4))); + if (!R2_GLOBALS._cableAttached) { + _cable.setPosition(Common::Point(356 - (CABLE700_X * 8), 148 - (((CABLE700_Y + 10) / 5) * 4))); } else { _cable.setup(701, 1, 1); _cable.setPosition(Common::Point(_electromagnet._position.x + 1, _electromagnet._position.y + 120)); @@ -6521,12 +6522,12 @@ void Scene700::signal() { _sceneMode = 17; _cable.setup(701, 1, 8); _cable.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); - if ((R2_GLOBALS._v565E5 != 0) && (_cable._position.x == _electromagnet._position.x + 1) && (_cable._position.x == 148 - (((R2_GLOBALS._electromagnetChangeAmount + 10) / 5) * 4))) { + if (R2_GLOBALS._tractorField && (_cable._position.x == _electromagnet._position.x + 1) && (_cable._position.x == 148 - (((R2_GLOBALS._electromagnetChangeAmount + 10) / 5) * 4))) { _cable.animate(ANIM_MODE_6, NULL); Common::Point pt(_cable._position.x, _electromagnet._position.y + 120); NpcMover *mover = new NpcMover(); _cable.addMover(mover, &pt, NULL); - R2_GLOBALS._v565E7 = 1; + R2_GLOBALS._cableAttached = true; } R2_GLOBALS._player.animate(ANIM_MODE_6, this); break; @@ -6546,7 +6547,7 @@ void Scene700::signal() { break; case 21: _cable.fixPriority(77); - if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) + if (R2_GLOBALS._tractorField && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) _cable.animate(ANIM_MODE_6, NULL); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); @@ -6564,7 +6565,7 @@ void Scene700::signal() { case 706: _cable.setDetails(700, 38, -1, -1, 3, (SceneItem *) NULL); _cable.fixPriority(77); - if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) + if (R2_GLOBALS._tractorField && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) _cable.animate(ANIM_MODE_6, NULL); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_UNIT, 0); R2_INVENTORY.setObjectScene(R2_ATTRACTOR_CABLE_HARNESS, 700); @@ -7002,7 +7003,7 @@ void Scene825::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._interfaceY = SCREEN_HEIGHT; R2_GLOBALS._player.postInit(); - R2_GLOBALS._player._effect = 0; + R2_GLOBALS._player._effect = EFFECT_NONE; R2_GLOBALS._player.setVisage(10); R2_GLOBALS._player.hide(); R2_GLOBALS._player.disableControl(); @@ -7479,10 +7480,10 @@ bool Scene900::Button::startAction(CursorType action, Event &event) { scene->_sceneMode = 2; scene->signal(); } else if (scene->_controlsScreenNumber == 2) { - if (R2_GLOBALS._v565E5 == 0) { + if (!R2_GLOBALS._tractorField) { scene->_aSound1.play(30); setup(900, 3, 11); - R2_GLOBALS._v565E5 = 1; + R2_GLOBALS._tractorField = true; if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS == 700)) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70) && (scene->_cable._animateMode != ANIM_MODE_6)) { scene->_cable.animate(ANIM_MODE_6, NULL); } else { @@ -7501,12 +7502,12 @@ bool Scene900::Button::startAction(CursorType action, Event &event) { } else { scene->_aSound1.play(53); setup(900, 3, 9); - R2_GLOBALS._v565E5 = 0; + R2_GLOBALS._tractorField = false; if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (scene->_cable._frame < 8) && (scene->_cable._animateMode != ANIM_MODE_5)) { scene->_cable.animate(ANIM_MODE_5, NULL); } else if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 700) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (scene->_cable._frame < 8)) { - R2_GLOBALS._v565E7 = 0; + R2_GLOBALS._cableAttached = false; if (scene->_cable._animateMode != 5) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 5; @@ -7613,7 +7614,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _electromagnet.fixPriority(1); _electromagnet.setup(900, 1, 2); _electromagnet.setPosition(Common::Point(89, 0)); - _electromagnet._effect = 1; + _electromagnet._effect = EFFECT_SHADED; _electromagnet.setDetails(900, 6, -1, 8, 1, (SceneItem *) NULL); if ((R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) != 1) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 1)) { @@ -7624,7 +7625,7 @@ void Scene900::postInit(SceneObjectList *OwnerList) { if (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) { if (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) != 700) { _cable.setup(901, 3, 2); - } else if ((R2_GLOBALS._v565E5 != 0) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) { + } else if (R2_GLOBALS._tractorField && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) { _cable.setup(901, 2, 1); } else { _cable.setup(901, 2, 8); @@ -7633,11 +7634,11 @@ void Scene900::postInit(SceneObjectList *OwnerList) { _cable.setDetails(700, -1, -1, -1, 1, (SceneItem *) NULL); } else { _cable.setDetails(700, -1, -1, -1, 1, (SceneItem *) NULL); - if (R2_GLOBALS._v565E7 == 0) { + if (!R2_GLOBALS._cableAttached) { _cable.setup(901, 1, 8); // Original set two times the same values: skipped - _cable.setPosition(Common::Point((((100 - ((R2_GLOBALS._v565EB * 350) / 100)) * 49) / 100) + ((R2_GLOBALS._v565E9 * _electromagnet._percent * 6) / 100) + 89, 166 - (R2_GLOBALS._v565EB / 3))); - _cable.changeZoom(((100 - ((R2_GLOBALS._v565EB * 350) / 100) + 52) / 10) * 10); + _cable.setPosition(Common::Point((((100 - ((CABLE700_X * 350) / 100)) * 49) / 100) + ((CABLE700_Y * _electromagnet._percent * 6) / 100) + 89, 166 - (CABLE700_X / 3))); + _cable.changeZoom(((100 - ((CABLE700_X * 350) / 100) + 52) / 10) * 10); } } } @@ -7682,7 +7683,7 @@ void Scene900::signal() { _button3.remove(); _button2.initButton(2); - if (R2_GLOBALS._v565E5 == 0) + if (!R2_GLOBALS._tractorField) _button2.setup(900, 3, 9); else _button2.setup(900, 3, 11); @@ -7727,7 +7728,7 @@ void Scene900::signal() { _sceneMode = 0; R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - R2_GLOBALS._v565E7 = 1; + R2_GLOBALS._cableAttached = true; break; case 900: R2_GLOBALS._player.enableControl(CURSOR_USE); @@ -7777,11 +7778,11 @@ void Scene900::dispatch() { } if (R2_GLOBALS._sceneObjects->contains(&_cable)) { - if ((R2_GLOBALS._v565E5 != 0) && (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) { + if (R2_GLOBALS._tractorField && (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (R2_GLOBALS._electromagnetChangeAmount == 20) && (R2_GLOBALS._electromagnetZoom == 70)) { if ((_cable._frame > 1) && (_cable._animateMode != ANIM_MODE_6)) _cable.animate(ANIM_MODE_6, NULL); } else { - if ((_cable._frame < 8) && (_cable._animateMode != ANIM_MODE_5) && (R2_GLOBALS._v565E7 == 0) && (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (_sceneMode != 4)) + if ((_cable._frame < 8) && (_cable._animateMode != ANIM_MODE_5) && !R2_GLOBALS._cableAttached && (R2_INVENTORY.getObjectScene(R2_CABLE_HARNESS) == 0) && (R2_INVENTORY.getObjectScene(R2_ATTRACTOR_CABLE_HARNESS) == 700) && (_sceneMode != 4)) _cable.animate(ANIM_MODE_5, NULL); } } @@ -7789,7 +7790,7 @@ void Scene900::dispatch() { _electromagnet.changeZoom(100 - ((R2_GLOBALS._electromagnetZoom * 70) / 100)); _electromagnet.setPosition(Common::Point(((_electromagnet._percent * R2_GLOBALS._electromagnetChangeAmount * 6) / 100) + 89, R2_GLOBALS._electromagnetZoom)); - if ((R2_GLOBALS._sceneObjects->contains(&_cable)) && (R2_GLOBALS._v565E7 != 0) && (!_cable._mover) && (_cable._animateMode == ANIM_MODE_NONE)) { + if ((R2_GLOBALS._sceneObjects->contains(&_cable)) && R2_GLOBALS._cableAttached && (!_cable._mover) && (_cable._animateMode == ANIM_MODE_NONE)) { _cable.setPosition(Common::Point(_electromagnet._position.x + ((_electromagnet._percent * 49) / 100), _electromagnet._position.y + ((_electromagnet._percent * 3) / 10))); if (R2_GLOBALS._electromagnetZoom >= 75) { _cable.setup(901, 1, 1); diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp index 3d99ecd0359f..4bc82c705937 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp @@ -547,7 +547,6 @@ void Scene1020::postInit(SceneObjectList *OwnerList) { _sceneBounds = Rect(160, 0, SCREEN_WIDTH + 160, 200); R2_GLOBALS._interfaceY = SCREEN_HEIGHT; - R2_GLOBALS._v558B6.set(160, 0, 160, 161); R2_GLOBALS._player.postInit(); if (R2_GLOBALS._sceneManager._previousScene == 1010) { @@ -779,8 +778,6 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { if ((R2_GLOBALS._sceneManager._previousScene == 1000) && (!R2_GLOBALS.getFlag(44))) { R2_GLOBALS._uiElements._active = false; - R2_GLOBALS._v5589E.left = 0; - R2_GLOBALS._v5589E.right = 200; } if (R2_GLOBALS._player._characterScene[R2_QUINN] == 1100) @@ -788,8 +785,6 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == -1) { R2_GLOBALS._uiElements._active = false; - R2_GLOBALS._v5589E.left = 0; - R2_GLOBALS._v5589E.right = 200; } SceneExt::postInit(); @@ -868,8 +863,8 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { _palette1.loadPalette(1101); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.disableControl(); - R2_GLOBALS._player._effect = 5; - R2_GLOBALS._player._field9C = _field312; + R2_GLOBALS._player._effect = EFFECT_SHADOW_MAP; + R2_GLOBALS._player._shadowMap = _shadowPaletteMap; R2_GLOBALS._player.setup(1102, 3, 2); R2_GLOBALS._player.setObjectWrapper(NULL); R2_GLOBALS._player.setPosition(Common::Point(111,-20)); @@ -894,8 +889,8 @@ void Scene1100::postInit(SceneObjectList *OwnerList) { _shipFormationShadow.setup(1102, 6, 2); _shipFormationShadow._moveRate = 30; _shipFormationShadow._moveDiff.x = 2; - _shipFormationShadow._effect = 5; - _shipFormationShadow._field9C = _field312; + _shipFormationShadow._effect = EFFECT_SHADOW_MAP; + _shipFormationShadow._shadowMap = _shadowPaletteMap; R2_GLOBALS._sound1.play(86); @@ -1038,12 +1033,12 @@ void Scene1100::signal() { break; case 5: _runningGuy1.postInit(); - _runningGuy1._effect = 6; + _runningGuy1._effect = EFFECT_SHADED2; _runningGuy1.setup(1103, 3, 1); _runningGuy1._moveRate = 30; _runningGuy2.postInit(); - _runningGuy2._effect = 6; + _runningGuy2._effect = EFFECT_SHADED2; _runningGuy2.setup(1103, 4, 1); _runningGuy2._moveRate = 25; @@ -1063,7 +1058,7 @@ void Scene1100::signal() { setAction(&_sequenceManager1, this, 1103, &_chief, &_laserShot, NULL); break; case 8: - R2_GLOBALS._player._effect = 0; + R2_GLOBALS._player._effect = EFFECT_NONE; _animation.postInit(); setAction(&_sequenceManager1, this, 1105, &R2_GLOBALS._player, &_laserShot, &_animation, &_chief, NULL); break; @@ -1084,7 +1079,7 @@ void Scene1100::signal() { case 11: { setAction(&_sequenceManager1, this, 1106, &_animation, &_laserShot, &_leftImpacts, NULL); - R2_GLOBALS._player._effect = 5; + R2_GLOBALS._player._effect = EFFECT_SHADOW_MAP; R2_GLOBALS._player.setup(1102, 3, 2); R2_GLOBALS._player.setPosition(Common::Point(-50, 131)); R2_GLOBALS._sound2.play(84); @@ -1356,7 +1351,7 @@ void Scene1200::LaserPanel::Jumper::init(int state) { switch (_state) { case 1: - switch (R2_GLOBALS._v56AA6) { + switch (R2_GLOBALS._ductMazePanel1State) { case 1: setFrame2(2); setPosition(Common::Point(129, 101)); @@ -1370,7 +1365,7 @@ void Scene1200::LaserPanel::Jumper::init(int state) { } break; case 2: - switch (R2_GLOBALS._v56AA7) { + switch (R2_GLOBALS._ductMazePanel2State) { case 1: setFrame2(2); setPosition(Common::Point(152, 101)); @@ -1388,7 +1383,7 @@ void Scene1200::LaserPanel::Jumper::init(int state) { } break; case 3: - switch (R2_GLOBALS._v56AA8) { + switch (R2_GLOBALS._ductMazePanel3State) { case 1: setFrame2(3); setPosition(Common::Point(158, 95)); @@ -1415,22 +1410,22 @@ bool Scene1200::LaserPanel::Jumper::startAction(CursorType action, Event &event) R2_GLOBALS._sound2.play(260); switch (_state) { case 1: - if (R2_GLOBALS._v56AA6 == 1) { - R2_GLOBALS._v56AA6 = 2; + if (R2_GLOBALS._ductMazePanel1State == 1) { + R2_GLOBALS._ductMazePanel1State = 2; setFrame2(3); setPosition(Common::Point(135, 95)); } else { - R2_GLOBALS._v56AA6 = 1; + R2_GLOBALS._ductMazePanel1State = 1; setFrame2(2); setPosition(Common::Point(129, 101)); } break; case 2: - ++R2_GLOBALS._v56AA7; - if (R2_GLOBALS._v56AA7 == 4) - R2_GLOBALS._v56AA7 = 1; + ++R2_GLOBALS._ductMazePanel2State; + if (R2_GLOBALS._ductMazePanel2State == 4) + R2_GLOBALS._ductMazePanel2State = 1; - switch (R2_GLOBALS._v56AA7) { + switch (R2_GLOBALS._ductMazePanel2State) { case 1: setFrame2(2); setPosition(Common::Point(152, 101)); @@ -1448,12 +1443,12 @@ bool Scene1200::LaserPanel::Jumper::startAction(CursorType action, Event &event) } break; case 3: - if (R2_GLOBALS._v56AA8 == 1) { - R2_GLOBALS._v56AA8 = 2; + if (R2_GLOBALS._ductMazePanel3State == 1) { + R2_GLOBALS._ductMazePanel3State = 2; setFrame2(2); setPosition(Common::Point(175, 101)); } else { - R2_GLOBALS._v56AA8 = 1; + R2_GLOBALS._ductMazePanel3State = 1; setFrame2(3); setPosition(Common::Point(158, 95)); } @@ -1465,13 +1460,13 @@ bool Scene1200::LaserPanel::Jumper::startAction(CursorType action, Event &event) Scene1200 *scene = (Scene1200 *)R2_GLOBALS._sceneManager._scene; scene->_field418 = 0; - if ((R2_GLOBALS._v56AA6 == 1) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) + if ((R2_GLOBALS._ductMazePanel1State == 1) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1)) scene->_field418 = 1; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) + else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1)) scene->_field418 = 2; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 2)) + else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 2)) scene->_field418 = 3; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 3) && (R2_GLOBALS._v56AA8 == 1)) + else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 3) && (R2_GLOBALS._ductMazePanel3State == 1)) scene->_field418 = 4; return true; @@ -1520,13 +1515,13 @@ void Scene1200::postInit(SceneObjectList *OwnerList) { _field418 = 0; _field41A = 0; - if ((R2_GLOBALS._v56AA6 == 1) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) + if ((R2_GLOBALS._ductMazePanel1State == 1) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1)) _field418 = 1; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 1)) + else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 1)) _field418 = 2; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 1) && (R2_GLOBALS._v56AA8 == 2)) + else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 1) && (R2_GLOBALS._ductMazePanel3State == 2)) _field418 = 3; - else if ((R2_GLOBALS._v56AA6 == 2) && (R2_GLOBALS._v56AA7 == 3) && (R2_GLOBALS._v56AA8 == 1)) + else if ((R2_GLOBALS._ductMazePanel1State == 2) && (R2_GLOBALS._ductMazePanel2State == 3) && (R2_GLOBALS._ductMazePanel3State == 1)) _field418 = 4; R2_GLOBALS._player.postInit(); @@ -6023,7 +6018,7 @@ void Scene1337::subCF31D() { count = rndVal; break; } - + // CHECKME: inside the check on rndVal? rndVal--; if (rndVal < 0) rndVal = 3; @@ -6047,9 +6042,10 @@ void Scene1337::subCF31D() { int rndVal = R2_GLOBALS._randomSource.getRandomNumber(3); for (int j = 0; j <= 3; j++) { + //CHECKME: tmpVal or rndVal? if (tmpVal != 1) { for (int k = 0; k <= 7; k++) { - // 'k' is not used in that loop. + // CHECKME: 'k' is not used in that loop. // It looks suspicious. if ((_arrunkObj1337[tmpVal]._arr3[0]._field34 == 0) && (subC32B1(tmpVal, _arrunkObj1337[1]._arr1[i]._field34))) { count = tmpVal; @@ -6073,12 +6069,9 @@ void Scene1337::subCF31D() { } } - if (found) { - if (count == -1) - return; - + if (found) subC3456(&_arrunkObj1337[1]._arr1[i], &_arrunkObj1337[count]._arr3[0]); - } else { + else { int j; for (j = 0; j <= 3; j++) { if (subC27F9(_arrunkObj1337[1]._arr1[j]._field34) != -1) { @@ -6108,14 +6101,10 @@ void Scene1337::subCF31D() { } } - if (found) { - if (count == -1) - return; - + if (found) subC3456(&_arrunkObj1337[1]._arr1[j], &_arrunkObj1337[count]._arr3[0]); - } else { + else subC2835(1); - } } } @@ -6896,8 +6885,6 @@ void Scene1337::subD1A48(int arg1) { void Scene1500::postInit(SceneObjectList *OwnerList) { loadScene(1500); R2_GLOBALS._uiElements._active = false; - R2_GLOBALS._v5589E.top = 0; - R2_GLOBALS._v5589E.bottom = 200; setZoomPercents(170, 13, 240, 100); SceneExt::postInit(); scalePalette(65, 65, 65); @@ -6908,9 +6895,9 @@ void Scene1500::postInit(SceneObjectList *OwnerList) { _starshipShadow.postInit(); _starshipShadow.setup(1401, 1, 1); - _starshipShadow._effect = 5; + _starshipShadow._effect = EFFECT_SHADOW_MAP; _starshipShadow.fixPriority(10); - _starshipShadow._field9C = _field312; + _starshipShadow._shadowMap = _shadowPaletteMap; _starship.postInit(); _starship.setup(1400, 1, 1); @@ -6920,9 +6907,9 @@ void Scene1500::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene != 1010) { _smallShipShadow.postInit(); _smallShipShadow.setup(1401, 2, 1); - _smallShipShadow._effect = 5; + _smallShipShadow._effect = EFFECT_SHADOW_MAP; _smallShipShadow.fixPriority(10); - _smallShipShadow._field9C = _field312; + _smallShipShadow._shadowMap = _shadowPaletteMap; _smallShip.postInit(); _smallShip._moveRate = 30; @@ -6956,8 +6943,6 @@ void Scene1500::postInit(SceneObjectList *OwnerList) { } void Scene1500::remove() { - R2_GLOBALS._v5589E.top = 3; - R2_GLOBALS._v5589E.bottom = 168; R2_GLOBALS._uiElements._active = true; SceneExt::remove(); @@ -7147,7 +7132,7 @@ void Scene1530::postInit(SceneObjectList *OwnerList) { _sceneMode = 1; } else { _seeker.postInit(); - _seeker._effect = 1; + _seeker._effect = EFFECT_SHADED; R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -7198,13 +7183,12 @@ void Scene1530::dispatch() { *--------------------------------------------------------------------------*/ Scene1550::Junk::Junk() { - _fieldA4 = _junkNumber = 0; + _junkNumber = 0; } void Scene1550::Junk::synchronize(Serializer &s) { SceneActor::synchronize(s); - s.syncAsSint16LE(_fieldA4); s.syncAsSint16LE(_junkNumber); } @@ -7277,7 +7261,7 @@ bool Scene1550::ShipComponent::startAction(CursorType action, Event &event) { switch (action) { case CURSOR_USE: if (_componentId == 8) { - scene->_field412 = 1; + scene->_dontExit = true; R2_GLOBALS._player.disableControl(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1576; @@ -7299,93 +7283,93 @@ bool Scene1550::ShipComponent::startAction(CursorType action, Event &event) { return true; break; case R2_FUEL_CELL: - scene->_field412 = 1; + scene->_dontExit = true; if (_componentId == 6) { R2_GLOBALS._player.disableControl(); - scene->_landingStrut.postInit(); + scene->_wreckage2.postInit(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1574; else scene->_sceneMode = 1582; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[5], &scene->_landingStrut, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[5], &scene->_wreckage2, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_GYROSCOPE: - scene->_field412 = 1; + scene->_dontExit = true; if (_componentId == 3) { R2_GLOBALS._player.disableControl(); - scene->_landingStrut.postInit(); + scene->_wreckage2.postInit(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1571; else scene->_sceneMode = 1581; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[2], &scene->_landingStrut, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[2], &scene->_wreckage2, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_GUIDANCE_MODULE: - scene->_field412 = 1; + scene->_dontExit = true; if (_componentId == 1) { R2_GLOBALS._player.disableControl(); - scene->_landingStrut.postInit(); + scene->_wreckage2.postInit(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1569; else scene->_sceneMode = 1579; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[0], &scene->_landingStrut, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[0], &scene->_wreckage2, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_THRUSTER_VALVE: - scene->_field412 = 1; + scene->_dontExit = true; if (_componentId == 4) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1572; - scene->_landingStrut.postInit(); - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[3], &scene->_landingStrut, NULL); + scene->_wreckage2.postInit(); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[3], &scene->_wreckage2, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_RADAR_MECHANISM: - scene->_field412 = 1; + scene->_dontExit = true; if (_componentId == 2) { R2_GLOBALS._player.disableControl(); - scene->_landingStrut.postInit(); + scene->_wreckage2.postInit(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1570; else scene->_sceneMode = 1580; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[1], &scene->_landingStrut, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[1], &scene->_wreckage2, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_IGNITOR: - scene->_field412 = 1; + scene->_dontExit = true; if (_componentId == 5) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1573; - scene->_landingStrut.postInit(); - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[4], &scene->_landingStrut, NULL); + scene->_wreckage2.postInit(); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[4], &scene->_wreckage2, NULL); return true; } return SceneActor::startAction(action, event); break; case R2_BATTERY: - scene->_field412 = 1; + scene->_dontExit = true; if (_componentId == 7) { R2_GLOBALS._player.disableControl(); - scene->_landingStrut.postInit(); + scene->_wreckage2.postInit(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1575; else scene->_sceneMode = 1583; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[6], &scene->_landingStrut, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_shipComponents[6], &scene->_wreckage2, NULL); return true; } return SceneActor::startAction(action, event); @@ -7455,45 +7439,47 @@ void Scene1550::ShipComponent::setupShipComponent(int componentId) { setDetails(1550, 70, -1, -1, 2, (SceneItem *)NULL); } -Scene1550::UnkObj15503::UnkObj15503() { - _fieldA4 = 0; +Scene1550::DishControlsWindow::DishControl::DishControl() { + _controlId = 0; } -void Scene1550::UnkObj15503::synchronize(Serializer &s) { +void Scene1550::DishControlsWindow::DishControl::synchronize(Serializer &s) { SceneActor::synchronize(s); - s.syncAsSint16LE(_fieldA4); + s.syncAsSint16LE(_controlId); } -bool Scene1550::UnkObj15503::startAction(CursorType action, Event &event) { +bool Scene1550::DishControlsWindow::DishControl::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; if (action != CURSOR_USE) return SceneActor::startAction(action, event); - switch (_fieldA4) { + switch (_controlId) { case 1: - if (scene->_actor13._frame == 5) { + // Button control + if (scene->_dish._frame == 5) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 25; - if (scene->_actor4._frame == 1) { - scene->setAction(&scene->_sequenceManager1, scene, 1560, &scene->_actor4, NULL); + if (scene->_walkway._frame == 1) { + scene->setAction(&scene->_sequenceManager1, scene, 1560, &scene->_walkway, NULL); R2_GLOBALS.setFlag(20); setFrame(2); } else { - scene->setAction(&scene->_sequenceManager1, scene, 1561, &scene->_actor4, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1561, &scene->_walkway, NULL); R2_GLOBALS.clearFlag(20); setFrame(1); } - scene->_unkArea1.remove(); + scene->_dishControlsWindow.remove(); } break; case 2: + // Lever control R2_GLOBALS._player.disableControl(); - if (scene->_actor13._frame == 1) { + if (scene->_dish._frame == 1) { scene->_sceneMode = 23; scene->setAction(&scene->_sequenceManager1, scene, 1560, this, NULL); } else { - if (scene->_actor4._frame == 1) + if (scene->_walkway._frame == 1) scene->_sceneMode = 24; else scene->_sceneMode = 22; @@ -7506,22 +7492,19 @@ bool Scene1550::UnkObj15503::startAction(CursorType action, Event &event) { return true; } -void Scene1550::UnkArea1550::remove() { +void Scene1550::DishControlsWindow::remove() { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; - _unkObj155031.remove(); - _unkObj155032.remove(); - // sub201EA is a common part with UnkArea1200 - R2_GLOBALS._sceneItems.remove((SceneItem *)this); - _areaActor.remove(); - SceneArea::remove(); - R2_GLOBALS._insetUp--; - // + _button.remove(); + _lever.remove(); + + ModalWindow::remove(); + if ((scene->_sceneMode >= 20) && (scene->_sceneMode <= 29)) return; R2_GLOBALS._player.disableControl(); - if (scene->_actor4._frame == 1) { + if (scene->_walkway._frame == 1) { scene->_sceneMode = 1559; scene->setAction(&scene->_sequenceManager1, scene, 1559, &R2_GLOBALS._player, NULL); } else { @@ -7530,91 +7513,40 @@ void Scene1550::UnkArea1550::remove() { } } -void Scene1550::UnkArea1550::process(Event &event) { -// This is a copy of Scene1200::LaserPanel::process - if (_field20 != R2_GLOBALS._insetUp) - return; - - CursorType cursor = R2_GLOBALS._events.getCursor(); - - if (_areaActor._bounds.contains(event.mousePos.x + g_globals->gfxManager()._bounds.left , event.mousePos.y)) { - if (cursor == _cursorNum) { - R2_GLOBALS._events.setCursor(_savedCursorNum); - } - } else if (event.mousePos.y < 168) { - if (cursor != _cursorNum) { - _savedCursorNum = cursor; - R2_GLOBALS._events.setCursor(CURSOR_INVALID); - } - if (event.eventType == EVENT_BUTTON_DOWN) { - event.handled = true; - R2_GLOBALS._events.setCursor(_savedCursorNum); - remove(); - } - } -} +void Scene1550::DishControlsWindow::setup2(int visage, int stripFrameNum, int frameNum, + int posX, int posY) { + // Call inherited setup + ModalWindow::setup2(visage, stripFrameNum, frameNum, posX, posY); -void Scene1550::UnkArea1550::setup2(int visage, int stripFrameNum, int frameNum, int posX, int posY) { - // UnkArea1200::setup2(); + // Further setup Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; - - _areaActor.postInit(); - _areaActor.setup(visage, stripFrameNum, frameNum); - _areaActor.setPosition(Common::Point(posX, posY)); - _areaActor.fixPriority(250); - _cursorNum = CURSOR_INVALID; - scene->_sceneAreas.push_front(this); - ++R2_GLOBALS._insetUp; - _field20 = R2_GLOBALS._insetUp; - // - setup3(1550, 67, -1, -1); - _unkObj155031.postInit(); - _unkObj155031._fieldA4 = 1; - if (scene->_actor4._frame == 1) - _unkObj155031.setup(1559, 3, 1); - else - _unkObj155031.setup(1559, 3, 2); - _unkObj155031.setPosition(Common::Point(142, 79)); - _unkObj155031.fixPriority(251); - _unkObj155031.setDetails(1550, 68, -1, -1, 2, (SceneItem *) NULL); - - _unkObj155032.postInit(); - _unkObj155032._numFrames = 5; - _unkObj155032._fieldA4 = 2; - if (scene->_actor13._frame == 1) - _unkObj155032.setup(1559, 2, 1); + _button.postInit(); + _button._controlId = 1; + if (scene->_walkway._frame == 1) + _button.setup(1559, 3, 1); else - _unkObj155032.setup(1559, 2, 2); - _unkObj155032.setPosition(Common::Point(156, 103)); - _unkObj155032.fixPriority(251); - _unkObj155032.setDetails(1550, 69, -1, -1, 2, (SceneItem *) NULL); -} + _button.setup(1559, 3, 2); + _button.setPosition(Common::Point(142, 79)); + _button.fixPriority(251); + _button.setDetails(1550, 68, -1, -1, 2, (SceneItem *) NULL); -void Scene1550::UnkArea1550::setup3(int resNum, int lookLineNum, int talkLineNum, int useLineNum) { - // Copy of Scene1200::LaserPanel::proc13 - _areaActor.setDetails(resNum, lookLineNum, talkLineNum, useLineNum, 2, (SceneItem *) NULL); + _lever.postInit(); + _lever._numFrames = 5; + _lever._controlId = 2; + if (scene->_dish._frame == 1) + _lever.setup(1559, 2, 1); + else + _lever.setup(1559, 2, 2); + _lever.setPosition(Common::Point(156, 103)); + _lever.fixPriority(251); + _lever.setDetails(1550, 69, -1, -1, 2, (SceneItem *) NULL); } bool Scene1550::WorkingShip::startAction(CursorType action, Event &event) { return SceneHotspot::startAction(action, event); } -bool Scene1550::Hotspot3::startAction(CursorType action, Event &event) { - // Arrays related to this scene are all hacky in the origina: they are based on the impossibility to use Miranda - assert ((R2_GLOBALS._player._characterIndex == R2_QUINN) || (R2_GLOBALS._player._characterIndex == R2_SEEKER)); - // The original contains a debug message when CURSOR_TALK is used. - // This part is totally useless, we could remove it (and the entire function as well) - if (action == CURSOR_TALK) - warning("Location: %d/%d - %d", - R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x, - R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y, - scene1550AreaMap[(R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y * 30)] + - R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x); - - return SceneHotspot::startAction(action, event); -} - bool Scene1550::Wreckage::startAction(CursorType action, Event &event) { return SceneActor::startAction(action, event); } @@ -7630,23 +7562,23 @@ bool Scene1550::Companion::startAction(CursorType action, Event &event) { return true; } -bool Scene1550::Actor8::startAction(CursorType action, Event &event) { +bool Scene1550::AirBag::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); R2_GLOBALS._player.disableControl(); Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; - scene->_field412 = 1; + scene->_dontExit = true; if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1552; else scene->_sceneMode = 1588; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor8, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_airbag, NULL); return true; } -bool Scene1550::Actor9::startAction(CursorType action, Event &event) { +bool Scene1550::Joystick::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; switch (action) { @@ -7669,7 +7601,7 @@ bool Scene1550::Actor9::startAction(CursorType action, Event &event) { } } -bool Scene1550::Actor10::startAction(CursorType action, Event &event) { +bool Scene1550::Gyroscope::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); @@ -7680,27 +7612,29 @@ bool Scene1550::Actor10::startAction(CursorType action, Event &event) { else scene->_sceneMode = 1589; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor10, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, + &scene->_gyroscope, NULL); return true; } -bool Scene1550::Actor11::startAction(CursorType action, Event &event) { +bool Scene1550::DiagnosticsDisplay::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); - scene->_field412 = 1; + scene->_dontExit = true; if (R2_GLOBALS._player._characterIndex == R2_QUINN) scene->_sceneMode = 1586; else scene->_sceneMode = 1587; - scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor11, NULL); + scene->setAction(&scene->_sequenceManager1, scene, scene->_sceneMode, &R2_GLOBALS._player, + &scene->_diagnosticsDisplay, NULL); return true; } -bool Scene1550::Actor12::startAction(CursorType action, Event &event) { +bool Scene1550::DishTower::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneActor::startAction(action, event); @@ -7712,10 +7646,10 @@ bool Scene1550::Actor12::startAction(CursorType action, Event &event) { scene->setAction(&scene->_sequenceManager1, scene, 1585, &R2_GLOBALS._player, NULL); } else { R2_GLOBALS._player.disableControl(); - switch(scene->_field415) { + switch(scene->_dishMode) { case 0: - scene->_actor13.fixPriority(168); - scene->_actor4.fixPriority(125); + scene->_dish.fixPriority(168); + scene->_walkway.fixPriority(125); scene->_sceneMode = 1558; scene->setAction(&scene->_sequenceManager1, scene, 1558, &R2_GLOBALS._player, NULL); break; @@ -7723,9 +7657,9 @@ bool Scene1550::Actor12::startAction(CursorType action, Event &event) { return SceneActor::startAction(action, event); break; case 2: - scene->_field415 = 1; + scene->_dishMode = 1; scene->_sceneMode = 1563; - scene->setAction(&scene->_sequenceManager1, scene, 1563, &R2_GLOBALS._player, &scene->_actor4, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1563, &R2_GLOBALS._player, &scene->_walkway, NULL); break; default: break; @@ -7735,12 +7669,12 @@ bool Scene1550::Actor12::startAction(CursorType action, Event &event) { } -bool Scene1550::Actor13::startAction(CursorType action, Event &event) { +bool Scene1550::Dish::startAction(CursorType action, Event &event) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: - if (scene->_field415 != 2) + if (scene->_dishMode != 2) return SceneActor::startAction(action, event); if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) { @@ -7752,7 +7686,7 @@ bool Scene1550::Actor13::startAction(CursorType action, Event &event) { return true; break; case CURSOR_LOOK: - if (scene->_field415 != 2) + if (scene->_dishMode != 2) return SceneActor::startAction(action, event); if (R2_INVENTORY.getObjectScene(R2_BATTERY) == 1550) { @@ -7767,22 +7701,24 @@ bool Scene1550::Actor13::startAction(CursorType action, Event &event) { } } +/*--------------------------------------------------------------------------*/ + Scene1550::Scene1550() { - _field412 = 0; - _field414 = 0; - _field415 = 0; - _field417 = 0; - _field419 = 0; + _dontExit = false; + _wallType = 0; + _dishMode = 0; + _sceneResourceId = 0; + _walkRegionsId = 0; } void Scene1550::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field412); - s.syncAsByte(_field414); - s.syncAsSint16LE(_field415); - s.syncAsSint16LE(_field417); - s.syncAsSint16LE(_field419); + s.syncAsSint16LE(_dontExit); + s.syncAsByte(_wallType); + s.syncAsSint16LE(_dishMode); + s.syncAsSint16LE(_sceneResourceId); + s.syncAsSint16LE(_walkRegionsId); } void Scene1550::postInit(SceneObjectList *OwnerList) { @@ -7797,8 +7733,8 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { scalePalette(65, 65, 65); setZoomPercents(30, 75, 170, 100); - _field417 = 1550; - _field419 = 0; + _sceneResourceId = 1550; + _walkRegionsId = 0; if (R2_GLOBALS._sceneManager._previousScene == -1) R2_GLOBALS.setFlag(16); @@ -7814,7 +7750,7 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_seekerSpeaker); R2_GLOBALS._player.postInit(); - R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._effect = EFFECT_SHADED2; if (R2_GLOBALS._player._characterIndex == R2_QUINN) R2_GLOBALS._player.setup(1500, 3, 1); @@ -7832,7 +7768,7 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); R2_GLOBALS._player.disableControl(); - _field414 = 0; + _wallType = 0; _companion.changeZoom(-1); R2_GLOBALS._player.changeZoom(-1); @@ -7853,9 +7789,9 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.disableControl(); R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL); - _field412 = 1; + _dontExit = true; - _landingStrut.postInit(); + _wreckage2.postInit(); _shipComponents[7].setupShipComponent(8); _shipComponents[7].hide(); if (R2_GLOBALS._player._characterIndex == R2_QUINN) @@ -7863,7 +7799,7 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { else _sceneMode = 1578; - setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_landingStrut, &_shipComponents[7], NULL); + setAction(&_sequenceManager1, this, _sceneMode, &R2_GLOBALS._player, &_wreckage2, &_shipComponents[7], NULL); R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] = 1550; } else { R2_GLOBALS._player.enableControl(); @@ -7875,9 +7811,9 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { enterArea(); - _shipHull.setDetails(16, 1550, 10, -1, -1); - _item2.setDetails(24, 1550, 10, -1, -1); - _item3.setDetails(Rect(0, 0, 320, 200), 1550, 0, 1, -1, 1, NULL); + _intactHull1.setDetails(16, 1550, 10, -1, -1); + _intactHull2.setDetails(24, 1550, 10, -1, -1); + _background.setDetails(Rect(0, 0, 320, 200), 1550, 0, 1, -1, 1, NULL); if ((R2_GLOBALS._sceneManager._previousScene == 1500) && (R2_GLOBALS.getFlag(16))) { _sceneMode = 70; @@ -7892,8 +7828,8 @@ void Scene1550::postInit(SceneObjectList *OwnerList) { _companion.changeZoom(77); _companion.setDetails(1550, -1, -1, -1, 2, (SceneItem *) NULL); - assert(_field419 >= 1550); - R2_GLOBALS._walkRegions.disableRegion(k5A750[_field419 - 1550]); + assert(_walkRegionsId >= 1550); + R2_GLOBALS._walkRegions.disableRegion(k5A750[_walkRegionsId - 1550]); setAction(&_sequenceManager1, this, 1590, &_companion, NULL); } else if ((_sceneMode != 1577) && (_sceneMode != 1578)) @@ -7909,7 +7845,7 @@ void Scene1550::signal() { case 5: // No break on purpose case 7: - _field412 = 0; + _dontExit = false; R2_GLOBALS._player.enableControl(CURSOR_WALK); break; case 20: @@ -7919,27 +7855,28 @@ void Scene1550::signal() { case 25: // No break on purpose case 1563: + // Show the communication dish controls window R2_GLOBALS.clearFlag(20); - _unkArea1.setup2(1559, 1, 1, 160, 125); + _dishControlsWindow.setup2(1559, 1, 1, 160, 125); R2_GLOBALS._player.enableControl(); _sceneMode = 0; break; case 22: - _unkArea1.remove(); + _dishControlsWindow.remove(); _sceneMode = 24; - setAction(&_sequenceManager1, this, 1561, &_actor4, NULL); + setAction(&_sequenceManager1, this, 1561, &_walkway, NULL); R2_GLOBALS.clearFlag(20); break; case 23: - _unkArea1.remove(); + _dishControlsWindow.remove(); _sceneMode = 20; - setAction(&_sequenceManager1, this, 1566, &_actor13, &_actor5, NULL); + setAction(&_sequenceManager1, this, 1566, &_dish, &_dishTowerShadow, NULL); R2_GLOBALS.setFlag(21); break; case 24: - _unkArea1.remove(); + _dishControlsWindow.remove(); _sceneMode = 21; - setAction(&_sequenceManager1, this, 1567, &_actor13, &_actor5, NULL); + setAction(&_sequenceManager1, this, 1567, &_dish, &_dishTowerShadow, NULL); R2_GLOBALS.clearFlag(19); break; case 30: @@ -8035,18 +7972,20 @@ void Scene1550::signal() { _companion.changeZoom(-1); _sceneMode = 1592; if (R2_GLOBALS._player._characterIndex == R2_QUINN) - setAction(&_sequenceManager1, this, 1592, &R2_GLOBALS._player, &_companion, &_junk[0], &_actor9, NULL); + setAction(&_sequenceManager1, this, 1592, &R2_GLOBALS._player, &_companion, + &_junk[0], &_joystick, NULL); else - setAction(&_sequenceManager1, this, 1593, &R2_GLOBALS._player, &_companion, &_junk[0], &_actor9, NULL); + setAction(&_sequenceManager1, this, 1593, &R2_GLOBALS._player, &_companion, + &_junk[0], &_joystick, NULL); break; case 61: R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; - _field415 = 2; + _dishMode = 2; break; case 62: R2_GLOBALS._player.enableControl(CURSOR_TALK); - if (_field415 == 2) { + if (_dishMode == 2) { R2_GLOBALS._player.enableControl(CURSOR_USE); R2_GLOBALS._player._canWalk = false; } @@ -8100,8 +8039,8 @@ void Scene1550::signal() { // No break on purpose case 1588: R2_INVENTORY.setObjectScene(R2_AIRBAG, R2_GLOBALS._player._characterIndex); - _actor8.remove(); - _field412 = 0; + _airbag.remove(); + _dontExit = false; R2_GLOBALS._player.enableControl(); break; case 1553: @@ -8109,33 +8048,33 @@ void Scene1550::signal() { break; case 1554: R2_GLOBALS._player.enableControl(); - _field412 = 0; + _dontExit = false; break; case 1555: // No break on purpose case 1589: R2_INVENTORY.setObjectScene(R2_GYROSCOPE, R2_GLOBALS._player._characterIndex); - _actor10.remove(); + _gyroscope.remove(); R2_GLOBALS._player.enableControl(); break; case 1558: - _actor13.fixPriority(124); - _field415 = 1; - _unkArea1.setup2(1559, 1, 1, 160, 125); + _dish.fixPriority(124); + _dishMode = 1; + _dishControlsWindow.setup2(1559, 1, 1, 160, 125); R2_GLOBALS._player.enableControl(); break; case 1559: - _actor13.fixPriority(168); - _actor4.fixPriority(169); + _dish.fixPriority(168); + _walkway.fixPriority(169); R2_GLOBALS._player.fixPriority(-1); R2_GLOBALS._player.changeZoom(-1); - _field415 = 0; + _dishMode = 0; R2_GLOBALS._player.enableControl(); break; case 1562: R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; - _field415 = 2; + _dishMode = 2; break; case 1564: R2_INVENTORY.setObjectScene(R2_BATTERY, 1); @@ -8149,52 +8088,52 @@ void Scene1550::signal() { case 1569: // No break on purpose case 1579: - _field412 = 0; - _landingStrut.remove(); + _dontExit = false; + _wreckage2.remove(); R2_INVENTORY.setObjectScene(R2_GUIDANCE_MODULE, 0); R2_GLOBALS._player.enableControl(); break; case 1570: // No break on purpose case 1580: - _field412 = 0; - _landingStrut.remove(); + _dontExit = false; + _wreckage2.remove(); R2_INVENTORY.setObjectScene(R2_RADAR_MECHANISM, 0); R2_GLOBALS._player.enableControl(); break; case 1571: // No break on purpose case 1581: - _field412 = 0; - _landingStrut.remove(); + _dontExit = false; + _wreckage2.remove(); R2_INVENTORY.setObjectScene(R2_GYROSCOPE, 0); R2_GLOBALS._player.enableControl(); break; case 1572: - _field412 = 0; - _landingStrut.remove(); + _dontExit = false; + _wreckage2.remove(); R2_INVENTORY.setObjectScene(R2_THRUSTER_VALVE, 0); R2_GLOBALS._player.enableControl(); break; case 1573: - _field412 = 0; - _landingStrut.remove(); + _dontExit = false; + _wreckage2.remove(); R2_INVENTORY.setObjectScene(R2_IGNITOR, 0); R2_GLOBALS._player.enableControl(); break; case 1574: // No break on purpose case 1582: - _field412 = 0; - _landingStrut.remove(); + _dontExit = false; + _wreckage2.remove(); R2_INVENTORY.setObjectScene(R2_FUEL_CELL, 0); R2_GLOBALS._player.enableControl(); break; case 1575: // No break on purpose case 1583: - _field412 = 0; - _landingStrut.remove(); + _dontExit = false; + _wreckage2.remove(); R2_INVENTORY.setObjectScene(R2_BATTERY, 0); R2_GLOBALS._player.enableControl(); break; @@ -8208,8 +8147,8 @@ void Scene1550::signal() { // No break on purpose case 1578: _sceneMode = 0; - _landingStrut.remove(); - _field412 = 0; + _wreckage2.remove(); + _dontExit = false; R2_GLOBALS._player.fixPriority(-1); R2_GLOBALS._player.enableControl(); break; @@ -8221,12 +8160,12 @@ void Scene1550::signal() { // No break on purpose case 1587: R2_INVENTORY.setObjectScene(R2_DIAGNOSTICS_DISPLAY, R2_GLOBALS._player._characterIndex); - _landingStrut.remove(); - _field412 = 0; + _wreckage2.remove(); + _dontExit = false; R2_GLOBALS._player.enableControl(); break; case 1592: - _actor9.remove(); + _joystick.remove(); R2_INVENTORY.setObjectScene(R2_JOYSTICK, 1); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._s1550PlayerArea[R2_SEEKER] = R2_GLOBALS._s1550PlayerArea[R2_QUINN]; @@ -8246,14 +8185,14 @@ void Scene1550::process(Event &event) { if ((!R2_GLOBALS._player._canWalk) && (R2_GLOBALS._events.getCursor() == R2_NEGATOR_GUN) && (event.eventType == EVENT_BUTTON_DOWN) && (this->_screenNumber == 1234)) { int curReg = R2_GLOBALS._sceneRegions.indexOf(event.mousePos); if (curReg == 0) - _field412 = 1; + _dontExit = true; else if (((R2_GLOBALS._player._position.y < 90) && (event.mousePos.y > 90)) || ((R2_GLOBALS._player._position.y > 90) && (event.mousePos.y < 90))) - _field412 = 1; + _dontExit = true; else - _field412 = 0; + _dontExit = false; if ((curReg == 13) || (curReg == 14)) - _field412 = 0; + _dontExit = false; } Scene::process(event); @@ -8277,13 +8216,13 @@ void Scene1550::dispatch() { case 144: // No break on purpose case 146: - _actor13._frame = 5; + _dish._frame = 5; R2_GLOBALS._player._shade = 3; break; case 148: // No break on purpose case 149: - _actor13._frame = 1; + _dish._frame = 1; // No break on purpose case 147: // No break on purpose @@ -8296,7 +8235,7 @@ void Scene1550::dispatch() { #endif } - if (_field412 != 0) + if (_dontExit) return; switch (R2_GLOBALS._player.getRegionIndex() - 11) { @@ -8306,7 +8245,7 @@ void Scene1550::dispatch() { // Exiting the top of the screen R2_GLOBALS._player.disableControl(); _sceneMode = 1; - _field412 = 1; + _dontExit = true; --R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y; enterArea(); @@ -8330,7 +8269,7 @@ void Scene1550::dispatch() { // Exiting the bottom of the screen R2_GLOBALS._player.disableControl(); _sceneMode = 3; - _field412 = 1; + _dontExit = true; ++R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y; enterArea(); @@ -8354,7 +8293,7 @@ void Scene1550::dispatch() { // Exiting the right of the screen R2_GLOBALS._player.disableControl(); _sceneMode = 5; - _field412 = 1; + _dontExit = true; ++R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x; enterArea(); @@ -8382,7 +8321,7 @@ void Scene1550::dispatch() { // Exiting to the left of the screen R2_GLOBALS._player.disableControl(); _sceneMode = 7; - _field412 = 1; + _dontExit = true; --R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x; enterArea(); @@ -8423,11 +8362,11 @@ void Scene1550::saveCharacter(int characterIndex) { SceneExt::saveCharacter(characterIndex); } -void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { +void Scene1550::Wall::setupWall(int frameNumber, int strip) { Scene1550 *scene = (Scene1550 *)R2_GLOBALS._sceneManager._scene; postInit(); - if (scene->_field414 == 2) + if (scene->_wallType == 2) setup(1551, strip, frameNumber); else setup(1554, strip, frameNumber); @@ -8538,7 +8477,7 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { switch (frameNumber) { case 2: fixPriority(2); - if (scene->_field414 == 2) + if (scene->_wallType == 2) setup(1553, 2, 1); else setup(1556, 2, 1); @@ -8563,7 +8502,7 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { case 4: if (frameNumber == 2) { fixPriority(250); - if (scene->_field414 == 2) + if (scene->_wallType == 2) setup(1553, 1, 1); else setup(1556, 1, 1); @@ -8608,17 +8547,14 @@ void Scene1550::SceneActor1550::subA4D14(int frameNumber, int strip) { } void Scene1550::enterArea() { - Rect tmpRect; - _field419 = 0; - _field415 = 0; - - tmpRect = R2_GLOBALS._v5589E; + _walkRegionsId = 0; + _dishMode = 0; - _actor14.remove(); + _wallCorner1.remove(); _westWall.remove(); _northWall.remove(); _southWall.remove(); - _actor16.remove(); + _wallCorner2.remove(); _eastWall.remove(); for (int i = 0; i < 8; ++i) @@ -8629,21 +8565,21 @@ void Scene1550::enterArea() { for (int i = 0; i < 8; ++i) _shipComponents[i].remove(); - _actor8.remove(); - _actor9.remove(); - _actor10.remove(); - _actor3.remove(); - _actor11.remove(); + _airbag.remove(); + _joystick.remove(); + _gyroscope.remove(); + _wreckage4.remove(); + _diagnosticsDisplay.remove(); if ((_sceneMode != 1577) && (_sceneMode != 1578)) - _landingStrut.remove(); + _wreckage2.remove(); - _actor2.remove(); + _wreckage3.remove(); _companion.remove(); - _actor13.remove(); - _actor5.remove(); - _actor12.remove(); - _actor4.remove(); + _dish.remove(); + _dishTowerShadow.remove(); + _dishTower.remove(); + _walkway.remove(); // Set up of special walk regions for certain areas switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y) { @@ -8651,11 +8587,11 @@ void Scene1550::enterArea() { switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) { case 3: R2_GLOBALS._walkRegions.load(1554); - _field419 = 1554; + _walkRegionsId = 1554; break; case 4: R2_GLOBALS._walkRegions.load(1553); - _field419 = 1553; + _walkRegionsId = 1553; break; default: break; @@ -8667,7 +8603,7 @@ void Scene1550::enterArea() { if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == 23) || (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x)) { if (!R2_GLOBALS.getFlag(16)) { R2_GLOBALS._walkRegions.load(1559); - _field419 = 1559; + _walkRegionsId = 1559; } } break; @@ -8675,11 +8611,11 @@ void Scene1550::enterArea() { switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) { case 10: R2_GLOBALS._walkRegions.load(1555); - _field419 = 1555; + _walkRegionsId = 1555; break; case 11: R2_GLOBALS._walkRegions.load(1556); - _field419 = 1556; + _walkRegionsId = 1556; break; default: break; @@ -8689,11 +8625,11 @@ void Scene1550::enterArea() { switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) { case 24: R2_GLOBALS._walkRegions.load(1558); - _field419 = 1558; + _walkRegionsId = 1558; break; case 25: R2_GLOBALS._walkRegions.load(1557); - _field419 = 1557; + _walkRegionsId = 1557; break; default: break; @@ -8703,15 +8639,15 @@ void Scene1550::enterArea() { switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x) { case 2: R2_GLOBALS._walkRegions.load(1552); - _field419 = 1552; + _walkRegionsId = 1552; break; case 3: R2_GLOBALS._walkRegions.load(1551); - _field419 = 1551; + _walkRegionsId = 1551; break; case 15: R2_GLOBALS._walkRegions.load(1575); - _field419 = 1575; + _walkRegionsId = 1575; default: break; } @@ -8728,7 +8664,7 @@ void Scene1550::enterArea() { switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 22) { case 0: varA = 1553; - _northWall.subA4D14(6, 0); + _northWall.setupWall(6, 0); break; case 1: // No break on purpose @@ -8741,7 +8677,7 @@ void Scene1550::enterArea() { break; case 5: varA = 1553; - _northWall.subA4D14(6, 0); + _northWall.setupWall(6, 0); break; default: break; @@ -8753,11 +8689,11 @@ void Scene1550::enterArea() { switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 21) { case 0: varA = 1550; - _northWall.subA4D14(9, 0); + _northWall.setupWall(9, 0); break; case 1: varA = 1552; - _northWall.subA4D14(10, 0); + _northWall.setupWall(10, 0); break; case 2: // No break on purpose @@ -8770,11 +8706,11 @@ void Scene1550::enterArea() { break; case 6: varA = 1552; - _northWall.subA4D14(7, 0); + _northWall.setupWall(7, 0); break; case 7: varA = 1550; - _northWall.subA4D14(8, 0); + _northWall.setupWall(8, 0); break; default: break; @@ -8784,11 +8720,11 @@ void Scene1550::enterArea() { switch (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x - 21) { case 0: varA = 1550; - _northWall.subA4D14(4, 0); + _northWall.setupWall(4, 0); break; case 1: varA = 1550; - _northWall.subA4D14(3, 0); + _northWall.setupWall(3, 0); break; case 2: // No break on purpose @@ -8801,11 +8737,11 @@ void Scene1550::enterArea() { break; case 6: varA = 1550; - _northWall.subA4D14(2, 0); + _northWall.setupWall(2, 0); break; case 7: varA = 1550; - _northWall.subA4D14(1, 0); + _northWall.setupWall(1, 0); break; default: break; @@ -8826,7 +8762,7 @@ void Scene1550::enterArea() { R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE; loadScene(1234); R2_GLOBALS._sceneManager._hasPalette = false; - _field414 = 0; + _wallType = 0; } } else { if (_screenNumber == 1234) { @@ -8837,15 +8773,15 @@ void Scene1550::enterArea() { } if (R2_GLOBALS._sceneManager._sceneNumber == 1234) - _field419 = 1576; + _walkRegionsId = 1576; - if (_field414 == 0) { - _field414 = 1; + if (_wallType == 0) { + _wallType = 1; } else { - if (_field414 == 2) { - _field414 = 3; + if (_wallType == 2) { + _wallType = 3; } else { - _field414 = 2; + _wallType = 2; } if (R2_GLOBALS._sceneManager._sceneNumber == 1550){ @@ -8861,7 +8797,7 @@ void Scene1550::enterArea() { R2_GLOBALS._sceneManager._fadeMode = FADEMODE_IMMEDIATE; if (varA == 0) { - if (_field417 != 1550) { + if (_sceneResourceId != 1550) { g_globals->_scenePalette.loadPalette(1550); R2_GLOBALS._sceneManager._hasPalette = true; } @@ -8871,7 +8807,7 @@ void Scene1550::enterArea() { } if (R2_GLOBALS._sceneManager._hasPalette) - _field417 = varA; + _sceneResourceId = varA; warning("sub_2C429()"); } @@ -8882,131 +8818,131 @@ void Scene1550::enterArea() { R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x]) { case 0: // Standard cell - if (_field419 == 0) { + if (_walkRegionsId == 0) { R2_GLOBALS._walkRegions.load(1550); - _field419 = 1550; + _walkRegionsId = 1550; } break; case 1: // North end of the spaceport - if (_field419 == 0) { + if (_walkRegionsId == 0) { R2_GLOBALS._walkRegions.load(1560); - _field419 = 1560; + _walkRegionsId = 1560; } - _actor14.subA4D14(2, 1); - _northWall.subA4D14(1, 3); - _actor16.subA4D14(2, 5); + _wallCorner1.setupWall(2, 1); + _northWall.setupWall(1, 3); + _wallCorner2.setupWall(2, 5); break; case 2: R2_GLOBALS._walkRegions.load(1561); - _field419 = 1561; - _actor14.subA4D14(2, 1); - _westWall.subA4D14(2, 2); - _northWall.subA4D14(1, 3); - _actor16.subA4D14(2, 5); + _walkRegionsId = 1561; + _wallCorner1.setupWall(2, 1); + _westWall.setupWall(2, 2); + _northWall.setupWall(1, 3); + _wallCorner2.setupWall(2, 5); break; case 3: R2_GLOBALS._walkRegions.load(1562); - _field419 = 1562; - _actor14.subA4D14(2, 1); - _northWall.subA4D14(1, 3); - _actor16.subA4D14(2, 5); - _eastWall.subA4D14(2, 6); + _walkRegionsId = 1562; + _wallCorner1.setupWall(2, 1); + _northWall.setupWall(1, 3); + _wallCorner2.setupWall(2, 5); + _eastWall.setupWall(2, 6); break; case 4: R2_GLOBALS._walkRegions.load(1563); - _field419 = 1563; - _northWall.subA4D14(2, 3); + _walkRegionsId = 1563; + _northWall.setupWall(2, 3); break; case 5: R2_GLOBALS._walkRegions.load(1564); - _field419 = 1564; - _southWall.subA4D14(2, 4); + _walkRegionsId = 1564; + _southWall.setupWall(2, 4); break; case 6: R2_GLOBALS._walkRegions.load(1565); - _field419 = 1565; - _actor14.subA4D14(1, 1); - _westWall.subA4D14(1, 2); - _northWall.subA4D14(3, 3); + _walkRegionsId = 1565; + _wallCorner1.setupWall(1, 1); + _westWall.setupWall(1, 2); + _northWall.setupWall(3, 3); break; case 7: R2_GLOBALS._walkRegions.load(1566); - _field419 = 1566; - _actor14.subA4D14(1, 1); - _westWall.subA4D14(1, 2); - _northWall.subA4D14(2, 4); + _walkRegionsId = 1566; + _wallCorner1.setupWall(1, 1); + _westWall.setupWall(1, 2); + _northWall.setupWall(2, 4); break; case 8: R2_GLOBALS._walkRegions.load(1567); - _field419 = 1567; - _westWall.subA4D14(5, 2); + _walkRegionsId = 1567; + _westWall.setupWall(5, 2); break; case 9: R2_GLOBALS._walkRegions.load(1568); - _field419 = 1568; - _westWall.subA4D14(4, 2); + _walkRegionsId = 1568; + _westWall.setupWall(4, 2); break; case 10: R2_GLOBALS._walkRegions.load(1569); - _field419 = 1569; - _actor14.subA4D14(3, 1); + _walkRegionsId = 1569; + _wallCorner1.setupWall(3, 1); break; case 11: R2_GLOBALS._walkRegions.load(1570); - _field419 = 1570; - _actor14.subA4D14(1, 1); - _westWall.subA4D14(1, 2); + _walkRegionsId = 1570; + _wallCorner1.setupWall(1, 1); + _westWall.setupWall(1, 2); break; case 12: R2_GLOBALS._walkRegions.load(1571); - _field419 = 1571; - _actor16.subA4D14(1, 5); - _eastWall.subA4D14(1, 6); + _walkRegionsId = 1571; + _wallCorner2.setupWall(1, 5); + _eastWall.setupWall(1, 6); break; case 13: R2_GLOBALS._walkRegions.load(1572); - _field419 = 1572; - _actor14.subA4D14(1, 1); - _westWall.subA4D14(1, 2); - _southWall.subA4D14(1, 4); + _walkRegionsId = 1572; + _wallCorner1.setupWall(1, 1); + _westWall.setupWall(1, 2); + _southWall.setupWall(1, 4); break; case 14: R2_GLOBALS._walkRegions.load(1573); - _field419 = 1573; - _southWall.subA4D14(1, 4); - _actor16.subA4D14(1, 5); - _eastWall.subA4D14(1, 6); + _walkRegionsId = 1573; + _southWall.setupWall(1, 4); + _wallCorner2.setupWall(1, 5); + _eastWall.setupWall(1, 6); break; case 15: // South wall R2_GLOBALS._walkRegions.load(1574); - _field419 = 1574; - _southWall.subA4D14(1, 4); + _walkRegionsId = 1574; + _southWall.setupWall(1, 4); break; case 16: R2_GLOBALS._walkRegions.load(1570); - _field419 = 1570; - _actor14.subA4D14(2, 1); - _westWall.subA4D14(2, 2); + _walkRegionsId = 1570; + _wallCorner1.setupWall(2, 1); + _westWall.setupWall(2, 2); break; case 17: R2_GLOBALS._walkRegions.load(1570); - _field419 = 1570; - _actor14.subA4D14(2, 1); - _westWall.subA4D14(3, 2); + _walkRegionsId = 1570; + _wallCorner1.setupWall(2, 1); + _westWall.setupWall(3, 2); break; case 18: R2_GLOBALS._walkRegions.load(1571); - _field419 = 1571; - _actor16.subA4D14(2, 5); - _eastWall.subA4D14(2, 6); + _walkRegionsId = 1571; + _wallCorner2.setupWall(2, 5); + _eastWall.setupWall(2, 6); break; case 19: R2_GLOBALS._walkRegions.load(1571); - _field419 = 1571; - _actor16.subA4D14(2, 5); - _eastWall.subA4D14(3, 6); + _walkRegionsId = 1571; + _wallCorner2.setupWall(2, 5); + _eastWall.setupWall(3, 6); break; default: break; @@ -9020,9 +8956,9 @@ void Scene1550::enterArea() { (R2_GLOBALS._scene1550JunkLocations[i + 2] != 0)) { tmpIdx = R2_GLOBALS._scene1550JunkLocations[i + 3]; _junk[di].postInit(); - _junk[di]._effect = 6; + _junk[di]._effect = EFFECT_SHADED2; _junk[di]._shade = 0; - _junk[di]._fieldA4 = tmpIdx; + //_junk[di]._junkState = tmpIdx; _junk[di]._junkNumber = i; _junk[di].setDetails(1550, 62, -1, 63, 2, (SceneItem *) NULL); if (R2_GLOBALS._scene1550JunkLocations[i + 2] == 41) { @@ -9036,11 +8972,11 @@ void Scene1550::enterArea() { R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[7]); if (R2_INVENTORY.getObjectScene(R2_JOYSTICK) == 1550) { - _actor9.postInit(); - _actor9.setup(1562, 3, 1); - _actor9.setPosition(Common::Point(150, 70)); - _actor9.fixPriority(10); - _actor9.setDetails(1550, 41, -1, 42, 2, (SceneItem *) NULL); + _joystick.postInit(); + _joystick.setup(1562, 3, 1); + _joystick.setPosition(Common::Point(150, 70)); + _joystick.fixPriority(10); + _joystick.setDetails(1550, 41, -1, 42, 2, (SceneItem *) NULL); } } else { if (R2_GLOBALS._scene1550JunkLocations[i + 2] > 40) { @@ -9050,7 +8986,7 @@ void Scene1550::enterArea() { _junk[di].changeZoom(-1); _junk[di].setup(1552, ((R2_GLOBALS._scene1550JunkLocations[i + 2] - 1) / 5) + 1, ((R2_GLOBALS._scene1550JunkLocations[i + 2] - 1) % 5) + 1); } - _junk[di].setPosition(Common::Point(k5A72E[tmpIdx], k5A73F[tmpIdx])); + _junk[di].setPosition(Common::Point(scene1550JunkX[tmpIdx], scene1550JunkY[tmpIdx])); if (scene1550JunkRegions[tmpIdx] != 0) R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[tmpIdx]); di++; @@ -9058,195 +8994,195 @@ void Scene1550::enterArea() { } } - for (int i = 0; i < 15 * 3; i++) { - if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == k5A79B[i]) - && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == k5A79B[i + 1])) { - tmpIdx = k5A79B[i + 2]; - switch (tmpIdx - 1) { - case 0: + // Loop for detecting and setting up certain special areas within the map + for (int i = 0; i < 15 * 3; i += 3) { + if ((R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].x == scene1550SpecialAreas[i]) + && (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == scene1550SpecialAreas[i + 1])) { + int areaType = scene1550SpecialAreas[i + 2]; + switch (areaType) { + case 1: if (!R2_GLOBALS.getFlag(16)) { - _landingStrut.postInit(); + _wreckage2.postInit(); if (R2_GLOBALS._s1550PlayerArea[R2_GLOBALS._player._characterIndex].y == 3) - _landingStrut.setup(1555, 2, 1); + _wreckage2.setup(1555, 2, 1); else - _landingStrut.setup(1555, 1, 1); - _landingStrut.setPosition(Common::Point(150, 100)); - _landingStrut.fixPriority(92); - _landingStrut.setDetails(1550, 73, -1, -1, 2, (SceneItem *) NULL); + _wreckage2.setup(1555, 1, 1); + _wreckage2.setPosition(Common::Point(150, 100)); + _wreckage2.fixPriority(92); + _wreckage2.setDetails(1550, 73, -1, -1, 2, (SceneItem *) NULL); } break; - case 1: - _actor13.postInit(); - warning("_actor13._actorName = \"dish\";"); + case 2: + _dish.postInit(); if (R2_GLOBALS.getFlag(19)) - _actor13.setup(1556, 3, 5); + _dish.setup(1556, 3, 5); else - _actor13.setup(1556, 3, 1); - _actor13.changeZoom(95); - _actor13.setPosition(Common::Point(165, 83)); - _actor13.fixPriority(168); - _actor13.setDetails(1550, 17, -1, 19, 2, (SceneItem *) NULL); - - _actor12.postInit(); - _actor12.setup(1556, 4, 1); - _actor12.setPosition(Common::Point(191, 123)); - _actor12.changeZoom(95); - _actor12.setDetails(1550, 65, -1, 66, 2, (SceneItem *) NULL); - - _actor5.postInit(); - _actor5._numFrames = 5; + _dish.setup(1556, 3, 1); + _dish.changeZoom(95); + _dish.setPosition(Common::Point(165, 83)); + _dish.fixPriority(168); + _dish.setDetails(1550, 17, -1, 19, 2, (SceneItem *) NULL); + + _dishTower.postInit(); + _dishTower.setup(1556, 4, 1); + _dishTower.setPosition(Common::Point(191, 123)); + _dishTower.changeZoom(95); + _dishTower.setDetails(1550, 65, -1, 66, 2, (SceneItem *) NULL); + + _dishTowerShadow.postInit(); + _dishTowerShadow._numFrames = 5; if (R2_GLOBALS.getFlag(19)) - _actor5.setup(1556, 8, 5); + _dishTowerShadow.setup(1556, 8, 5); else - _actor5.setup(1556, 8, 1); + _dishTowerShadow.setup(1556, 8, 1); - _actor5.setPosition(Common::Point(156, 151)); - _actor5.fixPriority(10); + _dishTowerShadow.setPosition(Common::Point(156, 151)); + _dishTowerShadow.fixPriority(10); - _actor4.postInit(); + _walkway.postInit(); if (R2_GLOBALS.getFlag(20)) - _actor4.setup(1558, 3, 10); + _walkway.setup(1558, 3, 10); else - _actor4.setup(1558, 3, 1); + _walkway.setup(1558, 3, 1); - _actor4.setPosition(Common::Point(172, 48)); - _actor4.fixPriority(169); + _walkway.setPosition(Common::Point(172, 48)); + _walkway.fixPriority(169); R2_GLOBALS._walkRegions.disableRegion(scene1550JunkRegions[15]); break; - case 2: + case 3: _wreckage.postInit(); _wreckage.setup(1550, 1, 1); _wreckage.setPosition(Common::Point(259, 55)); _wreckage.fixPriority(133); _wreckage.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); - _landingStrut.postInit(); - _landingStrut.setup(1550, 1, 2); - _landingStrut.setPosition(Common::Point(259, 133)); - _landingStrut.fixPriority(105); - _landingStrut.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + _wreckage2.postInit(); + _wreckage2.setup(1550, 1, 2); + _wreckage2.setPosition(Common::Point(259, 133)); + _wreckage2.fixPriority(105); + _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); if (R2_INVENTORY.getObjectScene(R2_GYROSCOPE) == 1550) { - _actor10.postInit(); - _actor10.setup(1550, 7, 2); - _actor10.setPosition(Common::Point(227, 30)); - _actor10.fixPriority(130); - _actor10.setDetails(1550, 29, -1, 63, 2, (SceneItem *) NULL); + _gyroscope.postInit(); + _gyroscope.setup(1550, 7, 2); + _gyroscope.setPosition(Common::Point(227, 30)); + _gyroscope.fixPriority(130); + _gyroscope.setDetails(1550, 29, -1, 63, 2, (SceneItem *) NULL); } break; - case 3: + case 4: _wreckage.postInit(); _wreckage.setup(1550, 1, 4); _wreckage.setPosition(Common::Point(76, 131)); _wreckage.fixPriority(10); _wreckage.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); - _landingStrut.postInit(); - _landingStrut.setup(1550, 1, 3); - _landingStrut.setPosition(Common::Point(76, 64)); - _landingStrut.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + _wreckage2.postInit(); + _wreckage2.setup(1550, 1, 3); + _wreckage2.setPosition(Common::Point(76, 64)); + _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); if (R2_INVENTORY.getObjectScene(R2_DIAGNOSTICS_DISPLAY) == 1550) { - _actor11.postInit(); - _actor11.setup(1504, 4, 1); - _actor11.setPosition(Common::Point(49, 35)); - _actor11.animate(ANIM_MODE_2, NULL); - _actor11._numFrames = 4; - _actor11.fixPriority(65); - _actor11.setDetails(1550, 14, 15, 63, 2, (SceneItem *) NULL); + _diagnosticsDisplay.postInit(); + _diagnosticsDisplay.setup(1504, 4, 1); + _diagnosticsDisplay.setPosition(Common::Point(49, 35)); + _diagnosticsDisplay.animate(ANIM_MODE_2, NULL); + _diagnosticsDisplay._numFrames = 4; + _diagnosticsDisplay.fixPriority(65); + _diagnosticsDisplay.setDetails(1550, 14, 15, 63, 2, (SceneItem *) NULL); } if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1550) { - _actor8.postInit(); - _actor8.setup(1550, 7, 1); - _actor8.setPosition(Common::Point(45, 44)); - _actor8.fixPriority(150); - _actor8.setDetails(1550, 44, -1, 63, 2, (SceneItem *) NULL); + _airbag.postInit(); + _airbag.setup(1550, 7, 1); + _airbag.setPosition(Common::Point(45, 44)); + _airbag.fixPriority(150); + _airbag.setDetails(1550, 44, -1, 63, 2, (SceneItem *) NULL); } break; - case 4: + case 5: _wreckage.postInit(); _wreckage.setup(1550, 2, 4); _wreckage.setPosition(Common::Point(243, 131)); _wreckage.fixPriority(10); _wreckage.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); - _landingStrut.postInit(); - _landingStrut.setup(1550, 2, 3); - _landingStrut.setPosition(Common::Point(243, 64)); - _landingStrut.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + _wreckage2.postInit(); + _wreckage2.setup(1550, 2, 3); + _wreckage2.setPosition(Common::Point(243, 64)); + _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); break; - case 5: + case 6: _wreckage.postInit(); _wreckage.setup(1550, 2, 1); _wreckage.setPosition(Common::Point(60, 55)); _wreckage.fixPriority(133); _wreckage.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); - _landingStrut.postInit(); - _landingStrut.setup(1550, 2, 2); - _landingStrut.setPosition(Common::Point(60, 133)); - _landingStrut.fixPriority(106); - _landingStrut.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); + _wreckage2.postInit(); + _wreckage2.setup(1550, 2, 2); + _wreckage2.setPosition(Common::Point(60, 133)); + _wreckage2.fixPriority(106); + _wreckage2.setDetails(1550, 9, -1, -1, 2, (SceneItem *) NULL); break; - case 6: + case 7: _wreckage.postInit(); _wreckage.setup(1550, 3, 1); _wreckage.setPosition(Common::Point(281, 132)); _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); break; - case 7: + case 8: _wreckage.postInit(); _wreckage.setup(1550, 3, 2); _wreckage.setPosition(Common::Point(57, 96)); _wreckage.fixPriority(70); _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); - _landingStrut.postInit(); - _landingStrut.setup(1550, 3, 3); - _landingStrut.setPosition(Common::Point(145, 88)); - _landingStrut.fixPriority(55); - _landingStrut.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); - - _actor2.postInit(); - _actor2.setup(1550, 3, 4); - _actor2.setPosition(Common::Point(64, 137)); - _actor2.fixPriority(115); - _actor2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); - - _actor3.postInit(); - _actor3.setup(1550, 5, 1); - _actor3.setPosition(Common::Point(60, 90)); - _actor3.fixPriority(45); + _wreckage2.postInit(); + _wreckage2.setup(1550, 3, 3); + _wreckage2.setPosition(Common::Point(145, 88)); + _wreckage2.fixPriority(55); + _wreckage2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _wreckage3.postInit(); + _wreckage3.setup(1550, 3, 4); + _wreckage3.setPosition(Common::Point(64, 137)); + _wreckage3.fixPriority(115); + _wreckage3.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _wreckage4.postInit(); + _wreckage4.setup(1550, 5, 1); + _wreckage4.setPosition(Common::Point(60, 90)); + _wreckage4.fixPriority(45); break; - case 8: + case 9: _wreckage.postInit(); _wreckage.setup(1550, 4, 2); _wreckage.setPosition(Common::Point(262, 96)); _wreckage.fixPriority(70); _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); - _landingStrut.postInit(); - _landingStrut.setup(1550, 4, 3); - _landingStrut.setPosition(Common::Point(174, 88)); - _landingStrut.fixPriority(55); - _landingStrut.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); - - _actor2.postInit(); - _actor2.setup(1550, 4, 4); - _actor2.setPosition(Common::Point(255, 137)); - _actor2.fixPriority(115); - _actor2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); - - _actor3.postInit(); - _actor3.setup(1550, 6, 1); - _actor3.setPosition(Common::Point(259, 90)); - _actor3.fixPriority(45); + _wreckage2.postInit(); + _wreckage2.setup(1550, 4, 3); + _wreckage2.setPosition(Common::Point(174, 88)); + _wreckage2.fixPriority(55); + _wreckage2.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _wreckage3.postInit(); + _wreckage3.setup(1550, 4, 4); + _wreckage3.setPosition(Common::Point(255, 137)); + _wreckage3.fixPriority(115); + _wreckage3.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); + + _wreckage4.postInit(); + _wreckage4.setup(1550, 6, 1); + _wreckage4.setPosition(Common::Point(259, 90)); + _wreckage4.fixPriority(45); break; - case 9: + case 10: _wreckage.postInit(); _wreckage.setup(1550, 4, 1); _wreckage.setPosition(Common::Point(38, 132)); _wreckage.setDetails(1550, 56, -1, -1, 2, (SceneItem *) NULL); break; - case 11: + case 12: // Intact ship _shipComponents[7].setupShipComponent(8); _shipComponents[0].setupShipComponent(1); @@ -9256,6 +9192,7 @@ void Scene1550::enterArea() { _shipComponents[4].setupShipComponent(5); _shipComponents[5].setupShipComponent(6); _shipComponents[6].setupShipComponent(7); + break; default: break; } @@ -9264,12 +9201,12 @@ void Scene1550::enterArea() { if (R2_GLOBALS._s1550PlayerArea[R2_QUINN] == R2_GLOBALS._s1550PlayerArea[R2_SEEKER]) { _companion.postInit(); - _companion._effect = 7; + _companion._effect = EFFECT_SHADED2; _companion.changeZoom(-1); - assert((_field419 >= 1550) && (_field419 <= 2008)); - R2_GLOBALS._walkRegions.disableRegion(k5A750[_field419 - 1550]); - _companion.setPosition(Common::Point(k5A72E[k5A76D[_field419 - 1550]], k5A73F[k5A76D[_field419 - 1550]] + 8)); + assert((_walkRegionsId >= 1550) && (_walkRegionsId <= 2008)); + R2_GLOBALS._walkRegions.disableRegion(k5A750[_walkRegionsId - 1550]); + _companion.setPosition(Common::Point(scene1550JunkX[k5A76D[_walkRegionsId - 1550]], scene1550JunkY[k5A76D[_walkRegionsId - 1550]] + 8)); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (R2_GLOBALS._player._characterScene[R2_SEEKER] == 1580) { _companion.setup(1516, 3, 17); @@ -9619,8 +9556,6 @@ void Scene1575::postInit(SceneObjectList *OwnerList) { void Scene1575::remove() { SceneExt::remove(); - R2_GLOBALS._v5589E.top = 3; - R2_GLOBALS._v5589E.bottom = 168; R2_GLOBALS._uiElements._active = true; } @@ -9724,13 +9659,10 @@ void Scene1575::dispatch() { *--------------------------------------------------------------------------*/ Scene1580::Scene1580() { - _field412 = 0; } void Scene1580::synchronize(Serializer &s) { SceneExt::synchronize(s); - - s.syncAsSint16LE(_field412); } bool Scene1580::JoystickPlug::startAction(CursorType action, Event &event) { @@ -9774,7 +9706,7 @@ bool Scene1580::ScreenSlot::startAction(CursorType action, Event &event) { scene->_screenDisplay.setup(1580, 3, 1); scene->_screenDisplay.setPosition(Common::Point(124, 109)); scene->_screenDisplay.fixPriority(20); - scene->_field412 = 1; + //scene->_field412 = 1; scene->_sceneMode = 10; scene->setAction(&scene->_sequenceManager, scene, 1, &R2_GLOBALS._player, NULL); @@ -9914,7 +9846,6 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { loadScene(1580); R2_GLOBALS._sceneManager._fadeMode = FADEMODE_GRADUAL; SceneExt::postInit(); - _field412 = 0; _stripManager.setColors(60, 255); _stripManager.setFontNumber(3); @@ -9955,7 +9886,6 @@ void Scene1580::postInit(SceneObjectList *OwnerList) { _screenDisplay.setup(1580, 3, 1); _screenDisplay.setPosition(Common::Point(124, 109)); _screenDisplay.fixPriority(20); - _screenDisplay.setZoom(200); _sceneMode = 10; } else { @@ -10093,13 +10023,10 @@ bool Scene1625::Wire::startAction(CursorType action, Event &event) { } Scene1625::Scene1625() { - _field412 = 0; } void Scene1625::synchronize(Serializer &s) { SceneExt::synchronize(s); - - s.syncAsSint16LE(_field412); } void Scene1625::postInit(SceneObjectList *OwnerList) { @@ -10225,7 +10152,7 @@ void Scene1625::signal() { setAction(&_sequenceManager, this, 1630, &_teal, &_tealRightArm, NULL); break; } - _field412 = _stripManager._field2E8; + //_field412 = _stripManager._field2E8; _stripManager._field2E8 = 0; break; case 1625: @@ -10349,21 +10276,13 @@ void Scene1625::process(Event &event) { *--------------------------------------------------------------------------*/ Scene1700::Scene1700() { - _field77A = 0; - _field77C = 0; + _walkFlag = 0; } void Scene1700::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field77A); - s.syncAsSint16LE(_field77C); -} - -bool Scene1700::Item2::startAction(CursorType action, Event &event) { - // The original contains a debug trace. It's currently skipped. - // TODO: either add the debug trace, or remove this function and associated class - return SceneHotspot::startAction(action, event); + s.syncAsSint16LE(_walkFlag); } bool Scene1700::RimTransport::startAction(CursorType action, Event &event) { @@ -10373,7 +10292,6 @@ bool Scene1700::RimTransport::startAction(CursorType action, Event &event) { Scene1700 *scene = (Scene1700 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(); - R2_GLOBALS._v558B6.set(80, 0, 240, 200); scene->_sceneMode = 4; Common::Point pt(271, 90); @@ -10383,7 +10301,7 @@ bool Scene1700::RimTransport::startAction(CursorType action, Event &event) { return true; } -bool Scene1700::Actor12::startAction(CursorType action, Event &event) { +bool Scene1700::Companion::startAction(CursorType action, Event &event) { if (action != CURSOR_TALK) return SceneActor::startAction(action, event); @@ -10444,20 +10362,11 @@ void Scene1700::enterArea() { if (_sceneMode != 40) { _ledgeHopper.remove(); - _actor10.remove(); + _hatch.remove(); } - warning("tmpRect = _v5589E;"); - warning("Mouse_hideIfNeeded"); - warning("set_pane_p(_paneNumber);"); - warning("Big loop calling gfx_draw_slice_p"); - - if (_field77A == 0) - _field77A = 1; - else - _field77A = 0; - - warning("set_pane_p(_paneNumber);"); + // The original had manual code here to redraw the background manually when + // changing areas within the scene. Which seems to be totally redundant. if (_sceneMode != 40 && R2_GLOBALS._rimLocation == 0) { // Crashed ledge hopper @@ -10513,7 +10422,7 @@ void Scene1700::enterArea() { // Rim transport vechile located R2_GLOBALS._rimTransportLocation = R2_GLOBALS._rimLocation; if (!R2_GLOBALS.getFlag(15)) - _field77C = 1; + _walkFlag = true; _rimTransport.postInit(); _rimTransport.setup(1700, 3, 1); @@ -10553,44 +10462,44 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._moveDiff = Common::Point(3, 1); } - _actor12.postInit(); - _actor12.animate(ANIM_MODE_1, NULL); - _actor12.setObjectWrapper(new SceneObjectWrapper()); + _companion.postInit(); + _companion.animate(ANIM_MODE_1, NULL); + _companion.setObjectWrapper(new SceneObjectWrapper()); if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - _actor12.setVisage(1506); - _actor12._moveDiff = Common::Point(3, 1); - _actor12.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL); + _companion.setVisage(1506); + _companion._moveDiff = Common::Point(3, 1); + _companion.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL); } else { - _actor12.setVisage(1501); - _actor12._moveDiff = Common::Point(2, 1); - _actor12.setDetails(9001, 1, -1, -1, 1, (SceneItem *) NULL); + _companion.setVisage(1501); + _companion._moveDiff = Common::Point(2, 1); + _companion.setDetails(9001, 1, -1, -1, 1, (SceneItem *) NULL); } R2_GLOBALS._sound1.play(134); - _actor1.postInit(); - _actor1.fixPriority(10); + _playerShadow.postInit(); + _playerShadow.fixPriority(10); if (R2_GLOBALS._player._characterIndex == R2_QUINN) - _actor1.setVisage(1112); + _playerShadow.setVisage(1112); else - _actor1.setVisage(1111); + _playerShadow.setVisage(1111); - _actor1._effect = 5; - _actor1._field9C = _field312; - R2_GLOBALS._player._linkedActor = &_actor1; + _playerShadow._effect = EFFECT_SHADOW_MAP; + _playerShadow._shadowMap = _shadowPaletteMap; + R2_GLOBALS._player._linkedActor = &_playerShadow; - _actor2.postInit(); - _actor2.fixPriority(10); + _companionShadow.postInit(); + _companionShadow.fixPriority(10); if (R2_GLOBALS._player._characterIndex == R2_QUINN) - _actor2.setVisage(1111); + _companionShadow.setVisage(1111); else - _actor2.setVisage(1112); + _companionShadow.setVisage(1112); - _actor2._effect = 5; - _actor2._field9C = _field312; - _actor12._linkedActor = &_actor2; + _companionShadow._effect = EFFECT_SHADOW_MAP; + _companionShadow._shadowMap = _shadowPaletteMap; + _companion._linkedActor = &_companionShadow; R2_GLOBALS._sound1.play(134); @@ -10599,60 +10508,59 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._characterIndex = R2_QUINN; R2_GLOBALS._player.disableControl(); R2_GLOBALS._player.hide(); - _actor12.hide(); + _companion.hide(); - _actor10.postInit(); - warning("_actor10._actorName = \"hatch\";"); - _actor10.hide(); + _hatch.postInit(); + _hatch.hide(); _ledgeHopper.postInit(); _ledgeHopper.setup(1701, 1, 1); _ledgeHopper.setPosition(Common::Point(220, 137)); _ledgeHopper.setDetails(1700, 6, -1, -1, 1, (SceneItem *) NULL); - _actor1.hide(); - _actor2.hide(); + _playerShadow.hide(); + _companionShadow.hide(); R2_GLOBALS._events.setCursor(CURSOR_WALK); _stripManager.start(539, this); _sceneMode = 40; break; case 1750: { R2_GLOBALS._player.setPosition(Common::Point(282, 121)); - _actor12.setPosition(Common::Point(282, 139)); + _companion.setPosition(Common::Point(282, 139)); _sceneMode = 8; Common::Point pt(262, 101); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, this); Common::Point pt2(262, 119); NpcMover *mover2 = new NpcMover(); - _actor12.addMover(mover2, &pt2, this); + _companion.addMover(mover2, &pt2, this); } break; case 1800: { R2_GLOBALS._player.disableControl(); R2_GLOBALS._player.setPosition(Common::Point(0, 86)); - _actor12.setPosition(Common::Point(0, 64)); + _companion.setPosition(Common::Point(0, 64)); _sceneMode = 7; R2_GLOBALS._player.setObjectWrapper(NULL); R2_GLOBALS._player._strip = 1; Common::Point pt(64, 86); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, this); - _actor12.setObjectWrapper(NULL); - _actor12._strip = 1; + _companion.setObjectWrapper(NULL); + _companion._strip = 1; Common::Point pt2(77, 64); NpcMover *mover2 = new NpcMover(); - _actor12.addMover(mover2, &pt2, NULL); + _companion.addMover(mover2, &pt2, NULL); } break; default: if (R2_GLOBALS._player._characterIndex == R2_QUINN) { R2_GLOBALS._player.setPosition(Common::Point(109, 160)); - _actor12.setPosition(Common::Point(156, 160)); + _companion.setPosition(Common::Point(156, 160)); R2_GLOBALS._walkRegions.disableRegion(15); } else { R2_GLOBALS._player.setPosition(Common::Point(156, 160)); - _actor12.setPosition(Common::Point(109, 160)); + _companion.setPosition(Common::Point(109, 160)); R2_GLOBALS._walkRegions.disableRegion(17); } _sceneMode = 50; @@ -10664,10 +10572,10 @@ void Scene1700::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._oldCharacterScene[R2_QUINN] = 1700; R2_GLOBALS._player._oldCharacterScene[R2_SEEKER] = 1700; - R2_GLOBALS._v558B6.set(20, 0, 320, 200); enterArea(); - _item1.setDetails(1, 1700, 3, -1, -1); - _item2.setDetails(Rect(0, 0, 480, 200), 1700, 0, -1, -1, 1, NULL); + + _surface.setDetails(1, 1700, 3, -1, -1); + _background.setDetails(Rect(0, 0, 480, 200), 1700, 0, -1, -1, 1, NULL); } void Scene1700::remove() { @@ -10688,16 +10596,16 @@ void Scene1700::signal() { R2_GLOBALS._player.addMover(mover, &pt, this); if (R2_GLOBALS._player._position.x < 132) { - _actor12.setPosition(Common::Point(156, 170)); + _companion.setPosition(Common::Point(156, 170)); Common::Point pt2(156, 160); NpcMover *mover2 = new NpcMover(); - _actor12.addMover(mover2, &pt2, NULL); + _companion.addMover(mover2, &pt2, NULL); R2_GLOBALS._walkRegions.disableRegion(15); } else { - _actor12.setPosition(Common::Point(109, 170)); + _companion.setPosition(Common::Point(109, 170)); Common::Point pt3(109, 160); NpcMover *mover3 = new NpcMover(); - _actor12.addMover(mover3, &pt3, NULL); + _companion.addMover(mover3, &pt3, NULL); R2_GLOBALS._walkRegions.disableRegion(17); } } @@ -10713,26 +10621,26 @@ void Scene1700::signal() { R2_GLOBALS._player.addMover(mover, &pt, this); if (R2_GLOBALS._player._position.x >= 171) { - _actor12.setPosition(Common::Point(155, 0)); + _companion.setPosition(Common::Point(155, 0)); Common::Point pt2(155, 10); NpcMover *mover2 = new NpcMover(); - _actor12.addMover(mover2, &pt2, NULL); + _companion.addMover(mover2, &pt2, NULL); R2_GLOBALS._walkRegions.disableRegion(15); } else { - _actor12.setPosition(Common::Point(188, 0)); + _companion.setPosition(Common::Point(188, 0)); Common::Point pt3(188, 10); NpcMover *mover3 = new NpcMover(); - _actor12.addMover(mover3, &pt3, NULL); + _companion.addMover(mover3, &pt3, NULL); R2_GLOBALS._walkRegions.disableRegion(17); } } break; case 3: - if (_field77C == 0) { + if (!_walkFlag) { R2_GLOBALS._player.enableControl(CURSOR_WALK); } else { R2_GLOBALS.setFlag(15); - _field77C = 0; + _walkFlag = false; _sceneMode = 31; R2_GLOBALS._events.setCursor(CURSOR_WALK); if (R2_GLOBALS._player._characterIndex == R2_QUINN) @@ -10745,7 +10653,7 @@ void Scene1700::signal() { _sceneMode = 5; Common::Point pt(271, 90); PlayerMover *mover = new PlayerMover(); - _actor12.addMover(mover, &pt, NULL); + _companion.addMover(mover, &pt, NULL); if (R2_GLOBALS._player._characterIndex == R2_QUINN) setAction(&_sequenceManager, this, 1700, &R2_GLOBALS._player, &_rimTransportDoor, NULL); else @@ -10761,14 +10669,14 @@ void Scene1700::signal() { case 7: R2_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); R2_GLOBALS._player._strip = 1; - _actor12.setObjectWrapper(new SceneObjectWrapper()); - _actor12._strip = 1; + _companion.setObjectWrapper(new SceneObjectWrapper()); + _companion._strip = 1; R2_GLOBALS._player.enableControl(CURSOR_WALK); R2_GLOBALS._walkRegions.disableRegion(14); break; case 8: R2_GLOBALS._player._strip = 2; - _actor12._strip = 1; + _companion._strip = 1; R2_GLOBALS._player.enableControl(CURSOR_WALK); R2_GLOBALS._walkRegions.disableRegion(12); break; @@ -10787,7 +10695,8 @@ void Scene1700::signal() { case 40: R2_GLOBALS._player.disableControl(); _sceneMode = 1704; - setAction(&_sequenceManager, this, 1704, &R2_GLOBALS._player, &_actor12, &_actor10, &_ledgeHopper, &_actor1, &_actor2, NULL); + setAction(&_sequenceManager, this, 1704, &R2_GLOBALS._player, &_companion, + &_hatch, &_ledgeHopper, &_playerShadow, &_companionShadow, NULL); break; case 50: if (R2_GLOBALS._player._characterIndex == R2_QUINN) @@ -10958,12 +10867,12 @@ bool Scene1750::SpeedSlider::startAction(CursorType action, Event &event) { Scene1750::Scene1750() { _direction = 0; - _field413 = 0; + _speedCurrent = 0; _speed = 0; - _field417 = 0; - _field419 = 0; - _field41B = 0; - _field41D = 0; + _speedDelta = 0; + _rotationSegment = 0; + _rotationSegCurrent = 0; + _newRotation = 0; _rotation = nullptr; } @@ -10973,20 +10882,21 @@ void Scene1750::synchronize(Serializer &s) { SYNC_POINTER(_rotation); s.syncAsSint16LE(_direction); - s.syncAsSint16LE(_field413); + s.syncAsSint16LE(_speedCurrent); s.syncAsSint16LE(_speed); - s.syncAsSint16LE(_field417); - s.syncAsSint16LE(_field419); - s.syncAsSint16LE(_field41B); - s.syncAsSint16LE(_field41D); + s.syncAsSint16LE(_speedDelta); + s.syncAsSint16LE(_rotationSegment); + s.syncAsSint16LE(_rotationSegCurrent); + s.syncAsSint16LE(_newRotation); } void Scene1750::postInit(SceneObjectList *OwnerList) { loadScene(1750); R2_GLOBALS._sound1.play(115); R2_GLOBALS._uiElements._active = false; - R2_GLOBALS._v5589E.set(0, 0, 320, 200); + SceneExt::postInit(); + R2_GLOBALS._interfaceY = SCREEN_HEIGHT; R2_GLOBALS._player._characterScene[R2_QUINN] = 1750; R2_GLOBALS._player._characterScene[R2_SEEKER] = 1750; @@ -11036,28 +10946,28 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.hide(); R2_GLOBALS._player.enableControl(); - _actor3.postInit(); - _actor3.setup(1750, 3, 1); - _actor3.setPosition(Common::Point(49, 185)); - _actor3.fixPriority(7); - _actor3.setDetails(1750, 30, -1, -1, 1, (SceneItem *) NULL); + _radarSweep.postInit(); + _radarSweep.setup(1750, 3, 1); + _radarSweep.setPosition(Common::Point(49, 185)); + _radarSweep.fixPriority(7); + _radarSweep.setDetails(1750, 30, -1, -1, 1, (SceneItem *) NULL); - _actor1.postInit(); - _actor1.setup(1750, 2, 1); - _actor1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._rimLocation % 800) * 4) - 1440)); - _actor1.fixPriority(8); + _scannerIcon1.postInit(); + _scannerIcon1.setup(1750, 2, 1); + _scannerIcon1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._rimLocation % 800) * 4) - 1440)); + _scannerIcon1.fixPriority(8); - _actor2.postInit(); - _actor2.setup(1750, 1, 4); + _scannerIcon2.postInit(); + _scannerIcon2.setup(1750, 1, 4); - int tmpVar = abs(_actor1._position.y - 158) / 100; + int tmpVar = ABS(_scannerIcon1._position.y - 158) / 100; if (tmpVar >= 8) - _actor2.hide(); - else if (_actor1._position.y <= 158) - _actor2.setPosition(Common::Point(137, (tmpVar * 7) + 122)); + _scannerIcon2.hide(); + else if (_scannerIcon1._position.y <= 158) + _scannerIcon2.setPosition(Common::Point(137, (tmpVar * 7) + 122)); else - _actor2.setPosition(Common::Point(148, (tmpVar * 7) + 122)); + _scannerIcon2.setPosition(Common::Point(148, (tmpVar * 7) + 122)); _speedSlider.setupSlider(1, 286, 143, 41, 15); _speedSlider.setDetails(1750, 24, 1, -1, 1, (SceneItem *) NULL); @@ -11082,10 +10992,10 @@ void Scene1750::postInit(SceneObjectList *OwnerList) { _exitButton.setDetails(1750, 27, 1, -1, 1, (SceneItem *) NULL); _direction = 1; // Forward by default - _field417 = 0; - _field413 = 0; + _speedDelta = 0; + _speedCurrent = 0; _speed = 0; - _field419 = ((_rotation->_currIndex - 218) / 4) % 4; + _rotationSegment = ((_rotation->_currIndex - 218) / 4) % 4; _redLights.setDetails(Rect(129, 112, 155, 175), 1750, 21, -1, -1, 1, NULL); _greenLights.setDetails(Rect(93, 122, 126, 172), 1750, 15, -1, -1, 1, NULL); @@ -11105,8 +11015,6 @@ void Scene1750::remove() { SceneExt::remove(); R2_GLOBALS._sound1.fadeOut2(NULL); - R2_GLOBALS._v5589E.top = 3; - R2_GLOBALS._v5589E.bottom = 168; R2_GLOBALS._uiElements._active = true; } @@ -11122,71 +11030,71 @@ void Scene1750::process(Event &event) { void Scene1750::dispatch() { if (_rotation) { - if (!_field417 && (_speed != _field413)) { - if (_field413 >= _speed) - --_field413; + if (!_speedDelta && (_speed != _speedCurrent)) { + if (_speedCurrent >= _speed) + --_speedCurrent; else - ++_field413; + ++_speedCurrent; - _field417 = 21 - ABS(_field413); + _speedDelta = 21 - ABS(_speedCurrent); } - if (_field417 == 1) { - if (_field413 == 0) { - _actor3.show(); + if (_speedDelta == 1) { + if (_speedCurrent == 0) { + _radarSweep.show(); _rotation->_idxChange = 0; } else { if (_rotation->_idxChange == 0) - _actor3.hide(); + _radarSweep.hide(); - if (_field413 < -12) { - _rotation->setDelay(15 - ABS(_field413)); + if (_speedCurrent < -12) { + _rotation->setDelay(15 - ABS(_speedCurrent)); _rotation->_idxChange = -2; - } else if (_field413 < 0) { - _rotation->setDelay(10 - ABS(_field413)); + } else if (_speedCurrent < 0) { + _rotation->setDelay(10 - ABS(_speedCurrent)); _rotation->_idxChange = -1; - } else if (_field413 < 11) { - _rotation->setDelay(10 - _field413); + } else if (_speedCurrent < 11) { + _rotation->setDelay(10 - _speedCurrent); _rotation->_idxChange = 1; } else { - _rotation->setDelay(15 - _field413); + _rotation->setDelay(15 - _speedCurrent); _rotation->_idxChange = 2; } } } - if (_field417) - --_field417; + if (_speedDelta) + --_speedDelta; - _field41B = _field419; - _field419 = ((_rotation->_currIndex - 218) / 4) / 4; + _rotationSegCurrent = _rotationSegment; + _rotationSegment = ((_rotation->_currIndex - 218) / 4) / 4; - if ((_field41B + 1) == _field419 || (_field41B - 3) == _field419) { + if ((_rotationSegCurrent + 1) == _rotationSegment || (_rotationSegCurrent - 3) == _rotationSegment) { if (R2_GLOBALS._rimLocation < 2400) { ++R2_GLOBALS._rimLocation; } } - if ((_field41B - 1) == _field419 || (_field41B + 3) == _field419) { + if ((_rotationSegCurrent - 1) == _rotationSegment || (_rotationSegCurrent + 3) == _rotationSegment) { if (R2_GLOBALS._rimLocation > -2400) { --R2_GLOBALS._rimLocation; } } - if (_rotation->_currIndex != _field41D) { - _field41D = _rotation->_currIndex; - _actor1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + + if (_rotation->_currIndex != _newRotation) { + _newRotation = _rotation->_currIndex; + _scannerIcon1.setPosition(Common::Point(35, ((_rotation->_currIndex - 218) % 4) + ((R2_GLOBALS._rimLocation % 800) * 4) - 1440)); } } - int v = ABS(_actor1._position.y - 158) / 100; + int v = ABS(_scannerIcon1._position.y - 158) / 100; if (v < 8) { - _actor2.show(); - _actor2.setPosition(Common::Point((_actor1._position.y <= 158) ? 137 : 148, + _scannerIcon2.show(); + _scannerIcon2.setPosition(Common::Point((_scannerIcon1._position.y <= 158) ? 137 : 148, v * 7 + 122)); } else { - _actor2.hide(); + _scannerIcon2.hide(); } } @@ -11360,7 +11268,7 @@ bool Scene1800::PassengerDoor::startAction(CursorType action, Event &event) { return true; } -void Scene1800::Exit1::changeScene() { +void Scene1800::SouthExit::changeScene() { Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -11526,8 +11434,8 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { else _playerShadow.setVisage(1110); - _playerShadow._effect = 5; - _playerShadow._field9C = _field312; + _playerShadow._effect = EFFECT_SHADOW_MAP; + _playerShadow._shadowMap = _shadowPaletteMap; R2_GLOBALS._player._linkedActor = &_playerShadow; @@ -11538,20 +11446,20 @@ void Scene1800::postInit(SceneObjectList *OwnerList) { else _companionShadow.setVisage(1111); - _companionShadow._effect = 5; - _companionShadow._field9C = _field312; + _companionShadow._effect = EFFECT_SHADOW_MAP; + _companionShadow._shadowMap = _shadowPaletteMap; _companion._linkedActor = &_companionShadow; R2_GLOBALS._player._characterScene[R2_QUINN] = 1800; R2_GLOBALS._player._characterScene[R2_SEEKER] = 1800; - _item2.setDetails(Rect(128, 95, 190, 135), 1800, 10, -1, -1, 1, NULL); - _item1.setDetails(Rect(95, 3, 223, 135), 1800, 0, -1, -1, 1, NULL); + _elevatorContents.setDetails(Rect(128, 95, 190, 135), 1800, 10, -1, -1, 1, NULL); + _elevator.setDetails(Rect(95, 3, 223, 135), 1800, 0, -1, -1, 1, NULL); // Original was calling _item3.setDetails(Rect(1800, 11, 24, 23), 25, -1, -1, -1, 1, NULL); // This is *wrong*. The following statement is a wild guess based on good common sense - _item3.setDetails(11, 1800, 23, 24, 25); + _surface.setDetails(11, 1800, 23, 24, 25); _secBackground.setDetails(Rect(0, 0, 320, 200), 1800, 17, -1, 19, 1, NULL); R2_GLOBALS._player.disableControl(); @@ -11741,7 +11649,7 @@ bool Scene1850::Button::startAction(CursorType action, Event &event) { else scene->setAction(&scene->_sequenceManager1, scene, 1852, &R2_GLOBALS._player, NULL); } else if (R2_GLOBALS.getFlag(30)) { - scene->_field41E = 1; + scene->_seqNumber = 1; scene->_sceneMode = 1860; if (R2_GLOBALS.getFlag(32)) @@ -11805,12 +11713,14 @@ bool Scene1850::Robot::startAction(CursorType action, Event &event) { } else if (R2_GLOBALS.getFlag(30)) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1875; - scene->_actor2.postInit(); + scene->_airbag.postInit(); if (R2_GLOBALS.getFlag(32)) - scene->setAction(&scene->_sequenceManager1, scene, 1876, &R2_GLOBALS._player, &scene->_actor2, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1876, + &R2_GLOBALS._player, &scene->_airbag, NULL); else - scene->setAction(&scene->_sequenceManager1, scene, 1875, &R2_GLOBALS._player, &scene->_actor2, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1875, + &R2_GLOBALS._player, &scene->_airbag, NULL); return true; } else if (R2_GLOBALS.getFlag(70)) { @@ -11832,7 +11742,8 @@ bool Scene1850::Robot::startAction(CursorType action, Event &event) { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1878; - scene->setAction(&scene->_sequenceManager1, scene, 1878, &R2_GLOBALS._player, &scene->_robot, &scene->_actor2, NULL); + scene->setAction(&scene->_sequenceManager1, scene, 1878, &R2_GLOBALS._player, + &scene->_robot, &scene->_airbag, NULL); } return true; @@ -11843,7 +11754,7 @@ bool Scene1850::Robot::startAction(CursorType action, Event &event) { } } -bool Scene1850::Actor6::startAction(CursorType action, Event &event) { +bool Scene1850::Door::startAction(CursorType action, Event &event) { if (action != CURSOR_USE) return SceneHotspot::startAction(action, event); @@ -11855,8 +11766,8 @@ bool Scene1850::Actor6::startAction(CursorType action, Event &event) { } R2_GLOBALS._player.disableControl(); - if (scene->_field412 == 1851) - R2_GLOBALS._player._effect = 1; + if (scene->_sceneMode == 1851) + R2_GLOBALS._player._effect = EFFECT_SHADED; if (_position.x >= 160) R2_GLOBALS.setFlag(29); @@ -11865,9 +11776,9 @@ bool Scene1850::Actor6::startAction(CursorType action, Event &event) { if ((R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) { if (_position.x >= 160) - scene->_field41E = 3; + scene->_seqNumber = 3; else - scene->_field41E = 2; + scene->_seqNumber = 2; scene->_sceneMode = 1860; @@ -11909,23 +11820,23 @@ bool Scene1850::DisplayScreen::startAction(CursorType action, Event &event) { /*------------------------------------------------------------------------*/ Scene1850::Scene1850() { - _field412 = 0; - _field414 = 0; - _field416 = 0; - _field418 = 0; - _field41E = 0; + _sceneMode = 0; + _shadeCountdown = 0; + _shadeDirection = 0; + _shadeChanging = false; + _seqNumber = 0; } void Scene1850::synchronize(Serializer &s) { SceneExt::synchronize(s); - s.syncAsSint16LE(_field412); - s.syncAsSint16LE(_field414); - s.syncAsSint16LE(_field416); - s.syncAsSint16LE(_field418); - s.syncAsSint16LE(_field41E); - s.syncAsSint16LE(_field41A.x); - s.syncAsSint16LE(_field41A.y); + s.syncAsSint16LE(_sceneMode); + s.syncAsSint16LE(_shadeCountdown); + s.syncAsSint16LE(_shadeDirection); + s.syncAsSint16LE(_shadeChanging); + s.syncAsSint16LE(_seqNumber); + s.syncAsSint16LE(_playerDest.x); + s.syncAsSint16LE(_playerDest.y); } void Scene1850::postInit(SceneObjectList *OwnerList) { @@ -11937,10 +11848,10 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { _palette1.loadPalette(0); if (R2_GLOBALS.getFlag(31)) { - _field412 = 1850; + _sceneMode = 1850; g_globals->_scenePalette.loadPalette(1850); } else { - _field412 = 1851; + _sceneMode = 1851; g_globals->_scenePalette.loadPalette(1851); } @@ -11952,9 +11863,9 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); - _field418 = 0; - _field41E = 0; - _field41A = Common::Point(0, 0); + _shadeChanging = false; + _seqNumber = 0; + _playerDest = Common::Point(0, 0); R2_GLOBALS._player._characterScene[R2_QUINN] = 1850; R2_GLOBALS._player._characterScene[R2_SEEKER] = 1850; @@ -12004,8 +11915,8 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { } if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1850) { - R2_GLOBALS._player._effect = 6; - _companion._effect = 6; + R2_GLOBALS._player._effect = EFFECT_SHADED2; + _companion._effect = EFFECT_SHADED2; if (R2_GLOBALS.getFlag(31)) { R2_GLOBALS._player._shade = 0; _companion._shade = 0; @@ -12015,21 +11926,21 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { } if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) { - _actor2.postInit(); + _airbag.postInit(); if (R2_GLOBALS.getFlag(34)) { - _actor2.setup(1851, 4, 2); - _actor2.fixPriority(114); + _airbag.setup(1851, 4, 2); + _airbag.fixPriority(114); } else { - _actor2.setup(1851, 4, 1); + _airbag.setup(1851, 4, 1); } - _actor2.setPosition(Common::Point(179, 113)); + _airbag.setPosition(Common::Point(179, 113)); if ((_robot._strip == 1) && (_robot._frame == 3)){ - _actor2.hide(); + _airbag.hide(); } - _actor2.setDetails(1850, 6, -1, -1, 1, (SceneItem *) NULL); + _airbag.setDetails(1850, 6, -1, -1, 1, (SceneItem *) NULL); } if (R2_GLOBALS._player._characterIndex == R2_QUINN) { @@ -12037,40 +11948,40 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setVisage(1511); _companion.setVisage(1508); - _actor3.postInit(); - _actor3.setup(1853, 3, 1); - _actor3.setPosition(Common::Point(122, 113)); - _actor3.fixPriority(114); - _actor3._effect = 6; + _screen.postInit(); + _screen.setup(1853, 3, 1); + _screen.setPosition(Common::Point(122, 113)); + _screen.fixPriority(114); + _screen._effect = EFFECT_SHADED2; // Totally useless test if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - _actor3.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); + _screen.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); } else { // And the associated dead code - _actor3.setDetails(1850, 30, -1, -1, 2, (SceneItem *) NULL); + _screen.setDetails(1850, 30, -1, -1, 2, (SceneItem *) NULL); } - _actor4.postInit(); - _actor4.setup(1853, 3, 2); - _actor4.setPosition(Common::Point(139, 111)); - _actor4.fixPriority(114); - _actor4._effect = 6; + _helmet.postInit(); + _helmet.setup(1853, 3, 2); + _helmet.setPosition(Common::Point(139, 111)); + _helmet.fixPriority(114); + _helmet._effect = EFFECT_SHADED2; // Still totally useless test if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - _actor4.setDetails(1850, 29, -1, -1, 2, (SceneItem *) NULL); + _helmet.setDetails(1850, 29, -1, -1, 2, (SceneItem *) NULL); } else { // Another piece of dead code - _actor4.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); + _helmet.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); } if (R2_GLOBALS.getFlag(31)) { - _actor3._shade = 0; - _actor4._shade = 0; + _screen._shade = 0; + _helmet._shade = 0; } else { - _actor3._shade = 6; - _actor4._shade = 6; + _screen._shade = 6; + _helmet._shade = 6; } } else { R2_GLOBALS._player.setVisage(1500); @@ -12081,40 +11992,40 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.setVisage(1508); _companion.setVisage(1511); - _actor3.postInit(); - _actor3.setup(1853, 3, 1); - _actor3.setPosition(Common::Point(122, 113)); - _actor3.fixPriority(114); - _actor3._effect = 6; + _screen.postInit(); + _screen.setup(1853, 3, 1); + _screen.setPosition(Common::Point(122, 113)); + _screen.fixPriority(114); + _screen._effect = EFFECT_SHADED2; // Totally useless test if (R2_GLOBALS._player._characterIndex == R2_QUINN) { // Dead code - _actor3.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); + _screen.setDetails(1850, 28, -1, -1, 2, (SceneItem *) NULL); } else { - _actor3.setDetails(1850, 30, -1, -1, 2, (SceneItem *) NULL); + _screen.setDetails(1850, 30, -1, -1, 2, (SceneItem *) NULL); } - _actor4.postInit(); - _actor4.setup(1853, 3, 2); - _actor4.setPosition(Common::Point(139, 111)); - _actor4.fixPriority(114); - _actor4._effect = 6; + _helmet.postInit(); + _helmet.setup(1853, 3, 2); + _helmet.setPosition(Common::Point(139, 111)); + _helmet.fixPriority(114); + _helmet._effect = EFFECT_SHADED2; // Again, useless test if (R2_GLOBALS._player._characterIndex == R2_QUINN) { // and dead code - _actor4.setDetails(1850, 29, -1, -1, 1, (SceneItem *) NULL); + _helmet.setDetails(1850, 29, -1, -1, 1, (SceneItem *) NULL); } else { - _actor4.setDetails(1850, 28, -1, -1, 1, (SceneItem *) NULL); + _helmet.setDetails(1850, 28, -1, -1, 1, (SceneItem *) NULL); } if (R2_GLOBALS.getFlag(31)) { - _actor3._shade = 0; - _actor4._shade = 0; + _screen._shade = 0; + _helmet._shade = 0; } else { - _actor3._shade = 6; - _actor4._shade = 6; + _screen._shade = 6; + _helmet._shade = 6; } } else { R2_GLOBALS._player.setVisage(1505); @@ -12157,8 +12068,8 @@ void Scene1850::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.enableControl(); } else { // R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] != 1850 - R2_GLOBALS._player._effect = 1; - _companion._effect = 1; + R2_GLOBALS._player._effect = EFFECT_SHADED; + _companion._effect = EFFECT_SHADED; R2_GLOBALS._player.disableControl(); _sceneMode = 10; if (R2_GLOBALS._player._characterIndex == R2_QUINN) { @@ -12224,10 +12135,10 @@ void Scene1850::remove() { void Scene1850::signal() { switch (_sceneMode) { case 10: - R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._effect = EFFECT_SHADED2; R2_GLOBALS._player._shade = 6; - _companion._effect = 6; + _companion._effect = EFFECT_SHADED2; _companion._shade = 6; R2_GLOBALS._walkRegions.disableRegion(5); @@ -12250,7 +12161,8 @@ void Scene1850::signal() { break; case 16: _sceneMode = 1870; - setAction(&_sequenceManager1, this, 1870, &R2_GLOBALS._player, &_companion, &_actor3, &_actor4, NULL); + setAction(&_sequenceManager1, this, 1870, &R2_GLOBALS._player, &_companion, + &_screen, &_helmet, NULL); break; case 20: R2_GLOBALS._player.enableControl(CURSOR_TALK); @@ -12258,7 +12170,8 @@ void Scene1850::signal() { case 21: R2_GLOBALS._player.disableControl(); _sceneMode = 1877; - setAction(&_sequenceManager1, this, 1877, &R2_GLOBALS._player, &_companion, &_robot, NULL); + setAction(&_sequenceManager1, this, 1877, &R2_GLOBALS._player, &_companion, + &_robot, NULL); break; case 30: R2_GLOBALS._player.disableControl(); @@ -12268,17 +12181,17 @@ void Scene1850::signal() { case 1852: // No break on purpose: case 1853: - if (_field412 == 1851) { + if (_sceneMode == 1851) { // At this point, SceneMode can't be equal to 1851 => dead code R2_GLOBALS.setFlag(31); _palette1.loadPalette(1850); - _field412 = 1850; + _sceneMode = 1850; } else { R2_GLOBALS.clearFlag(31); _palette1.loadPalette(1851); - _field412 = 1851; + _sceneMode = 1851; } - _field418 = 1; + _shadeChanging = true; if (R2_GLOBALS.getFlag(30)) { _displayScreen.setAction(&_sequenceManager2, NULL, 1867, &_displayScreen, NULL); } else if (R2_GLOBALS.getFlag(34)) { @@ -12294,12 +12207,13 @@ void Scene1850::signal() { R2_GLOBALS.setFlag(34); R2_GLOBALS._walkRegions.disableRegion(2); - _actor2.postInit(); - _actor2.setDetails(1850, 6, -1, -1, 5, &_robot); + _airbag.postInit(); + _airbag.setDetails(1850, 6, -1, -1, 5, &_robot); _sceneMode = 1879; - _displayScreen.setAction(&_sequenceManager2, this, 1879, &_robot, &_displayScreen, &_actor2, NULL); + _displayScreen.setAction(&_sequenceManager2, this, 1879, &_robot, + &_displayScreen, &_airbag, NULL); } else { _displayScreen.setAction(&_sequenceManager2, NULL, 1867, &_displayScreen, NULL); } @@ -12309,12 +12223,12 @@ void Scene1850::signal() { else R2_GLOBALS._scenePalette.addFader(_palette1._palette, 256, 5, this); - if (_field412 == 1851) - _field416 = -20; + if (_sceneMode == 1851) + _shadeDirection = -20; else - _field416 = 20; + _shadeDirection = 20; - _field414 = 20; + _shadeCountdown = 20; if (R2_GLOBALS._player._characterIndex == R2_QUINN) { if (_sceneMode == 1879) @@ -12360,16 +12274,16 @@ void Scene1850::signal() { _stripManager.start(575, this); break; case 1860: - if (_field41A.x != 0) { + if (_playerDest.x != 0) { R2_GLOBALS._player.enableControl(); PlayerMover *mover = new PlayerMover(); - R2_GLOBALS._player.addMover(mover, &_field41A, this); + R2_GLOBALS._player.addMover(mover, &_playerDest, this); - _field41A = Common::Point(0, 0); + _playerDest = Common::Point(0, 0); } - switch (_field41E) { + switch (_seqNumber) { case 1: _sceneMode = 1853; if (R2_GLOBALS.getFlag(32)) { @@ -12390,7 +12304,7 @@ void Scene1850::signal() { break; } - _field41E = 0; + _seqNumber = 0; break; case 1870: R2_GLOBALS._walkRegions.disableRegion(5); @@ -12405,36 +12319,36 @@ void Scene1850::signal() { _stripManager.start(561, this); break; case 1877: - _actor3.postInit(); - _actor3._effect = 6; + _screen.postInit(); + _screen._effect = EFFECT_SHADED2; if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - _actor3.setDetails(1850, 28, -1, -1, 2, (SceneItem *)NULL); + _screen.setDetails(1850, 28, -1, -1, 2, (SceneItem *)NULL); } else { - _actor3.setDetails(1850, 30, -1, -1, 2, (SceneItem *)NULL); + _screen.setDetails(1850, 30, -1, -1, 2, (SceneItem *)NULL); } - _actor4.postInit(); - _actor4._effect = 6; + _helmet.postInit(); + _helmet._effect = EFFECT_SHADED2; if (R2_GLOBALS._player._characterIndex == R2_QUINN) { - _actor4.setDetails(1850, 29, -1, -1, 2, (SceneItem *)NULL); + _helmet.setDetails(1850, 29, -1, -1, 2, (SceneItem *)NULL); } else { - _actor4.setDetails(1850, 28, -1, -1, 2, (SceneItem *)NULL); + _helmet.setDetails(1850, 28, -1, -1, 2, (SceneItem *)NULL); } if (R2_GLOBALS.getFlag(31)) { - _actor3._shade = 0; - _actor4._shade = 0; + _screen._shade = 0; + _helmet._shade = 0; } else { - _actor3._shade = 6; - _actor4._shade = 6; + _screen._shade = 6; + _helmet._shade = 6; } R2_GLOBALS.clearFlag(30); _sceneMode = 15; - setAction(&_sequenceManager1, this, 1869, &R2_GLOBALS._player, &_actor3, NULL); - _companion.setAction(&_sequenceManager2, this, 1868, &_companion, &_actor4, NULL); + setAction(&_sequenceManager1, this, 1869, &R2_GLOBALS._player, &_screen, NULL); + _companion.setAction(&_sequenceManager2, this, 1868, &_companion, &_helmet, NULL); break; case 1878: R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 1850); @@ -12460,8 +12374,8 @@ void Scene1850::signal() { void Scene1850::process(Event &event) { if ( (event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_WALK) - && (R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) { - _field41A = event.mousePos; + && (R2_GLOBALS._player._characterIndex == R2_SEEKER) && (R2_GLOBALS.getFlag(30))) { + _playerDest = event.mousePos; R2_GLOBALS._player.disableControl(); _sceneMode = 1860; if (R2_GLOBALS.getFlag(32)) { @@ -12469,7 +12383,7 @@ void Scene1850::process(Event &event) { } else { setAction(&_sequenceManager1, this, 1859, &R2_GLOBALS._player, &_robot, NULL); } - R2_GLOBALS.clearFlag(32); + R2_GLOBALS.clearFlag(30); event.handled = true; } @@ -12477,35 +12391,35 @@ void Scene1850::process(Event &event) { } void Scene1850::dispatch() { - if (_field418 != 0) { - _field414--; - if (_field414 == 0) - _field418 = 0; + if (_shadeChanging) { + _shadeCountdown--; + if (_shadeCountdown == 0) + _shadeChanging = false; - if (_field416 >= 0) { - R2_GLOBALS._player._shade = (_field414 * 6) / _field416; + if (_shadeDirection >= 0) { + R2_GLOBALS._player._shade = (_shadeCountdown * 6) / _shadeDirection; } else { - R2_GLOBALS._player._shade = ((_field414 * 6) / _field416) + 6; + R2_GLOBALS._player._shade = ((_shadeCountdown * 6) / _shadeDirection) + 6; } R2_GLOBALS._player._flags |= OBJFLAG_PANES; _companion._shade = R2_GLOBALS._player._shade; _companion._flags |= OBJFLAG_PANES; - _actor3._shade = R2_GLOBALS._player._shade; - _actor3._flags |= OBJFLAG_PANES; + _screen._shade = R2_GLOBALS._player._shade; + _screen._flags |= OBJFLAG_PANES; - _actor4._shade = R2_GLOBALS._player._shade; - _actor4._flags |= OBJFLAG_PANES; + _helmet._shade = R2_GLOBALS._player._shade; + _helmet._flags |= OBJFLAG_PANES; } if (R2_GLOBALS.getFlag(32)) { - _actor3.setPosition(Common::Point(_displayScreen._position.x - 37, _displayScreen._position.y - 71)); - _actor4.setPosition(Common::Point(_displayScreen._position.x - 20, _displayScreen._position.y - 73)); + _screen.setPosition(Common::Point(_displayScreen._position.x - 37, _displayScreen._position.y - 71)); + _helmet.setPosition(Common::Point(_displayScreen._position.x - 20, _displayScreen._position.y - 73)); } if (R2_INVENTORY.getObjectScene(R2_AIRBAG) == 1850) { - _actor2.setPosition(Common::Point(_displayScreen._position.x + 20, _displayScreen._position.y - 71)); + _airbag.setPosition(Common::Point(_displayScreen._position.x + 20, _displayScreen._position.y - 71)); } Scene::dispatch(); @@ -12536,7 +12450,7 @@ void Scene1875::Button::doButtonPress() { int newFrameNumber; switch (_buttonId) { case 3: - if ((scene->_actor1._frame == 1) && (scene->_button1._strip == 2)) { + if ((scene->_map._frame == 1) && (scene->_button1._strip == 2)) { R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); scene->_sceneMode = 10; @@ -12544,21 +12458,21 @@ void Scene1875::Button::doButtonPress() { } else { R2_GLOBALS._player.disableControl(); scene->_sceneMode = 1890; - scene->_actor2.postInit(); - scene->setAction(&scene->_sequenceManager, scene, 1890, &scene->_actor2, NULL); + scene->_rimPosition.postInit(); + scene->setAction(&scene->_sequenceManager, scene, 1890, &scene->_rimPosition, NULL); } break; case 4: - newFrameNumber = scene->_actor1._frame + 1; + newFrameNumber = scene->_map._frame + 1; if (newFrameNumber > 6) newFrameNumber = 1; - scene->_actor1.setFrame(newFrameNumber); + scene->_map.setFrame(newFrameNumber); break; case 5: - newFrameNumber = scene->_actor1._frame - 1; + newFrameNumber = scene->_map._frame - 1; if (newFrameNumber < 1) newFrameNumber = 6; - scene->_actor1.setFrame(newFrameNumber); + scene->_map.setFrame(newFrameNumber); break; default: break; @@ -12651,9 +12565,9 @@ void Scene1875::postInit(SceneObjectList *OwnerList) { _button4.initButton(4); _button5.initButton(5); - _actor1.postInit(); - _actor1.setup(1855, 4, 1); - _actor1.setPosition(Common::Point(160, 116)); + _map.postInit(); + _map.setup(1855, 4, 1); + _map.setPosition(Common::Point(160, 116)); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.hide(); @@ -12662,8 +12576,8 @@ void Scene1875::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(122); R2_GLOBALS._player.disableControl(); _sceneMode = 11; - _actor2.postInit(); - setAction(&_sequenceManager, this, 1892, &_actor2, NULL); + _rimPosition.postInit(); + setAction(&_sequenceManager, this, 1892, &_rimPosition, NULL); } else { if (R2_GLOBALS._sceneManager._previousScene == 3150) { R2_GLOBALS._sound1.play(116); @@ -12673,8 +12587,8 @@ void Scene1875::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._canWalk = false; } - _item2.setDetails(Rect(43, 14, 275, 122), 1875, 9, 1, -1, 1, NULL); - _item1.setDetails(Rect(0, 0, 320, 200), 1875, 3, -1, -1, 1, NULL); + _screen.setDetails(Rect(43, 14, 275, 122), 1875, 9, 1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 1875, 3, -1, -1, 1, NULL); R2_GLOBALS._player._characterScene[R2_QUINN] = 1875; R2_GLOBALS._player._characterScene[R2_SEEKER] = 1875; @@ -12687,8 +12601,8 @@ void Scene1875::signal() { case 10: R2_GLOBALS._player.disableControl(); _sceneMode = 1891; - _actor2.postInit(); - setAction(&_sequenceManager, this, 1891, &_actor2, NULL); + _rimPosition.postInit(); + setAction(&_sequenceManager, this, 1891, &_rimPosition, NULL); break; case 11: R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -12696,7 +12610,7 @@ void Scene1875::signal() { _stripManager.start(577, this); break; case 1890: - _actor2.remove(); + _rimPosition.remove(); R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; break; @@ -13624,14 +13538,12 @@ void Scene1945::signal() { *--------------------------------------------------------------------------*/ Scene1950::KeypadWindow::KeypadWindow() { - _field20 = 0; _buttonIndex = 0; } void Scene1950::KeypadWindow::synchronize(Serializer &s) { SceneArea::synchronize(s); - s.syncAsByte(_field20); s.syncAsSint16LE(_buttonIndex); } @@ -13801,11 +13713,9 @@ bool Scene1950::Gem::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ Scene1950::Vampire::Vampire() { - _fieldA8 = 0; - _fieldAA = 0; + _deltaX = 0; + _deltaY = 0; _vampireMode = 0; - _fieldAE = 0; - _fieldAF = 0; } void Scene1950::Vampire::synchronize(Serializer &s) { @@ -13813,11 +13723,9 @@ void Scene1950::Vampire::synchronize(Serializer &s) { s.syncAsSint16LE(_deadPosition.x); s.syncAsSint16LE(_deadPosition.y); - s.syncAsSint16LE(_fieldA8); - s.syncAsSint16LE(_fieldAA); + s.syncAsSint16LE(_deltaX); + s.syncAsSint16LE(_deltaY); s.syncAsSint16LE(_vampireMode); - s.syncAsByte(_fieldAE); - s.syncAsByte(_fieldAF); } void Scene1950::Vampire::signal() { @@ -13868,7 +13776,7 @@ void Scene1950::Vampire::signal() { R2_GLOBALS._player.enableControl(); } break; - case 21: + case 21: { // Fatal shot R2_GLOBALS._player.setVisage(22); if (R2_GLOBALS._flubMazeEntryDirection == 3) @@ -13892,23 +13800,24 @@ void Scene1950::Vampire::signal() { R2_GLOBALS._vampireData[scene->_vampireIndex - 1]._isAlive = false; R2_GLOBALS._vampireData[scene->_vampireIndex - 1]._shotsRequired--; R2_GLOBALS._vampireData[scene->_vampireIndex - 1]._position = _position; - _fieldA8 = (_position.x - R2_GLOBALS._player._position.x) / 2; - _fieldAA = (_position.y - R2_GLOBALS._player._position.y) / 2; + _deltaX = (_position.x - R2_GLOBALS._player._position.x) / 2; + _deltaY = (_position.y - R2_GLOBALS._player._position.y) / 2; - _fieldAE = 0; - for (_fieldAF = 0; _fieldAF < 18; ++_fieldAF) - if (!R2_GLOBALS._vampireData[_fieldAF]._isAlive) - ++_fieldAE; + byte vampireCount = 0; + for (byte i = 0; i < 18; ++i) { + if (!R2_GLOBALS._vampireData[i]._isAlive) + ++vampireCount; + } - if (_fieldAE == 18) { + if (vampireCount == 18) { R2_GLOBALS.setFlag(36); _vampireMode = 23; - Common::Point pt(R2_GLOBALS._player._position.x + _fieldA8, R2_GLOBALS._player._position.y + _fieldAA); + Common::Point pt(R2_GLOBALS._player._position.x + _deltaX, R2_GLOBALS._player._position.y + _deltaY); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, this); - } else if (_fieldAE == 1) { + } else if (vampireCount == 1) { _vampireMode = 22; - Common::Point pt(R2_GLOBALS._player._position.x + _fieldA8, R2_GLOBALS._player._position.y + _fieldAA); + Common::Point pt(R2_GLOBALS._player._position.x + _deltaX, R2_GLOBALS._player._position.y + _deltaY); NpcMover *mover = new NpcMover(); R2_GLOBALS._player.addMover(mover, &pt, this); } else { @@ -13921,6 +13830,7 @@ void Scene1950::Vampire::signal() { scene->_westExit._enabled = true; scene->_vampireActive = false; + } break; case 22: SceneItem::display(1950, 18, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, LIST_END); @@ -14893,7 +14803,7 @@ void Scene1950::enterArea() { _vampire._numFrames = 6; _vampire._moveRate = 6; _vampire._moveDiff = Common::Point(3, 2); - _vampire._effect = 1; + _vampire._effect = EFFECT_SHADED; if (!R2_GLOBALS._vampireData[_vampireIndex - 1]._isAlive) { // Show vampire ashes diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h index a663fbe5bc91..0a379002f9b8 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes1.h +++ b/engines/tsage/ringworld2/ringworld2_scenes1.h @@ -422,14 +422,13 @@ class Scene1530 : public SceneExt { }; class Scene1550 : public SceneExt { - class SceneActor1550 : public SceneActor { + class Wall : public SceneActor { public: - void subA4D14(int frameNumber, int strip); + void setupWall(int frameNumber, int strip); }; class Junk : public SceneActor { public: - int _fieldA4; int _junkNumber; Junk(); @@ -449,27 +448,24 @@ class Scene1550 : public SceneExt { void setupShipComponent(int componentId); }; - class UnkObj15503 : public SceneActor { - public: - int _fieldA4; - - UnkObj15503(); - void synchronize(Serializer &s); + class DishControlsWindow : public ModalWindow { + class DishControl : public SceneActor { + public: + int _controlId; - virtual bool startAction(CursorType action, Event &event); - }; + DishControl(); + void synchronize(Serializer &s); - class UnkArea1550 : public SceneArea { + virtual bool startAction(CursorType action, Event &event); + }; public: byte _field20; SceneActor _areaActor; - UnkObj15503 _unkObj155031; - UnkObj15503 _unkObj155032; + DishControl _button; + DishControl _lever; virtual void remove(); - virtual void process(Event &event); virtual void setup2(int visage, int stripFrameNum, int frameNum, int posX, int posY); - virtual void setup3(int resNum, int lookLineNum, int talkLineNum, int useLineNum); }; class WorkingShip : public NamedHotspot { @@ -477,11 +473,6 @@ class Scene1550 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Hotspot3 : public NamedHotspot { - public: - virtual bool startAction(CursorType action, Event &event); - }; - class Wreckage : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); @@ -492,77 +483,71 @@ class Scene1550 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor8 : public SceneActor { + class AirBag : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor9 : public SceneActor { + class Joystick : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor10 : public SceneActor { + class Gyroscope : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor11 : public SceneActor { + class DiagnosticsDisplay : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor12 : public SceneActor { + class DishTower : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor13 : public SceneActor { + class Dish : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Wall : public SceneActor1550 { - // Nothing specific found in the original - // TODO: check if it's an useless class - }; - public: SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; - WorkingShip _shipHull; - WorkingShip _item2; - Hotspot3 _item3; - SceneActor _landingStrut; - SceneActor _actor2; - SceneActor _actor3; - SceneActor _actor4; - SceneActor _actor5; + WorkingShip _intactHull1, _intactHull2; + SceneHotspot _background; + SceneActor _wreckage2; // also used for Lance of Truth landing strut + SceneActor _wreckage3; + SceneActor _wreckage4; + SceneActor _walkway; + SceneActor _dishTowerShadow; Wreckage _wreckage; Companion _companion; - Actor8 _actor8; - Actor9 _actor9; - Actor10 _actor10; - Actor11 _actor11; - Actor12 _actor12; - Actor13 _actor13; + AirBag _airbag; + Joystick _joystick; + Gyroscope _gyroscope; + DiagnosticsDisplay _diagnosticsDisplay; + DishTower _dishTower; + Dish _dish; Junk _junk[8]; - Wall _actor14; + Wall _wallCorner1; Wall _northWall; // Is also reused for landing strip - Wall _actor16; + Wall _wallCorner2; Wall _westWall; // Is also reused for left hand space Wall _eastWall; Wall _southWall; ShipComponent _shipComponents[8]; - UnkArea1550 _unkArea1; + DishControlsWindow _dishControlsWindow; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; - int _field412; - byte _field414; - int _field415; - int _field417; - int _field419; + bool _dontExit; + int _wallType; + int _dishMode; + int _sceneResourceId; + int _walkRegionsId; Scene1550(); void synchronize(Serializer &s); @@ -663,8 +648,6 @@ class Scene1580 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; public: - //CHECKME: Useless variable? - int _field412; SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; JoystickPlug _joystickPlug; @@ -693,8 +676,6 @@ class Scene1625 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; public: - //CHECKME: Useless variable - int _field412; SpeakerMiranda1625 _mirandaSpeaker; SpeakerTeal1625 _tealSpeaker; SpeakerSoldier1625 _soldierSpeaker; @@ -718,16 +699,11 @@ class Scene1625 : public SceneExt { }; class Scene1700 : public SceneExt { - class Item2 : public NamedHotspot { - public: - virtual bool startAction(CursorType action, Event &event); - }; - class RimTransport : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor12 : public SceneActor { + class Companion : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -747,10 +723,10 @@ class Scene1700 : public SceneExt { public: SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; - NamedHotspot _item1; - Item2 _item2; - SceneActor _actor1; - SceneActor _actor2; + NamedHotspot _surface; + NamedHotspot _background; + SceneActor _playerShadow; + SceneActor _companionShadow; SceneActor _slabWest; SceneActor _slabEast; SceneActor _slabShadowWest; @@ -758,16 +734,15 @@ class Scene1700 : public SceneExt { SceneActor _westPlatform; SceneActor _rimTransportDoor; SceneActor _ledgeHopper; - SceneActor _actor10; + SceneActor _hatch; RimTransport _rimTransport; - Actor12 _actor12; + Companion _companion; NorthExit _northExit; SouthExit _southExit; WestExit _westExit; SequenceManager _sequenceManager; - int _field77A; - int _field77C; + bool _walkFlag; Scene1700(); void synchronize(Serializer &s); @@ -814,9 +789,9 @@ class Scene1750 : public SceneExt { NamedHotspot _greenLights; NamedHotspot _frontView; NamedHotspot _rearView; - SceneActor _actor1; - SceneActor _actor2; - SceneActor _actor3; + SceneActor _scannerIcon1; + SceneActor _scannerIcon2; + SceneActor _radarSweep; SpeedSlider _speedSlider; Button _forwardButton; Button _backwardButton; @@ -825,12 +800,12 @@ class Scene1750 : public SceneExt { PaletteRotation *_rotation; int _direction; - int _field413; + int _speedCurrent; int _speed; - int _field417; - int _field419; - int _field41B; - int _field41D; + int _speedDelta; + int _rotationSegment; + int _rotationSegCurrent; + int _newRotation; Scene1750(); virtual void synchronize(Serializer &s); @@ -861,7 +836,7 @@ class Scene1800 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; @@ -869,9 +844,9 @@ class Scene1800 : public SceneExt { int _locationMode; SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; - NamedHotspot _item1; - NamedHotspot _item2; - NamedHotspot _item3; + NamedHotspot _elevator; + NamedHotspot _elevatorContents; + NamedHotspot _surface; NamedHotspot _secBackground; Background _background; SceneActor _playerShadow; @@ -883,7 +858,7 @@ class Scene1800 : public SceneExt { Doors _doors; PassengerDoor _leftDoor; PassengerDoor _rightDoor; - Exit1 _southExit; + SouthExit _southExit; SequenceManager _sequenceManager; Scene1800(); @@ -904,7 +879,7 @@ class Scene1850 : public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor6 : public SceneActor { + class Door : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); }; @@ -914,24 +889,24 @@ class Scene1850 : public SceneExt { }; public: - int _field412; - int _field414; - int _field416; - int _field418; - Common::Point _field41A; - int _field41E; + int _sceneMode; + int _shadeCountdown; + int _shadeDirection; + bool _shadeChanging; + Common::Point _playerDest; + int _seqNumber; ScenePalette _palette1; SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; NamedHotspot _background; Button _button; SceneActor _companion; - SceneActor _actor2; - SceneActor _actor3; - SceneActor _actor4; + SceneActor _airbag; + SceneActor _screen; + SceneActor _helmet; Robot _robot; - Actor6 _leftDoor; - Actor6 _rightDoor; + Door _leftDoor; + Door _rightDoor; DisplayScreen _displayScreen; SequenceManager _sequenceManager1; SequenceManager _sequenceManager2; @@ -963,11 +938,10 @@ class Scene1875 : public SceneExt { public: SpeakerQuinn _quinnSpeaker; SpeakerSeeker _seekerSpeaker; - NamedHotspot _item1; - NamedHotspot _item2; - SceneActor _actor1; - SceneActor _actor2; - SceneActor _actor3; + NamedHotspot _background; + NamedHotspot _screen; + SceneActor _map; + SceneActor _rimPosition; Button _button1; Button _button2; Button _button3; @@ -1130,7 +1104,6 @@ class Scene1950 : public SceneExt { SceneActor _areaActor; KeypadButton _buttons[16]; - byte _field20; int _buttonIndex; KeypadWindow(); @@ -1154,10 +1127,6 @@ class Scene1950 : public SceneExt { public: virtual bool startAction(CursorType action, Event &event); }; - class Actor4 : public SceneActor { - public: - virtual bool startAction(CursorType action, Event &event); - }; class Gem : public SceneActor { public: virtual bool startAction(CursorType action, Event &event); @@ -1165,11 +1134,9 @@ class Scene1950 : public SceneExt { class Vampire : public SceneActor { public: Common::Point _deadPosition; - int _fieldA8; - int _fieldAA; + int _deltaX; + int _deltaY; int _vampireMode; - byte _fieldAE; - byte _fieldAF; Vampire(); void synchronize(Serializer &s); @@ -1252,6 +1219,7 @@ class Scene1950 : public SceneExt { virtual void signal(); virtual void process(Event &event); }; + } // End of namespace Ringworld2 } // End of namespace TsAGE diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.cpp b/engines/tsage/ringworld2/ringworld2_scenes2.cpp index 42df9d6a6a33..f9e5b096c673 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes2.cpp @@ -1367,7 +1367,7 @@ bool Scene2425::Pictographs::startAction(CursorType action, Event &event) { } } -void Scene2425::Exit1::changeScene() { +void Scene2425::SouthEastExit::changeScene() { Scene2425 *scene = (Scene2425 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -1390,7 +1390,7 @@ void Scene2425::postInit(SceneObjectList *OwnerList) { } R2_GLOBALS._sound1.play(200); - _exit1.setDetails(Rect(270, 136, 319, 168), EXITCURSOR_SE, 2000); + _southEastExit.setDetails(Rect(270, 136, 319, 168), EXITCURSOR_SE, 2000); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -1523,7 +1523,7 @@ bool Scene2430::OilLamp::startAction(CursorType action, Event &event) { return true; } -void Scene2430::Exit1::changeScene() { +void Scene2430::SouthExit::changeScene() { Scene2430 *scene = (Scene2430 *)R2_GLOBALS._sceneManager._scene; scene->_sceneMode = 0; @@ -1538,8 +1538,8 @@ void Scene2430::Exit1::changeScene() { void Scene2430::postInit(SceneObjectList *OwnerList) { loadScene(2430); SceneExt::postInit(); - _exit1.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); - _exit1.setDest(Common::Point(108, 160)); + _southExit.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); + _southExit.setDest(Common::Point(108, 160)); if (R2_INVENTORY.getObjectScene(R2_GUNPOWDER) == 2430) { _gunPowder.postInit(); @@ -1673,7 +1673,7 @@ bool Scene2435::Astor::startAction(CursorType action, Event &event) { } } -void Scene2435::Exit1::changeScene() { +void Scene2435::SouthExit::changeScene() { Scene2435 *scene = (Scene2435 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -1693,8 +1693,8 @@ void Scene2435::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_quinnSpeaker); _stripManager.addSpeaker(&_seekerSpeaker); _stripManager.addSpeaker(&_pharishaSpeaker); - _exit1.setDetails(Rect(142, 155, 207, 167), EXITCURSOR_S, 2000); - _exit1.setDest(Common::Point(175, 160)); + _southExit.setDetails(Rect(142, 155, 207, 167), EXITCURSOR_S, 2000); + _southExit.setDest(Common::Point(175, 160)); _astor.postInit(); _astor.setup(2005, 3, 1); _astor.setPosition(Common::Point(219, 106)); @@ -1811,7 +1811,7 @@ bool Scene2440::OilLamp::startAction(CursorType action, Event &event) { return SceneActor::startAction(action, event); } -void Scene2440::Exit1::changeScene() { +void Scene2440::SouthEastExit::changeScene() { Scene2440 *scene = (Scene2440 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -1827,8 +1827,8 @@ void Scene2440::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); R2_GLOBALS._sound1.play(200); // Fix exit cursor, the original was using NW - _exit1.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_SE, 2000); - _exit1.setDest(Common::Point(210, 160)); + _southEastExit.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_SE, 2000); + _southEastExit.setDest(Common::Point(210, 160)); if (R2_INVENTORY.getObjectScene(R2_ALCOHOL_LAMP_2) == 2440) { _oilLamp.postInit(); _oilLamp.setup(2435, 1, 1); @@ -1958,7 +1958,7 @@ bool Scene2450::CareTaker::startAction(CursorType action, Event &event) { } } -void Scene2450::Exit1::changeScene() { +void Scene2450::SouthWestExit::changeScene() { Scene2450 *scene = (Scene2450 *)R2_GLOBALS._sceneManager._scene; if ((R2_GLOBALS._player._characterIndex == R2_SEEKER) || (R2_GLOBALS.getFlag(61))) { @@ -1992,8 +1992,8 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _stripManager.addSpeaker(&_caretakerSpeaker); if (R2_GLOBALS.getFlag(72)) { - _exit1.setDetails(Rect(0, 143, 47, 168), EXITCURSOR_SW, 2000); - _exit1.setDest(Common::Point(10, 160)); + _southWestExit.setDetails(Rect(0, 143, 47, 168), EXITCURSOR_SW, 2000); + _southWestExit.setDest(Common::Point(10, 160)); } if (!R2_GLOBALS.getFlag(61)) { @@ -2070,7 +2070,7 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _careTaker.setPosition(Common::Point(34, 153)); _careTaker.setDetails(2001, 40, -1, -1, 1, (SceneItem *)NULL); - _exit1._enabled = false; + _southWestExit._enabled = false; } } else { R2_GLOBALS._player.postInit(); @@ -2103,7 +2103,7 @@ void Scene2450::postInit(SceneObjectList *OwnerList) { _careTaker.setPosition(Common::Point(34, 153)); _careTaker.setDetails(2001, 40, -1, -1, 1, (SceneItem *)NULL); - _exit1._enabled = false; + _southWestExit._enabled = false; } } R2_GLOBALS._player.enableControl(); @@ -2182,7 +2182,7 @@ void Scene2450::signal() { _stripManager.start(700, this); break; case 2454: - _exit1._enabled = true; + _southWestExit._enabled = true; R2_GLOBALS.setFlag(72); _careTaker.remove(); if (R2_GLOBALS.getFlag(61)) { @@ -2286,7 +2286,7 @@ bool Scene2455::ScrithKey::startAction(CursorType action, Event &event) { return SceneActor::startAction(action, event); } -void Scene2455::Exit1::changeScene() { +void Scene2455::NorthExit::changeScene() { Scene2455 *scene = (Scene2455 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -2306,7 +2306,7 @@ void Scene2455::postInit(SceneObjectList *OwnerList) { } R2_GLOBALS._sound1.play(200); - _exit1.setDetails(Rect(0, 0, 320, 15), EXITCURSOR_N, 2425); + _northExit.setDetails(Rect(0, 0, 320, 15), EXITCURSOR_N, 2425); if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) == 2455) { _scrithKey.postInit(); @@ -2398,7 +2398,7 @@ void Scene2455::signal() { * *--------------------------------------------------------------------------*/ -void Scene2500::Exit1::changeScene() { +void Scene2500::WestExit::changeScene() { Scene2500 *scene = (Scene2500 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -2426,8 +2426,8 @@ void Scene2500::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == -1) R2_GLOBALS._sceneManager._previousScene = 2000; - _exit1.setDetails(Rect(30, 50, 85, 105), EXITCURSOR_W, 2000); - _exit1.setDest(Common::Point(84, 104)); + _westExit.setDetails(Rect(30, 50, 85, 105), EXITCURSOR_W, 2000); + _westExit.setDest(Common::Point(84, 104)); R2_GLOBALS._player.postInit(); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -2532,7 +2532,7 @@ bool Scene2525::GlassDome::startAction(CursorType action, Event &event) { return true; } -void Scene2525::Exit1::changeScene() { +void Scene2525::SouthExit::changeScene() { Scene2525 *scene = (Scene2525 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -2551,7 +2551,7 @@ void Scene2525::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.play(200); R2_GLOBALS._sound2.play(207); - _exit1.setDetails(Rect(86, 155, 228, 168), EXITCURSOR_S, 2000); + _southExit.setDetails(Rect(86, 155, 228, 168), EXITCURSOR_S, 2000); if (R2_INVENTORY.getObjectScene(R2_GLASS_DOME) == 2525) { _glassDome.postInit(); @@ -2690,7 +2690,7 @@ bool Scene2530::Crank::startAction(CursorType action, Event &event) { return true; } -void Scene2530::Exit1::changeScene() { +void Scene2530::SouthExit::changeScene() { Scene2530 *scene = (Scene2530 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -2707,8 +2707,8 @@ void Scene2530::postInit(SceneObjectList *OwnerList) { loadScene(2530); SceneExt::postInit(); - _exit1.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); - _exit1.setDest(Common::Point(108, 160)); + _southExit.setDetails(Rect(68, 155, 147, 168), EXITCURSOR_S, 2000); + _southExit.setDest(Common::Point(108, 160)); if (R2_INVENTORY.getObjectScene(R2_PURE_GRAIN_ALCOHOL) == 2530) { _flask.postInit(); @@ -2839,7 +2839,7 @@ bool Scene2535::TannerMask::startAction(CursorType action, Event &event) { return true; } -void Scene2535::Exit1::changeScene() { +void Scene2535::SouthExit::changeScene() { Scene2535 *scene = (Scene2535 *)R2_GLOBALS._sceneManager._scene; _enabled = false; @@ -2858,8 +2858,8 @@ void Scene2535::postInit(SceneObjectList *OwnerList) { R2_GLOBALS.setFlag(73); R2_INVENTORY.setObjectScene(R2_REBREATHER_TANK, 2535); } - _exit1.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_S, 2000); - _exit1.setDest(Common::Point(210, 160)); + _southExit.setDetails(Rect(172, 155, 250, 167), EXITCURSOR_S, 2000); + _southExit.setDest(Common::Point(210, 160)); if (R2_INVENTORY.getObjectScene(R2_TANNER_MASK) == 2535) { _tannerMask.postInit(); @@ -3072,7 +3072,7 @@ void Scene2700::Action4::signal() { scene->_ghoulHome9.animate(ANIM_MODE_8, 1, NULL); } -void Scene2700::Area1::process(Event &event) { +void Scene2700::SouthExit::process(Event &event) { SceneArea::process(event); if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; @@ -3122,7 +3122,7 @@ void Scene2700::Area1::process(Event &event) { } } -void Scene2700::Area2::process(Event &event) { +void Scene2700::EastExit::process(Event &event) { SceneArea::process(event); if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2700 *scene = (Scene2700 *)R2_GLOBALS._sceneManager._scene; @@ -3182,8 +3182,8 @@ void Scene2700::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._sound1.stop(); R2_GLOBALS._sound2.stop(); - _area1.setDetails(Rect(135, 160, 185, 168), SHADECURSOR_DOWN); - _area2.setDetails(Rect(300, 90, 320, 135), EXITCURSOR_E); + _southExit.setDetails(Rect(135, 160, 185, 168), SHADECURSOR_DOWN); + _eastExit.setDetails(Rect(300, 90, 320, 135), EXITCURSOR_E); _ghoulHome6.postInit(); _ghoulHome6.setup(2700, 1, 1); @@ -3797,7 +3797,7 @@ void Scene2750::Action7::signal() { scene->_folliage7.animate(ANIM_MODE_8, 1, NULL); } -void Scene2750::Area1::process(Event &event) { +void Scene2750::WestExit::process(Event &event) { SceneArea::process(event); if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; @@ -3828,7 +3828,7 @@ void Scene2750::Area1::process(Event &event) { } } -void Scene2750::Area2::process(Event &event) { +void Scene2750::EastExit::process(Event &event) { SceneArea::process(event); if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._player._canWalk) && (_bounds.contains(event.mousePos))) { Scene2750 *scene = (Scene2750 *)R2_GLOBALS._sceneManager._scene; @@ -3863,8 +3863,8 @@ void Scene2750::postInit(SceneObjectList *OwnerList) { loadScene(2750); R2_GLOBALS._sound2.stop(); SceneExt::postInit(); - _area1.setDetails(Rect(0, 90, 20, 135), EXITCURSOR_W); - _area2.setDetails(Rect(300, 90, 320, 135), EXITCURSOR_E); + _westExit.setDetails(Rect(0, 90, 20, 135), EXITCURSOR_W); + _eastExit.setDetails(Rect(300, 90, 320, 135), EXITCURSOR_E); _walkRect1.set(30, 127, 155, 147); _walkRect2.set(130, 142, 210, 167); diff --git a/engines/tsage/ringworld2/ringworld2_scenes2.h b/engines/tsage/ringworld2/ringworld2_scenes2.h index 1d0cfc41f814..d474297d795b 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes2.h +++ b/engines/tsage/ringworld2/ringworld2_scenes2.h @@ -166,7 +166,7 @@ class Scene2425 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthEastExit : public SceneExit { public: virtual void changeScene(); }; @@ -178,7 +178,7 @@ class Scene2425 : public SceneExt { Rope _rope; Pictographs _pictographs1; Pictographs _pictographs2; - Exit1 _exit1; + SouthEastExit _southEastExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -200,7 +200,7 @@ class Scene2430 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; @@ -221,7 +221,7 @@ class Scene2430 : public SceneExt { Companion _companion; GunPowder _gunPowder; OilLamp _oilLamp; - Exit1 _exit1; + SouthExit _southExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -238,7 +238,7 @@ class Scene2435 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; @@ -251,7 +251,7 @@ class Scene2435 : public SceneExt { NamedHotspot _rightWindow; Companion _companion; Astor _astor; - Exit1 _exit1; + SouthExit _southExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -269,7 +269,7 @@ class Scene2440 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthEastExit : public SceneExit { public: virtual void changeScene(); }; @@ -283,7 +283,7 @@ class Scene2440 : public SceneExt { NamedHotspot _bottles; Companion _companion; OilLamp _oilLamp; - Exit1 _exit1; + SouthEastExit _southEastExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -309,7 +309,7 @@ class Scene2450 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthWestExit : public SceneExit { public: virtual void changeScene(); }; @@ -323,7 +323,7 @@ class Scene2450 : public SceneExt { SceneActor _companion; Parker _parker; CareTaker _careTaker; - Exit1 _exit1; + SouthWestExit _southWestExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -345,7 +345,7 @@ class Scene2455 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class NorthExit : public SceneExit { public: virtual void changeScene(); }; @@ -354,7 +354,7 @@ class Scene2455 : public SceneExt { Lamp _lamp; Pool _pool; ScrithKey _scrithKey; - Exit1 _exit1; + NorthExit _northExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -363,7 +363,7 @@ class Scene2455 : public SceneExt { }; class Scene2500 : public SceneExt { - class Exit1 : public SceneExit { + class WestExit : public SceneExit { public: virtual void changeScene(); }; @@ -376,7 +376,7 @@ class Scene2500 : public SceneExt { SceneActor _companion; SceneActor _quinn; SceneActor _ship; - Exit1 _exit1; + WestExit _westExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -394,7 +394,7 @@ class Scene2525 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; @@ -407,7 +407,7 @@ class Scene2525 : public SceneExt { SceneActor _companion; SceneActor _compressor; GlassDome _glassDome; - Exit1 _exit1; + SouthExit _southExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -425,7 +425,7 @@ class Scene2530 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; @@ -438,7 +438,7 @@ class Scene2530 : public SceneExt { SceneActor _companion; Flask _flask; Crank _crank; - Exit1 _exit1; + SouthExit _southExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -455,7 +455,7 @@ class Scene2535 : public SceneExt { bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; @@ -471,7 +471,7 @@ class Scene2535 : public SceneExt { SceneActor _rope; RebreatherTank _rebreatherTank; TannerMask _tannerMask; - Exit1 _exit1; + SouthExit _southExit; SequenceManager _sequenceManager; virtual void postInit(SceneObjectList *OwnerList = NULL); @@ -508,11 +508,11 @@ class Scene2700 : public SceneExt { void signal(); }; - class Area1: public SceneArea { + class SouthExit: public SceneArea { public: void process(Event &event); }; - class Area2: public SceneArea { + class EastExit: public SceneArea { public: void process(Event &event); }; @@ -534,8 +534,8 @@ class Scene2700 : public SceneExt { Action2 _action2; Action3 _action3; Action4 _action4; - Area1 _area1; - Area2 _area2; + SouthExit _southExit; + EastExit _eastExit; Rect _walkRect1, _walkRect2, _walkRect3; Rect _walkRect4, _walkRect5, _walkRect6; SequenceManager _sequenceManager; @@ -578,11 +578,11 @@ class Scene2750 : public SceneExt { void signal(); }; - class Area1: public SceneArea { + class WestExit: public SceneArea { public: void process(Event &event); }; - class Area2: public SceneArea { + class EastExit: public SceneArea { public: void process(Event &event); }; @@ -612,8 +612,8 @@ class Scene2750 : public SceneExt { Action5 _action5; Action6 _action6; Action7 _action7; - Area1 _area1; - Area2 _area2; + WestExit _westExit; + EastExit _eastExit; Rect _walkRect1, _walkRect2, _walkRect3; SequenceManager _sequenceManager; int _areaMode, _moveMode, _stripNumber; diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp index 788b8c77dd91..1c70f5e6c383 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp +++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp @@ -396,7 +396,7 @@ bool Scene3150::LightFixture::startAction(CursorType action, Event &event) { if ((R2_INVENTORY.getObjectScene(R2_LIGHT_BULB) != 3150) && (R2_GLOBALS.getFlag(75))) { R2_GLOBALS._player.disableControl(); scene->_bulbOrWire.postInit(); - scene->_bulbOrWire._effect = 3; + scene->_bulbOrWire._effect = EFFECT_SHADED2; scene->_bulbOrWire._shade = 5; scene->_sceneMode = 3155; scene->setAction(&scene->_sequenceManager, scene, 3155, &R2_GLOBALS._player, &scene->_bulbOrWire, NULL); @@ -417,7 +417,7 @@ bool Scene3150::Toilet::startAction(CursorType action, Event &event) { case R2_PILLOW: R2_GLOBALS._player.disableControl(); scene->_water.postInit(); - scene->_water._effect = 6; + scene->_water._effect = EFFECT_SHADED2; scene->_water._shade = 3; R2_GLOBALS._player.disableControl(); scene->_sceneMode = 3158; @@ -428,7 +428,7 @@ bool Scene3150::Toilet::startAction(CursorType action, Event &event) { (R2_INVENTORY.getObjectScene(R2_SUPERCONDUCTOR_WIRE) == 3150) && (R2_GLOBALS.getFlag(75))) { scene->_foodTray.postInit(); - scene->_foodTray._effect = 6; + scene->_foodTray._effect = EFFECT_SHADED2; scene->_foodTray._shade = 3; scene->_foodTray.setDetails(3150, 30, -1, -1, 2, (SceneItem *)NULL); @@ -579,7 +579,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _guard.postInit(); _guard.setup(3154, 1, 16); _guard.setPosition(Common::Point(104, 129)); - _guard._effect = 6; + _guard._effect = EFFECT_SHADED2; _guard._shade = 3; _guard.setDetails(3150, 24, -1, -1, -1, (SceneItem *)NULL); } @@ -609,7 +609,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { } _water.fixPriority(110); _water.setPosition(Common::Point(83, 88)); - _water._effect = 6; + _water._effect = EFFECT_SHADED2; _water._shade = 3; } else { _water.setup(3152, 7, 3); @@ -629,7 +629,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _bulbOrWire.setup(3152, 7, 3); _bulbOrWire.setPosition(Common::Point(70, 55)); _bulbOrWire.fixPriority(111); - _bulbOrWire._effect = 6; + _bulbOrWire._effect = EFFECT_SHADED2; _bulbOrWire._shade = 5; } @@ -639,7 +639,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { _foodTray.setup(3152, 7, 8); _foodTray.setPosition(Common::Point(82, 92)); _foodTray.fixPriority(111); - _foodTray._effect = 6; + _foodTray._effect = EFFECT_SHADED2; _foodTray._shade = 3; } else { _foodTray.setup(3152, 7, 7); @@ -664,7 +664,7 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { case 0: _sceneMode = 3150; _guard.postInit(); - _guard._effect = 6; + _guard._effect = EFFECT_SHADED2; _guard._shade = 5; setAction(&_sequenceManager, this, 3150, &R2_GLOBALS._player, &_guard, &_doorBars, NULL); break; @@ -685,22 +685,24 @@ void Scene3150::postInit(SceneObjectList *OwnerList) { break; } default: - if ((R2_GLOBALS._v56AA0 == 1) && (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) == 2000) && (R2_GLOBALS._player._oldCharacterScene[R2_QUINN] == 3100)) { - ++R2_GLOBALS._v56AA0; + if ((R2_GLOBALS._mirandaJailState == 1) && (R2_INVENTORY.getObjectScene(R2_ANCIENT_SCROLLS) == 2000) + && (R2_GLOBALS._player._oldCharacterScene[R2_QUINN] == 3100)) { + // Moving story on to Miranda getting food delivered + ++R2_GLOBALS._mirandaJailState; _sceneMode = 3156; _guard.postInit(); - _guard._effect = 6; + _guard._effect = EFFECT_SHADED2; _guard._shade = 3; _doorBars.postInit(); _foodTray.postInit(); - _foodTray._effect = 6; + _foodTray._effect = EFFECT_SHADED2; _foodTray._shade = 3; setAction(&_sequenceManager, this, 3156, &R2_GLOBALS._player, &_guard, &_doorBars, &_foodTray, NULL); } else { - if ((R2_GLOBALS._v56AA0 != 1) && (R2_GLOBALS._v56AA0 != 2)) - ++R2_GLOBALS._v56AA0; + if ((R2_GLOBALS._mirandaJailState != 1) && (R2_GLOBALS._mirandaJailState != 2)) + ++R2_GLOBALS._mirandaJailState; R2_GLOBALS._player.setup(30, 3, 1); R2_GLOBALS._player.animate(ANIM_MODE_1, NULL); @@ -789,12 +791,12 @@ void Scene3150::signal() { void Scene3150::dispatch() { if (_foodTray._position.x == 155) { - _foodTray._effect = 0; + _foodTray._effect = EFFECT_NONE; _foodTray._shade = 0; } if (_guard._visage == 3154) { - _guard._effect = 0; + _guard._effect = EFFECT_NONE; _guard._shade = 0; } @@ -1211,18 +1213,18 @@ void Scene3250::postInit(SceneObjectList *OwnerList) { case 1200: _sceneMode = 3250; _grate.postInit(); - R2_GLOBALS._player._effect = 0; + R2_GLOBALS._player._effect = EFFECT_NONE; setAction(&_sequenceManager, this, 3250, &R2_GLOBALS._player, &_grate, NULL); break; case 3125: if (R2_GLOBALS.getFlag(79)) { _sceneMode = 3254; _ghoul1.postInit(); - _ghoul1._effect = 1; + _ghoul1._effect = EFFECT_SHADED; _ghoul2.postInit(); - _ghoul2._effect = 1; + _ghoul2._effect = EFFECT_SHADED; _ghoul3.postInit(); - _ghoul3._effect = 1; + _ghoul3._effect = EFFECT_SHADED; setAction(&_sequenceManager, this, 3254, &R2_GLOBALS._player, &_rightDoor, &_ghoul1, &_ghoul2, &_ghoul3, &_leftDoor, NULL); } else { @@ -1252,7 +1254,7 @@ void Scene3250::postInit(SceneObjectList *OwnerList) { void Scene3250::signal() { switch(_sceneMode) { case 3250: - R2_GLOBALS._player._effect = 1; + R2_GLOBALS._player._effect = EFFECT_SHADED; R2_GLOBALS._player.enableControl(); break; case 3254: @@ -1274,7 +1276,7 @@ void Scene3250::signal() { void Scene3250::dispatch() { if ((R2_GLOBALS._player._visage == 3250) && (R2_GLOBALS._player._strip == 3) && (R2_GLOBALS._player._effect == 0)) { - R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._effect = EFFECT_SHADED2; R2_GLOBALS._player._shade = 6; } @@ -1305,7 +1307,7 @@ void Scene3255::postInit(SceneObjectList *OwnerList) { _sceneMode = 3257; _door.postInit(); _quinn.postInit(); - _quinn._effect = 1; + _quinn._effect = EFFECT_SHADED; setAction(&_sequenceManager, this, 3257, &R2_GLOBALS._player, &_quinn, &_door, NULL); } else { _teal.postInit(); @@ -1354,9 +1356,9 @@ void Scene3255::dispatch() { if (_ghoul1._position.y <= 110) _ghoul1._shade = 6 - (_ghoul1._position.y - 95) / 3; else - _ghoul1._effect = 1; + _ghoul1._effect = EFFECT_SHADED; } else { - _ghoul1._effect = 6; + _ghoul1._effect = EFFECT_SHADED2; _ghoul1._shade = 6; } @@ -1364,9 +1366,9 @@ void Scene3255::dispatch() { if (_ghoul2._position.y <= 110) _ghoul2._shade = 6 - (_ghoul2._position.y - 95) / 3; else - _ghoul2._effect = 1; + _ghoul2._effect = EFFECT_SHADED; } else { - _ghoul2._effect = 6; + _ghoul2._effect = EFFECT_SHADED2; _ghoul2._shade = 6; } @@ -1374,16 +1376,16 @@ void Scene3255::dispatch() { if (_ghoul3._position.y <= 110) _ghoul3._shade = 6 - (_ghoul3._position.y - 95) / 3; else - _ghoul3._effect = 1; + _ghoul3._effect = EFFECT_SHADED; } else { - _ghoul3._effect = 6; + _ghoul3._effect = EFFECT_SHADED2; _ghoul3._shade = 6; } } if ((R2_GLOBALS._player._position.x > 250) && (R2_GLOBALS._player._shade == 1)) { - R2_GLOBALS._player._effect = 6; - _quinn._effect = 6; + R2_GLOBALS._player._effect = EFFECT_SHADED2; + _quinn._effect = EFFECT_SHADED2; } Scene::dispatch(); } @@ -1478,23 +1480,23 @@ void Scene3260::postInit(SceneObjectList *OwnerList) { _screen6.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); _screen6.setAction(&_action6, &_screen6); - _actor7.postInit(); - _actor7.setup(3260, 2, 1); - _actor7.setPosition(Common::Point(190, 22)); - _actor7.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); - _actor7.setAction(&_action7, &_actor7); + _screen7.postInit(); + _screen7.setup(3260, 2, 1); + _screen7.setPosition(Common::Point(190, 22)); + _screen7.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); + _screen7.setAction(&_action7, &_screen7); - _actor8.postInit(); - _actor8.setup(3260, 2, 1); - _actor8.setPosition(Common::Point(142, 14)); - _actor8.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); - _actor8.setAction(&_action8, &_actor8); + _screen8.postInit(); + _screen8.setup(3260, 2, 1); + _screen8.setPosition(Common::Point(142, 14)); + _screen8.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); + _screen8.setAction(&_action8, &_screen8); - _actor9.postInit(); - _actor9.setup(3260, 2, 1); - _actor9.setPosition(Common::Point(166, 6)); - _actor9.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); - _actor9.setAction(&_action9, &_actor9); + _screen9.postInit(); + _screen9.setup(3260, 2, 1); + _screen9.setPosition(Common::Point(166, 6)); + _screen9.setDetails(3260, 3, 1, 5, 1, (SceneItem *)NULL); + _screen9.setAction(&_action9, &_screen9); _securityConsole.postInit(); _securityConsole.setup(3260, 3, 1); @@ -1521,7 +1523,7 @@ void Scene3260::postInit(SceneObjectList *OwnerList) { _lightingConsole.setDetails(3260, 9, 1, 11, 1, (SceneItem *)NULL); _lightingConsole.animate(ANIM_MODE_2, NULL); - _item1.setDetails(Rect(0, 0, 320, 200), 3260, 0, 1, 2, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 3260, 0, 1, 2, 1, NULL); R2_GLOBALS._player.postInit(); if (R2_GLOBALS._player._oldCharacterScene[R2_MIRANDA] == 3275) { @@ -1762,11 +1764,11 @@ void Scene3375::enterArea(int sceneMode) { R2_GLOBALS._player.setPosition(Common::Point(148, 230)); _companion1.setPosition(Common::Point(191, 274)); - _companion1._effect = 1; + _companion1._effect = EFFECT_SHADED; _companion2.setPosition(Common::Point(124, 255)); - _companion2._effect = 1; + _companion2._effect = EFFECT_SHADED; _webbster.setPosition(Common::Point(155, 245)); - _webbster._effect = 1; + _webbster._effect = EFFECT_SHADED; break; case 3381: --R2_GLOBALS._walkwaySceneNumber; @@ -1780,11 +1782,11 @@ void Scene3375::enterArea(int sceneMode) { R2_GLOBALS._player.setPosition(Common::Point(201, 131)); _companion1.setPosition(Common::Point(231, 127)); - _companion1._effect = 1; + _companion1._effect = EFFECT_SHADED; _companion2.setPosition(Common::Point(231, 127)); - _companion2._effect = 1; + _companion2._effect = EFFECT_SHADED; _webbster.setPosition(Common::Point(231, 127)); - _webbster._effect = 1; + _webbster._effect = EFFECT_SHADED; break; default: R2_GLOBALS._player.setPosition(Common::Point(192, 155)); @@ -1925,7 +1927,7 @@ void Scene3375::DownExit::changeScene() { Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; _moving = false; - R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._effect = EFFECT_SHADED2; R2_GLOBALS._player._shade = 4; R2_GLOBALS._player.disableControl(CURSOR_ARROW); @@ -1947,7 +1949,7 @@ void Scene3375::RightExit::changeScene() { Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene; _moving = false; - R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._effect = EFFECT_SHADED2; R2_GLOBALS._player._shade = 4; R2_GLOBALS._player.disableControl(CURSOR_ARROW); @@ -2034,7 +2036,7 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { _companion1._moveDiff = Common::Point(5, 3); } _companion1.changeZoom(-1); - _companion1._effect = 1; + _companion1._effect = EFFECT_SHADED; int tmpStrip, tmpVisage; if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -2053,7 +2055,7 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { _companion2.postInit(); _companion2._moveDiff = Common::Point(3, 2); _companion2.changeZoom(-1); - _companion2._effect = 1; + _companion2._effect = EFFECT_SHADED; if (R2_GLOBALS._sceneManager._previousScene == 3385) tmpStrip = 1; else @@ -2071,7 +2073,7 @@ void Scene3375::postInit(SceneObjectList *OwnerList) { _webbster._moveRate = 7; _webbster._moveDiff = Common::Point(5, 3); _webbster.changeZoom(-1); - _webbster._effect = 1; + _webbster._effect = EFFECT_SHADED; if (R2_GLOBALS._sceneManager._previousScene == 3385) tmpStrip = 1; else @@ -2126,10 +2128,10 @@ void Scene3375::signalCase3379() { _sceneMode = 1; ADD_MOVER(R2_GLOBALS._player, 70, R2_GLOBALS._player._position.y); R2_GLOBALS._sceneManager._previousScene = 3375; - R2_GLOBALS._player._effect = 1; - _companion1._effect = 1; - _companion2._effect = 1; - _webbster._effect = 1; + R2_GLOBALS._player._effect = EFFECT_SHADED; + _companion1._effect = EFFECT_SHADED; + _companion2._effect = EFFECT_SHADED; + _webbster._effect = EFFECT_SHADED; return; //R2_GLOBALS._walkRegions.disableRegion(1); @@ -2159,10 +2161,10 @@ void Scene3375::signalCase3379() { break; } R2_GLOBALS._sceneManager._previousScene = 3375; - R2_GLOBALS._player._effect = 1; - _companion1._effect = 1; - _companion2._effect = 1; - _webbster._effect = 1; + R2_GLOBALS._player._effect = EFFECT_SHADED; + _companion1._effect = EFFECT_SHADED; + _companion2._effect = EFFECT_SHADED; + _webbster._effect = EFFECT_SHADED; R2_GLOBALS._player.enableControl(CURSOR_WALK); } @@ -2183,11 +2185,11 @@ void Scene3375::signal() { _sceneMode = _newSceneMode; _newSceneMode = 0; - _companion1._effect = 6; + _companion1._effect = EFFECT_SHADED2; _companion1._shade = 4; - _companion2._effect = 6; + _companion2._effect = EFFECT_SHADED2; _companion2._shade = 4; - _webbster._effect = 6; + _webbster._effect = EFFECT_SHADED2; _webbster._shade = 4; enterArea(_sceneMode); break; @@ -2212,24 +2214,24 @@ void Scene3375::signal() { void Scene3375::dispatch() { if ((R2_GLOBALS._player._position.y >= 168) && (R2_GLOBALS._player._effect == 1)) - R2_GLOBALS._player._effect = 6; + R2_GLOBALS._player._effect = EFFECT_SHADED2; else if ((R2_GLOBALS._player._position.y < 168) && (R2_GLOBALS._player._effect == 6)) - R2_GLOBALS._player._effect = 1; + R2_GLOBALS._player._effect = EFFECT_SHADED; if ((_companion1._position.y >= 168) && (_companion1._effect == 1)) - _companion1._effect = 6; + _companion1._effect = EFFECT_SHADED2; else if ((_companion1._position.y < 168) && (_companion1._effect == 6)) - _companion1._effect = 1; + _companion1._effect = EFFECT_SHADED; if ((_companion2._position.y >= 168) && (_companion2._effect == 1)) - _companion2._effect = 6; + _companion2._effect = EFFECT_SHADED2; else if ((_companion2._position.y < 168) && (_companion2._effect == 6)) - _companion2._effect = 1; + _companion2._effect = EFFECT_SHADED; if ((_webbster._position.y >= 168) && (_webbster._effect == 1)) - _webbster._effect = 6; + _webbster._effect = EFFECT_SHADED2; else if ((_webbster._position.y < 168) && (_webbster._effect == 6)) - _webbster._effect = 1; + _webbster._effect = EFFECT_SHADED; Scene::dispatch(); } @@ -2309,7 +2311,7 @@ bool Scene3385::Door::startAction(CursorType action, Event &event) { return true; } -void Scene3385::Exit1::changeScene() { +void Scene3385::SouthExit::changeScene() { Scene3385 *scene = (Scene3385 *)R2_GLOBALS._sceneManager._scene; R2_GLOBALS._player.disableControl(CURSOR_ARROW); @@ -2384,7 +2386,7 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { _companion1._moveDiff = Common::Point(5, 3); } _companion1.changeZoom(-1); - _companion1._effect = 1; + _companion1._effect = EFFECT_SHADED; if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _companion1.setup(10, _playerStrip, 1); else @@ -2395,7 +2397,7 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { _companion2.postInit(); _companion2._moveDiff = Common::Point(3, 2); _companion2.changeZoom(-1); - _companion2._effect = 1; + _companion2._effect = EFFECT_SHADED; if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) _companion2.setup(10, _playerStrip, 1); else @@ -2406,13 +2408,13 @@ void Scene3385::postInit(SceneObjectList *OwnerList) { _webbster.postInit(); _webbster._moveDiff = Common::Point(3, 2); _webbster.changeZoom(-1); - _webbster._effect = 1; + _webbster._effect = EFFECT_SHADED; _webbster.setup(40, _playerStrip, 1); _webbster.animate(ANIM_MODE_1, NULL); _webbster.setDetails(3385, 15, -1, -1, 1, (SceneItem *) NULL); - _exit1.setDetails(Rect(103, 152, 217, 170), SHADECURSOR_DOWN, 3395); - _exit1.setDest(Common::Point(158, 151)); + _southExit.setDetails(Rect(103, 152, 217, 170), SHADECURSOR_DOWN, 3395); + _southExit.setDest(Common::Point(158, 151)); _door.postInit(); _door.setPosition(Common::Point(160, 100)); @@ -2607,7 +2609,7 @@ void Scene3395::postInit(SceneObjectList *OwnerList) { _companion1._moveDiff = Common::Point(5, 3); } _companion1.changeZoom(-1); - _companion1._effect = 1; + _companion1._effect = EFFECT_SHADED; if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _companion1.setup(10, _playerStrip, 1); else @@ -2618,7 +2620,7 @@ void Scene3395::postInit(SceneObjectList *OwnerList) { _companion2.postInit(); _companion2._moveDiff = Common::Point(3, 2); _companion2.changeZoom(-1); - _companion2._effect = 1; + _companion2._effect = EFFECT_SHADED; if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) _companion2.setup(10, _playerStrip, 1); else @@ -2629,7 +2631,7 @@ void Scene3395::postInit(SceneObjectList *OwnerList) { _webbster.postInit(); _webbster._moveDiff = Common::Point(3, 2); _webbster.changeZoom(-1); - _webbster._effect = 1; + _webbster._effect = EFFECT_SHADED; _webbster.setup(40, _playerStrip, 1); _webbster.animate(ANIM_MODE_1, NULL); _webbster.setDetails(3395, 18, -1, -1, 1, (SceneItem *) NULL); @@ -2715,7 +2717,6 @@ void Scene3400::postInit(SceneObjectList *OwnerList) { loadScene(3400); _soundFaded = false; - R2_GLOBALS._v558B6.set(60, 0, 260, 200); SceneExt::postInit(); R2_GLOBALS._sound1.play(317); @@ -2732,10 +2733,10 @@ void Scene3400::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._characterScene[R2_SEEKER] = 3400; R2_GLOBALS._player._characterScene[R2_MIRANDA] = 3400; - _actor7.postInit(); - _actor7.setup(3403, 1, 1); - _actor7.setPosition(Common::Point(190, 103)); - _actor7.fixPriority(89); + _manholeCover.postInit(); + _manholeCover.setup(3403, 1, 1); + _manholeCover.setPosition(Common::Point(190, 103)); + _manholeCover.fixPriority(89); R2_GLOBALS._player.postInit(); if (R2_GLOBALS._player._characterIndex == R2_SEEKER) @@ -2764,7 +2765,7 @@ void Scene3400::postInit(SceneObjectList *OwnerList) { _companion1._moveDiff = Common::Point(5, 3); } _companion1.changeZoom(-1); - _companion1._effect = 1; + _companion1._effect = EFFECT_SHADED; _companion1.setPosition(Common::Point(247, 63)); if (R2_GLOBALS._player._characterIndex == R2_SEEKER) _companion1.setup(10, 5, 1); @@ -2775,7 +2776,7 @@ void Scene3400::postInit(SceneObjectList *OwnerList) { _companion2.postInit(); _companion2._moveDiff = Common::Point(3, 2); _companion2.changeZoom(-1); - _companion2._effect = 1; + _companion2._effect = EFFECT_SHADED; _companion2.setPosition(Common::Point(225, 63)); if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) _companion2.setup(10, 5, 1); @@ -2787,16 +2788,16 @@ void Scene3400::postInit(SceneObjectList *OwnerList) { _webbster._numFrames = 7; _webbster._moveDiff = Common::Point(5, 3); _webbster.changeZoom(-1); - _webbster._effect = 1; + _webbster._effect = EFFECT_SHADED; _webbster.setPosition(Common::Point(235, 61)); _webbster.setup(40, 3, 1); _webbster.animate(ANIM_MODE_1, NULL); - _actor6.postInit(); - _actor6.setup(3400, 1, 6); - _actor6.setPosition(Common::Point(236, 51)); - _actor6.fixPriority(51); - _actor6.animate(ANIM_MODE_6, NULL); + _door.postInit(); + _door.setup(3400, 1, 6); + _door.setPosition(Common::Point(236, 51)); + _door.fixPriority(51); + _door.animate(ANIM_MODE_6, NULL); R2_GLOBALS.clearFlag(71); _sceneMode = 3400; @@ -2860,29 +2861,29 @@ void Scene3400::signal() { _teal.setStrip(1); _sceneMode = 3403; if (R2_GLOBALS._player._characterIndex == R2_SEEKER) - setAction(&_sequenceManager, this, 3403, &R2_GLOBALS._player, &_webbster, &_actor7, NULL); + setAction(&_sequenceManager, this, 3403, &R2_GLOBALS._player, &_webbster, &_manholeCover, NULL); else - setAction(&_sequenceManager, this, 3403, &_companion1, &_webbster, &_actor7, NULL); + setAction(&_sequenceManager, this, 3403, &_companion1, &_webbster, &_manholeCover, NULL); break; case 3309: warning("STUB: sub_1D227()"); _teal.setStrip(1); _sceneMode = 3405; if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) - setAction(&_sequenceManager, this, 3405, &R2_GLOBALS._player, &_actor7, NULL); + setAction(&_sequenceManager, this, 3405, &R2_GLOBALS._player, &_manholeCover, NULL); else - setAction(&_sequenceManager, this, 3405, &_companion2, &_actor7, NULL); + setAction(&_sequenceManager, this, 3405, &_companion2, &_manholeCover, NULL); break; case 3310: warning("STUB: sub_1D227()"); _teal.setStrip(1); _sceneMode = 3406; if (R2_GLOBALS._player._characterIndex == R2_QUINN) - setAction(&_sequenceManager, this, 3406, &R2_GLOBALS._player, &_actor7, NULL); + setAction(&_sequenceManager, this, 3406, &R2_GLOBALS._player, &_manholeCover, NULL); else if (R2_GLOBALS._player._characterIndex == R2_SEEKER) - setAction(&_sequenceManager, this, 3406, &_companion1, &_actor7, NULL); + setAction(&_sequenceManager, this, 3406, &_companion1, &_manholeCover, NULL); else if (R2_GLOBALS._player._characterIndex == R2_MIRANDA) - setAction(&_sequenceManager, this, 3406, &_companion2, &_actor7, NULL); + setAction(&_sequenceManager, this, 3406, &_companion2, &_manholeCover, NULL); break; case 3311: warning("STUB: sub_1D227()"); @@ -2890,7 +2891,7 @@ void Scene3400::signal() { _teal.show(); _teal.setStrip(1); _sceneMode = 3407; - setAction(&_sequenceManager, this, 3407, &_teal, &_actor7, NULL); + setAction(&_sequenceManager, this, 3407, &_teal, &_manholeCover, NULL); break; case 3400: { _actor8.postInit(); @@ -2899,7 +2900,7 @@ void Scene3400::signal() { _teal._numFrames = 7; _teal._moveDiff = Common::Point(3, 2); _teal.changeZoom(-1); - _teal._effect = 1; + _teal._effect = EFFECT_SHADED; _teal.setPosition(Common::Point(-15, 90)); _teal.setup(3402, 1, 1); _teal.animate(ANIM_MODE_1, NULL); @@ -2949,88 +2950,89 @@ void Scene3400::signal() { *--------------------------------------------------------------------------*/ Scene3500::Action1::Action1() { - _field1E = 0; - _field20 = 0; + _direction = 0; + _field20 = false; _field22 = 0; - _field24 = 0; + _field24 = false; } void Scene3500::Action1::synchronize(Serializer &s) { Action::synchronize(s); - s.syncAsSint16LE(_field1E); + s.syncAsSint16LE(_direction); s.syncAsSint16LE(_field20); s.syncAsSint16LE(_field22); s.syncAsSint16LE(_field24); } -void Scene3500::Action1::sub108670(int arg1) { +void Scene3500::Action1::handleHorzButton(int direction) { Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; - _field1E = arg1; - _field20 = 1; - _field24 = 1; + // Direction: -1 == Left, 1 == Right + _direction = direction; + _field20 = true; + _field24 = true; - scene->_actor9.setStrip(2); - scene->_actor9.show(); + scene->_tunnelHorzCircle.setStrip(2); + scene->_tunnelHorzCircle.show(); - if (_field1E == 1) - scene->_actor6.show(); + if (_direction == 1) + scene->_symbolRight.show(); else - scene->_actor5.show(); + scene->_symbolLeft.show(); - if (scene->_actor1._frame % 2 == 0) { - scene->_actor1._frameChange = _field1E; - scene->_actor1.setFrame(scene->_actor1.changeFrame()); + if (scene->_shuttle._frame % 2 == 0) { + scene->_shuttle._frameChange = _direction; + scene->_shuttle.setFrame(scene->_shuttle.changeFrame()); } setActionIndex(0); } -void Scene3500::Action1::sub108732(int arg1) { +void Scene3500::Action1::turnShuttle(bool arg1) { Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; _field20 = arg1; - _field1E = -_field1E; + _direction = -_direction; - if (_field1E == 1) { - scene->_actor6.show(); - scene->_actor5.hide(); + if (_direction == 1) { + scene->_symbolRight.show(); + scene->_symbolLeft.hide(); } else { - scene->_actor5.show(); - scene->_actor6.hide(); + scene->_symbolLeft.show(); + scene->_symbolRight.hide(); } switch (_actionIndex) { case 4: - scene->_actor1._frameChange = _field1E; - scene->_actor1.setFrame(scene->_actor1.changeFrame()); + scene->_shuttle._frameChange = _direction; + scene->_shuttle.setFrame(scene->_shuttle.changeFrame()); // No break on purpose case 3: _actionIndex = 10; setDelay(0); break; case 5: { - scene->_fieldAF8 = 160; + scene->_moverVertX = 160; Common::Point pt(160, 73); NpcMover *mover = new NpcMover(); - scene->_actor8.addMover(mover, &pt, NULL); + scene->_tunnelVertCircle.addMover(mover, &pt, NULL); - scene->_fieldB9E = 160 - (_field1E * 2 * 160); - Common::Point pt2(scene->_fieldB9E, 73); + scene->_moverHorzX = 160 - (_direction * 2 * 160); + Common::Point pt2(scene->_moverHorzX, 73); NpcMover *mover2 = new NpcMover(); - scene->_actor9.addMover(mover2, &pt2, this); + scene->_tunnelHorzCircle.addMover(mover2, &pt2, this); _actionIndex = 11; } break; case 6: - scene->_actor1._frameChange = _field1E; - scene->_actor1.setFrame(scene->_actor1.changeFrame()); + scene->_shuttle._frameChange = _direction; + scene->_shuttle.setFrame(scene->_shuttle.changeFrame()); setDelay(1); // No break on purpose case 8: - scene->_actor9.setStrip(2); + scene->_tunnelHorzCircle.setStrip(2); _actionIndex = 1; break; default: @@ -3045,38 +3047,38 @@ void Scene3500::Action1::signal() { case 0: R2_GLOBALS._player.disableControl(); scene->_directionChangesEnabled = false; - if (scene->_field1270 != 0) { - scene->_field1270 = 0; + if (scene->_speed != 0) { + scene->_speed = 0; scene->_mazeChangeAmount = 0; - scene->_field1272 = 0; + scene->_field1272 = false; scene->_rotation->_idxChange = 0; } break; case 1: - if ((scene->_actor1._frame % 2) == 1) { + if ((scene->_shuttle._frame % 2) == 1) { setDelay(1); return; } // No break on purpose case 3: - scene->_actor1._frameChange = _field1E; - scene->_actor1.setFrame(scene->_actor1.changeFrame()); + scene->_shuttle._frameChange = _direction; + scene->_shuttle.setFrame(scene->_shuttle.changeFrame()); setDelay(1); break; case 4: { - int si = scene->_mazeUI.getCellFromMapXY(Common::Point(scene->_mazePosition.x + 70, scene->_mazePosition.y + 46)); + int cellId = scene->_mazeUI.getCellFromMapXY(Common::Point(scene->_mazePosition.x + 70, scene->_mazePosition.y + 46)); int var2 = scene->_mazeUI.cellFromX(scene->_mazePosition.x + 70) - 70; int var4 = scene->_mazeUI.cellFromY(scene->_mazePosition.y + 46) - 46; int di = abs(var2 - scene->_mazePosition.x); int var6 = abs(var4 - scene->_mazePosition.y); - if ((scene->_actor1._frame % 2) != 0) { - scene->_actor1._frameChange = _field1E; - scene->_actor1.setFrame(scene->_actor1.changeFrame()); + if ((scene->_shuttle._frame % 2) != 0) { + scene->_shuttle._frameChange = _direction; + scene->_shuttle.setFrame(scene->_shuttle.changeFrame()); } // Get the new direction starting on - int var8 = (scene->_action1._field1E * 2 + scene->_mazeDirection); + int var8 = (scene->_action1._direction * 2 + scene->_mazeDirection); if (var8 > MAZEDIR_NORTHWEST) var8 = MAZEDIR_NORTH; else if (var8 < MAZEDIR_NORTH) @@ -3086,98 +3088,98 @@ void Scene3500::Action1::signal() { // movement is started again switch (var8) { case MAZEDIR_NORTH: - if ( ((si != 2) && (si != 3) && (si != 6) && (si != 1) && (si != 23) && (si != 24) && (si != 4) && (si != 11)) + if ( ((cellId != 2) && (cellId != 3) && (cellId != 6) && (cellId != 1) && (cellId != 23) && (cellId != 24) && (cellId != 4) && (cellId != 11)) || (var6 != 0)) { - if ((si != 25) && (si != 26) && (si != 5) && (si != 14) && (si != 15)) - _field20 = 0; + if ((cellId != 25) && (cellId != 26) && (cellId != 5) && (cellId != 14) && (cellId != 15)) + _field20 = false; else if ((var6 != 0) || (di <= 3)) // useless, skipped: "|| (di == 0)" - _field20 = 0; + _field20 = false; else - _field20 = 1; + _field20 = true; } else - _field20 = 1; + _field20 = true; break; case MAZEDIR_EAST: - if ( ((si != 12) && (si != 13) && (si != 11) && (si != 16) && (si != 26) && (si != 24) && (si != 15) && (si != 6) && (si != 31)) + if ( ((cellId != 12) && (cellId != 13) && (cellId != 11) && (cellId != 16) && (cellId != 26) && (cellId != 24) && (cellId != 15) && (cellId != 6) && (cellId != 31)) || (di != 0)) { - if ((si != 25) && (si != 23) && (si != 14) && (si != 5) && (si != 4)) - _field20 = 0; + if ((cellId != 25) && (cellId != 23) && (cellId != 14) && (cellId != 5) && (cellId != 4)) + _field20 = false; else if ((di != 0) || (var6 <= 3)) // useless, skipped: "|| (var6 == 0)" - _field20 = 0; + _field20 = false; else - _field20 = 1; + _field20 = true; } else - _field20 = 1; + _field20 = true; break; case MAZEDIR_SOUTH: - if ( ((si != 2) && (si != 3) && (si != 6) && (si != 1) && (si != 25) && (si != 26) && (si != 5) && (si != 16) && (si != 31)) + if ( ((cellId != 2) && (cellId != 3) && (cellId != 6) && (cellId != 1) && (cellId != 25) && (cellId != 26) && (cellId != 5) && (cellId != 16) && (cellId != 31)) || (var6 != 0)) { - if ((si != 23) && (si != 24) && (si != 4) && (si != 14) && (si != 15)) - _field20 = 0; + if ((cellId != 23) && (cellId != 24) && (cellId != 4) && (cellId != 14) && (cellId != 15)) + _field20 = false; else if ((var6 != 0) || (di <= 3)) // useless, skipped: "|| (di == 0)" - _field20 = 0; + _field20 = false; else - _field20 = 1; + _field20 = true; } else - _field20 = 1; + _field20 = true; break; case MAZEDIR_WEST: - if ( ((si != 12) && (si != 13) && (si != 11) && (si != 16) && (si != 25) && (si != 23) && (si != 14) && (si != 1) && (si != 31)) + if ( ((cellId != 12) && (cellId != 13) && (cellId != 11) && (cellId != 16) && (cellId != 25) && (cellId != 23) && (cellId != 14) && (cellId != 1) && (cellId != 31)) || (var6 != 0)) { - if ((si != 26) && (si != 24) && (si != 15) && (si != 5) && (si != 4)) - _field20 = 0; + if ((cellId != 26) && (cellId != 24) && (cellId != 15) && (cellId != 5) && (cellId != 4)) + _field20 = false; else if ((var6 <= 0) || (di != 0)) // useless, skipped: "|| (var6 == 0)" - _field20 = 0; + _field20 = false; else - _field20 = 1; + _field20 = true; } else - _field20 = 1; + _field20 = true; default: break; } } // No break on purpose case 2: { - scene->_actor8.setPosition(Common::Point(160, 73)); - scene->_actor8._moveDiff.x = 160 - scene->_mazeChangeAmount; - scene->_fieldAF8 = 160 - ((_field1E * 2) * 160); - Common::Point pt(scene->_fieldAF8, 73); + scene->_tunnelVertCircle.setPosition(Common::Point(160, 73)); + scene->_tunnelVertCircle._moveDiff.x = 160 - scene->_mazeChangeAmount; + scene->_moverVertX = 160 - ((_direction * 2) * 160); + Common::Point pt(scene->_moverVertX, 73); NpcMover *mover = new NpcMover(); - scene->_actor8.addMover(mover, &pt, this); + scene->_tunnelVertCircle.addMover(mover, &pt, this); - scene->_actor9.setPosition(Common::Point(160 + ((_field1E * 2) * 160), 73)); - scene->_actor9._moveDiff.x = 160 - scene->_mazeChangeAmount; - scene->_fieldB9E = 160; - Common::Point pt2(scene->_fieldB9E, 73); + scene->_tunnelHorzCircle.setPosition(Common::Point(160 + ((_direction * 2) * 160), 73)); + scene->_tunnelHorzCircle._moveDiff.x = 160 - scene->_mazeChangeAmount; + scene->_moverHorzX = 160; + Common::Point pt2(scene->_moverHorzX, 73); NpcMover *mover2 = new NpcMover(); - scene->_actor9.addMover(mover2, &pt2, NULL); + scene->_tunnelHorzCircle.addMover(mover2, &pt2, NULL); } break; case 5: - scene->_actor1._frameChange = _field1E; - scene->_mazeDirection = scene->_actor1.changeFrame(); - scene->_actor1.setFrame(scene->_mazeDirection); + scene->_shuttle._frameChange = _direction; + scene->_mazeDirection = scene->_shuttle.changeFrame(); + scene->_shuttle.setFrame(scene->_mazeDirection); setDelay(1); break; case 6: - scene->_actor8.setPosition(Common::Point(160, 73)); - if (_field20 == 0) - scene->_actor8.setStrip(1); + scene->_tunnelVertCircle.setPosition(Common::Point(160, 73)); + if (!_field20) + scene->_tunnelVertCircle.setStrip(1); else - scene->_actor8.setStrip(2); - scene->_actor8.fixPriority(1); + scene->_tunnelVertCircle.setStrip(2); + scene->_tunnelVertCircle.fixPriority(1); - scene->_actor9.setPosition(Common::Point(-160, 73)); - scene->_actor9.setStrip(9); - scene->_actor9.fixPriority(11); - scene->_actor9.hide(); + scene->_tunnelHorzCircle.setPosition(Common::Point(-160, 73)); + scene->_tunnelHorzCircle.setStrip(9); + scene->_tunnelHorzCircle.fixPriority(11); + scene->_tunnelHorzCircle.hide(); setDelay(1); break; case 7: - if ((scene->_actor1._frame % 2) == 0) { - scene->_actor1._frameChange = _field1E; - scene->_mazeDirection = scene->_actor1.changeFrame(); - scene->_actor1.setFrame(scene->_mazeDirection); + if ((scene->_shuttle._frame % 2) == 0) { + scene->_shuttle._frameChange = _direction; + scene->_mazeDirection = scene->_shuttle.changeFrame(); + scene->_shuttle.setFrame(scene->_mazeDirection); } setDelay(1); break; @@ -3185,15 +3187,15 @@ void Scene3500::Action1::signal() { R2_GLOBALS._player.enableControl(); R2_GLOBALS._player._canWalk = false; scene->_directionChangesEnabled = true; - if ((scene->_actor1._frame % 2) == 0) { - scene->_actor1._frameChange = _field1E; - scene->_actor1.setFrame(scene->_actor1.changeFrame()); + if ((scene->_shuttle._frame % 2) == 0) { + scene->_shuttle._frameChange = _direction; + scene->_shuttle.setFrame(scene->_shuttle.changeFrame()); } // All the var_8 initialization was missing in the original // but it's clearly a cut and paste error from case 4. // The following code allows the switch to work properly. warning("Checkme: fix for dead code"); - int var_8 = (_field1E * 2 + scene->_mazeDirection); + int var_8 = (_direction * 2 + scene->_mazeDirection); if (var_8 > 7) var_8 = 1; else if (var_8 < 1) @@ -3214,47 +3216,47 @@ void Scene3500::Action1::signal() { default: break; } - scene->_actor5.hide(); - scene->_actor6.hide(); - _field24 = 0; - if (_field20 == 0) { - scene->_actor7.sub1094ED(); - if (scene->_mazeChangeAmount == scene->_field1270) + scene->_symbolLeft.hide(); + scene->_symbolRight.hide(); + _field24 = false; + if (!_field20) { + scene->_throttle.updateSpeed(); + if (scene->_mazeChangeAmount == scene->_speed) scene->_aSound1.play(276); } break; } case 10: { - scene->_fieldAF8 = 160; + scene->_moverVertX = 160; Common::Point pt(160, 73); NpcMover *mover = new NpcMover(); - scene->_actor8.addMover(mover, &pt, NULL); + scene->_tunnelVertCircle.addMover(mover, &pt, NULL); - scene->_fieldB9E = 160 - (_field1E * 2 * 160); - Common::Point pt2(scene->_fieldB9E, 73); + scene->_moverHorzX = 160 - (_direction * 2 * 160); + Common::Point pt2(scene->_moverHorzX, 73); NpcMover *mover2 = new NpcMover(); - scene->_actor9.addMover(mover2, &pt2, this); + scene->_tunnelHorzCircle.addMover(mover2, &pt2, this); _actionIndex = 6; } break; case 11: { - scene->_actor8.setStrip(2); - scene->_actor8.setPosition(Common::Point(160, 73)); - scene->_fieldAF8 = 160 - (_field1E * 2 * 160); - Common::Point pt(scene->_fieldAF8, 73); + scene->_tunnelVertCircle.setStrip(2); + scene->_tunnelVertCircle.setPosition(Common::Point(160, 73)); + scene->_moverVertX = 160 - (_direction * 2 * 160); + Common::Point pt(scene->_moverVertX, 73); NpcMover *mover = new NpcMover(); - scene->_actor8.addMover(mover, &pt, NULL); - scene->_actor8.fixPriority(11); - if (_field20 == 0) - scene->_actor9.setStrip(1); + scene->_tunnelVertCircle.addMover(mover, &pt, NULL); + scene->_tunnelVertCircle.fixPriority(11); + if (!_field20) + scene->_tunnelHorzCircle.setStrip(1); else - scene->_actor9.setStrip(2); - scene->_actor9.setPosition(Common::Point(160 - (_field1E * 2 * 160), 73)); - scene->_fieldB9E = 160; - Common::Point pt2(scene->_fieldB9E, 73); + scene->_tunnelHorzCircle.setStrip(2); + scene->_tunnelHorzCircle.setPosition(Common::Point(160 - (_direction * 2 * 160), 73)); + scene->_moverHorzX = 160; + Common::Point pt2(scene->_moverHorzX, 73); NpcMover *mover2 = new NpcMover(); - scene->_actor9.addMover(mover2, &pt2, this); - scene->_actor9.fixPriority(1); + scene->_tunnelHorzCircle.addMover(mover2, &pt2, this); + scene->_tunnelHorzCircle.fixPriority(1); _actionIndex = 5; } break; @@ -3276,23 +3278,24 @@ void Scene3500::Action1::dispatch() { /*--------------------------------------------------------------------------*/ Scene3500::Action2::Action2() { - _field1E = 0; + _direction = 0; } void Scene3500::Action2::synchronize(Serializer &s) { Action::synchronize(s); - s.syncAsSint16LE(_field1E); + s.syncAsSint16LE(_direction); } -void Scene3500::Action2::sub10831F(int arg1) { +void Scene3500::Action2::handleVertButton(int direction) { Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; - _field1E = arg1; - if (_field1E == -1) - scene->_actor3.setFrame2(3); + // Directions : 2 == up, -1 == down + _direction = direction; + if (_direction == -1) + scene->_horizontalSpeedDisplay.setFrame2(3); else - scene->_actor3.setFrame2(1); + scene->_horizontalSpeedDisplay.setFrame2(1); setActionIndex(0); } @@ -3300,57 +3303,57 @@ void Scene3500::Action2::sub10831F(int arg1) { void Scene3500::Action2::signal() { Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; - int si; - int di; + int vertX; + int horzX; switch (_actionIndex++) { case 0: { - if (scene->_actor8._mover) { - si = scene->_fieldAF8; - di = scene->_fieldB9E; + if (scene->_tunnelVertCircle._mover) { + vertX = scene->_moverVertX; + horzX = scene->_moverHorzX; } else { - scene->_fieldAF8 = scene->_actor8._position.x; - si = scene->_fieldAF8; - scene->_fieldB9E = scene->_actor9._position.y; - di = scene->_fieldB9E; + scene->_moverVertX = scene->_tunnelVertCircle._position.x; + vertX = scene->_moverVertX; + scene->_moverHorzX = scene->_tunnelHorzCircle._position.y; + horzX = scene->_moverHorzX; } - scene->_actor8._moveDiff.y = 9 - (scene->_mazeChangeAmount / 2); - Common::Point pt(si, 73 - (_field1E * 12)); + scene->_tunnelVertCircle._moveDiff.y = 9 - (scene->_mazeChangeAmount / 2); + Common::Point pt(vertX, 73 - (_direction * 12)); NpcMover *mover = new NpcMover(); - scene->_actor8.addMover(mover, &pt, NULL); + scene->_tunnelVertCircle.addMover(mover, &pt, NULL); - scene->_actor9._moveDiff.y = 9 - (scene->_mazeChangeAmount / 2); - Common::Point pt2(di, 73 - (_field1E * 12)); + scene->_tunnelHorzCircle._moveDiff.y = 9 - (scene->_mazeChangeAmount / 2); + Common::Point pt2(horzX, 73 - (_direction * 12)); NpcMover *mover2 = new NpcMover(); - scene->_actor9.addMover(mover2, &pt2, NULL); + scene->_tunnelHorzCircle.addMover(mover2, &pt2, NULL); scene->_mazeChangeAmount = (scene->_mazeChangeAmount / 2) + (scene->_mazeChangeAmount % 2); setDelay(17 - scene->_mazeChangeAmount); } break; case 1: { R2_GLOBALS._sound2.play(339); - if (scene->_actor8._mover) { - si = scene->_fieldAF8; - di = scene->_fieldB9E; + if (scene->_tunnelVertCircle._mover) { + vertX = scene->_moverVertX; + horzX = scene->_moverHorzX; } else { - si = scene->_actor8._position.x; - di = scene->_actor9._position.x; + vertX = scene->_tunnelVertCircle._position.x; + horzX = scene->_tunnelHorzCircle._position.x; } - scene->_actor7.sub1094ED(); + scene->_throttle.updateSpeed(); - scene->_actor8._moveDiff.y = 9 - (scene->_mazeChangeAmount / 2); - Common::Point pt(si, 73); + scene->_tunnelVertCircle._moveDiff.y = 9 - (scene->_mazeChangeAmount / 2); + Common::Point pt(vertX, 73); NpcMover *mover = new NpcMover(); - scene->_actor8.addMover(mover, &pt, NULL); + scene->_tunnelVertCircle.addMover(mover, &pt, NULL); - scene->_actor9._moveDiff.y = 9 - (scene->_mazeChangeAmount / 2); - Common::Point pt2(di, 73); + scene->_tunnelHorzCircle._moveDiff.y = 9 - (scene->_mazeChangeAmount / 2); + Common::Point pt2(horzX, 73); NpcMover *mover2 = new NpcMover(); - scene->_actor9.addMover(mover2, &pt2, NULL); + scene->_tunnelHorzCircle.addMover(mover2, &pt2, NULL); - scene->_actor3.setFrame2(2); + scene->_horizontalSpeedDisplay.setFrame2(2); } break; default: @@ -3386,87 +3389,87 @@ bool Scene3500::DirectionButton::startAction(CursorType action, Event &event) { /*--------------------------------------------------------------------------*/ -Scene3500::Actor7::Actor7() { - _fieldA8 = 0; - _fieldAA = 0; - _fieldAC = 0; - _fieldAE = 0; +Scene3500::Throttle::Throttle() { + _deltaX = 1; + _deltaY = 0; + _slideDeltaY = 0; + _deltaMouseY = 0; } -void Scene3500::Actor7::synchronize(Serializer &s) { +void Scene3500::Throttle::synchronize(Serializer &s) { SceneActor::synchronize(s); s.syncAsSint16LE(_pos.x); s.syncAsSint16LE(_pos.y); - s.syncAsSint16LE(_fieldA8); - s.syncAsSint16LE(_fieldAA); - s.syncAsSint16LE(_fieldAC); - s.syncAsSint16LE(_fieldAE); + s.syncAsSint16LE(_deltaX); + s.syncAsSint16LE(_deltaY); + s.syncAsSint16LE(_slideDeltaY); + s.syncAsSint16LE(_deltaMouseY); } -void Scene3500::Actor7::sub109466(int xp, int yp, int arg3, int arg4, int arg5) { - _fieldAE = 0; +void Scene3500::Throttle::init(int xp, int yp, int dx, int dy, int speed) { + _deltaMouseY = 0; _pos = Common::Point(xp, yp); - _fieldA8 = arg3; - _fieldAA = arg4; - _fieldAC = _fieldAA / _fieldA8; + _deltaX = dx; + _deltaY = dy; + _slideDeltaY = _deltaY / _deltaX; postInit(); setup(1050, 3, 1); fixPriority(255); - sub109663(arg5); + setSpeed(speed); } -void Scene3500::Actor7::sub1094ED() { +void Scene3500::Throttle::updateSpeed() { Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; - scene->_field1270 = _position.x - _pos.x; + scene->_speed = _position.x - _pos.x; } -void Scene3500::Actor7::sub109663(int arg1){ - changePosition(Common::Point(_pos.x + arg1, _pos.y - (_fieldAC * arg1))); +void Scene3500::Throttle::setSpeed(int arg1){ + changePosition(Common::Point(_pos.x + arg1, _pos.y - (_slideDeltaY * arg1))); } -void Scene3500::Actor7::changePosition(const Common::Point &pt) { +void Scene3500::Throttle::changePosition(const Common::Point &pt) { setPosition(pt); } -void Scene3500::Actor7::process(Event &event) { +void Scene3500::Throttle::process(Event &event) { Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; if (!scene->_directionChangesEnabled) return; if ((event.eventType == EVENT_BUTTON_DOWN) && (R2_GLOBALS._events.getCursor() == CURSOR_USE) && (_bounds.contains(event.mousePos))) { - _fieldAE = 1 + event.mousePos.y - _position.y; + _deltaMouseY = 1 + event.mousePos.y - _position.y; event.eventType = EVENT_NONE; } - if ((event.eventType == EVENT_BUTTON_UP) && (_fieldAE != 0)) { - _fieldAE = 0; + if ((event.eventType == EVENT_BUTTON_UP) && (_deltaMouseY != 0)) { + _deltaMouseY = 0; event.handled = true; - if (scene->_action1._field24 == 0) - sub1094ED(); + if (!scene->_action1._field24) + updateSpeed(); } - if (_fieldAE == 0) + if (_deltaMouseY == 0) return; R2_GLOBALS._sound2.play(338); event.handled = true; - int cx = event.mousePos.y - _fieldAE + 1; + int cx = event.mousePos.y - _deltaMouseY + 1; if (_pos.y >= cx) { - if (_pos.y - _fieldAA <= cx) + if (_pos.y - _deltaY <= cx) changePosition(Common::Point(((_pos.y - cx) / 2) + _pos.x + ((_pos.y - cx) % 2), cx)); else - changePosition(Common::Point(_pos.x + _fieldA8, _pos.y - _fieldAA)); + changePosition(Common::Point(_pos.x + _deltaX, _pos.y - _deltaY)); } else { changePosition(Common::Point(_pos.x, _pos.y)); } } -bool Scene3500::Actor7::startAction(CursorType action, Event &event) { +bool Scene3500::Throttle::startAction(CursorType action, Event &event) { Scene3500 *scene = (Scene3500 *)R2_GLOBALS._sceneManager._scene; if (!scene->_directionChangesEnabled) { @@ -3508,19 +3511,16 @@ bool Scene3500::MazeUI3500::setMazePosition2(Common::Point &p) { /*--------------------------------------------------------------------------*/ Scene3500::Scene3500() { - _fieldAF8 = 0; - _fieldB9E = 0; + _moverVertX = 0; + _moverHorzX = 0; _rotation = NULL; _mazeChangeAmount = 0; - _field1270 = 0; - _field1272 = 0; - _field1274 = 0; + _speed = 0; + _field1272 = false; _mazeDirection = MAZEDIR_NONE; - _field1278 = 0; + _nextMove = 0; _mazePosition.x = 0; _mazePosition.y = 0; - _field127E = 0; - _field1280 = 0; _field1282 = 0; _field1284 = 0; _directionChangesEnabled = false; @@ -3530,18 +3530,15 @@ void Scene3500::synchronize(Serializer &s) { SceneExt::synchronize(s); SYNC_POINTER(_rotation); - s.syncAsSint16LE(_fieldAF8); - s.syncAsSint16LE(_fieldB9E); + s.syncAsSint16LE(_moverVertX); + s.syncAsSint16LE(_moverHorzX); s.syncAsSint16LE(_mazeChangeAmount); - s.syncAsSint16LE(_field1270); + s.syncAsSint16LE(_speed); s.syncAsSint16LE(_field1272); - s.syncAsSint16LE(_field1274); s.syncAsSint16LE(_mazeDirection); - s.syncAsSint16LE(_field1278); + s.syncAsSint16LE(_nextMove); s.syncAsSint16LE(_mazePosition.x); s.syncAsSint16LE(_mazePosition.y); - s.syncAsSint16LE(_field127E); - s.syncAsSint16LE(_field1280); s.syncAsSint16LE(_field1282); s.syncAsSint16LE(_field1284); s.syncAsSint16LE(_directionChangesEnabled); @@ -3554,7 +3551,6 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._uiElements._active = false; R2_GLOBALS._interfaceY = SCREEN_HEIGHT; - R2_GLOBALS._v5589E.set(0, 0, 320, 200); R2_GLOBALS._sound1.play(305); R2_GLOBALS._player._characterIndex = R2_QUINN; R2_GLOBALS._player._characterScene[R2_QUINN] = 3500; @@ -3562,9 +3558,9 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player._characterScene[R2_MIRANDA] = 3500; _field1284 = 0; _field1282 = 0; - _field1278 = 0; - _field1272 = 1; - _field1270 = 4; + _nextMove = 0; + _field1272 = true; + _speed = 4; _mazeChangeAmount = 4; _mazePosition = Common::Point(860, 891); _rotation = R2_GLOBALS._scenePalette.addRotation(240, 254, -1); @@ -3588,8 +3584,8 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._scenePalette._palette[(3 * i) + 2] = tmpPal[(3 * i) + 2]; } - _actor7.sub109466(38, 165, 16, 32, _field1270); - _actor7.setDetails(3500, 6, 7, -1, 1, (SceneItem *)NULL); + _throttle.init(38, 165, 16, 32, _speed); + _throttle.setDetails(3500, 6, 7, -1, 1, (SceneItem *)NULL); R2_GLOBALS._sound1.play(276); _pitchDown._movementId = 88; @@ -3604,60 +3600,60 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { _turnRight._movementId = 96; _turnRight.setDetails(96, 3500, 12, 10, -1); - _actor8.postInit(); - _actor8.setup(1050, 1, 1); - _actor8.setPosition(Common::Point(160, 73)); - _actor8.fixPriority(1); + _tunnelVertCircle.postInit(); + _tunnelVertCircle.setup(1050, 1, 1); + _tunnelVertCircle.setPosition(Common::Point(160, 73)); + _tunnelVertCircle.fixPriority(1); - _actor9.postInit(); - _actor9.setup(1050, 2, 1); - _actor9.setPosition(Common::Point(-160, 73)); - _actor9.fixPriority(11); - _actor9.hide(); + _tunnelHorzCircle.postInit(); + _tunnelHorzCircle.setup(1050, 2, 1); + _tunnelHorzCircle.setPosition(Common::Point(-160, 73)); + _tunnelHorzCircle.fixPriority(11); + _tunnelHorzCircle.hide(); - _item2.setDetails(27, 3500, 21, -1, -1); - _item3.setDetails(Rect(160, 89, 299, 182), 3500, 3, -1, -1, 1, NULL); - _item1.setDetails(Rect(0, 0, 320, 200), 3500, 0, -1, 2, 1, NULL); + _outsideView.setDetails(27, 3500, 21, -1, -1); + _mapScreen.setDetails(Rect(160, 89, 299, 182), 3500, 3, -1, -1, 1, NULL); + _background.setDetails(Rect(0, 0, 320, 200), 3500, 0, -1, 2, 1, NULL); - _actor1.postInit(); + _shuttle.postInit(); _mazeDirection = MAZEDIR_NORTH; - _actor1.setup(1004, 1, _mazeDirection); - _actor1.setPosition(Common::Point(230, 135)); - _actor1.fixPriority(200); - _actor1._frameChange = 1; - - _actor5.postInit(); - _actor5.setup(1004, 3, 1); - _actor5.setPosition(Common::Point(117, 163)); - _actor5.fixPriority(200); - _actor5.hide(); - - _actor4.postInit(); - _actor4.setup(1004, 3, 2); - _actor4.setPosition(Common::Point(126, 163)); - _actor4.fixPriority(200); - - _actor6.postInit(); - _actor6.setup(1004, 3, 3); - _actor6.setPosition(Common::Point(135, 163)); - _actor6.fixPriority(200); - _actor6.hide(); - - _actor2.postInit(); - _actor2.setup(1004, 4, _mazeChangeAmount + 1); - _actor2.setPosition(Common::Point(126, 137)); - _actor2.fixPriority(200); - - _actor3.postInit(); - _actor3.setup(1004, 5, 2); - _actor3.setPosition(Common::Point(126, 108)); - _actor3.fixPriority(200); + _shuttle.setup(1004, 1, _mazeDirection); + _shuttle.setPosition(Common::Point(230, 135)); + _shuttle.fixPriority(200); + _shuttle._frameChange = 1; + + _symbolLeft.postInit(); + _symbolLeft.setup(1004, 3, 1); + _symbolLeft.setPosition(Common::Point(117, 163)); + _symbolLeft.fixPriority(200); + _symbolLeft.hide(); + + _symbolVertical.postInit(); + _symbolVertical.setup(1004, 3, 2); + _symbolVertical.setPosition(Common::Point(126, 163)); + _symbolVertical.fixPriority(200); + + _symbolRight.postInit(); + _symbolRight.setup(1004, 3, 3); + _symbolRight.setPosition(Common::Point(135, 163)); + _symbolRight.fixPriority(200); + _symbolRight.hide(); + + _verticalSpeedDisplay.postInit(); + _verticalSpeedDisplay.setup(1004, 4, _mazeChangeAmount + 1); + _verticalSpeedDisplay.setPosition(Common::Point(126, 137)); + _verticalSpeedDisplay.fixPriority(200); + + _horizontalSpeedDisplay.postInit(); + _horizontalSpeedDisplay.setup(1004, 5, 2); + _horizontalSpeedDisplay.setPosition(Common::Point(126, 108)); + _horizontalSpeedDisplay.fixPriority(200); _mazeUI.setDisplayBounds(Rect(160, 89, 299, 182)); _mazeUI.load(2); _mazeUI.setMazePosition(_mazePosition); - _action1._field24 = 0; + _action1._field24 = false; _mazeUI.draw(); _directionChangesEnabled = true; @@ -3671,77 +3667,91 @@ void Scene3500::postInit(SceneObjectList *OwnerList) { void Scene3500::doMovement(int id) { switch (id) { case -1: - _actor7.sub1094ED(); - if (_field1270 != 0) { - _field1270--; - _actor7.sub109663(_field1270); + _throttle.updateSpeed(); + if (_speed != 0) { + _speed--; + _throttle.setSpeed(_speed); } - if (_action1._field24 != 0) - _field1270 = 0; + if (_action1._field24) + _speed = 0; break; case 1: - _actor7.sub1094ED(); - if (_field1270 < 16) { - ++_field1270; - _actor7.sub109663(_field1270); + _throttle.updateSpeed(); + if (_speed < 16) { + ++_speed; + _throttle.setSpeed(_speed); } - if (_action1._field24 != 0) - _field1270 = 0; + if (_action1._field24) + _speed = 0; break; case 88: - if ((_action == 0) || (_action1._field24 == 0)) { - // The original makes a second useless check on action, skipped - _action2.sub10831F(2); - if ((_action) && ((_action2.getActionIndex() != 0) || (_action2._field1E != 2))) { + // Up button has been pressed + // The original was doing a double check on action, only one is here. + if (!_action || (!_action1._field24)) { + _action2.handleVertButton(2); + if (_action && ((_action2.getActionIndex() != 0) || (_action2._direction != 2))) { _action2.signal(); } else { - _actor9.setAction(&_action2, &_actor9, NULL); + _tunnelHorzCircle.setAction(&_action2, &_tunnelHorzCircle, NULL); } } break; case 96: - if ((_action) && (_action1._field24 != 0) && (_action2._field1E != 1)) { - _field1278 = 0; - _action1.sub108732(0); - } else if ((_action) && (_field1278 == 0) && (_action1._field24 != 0)) { - _field1278 = id; - } else if ((_action) && (_action1._field24 == 0)) { - _action1.sub108670(1); - _action1.signal(); - } else if (_action == 0) { - _action1.sub108670(1); - setAction(&_action1, &_actor1, NULL); + // Right button has been pressed + if (!_action || !_action1._field24 || (_action1._direction == 1)) { + if (_action && (_nextMove == 0) && (_action1._field24)) { + _nextMove = id; + } else if (_action && (!_action1._field24)) { + _action1.handleHorzButton(1); + _action1.signal(); + } else if (!_action) { + _action1.handleHorzButton(1); + setAction(&_action1, &_shuttle, NULL); + } + + } else { + if (_nextMove != 0) + _nextMove = 0; + + _action1.turnShuttle(false); } break; case 104: - if ((_action == 0) || (_action1._field24 == 0)) { - _action2.sub10831F(-1); - if ((_action) && ((_action2.getActionIndex() != 0) || (_action2._field1E != -1))) { + // Down button has been pressed + if (!_action || (!_action1._field24)) { + _action2.handleVertButton(-1); + if ((_action) && ((_action2.getActionIndex() != 0) || (_action2._direction != -1))) { _action2.signal(); } else { - _actor9.setAction(&_action2, &_actor9, NULL); + _tunnelHorzCircle.setAction(&_action2, &_tunnelHorzCircle, NULL); } } break; case 112: - if ((_action) && (_action1._field24 != 0) && (_action2._field1E != -1)) { - _field1278 = 0; - _action1.sub108732(0); - } else if ((_action) && (_field1278 == 0) && (_action1._field24 != 0)) { - _field1278 = id; - } else if ((_action) && (_action1._field24 == 0)) { - _action1.sub108670(-1); - _action1.signal(); - } else if (_action == 0) { - _action1.sub108670(-1); - setAction(&_action1, &_actor1, NULL); + // Left button has been pressed + if (!_action || !_action1._field24 || (_action1._direction == 1)) { + if (_action && (_nextMove == 0) && (_action1._field24)) { + _nextMove = id; + } else if (_action && (!_action1._field24)) { + _action1.handleHorzButton(-1); + _action1.signal(); + } else if (!_action) { + _action1.handleHorzButton(-1); + setAction(&_action1, &_shuttle, NULL); + } + + } else { + if (_nextMove != 0) + _nextMove = 0; + + _action1.turnShuttle(false); } break; default: - _field1270 = id; - _actor7.sub109663(id); - if (_action1._field24 != 0) { - _field1270 = 0; + _speed = id; + _throttle.setSpeed(id); + if (_action1._field24) { + _speed = 0; } break; } @@ -3776,7 +3786,7 @@ void Scene3500::process(Event &event) { event.handled = true; break; case Common::KEYCODE_KP9: - if (_field1270 < 16) + if (_speed < 16) R2_GLOBALS._sound2.play(338); doMovement(1); event.handled = true; @@ -3805,7 +3815,7 @@ void Scene3500::process(Event &event) { event.handled = true; break; case Common::KEYCODE_KP3: - if (_field1270 != 0) + if (_speed != 0) R2_GLOBALS._sound2.play(338); doMovement(-1); event.handled = true; @@ -3826,7 +3836,7 @@ void Scene3500::process(Event &event) { } if (!event.handled) - _actor7.process(event); + _throttle.process(event); if (!event.handled) _pitchDown.process(event); @@ -3847,15 +3857,15 @@ void Scene3500::dispatch() { Rect tmpRect; Scene::dispatch(); - if (((_actor1._frame % 2) == 0) && (_action1._field24 == 0)) { - _actor1.setFrame(_actor1.changeFrame()); - _mazeDirection = _actor1._frame; + if (((_shuttle._frame % 2) == 0) && (!_action1._field24)) { + _shuttle.setFrame(_shuttle.changeFrame()); + _mazeDirection = _shuttle._frame; } - int oldField1278; - if ((_field1278 != 0) && (_action1._field24 == 0)) { - oldField1278 = _field1278; - _field1278 = 0; - doMovement(oldField1278); + + if ((_nextMove != 0) && (!_action1._field24)) { + int move = _nextMove; + _nextMove = 0; + doMovement(move); } if (!_rotation) @@ -3863,11 +3873,11 @@ void Scene3500::dispatch() { int newMazeX = 0; int newMazeY = 0; - int var_4 = 0; - int var_6 = 0; - int var_8 = 0; - int var_a = 0; - int dx = 0; + int mazePosX = 0; + int mazePosY = 0; + int deltaX = 0; + int deltaY = 0; + int tmpCellId = 0; int cellId = 0; if ((_mazeChangeAmount == 0) && (_field1282 == 0)) { @@ -3879,72 +3889,72 @@ void Scene3500::dispatch() { newMazeX = _mazePosition.x; newMazeY = _mazePosition.y; - var_4 = _mazeUI.cellFromX(newMazeX + 70) - 70; - var_6 = _mazeUI.cellFromY(_mazePosition.y + 46) - 46; - var_8 = abs(var_4 - newMazeX); - var_a = abs(var_6 - newMazeY); - dx = 0; + mazePosX = _mazeUI.cellFromX(newMazeX + 70) - 70; + mazePosY = _mazeUI.cellFromY(_mazePosition.y + 46) - 46; + deltaX = abs(mazePosX - newMazeX); + deltaY = abs(mazePosY - newMazeY); + tmpCellId = 0; switch (_mazeDirection) { case MAZEDIR_NORTH: cellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); if (((cellId == 2) || (cellId == 3) || (cellId == 6) || (cellId == 1)) || - ((cellId == 25 || cellId == 26 || cellId == 5 || cellId == 14 || cellId == 15) && var_8 > 3)) { + ((cellId == 25 || cellId == 26 || cellId == 5 || cellId == 14 || cellId == 15) && deltaX > 3)) { R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); } else { - var_6 = _mazeUI.cellFromY(newMazeY + 46) - 46; + mazePosY = _mazeUI.cellFromY(newMazeY + 46) - 46; newMazeY = _mazePosition.y - _mazeChangeAmount; - dx = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); - if (((cellId == 23) || (cellId == 24) || (cellId == 4)) && (cellId != dx)) { - newMazeY = var_6; + tmpCellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); + if (((cellId == 23) || (cellId == 24) || (cellId == 4)) && (cellId != tmpCellId)) { + newMazeY = mazePosY; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 11) && (cellId != dx)) { - newMazeY = var_6 + 3; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 11) && (cellId != tmpCellId)) { + newMazeY = mazePosY + 3; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); } else { - var_6 = _mazeUI.cellFromY(newMazeY + 46) - 46; - var_a = abs(var_6 - newMazeY); + mazePosY = _mazeUI.cellFromY(newMazeY + 46) - 46; + deltaY = abs(mazePosY - newMazeY); cellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); - if ( (((cellId == 23) || (cellId == 24) || (cellId == 4)) && (newMazeY <= var_6) && (_mazePosition.y>= var_6)) - || (((cellId == 25) || (cellId == 26) || (cellId == 5) || (cellId == 14) || (cellId == 15)) && (_mazeChangeAmount >= var_a) && (_mazeChangeAmount > 3) && (_action1._field24 != 0)) ) { - newMazeY = var_6; + if ( (((cellId == 23) || (cellId == 24) || (cellId == 4)) && (newMazeY <= mazePosY) && (_mazePosition.y>= mazePosY)) + || (((cellId == 25) || (cellId == 26) || (cellId == 5) || (cellId == 14) || (cellId == 15)) && (_mazeChangeAmount >= deltaY) && (_mazeChangeAmount > 3) && (_action1._field24 != 0)) ) { + newMazeY = mazePosY; if ((cellId != 25) && (cellId != 26) && (cellId != 5) && (cellId != 14) && (cellId == 15)) R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 11) && (var_6 + 3 >= newMazeY) && (_mazePosition.y >= var_6 + 3)) { + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 11) && (mazePosY + 3 >= newMazeY) && (_mazePosition.y >= mazePosY + 3)) { R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if (((cellId == 25) || (cellId == 26) || (cellId == 5) || (cellId == 14) || (cellId == 15)) && (var_8 != 0) && (var_8 <= 3)) { - newMazeX = var_4; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if (((cellId == 25) || (cellId == 26) || (cellId == 5) || (cellId == 14) || (cellId == 15)) && (deltaX != 0) && (deltaX <= 3)) { + newMazeX = mazePosX; R2_GLOBALS._sound2.play(339); } else { // Nothing @@ -3955,62 +3965,62 @@ void Scene3500::dispatch() { case MAZEDIR_EAST: cellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); if ( ((cellId == 12) || (cellId == 13) || (cellId == 11) || (cellId == 16) || (cellId == 31)) - || (((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4)) && (var_a > 3)) ) { + || (((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4)) && (deltaY > 3)) ) { R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); } else { - var_4 = _mazeUI.cellFromX(newMazeX + 70) - 70; + mazePosX = _mazeUI.cellFromX(newMazeX + 70) - 70; newMazeX = _mazePosition.x + _mazeChangeAmount; - dx = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); - if (((cellId == 26) || (cellId == 24) || (cellId == 15)) && (cellId != dx)) { - newMazeX = var_4; + tmpCellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); + if (((cellId == 26) || (cellId == 24) || (cellId == 15)) && (cellId != tmpCellId)) { + newMazeX = mazePosX; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 6) && (cellId != dx)) { - newMazeX = var_4 - 5; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 6) && (cellId != tmpCellId)) { + newMazeX = mazePosX - 5; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); } else { - var_4 = _mazeUI.cellFromX(newMazeX + 70) - 70; - var_8 = abs(newMazeX - var_4); + mazePosX = _mazeUI.cellFromX(newMazeX + 70) - 70; + deltaX = abs(newMazeX - mazePosX); cellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); - if ( (((cellId == 26) || (cellId == 24) || (cellId == 15)) && (newMazeX >= var_4) && (_mazePosition.x <= var_4)) - || (((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4)) && (_mazeChangeAmount >= var_8) && (_mazeChangeAmount <= 3) && (_action1._field24 != 0)) ) { - newMazeX = var_4; + if ( (((cellId == 26) || (cellId == 24) || (cellId == 15)) && (newMazeX >= mazePosX) && (_mazePosition.x <= mazePosX)) + || (((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4)) && (_mazeChangeAmount >= deltaX) && (_mazeChangeAmount <= 3) && (_action1._field24 != 0)) ) { + newMazeX = mazePosX; if ((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4)) R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 6) && (var_4 - 5 <= newMazeX) && (_mazePosition.x <= var_4 - 5)) { - newMazeX = var_4 - 5; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 6) && (mazePosX - 5 <= newMazeX) && (_mazePosition.x <= mazePosX - 5)) { + newMazeX = mazePosX - 5; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if (((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4)) && (var_a != 0) && (var_a <= 3)) { - newMazeY = var_6; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if (((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4)) && (deltaY != 0) && (deltaY <= 3)) { + newMazeY = mazePosY; R2_GLOBALS._sound2.play(339); } else { // Nothing @@ -4021,84 +4031,84 @@ void Scene3500::dispatch() { case MAZEDIR_SOUTH: cellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); if ( ((cellId == 2) || (cellId == 3) || (cellId == 6) || (cellId == 1)) - || (((cellId == 23) || (cellId == 24) || (cellId == 4) || (cellId == 14) || (cellId == 15)) && (var_8 > 3)) ) { + || (((cellId == 23) || (cellId == 24) || (cellId == 4) || (cellId == 14) || (cellId == 15)) && (deltaX > 3)) ) { R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); } else { - var_6 = _mazeUI.cellFromY(newMazeY + 46) - 46; + mazePosY = _mazeUI.cellFromY(newMazeY + 46) - 46; newMazeY = _mazePosition.y + _mazeChangeAmount; - dx = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); + tmpCellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); - if (((cellId == 25) || (cellId == 26) || (cellId == 5)) && (cellId != dx)) { + if (((cellId == 25) || (cellId == 26) || (cellId == 5)) && (cellId != tmpCellId)) { R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 16) && (cellId != dx)) { - newMazeY = var_6 - 3; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 16) && (cellId != tmpCellId)) { + newMazeY = mazePosY - 3; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 31) && (cellId != dx)) { - newMazeY = var_6 + 4; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 31) && (cellId != tmpCellId)) { + newMazeY = mazePosY + 4; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); } else { - var_6 = _mazeUI.cellFromY(newMazeY + 46) - 46; - var_a = abs(newMazeY - var_6); + mazePosY = _mazeUI.cellFromY(newMazeY + 46) - 46; + deltaY = abs(newMazeY - mazePosY); cellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); - if ( (((cellId == 25) || (cellId == 26) || (cellId == 5)) && (newMazeY >= var_6) && (_mazePosition.y <= var_6)) - || (((cellId == 23) || (cellId == 24) || (cellId == 4) || (cellId == 14) || (cellId == 15)) && (_mazeChangeAmount >= var_a) && (_mazeChangeAmount <= 3) && (_action1._field24 != 0)) ){ - newMazeY = var_6; + if ( (((cellId == 25) || (cellId == 26) || (cellId == 5)) && (newMazeY >= mazePosY) && (_mazePosition.y <= mazePosY)) + || (((cellId == 23) || (cellId == 24) || (cellId == 4) || (cellId == 14) || (cellId == 15)) && (_mazeChangeAmount >= deltaY) && (_mazeChangeAmount <= 3) && (_action1._field24 != 0)) ){ + newMazeY = mazePosY; if ((cellId != 23) && (cellId != 24) && (cellId != 4) && (cellId != 14) && (cellId != 15)) R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 16) && (var_6 - 3 <= newMazeY) && (_mazePosition.y <= var_6 - 3)) { - newMazeY = var_6 - 3; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 16) && (mazePosY - 3 <= newMazeY) && (_mazePosition.y <= mazePosY - 3)) { + newMazeY = mazePosY - 3; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 31) && (var_6 + 4 <= newMazeY) && (_mazePosition.y <= var_6 + 4)) { - newMazeY = var_6 + 4; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 31) && (mazePosY + 4 <= newMazeY) && (_mazePosition.y <= mazePosY + 4)) { + newMazeY = mazePosY + 4; _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); if ((newMazeX == 660) && (_mazeChangeAmount + 306 <= newMazeY) && (newMazeY <= 307)) ++_field1284; else R2_GLOBALS._sound2.play(339); - } else if (((cellId == 23) || (cellId == 24) || (cellId == 4) || (cellId == 14) || (cellId == 15)) && (var_8 != 0) && (var_8 <= 3)) { - newMazeX = var_4; + } else if (((cellId == 23) || (cellId == 24) || (cellId == 4) || (cellId == 14) || (cellId == 15)) && (deltaX != 0) && (deltaX <= 3)) { + newMazeX = mazePosX; R2_GLOBALS._sound2.play(339); } else { // Nothing @@ -4109,62 +4119,62 @@ void Scene3500::dispatch() { case MAZEDIR_WEST: cellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); if ( ((cellId == 12) || (cellId == 13) || (cellId == 11) || (cellId == 16) || (cellId == 31)) - || (((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4)) && (var_a > 3)) ) { + || (((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4)) && (deltaY > 3)) ) { R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); } else { - var_4 = _mazeUI.cellFromX(newMazeX + 70) - 70; + mazePosX = _mazeUI.cellFromX(newMazeX + 70) - 70; newMazeX = _mazePosition.x - _mazeChangeAmount; - dx = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); - if (((cellId == 25) || (cellId == 23) || (cellId == 14)) && (cellId != dx)) { - newMazeX = var_4; + tmpCellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); + if (((cellId == 25) || (cellId == 23) || (cellId == 14)) && (cellId != tmpCellId)) { + newMazeX = mazePosX; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 1) && (cellId != dx)) { - newMazeX = var_4 + 5; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 1) && (cellId != tmpCellId)) { + newMazeX = mazePosX + 5; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); } else { - var_4 = _mazeUI.cellFromX(newMazeX + 70) - 70; - var_8 = abs(var_4 - newMazeX); + mazePosX = _mazeUI.cellFromX(newMazeX + 70) - 70; + deltaX = abs(mazePosX - newMazeX); cellId = _mazeUI.getCellFromMapXY(Common::Point(newMazeX + 70, newMazeY + 46)); - if ( (((cellId == 25) || (cellId == 23) || (cellId == 14)) && (newMazeX <= var_4) && (_mazePosition.x >= var_4)) - || (((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4)) && (_mazeChangeAmount >= var_8) && (_mazeChangeAmount <= 3) && (_action1._field24 != 0)) ) { - newMazeX = var_4; + if ( (((cellId == 25) || (cellId == 23) || (cellId == 14)) && (newMazeX <= mazePosX) && (_mazePosition.x >= mazePosX)) + || (((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4)) && (_mazeChangeAmount >= deltaX) && (_mazeChangeAmount <= 3) && (_action1._field24)) ) { + newMazeX = mazePosX; if ((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4)) R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if ((cellId == 1) && (newMazeX >= var_4 + 5) && (_mazePosition.x >= var_4 + 5)) { - newMazeX = var_4 + 5; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if ((cellId == 1) && (newMazeX >= mazePosX + 5) && (_mazePosition.x >= mazePosX + 5)) { + newMazeX = mazePosX + 5; R2_GLOBALS._sound2.play(339); _rotation->_idxChange = 0; - _field1270 = 0; + _speed = 0; _mazeChangeAmount = 0; - _field1272 = 0; - if (_action1._field24 == 0) - _actor8.hide(); - } else if (((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4)) && (var_a != 0) && (var_a <= 3)) { - newMazeY = var_6; + _field1272 = false; + if (!_action1._field24) + _tunnelVertCircle.hide(); + } else if (((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4)) && (deltaY != 0) && (deltaY <= 3)) { + newMazeY = mazePosY; R2_GLOBALS._sound2.play(339); } else { // Nothing @@ -4180,9 +4190,9 @@ void Scene3500::dispatch() { _mazePosition.x = newMazeX; _mazePosition.y = newMazeY; if (_mazeUI.setMazePosition2(_mazePosition) != 0) { - _field1272 = 0; + _field1272 = false; _mazeChangeAmount = 0; - _field1270 = 0; + _speed = 0; _rotation->setDelay(0); _rotation->_idxChange = 0; } @@ -4193,15 +4203,15 @@ void Scene3500::dispatch() { } } - if (_field1272 == 0) { - if (_mazeChangeAmount != _field1270) { - if (_mazeChangeAmount >= _field1270) { + if (!_field1272) { + if (_mazeChangeAmount != _speed) { + if (_mazeChangeAmount >= _speed) { if (_mazeChangeAmount == 1) { - if (_action1._field24 != 0) { - if ( ((_mazeDirection == 1) && (var_8 == 0) && (var_a != 0) && (var_a <= 3) && ((cellId == 25) || (cellId == 26) || (cellId == 5) || (cellId == 14) || (cellId == 15))) - || ((_mazeDirection == 3) && (var_a == 0) && (var_8 != 0) && (var_8 <= 3) && ((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4))) - || ((_mazeDirection == 5) && (var_8 == 0) && (var_a != 0) && (var_a <= 3) && ((cellId == 23) || (cellId == 24) || (cellId == 4) || (cellId == 14) || (cellId == 15))) - || ((_mazeDirection == 7) && (var_a == 0) && (var_8 != 0) && (var_8 <= 3) && ((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4))) ){ + if (_action1._field24) { + if ( ((_mazeDirection == 1) && (deltaX == 0) && (deltaY != 0) && (deltaY <= 3) && ((cellId == 25) || (cellId == 26) || (cellId == 5) || (cellId == 14) || (cellId == 15))) + || ((_mazeDirection == 3) && (deltaY == 0) && (deltaX != 0) && (deltaX <= 3) && ((cellId == 25) || (cellId == 23) || (cellId == 14) || (cellId == 5) || (cellId == 4))) + || ((_mazeDirection == 5) && (deltaX == 0) && (deltaY != 0) && (deltaY <= 3) && ((cellId == 23) || (cellId == 24) || (cellId == 4) || (cellId == 14) || (cellId == 15))) + || ((_mazeDirection == 7) && (deltaY == 0) && (deltaX != 0) && (deltaX <= 3) && ((cellId == 26) || (cellId == 24) || (cellId == 15) || (cellId == 5) || (cellId == 4))) ){ _mazeChangeAmount = 1; } else _mazeChangeAmount--; @@ -4211,34 +4221,30 @@ void Scene3500::dispatch() { _mazeChangeAmount--; } else ++_mazeChangeAmount; - _field1272 = 1; + _field1272 = true; } - _actor2.setFrame2(_mazeChangeAmount + 1); + _verticalSpeedDisplay.setFrame2(_mazeChangeAmount + 1); } - if (_field1272 == 1) { + if (_field1272) { if (_mazeChangeAmount == 0) _rotation->_idxChange = 0; else if (_mazeChangeAmount > 8) _rotation->_idxChange = 2; else _rotation->_idxChange = 1; - } - if (_field1272 != 0) - _field1272--; + _field1272 = false; + } if (_mazeChangeAmount != 0) { R2_GLOBALS._player._uiEnabled = false; - if (_mazeChangeAmount != _field1270) + if (_mazeChangeAmount != _speed) _aSound1.play(276); } else { R2_GLOBALS._player._uiEnabled = true; _aSound1.fadeOut2(NULL); } - - if (_rotation->_currIndex != _field1274) - _field1274 = _rotation->_currIndex; } /*-------------------------------------------------------------------------- @@ -4260,15 +4266,15 @@ void Scene3600::synchronize(Serializer &s) { } Scene3600::Action3600::Action3600() { - _field1E = 0; - _field20 = 0; + _field1E = false; + _fadePct = 0; } void Scene3600::Action3600::synchronize(Serializer &s) { Action::synchronize(s); s.syncAsSint16LE(_field1E); - s.syncAsSint16LE(_field20); + s.syncAsSint16LE(_fadePct); } void Scene3600::Action3600::signal() { @@ -4280,17 +4286,17 @@ void Scene3600::Action3600::signal() { setDelay(60); break; case 1: - if (_field1E == 0) { - _field1E = 1; + if (!_field1E) { + _field1E = true; scene->_steppingDisk.setAction(NULL); R2_GLOBALS._sound2.play(330, NULL, 0); R2_GLOBALS._sound2.fade(127, 5, 10, false, NULL); } setDelay(1); - R2_GLOBALS._scenePalette.fade((const byte *)&scene->_palette1._palette, true, _field20); - if (_field20 > 0) - _field20 -= 2; + R2_GLOBALS._scenePalette.fade((const byte *)&scene->_palette1._palette, true, _fadePct); + if (_fadePct > 0) + _fadePct -= 2; break; case 2: R2_GLOBALS._sound2.stop(); @@ -4335,7 +4341,7 @@ void Scene3600::Action2::signal() { bool Scene3600::LightShaft::startAction(CursorType action, Event &event) { Scene3600 *scene = (Scene3600 *)R2_GLOBALS._sceneManager._scene; - if ((action != CURSOR_USE) || (scene->_action1._field1E == 0)) + if ((action != CURSOR_USE) || !scene->_action1._field1E) return SceneItem::startAction(action, event); R2_GLOBALS._walkRegions.enableRegion(2); @@ -4414,11 +4420,9 @@ bool Scene3600::Protector::startAction(CursorType action, Event &event) { void Scene3600::postInit(SceneObjectList *OwnerList) { if (R2_GLOBALS._sceneManager._previousScene == 3600) { R2_GLOBALS._scrollFollower = &R2_GLOBALS._player; - R2_GLOBALS._v558B6.set(60, 0, 260, 200); } else { R2_GLOBALS._scrollFollower = &_steppingDisk; _sceneBounds = Rect(160, 0, 480, 200); - R2_GLOBALS._v558B6.set(25, 0, 260, 200); } loadScene(3600); @@ -4444,7 +4448,7 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { _quinn.postInit(); _quinn._moveDiff = Common::Point(3, 2); _quinn.changeZoom(-1); - _quinn._effect = 1; + _quinn._effect = EFFECT_SHADED; if (R2_GLOBALS._player._characterIndex != 1) _quinn.setDetails(9001, 0, -1, -1, 1, (SceneItem *) NULL); @@ -4453,7 +4457,7 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { _seeker._numFrames = 7; _seeker._moveDiff = Common::Point(5, 3); _seeker.changeZoom(-1); - _seeker._effect = 1; + _seeker._effect = EFFECT_SHADED; if (R2_GLOBALS._player._characterIndex != 2) _seeker.setDetails(9002, 1, -1, -1, 1, (SceneItem *) NULL); @@ -4461,7 +4465,7 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { _miranda.postInit(); _miranda._moveDiff = Common::Point(3, 2); _miranda.changeZoom(-1); - _miranda._effect = 1; + _miranda._effect = EFFECT_SHADED; if (R2_GLOBALS._player._characterIndex != 3) _miranda.setDetails(9003, 1, -1, -1, 1, (SceneItem *) NULL); @@ -4475,14 +4479,14 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { _webbster._numFrames = 7; _webbster._moveDiff = Common::Point(5, 3); _webbster.changeZoom(-1); - _webbster._effect = 1; + _webbster._effect = EFFECT_SHADED; _webbster.setDetails(3600, 27, -1, -1, 1, (SceneItem *) NULL); _teal.postInit(); _teal._numFrames = 7; _teal._moveDiff = Common::Point(3, 2); _teal.changeZoom(-1); - _teal._effect = 1; + _teal._effect = EFFECT_SHADED; _teal.setDetails(3600, 12, -1, -1, 1, (SceneItem *) NULL); _palette1.loadPalette(0); @@ -4558,8 +4562,8 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { _consoleLights.setup(3601, 5, 1); _consoleLights.animate(ANIM_MODE_2, NULL); - _action1._field1E = 1; - _action1._field20 = 0; + _action1._field1E = true; + _action1._fadePct = 0; _action1.setActionIndex(1); _consoleLights.setAction(&_action1); @@ -4593,8 +4597,8 @@ void Scene3600::postInit(SceneObjectList *OwnerList) { _steppingDisk.fixPriority(149); _steppingDisk.changeZoom(-1); - _action1._field1E = 0; - _action1._field20 = 90; + _action1._field1E = false; + _action1._fadePct = 90; _sceneMode = 3600; setAction(&_sequenceManager1, this, 3600, &_seeker, &_quinn, &_miranda, @@ -4772,7 +4776,6 @@ void Scene3600::signal() { case 3603: R2_GLOBALS._walkRegions.disableRegion(2); R2_GLOBALS._walkRegions.disableRegion(7); - R2_GLOBALS._v558B6.set(60, 0, 260, 200); _tealSpeaker._displayMode = 1; _sceneMode = 3321; _stripManager.start(3321, this); @@ -4826,7 +4829,7 @@ void Scene3600::signal() { // No break on purpose case 3623: if ((_protector._position.x == 226) && (_protector._position.y == 152) - && (_action1._field1E != 0) && (_protector._visage == 3127) && (!R2_GLOBALS.getFlag(71))) { + && _action1._field1E && (_protector._visage == 3127) && (!R2_GLOBALS.getFlag(71))) { R2_GLOBALS._sound2.stop(); R2_GLOBALS._sound2.play(331); R2_GLOBALS.setFlag(71); @@ -4874,8 +4877,7 @@ void Scene3600::process(Event &event) { } void Scene3600::dispatch() { - if ((R2_GLOBALS._player.getRegionIndex() == 200) && (_action1._field1E != 0) - && !_lightEntered) { + if ((R2_GLOBALS._player.getRegionIndex() == 200) && _action1._field1E && !_lightEntered) { R2_GLOBALS._sound2.fadeOut2(NULL); if (_protector._mover) _protector.addMover(NULL); @@ -4916,7 +4918,7 @@ void Scene3600::dispatch() { _webbster.setAction(&_sequenceManager1, this, 3613, &_webbster, NULL); } - if ((_protector.getRegionIndex() == 200) && (_action1._field1E != 0) && !_ghoulTeleported) { + if ((_protector.getRegionIndex() == 200) && _action1._field1E && !_ghoulTeleported) { R2_GLOBALS._sound2.fadeOut2(NULL); _sceneMode = 3620; _ghoulTeleported = true; @@ -5204,18 +5206,20 @@ void Scene3800::enterArea() { R2_GLOBALS._player.setStrip(3); R2_GLOBALS._player.changeZoom(-1); R2_GLOBALS._player._moveDiff = Common::Point(3, 2); - _balloonQuinn.postInit(); - _balloonQuinn.fixPriority(10); - _balloonQuinn.changeZoom(-1); - _balloonQuinn.setVisage(1110); - _balloonQuinn._effect = 5; - _balloonQuinn._field9C = this->_field312; - R2_GLOBALS._player._linkedActor = &_balloonQuinn; + + _quinnShadow.postInit(); + _quinnShadow.fixPriority(10); + _quinnShadow.changeZoom(-1); + _quinnShadow.setVisage(1110); + _quinnShadow._effect = EFFECT_SHADOW_MAP; + _quinnShadow._shadowMap = this->_shadowPaletteMap; + R2_GLOBALS._player._linkedActor = &_quinnShadow; + switch (R2_GLOBALS._sceneManager._previousScene) { case 2600: _balloon.postInit(); _harness.postInit(); - _balloonQuinn.hide(); + _quinnShadow.hide(); _sceneMode = 3800; setAction(&_sequenceManager1, this, 3800, &R2_GLOBALS._player, &_balloon, &_harness, NULL); @@ -5361,7 +5365,7 @@ void Scene3800::signal() { g_globals->_sceneManager.changeScene(3900); break; case 3800: - _balloonQuinn.show(); + _quinnShadow.show(); _balloon.remove(); _harness.remove(); R2_GLOBALS._player.enableControl(); @@ -5514,13 +5518,13 @@ void Scene3900::postInit(SceneObjectList *OwnerList) { R2_GLOBALS._player.changeZoom(-1); R2_GLOBALS._player._moveDiff = Common::Point(3, 2); - _linkedQuinn.postInit(); - _linkedQuinn.fixPriority(10); - _linkedQuinn.changeZoom(-1); - _linkedQuinn.setVisage(1110); - _linkedQuinn._effect = 5; - _linkedQuinn._field9C = _field312; - R2_GLOBALS._player._linkedActor = &_linkedQuinn; + _quinnShadow.postInit(); + _quinnShadow.fixPriority(10); + _quinnShadow.changeZoom(-1); + _quinnShadow.setVisage(1110); + _quinnShadow._effect = EFFECT_SHADOW_MAP; + _quinnShadow._shadowMap = _shadowPaletteMap; + R2_GLOBALS._player._linkedActor = &_quinnShadow; if ((R2_GLOBALS._desertPreviousDirection == 2) && (R2_GLOBALS._sceneManager._previousScene != 2700)) { // loadScene(3825); diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h index 48236ee300f8..834a601e62d4 100644 --- a/engines/tsage/ringworld2/ringworld2_scenes3.h +++ b/engines/tsage/ringworld2/ringworld2_scenes3.h @@ -315,16 +315,16 @@ class Scene3260 : public SceneExt { void signal(); }; public: - NamedHotspot _item1; + NamedHotspot _background; SceneActor _sceeen1; SceneActor _screen2; SceneActor _screen3; SceneActor _screen4; SceneActor _screen5; SceneActor _screen6; - SceneActor _actor7; - SceneActor _actor8; - SceneActor _actor9; + SceneActor _screen7; + SceneActor _screen8; + SceneActor _screen9; SceneActor _securityConsole; SceneActor _computerConsole; SceneActor _lightingConsole; @@ -462,7 +462,7 @@ class Scene3385 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Exit1 : public SceneExit { + class SouthExit : public SceneExit { public: virtual void changeScene(); }; @@ -482,7 +482,7 @@ class Scene3385 : public SceneExt { Companion2 _companion2; Webbster _webbster; Door _door; - Exit1 _exit1; + SouthExit _southExit; Action1 _action1; SequenceManager _sequenceManager; @@ -548,9 +548,8 @@ class Scene3400 : public SceneExt { SceneActor _companion2; SceneActor _webbster; SceneActor _teal; - SceneActor _actor5; - SceneActor _actor6; - SceneActor _actor7; + SceneActor _door; + SceneActor _manholeCover; SceneActor _actor8; SequenceManager _sequenceManager; bool _soundFaded; @@ -565,25 +564,25 @@ class Scene3400 : public SceneExt { class Scene3500 : public SceneExt { class Action1: public Action { public: - int _field1E; - int _field20; + int _direction; + bool _field20; int _field22; - int _field24; + bool _field24; Action1(); virtual void synchronize(Serializer &s); - void sub108670(int arg1); - void sub108732(int arg1); + void handleHorzButton(int direction); + void turnShuttle(bool arg1); virtual void signal(); virtual void dispatch(); }; class Action2: public Action { public: - int _field1E; + int _direction; Action2(); virtual void synchronize(Serializer &s); - void sub10831F(int arg1); + void handleVertButton(int direction); virtual void signal(); }; @@ -598,31 +597,26 @@ class Scene3500 : public SceneExt { virtual bool startAction(CursorType action, Event &event); }; - class Actor7 : public SceneActor { + class Throttle : public SceneActor { public: Common::Point _pos; - int _fieldA8; - int _fieldAA; - int _fieldAC; - int _fieldAE; + int _deltaX; + int _deltaY; + int _slideDeltaY; + int _deltaMouseY; - Actor7(); + Throttle(); virtual void synchronize(Serializer &s); - void sub109466(int xp, int yp, int arg3, int arg4, int arg5); - void sub1094ED(); - void sub109663(int arg1); + void init(int xp, int yp, int dx, int dy, int speed); + void updateSpeed(); + void setSpeed(int arg1); void changePosition(const Common::Point &pt); virtual void process(Event &event); virtual bool startAction(CursorType action, Event &event); }; - class Actor8 : public SceneActor { - public: - // TODO: double check if nothing specific is present, then remove this class - }; - class MazeUI3500 : public MazeUI { public: int cellFromX(int arg1); @@ -633,40 +627,37 @@ class Scene3500 : public SceneExt { public: Action1 _action1; Action2 _action2; - NamedHotspot _item1; - NamedHotspot _item2; - NamedHotspot _item3; + NamedHotspot _background; + NamedHotspot _outsideView; + NamedHotspot _mapScreen; DirectionButton _pitchDown; DirectionButton _turnLeft; DirectionButton _pitchUp; DirectionButton _turnRight; // Glyph of vessel on top of the maze ui - SceneActor _actor1; - SceneActor _actor2; - SceneActor _actor3; - SceneActor _actor4; - SceneActor _actor5; - SceneActor _actor6; - Actor7 _actor7; - Actor8 _actor8; - Actor8 _actor9; + SceneActor _shuttle; + SceneActor _verticalSpeedDisplay; + SceneActor _horizontalSpeedDisplay; + SceneActor _symbolVertical; + SceneActor _symbolLeft; + SceneActor _symbolRight; + Throttle _throttle; + SceneActor _tunnelVertCircle; + SceneActor _tunnelHorzCircle; ASoundExt _aSound1; MazeUI3500 _mazeUI; SequenceManager _sequenceManager; - int _fieldAF8; - int _fieldB9E; + int _moverVertX; + int _moverHorzX; PaletteRotation *_rotation; int _mazeChangeAmount; - int _field1270; - int _field1272; - int _field1274; + int _speed; + bool _field1272; int _mazeDirection; - int _field1278; + int _nextMove; Common::Point _mazePosition; - int _field127E; - int _field1280; - int _field1282; + int _field1282; // TODO: Set to true in Fixup() int _field1284; bool _directionChangesEnabled; @@ -684,7 +675,8 @@ class Scene3500 : public SceneExt { class Scene3600 : public SceneExt { class Action3600: public ActionExt { public: - int _field1E, _field20; + bool _field1E; + int _fadePct; Action3600(); virtual void synchronize(Serializer &s); @@ -786,7 +778,7 @@ class Scene3800 : public SceneExt { public: SceneObject _balloon; SceneObject _harness; - SceneActor _balloonQuinn; + SceneActor _quinnShadow; NamedHotspot _background; NorthExit _northExit; EastExit _eastExit; @@ -833,7 +825,7 @@ class Scene3900 : public SceneExt { virtual void changeScene(); }; public: - SceneActor _linkedQuinn; + SceneActor _quinnShadow; NamedHotspot _background; NorthExit _northExit; EastExit _eastExit; diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp index a6bfc39e2a71..61236ee50474 100644 --- a/engines/tsage/ringworld2/ringworld2_speakers.cpp +++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp @@ -654,7 +654,7 @@ void SpeakerMiranda3375::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (scene->_companion1._position.y != 163) @@ -704,7 +704,7 @@ void SpeakerMiranda3385::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -753,7 +753,7 @@ void SpeakerMiranda3395::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -803,7 +803,7 @@ void SpeakerMiranda3400::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -847,7 +847,7 @@ void SpeakerMiranda3600::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -1139,7 +1139,7 @@ void SpeakerProtector3600::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); @@ -1528,7 +1528,7 @@ void SpeakerQuinn3375::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (scene->_companion1._position.y != 163) @@ -1579,7 +1579,7 @@ void SpeakerQuinn3385::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -1634,7 +1634,7 @@ void SpeakerQuinn3395::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -1689,7 +1689,7 @@ void SpeakerQuinn3400::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); if (_object2->_mover) @@ -1735,7 +1735,7 @@ void SpeakerQuinn3600::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2241,7 +2241,7 @@ void SpeakerSeeker3375::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (scene->_companion1._position.y != 163) @@ -2290,7 +2290,7 @@ void SpeakerSeeker3385::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -2339,7 +2339,7 @@ void SpeakerSeeker3395::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -2388,7 +2388,7 @@ void SpeakerSeeker3400::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2447,7 +2447,7 @@ void SpeakerSeeker3600::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2771,7 +2771,7 @@ void SpeakerTeal3400::proc15() { _object2->hide(); _object1.postInit(); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -2829,7 +2829,7 @@ void SpeakerTeal3600::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); @@ -3017,7 +3017,7 @@ void SpeakerWebbster3375::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (scene->_companion1._position.y != 163) @@ -3061,7 +3061,7 @@ void SpeakerWebbster3385::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3375) @@ -3105,7 +3105,7 @@ void SpeakerWebbster3395::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); if (R2_GLOBALS._sceneManager._previousScene == 3385) @@ -3149,7 +3149,7 @@ void SpeakerWebbster3400::proc15() { _object1.postInit(); _object1.setPosition(_object2->_position); _object1._numFrames = 7; - _object1._effect = 1; + _object1._effect = EFFECT_SHADED; _object1.changeZoom(-1); R2_GLOBALS._player.disableControl(); R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS); diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp index 0946b6c419bb..f8797fd569ed 100644 --- a/engines/tsage/sound.cpp +++ b/engines/tsage/sound.cpp @@ -1008,7 +1008,7 @@ void SoundManager::sfRethinkVoiceTypes() { if (vtStruct->_entries[idx]._type0._priority2 > maxPriority) { maxPriority = vtStruct->_entries[idx]._type0._priority2; - entryIndex = -1; + entryIndex = idx; } } diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp index 662efa19b4a6..2749f2ac9012 100644 --- a/engines/tsage/staticres.cpp +++ b/engines/tsage/staticres.cpp @@ -398,8 +398,8 @@ const byte scene1550AreaMap[] = { 13, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14 }; -const byte k5A72E[] = {0, 98, 135, 183, 229, 81, 133, 185, 235, 75, 131, 187, 241, 70, 129, 190, 247}; -const byte k5A73F[] = {0, 42, 42, 42, 42, 67, 67, 67, 67, 92, 92, 92, 92, 116, 116, 116, 116}; +const byte scene1550JunkX[] = {0, 98, 135, 183, 229, 81, 133, 185, 235, 75, 131, 187, 241, 70, 129, 190, 247}; +const byte scene1550JunkY[] = {0, 42, 42, 42, 42, 67, 67, 67, 67, 92, 92, 92, 92, 116, 116, 116, 116}; const byte k5A750[] = { 9, 10, 7, 13, 7, 8, 9, 7, 9, 10, 2, 3, 3, 2, 2, 2, 4, 3, 3, 4, @@ -411,7 +411,7 @@ const byte k5A76D[] = { 3, 3, 3, 3, 3, 3, 3, 3, 3 }; const byte scene1550JunkRegions[] = {0, 8, 15, 16, 12, 7, 18, 17, 13, 6, 19, 20, 14, 5, 11, 10, 9}; -const byte k5A79B[] = { +const byte scene1550SpecialAreas[] = { 23, 3, 1, 23, 4, 1, 26, 3, 1, diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h index 7d97f2824d4e..587463a91895 100644 --- a/engines/tsage/staticres.h +++ b/engines/tsage/staticres.h @@ -202,12 +202,12 @@ extern char const *const WRONG_ANSWER_MSG; // Scene 1550 arrays of constants extern const byte scene1550JunkLocationsDefault[]; extern const byte scene1550AreaMap[]; -extern const byte k5A72E[]; -extern const byte k5A73F[]; +extern const byte scene1550JunkX[]; +extern const byte scene1550JunkY[]; extern const byte k5A750[]; extern const byte k5A76D[]; extern const byte scene1550JunkRegions[]; -extern const byte k5A79B[]; +extern const byte scene1550SpecialAreas[]; extern const byte k5A7F6[]; // Scene 2900 balloon data diff --git a/engines/wintermute/ad/ad_actor.cpp b/engines/wintermute/ad/ad_actor.cpp index 590d7c4f0101..33ad39b4113d 100644 --- a/engines/wintermute/ad/ad_actor.cpp +++ b/engines/wintermute/ad/ad_actor.cpp @@ -1319,9 +1319,9 @@ BaseSprite *AdActor::getTalkStanceOld(const char *stance) { bool AdActor::persist(BasePersistenceManager *persistMgr) { AdTalkHolder::persist(persistMgr); - persistMgr->transfer(TMEMBER_INT(_dir)); + persistMgr->transferSint32(TMEMBER_INT(_dir)); persistMgr->transferPtr(TMEMBER_PTR(_path)); - persistMgr->transfer(TMEMBER(_pFCount)); + persistMgr->transferSint32(TMEMBER(_pFCount)); persistMgr->transferDouble(TMEMBER(_pFStepX)); persistMgr->transferDouble(TMEMBER(_pFStepY)); persistMgr->transferDouble(TMEMBER(_pFX)); @@ -1329,19 +1329,19 @@ bool AdActor::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_standSprite)); _talkSprites.persist(persistMgr); _talkSpritesEx.persist(persistMgr); - persistMgr->transfer(TMEMBER_INT(_targetDir)); - persistMgr->transfer(TMEMBER_INT(_afterWalkDir)); + persistMgr->transferSint32(TMEMBER_INT(_targetDir)); + persistMgr->transferSint32(TMEMBER_INT(_afterWalkDir)); persistMgr->transferPtr(TMEMBER_PTR(_targetPoint)); persistMgr->transferPtr(TMEMBER_PTR(_turnLeftSprite)); persistMgr->transferPtr(TMEMBER_PTR(_turnRightSprite)); persistMgr->transferPtr(TMEMBER_PTR(_walkSprite)); persistMgr->transferPtr(TMEMBER_PTR(_animSprite2)); - persistMgr->transfer(TMEMBER(_talkAnimName)); - persistMgr->transfer(TMEMBER(_idleAnimName)); - persistMgr->transfer(TMEMBER(_walkAnimName)); - persistMgr->transfer(TMEMBER(_turnLeftAnimName)); - persistMgr->transfer(TMEMBER(_turnRightAnimName)); + persistMgr->transferString(TMEMBER(_talkAnimName)); + persistMgr->transferString(TMEMBER(_idleAnimName)); + persistMgr->transferString(TMEMBER(_walkAnimName)); + persistMgr->transferString(TMEMBER(_turnLeftAnimName)); + persistMgr->transferString(TMEMBER(_turnRightAnimName)); _anims.persist(persistMgr); diff --git a/engines/wintermute/ad/ad_entity.cpp b/engines/wintermute/ad/ad_entity.cpp index e7471a413e84..098da49750a7 100644 --- a/engines/wintermute/ad/ad_entity.cpp +++ b/engines/wintermute/ad/ad_entity.cpp @@ -1092,16 +1092,16 @@ void AdEntity::updatePosition() { bool AdEntity::persist(BasePersistenceManager *persistMgr) { AdTalkHolder::persist(persistMgr); - persistMgr->transfer(TMEMBER(_item)); + persistMgr->transferCharPtr(TMEMBER(_item)); persistMgr->transferPtr(TMEMBER_PTR(_region)); //persistMgr->transfer(TMEMBER(_sprite)); - persistMgr->transfer(TMEMBER_INT(_subtype)); + persistMgr->transferSint32(TMEMBER_INT(_subtype)); _talkSprites.persist(persistMgr); _talkSpritesEx.persist(persistMgr); - persistMgr->transfer(TMEMBER(_walkToX)); - persistMgr->transfer(TMEMBER(_walkToY)); - persistMgr->transfer(TMEMBER_INT(_walkToDir)); + persistMgr->transferSint32(TMEMBER(_walkToX)); + persistMgr->transferSint32(TMEMBER(_walkToY)); + persistMgr->transferSint32(TMEMBER_INT(_walkToDir)); persistMgr->transferPtr(TMEMBER_PTR(_theora)); diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp index fc5f20164bda..904b8a541c93 100644 --- a/engines/wintermute/ad/ad_game.cpp +++ b/engines/wintermute/ad/ad_game.cpp @@ -1417,8 +1417,8 @@ bool AdGame::persist(BasePersistenceManager *persistMgr) { _objects.persist(persistMgr); - persistMgr->transfer(TMEMBER(_prevSceneName)); - persistMgr->transfer(TMEMBER(_prevSceneFilename)); + persistMgr->transferCharPtr(TMEMBER(_prevSceneName)); + persistMgr->transferCharPtr(TMEMBER(_prevSceneFilename)); persistMgr->transferPtr(TMEMBER_PTR(_responseBox)); _responsesBranch.persist(persistMgr); @@ -1426,23 +1426,23 @@ bool AdGame::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_scene)); _sceneStates.persist(persistMgr); persistMgr->transferBool(TMEMBER(_scheduledFadeIn)); - persistMgr->transfer(TMEMBER(_scheduledScene)); + persistMgr->transferCharPtr(TMEMBER(_scheduledScene)); persistMgr->transferPtr(TMEMBER_PTR(_selectedItem)); - persistMgr->transfer(TMEMBER_INT(_talkSkipButton)); + persistMgr->transferSint32(TMEMBER_INT(_talkSkipButton)); _sentences.persist(persistMgr); persistMgr->transferPtr(TMEMBER_PTR(_sceneViewport)); - persistMgr->transfer(TMEMBER_INT(_stateEx)); + persistMgr->transferSint32(TMEMBER_INT(_stateEx)); persistMgr->transferBool(TMEMBER(_initialScene)); - persistMgr->transfer(TMEMBER(_debugStartupScene)); + persistMgr->transferCharPtr(TMEMBER(_debugStartupScene)); persistMgr->transferPtr(TMEMBER_PTR(_invObject)); persistMgr->transferPtr(TMEMBER_PTR(_inventoryOwner)); persistMgr->transferBool(TMEMBER(_tempDisableSaveState)); _items.persist(persistMgr); - persistMgr->transfer(TMEMBER(_itemsFile)); + persistMgr->transferCharPtr(TMEMBER(_itemsFile)); _speechDirs.persist(persistMgr); persistMgr->transferBool(TMEMBER(_smartItemCursor)); @@ -1451,7 +1451,7 @@ bool AdGame::persist(BasePersistenceManager *persistMgr) { _initialScene = false; } - persistMgr->transfer(TMEMBER(_startupScene)); + persistMgr->transferCharPtr(TMEMBER(_startupScene)); return STATUS_OK; diff --git a/engines/wintermute/ad/ad_inventory.cpp b/engines/wintermute/ad/ad_inventory.cpp index 544d8310d0bf..f9352c77c67f 100644 --- a/engines/wintermute/ad/ad_inventory.cpp +++ b/engines/wintermute/ad/ad_inventory.cpp @@ -128,7 +128,7 @@ bool AdInventory::persist(BasePersistenceManager *persistMgr) { BaseObject::persist(persistMgr); _takenItems.persist(persistMgr); - persistMgr->transfer(TMEMBER(_scrollOffset)); + persistMgr->transferSint32(TMEMBER(_scrollOffset)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_inventory_box.cpp b/engines/wintermute/ad/ad_inventory_box.cpp index a6e10fee9c65..5d7f053bb5b6 100644 --- a/engines/wintermute/ad/ad_inventory_box.cpp +++ b/engines/wintermute/ad/ad_inventory_box.cpp @@ -373,12 +373,12 @@ bool AdInventoryBox::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_closeButton)); persistMgr->transferBool(TMEMBER(_hideSelected)); - persistMgr->transfer(TMEMBER(_itemHeight)); + persistMgr->transferSint32(TMEMBER(_itemHeight)); persistMgr->transferRect32(TMEMBER(_itemsArea)); - persistMgr->transfer(TMEMBER(_itemWidth)); - persistMgr->transfer(TMEMBER(_scrollBy)); - persistMgr->transfer(TMEMBER(_scrollOffset)); - persistMgr->transfer(TMEMBER(_spacing)); + persistMgr->transferSint32(TMEMBER(_itemWidth)); + persistMgr->transferSint32(TMEMBER(_scrollBy)); + persistMgr->transferSint32(TMEMBER(_scrollOffset)); + persistMgr->transferSint32(TMEMBER(_spacing)); persistMgr->transferBool(TMEMBER(_visible)); persistMgr->transferPtr(TMEMBER_PTR(_window)); persistMgr->transferBool(TMEMBER(_exclusive)); diff --git a/engines/wintermute/ad/ad_item.cpp b/engines/wintermute/ad/ad_item.cpp index ae249de8199d..1f19a3eeae3e 100644 --- a/engines/wintermute/ad/ad_item.cpp +++ b/engines/wintermute/ad/ad_item.cpp @@ -789,11 +789,11 @@ bool AdItem::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_spriteHover)); persistMgr->transferBool(TMEMBER(_inInventory)); persistMgr->transferBool(TMEMBER(_displayAmount)); - persistMgr->transfer(TMEMBER(_amount)); - persistMgr->transfer(TMEMBER(_amountOffsetX)); - persistMgr->transfer(TMEMBER(_amountOffsetY)); - persistMgr->transfer(TMEMBER_INT(_amountAlign)); - persistMgr->transfer(TMEMBER(_amountString)); + persistMgr->transferSint32(TMEMBER(_amount)); + persistMgr->transferSint32(TMEMBER(_amountOffsetX)); + persistMgr->transferSint32(TMEMBER(_amountOffsetY)); + persistMgr->transferSint32(TMEMBER_INT(_amountAlign)); + persistMgr->transferCharPtr(TMEMBER(_amountString)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_layer.cpp b/engines/wintermute/ad/ad_layer.cpp index 7bbdf27cc693..17dd83a8b7b0 100644 --- a/engines/wintermute/ad/ad_layer.cpp +++ b/engines/wintermute/ad/ad_layer.cpp @@ -553,10 +553,10 @@ bool AdLayer::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_active)); persistMgr->transferBool(TMEMBER(_closeUp)); - persistMgr->transfer(TMEMBER(_height)); + persistMgr->transferSint32(TMEMBER(_height)); persistMgr->transferBool(TMEMBER(_main)); _nodes.persist(persistMgr); - persistMgr->transfer(TMEMBER(_width)); + persistMgr->transferSint32(TMEMBER(_width)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_node_state.cpp b/engines/wintermute/ad/ad_node_state.cpp index 193aa7519450..dd07f23762d2 100644 --- a/engines/wintermute/ad/ad_node_state.cpp +++ b/engines/wintermute/ad/ad_node_state.cpp @@ -96,12 +96,12 @@ bool AdNodeState::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); persistMgr->transferBool(TMEMBER(_active)); - persistMgr->transfer(TMEMBER(_name)); - persistMgr->transfer(TMEMBER(_filename)); - persistMgr->transfer(TMEMBER(_cursor)); - persistMgr->transfer(TMEMBER(_alphaColor)); + persistMgr->transferCharPtr(TMEMBER(_name)); + persistMgr->transferCharPtr(TMEMBER(_filename)); + persistMgr->transferCharPtr(TMEMBER(_cursor)); + persistMgr->transferUint32(TMEMBER(_alphaColor)); for (int i = 0; i < 7; i++) { - persistMgr->transfer(TMEMBER(_caption[i])); + persistMgr->transferCharPtr(TMEMBER(_caption[i])); } return STATUS_OK; diff --git a/engines/wintermute/ad/ad_object.cpp b/engines/wintermute/ad/ad_object.cpp index 6ab2e9bc7597..3664e0fd8ae1 100644 --- a/engines/wintermute/ad/ad_object.cpp +++ b/engines/wintermute/ad/ad_object.cpp @@ -1038,22 +1038,22 @@ bool AdObject::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_drawn)); persistMgr->transferPtr(TMEMBER_PTR(_font)); persistMgr->transferBool(TMEMBER(_ignoreItems)); - persistMgr->transfer(TMEMBER_INT(_nextState)); + persistMgr->transferSint32(TMEMBER_INT(_nextState)); persistMgr->transferPtr(TMEMBER_PTR(_sentence)); - persistMgr->transfer(TMEMBER_INT(_state)); + persistMgr->transferSint32(TMEMBER_INT(_state)); persistMgr->transferPtr(TMEMBER_PTR(_animSprite)); persistMgr->transferBool(TMEMBER(_sceneIndependent)); - persistMgr->transfer(TMEMBER(_forcedTalkAnimName)); + persistMgr->transferCharPtr(TMEMBER(_forcedTalkAnimName)); persistMgr->transferBool(TMEMBER(_forcedTalkAnimUsed)); persistMgr->transferPtr(TMEMBER_PTR(_tempSprite2)); - persistMgr->transfer(TMEMBER_INT(_type)); + persistMgr->transferSint32(TMEMBER_INT(_type)); persistMgr->transferPtr(TMEMBER_PTR(_wptGroup)); persistMgr->transferPtr(TMEMBER_PTR(_stickRegion)); persistMgr->transferBool(TMEMBER(_subtitlesModRelative)); - persistMgr->transfer(TMEMBER(_subtitlesModX)); - persistMgr->transfer(TMEMBER(_subtitlesModY)); + persistMgr->transferSint32(TMEMBER(_subtitlesModX)); + persistMgr->transferSint32(TMEMBER(_subtitlesModY)); persistMgr->transferBool(TMEMBER(_subtitlesModXCenter)); - persistMgr->transfer(TMEMBER(_subtitlesWidth)); + persistMgr->transferSint32(TMEMBER(_subtitlesWidth)); persistMgr->transferPtr(TMEMBER_PTR(_inventory)); persistMgr->transferPtr(TMEMBER_PTR(_partEmitter)); @@ -1066,8 +1066,8 @@ bool AdObject::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_registerAlias)); persistMgr->transferBool(TMEMBER(_partFollowParent)); - persistMgr->transfer(TMEMBER(_partOffsetX)); - persistMgr->transfer(TMEMBER(_partOffsetY)); + persistMgr->transferSint32(TMEMBER(_partOffsetX)); + persistMgr->transferSint32(TMEMBER(_partOffsetY)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_path.cpp b/engines/wintermute/ad/ad_path.cpp index bdb7eba495f7..156fc8095833 100644 --- a/engines/wintermute/ad/ad_path.cpp +++ b/engines/wintermute/ad/ad_path.cpp @@ -110,7 +110,7 @@ bool AdPath::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); - persistMgr->transfer(TMEMBER(_currIndex)); + persistMgr->transferSint32(TMEMBER(_currIndex)); _points.persist(persistMgr); persistMgr->transferBool(TMEMBER(_ready)); diff --git a/engines/wintermute/ad/ad_path_point.cpp b/engines/wintermute/ad/ad_path_point.cpp index 3e99d12f5d2c..5ee95686081b 100644 --- a/engines/wintermute/ad/ad_path_point.cpp +++ b/engines/wintermute/ad/ad_path_point.cpp @@ -65,7 +65,7 @@ bool AdPathPoint::persist(BasePersistenceManager *persistMgr) { BasePoint::persist(persistMgr); - persistMgr->transfer(TMEMBER(_distance)); + persistMgr->transferSint32(TMEMBER(_distance)); persistMgr->transferBool(TMEMBER(_marked)); persistMgr->transferPtr(TMEMBER_PTR(_origin)); diff --git a/engines/wintermute/ad/ad_region.cpp b/engines/wintermute/ad/ad_region.cpp index 215ec495a1b2..2e8e73a1cf6e 100644 --- a/engines/wintermute/ad/ad_region.cpp +++ b/engines/wintermute/ad/ad_region.cpp @@ -401,7 +401,7 @@ bool AdRegion::saveAsText(BaseDynamicBuffer *buffer, int indent) { bool AdRegion::persist(BasePersistenceManager *persistMgr) { BaseRegion::persist(persistMgr); - persistMgr->transfer(TMEMBER(_alpha)); + persistMgr->transferUint32(TMEMBER(_alpha)); persistMgr->transferBool(TMEMBER(_blocked)); persistMgr->transferBool(TMEMBER(_decoration)); persistMgr->transferFloat(TMEMBER(_zoom)); diff --git a/engines/wintermute/ad/ad_response.cpp b/engines/wintermute/ad/ad_response.cpp index fa05224b06b7..e7b4188de693 100644 --- a/engines/wintermute/ad/ad_response.cpp +++ b/engines/wintermute/ad/ad_response.cpp @@ -134,10 +134,10 @@ bool AdResponse::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_icon)); persistMgr->transferPtr(TMEMBER_PTR(_iconHover)); persistMgr->transferPtr(TMEMBER_PTR(_iconPressed)); - persistMgr->transfer(TMEMBER(_iD)); - persistMgr->transfer(TMEMBER(_text)); - persistMgr->transfer(TMEMBER(_textOrig)); - persistMgr->transfer(TMEMBER_INT(_responseType)); + persistMgr->transferSint32(TMEMBER(_iD)); + persistMgr->transferCharPtr(TMEMBER(_text)); + persistMgr->transferCharPtr(TMEMBER(_textOrig)); + persistMgr->transferSint32(TMEMBER_INT(_responseType)); persistMgr->transferPtr(TMEMBER_PTR(_font)); return STATUS_OK; diff --git a/engines/wintermute/ad/ad_response_box.cpp b/engines/wintermute/ad/ad_response_box.cpp index 5c0efb547ba6..f2e986cbdcf2 100644 --- a/engines/wintermute/ad/ad_response_box.cpp +++ b/engines/wintermute/ad/ad_response_box.cpp @@ -584,19 +584,19 @@ bool AdResponseBox::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_font)); persistMgr->transferPtr(TMEMBER_PTR(_fontHover)); persistMgr->transferBool(TMEMBER(_horizontal)); - persistMgr->transfer(TMEMBER(_lastResponseText)); - persistMgr->transfer(TMEMBER(_lastResponseTextOrig)); + persistMgr->transferCharPtr(TMEMBER(_lastResponseText)); + persistMgr->transferCharPtr(TMEMBER(_lastResponseTextOrig)); _respButtons.persist(persistMgr); persistMgr->transferRect32(TMEMBER(_responseArea)); _responses.persist(persistMgr); - persistMgr->transfer(TMEMBER(_scrollOffset)); + persistMgr->transferSint32(TMEMBER(_scrollOffset)); persistMgr->transferPtr(TMEMBER_PTR(_shieldWindow)); - persistMgr->transfer(TMEMBER(_spacing)); + persistMgr->transferSint32(TMEMBER(_spacing)); persistMgr->transferPtr(TMEMBER_PTR(_waitingScript)); persistMgr->transferPtr(TMEMBER_PTR(_window)); - persistMgr->transfer(TMEMBER_INT(_verticalAlign)); - persistMgr->transfer(TMEMBER_INT(_align)); + persistMgr->transferSint32(TMEMBER_INT(_verticalAlign)); + persistMgr->transferSint32(TMEMBER_INT(_align)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_response_context.cpp b/engines/wintermute/ad/ad_response_context.cpp index 0b58f5ba0ce8..44b43a6077be 100644 --- a/engines/wintermute/ad/ad_response_context.cpp +++ b/engines/wintermute/ad/ad_response_context.cpp @@ -50,8 +50,8 @@ AdResponseContext::~AdResponseContext() { ////////////////////////////////////////////////////////////////////////// bool AdResponseContext::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); - persistMgr->transfer(TMEMBER(_context)); - persistMgr->transfer(TMEMBER(_id)); + persistMgr->transferCharPtr(TMEMBER(_context)); + persistMgr->transferSint32(TMEMBER(_id)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp index 296ef430a2e0..ab7ab51f3042 100644 --- a/engines/wintermute/ad/ad_scene.cpp +++ b/engines/wintermute/ad/ad_scene.cpp @@ -2301,57 +2301,57 @@ bool AdScene::persist(BasePersistenceManager *persistMgr) { BaseObject::persist(persistMgr); persistMgr->transferBool(TMEMBER(_autoScroll)); - persistMgr->transfer(TMEMBER(_editorColBlocked)); - persistMgr->transfer(TMEMBER(_editorColBlockedSel)); - persistMgr->transfer(TMEMBER(_editorColDecor)); - persistMgr->transfer(TMEMBER(_editorColDecorSel)); - persistMgr->transfer(TMEMBER(_editorColEntity)); - persistMgr->transfer(TMEMBER(_editorColEntitySel)); - persistMgr->transfer(TMEMBER(_editorColFrame)); - persistMgr->transfer(TMEMBER(_editorColRegion)); - persistMgr->transfer(TMEMBER(_editorColRegionSel)); - persistMgr->transfer(TMEMBER(_editorColScale)); - persistMgr->transfer(TMEMBER(_editorColWaypoints)); - persistMgr->transfer(TMEMBER(_editorColWaypointsSel)); - persistMgr->transfer(TMEMBER(_editorMarginH)); - persistMgr->transfer(TMEMBER(_editorMarginV)); + persistMgr->transferUint32(TMEMBER(_editorColBlocked)); + persistMgr->transferUint32(TMEMBER(_editorColBlockedSel)); + persistMgr->transferUint32(TMEMBER(_editorColDecor)); + persistMgr->transferUint32(TMEMBER(_editorColDecorSel)); + persistMgr->transferUint32(TMEMBER(_editorColEntity)); + persistMgr->transferUint32(TMEMBER(_editorColEntitySel)); + persistMgr->transferUint32(TMEMBER(_editorColFrame)); + persistMgr->transferUint32(TMEMBER(_editorColRegion)); + persistMgr->transferUint32(TMEMBER(_editorColRegionSel)); + persistMgr->transferUint32(TMEMBER(_editorColScale)); + persistMgr->transferUint32(TMEMBER(_editorColWaypoints)); + persistMgr->transferUint32(TMEMBER(_editorColWaypointsSel)); + persistMgr->transferSint32(TMEMBER(_editorMarginH)); + persistMgr->transferSint32(TMEMBER(_editorMarginV)); persistMgr->transferBool(TMEMBER(_editorShowBlocked)); persistMgr->transferBool(TMEMBER(_editorShowDecor)); persistMgr->transferBool(TMEMBER(_editorShowEntities)); persistMgr->transferBool(TMEMBER(_editorShowRegions)); persistMgr->transferBool(TMEMBER(_editorShowScale)); persistMgr->transferPtr(TMEMBER_PTR(_fader)); - persistMgr->transfer(TMEMBER(_height)); + persistMgr->transferSint32(TMEMBER(_height)); persistMgr->transferBool(TMEMBER(_initialized)); - persistMgr->transfer(TMEMBER(_lastTimeH)); - persistMgr->transfer(TMEMBER(_lastTimeV)); + persistMgr->transferUint32(TMEMBER(_lastTimeH)); + persistMgr->transferUint32(TMEMBER(_lastTimeV)); _layers.persist(persistMgr); persistMgr->transferPtr(TMEMBER_PTR(_mainLayer)); _objects.persist(persistMgr); - persistMgr->transfer(TMEMBER(_offsetLeft)); - persistMgr->transfer(TMEMBER(_offsetTop)); + persistMgr->transferSint32(TMEMBER(_offsetLeft)); + persistMgr->transferSint32(TMEMBER(_offsetTop)); persistMgr->transferBool(TMEMBER(_paralaxScrolling)); persistMgr->transferBool(TMEMBER(_persistentState)); persistMgr->transferBool(TMEMBER(_persistentStateSprites)); - persistMgr->transfer(TMEMBER(_pfMaxTime)); + persistMgr->transferUint32(TMEMBER(_pfMaxTime)); _pfPath.persist(persistMgr); - persistMgr->transfer(TMEMBER(_pfPointsNum)); + persistMgr->transferSint32(TMEMBER(_pfPointsNum)); persistMgr->transferBool(TMEMBER(_pfReady)); persistMgr->transferPtr(TMEMBER_PTR(_pfRequester)); persistMgr->transferPtr(TMEMBER_PTR(_pfTarget)); persistMgr->transferPtr(TMEMBER_PTR(_pfTargetPath)); _rotLevels.persist(persistMgr); _scaleLevels.persist(persistMgr); - persistMgr->transfer(TMEMBER(_scrollPixelsH)); - persistMgr->transfer(TMEMBER(_scrollPixelsV)); - persistMgr->transfer(TMEMBER(_scrollTimeH)); - persistMgr->transfer(TMEMBER(_scrollTimeV)); + persistMgr->transferSint32(TMEMBER(_scrollPixelsH)); + persistMgr->transferSint32(TMEMBER(_scrollPixelsV)); + persistMgr->transferUint32(TMEMBER(_scrollTimeH)); + persistMgr->transferUint32(TMEMBER(_scrollTimeV)); persistMgr->transferPtr(TMEMBER_PTR(_shieldWindow)); - persistMgr->transfer(TMEMBER(_targetOffsetLeft)); - persistMgr->transfer(TMEMBER(_targetOffsetTop)); + persistMgr->transferSint32(TMEMBER(_targetOffsetLeft)); + persistMgr->transferSint32(TMEMBER(_targetOffsetTop)); _waypointGroups.persist(persistMgr); persistMgr->transferPtr(TMEMBER_PTR(_viewport)); - persistMgr->transfer(TMEMBER(_width)); + persistMgr->transferSint32(TMEMBER(_width)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_scene_node.cpp b/engines/wintermute/ad/ad_scene_node.cpp index 8548da91dbfd..5f6207c23adb 100644 --- a/engines/wintermute/ad/ad_scene_node.cpp +++ b/engines/wintermute/ad/ad_scene_node.cpp @@ -74,7 +74,7 @@ bool AdSceneNode::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_entity)); persistMgr->transferPtr(TMEMBER_PTR(_region)); - persistMgr->transfer(TMEMBER_INT(_type)); + persistMgr->transferSint32(TMEMBER_INT(_type)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_scene_state.cpp b/engines/wintermute/ad/ad_scene_state.cpp index 58cb5f514a51..a4218751c3f9 100644 --- a/engines/wintermute/ad/ad_scene_state.cpp +++ b/engines/wintermute/ad/ad_scene_state.cpp @@ -56,7 +56,7 @@ AdSceneState::~AdSceneState() { ////////////////////////////////////////////////////////////////////////// bool AdSceneState::persist(BasePersistenceManager *persistMgr) { - persistMgr->transfer(TMEMBER(_filename)); + persistMgr->transferCharPtr(TMEMBER(_filename)); _nodeStates.persist(persistMgr); return STATUS_OK; diff --git a/engines/wintermute/ad/ad_sentence.cpp b/engines/wintermute/ad/ad_sentence.cpp index 773181b373e4..21ffac5aaff3 100644 --- a/engines/wintermute/ad/ad_sentence.cpp +++ b/engines/wintermute/ad/ad_sentence.cpp @@ -249,21 +249,21 @@ bool AdSentence::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); - persistMgr->transfer(TMEMBER_INT(_align)); - persistMgr->transfer(TMEMBER(_currentStance)); + persistMgr->transferSint32(TMEMBER_INT(_align)); + persistMgr->transferSint32(TMEMBER(_currentStance)); persistMgr->transferPtr(TMEMBER_PTR(_currentSprite)); - persistMgr->transfer(TMEMBER(_currentSkelAnim)); - persistMgr->transfer(TMEMBER(_duration)); + persistMgr->transferCharPtr(TMEMBER(_currentSkelAnim)); + persistMgr->transferUint32(TMEMBER(_duration)); persistMgr->transferPtr(TMEMBER_PTR(_font)); persistMgr->transferPoint32(TMEMBER(_pos)); persistMgr->transferPtr(TMEMBER_PTR(_sound)); persistMgr->transferBool(TMEMBER(_soundStarted)); - persistMgr->transfer(TMEMBER(_stances)); - persistMgr->transfer(TMEMBER(_startTime)); + persistMgr->transferCharPtr(TMEMBER(_stances)); + persistMgr->transferUint32(TMEMBER(_startTime)); persistMgr->transferPtr(TMEMBER_PTR(_talkDef)); - persistMgr->transfer(TMEMBER(_tempStance)); - persistMgr->transfer(TMEMBER(_text)); - persistMgr->transfer(TMEMBER(_width)); + persistMgr->transferCharPtr(TMEMBER(_tempStance)); + persistMgr->transferCharPtr(TMEMBER(_text)); + persistMgr->transferSint32(TMEMBER(_width)); persistMgr->transferBool(TMEMBER(_fixedPos)); persistMgr->transferBool(TMEMBER(_freezable)); diff --git a/engines/wintermute/ad/ad_talk_def.cpp b/engines/wintermute/ad/ad_talk_def.cpp index 1fdeed418f87..22e3d7b4cc43 100644 --- a/engines/wintermute/ad/ad_talk_def.cpp +++ b/engines/wintermute/ad/ad_talk_def.cpp @@ -209,9 +209,9 @@ bool AdTalkDef::persist(BasePersistenceManager *persistMgr) { BaseObject::persist(persistMgr); persistMgr->transferPtr(TMEMBER_PTR(_defaultSprite)); - persistMgr->transfer(TMEMBER(_defaultSpriteFilename)); + persistMgr->transferCharPtr(TMEMBER(_defaultSpriteFilename)); persistMgr->transferPtr(TMEMBER_PTR(_defaultSpriteSet)); - persistMgr->transfer(TMEMBER(_defaultSpriteSetFilename)); + persistMgr->transferCharPtr(TMEMBER(_defaultSpriteSetFilename)); _nodes.persist(persistMgr); diff --git a/engines/wintermute/ad/ad_talk_node.cpp b/engines/wintermute/ad/ad_talk_node.cpp index b9be62e58197..6c0d2e1f068e 100644 --- a/engines/wintermute/ad/ad_talk_node.cpp +++ b/engines/wintermute/ad/ad_talk_node.cpp @@ -191,14 +191,14 @@ bool AdTalkNode::loadBuffer(char *buffer, bool complete) { ////////////////////////////////////////////////////////////////////////// bool AdTalkNode::persist(BasePersistenceManager *persistMgr) { - persistMgr->transfer(TMEMBER(_comment)); - persistMgr->transfer(TMEMBER(_startTime)); - persistMgr->transfer(TMEMBER(_endTime)); + persistMgr->transferCharPtr(TMEMBER(_comment)); + persistMgr->transferUint32(TMEMBER(_startTime)); + persistMgr->transferUint32(TMEMBER(_endTime)); persistMgr->transferBool(TMEMBER(_playToEnd)); persistMgr->transferPtr(TMEMBER_PTR(_sprite)); - persistMgr->transfer(TMEMBER(_spriteFilename)); + persistMgr->transferCharPtr(TMEMBER(_spriteFilename)); persistMgr->transferPtr(TMEMBER_PTR(_spriteSet)); - persistMgr->transfer(TMEMBER(_spriteSetFilename)); + persistMgr->transferCharPtr(TMEMBER(_spriteSetFilename)); return STATUS_OK; } diff --git a/engines/wintermute/ad/ad_waypoint_group.cpp b/engines/wintermute/ad/ad_waypoint_group.cpp index a8d474bf35ab..ae6b18e266cc 100644 --- a/engines/wintermute/ad/ad_waypoint_group.cpp +++ b/engines/wintermute/ad/ad_waypoint_group.cpp @@ -195,10 +195,10 @@ bool AdWaypointGroup::persist(BasePersistenceManager *persistMgr) { BaseObject::persist(persistMgr); persistMgr->transferBool(TMEMBER(_active)); - persistMgr->transfer(TMEMBER(_editorSelectedPoint)); + persistMgr->transferSint32(TMEMBER(_editorSelectedPoint)); persistMgr->transferFloat(TMEMBER(_lastMimicScale)); - persistMgr->transfer(TMEMBER(_lastMimicX)); - persistMgr->transfer(TMEMBER(_lastMimicY)); + persistMgr->transferSint32(TMEMBER(_lastMimicX)); + persistMgr->transferSint32(TMEMBER(_lastMimicY)); _points.persist(persistMgr); return STATUS_OK; diff --git a/engines/wintermute/base/base_fader.cpp b/engines/wintermute/base/base_fader.cpp index b5590abb082d..c7dac8be27a5 100644 --- a/engines/wintermute/base/base_fader.cpp +++ b/engines/wintermute/base/base_fader.cpp @@ -178,11 +178,11 @@ bool BaseFader::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_active)); persistMgr->transferByte(TMEMBER(_blue)); persistMgr->transferByte(TMEMBER(_currentAlpha)); - persistMgr->transfer(TMEMBER(_duration)); + persistMgr->transferUint32(TMEMBER(_duration)); persistMgr->transferByte(TMEMBER(_green)); persistMgr->transferByte(TMEMBER(_red)); persistMgr->transferByte(TMEMBER(_sourceAlpha)); - persistMgr->transfer(TMEMBER(_startTime)); + persistMgr->transferUint32(TMEMBER(_startTime)); persistMgr->transferByte(TMEMBER(_targetAlpha)); persistMgr->transferBool(TMEMBER(_system)); diff --git a/engines/wintermute/base/base_frame.cpp b/engines/wintermute/base/base_frame.cpp index 2e371223c85b..14557334611e 100644 --- a/engines/wintermute/base/base_frame.cpp +++ b/engines/wintermute/base/base_frame.cpp @@ -414,12 +414,12 @@ bool BaseFrame::persist(BasePersistenceManager *persistMgr) { BaseScriptable::persist(persistMgr); _applyEvent.persist(persistMgr); - persistMgr->transfer(TMEMBER(_delay)); + persistMgr->transferUint32(TMEMBER(_delay)); persistMgr->transferBool(TMEMBER(_editorExpanded)); persistMgr->transferBool(TMEMBER(_keyframe)); persistMgr->transferBool(TMEMBER(_killSound)); - persistMgr->transfer(TMEMBER(_moveX)); - persistMgr->transfer(TMEMBER(_moveY)); + persistMgr->transferSint32(TMEMBER(_moveX)); + persistMgr->transferSint32(TMEMBER(_moveY)); persistMgr->transferPtr(TMEMBER_PTR(_sound)); _subframes.persist(persistMgr); diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp index 033f01971215..6b7e1cf80341 100644 --- a/engines/wintermute/base/base_game.cpp +++ b/engines/wintermute/base/base_game.cpp @@ -3056,23 +3056,23 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_cursorNoninteractive)); persistMgr->transferBool(TMEMBER(_editorMode)); persistMgr->transferPtr(TMEMBER_PTR(_fader)); - persistMgr->transfer(TMEMBER(_freezeLevel)); + persistMgr->transferSint32(TMEMBER(_freezeLevel)); persistMgr->transferPtr(TMEMBER_PTR(_focusedWindow)); persistMgr->transferPtr(TMEMBER_PTR(_fontStorage)); persistMgr->transferBool(TMEMBER(_interactive)); persistMgr->transferPtr(TMEMBER_PTR(_keyboardState)); - persistMgr->transfer(TMEMBER(_lastTime)); + persistMgr->transferUint32(TMEMBER(_lastTime)); persistMgr->transferPtr(TMEMBER_PTR(_mainObject)); _musicSystem->persistChannels(persistMgr); _musicSystem->persistCrossfadeSettings(persistMgr); - persistMgr->transfer(TMEMBER(_offsetX)); - persistMgr->transfer(TMEMBER(_offsetY)); + persistMgr->transferSint32(TMEMBER(_offsetX)); + persistMgr->transferSint32(TMEMBER(_offsetY)); persistMgr->transferFloat(TMEMBER(_offsetPercentX)); persistMgr->transferFloat(TMEMBER(_offsetPercentY)); persistMgr->transferBool(TMEMBER(_origInteractive)); - persistMgr->transfer(TMEMBER_INT(_origState)); + persistMgr->transferSint32(TMEMBER_INT(_origState)); persistMgr->transferBool(TMEMBER(_personalizedSave)); persistMgr->transferBool(TMEMBER(_quitting)); @@ -3080,10 +3080,10 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_scEngine)); //persistMgr->transfer(TMEMBER(_soundMgr)); - persistMgr->transfer(TMEMBER_INT(_state)); + persistMgr->transferSint32(TMEMBER_INT(_state)); //persistMgr->transfer(TMEMBER(_surfaceStorage)); persistMgr->transferBool(TMEMBER(_subtitles)); - persistMgr->transfer(TMEMBER(_subtitlesSpeed)); + persistMgr->transferSint32(TMEMBER(_subtitlesSpeed)); persistMgr->transferPtr(TMEMBER_PTR(_systemFont)); persistMgr->transferPtr(TMEMBER_PTR(_videoFont)); persistMgr->transferBool(TMEMBER(_videoSubtitles)); @@ -3093,10 +3093,10 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) { _renderer->persistSaveLoadImages(persistMgr); - persistMgr->transfer(TMEMBER_INT(_textEncoding)); + persistMgr->transferSint32(TMEMBER_INT(_textEncoding)); persistMgr->transferBool(TMEMBER(_textRTL)); - persistMgr->transfer(TMEMBER(_soundBufferSizeSec)); + persistMgr->transferSint32(TMEMBER(_soundBufferSizeSec)); persistMgr->transferBool(TMEMBER(_suspendedRendering)); persistMgr->transferRect32(TMEMBER(_mouseLockRect)); @@ -3107,7 +3107,7 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_autorunDisabled)); persistMgr->transferBool(TMEMBER(_autoSaveOnExit)); - persistMgr->transfer(TMEMBER(_autoSaveSlot)); + persistMgr->transferUint32(TMEMBER(_autoSaveSlot)); persistMgr->transferBool(TMEMBER(_cursorHidden)); if (!persistMgr->getIsSaving()) { diff --git a/engines/wintermute/base/base_game_music.cpp b/engines/wintermute/base/base_game_music.cpp index 9462757a8af0..8894fb843f78 100644 --- a/engines/wintermute/base/base_game_music.cpp +++ b/engines/wintermute/base/base_game_music.cpp @@ -215,17 +215,17 @@ bool BaseGameMusic::updateMusicCrossfade() { bool BaseGameMusic::persistChannels(BasePersistenceManager *persistMgr) { for (int i = 0; i < NUM_MUSIC_CHANNELS; i++) { persistMgr->transferPtr(TMEMBER_PTR(_music[i])); - persistMgr->transfer(TMEMBER(_musicStartTime[i])); + persistMgr->transferUint32(TMEMBER(_musicStartTime[i])); } return true; } bool BaseGameMusic::persistCrossfadeSettings(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_musicCrossfadeRunning)); - persistMgr->transfer(TMEMBER(_musicCrossfadeStartTime)); - persistMgr->transfer(TMEMBER(_musicCrossfadeLength)); - persistMgr->transfer(TMEMBER(_musicCrossfadeChannel1)); - persistMgr->transfer(TMEMBER(_musicCrossfadeChannel2)); + persistMgr->transferUint32(TMEMBER(_musicCrossfadeStartTime)); + persistMgr->transferUint32(TMEMBER(_musicCrossfadeLength)); + persistMgr->transferSint32(TMEMBER(_musicCrossfadeChannel1)); + persistMgr->transferSint32(TMEMBER(_musicCrossfadeChannel2)); persistMgr->transferBool(TMEMBER(_musicCrossfadeSwap)); return true; } diff --git a/engines/wintermute/base/base_keyboard_state.cpp b/engines/wintermute/base/base_keyboard_state.cpp index 014802d71532..77469e07a5af 100644 --- a/engines/wintermute/base/base_keyboard_state.cpp +++ b/engines/wintermute/base/base_keyboard_state.cpp @@ -222,9 +222,9 @@ bool BaseKeyboardState::persist(BasePersistenceManager *persistMgr) { BaseScriptable::persist(persistMgr); persistMgr->transferBool(TMEMBER(_currentAlt)); - persistMgr->transfer(TMEMBER(_currentCharCode)); + persistMgr->transferUint32(TMEMBER(_currentCharCode)); persistMgr->transferBool(TMEMBER(_currentControl)); - persistMgr->transfer(TMEMBER(_currentKeyData)); + persistMgr->transferUint32(TMEMBER(_currentKeyData)); persistMgr->transferBool(TMEMBER(_currentPrintable)); persistMgr->transferBool(TMEMBER(_currentShift)); @@ -276,17 +276,21 @@ uint32 BaseKeyboardState::keyCodeToVKey(Common::Event *event) { } enum VKeyCodes { - kVkSpace = 32, - kVkLeft = 37, - kVkUp = 38, - kVkRight = 39, - kVkDown = 40 + kVkEscape = 27, + kVkSpace = 32, + kVkLeft = 37, + kVkUp = 38, + kVkRight = 39, + kVkDown = 40 }; ////////////////////////////////////////////////////////////////////////// Common::KeyCode BaseKeyboardState::vKeyToKeyCode(uint32 vkey) { // todo switch (vkey) { + case kVkEscape: + return Common::KEYCODE_ESCAPE; + break; case kVkSpace: return Common::KEYCODE_SPACE; break; diff --git a/engines/wintermute/base/base_object.cpp b/engines/wintermute/base/base_object.cpp index 14e15b71610a..540c7dd16421 100644 --- a/engines/wintermute/base/base_object.cpp +++ b/engines/wintermute/base/base_object.cpp @@ -953,33 +953,33 @@ bool BaseObject::persist(BasePersistenceManager *persistMgr) { BaseScriptHolder::persist(persistMgr); for (int i = 0; i < 7; i++) { - persistMgr->transfer(TMEMBER(_caption[i])); + persistMgr->transferCharPtr(TMEMBER(_caption[i])); } persistMgr->transferPtr(TMEMBER_PTR(_activeCursor)); - persistMgr->transfer(TMEMBER(_alphaColor)); + persistMgr->transferUint32(TMEMBER(_alphaColor)); persistMgr->transferBool(TMEMBER(_autoSoundPanning)); persistMgr->transferPtr(TMEMBER_PTR(_cursor)); persistMgr->transferBool(TMEMBER(_sharedCursors)); persistMgr->transferBool(TMEMBER(_editorAlwaysRegister)); persistMgr->transferBool(TMEMBER(_editorOnly)); persistMgr->transferBool(TMEMBER(_editorSelected)); - persistMgr->transfer(TMEMBER(_iD)); + persistMgr->transferSint32(TMEMBER(_iD)); persistMgr->transferBool(TMEMBER(_is3D)); persistMgr->transferBool(TMEMBER(_movable)); - persistMgr->transfer(TMEMBER(_posX)); - persistMgr->transfer(TMEMBER(_posY)); + persistMgr->transferSint32(TMEMBER(_posX)); + persistMgr->transferSint32(TMEMBER(_posY)); persistMgr->transferFloat(TMEMBER(_relativeScale)); persistMgr->transferBool(TMEMBER(_rotatable)); persistMgr->transferFloat(TMEMBER(_scale)); persistMgr->transferPtr(TMEMBER_PTR(_sFX)); - persistMgr->transfer(TMEMBER(_sFXStart)); - persistMgr->transfer(TMEMBER(_sFXVolume)); + persistMgr->transferUint32(TMEMBER(_sFXStart)); + persistMgr->transferSint32(TMEMBER(_sFXVolume)); persistMgr->transferBool(TMEMBER(_ready)); persistMgr->transferRect32(TMEMBER(_rect)); persistMgr->transferBool(TMEMBER(_rectSet)); persistMgr->transferBool(TMEMBER(_registrable)); persistMgr->transferBool(TMEMBER(_shadowable)); - persistMgr->transfer(TMEMBER(_soundEvent)); + persistMgr->transferCharPtr(TMEMBER(_soundEvent)); persistMgr->transferBool(TMEMBER(_zoomable)); persistMgr->transferFloat(TMEMBER(_scaleX)); @@ -992,14 +992,14 @@ bool BaseObject::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_saveState)); persistMgr->transferBool(TMEMBER(_nonIntMouseEvents)); - persistMgr->transfer(TMEMBER_INT(_sFXType)); + persistMgr->transferSint32(TMEMBER_INT(_sFXType)); persistMgr->transferFloat(TMEMBER(_sFXParam1)); persistMgr->transferFloat(TMEMBER(_sFXParam2)); persistMgr->transferFloat(TMEMBER(_sFXParam3)); persistMgr->transferFloat(TMEMBER(_sFXParam4)); - persistMgr->transfer(TMEMBER_INT(_blendMode)); + persistMgr->transferSint32(TMEMBER_INT(_blendMode)); return STATUS_OK; } diff --git a/engines/wintermute/base/base_persistence_manager.cpp b/engines/wintermute/base/base_persistence_manager.cpp index 1caa0ad20bd8..3d0fc0e925e5 100644 --- a/engines/wintermute/base/base_persistence_manager.cpp +++ b/engines/wintermute/base/base_persistence_manager.cpp @@ -606,7 +606,7 @@ bool BasePersistenceManager::transferBool(const char *name, bool *val) { ////////////////////////////////////////////////////////////////////////// // int -bool BasePersistenceManager::transfer(const char *name, int32 *val) { +bool BasePersistenceManager::transferSint32(const char *name, int32 *val) { if (_saving) { _saveStream->writeSint32LE(*val); if (_saveStream->err()) { @@ -625,7 +625,7 @@ bool BasePersistenceManager::transfer(const char *name, int32 *val) { ////////////////////////////////////////////////////////////////////////// // DWORD -bool BasePersistenceManager::transfer(const char *name, uint32 *val) { +bool BasePersistenceManager::transferUint32(const char *name, uint32 *val) { if (_saving) { _saveStream->writeUint32LE(*val); if (_saveStream->err()) { @@ -682,7 +682,7 @@ bool BasePersistenceManager::transferDouble(const char *name, double *val) { ////////////////////////////////////////////////////////////////////////// // char* -bool BasePersistenceManager::transfer(const char *name, char **val) { +bool BasePersistenceManager::transferCharPtr(const char *name, char **val) { if (_saving) { putString(*val); return STATUS_OK; @@ -699,7 +699,7 @@ bool BasePersistenceManager::transfer(const char *name, char **val) { ////////////////////////////////////////////////////////////////////////// // const char* -bool BasePersistenceManager::transfer(const char *name, const char **val) { +bool BasePersistenceManager::transferConstChar(const char *name, const char **val) { if (_saving) { putString(*val); return STATUS_OK; @@ -716,7 +716,7 @@ bool BasePersistenceManager::transfer(const char *name, const char **val) { ////////////////////////////////////////////////////////////////////////// // Common::String -bool BasePersistenceManager::transfer(const char *name, Common::String *val) { +bool BasePersistenceManager::transferString(const char *name, Common::String *val) { if (_saving) { putString(val->c_str()); return STATUS_OK; @@ -736,37 +736,6 @@ bool BasePersistenceManager::transfer(const char *name, Common::String *val) { } } -////////////////////////////////////////////////////////////////////////// -bool BasePersistenceManager::transfer(const char *name, AnsiStringArray &val) { - size_t size; - - if (_saving) { - size = val.size(); - _saveStream->writeUint32LE(size); - - for (AnsiStringArray::iterator it = val.begin(); it != val.end(); ++it) { - putString((*it).c_str()); - } - } else { - val.clear(); - size = _loadStream->readUint32LE(); - - for (size_t i = 0; i < size; i++) { - char *str = getString(); - if (_loadStream->err()) { - delete[] str; - return STATUS_FAILED; - } - if (str) { - val.push_back(str); - } - delete[] str; - } - } - - return STATUS_OK; -} - ////////////////////////////////////////////////////////////////////////// // BYTE bool BasePersistenceManager::transferByte(const char *name, byte *val) { diff --git a/engines/wintermute/base/base_persistence_manager.h b/engines/wintermute/base/base_persistence_manager.h index 03316d9d1976..43259b26ff8f 100644 --- a/engines/wintermute/base/base_persistence_manager.h +++ b/engines/wintermute/base/base_persistence_manager.h @@ -74,19 +74,18 @@ class BasePersistenceManager { byte *_richBuffer; bool transferPtr(const char *name, void *val); - bool transfer(const char *name, int32 *val); - bool transfer(const char *name, uint32 *val); + bool transferSint32(const char *name, int32 *val); + bool transferUint32(const char *name, uint32 *val); bool transferFloat(const char *name, float *val); bool transferDouble(const char *name, double *val); bool transferBool(const char *name, bool *val); bool transferByte(const char *name, byte *val); bool transferRect32(const char *name, Rect32 *val); bool transferPoint32(const char *name, Point32 *val); - bool transfer(const char *name, const char **val); - bool transfer(const char *name, char **val); - bool transfer(const char *name, Common::String *val); + bool transferConstChar(const char *name, const char **val); + bool transferCharPtr(const char *name, char **val); + bool transferString(const char *name, Common::String *val); bool transferVector2(const char *name, Vector2 *val); - bool transfer(const char *name, AnsiStringArray &Val); BasePersistenceManager(const char *savePrefix = nullptr, bool deleteSingleton = false); virtual ~BasePersistenceManager(); bool checkVersion(byte verMajor, byte verMinor, byte verBuild); diff --git a/engines/wintermute/base/base_point.cpp b/engines/wintermute/base/base_point.cpp index fe6ca941f308..84b6a629c770 100644 --- a/engines/wintermute/base/base_point.cpp +++ b/engines/wintermute/base/base_point.cpp @@ -54,8 +54,8 @@ BasePoint::BasePoint(int initX, int initY) { ////////////////////////////////////////////////////////////////////////// bool BasePoint::persist(BasePersistenceManager *persistMgr) { - persistMgr->transfer(TMEMBER(x)); - persistMgr->transfer(TMEMBER(y)); + persistMgr->transferSint32(TMEMBER(x)); + persistMgr->transferSint32(TMEMBER(y)); return STATUS_OK; } diff --git a/engines/wintermute/base/base_region.cpp b/engines/wintermute/base/base_region.cpp index 2953adc8a5ea..dc17b18ea2c3 100644 --- a/engines/wintermute/base/base_region.cpp +++ b/engines/wintermute/base/base_region.cpp @@ -431,10 +431,10 @@ bool BaseRegion::persist(BasePersistenceManager *persistMgr) { BaseObject::persist(persistMgr); persistMgr->transferBool(TMEMBER(_active)); - persistMgr->transfer(TMEMBER(_editorSelectedPoint)); + persistMgr->transferSint32(TMEMBER(_editorSelectedPoint)); persistMgr->transferFloat(TMEMBER(_lastMimicScale)); - persistMgr->transfer(TMEMBER(_lastMimicX)); - persistMgr->transfer(TMEMBER(_lastMimicY)); + persistMgr->transferSint32(TMEMBER(_lastMimicX)); + persistMgr->transferSint32(TMEMBER(_lastMimicY)); _points.persist(persistMgr); return STATUS_OK; diff --git a/engines/wintermute/base/base_script_holder.cpp b/engines/wintermute/base/base_script_holder.cpp index 2e21b3e8aa6d..5fb0b62713e2 100644 --- a/engines/wintermute/base/base_script_holder.cpp +++ b/engines/wintermute/base/base_script_holder.cpp @@ -280,14 +280,14 @@ bool BaseScriptHolder::saveAsText(BaseDynamicBuffer *buffer, int indent) { bool BaseScriptHolder::persist(BasePersistenceManager *persistMgr) { BaseScriptable::persist(persistMgr); - persistMgr->transfer(TMEMBER(_filename)); + persistMgr->transferCharPtr(TMEMBER(_filename)); persistMgr->transferBool(TMEMBER(_freezable)); if (persistMgr->getIsSaving()) { const char *name = getName(); - persistMgr->transfer(TMEMBER(name)); + persistMgr->transferConstChar(TMEMBER(name)); } else { char *name; - persistMgr->transfer(TMEMBER(name)); + persistMgr->transferCharPtr(TMEMBER(name)); setName(name); delete[] name; } diff --git a/engines/wintermute/base/base_scriptable.cpp b/engines/wintermute/base/base_scriptable.cpp index be1e18c2c43d..d2ff627f0a7c 100644 --- a/engines/wintermute/base/base_scriptable.cpp +++ b/engines/wintermute/base/base_scriptable.cpp @@ -153,7 +153,7 @@ void BaseScriptable::scSetBool(bool val) { ////////////////////////////////////////////////////////////////////////// bool BaseScriptable::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); - persistMgr->transfer(TMEMBER(_refCount)); + persistMgr->transferSint32(TMEMBER(_refCount)); persistMgr->transferPtr(TMEMBER_PTR(_scProp)); persistMgr->transferPtr(TMEMBER_PTR(_scValue)); diff --git a/engines/wintermute/base/base_sprite.cpp b/engines/wintermute/base/base_sprite.cpp index df696f21a2bc..b1fcb42dcc8f 100644 --- a/engines/wintermute/base/base_sprite.cpp +++ b/engines/wintermute/base/base_sprite.cpp @@ -524,21 +524,21 @@ bool BaseSprite::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_changed)); persistMgr->transferBool(TMEMBER(_paused)); persistMgr->transferBool(TMEMBER(_continuous)); - persistMgr->transfer(TMEMBER(_currentFrame)); + persistMgr->transferSint32(TMEMBER(_currentFrame)); persistMgr->transferBool(TMEMBER(_editorAllFrames)); - persistMgr->transfer(TMEMBER(_editorBgAlpha)); - persistMgr->transfer(TMEMBER(_editorBgFile)); - persistMgr->transfer(TMEMBER(_editorBgOffsetX)); - persistMgr->transfer(TMEMBER(_editorBgOffsetY)); + persistMgr->transferSint32(TMEMBER(_editorBgAlpha)); + persistMgr->transferCharPtr(TMEMBER(_editorBgFile)); + persistMgr->transferSint32(TMEMBER(_editorBgOffsetX)); + persistMgr->transferSint32(TMEMBER(_editorBgOffsetY)); persistMgr->transferBool(TMEMBER(_editorMuted)); persistMgr->transferBool(TMEMBER(_finished)); _frames.persist(persistMgr); - persistMgr->transfer(TMEMBER(_lastFrameTime)); + persistMgr->transferUint32(TMEMBER(_lastFrameTime)); persistMgr->transferBool(TMEMBER(_looping)); - persistMgr->transfer(TMEMBER(_moveX)); - persistMgr->transfer(TMEMBER(_moveY)); + persistMgr->transferSint32(TMEMBER(_moveX)); + persistMgr->transferSint32(TMEMBER(_moveY)); persistMgr->transferPtr(TMEMBER_PTR(_owner)); persistMgr->transferBool(TMEMBER(_precise)); persistMgr->transferBool(TMEMBER(_streamed)); diff --git a/engines/wintermute/base/base_sub_frame.cpp b/engines/wintermute/base/base_sub_frame.cpp index 490a9945dbf3..38eebb067b72 100644 --- a/engines/wintermute/base/base_sub_frame.cpp +++ b/engines/wintermute/base/base_sub_frame.cpp @@ -386,25 +386,25 @@ bool BaseSubFrame::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_2DOnly)); persistMgr->transferBool(TMEMBER(_3DOnly)); - persistMgr->transfer(TMEMBER(_alpha)); + persistMgr->transferUint32(TMEMBER(_alpha)); persistMgr->transferBool(TMEMBER(_decoration)); persistMgr->transferBool(TMEMBER(_editorSelected)); - persistMgr->transfer(TMEMBER(_hotspotX)); - persistMgr->transfer(TMEMBER(_hotspotY)); + persistMgr->transferSint32(TMEMBER(_hotspotX)); + persistMgr->transferSint32(TMEMBER(_hotspotY)); persistMgr->transferRect32(TMEMBER(_rect)); persistMgr->transferBool(TMEMBER(_wantsDefaultRect)); - persistMgr->transfer(TMEMBER(_surfaceFilename)); + persistMgr->transferCharPtr(TMEMBER(_surfaceFilename)); persistMgr->transferBool(TMEMBER(_cKDefault)); persistMgr->transferByte(TMEMBER(_cKRed)); persistMgr->transferByte(TMEMBER(_cKGreen)); persistMgr->transferByte(TMEMBER(_cKBlue)); - persistMgr->transfer(TMEMBER(_lifeTime)); + persistMgr->transferSint32(TMEMBER(_lifeTime)); persistMgr->transferBool(TMEMBER(_keepLoaded)); persistMgr->transferBool(TMEMBER(_mirrorX)); persistMgr->transferBool(TMEMBER(_mirrorY)); - persistMgr->transfer(TMEMBER(_transparent)); + persistMgr->transferUint32(TMEMBER(_transparent)); return STATUS_OK; } diff --git a/engines/wintermute/base/base_viewport.cpp b/engines/wintermute/base/base_viewport.cpp index acc0ee7561ee..a6e8b179277d 100644 --- a/engines/wintermute/base/base_viewport.cpp +++ b/engines/wintermute/base/base_viewport.cpp @@ -55,8 +55,8 @@ bool BaseViewport::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); persistMgr->transferPtr(TMEMBER_PTR(_mainObject)); - persistMgr->transfer(TMEMBER(_offsetX)); - persistMgr->transfer(TMEMBER(_offsetY)); + persistMgr->transferSint32(TMEMBER(_offsetX)); + persistMgr->transferSint32(TMEMBER(_offsetY)); persistMgr->transferRect32(TMEMBER(_rect)); return STATUS_OK; diff --git a/engines/wintermute/base/font/base_font_bitmap.cpp b/engines/wintermute/base/font/base_font_bitmap.cpp index dd54e5eb3f5e..95f9a83a6ade 100644 --- a/engines/wintermute/base/font/base_font_bitmap.cpp +++ b/engines/wintermute/base/font/base_font_bitmap.cpp @@ -495,13 +495,13 @@ bool BaseFontBitmap::loadBuffer(char *buffer) { bool BaseFontBitmap::persist(BasePersistenceManager *persistMgr) { BaseFont::persist(persistMgr); - persistMgr->transfer(TMEMBER(_numColumns)); + persistMgr->transferSint32(TMEMBER(_numColumns)); persistMgr->transferPtr(TMEMBER_PTR(_subframe)); - persistMgr->transfer(TMEMBER(_tileHeight)); - persistMgr->transfer(TMEMBER(_tileWidth)); + persistMgr->transferSint32(TMEMBER(_tileHeight)); + persistMgr->transferSint32(TMEMBER(_tileWidth)); persistMgr->transferPtr(TMEMBER_PTR(_sprite)); - persistMgr->transfer(TMEMBER(_widthsFrame)); + persistMgr->transferSint32(TMEMBER(_widthsFrame)); if (persistMgr->getIsSaving()) { persistMgr->putBytes(_widths, sizeof(_widths)); diff --git a/engines/wintermute/base/font/base_font_truetype.cpp b/engines/wintermute/base/font/base_font_truetype.cpp index 13e88f573435..55481c7c0322 100644 --- a/engines/wintermute/base/font/base_font_truetype.cpp +++ b/engines/wintermute/base/font/base_font_truetype.cpp @@ -524,21 +524,21 @@ bool BaseFontTT::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_isItalic)); persistMgr->transferBool(TMEMBER(_isUnderline)); persistMgr->transferBool(TMEMBER(_isStriked)); - persistMgr->transfer(TMEMBER(_fontHeight)); - persistMgr->transfer(TMEMBER(_fontFile)); + persistMgr->transferSint32(TMEMBER(_fontHeight)); + persistMgr->transferCharPtr(TMEMBER(_fontFile)); // persist layers int32 numLayers; if (persistMgr->getIsSaving()) { numLayers = _layers.size(); - persistMgr->transfer(TMEMBER(numLayers)); + persistMgr->transferSint32(TMEMBER(numLayers)); for (int i = 0; i < numLayers; i++) { _layers[i]->persist(persistMgr); } } else { numLayers = _layers.size(); - persistMgr->transfer(TMEMBER(numLayers)); + persistMgr->transferSint32(TMEMBER(numLayers)); for (int i = 0; i < numLayers; i++) { BaseTTFontLayer *layer = new BaseTTFontLayer; layer->persist(persistMgr); diff --git a/engines/wintermute/base/font/base_font_truetype.h b/engines/wintermute/base/font/base_font_truetype.h index 9e0a08259304..2d7ebba69112 100644 --- a/engines/wintermute/base/font/base_font_truetype.h +++ b/engines/wintermute/base/font/base_font_truetype.h @@ -84,9 +84,9 @@ class BaseFontTT : public BaseFont { } bool persist(BasePersistenceManager *persistMgr) { - persistMgr->transfer(TMEMBER(_offsetX)); - persistMgr->transfer(TMEMBER(_offsetY)); - persistMgr->transfer(TMEMBER(_color)); + persistMgr->transferSint32(TMEMBER(_offsetX)); + persistMgr->transferSint32(TMEMBER(_offsetY)); + persistMgr->transferUint32(TMEMBER(_color)); return STATUS_OK; } diff --git a/engines/wintermute/base/gfx/base_renderer.cpp b/engines/wintermute/base/gfx/base_renderer.cpp index 818010e00e1a..858a7fc6dcf1 100644 --- a/engines/wintermute/base/gfx/base_renderer.cpp +++ b/engines/wintermute/base/gfx/base_renderer.cpp @@ -173,12 +173,12 @@ void BaseRenderer::endSaveLoad() { } void BaseRenderer::persistSaveLoadImages(BasePersistenceManager *persistMgr) { - persistMgr->transfer(TMEMBER(_loadImageName)); - persistMgr->transfer(TMEMBER(_saveImageName)); - persistMgr->transfer(TMEMBER(_saveImageX)); - persistMgr->transfer(TMEMBER(_saveImageY)); - persistMgr->transfer(TMEMBER(_loadImageX)); - persistMgr->transfer(TMEMBER(_loadImageY)); + persistMgr->transferString(TMEMBER(_loadImageName)); + persistMgr->transferString(TMEMBER(_saveImageName)); + persistMgr->transferSint32(TMEMBER(_saveImageX)); + persistMgr->transferSint32(TMEMBER(_saveImageY)); + persistMgr->transferSint32(TMEMBER(_loadImageX)); + persistMgr->transferSint32(TMEMBER(_loadImageY)); } ////////////////////////////////////////////////////////////////////// diff --git a/engines/wintermute/base/particles/part_emitter.cpp b/engines/wintermute/base/particles/part_emitter.cpp index c5c049a37ca1..061352b60fc2 100644 --- a/engines/wintermute/base/particles/part_emitter.cpp +++ b/engines/wintermute/base/particles/part_emitter.cpp @@ -1156,11 +1156,11 @@ const char *PartEmitter::scToString() { bool PartEmitter::persist(BasePersistenceManager *persistMgr) { BaseObject::persist(persistMgr); - persistMgr->transfer(TMEMBER(_width)); - persistMgr->transfer(TMEMBER(_height)); + persistMgr->transferSint32(TMEMBER(_width)); + persistMgr->transferSint32(TMEMBER(_height)); - persistMgr->transfer(TMEMBER(_angle1)); - persistMgr->transfer(TMEMBER(_angle2)); + persistMgr->transferSint32(TMEMBER(_angle1)); + persistMgr->transferSint32(TMEMBER(_angle2)); persistMgr->transferFloat(TMEMBER(_velocity1)); persistMgr->transferFloat(TMEMBER(_velocity2)); @@ -1170,29 +1170,29 @@ bool PartEmitter::persist(BasePersistenceManager *persistMgr) { persistMgr->transferFloat(TMEMBER(_scale2)); persistMgr->transferBool(TMEMBER(_scaleZBased)); - persistMgr->transfer(TMEMBER(_maxParticles)); + persistMgr->transferSint32(TMEMBER(_maxParticles)); - persistMgr->transfer(TMEMBER(_lifeTime1)); - persistMgr->transfer(TMEMBER(_lifeTime2)); + persistMgr->transferSint32(TMEMBER(_lifeTime1)); + persistMgr->transferSint32(TMEMBER(_lifeTime2)); persistMgr->transferBool(TMEMBER(_lifeTimeZBased)); - persistMgr->transfer(TMEMBER(_genInterval)); - persistMgr->transfer(TMEMBER(_genAmount)); + persistMgr->transferSint32(TMEMBER(_genInterval)); + persistMgr->transferSint32(TMEMBER(_genAmount)); persistMgr->transferBool(TMEMBER(_running)); - persistMgr->transfer(TMEMBER(_overheadTime)); + persistMgr->transferSint32(TMEMBER(_overheadTime)); persistMgr->transferRect32(TMEMBER(_border)); - persistMgr->transfer(TMEMBER(_borderThicknessLeft)); - persistMgr->transfer(TMEMBER(_borderThicknessRight)); - persistMgr->transfer(TMEMBER(_borderThicknessTop)); - persistMgr->transfer(TMEMBER(_borderThicknessBottom)); + persistMgr->transferSint32(TMEMBER(_borderThicknessLeft)); + persistMgr->transferSint32(TMEMBER(_borderThicknessRight)); + persistMgr->transferSint32(TMEMBER(_borderThicknessTop)); + persistMgr->transferSint32(TMEMBER(_borderThicknessBottom)); - persistMgr->transfer(TMEMBER(_fadeInTime)); - persistMgr->transfer(TMEMBER(_fadeOutTime)); + persistMgr->transferSint32(TMEMBER(_fadeInTime)); + persistMgr->transferSint32(TMEMBER(_fadeOutTime)); - persistMgr->transfer(TMEMBER(_alpha1)); - persistMgr->transfer(TMEMBER(_alpha2)); + persistMgr->transferSint32(TMEMBER(_alpha1)); + persistMgr->transferSint32(TMEMBER(_alpha2)); persistMgr->transferBool(TMEMBER(_alphaTimeBased)); persistMgr->transferFloat(TMEMBER(_angVelocity1)); @@ -1207,10 +1207,10 @@ bool PartEmitter::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_useRegion)); - persistMgr->transfer(TMEMBER_INT(_maxBatches)); - persistMgr->transfer(TMEMBER_INT(_batchesGenerated)); + persistMgr->transferSint32(TMEMBER_INT(_maxBatches)); + persistMgr->transferSint32(TMEMBER_INT(_batchesGenerated)); - persistMgr->transfer(TMEMBER(_emitEvent)); + persistMgr->transferCharPtr(TMEMBER(_emitEvent)); persistMgr->transferPtr(TMEMBER_PTR(_owner)); @@ -1219,12 +1219,12 @@ bool PartEmitter::persist(BasePersistenceManager *persistMgr) { uint32 numForces; if (persistMgr->getIsSaving()) { numForces = _forces.size(); - persistMgr->transfer(TMEMBER(numForces)); + persistMgr->transferUint32(TMEMBER(numForces)); for (uint32 i = 0; i < _forces.size(); i++) { _forces[i]->persist(persistMgr); } } else { - persistMgr->transfer(TMEMBER(numForces)); + persistMgr->transferUint32(TMEMBER(numForces)); for (uint32 i = 0; i < numForces; i++) { PartForce *force = new PartForce(_gameRef); force->persist(persistMgr); @@ -1235,12 +1235,12 @@ bool PartEmitter::persist(BasePersistenceManager *persistMgr) { uint32 numParticles; if (persistMgr->getIsSaving()) { numParticles = _particles.size(); - persistMgr->transfer(TMEMBER(numParticles)); + persistMgr->transferUint32(TMEMBER(numParticles)); for (uint32 i = 0; i < _particles.size(); i++) { _particles[i]->persist(persistMgr); } } else { - persistMgr->transfer(TMEMBER(numParticles)); + persistMgr->transferUint32(TMEMBER(numParticles)); for (uint32 i = 0; i < numParticles; i++) { PartParticle *particle = new PartParticle(_gameRef); particle->persist(persistMgr); diff --git a/engines/wintermute/base/particles/part_force.cpp b/engines/wintermute/base/particles/part_force.cpp index e7583e554a61..39d98c182eda 100644 --- a/engines/wintermute/base/particles/part_force.cpp +++ b/engines/wintermute/base/particles/part_force.cpp @@ -49,15 +49,15 @@ PartForce::~PartForce(void) { bool PartForce::persist(BasePersistenceManager *persistMgr) { if (persistMgr->getIsSaving()) { const char *name = getName(); - persistMgr->transfer(TMEMBER(name)); + persistMgr->transferConstChar(TMEMBER(name)); } else { const char *name; - persistMgr->transfer(TMEMBER(name)); + persistMgr->transferConstChar(TMEMBER(name)); setName(name); } persistMgr->transferVector2(TMEMBER(_pos)); persistMgr->transferVector2(TMEMBER(_direction)); - persistMgr->transfer(TMEMBER_INT(_type)); + persistMgr->transferSint32(TMEMBER_INT(_type)); return STATUS_OK; } diff --git a/engines/wintermute/base/particles/part_particle.cpp b/engines/wintermute/base/particles/part_particle.cpp index c5bf0f832669..11470561f079 100644 --- a/engines/wintermute/base/particles/part_particle.cpp +++ b/engines/wintermute/base/particles/part_particle.cpp @@ -230,32 +230,32 @@ bool PartParticle::fadeOut(uint32 currentTime, int fadeTime) { ////////////////////////////////////////////////////////////////////////// bool PartParticle::persist(BasePersistenceManager *persistMgr) { - persistMgr->transfer(TMEMBER(_alpha1)); - persistMgr->transfer(TMEMBER(_alpha2)); + persistMgr->transferSint32(TMEMBER(_alpha1)); + persistMgr->transferSint32(TMEMBER(_alpha2)); persistMgr->transferRect32(TMEMBER(_border)); persistMgr->transferVector2(TMEMBER(_pos)); persistMgr->transferFloat(TMEMBER(_posZ)); persistMgr->transferVector2(TMEMBER(_velocity)); persistMgr->transferFloat(TMEMBER(_scale)); - persistMgr->transfer(TMEMBER(_creationTime)); - persistMgr->transfer(TMEMBER(_lifeTime)); + persistMgr->transferUint32(TMEMBER(_creationTime)); + persistMgr->transferSint32(TMEMBER(_lifeTime)); persistMgr->transferBool(TMEMBER(_isDead)); - persistMgr->transfer(TMEMBER_INT(_state)); - persistMgr->transfer(TMEMBER(_fadeStart)); - persistMgr->transfer(TMEMBER(_fadeTime)); - persistMgr->transfer(TMEMBER(_currentAlpha)); + persistMgr->transferSint32(TMEMBER_INT(_state)); + persistMgr->transferUint32(TMEMBER(_fadeStart)); + persistMgr->transferSint32(TMEMBER(_fadeTime)); + persistMgr->transferSint32(TMEMBER(_currentAlpha)); persistMgr->transferFloat(TMEMBER(_angVelocity)); persistMgr->transferFloat(TMEMBER(_rotation)); persistMgr->transferFloat(TMEMBER(_growthRate)); persistMgr->transferBool(TMEMBER(_exponentialGrowth)); - persistMgr->transfer(TMEMBER(_fadeStartAlpha)); + persistMgr->transferSint32(TMEMBER(_fadeStartAlpha)); if (persistMgr->getIsSaving()) { const char *filename = _sprite->getFilename(); - persistMgr->transfer(TMEMBER(filename)); + persistMgr->transferConstChar(TMEMBER(filename)); } else { char *filename; - persistMgr->transfer(TMEMBER(filename)); + persistMgr->transferCharPtr(TMEMBER(filename)); SystemClassRegistry::getInstance()->_disabled = true; setSprite(filename); SystemClassRegistry::getInstance()->_disabled = false; diff --git a/engines/wintermute/base/scriptables/script.cpp b/engines/wintermute/base/scriptables/script.cpp index 49152eca0030..5e4ae3ea9501 100644 --- a/engines/wintermute/base/scriptables/script.cpp +++ b/engines/wintermute/base/scriptables/script.cpp @@ -1249,15 +1249,15 @@ bool ScScript::persist(BasePersistenceManager *persistMgr) { // buffer if (persistMgr->getIsSaving()) { if (_state != SCRIPT_PERSISTENT && _state != SCRIPT_FINISHED && _state != SCRIPT_THREAD_FINISHED) { - persistMgr->transfer(TMEMBER(_bufferSize)); + persistMgr->transferUint32(TMEMBER(_bufferSize)); persistMgr->putBytes(_buffer, _bufferSize); } else { // don't save idle/finished scripts int32 bufferSize = 0; - persistMgr->transfer(TMEMBER(bufferSize)); + persistMgr->transferSint32(TMEMBER(bufferSize)); } } else { - persistMgr->transfer(TMEMBER(_bufferSize)); + persistMgr->transferUint32(TMEMBER(_bufferSize)); if (_bufferSize > 0) { _buffer = new byte[_bufferSize]; persistMgr->getBytes(_buffer, _bufferSize); @@ -1270,26 +1270,26 @@ bool ScScript::persist(BasePersistenceManager *persistMgr) { } persistMgr->transferPtr(TMEMBER_PTR(_callStack)); - persistMgr->transfer(TMEMBER(_currentLine)); + persistMgr->transferSint32(TMEMBER(_currentLine)); persistMgr->transferPtr(TMEMBER_PTR(_engine)); - persistMgr->transfer(TMEMBER(_filename)); + persistMgr->transferCharPtr(TMEMBER(_filename)); persistMgr->transferBool(TMEMBER(_freezable)); persistMgr->transferPtr(TMEMBER_PTR(_globals)); - persistMgr->transfer(TMEMBER(_iP)); + persistMgr->transferUint32(TMEMBER(_iP)); persistMgr->transferPtr(TMEMBER_PTR(_scopeStack)); persistMgr->transferPtr(TMEMBER_PTR(_stack)); - persistMgr->transfer(TMEMBER_INT(_state)); + persistMgr->transferSint32(TMEMBER_INT(_state)); persistMgr->transferPtr(TMEMBER_PTR(_operand)); - persistMgr->transfer(TMEMBER_INT(_origState)); + persistMgr->transferSint32(TMEMBER_INT(_origState)); persistMgr->transferPtr(TMEMBER_PTR(_owner)); persistMgr->transferPtr(TMEMBER_PTR(_reg1)); persistMgr->transferBool(TMEMBER(_thread)); - persistMgr->transfer(TMEMBER(_threadEvent)); + persistMgr->transferCharPtr(TMEMBER(_threadEvent)); persistMgr->transferPtr(TMEMBER_PTR(_thisStack)); - persistMgr->transfer(TMEMBER(_timeSlice)); + persistMgr->transferUint32(TMEMBER(_timeSlice)); persistMgr->transferPtr(TMEMBER_PTR(_waitObject)); persistMgr->transferPtr(TMEMBER_PTR(_waitScript)); - persistMgr->transfer(TMEMBER(_waitTime)); + persistMgr->transferUint32(TMEMBER(_waitTime)); persistMgr->transferBool(TMEMBER(_waitFrozen)); persistMgr->transferBool(TMEMBER(_methodThread)); diff --git a/engines/wintermute/base/scriptables/script_ext_array.cpp b/engines/wintermute/base/scriptables/script_ext_array.cpp index 7f1c769ec544..c4ad04555792 100644 --- a/engines/wintermute/base/scriptables/script_ext_array.cpp +++ b/engines/wintermute/base/scriptables/script_ext_array.cpp @@ -214,7 +214,7 @@ bool SXArray::scSetProperty(const char *name, ScValue *value) { bool SXArray::persist(BasePersistenceManager *persistMgr) { BaseScriptable::persist(persistMgr); - persistMgr->transfer(TMEMBER(_length)); + persistMgr->transferSint32(TMEMBER(_length)); persistMgr->transferPtr(TMEMBER_PTR(_values)); return STATUS_OK; diff --git a/engines/wintermute/base/scriptables/script_ext_date.cpp b/engines/wintermute/base/scriptables/script_ext_date.cpp index d88bfc585155..6b9c5ff68add 100644 --- a/engines/wintermute/base/scriptables/script_ext_date.cpp +++ b/engines/wintermute/base/scriptables/script_ext_date.cpp @@ -243,15 +243,15 @@ bool SXDate::persist(BasePersistenceManager *persistMgr) { int32 hour = _tm.tm_hour; int32 min = _tm.tm_min; int32 sec = _tm.tm_sec; - persistMgr->transfer(TMEMBER(year)); - persistMgr->transfer(TMEMBER(mon)); - persistMgr->transfer(TMEMBER(mday)); - persistMgr->transfer(TMEMBER(hour)); - persistMgr->transfer(TMEMBER(min)); - persistMgr->transfer(TMEMBER(sec)); + persistMgr->transferSint32(TMEMBER(year)); + persistMgr->transferSint32(TMEMBER(mon)); + persistMgr->transferSint32(TMEMBER(mday)); + persistMgr->transferSint32(TMEMBER(hour)); + persistMgr->transferSint32(TMEMBER(min)); + persistMgr->transferSint32(TMEMBER(sec)); if (persistMgr->checkVersion(1, 2, 1)) { int32 wday = _tm.tm_wday; - persistMgr->transfer(TMEMBER(wday)); + persistMgr->transferSint32(TMEMBER(wday)); _tm.tm_wday = wday; } _tm.tm_year = year; diff --git a/engines/wintermute/base/scriptables/script_ext_file.cpp b/engines/wintermute/base/scriptables/script_ext_file.cpp index 5e6f0570addd..dcd4f01f7cd1 100644 --- a/engines/wintermute/base/scriptables/script_ext_file.cpp +++ b/engines/wintermute/base/scriptables/script_ext_file.cpp @@ -766,16 +766,16 @@ bool SXFile::persist(BasePersistenceManager *persistMgr) { BaseScriptable::persist(persistMgr); - persistMgr->transfer(TMEMBER(_filename)); - persistMgr->transfer(TMEMBER(_mode)); + persistMgr->transferCharPtr(TMEMBER(_filename)); + persistMgr->transferSint32(TMEMBER(_mode)); persistMgr->transferBool(TMEMBER(_textMode)); uint32 pos = 0; if (persistMgr->getIsSaving()) { pos = getPos(); - persistMgr->transfer(TMEMBER(pos)); + persistMgr->transferUint32(TMEMBER(pos)); } else { - persistMgr->transfer(TMEMBER(pos)); + persistMgr->transferUint32(TMEMBER(pos)); // try to re-open file if needed _writeFile = nullptr; diff --git a/engines/wintermute/base/scriptables/script_ext_mem_buffer.cpp b/engines/wintermute/base/scriptables/script_ext_mem_buffer.cpp index 6a47c09136c4..39f8b5864442 100644 --- a/engines/wintermute/base/scriptables/script_ext_mem_buffer.cpp +++ b/engines/wintermute/base/scriptables/script_ext_mem_buffer.cpp @@ -498,7 +498,7 @@ bool SXMemBuffer::persist(BasePersistenceManager *persistMgr) { BaseScriptable::persist(persistMgr); - persistMgr->transfer(TMEMBER(_size)); + persistMgr->transferSint32(TMEMBER(_size)); if (persistMgr->getIsSaving()) { if (_size > 0) { diff --git a/engines/wintermute/base/scriptables/script_ext_string.cpp b/engines/wintermute/base/scriptables/script_ext_string.cpp index 2f2422cdf94c..b6d284442da9 100644 --- a/engines/wintermute/base/scriptables/script_ext_string.cpp +++ b/engines/wintermute/base/scriptables/script_ext_string.cpp @@ -406,7 +406,7 @@ bool SXString::persist(BasePersistenceManager *persistMgr) { BaseScriptable::persist(persistMgr); - persistMgr->transfer(TMEMBER(_capacity)); + persistMgr->transferSint32(TMEMBER(_capacity)); if (persistMgr->getIsSaving()) { if (_capacity > 0) { diff --git a/engines/wintermute/base/scriptables/script_stack.cpp b/engines/wintermute/base/scriptables/script_stack.cpp index 801ac6ab52c9..c828b3918edc 100644 --- a/engines/wintermute/base/scriptables/script_stack.cpp +++ b/engines/wintermute/base/scriptables/script_stack.cpp @@ -186,7 +186,7 @@ bool ScStack::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); - persistMgr->transfer(TMEMBER(_sP)); + persistMgr->transferSint32(TMEMBER(_sP)); _values.persist(persistMgr); return STATUS_OK; diff --git a/engines/wintermute/base/scriptables/script_value.cpp b/engines/wintermute/base/scriptables/script_value.cpp index 5b275746c060..52367646a50e 100644 --- a/engines/wintermute/base/scriptables/script_value.cpp +++ b/engines/wintermute/base/scriptables/script_value.cpp @@ -793,30 +793,30 @@ bool ScValue::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_persistent)); persistMgr->transferBool(TMEMBER(_isConstVar)); - persistMgr->transfer(TMEMBER_INT(_type)); + persistMgr->transferSint32(TMEMBER_INT(_type)); persistMgr->transferBool(TMEMBER(_valBool)); persistMgr->transferDouble(TMEMBER(_valFloat)); - persistMgr->transfer(TMEMBER(_valInt)); + persistMgr->transferSint32(TMEMBER(_valInt)); persistMgr->transferPtr(TMEMBER_PTR(_valNative)); int32 size; const char *str; if (persistMgr->getIsSaving()) { size = _valObject.size(); - persistMgr->transfer("", &size); + persistMgr->transferSint32("", &size); _valIter = _valObject.begin(); while (_valIter != _valObject.end()) { str = _valIter->_key.c_str(); - persistMgr->transfer("", &str); + persistMgr->transferConstChar("", &str); persistMgr->transferPtr("", &_valIter->_value); _valIter++; } } else { ScValue *val = nullptr; - persistMgr->transfer("", &size); + persistMgr->transferSint32("", &size); for (int i = 0; i < size; i++) { - persistMgr->transfer("", &str); + persistMgr->transferConstChar("", &str); persistMgr->transferPtr("", &val); _valObject[str] = val; @@ -825,7 +825,7 @@ bool ScValue::persist(BasePersistenceManager *persistMgr) { } persistMgr->transferPtr(TMEMBER_PTR(_valRef)); - persistMgr->transfer(TMEMBER(_valString)); + persistMgr->transferCharPtr(TMEMBER(_valString)); if (!persistMgr->getIsSaving() && !persistMgr->checkVersion(1,2,2)) { // Savegames prior to 1.2.2 stored empty strings as NULL. diff --git a/engines/wintermute/base/sound/base_sound.cpp b/engines/wintermute/base/sound/base_sound.cpp index c3f2ff047625..f9cd59e4fb2a 100644 --- a/engines/wintermute/base/sound/base_sound.cpp +++ b/engines/wintermute/base/sound/base_sound.cpp @@ -166,16 +166,16 @@ bool BaseSound::persist(BasePersistenceManager *persistMgr) { persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); - persistMgr->transfer(TMEMBER(_soundFilename)); + persistMgr->transferString(TMEMBER(_soundFilename)); persistMgr->transferBool(TMEMBER(_soundLooping)); persistMgr->transferBool(TMEMBER(_soundPaused)); persistMgr->transferBool(TMEMBER(_soundFreezePaused)); persistMgr->transferBool(TMEMBER(_soundPlaying)); - persistMgr->transfer(TMEMBER(_soundPosition)); - persistMgr->transfer(TMEMBER(_soundPrivateVolume)); + persistMgr->transferUint32(TMEMBER(_soundPosition)); + persistMgr->transferSint32(TMEMBER(_soundPrivateVolume)); persistMgr->transferBool(TMEMBER(_soundStreamed)); - persistMgr->transfer(TMEMBER_INT(_soundType)); - persistMgr->transfer(TMEMBER(_soundLoopStart)); + persistMgr->transferSint32(TMEMBER_INT(_soundType)); + persistMgr->transferUint32(TMEMBER(_soundLoopStart)); return STATUS_OK; } diff --git a/engines/wintermute/base/timer.cpp b/engines/wintermute/base/timer.cpp index 96097c10d594..f1f79af7601c 100644 --- a/engines/wintermute/base/timer.cpp +++ b/engines/wintermute/base/timer.cpp @@ -66,9 +66,9 @@ uint32 Timer::getTimeLast() const { } void Timer::persist(BasePersistenceManager *persistMgr) { - persistMgr->transfer(TMEMBER(_timer)); - persistMgr->transfer(TMEMBER(_timerDelta)); - persistMgr->transfer(TMEMBER(_timerLast)); + persistMgr->transferUint32(TMEMBER(_timer)); + persistMgr->transferUint32(TMEMBER(_timerDelta)); + persistMgr->transferUint32(TMEMBER(_timerLast)); } } // End of namespace Wintermute diff --git a/engines/wintermute/coll_templ.h b/engines/wintermute/coll_templ.h index a3df92d6c8b8..307989e58d37 100644 --- a/engines/wintermute/coll_templ.h +++ b/engines/wintermute/coll_templ.h @@ -67,7 +67,7 @@ class BaseArray : public BaseArrayBase { int32 j; if (persistMgr->getIsSaving()) { j = Common::Array::size(); - persistMgr->transfer("ArraySize", &j); + persistMgr->transferSint32("ArraySize", &j); typename Common::Array::const_iterator it = Common::Array::begin(); for (; it != Common::Array::end(); ++it) { TYPE obj = *it; @@ -75,7 +75,7 @@ class BaseArray : public BaseArrayBase { } } else { Common::Array::clear(); - persistMgr->transfer("ArraySize", &j); + persistMgr->transferSint32("ArraySize", &j); for (int i = 0; i < j; i++) { TYPE obj = nullptr; persistMgr->transferPtr("", &obj); @@ -93,18 +93,18 @@ class BaseArray : public BaseArrayBase { int32 j; if (persistMgr->getIsSaving()) { j = Common::Array::size(); - persistMgr->transfer("ArraySize", &j); + persistMgr->transferSint32("ArraySize", &j); Common::Array::const_iterator it = Common::Array::begin(); for (; it != Common::Array::end(); ++it) { char * obj = *it; - persistMgr->transfer("", &obj); + persistMgr->transferCharPtr("", &obj); } } else { Common::Array::clear(); - persistMgr->transfer("ArraySize", &j); + persistMgr->transferSint32("ArraySize", &j); for (int i = 0; i < j; i++) { char * obj = nullptr; - persistMgr->transfer("", &obj); + persistMgr->transferCharPtr("", &obj); add(obj); } } @@ -119,18 +119,18 @@ class BaseArray : public BaseArrayBase { int32 j; if (persistMgr->getIsSaving()) { j = Common::Array::size(); - persistMgr->transfer("ArraySize", &j); + persistMgr->transferSint32("ArraySize", &j); Common::Array::const_iterator it = Common::Array::begin(); for (; it != Common::Array::end(); ++it) { const char * obj = *it; - persistMgr->transfer("", &obj); + persistMgr->transferConstChar("", &obj); } } else { Common::Array::clear(); - persistMgr->transfer("ArraySize", &j); + persistMgr->transferSint32("ArraySize", &j); for (int i = 0; i < j; i++) { const char * obj = nullptr; - persistMgr->transfer("", &obj); + persistMgr->transferConstChar("", &obj); add(obj); } } diff --git a/engines/wintermute/detection_tables.h b/engines/wintermute/detection_tables.h index 63f5078c1289..a47f92157149 100644 --- a/engines/wintermute/detection_tables.h +++ b/engines/wintermute/detection_tables.h @@ -43,16 +43,19 @@ static const PlainGameDescriptor wintermuteGames[] = { {"escapemansion", "Escape from the Mansion"}, {"ghostsheet", "Ghost in the Sheet"}, {"hamlet", "Hamlet or the last game without MMORPS features, shaders and product placement"}, + {"helga", "Helga Deep In Trouble"}, {"jamesperis", "James Peris: No License Nor Control"}, {"looky", "Looky"}, {"julia", "J.U.L.I.A."}, {"mirage", "Mirage"}, + {"paintaria", "Paintaria"}, {"pigeons", "Pigeons in the Park"}, {"reversion1", "Reversion: The Escape"}, {"reversion2", "Reversion: The Meeting"}, {"rosemary", "Rosemary"}, {"shaban", "Shaban"}, {"shinestar", "The Shine of a Star"}, + {"spaceinvaders", "Space Invaders"}, {"spacemadness", "Space Madness"}, {"thebox", "The Box"}, {"tib", "Fairy Tales About Toshechka and Boshechka"}, @@ -329,6 +332,21 @@ static const ADGameDescription gameDescriptions[] = { ADGF_UNSTABLE, GUIO0() }, + // Helga Deep In Trouble (Demo) (English) + { + "helga", + "Demo", + { + {"english.dcp", 0, "b3a93e678f0ef97200f691cd1724643f", 135864}, + {"data.dcp", 0, "45134ed93bc391edf148b79cdcbf2a09", 154266028}, + AD_LISTEND + }, + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_UNSTABLE | + ADGF_DEMO, + GUIO0() + }, // James Peris: No License Nor Control (English) { "jamesperis", @@ -414,7 +432,8 @@ static const ADGameDescription gameDescriptions[] = { }, Common::EN_ANY, Common::kPlatformWindows, - ADGF_UNSTABLE, + ADGF_UNSTABLE | + ADGF_DEMO, GUIO0() }, // Looky Demo (German) @@ -428,7 +447,8 @@ static const ADGameDescription gameDescriptions[] = { }, Common::DE_DEU, Common::kPlatformWindows, - ADGF_UNSTABLE, + ADGF_UNSTABLE | + ADGF_DEMO, GUIO0() }, // Looky (German) @@ -455,6 +475,16 @@ static const ADGameDescription gameDescriptions[] = { ADGF_UNSTABLE, GUIO0() }, + // Paintaria + { + "paintaria", + "", + AD_ENTRY1s("data.dcp", "354c08440c98150ff0d4008dd2865880", 48326040), + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_UNSTABLE, + GUIO0() + }, // Pigeons in the Park { "pigeons", @@ -711,6 +741,17 @@ static const ADGameDescription gameDescriptions[] = { ADGF_UNSTABLE, GUIO0() }, + // Space Invaders (Demo) + { + "spaceinvaders", + "Demo", + AD_ENTRY1s("data.dcp", "3f27adefdf72f2c1601cf555c80a509f", 1308361), + Common::EN_ANY, + Common::kPlatformWindows, + ADGF_UNSTABLE | + ADGF_DEMO, + GUIO0() + }, // Space Madness { "spacemadness", diff --git a/engines/wintermute/ui/ui_button.cpp b/engines/wintermute/ui/ui_button.cpp index 3cc33f23623d..7526174b64b3 100644 --- a/engines/wintermute/ui/ui_button.cpp +++ b/engines/wintermute/ui/ui_button.cpp @@ -1178,7 +1178,7 @@ bool UIButton::persist(BasePersistenceManager *persistMgr) { UIObject::persist(persistMgr); - persistMgr->transfer(TMEMBER_INT(_align)); + persistMgr->transferSint32(TMEMBER_INT(_align)); persistMgr->transferPtr(TMEMBER_PTR(_backDisable)); persistMgr->transferPtr(TMEMBER_PTR(_backFocus)); persistMgr->transferPtr(TMEMBER_PTR(_backHover)); diff --git a/engines/wintermute/ui/ui_edit.cpp b/engines/wintermute/ui/ui_edit.cpp index 4de1965b5999..1f224c79c87d 100644 --- a/engines/wintermute/ui/ui_edit.cpp +++ b/engines/wintermute/ui/ui_edit.cpp @@ -932,14 +932,14 @@ bool UIEdit::persist(BasePersistenceManager *persistMgr) { UIObject::persist(persistMgr); - persistMgr->transfer(TMEMBER(_cursorBlinkRate)); - persistMgr->transfer(TMEMBER(_cursorChar)); + persistMgr->transferUint32(TMEMBER(_cursorBlinkRate)); + persistMgr->transferCharPtr(TMEMBER(_cursorChar)); persistMgr->transferPtr(TMEMBER_PTR(_fontSelected)); - persistMgr->transfer(TMEMBER(_frameWidth)); - persistMgr->transfer(TMEMBER(_maxLength)); - persistMgr->transfer(TMEMBER(_scrollOffset)); - persistMgr->transfer(TMEMBER(_selEnd)); - persistMgr->transfer(TMEMBER(_selStart)); + persistMgr->transferSint32(TMEMBER(_frameWidth)); + persistMgr->transferSint32(TMEMBER(_maxLength)); + persistMgr->transferSint32(TMEMBER(_scrollOffset)); + persistMgr->transferSint32(TMEMBER(_selEnd)); + persistMgr->transferSint32(TMEMBER(_selStart)); if (!persistMgr->getIsSaving()) { _cursorVisible = false; diff --git a/engines/wintermute/ui/ui_object.cpp b/engines/wintermute/ui/ui_object.cpp index a1a89b7b01e3..c04c7cbd28de 100644 --- a/engines/wintermute/ui/ui_object.cpp +++ b/engines/wintermute/ui/ui_object.cpp @@ -626,19 +626,19 @@ bool UIObject::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_disable)); persistMgr->transferPtr(TMEMBER_PTR(_focusedWidget)); persistMgr->transferPtr(TMEMBER_PTR(_font)); - persistMgr->transfer(TMEMBER(_height)); + persistMgr->transferSint32(TMEMBER(_height)); persistMgr->transferPtr(TMEMBER_PTR(_image)); persistMgr->transferPtr(TMEMBER_PTR(_listenerObject)); persistMgr->transferPtr(TMEMBER_PTR(_listenerParamObject)); - persistMgr->transfer(TMEMBER(_listenerParamDWORD)); + persistMgr->transferUint32(TMEMBER(_listenerParamDWORD)); persistMgr->transferPtr(TMEMBER_PTR(_parent)); persistMgr->transferBool(TMEMBER(_parentNotify)); persistMgr->transferBool(TMEMBER(_sharedFonts)); persistMgr->transferBool(TMEMBER(_sharedImages)); - persistMgr->transfer(TMEMBER(_text)); - persistMgr->transfer(TMEMBER_INT(_type)); + persistMgr->transferCharPtr(TMEMBER(_text)); + persistMgr->transferSint32(TMEMBER_INT(_type)); persistMgr->transferBool(TMEMBER(_visible)); - persistMgr->transfer(TMEMBER(_width)); + persistMgr->transferSint32(TMEMBER(_width)); return STATUS_OK; } diff --git a/engines/wintermute/ui/ui_text.cpp b/engines/wintermute/ui/ui_text.cpp index 117b1ff6cf09..b255e6e790b5 100644 --- a/engines/wintermute/ui/ui_text.cpp +++ b/engines/wintermute/ui/ui_text.cpp @@ -503,8 +503,8 @@ const char *UIText::scToString() { bool UIText::persist(BasePersistenceManager *persistMgr) { UIObject::persist(persistMgr); - persistMgr->transfer(TMEMBER_INT(_textAlign)); - persistMgr->transfer(TMEMBER_INT(_verticalAlign)); + persistMgr->transferSint32(TMEMBER_INT(_textAlign)); + persistMgr->transferSint32(TMEMBER_INT(_verticalAlign)); return STATUS_OK; } diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp index c9262198cfa4..842bf700b56a 100644 --- a/engines/wintermute/ui/ui_window.cpp +++ b/engines/wintermute/ui/ui_window.cpp @@ -1263,15 +1263,15 @@ bool UIWindow::persist(BasePersistenceManager *persistMgr) { persistMgr->transferBool(TMEMBER(_dragging)); persistMgr->transferRect32(TMEMBER(_dragRect)); persistMgr->transferBool(TMEMBER(_fadeBackground)); - persistMgr->transfer(TMEMBER(_fadeColor)); + persistMgr->transferUint32(TMEMBER(_fadeColor)); persistMgr->transferPtr(TMEMBER_PTR(_fontInactive)); persistMgr->transferPtr(TMEMBER_PTR(_imageInactive)); persistMgr->transferBool(TMEMBER(_inGame)); persistMgr->transferBool(TMEMBER(_isMenu)); - persistMgr->transfer(TMEMBER_INT(_mode)); + persistMgr->transferSint32(TMEMBER_INT(_mode)); persistMgr->transferPtr(TMEMBER_PTR(_shieldButton)); persistMgr->transferPtr(TMEMBER_PTR(_shieldWindow)); - persistMgr->transfer(TMEMBER_INT(_titleAlign)); + persistMgr->transferSint32(TMEMBER_INT(_titleAlign)); persistMgr->transferRect32(TMEMBER(_titleRect)); persistMgr->transferBool(TMEMBER(_transparent)); persistMgr->transferPtr(TMEMBER_PTR(_viewport)); diff --git a/engines/wintermute/utils/string_util.cpp b/engines/wintermute/utils/string_util.cpp index e8e078aba89b..d5d6c7f70253 100644 --- a/engines/wintermute/utils/string_util.cpp +++ b/engines/wintermute/utils/string_util.cpp @@ -48,9 +48,54 @@ bool StringUtil::compareNoCase(const AnsiString &str1, const AnsiString &str2) { return (str1lc == str2lc); }*/ +Common::String StringUtil::substituteUtf8Characters(Common::String &str) { + uint strSize = str.size(); + Common::String punctuation("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"); + + if (isAscii(str)) + return str; + + for (uint32 i = 0; i < strSize; i++) { + if (!Common::isAlnum(str[i]) && str[i] != ' ' && !punctuation.contains(str[i])) { + // Replace some UTF-8 characters with (almost) equivalent ANSII ones + if ((byte)str[i] == 0xc2 && i + 1 < str.size() && (byte)str[i + 1] == 0xa9) { + // UTF-8 copyright character, substitute with 'c' + str.deleteChar(i); + str.setChar('c', i); + strSize--; + } + } + } + + return str; +} + +bool StringUtil::isAscii(const Common::String &str) { + Common::String punctuation("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"); + + for (uint32 i = 0; i < str.size(); i++) { + if (!Common::isAlnum(str[i]) && str[i] != ' ' && !punctuation.contains(str[i])) + return false; + } + + return true; +} + ////////////////////////////////////////////////////////////////////////// WideString StringUtil::utf8ToWide(const Utf8String &Utf8Str) { - error("StringUtil::Utf8ToWide - WideString not supported yet"); + // WORKAROUND: Since wide strings aren't supported yet, we make this function + // work at least with ASCII strings. This should cover all English versions. + Common::String asciiString = Utf8Str; + asciiString = substituteUtf8Characters(asciiString); + if (isAscii(asciiString)) { + // No special (UTF-8) characters found, just return the string + return asciiString; + } else { + warning("String contains special (UTF-8) characters: '%s'", Utf8Str.c_str()); + } + + error("StringUtil::Utf8ToWide - WideString not supported yet for UTF-8 characters"); + /* size_t WideSize = Utf8Str.size(); if (sizeof(wchar_t) == 2) { @@ -99,7 +144,19 @@ WideString StringUtil::utf8ToWide(const Utf8String &Utf8Str) { ////////////////////////////////////////////////////////////////////////// Utf8String StringUtil::wideToUtf8(const WideString &WideStr) { - error("StringUtil::wideToUtf8 - Widestring not supported yet"); + // WORKAROUND: Since UTF-8 strings aren't supported yet, we make this function + // work at least with ASCII strings. This should cover all English versions. + Common::String asciiString = WideStr; + asciiString = substituteUtf8Characters(asciiString); + if (isAscii(asciiString)) { + // No special (UTF-8) characters found, just return the string + return asciiString; + } else { + warning("String contains special (UTF-8) characters: '%s'", WideStr.c_str()); + } + + error("StringUtil::wideToUtf8 - WideString not supported yet for UTF-8 characters"); + /* size_t WideSize = WideStr.length(); if (sizeof(wchar_t) == 2) { diff --git a/engines/wintermute/utils/string_util.h b/engines/wintermute/utils/string_util.h index 3ae5e4749324..05931beb7981 100644 --- a/engines/wintermute/utils/string_util.h +++ b/engines/wintermute/utils/string_util.h @@ -37,6 +37,8 @@ class StringUtil { public: static bool compareNoCase(const AnsiString &str1, const AnsiString &str2); //static bool compareNoCase(const WideString &str1, const WideString &str2); + static bool isAscii(const Common::String &str); + static Common::String substituteUtf8Characters(Common::String &str); static WideString utf8ToWide(const Utf8String &Utf8Str); static Utf8String wideToUtf8(const WideString &WideStr); static WideString ansiToWide(const AnsiString &str); diff --git a/engines/wintermute/video/video_theora_player.cpp b/engines/wintermute/video/video_theora_player.cpp index 5dbb3013746c..44eecf93a8e7 100644 --- a/engines/wintermute/video/video_theora_player.cpp +++ b/engines/wintermute/video/video_theora_player.cpp @@ -491,16 +491,16 @@ bool VideoTheoraPlayer::persist(BasePersistenceManager *persistMgr) { } persistMgr->transferPtr(TMEMBER_PTR(_gameRef)); - persistMgr->transfer(TMEMBER(_savedPos)); - persistMgr->transfer(TMEMBER(_savedState)); - persistMgr->transfer(TMEMBER(_filename)); - persistMgr->transfer(TMEMBER(_alphaFilename)); - persistMgr->transfer(TMEMBER(_posX)); - persistMgr->transfer(TMEMBER(_posY)); + persistMgr->transferUint32(TMEMBER(_savedPos)); + persistMgr->transferSint32(TMEMBER(_savedState)); + persistMgr->transferString(TMEMBER(_filename)); + persistMgr->transferString(TMEMBER(_alphaFilename)); + persistMgr->transferSint32(TMEMBER(_posX)); + persistMgr->transferSint32(TMEMBER(_posY)); persistMgr->transferFloat(TMEMBER(_playZoom)); - persistMgr->transfer(TMEMBER_INT(_playbackType)); + persistMgr->transferSint32(TMEMBER_INT(_playbackType)); persistMgr->transferBool(TMEMBER(_looping)); - persistMgr->transfer(TMEMBER(_volume)); + persistMgr->transferSint32(TMEMBER(_volume)); if (!persistMgr->getIsSaving() && (_savedState != THEORA_STATE_NONE)) { initializeSimple();