From d80c7605a0892ae401953da4b889543598292986 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Tue, 7 Jan 2014 21:37:29 +0100 Subject: GNAP: Initial commit --- engines/gnap/gnap.cpp | 2404 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2404 insertions(+) create mode 100644 engines/gnap/gnap.cpp (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp new file mode 100644 index 0000000000..08f598551e --- /dev/null +++ b/engines/gnap/gnap.cpp @@ -0,0 +1,2404 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "gnap/gnap.h" +#include "gnap/datarchive.h" +#include "gnap/gamesys.h" +#include "gnap/resource.h" +#include "gnap/sound.h" + +#include "common/config-manager.h" +#include "common/debug-channels.h" +#include "common/error.h" +#include "common/fs.h" +#include "common/timer.h" + +#include "engines/util.h" + +#include "graphics/cursorman.h" + +namespace Gnap { + +static const int kCursors[] = { + LOOK_CURSOR, + GRAB_CURSOR, + TALK_CURSOR, + PLAT_CURSOR +}; + +static const int kDisabledCursors[] = { + NOLOOK_CURSOR, + NOGRAB_CURSOR, + NOTALK_CURSOR, + NOPLAT_CURSOR +}; + +static const char *kCursorNames[] = { + "LOOK_CURSOR", + "GRAB_CURSOR", + "TALK_CURSOR", + "PLAT_CURSOR", + "NOLOOK_CURSOR", + "NOGRAB_CURSOR", + "NOTALK_CURSOR", + "NOPLAT_CURSOR", + "EXIT_L_CURSOR", + "EXIT_R_CURSOR", + "EXIT_U_CURSOR", + "EXIT_D_CURSOR", + "EXIT_NE_CURSOR", + "EXIT_NW_CURSOR", + "EXIT_SE_CURSOR", + "EXIT_SW_CURSOR", + "WAIT_CURSOR" +}; + + +static const int kCursorSpriteIds[30] = { + 0x005, 0x008, 0x00A, 0x004, 0x009, 0x003, + 0x006, 0x007, 0x00D, 0x00F, 0x00B, 0x00C, + 0x019, 0x01C, 0x015, 0x014, 0x010, 0x01A, + 0x018, 0x013, 0x011, 0x012, 0x01B, 0x016, + 0x017, 0x01D, 0x01E, 0x01F, 0x76A, 0x76B +}; + +static const char *kSceneNames[] = { + "open", "pigpn", "truck", "creek", "mafrm", "frbrn", "inbrn", "crash", + "porch", "barbk", "kitch", "bar", "juke", "wash", "john", "jkbox", + "brawl", "stret", "frtoy", "intoy", "frgro", "park", "cash", "ingro", + "frcir", "booth", "circ", "outcl", "incln", "monk", "elcir", "beer", + "pig2", "trk2", "creek", "frbrn", "inbrn", "mafrm", "infrm", "efair", + "fair", "souv", "chick", "ship", "kiss", "disco", "boot", "can", + "can2", "drive", "tung", "puss", "space", "phone", "can3" +}; + +GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : + Engine(syst), _gameDescription(gd) { + + _random = new Common::RandomSource("gnap"); + + Engine::syncSoundSettings(); + +} + +GnapEngine::~GnapEngine() { + + delete _random; + +} + +Common::Error GnapEngine::run() { + // Initialize the graphics mode to ARGB8888 + Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24); + initGraphics(800, 600, true, &format); + + // We do not support color conversion yet + if (_system->getScreenFormat() != format) + return Common::kUnsupportedColorMode; + + _lastUpdateClock = 0; + + // >>>>> Variable initialization + _cursorIndex = -1; + _verbCursor = 1; + invClear(); + clearFlags(); + _grabCursorSprite = 0; + _newGrabCursorSpriteIndex = -1; + _backgroundSurface = 0; + _isStockDatLoaded = false; + _gameDone = false; + _isPaused = false; + _pauseSprite = 0; + + //////////////////////////////////////////////////////////////////////////// + + _exe = new Common::PEResources(); + if (!_exe->loadFromEXE("ufos.exe")) + error("Could not load ufos.exe"); + + _dat = new DatManager(); + _spriteCache = new SpriteCache(_dat); + _soundCache = new SoundCache(_dat); + _sequenceCache = new SequenceCache(_dat); + _gameSys = new GameSys(this); + _soundMan = new SoundMan(this); + + _menuBackgroundSurface = 0; + + initGlobalSceneVars(); + +#if 1 + + mainLoop(); + +#else + + Graphics::Surface *testBack = new Graphics::Surface(); + testBack->create(800, 600, _system->getScreenFormat()); + //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); + testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); + + _currentSceneNum = 26; + + Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); + _dat->open(0, datFilename.c_str()); + + _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); + + _gameSys->insertSequence(0x5b, 100, -1, -1, 0, 0, 0, 0); + + CursorMan.showMouse(true); + + while (!shouldQuit()) { + Common::Event event; + + while (_eventMan->pollEvent(event)) { + switch (event.type) { + case Common::EVENT_KEYDOWN: + break; + case Common::EVENT_LBUTTONUP: + case Common::EVENT_LBUTTONDOWN: + case Common::EVENT_RBUTTONUP: + case Common::EVENT_RBUTTONDOWN: + case Common::EVENT_MOUSEMOVE: + break; + case Common::EVENT_QUIT: + quitGame(); + break; + default: + break; + } + } + + _gameSys->fatUpdate(); + _gameSys->drawSprites(); + _gameSys->updateScreen(); + _gameSys->_gameSysClock++; + updateTimers(); + + _system->updateScreen(); + _system->delayMillis(100); + + } + + _dat->close(0); + + testBack->free(); + delete testBack; + + return Common::kNoError; + +#endif + + delete _soundMan; + delete _gameSys; + delete _sequenceCache; + delete _soundCache; + delete _spriteCache; + delete _dat; + + delete _exe; + + debug("run() done"); + + return Common::kNoError; +} + +bool GnapEngine::hasFeature(EngineFeature f) const { + return + false; +} + +void GnapEngine::updateEvents() { + Common::Event event; + + while (_eventMan->pollEvent(event)) { + switch (event.type) { + case Common::EVENT_KEYDOWN: + _keyPressState[event.kbd.keycode] = 1; + _keyDownState[event.kbd.keycode] = 1; + break; + case Common::EVENT_KEYUP: + _keyDownState[event.kbd.keycode] = 0; + break; + case Common::EVENT_MOUSEMOVE: + _mouseX = event.mouse.x; + _mouseY = event.mouse.y; + break; + case Common::EVENT_LBUTTONUP: + _mouseButtonState.left = false; + break; + case Common::EVENT_LBUTTONDOWN: + _leftClickMouseX = event.mouse.x; + _leftClickMouseY = event.mouse.y; + _mouseButtonState.left = true; + _mouseClickState.left = true; + break; + case Common::EVENT_RBUTTONUP: + _mouseButtonState.right = false; + break; + case Common::EVENT_RBUTTONDOWN: + _mouseButtonState.right = true; + _mouseClickState.right = true; + break; + case Common::EVENT_QUIT: + quitGame(); + break; + default: + break; + } + } +} + +void GnapEngine::gameUpdateTick() { + updateEvents(); + + // TODO Check _gameDone in the various game loops + if (shouldQuit()) { + _gameDone = true; + _sceneDone = true; + } + + // TODO Improve this (variable frame delay to keep ~15fps) + int currClock = _system->getMillis(); + if (currClock >= _lastUpdateClock + 66) { + _gameSys->fatUpdate(); + _gameSys->drawSprites(); + _gameSys->updateScreen(); + _gameSys->updatePlaySounds(); + _gameSys->_gameSysClock++; + updateTimers(); + _lastUpdateClock = currClock; + } + + _soundMan->update(); + _system->updateScreen(); + _system->delayMillis(5); + +} + +void GnapEngine::saveTimers() { + for (int i = 0; i < kMaxTimers; ++i ) + _savedTimers[i] = _timers[i]; +} + +void GnapEngine::restoreTimers() { + for (int i = 0; i < kMaxTimers; ++i ) + _timers[i] = _savedTimers[i]; +} + +void GnapEngine::pauseGame() { + if (!_isPaused) { + saveTimers(); + hideCursor(); + setGrabCursorSprite(-1); + _pauseSprite = _gameSys->createSurface(0x1076C); + _gameSys->insertSpriteDrawItem(_pauseSprite, (800 - _pauseSprite->w) / 2, (600 - _pauseSprite->h) / 2, 356); + _lastUpdateClock = 0; + gameUpdateTick(); + // TODO playMidi("pause.mid"); + _isPaused = true; + } +} + +void GnapEngine::resumeGame() { + if (_isPaused) { + restoreTimers(); + _gameSys->removeSpriteDrawItem(_pauseSprite, 356); + _lastUpdateClock = 0; + gameUpdateTick(); + deleteSurface(&_pauseSprite); + // TODO stopMidi(); + _isPaused = false; + clearAllKeyStatus1(); + _mouseClickState.left = false; + _mouseClickState.right = false; + showCursor(); + _gameSys->_gameSysClock = 0; + _gameSys->_lastUpdateClock = 0; + } +} + +void GnapEngine::updatePause() { + while (_isPaused) { + gameUpdateTick(); + if (isKeyStatus1(Common::KEYCODE_p)) { + clearKeyStatus1(Common::KEYCODE_p); + resumeGame(); + } + //_system->delayMillis(100); + } +} + +int GnapEngine::getRandom(int max) { + return _random->getRandomNumber(max - 1); +} + +int GnapEngine::readSavegameDescription(int savegameNum, Common::String &description) { + description = Common::String::format("Savegame %d", savegameNum); + return 0; +} + +int GnapEngine::loadSavegame(int savegameNum) { + return 1; +} + +void GnapEngine::delayTicks(int a1) { + // TODO + gameUpdateTick(); +} + +void GnapEngine::delayTicksCursor(int a1) { + // TODO + gameUpdateTick(); +} + +void GnapEngine::setHotspot(int index, int16 x1, int16 y1, int16 x2, int16 y2, uint16 flags, + int16 walkX, int16 walkY) { + _hotspots[index].x1 = x1; + _hotspots[index].y1 = y1; + _hotspots[index].x2 = x2; + _hotspots[index].y2 = y2; + _hotspots[index].flags = flags; + _hotspots[index].id = index; + _hotspotsWalkPos[index].x = walkX; + _hotspotsWalkPos[index].y = walkY; +} + +int GnapEngine::getHotspotIndexAtPos(int16 x, int16 y) { + for (int i = 0; i < _hotspotsCount; ++i) + if (!_hotspots[i].isFlag(SF_DISABLED) && _hotspots[i].isPointInside(x, y)) + return i; + return -1; +} + +void GnapEngine::updateCursorByHotspot() { + if (!_isWaiting) { + int hotspotIndex = getHotspotIndexAtPos(_mouseX, _mouseY); + +#if 1 + // NOTE This causes some display glitches so don't worry + char t[256]; + sprintf(t, "hotspot = %d", hotspotIndex); + _gameSys->fillSurface(0, 10, 10, 80, 16, 0, 0, 0); + _gameSys->drawTextToSurface(0, 10, 10, 255, 255, 255, t); +#endif + + if (hotspotIndex < 0) + setCursor(kDisabledCursors[_verbCursor]); + else if (_hotspots[hotspotIndex].flags & SF_EXIT_L_CURSOR) + setCursor(EXIT_L_CURSOR); + else if (_hotspots[hotspotIndex].flags & SF_EXIT_R_CURSOR) + setCursor(EXIT_R_CURSOR); + else if (_hotspots[hotspotIndex].flags & SF_EXIT_U_CURSOR) + setCursor(EXIT_U_CURSOR); + else if (_hotspots[hotspotIndex].flags & SF_EXIT_D_CURSOR) + setCursor(EXIT_D_CURSOR); + else if (_hotspots[hotspotIndex].flags & SF_EXIT_NE_CURSOR) + setCursor(EXIT_NE_CURSOR); + else if (_hotspots[hotspotIndex].flags & SF_EXIT_NW_CURSOR) + setCursor(EXIT_NW_CURSOR); + else if (_hotspots[hotspotIndex].flags & SF_EXIT_SE_CURSOR) + setCursor(EXIT_SE_CURSOR); + else if (_hotspots[hotspotIndex].flags & SF_EXIT_SW_CURSOR) + setCursor(EXIT_SW_CURSOR); + else if (_hotspots[hotspotIndex].flags & (1 << _verbCursor)) + setCursor(kCursors[_verbCursor]); + else + setCursor(kDisabledCursors[_verbCursor]); + } + // Update platypus hotspot + _hotspots[0].x1 = _gridMinX + 75 * _platX - 30; + _hotspots[0].y1 = _gridMinY + 48 * _platY - 100; + _hotspots[0].x2 = _gridMinX + 75 * _platX + 30; + _hotspots[0].y2 = _gridMinY + 48 * _platY; +} + +int GnapEngine::getClickedHotspotId() { + int result = -1; + if (_isWaiting) + _mouseClickState.left = false; + else if (_mouseClickState.left) { + int hotspotIndex = getHotspotIndexAtPos(_leftClickMouseX, _leftClickMouseY); + if (hotspotIndex >= 0) { + _mouseClickState.left = false; + _timers[3] = 300; + result = _hotspots[hotspotIndex].id; + } + } + return result; +} + +int GnapEngine::getInventoryItemSpriteNum(int index) { + return kCursorSpriteIds[index]; +} + +void GnapEngine::updateMouseCursor() { + if (_mouseClickState.right) { + // Switch through the verb cursors + _mouseClickState.right = false; + _timers[3] = 300; + _verbCursor = (_verbCursor + 1) % 4; + if (!isFlag(0) && _verbCursor == PLAT_CURSOR && _cursorValue == 1) + _verbCursor = (_verbCursor + 1) % 4; + if (!_isWaiting) + setCursor(kDisabledCursors[_verbCursor]); + setGrabCursorSprite(-1); + } + if (_isWaiting && ((_gnapActionStatus < 0 && _beaverActionStatus < 0) || _sceneWaiting)) { + setCursor(kDisabledCursors[_verbCursor]); + _isWaiting = false; + } else if (!_isWaiting && (_gnapActionStatus >= 0 || _beaverActionStatus >= 0) && !_sceneWaiting) { + setCursor(WAIT_CURSOR); + _isWaiting = true; + } +} + +void GnapEngine::setVerbCursor(int verbCursor) { + _verbCursor = verbCursor; + if (!_isWaiting) + setCursor(kDisabledCursors[_verbCursor]); +} + +void GnapEngine::setCursor(int cursorIndex) { + if (_cursorIndex != cursorIndex) { + const char *cursorName = kCursorNames[cursorIndex]; + Graphics::WinCursorGroup *cursorGroup = Graphics::WinCursorGroup::createCursorGroup(*_exe, Common::WinResourceID(cursorName)); + if (cursorGroup) { + Graphics::Cursor *cursor = cursorGroup->cursors[0].cursor; + CursorMan.replaceCursor(cursor->getSurface(), cursor->getWidth(), cursor->getHeight(), + cursor->getHotspotX(), cursor->getHotspotY(), cursor->getKeyColor()); + CursorMan.replaceCursorPalette(cursor->getPalette(), 0, 256); + delete cursorGroup; + } + _cursorIndex = cursorIndex; + } +} + +void GnapEngine::showCursor() { + CursorMan.showMouse(true); +} + +void GnapEngine::hideCursor() { + CursorMan.showMouse(false); +} + +void GnapEngine::setGrabCursorSprite(int index) { + freeGrabCursorSprite(); + if (index >= 0) { + createGrabCursorSprite(makeRid(1, kCursorSpriteIds[index])); + setVerbCursor(GRAB_CURSOR); + } + _grabCursorSpriteIndex = index; +} + +void GnapEngine::createGrabCursorSprite(int spriteId) { + _grabCursorSprite = _gameSys->createSurface(spriteId); + _gameSys->insertSpriteDrawItem(_grabCursorSprite, + _mouseX - (_grabCursorSprite->w / 2), + _mouseY - (_grabCursorSprite->h / 2), + 300); + delayTicks(5); +} + +void GnapEngine::freeGrabCursorSprite() { + if (_grabCursorSprite) { + _gameSys->removeSpriteDrawItem(_grabCursorSprite, 300); + _gameSys->removeSpriteDrawItem(_grabCursorSprite, 301); + delayTicks(5); + deleteSurface(&_grabCursorSprite); + } +} + +void GnapEngine::updateGrabCursorSprite(int x, int y) { + if (_grabCursorSprite) { + int newGrabCursorX = _mouseX - (_grabCursorSprite->w / 2) - x; + int newGrabCursorY = _mouseY - (_grabCursorSprite->h / 2) - y; + if (_currGrabCursorX != newGrabCursorX || _currGrabCursorY != newGrabCursorY) { + _currGrabCursorX = newGrabCursorX; + _currGrabCursorY = newGrabCursorY; + Common::Rect rect(newGrabCursorX, newGrabCursorY, + newGrabCursorX + _grabCursorSprite->w, newGrabCursorY + _grabCursorSprite->h); + _gameSys->invalidateGrabCursorSprite(300, rect, _grabCursorSprite, _grabCursorSprite); + } + } +} + +void GnapEngine::invClear() { + _inventory = 0; +} + +void GnapEngine::invAdd(int itemId) { + _inventory |= (1 << itemId); +} + +void GnapEngine::invRemove(int itemId) { + _inventory &= ~(1 << itemId); +} + +bool GnapEngine::invHas(int itemId) { + return (_inventory & (1 << itemId)) != 0; +} + +void GnapEngine::clearFlags() { + _gameFlags = 0; +} + +void GnapEngine::setFlag(int num) { + _gameFlags |= (1 << num); +} + +void GnapEngine::clearFlag(int num) { + _gameFlags &= ~(1 << num); +} + +bool GnapEngine::isFlag(int num) { + return (_gameFlags & (1 << num)) != 0; +} + +Graphics::Surface *GnapEngine::addFullScreenSprite(int resourceId, int id) { + _fullScreenSpriteId = id; + _fullScreenSprite = _gameSys->createSurface(resourceId); + _gameSys->insertSpriteDrawItem(_fullScreenSprite, 0, 0, id); + return _fullScreenSprite; +} + +void GnapEngine::removeFullScreenSprite() { + _gameSys->removeSpriteDrawItem(_fullScreenSprite, _fullScreenSpriteId); + deleteSurface(&_fullScreenSprite); +} + +void GnapEngine::showFullScreenSprite(int resourceId) { + hideCursor(); + setGrabCursorSprite(-1); + addFullScreenSprite(resourceId, 256); + while (!_mouseClickState.left && !isKeyStatus1(Common::KEYCODE_ESCAPE) && + !isKeyStatus1(Common::KEYCODE_SPACE) && !isKeyStatus1(29)) { + gameUpdateTick(); + } + _mouseClickState.left = false; + clearKeyStatus1(Common::KEYCODE_ESCAPE); + clearKeyStatus1(29); + clearKeyStatus1(Common::KEYCODE_SPACE); + removeFullScreenSprite(); + showCursor(); +} + +void GnapEngine::queueInsertDeviceIcon() { + _gameSys->insertSequence(0x10849, 20, 0, 0, kSeqNone, 0, _deviceX1, _deviceY1); +} + +void GnapEngine::insertDeviceIconActive() { + _gameSys->insertSequence(0x1084A, 21, 0, 0, kSeqNone, 0, _deviceX1, _deviceY1); +} + +void GnapEngine::removeDeviceIconActive() { + _gameSys->removeSequence(0x1084A, 21, 1); +} + +void GnapEngine::setDeviceHotspot(int hotspotIndex, int x1, int y1, int x2, int y2) { + _deviceX1 = x1; + _deviceX2 = x2; + _deviceY1 = y1; + _deviceY2 = y2; + if (x1 == -1) + _deviceX1 = 730; + if (x2 == -1) + _deviceX2 = 780; + if (y1 == -1) + _deviceY1 = 14; + if (y2 == -1) + _deviceY2 = 79; + _hotspots[hotspotIndex].x1 = _deviceX1; + _hotspots[hotspotIndex].y1 = _deviceY1; + _hotspots[hotspotIndex].x2 = _deviceX2; + _hotspots[hotspotIndex].y2 = _deviceY2; + _hotspots[hotspotIndex].flags = SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; + _hotspots[hotspotIndex].id = hotspotIndex; +} + +int GnapEngine::getSequenceTotalDuration(int resourceId) { + SequenceResource *sequenceResource = _sequenceCache->get(resourceId); + int maxValue = 0; + for (int i = 0; i < sequenceResource->_animationsCount; ++i) { + SequenceAnimation *animation = &sequenceResource->_animations[i]; + if (animation->field_4 + animation->field_A > maxValue) + maxValue = animation->field_4 + animation->field_A; + } + int totalDuration = maxValue + sequenceResource->_totalDuration; + _sequenceCache->release(resourceId); + return totalDuration; +} + +bool GnapEngine::isSoundPlaying(int resourceId) { + return _soundMan->isSoundPlaying(resourceId); +} + +void GnapEngine::playSound(int resourceId, bool looping) { + debug(0, "playSound(%08X, %d)", resourceId, looping); + _soundMan->playSound(resourceId, looping); +} + +void GnapEngine::stopSound(int resourceId) { + _soundMan->stopSound(resourceId); +} + +void GnapEngine::setSoundVolume(int resourceId, int volume) { + _soundMan->setSoundVolume(resourceId, volume); +} + +void GnapEngine::updateTimers() { + for (int i = 0; i < kMaxTimers; ++i) + if (_timers[i] > 0) + --_timers[i]; +} + +void GnapEngine::initGameFlags(int num) { + invClear(); + invAdd(kItemMagazine); + switch (num) { + case 1: + setFlag(26); + break; + case 2: + clearFlags(); + break; + case 3: + invAdd(kItemDiceQuarterHole); + clearFlags(); + break; + case 4: + invAdd(kItemDiceQuarterHole); + invAdd(kItemHorn); + invAdd(kItemLightbulb); + clearFlags(); + setFlag(0); + setFlag(1); + setFlag(2); + setFlag(3); + setFlag(4); + setFlag(5); + setFlag(6); + setFlag(7); + break; + } + + //DEBUG! +// setFlag(0); // Enable platypus + setFlag(25); + invClear(); + invAdd(kItemMagazine); +#if 0 + invAdd(kItemDisguise); +#endif +#if 1 + //invAdd(kItemGas); + invAdd(kItemJoint); + //invAdd(kItemKeys); + invAdd(kItemWrench); + //invAdd(kItemTongs); + invAdd(kItemDiceQuarterHole); + //invAdd(kItemPill); + invAdd(kItemBucketWithBeer); + invAdd(kItemChickenBucket); + invAdd(kItemGum); + invAdd(kItemPicture); +#endif +} + +void GnapEngine::loadStockDat() { + if (!_isStockDatLoaded) { + _isStockDatLoaded = true; + _dat->open(1, "stock_n.dat"); + //createMenuSprite(); + // NOTE Skipped preloading of data + } +} + +void GnapEngine::mainLoop() { + + _newCursorValue = 1; + _cursorValue = -1; + _newSceneNum = 0; + _currentSceneNum = 55; + _prevSceneNum = 55; + invClear(); + clearFlags(); + _grabCursorSpriteIndex = -1; + _grabCursorSprite = 0; + + debug("MainLoop #1"); + + // > DEBUG BEGIN + _currentSceneNum = 53; + _newSceneNum = 27; + _newCursorValue = 3; + // < DEBUG END + + loadStockDat(); + + while (!_gameDone) { + + debug("New scene: %d", _newSceneNum); + + _prevSceneNum = _currentSceneNum; + _currentSceneNum = _newSceneNum; + + debug("GnapEngine::mainLoop() _prevSceneNum: %d; _currentSceneNum: %d", _prevSceneNum, _currentSceneNum); + + if (_newCursorValue != _cursorValue) { + debug("_newCursorValue: %d", _newCursorValue); + _cursorValue = _newCursorValue; + if (!_wasSavegameLoaded) + initGameFlags(_cursorValue); + } + + _sceneSavegameLoaded = _wasSavegameLoaded; + _wasSavegameLoaded = false; + + initScene(); + + runSceneLogic(); + afterScene(); + + _soundMan->stopAll(); + + // Force purge all resources + _sequenceCache->purge(true); + _soundCache->purge(true); + _spriteCache->purge(true); + + if (isKeyStatus1(28)) { + clearKeyStatus1(28); + if (_debugLevel == 4) + _gameDone = true; + } + + } + + if (_backgroundSurface) + deleteSurface(&_backgroundSurface); + + _dat->close(1); + // TODO freeMenuSprite(); + // TODO freeFont(); + + debug("MainLoop #XXX2"); + +} + +void GnapEngine::initScene() { + + Common::String datFilename; + + _isLeavingScene = false; + _sceneDone = false; + _newSceneNum = 55; + _gnapActionStatus = -1; + _beaverActionStatus = -1; + gnapInitBrainPulseRndValue(); + hideCursor(); + clearAllKeyStatus1(); + _mouseClickState.left = false; + _mouseClickState.right = false; + _sceneClickedHotspot = -1; + + datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); + + debug("GnapEngine::initScene() datFilename: %s", datFilename.c_str()); + + _dat->open(0, datFilename.c_str()); + + int backgroundId = initSceneLogic(); + + if (!_backgroundSurface) { + if (_currentSceneNum != 0) + _backgroundSurface = _gameSys->loadBitmap(makeRid(1, 0x8AA)); + else + _backgroundSurface = _gameSys->loadBitmap(makeRid(0, backgroundId)); + _gameSys->setBackgroundSurface(_backgroundSurface, 0, 500, 1, 1000); + } + + if (_currentSceneNum != 0 && _currentSceneNum != 16 && _currentSceneNum != 47 && + _currentSceneNum != 48 && _currentSceneNum != 54) { + _gameSys->drawBitmap(backgroundId); + } + + if ((_cursorValue == 4 && isFlag(12)) || _currentSceneNum == 41) + playSound(makeRid(1, 0x8F6), true); + +} + +void GnapEngine::endSceneInit() { + showCursor(); + if (_newGrabCursorSpriteIndex >= 0) + setGrabCursorSprite(_newGrabCursorSpriteIndex); +} + +void GnapEngine::afterScene() { + + if (_gameDone) + return; + + if (_newCursorValue == _cursorValue && _newSceneNum != 0 && _newSceneNum != 16 && + _newSceneNum != 47 && _newSceneNum != 48 && _newSceneNum != 54 && _newSceneNum != 49 && + _newSceneNum != 50 && _newSceneNum != 51 && _newSceneNum != 52) + _newGrabCursorSpriteIndex = _grabCursorSpriteIndex; + else + _newGrabCursorSpriteIndex = -1; + + setGrabCursorSprite(-1); + + _gameSys->requestClear2(0); + _gameSys->requestClear1(); + _gameSys->waitForUpdate(); + + _gameSys->requestClear2(0); + _gameSys->requestClear1(); + _gameSys->waitForUpdate(); + + screenEffect(0, 0, 0, 0); + + _dat->close(0); + + for (int animationIndex = 0; animationIndex < 12; ++animationIndex) + _gameSys->setAnimation(0, 0, animationIndex); + + clearKeyStatus1(Common::KEYCODE_p); + + _mouseClickState.left = false; + _mouseClickState.right = false; + +} + +void GnapEngine::checkGameKeys() { + if (isKeyStatus1(Common::KEYCODE_p)) { + clearKeyStatus1(Common::KEYCODE_p); + pauseGame(); + updatePause(); + } + // TODO? Debug input +} + +void GnapEngine::startSoundTimerA(int timerIndex) { + _soundTimerIndexA = timerIndex; + _timers[timerIndex] = getRandom(50) + 100; +} + +int GnapEngine::playSoundA() { + + static const int kSoundIdsA[] = { + 0x93E, 0x93F, 0x941, 0x942, 0x943, 0x944, + 0x945, 0x946, 0x947, 0x948, 0x949 + }; + + int soundId = -1; + + if (!_timers[_soundTimerIndexA]) { + _timers[_soundTimerIndexA] = getRandom(50) + 100; + soundId = kSoundIdsA[getRandom(11)]; + playSound(soundId | 0x10000, 0); + } + return soundId; +} + +void GnapEngine::startSoundTimerB(int timerIndex) { + _soundTimerIndexB = timerIndex; + _timers[timerIndex] = getRandom(50) + 150; +} + +int GnapEngine::playSoundB() { + + static const int kSoundIdsB[] = { + 0x93D, 0x929, 0x92A, 0x92B, 0x92C, 0x92D, + 0x92E, 0x92F, 0x930, 0x931, 0x932, 0x933, + 0x934, 0x935, 0x936, 0x937, 0x938, 0x939, + 0x93A + }; + + int soundId = -1; + + if (!_timers[_soundTimerIndexB]) { + _timers[_soundTimerIndexB] = getRandom(50) + 150; + soundId = kSoundIdsB[getRandom(19)]; + playSound(soundId | 0x10000, 0); + } + return soundId; +} + +void GnapEngine::startSoundTimerC(int timerIndex) { + _soundTimerIndexC = timerIndex; + _timers[timerIndex] = getRandom(50) + 150; +} + +int GnapEngine::playSoundC() { + + static const int kSoundIdsC[] = { + 0x918, 0x91F, 0x920, 0x922, 0x923, 0x924, + 0x926 + }; + + int soundId = -1; + + if (!_timers[_soundTimerIndexC]) { + _timers[_soundTimerIndexC] = getRandom(50) + 150; + soundId = kSoundIdsC[getRandom(7)] ; + playSound(soundId | 0x10000, 0); + } + return soundId; +} + +void GnapEngine::startIdleTimer(int timerIndex) { + _idleTimerIndex = timerIndex; + _timers[timerIndex] = 3000; +} + +void GnapEngine::updateIdleTimer() { + if (!_timers[_idleTimerIndex]) { + _timers[_idleTimerIndex] = 3000; + _gameSys->insertSequence(0x1088B, 255, 0, 0, kSeqNone, 0, 0, 75); + } +} + +void GnapEngine::screenEffect(int dir, byte r, byte g, byte b) { + if (dir == 1) { + for (int y = 300; y < 600; y += 50) { + _gameSys->fillSurface(0, 0, y, 800, 50, r, g, b); + _gameSys->fillSurface(0, 0, 549 - y + 1, 800, 50, r, g, b); + gameUpdateTick(); + _system->delayMillis(50); + } + } else { + for (int y = 0; y < 300; y += 50) { + _gameSys->fillSurface(0, 0, y, 800, 50, r, g, b); + _gameSys->fillSurface(0, 0, 549 - y + 1, 800, 50, r, g, b); + gameUpdateTick(); + _system->delayMillis(50); + } + } +} + +bool GnapEngine::isKeyStatus1(int key) { + return _keyPressState[key] != 0;; +} + +bool GnapEngine::isKeyStatus2(int key) { + return _keyDownState[key] != 0;; +} + +void GnapEngine::clearKeyStatus1(int key) { + _keyPressState[key] = 0; + _keyDownState[key] = 0; +} + +void GnapEngine::clearAllKeyStatus1() { + _keyStatus1[0] = 0; + _keyStatus1[1] = 0; + memset(_keyPressState, 0, sizeof(_keyPressState)); + memset(_keyDownState, 0, sizeof(_keyDownState)); +} + +void GnapEngine::deleteSurface(Graphics::Surface **surface) { + if (surface && *surface) { + (*surface)->free(); + delete *surface; + *surface = 0; + } +} + +int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { + int sequenceId = 0; + + switch (kind) { + + case gskPullOutDevice: + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = 0x83F; + _gnapIdleFacing = 5; + } else { + sequenceId = 0x83D; + _gnapIdleFacing = 7; + } + } else { + if (_gnapX > gridX) { + sequenceId = 0x83B; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x839; + _gnapIdleFacing = 1; + } + } + } else { + switch (_gnapIdleFacing) { + case 1: + sequenceId = 0x839; + break; + case 3: + sequenceId = 0x83B; + break; + case 7: + sequenceId = 0x83D; + break; + default: + sequenceId = 0x83F; + break; + } + } + break; + + case gskPullOutDeviceNonWorking: + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = 0x829; + _gnapIdleFacing = 5; + } else { + sequenceId = 0x828; + _gnapIdleFacing = 7; + } + } else { + if (_gnapX > gridX) { + sequenceId = 0x827; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x826; + _gnapIdleFacing = 1; + } + } + } else { + switch (_gnapIdleFacing) { + case 1: + sequenceId = 0x826; + break; + case 3: + sequenceId = 0x827; + break; + case 7: + sequenceId = 0x828; + break; + default: + sequenceId = 0x829; + break; + } + } + break; + + case gskScratchingHead: + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = 0x834; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x885; + _gnapIdleFacing = 7; + } + } else { + if (_gnapX > gridX) { + sequenceId = 0x834; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x833; + _gnapIdleFacing = 1; + } + } + } else { + switch (_gnapIdleFacing) { + case 1: + sequenceId = 0x833; + _gnapIdleFacing = 1; + break; + case 3: + sequenceId = 0x834; + _gnapIdleFacing = 3; + break; + case 7: + sequenceId = 0x885; + _gnapIdleFacing = 7; + break; + default: + sequenceId = 0x834; + _gnapIdleFacing = 3; + break; + } + } + break; + + case gskIdle: + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = 0x7BC; + _gnapIdleFacing = 5; + } else { + sequenceId = 0x7BB; + _gnapIdleFacing = 7; + } + } else { + if (_gnapX > gridX) { + sequenceId = 0x7BA; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7B9; + _gnapIdleFacing = 1; + } + } + } else { + switch (_gnapIdleFacing) { + case 1: + sequenceId = 0x7B9; + break; + case 3: + sequenceId = 0x7BA; + break; + case 7: + sequenceId = 0x7BB; + break; + default: + sequenceId = 0x7BC; + break; + } + } + break; + + case gskBrainPulsating: + _gnapBrainPulseNum = (_gnapBrainPulseNum + 1) & 1; + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x812; + _gnapIdleFacing = 5; + } else { + sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7FE; + _gnapIdleFacing = 7; + } + } else { + if (_gnapX > gridX) { + sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7D6; + _gnapIdleFacing = 3; + } else { + sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7EA; + _gnapIdleFacing = 1; + } + } + } else { + switch (_gnapIdleFacing) { + case 1: + sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7EA; + break; + case 3: + sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7D6; + break; + case 7: + sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7FE; + break; + default: + sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x812; + break; + } + } + break; + + case gskImpossible: + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = 0x831; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7A8; + _gnapIdleFacing = 1; + } + } else { + if (_gnapX > gridX) { + sequenceId = 0x831; + _gnapIdleFacing = 3; + } else { + if (_gnapX % 2) + sequenceId = 0x7A8; + else + sequenceId = 0x89A; + _gnapIdleFacing = 1; + } + } + } else if (_gnapIdleFacing != 1 && _gnapIdleFacing != 7) { + sequenceId = 0x831; + _gnapIdleFacing = 3; + } else { + if (_currentSceneNum % 2) + sequenceId = 0x7A8; + else + sequenceId = 0x89A; + _gnapIdleFacing = 1; + } + break; + + case gskDeflect: + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = 0x830; + _gnapIdleFacing = 5; + } else { + sequenceId = 0x82F; + _gnapIdleFacing = 7; + } + } else { + if (_gnapX > gridX) { + sequenceId = 0x82E; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7A7; + _gnapIdleFacing = 1; + } + } + } else { + switch (_gnapIdleFacing) { + case 1: + sequenceId = 0x7A7; + break; + case 3: + sequenceId = 0x82E; + break; + case 5: + sequenceId = 0x830; + break; + case 7: + sequenceId = 0x82F; + break; + } + } + break; + + case gskUseDevice: + switch (_gnapIdleFacing) { + case 1: + sequenceId = 0x83A; + break; + case 3: + sequenceId = 0x83C; + break; + case 5: + sequenceId = 0x840; + break; + case 7: + sequenceId = 0x83E; + break; + } + break; + + case gskMoan1: + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = 0x832; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7AA; + _gnapIdleFacing = 1; + } + } else { + if (_gnapX > gridX) { + sequenceId = 0x832; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7AA; + _gnapIdleFacing = 1; + } + } + } else if (_gnapIdleFacing != 1 && _gnapIdleFacing != 7) { + sequenceId = 0x832; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7AA; + _gnapIdleFacing = 1; + } + break; + + case gskMoan2: + if (gridX > 0 && gridY > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) { + sequenceId = 0x832; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7AA; + _gnapIdleFacing = 1; + } + } else { + if (_gnapX > gridX) { + sequenceId = 0x832; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7AA; + _gnapIdleFacing = 1; + } + } + } else if (_gnapIdleFacing != 1 && _gnapIdleFacing != 7) { + sequenceId = 0x832; + _gnapIdleFacing = 3; + } else { + sequenceId = 0x7AA; + _gnapIdleFacing = 1; + } + break; + + } + + return sequenceId | 0x10000; +} + +int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { + + int sequenceId; + int facing = _gnapIdleFacing; + + if (gridY > 0 && gridX > 0) { + if (_gnapY > gridY) { + if (_gnapX > gridX) + _gnapIdleFacing = 5; + else + _gnapIdleFacing = 7; + } else { + if (_gnapX > gridX) + _gnapIdleFacing = 5; + else + _gnapIdleFacing = 7; + } + } else if (_gnapIdleFacing != 1 && _gnapIdleFacing != 7) { + _gnapIdleFacing = 5; + } else { + _gnapIdleFacing = 7; + } + + switch (index) { + case 0: + if (_gnapIdleFacing == 7) + sequenceId = 0x8A0; + else + sequenceId = 0x8A1; + break; + case 1: + if (_gnapIdleFacing == 7) + sequenceId = 0x880; + else + sequenceId = 0x895; + break; + case 2: + if (_gnapIdleFacing == 7) + sequenceId = 0x884; + else + sequenceId = 0x899; + break; + //Skip 3 + case 4: + if (_gnapIdleFacing == 7) + sequenceId = 0x881; + else + sequenceId = 0x896; + break; + case 5: + if (_gnapIdleFacing == 7) + sequenceId = 0x883; + else + sequenceId = 0x898; + break; + case 6: + if (_gnapIdleFacing == 7) + sequenceId = 0x87E; + else + sequenceId = 0x893; + break; + case 7: + if (_gnapIdleFacing == 7) + sequenceId = 0x848; + else + sequenceId = 0x890; + break; + case 8: + if (_gnapIdleFacing == 7) + sequenceId = 0x87D; + else + sequenceId = 0x892; + break; + case 9: + if (_gnapIdleFacing == 7) + sequenceId = 0x882; + else + sequenceId = 0x897; + break; + case 10: + if (_gnapIdleFacing == 7) + sequenceId = 0x87C; + else + sequenceId = 0x891; + break; + case 11: + if (_gnapIdleFacing == 7) + sequenceId = 0x87C; + else + sequenceId = 0x891; + break; + case 12: + if (_gnapIdleFacing == 7) + sequenceId = 0x87D; + else + sequenceId = 0x892; + break; + case 13: + if (_gnapIdleFacing == 7) + sequenceId = 0x888; + else + sequenceId = 0x89D; + break; + case 14: + if (_gnapIdleFacing == 7) + sequenceId = 0x87F; + else + sequenceId = 0x894; + break; + case 15: + if (_gnapIdleFacing == 7) + sequenceId = 0x87B; + else + sequenceId = 0x8A3; + break; + case 16: + if (_gnapIdleFacing == 7) + sequenceId = 0x877; + else + sequenceId = 0x88C; + break; + //Skip 17 + case 18: + sequenceId = 0x887; + break; + case 19: + if (_gnapIdleFacing == 7) + sequenceId = 0x87A; + else + sequenceId = 0x88F; + break; + case 20: + if (_gnapIdleFacing == 7) + sequenceId = 0x878; + else + sequenceId = 0x88D; + break; + case 21: + if (_gnapIdleFacing == 7) + sequenceId = 0x879; + else + sequenceId = 0x88E; + break; + case 22: + if (_gnapIdleFacing == 7) + sequenceId = 0x88A; + else + sequenceId = 0x89F; + break; + case 23: + if (_gnapIdleFacing == 7) + sequenceId = 0x889; + else + sequenceId = 0x89E; + break; + case 24: + if (_gnapIdleFacing == 7) + sequenceId = 0x886; + else + sequenceId = 0x89B; + break; + case 25: + if (_gnapIdleFacing == 7) + sequenceId = 0x87A; + else + sequenceId = 0x88F; + break; + //Skip 26 + //Skip 27 + //Skip 28 + //Skip 29 + default: + _gnapIdleFacing = facing; + sequenceId = getGnapSequenceId(gskImpossible, 0, 0); + break; + } + return sequenceId; +} + +void GnapEngine::gnapIdle() { + if (_gnapSequenceId != -1 && _gnapSequenceDatNum == 1 && + (_gnapSequenceId == 0x7A6 || _gnapSequenceId == 0x7AA || + _gnapSequenceId == 0x832 || _gnapSequenceId == 0x841 || + _gnapSequenceId == 0x842 || _gnapSequenceId == 0x8A2 || + _gnapSequenceId == 0x833 || _gnapSequenceId == 0x834 || + _gnapSequenceId == 0x885 || _gnapSequenceId == 0x7A8 || + _gnapSequenceId == 0x831 || _gnapSequenceId == 0x89A)) { + _gameSys->insertSequence(getGnapSequenceId(gskIdle, 0, 0) | 0x10000, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 32, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + _gnapSequenceId = getGnapSequenceId(gskIdle, 0, 0); + _gnapSequenceDatNum = 1; + } +} + +void GnapEngine::gnapActionIdle(int sequenceId) { + if (_gnapSequenceId != -1 && ridToDatIndex(sequenceId) == _gnapSequenceDatNum && + ridToEntryIndex(sequenceId) == _gnapSequenceId) { + _gameSys->insertSequence(getGnapSequenceId(gskIdle, 0, 0) | 0x10000, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 32, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + _gnapSequenceId = getGnapSequenceId(gskIdle, 0, 0); + _gnapSequenceDatNum = 1; + } +} + +void GnapEngine::playGnapSequence(int sequenceId) { + _timers[2] = getRandom(30) + 20; + _timers[3] = 300; + gnapIdle(); + _gameSys->insertSequence(sequenceId, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 9, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + _gnapSequenceId = ridToEntryIndex(sequenceId); + _gnapSequenceDatNum = ridToDatIndex(sequenceId); +} + +void GnapEngine::playGnapImpossible(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskImpossible, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapScratchingHead(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskScratchingHead, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapMoan1(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskMoan1, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapMoan2(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskMoan2, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapBrainPulsating(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskBrainPulsating, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapPullOutDevice(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskPullOutDevice, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapPullOutDeviceNonWorking(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskPullOutDeviceNonWorking, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapUseDevice(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskUseDevice, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapIdle(int gridX, int gridY) { + playGnapSequence(getGnapSequenceId(gskIdle, gridX, gridY) | 0x10000); +} + +void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { + playGnapSequence(getGnapShowSequenceId(itemIndex, gridLookX, gridLookY) | 0x10000); +} + +void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int gridLookY) { + if (_platX == gridX && _platY == gridY) + beaverMakeRoom(); + gnapWalkTo(gridX, gridY, -1, -1, 1); + playGnapShowItem(_grabCursorSpriteIndex, gridLookX, gridLookY); +} + +void GnapEngine::updateGnapIdleSequence() { + if (_gnapActionStatus < 0) { + if (_timers[2] > 0) { + if (_timers[3] == 0) { + _timers[2] = 60; + _timers[3] = 300; + _gnapRandomValue = getRandom(5); + if (_gnapIdleFacing == 1) { + switch (_gnapRandomValue) { + case 0: + playGnapSequence(0x107A6); + break; + case 1: + playGnapSequence(0x107AA); + break; + case 2: + playGnapSequence(0x10841); + break; + default: + playGnapSequence(0x108A2); + break; + } + } else if (_gnapIdleFacing == 3) { + if (_gnapRandomValue > 2) + playGnapSequence(0x10832); + else + playGnapSequence(0x10842); + } + } + } else { + _timers[2] = getRandom(30) + 20; + if (_gnapIdleFacing == 1) { + _gameSys->insertSequence(0x107BD, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + _gnapSequenceId = 0x7BD; + _gnapSequenceDatNum = 1; + } else if (_gnapIdleFacing == 3) { + _gameSys->insertSequence(0x107BE, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + _gnapSequenceId = 0x7BE; + _gnapSequenceDatNum = 1; + } + } + } else { + _timers[2] = getRandom(30) + 20; + _timers[3] = 300; + } +} + +void GnapEngine::updateGnapIdleSequence2() { + if (_gnapActionStatus < 0) { + if (_timers[2] > 0) { + if (_timers[3] == 0) { + _timers[2] = 60; + _timers[3] = 300; + if (_gnapIdleFacing == 1) { + playGnapSequence(0x107AA); + } else if (_gnapIdleFacing == 3) { + playGnapSequence(0x10832); + } + } + } else { + _timers[2] = getRandom(30) + 20; + if (_gnapIdleFacing == 1) { + _gameSys->insertSequence(0x107BD, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + _gnapSequenceId = 0x7BD; + _gnapSequenceDatNum = 1; + } else if (_gnapIdleFacing == 3) { + _gameSys->insertSequence(0x107BE, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + _gnapSequenceId = 0x7BE; + _gnapSequenceDatNum = 1; + } + } + } else { + _timers[2] = getRandom(30) + 20; + _timers[3] = 300; + } +} + +bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gridY1, int gridX2, int gridY2) { + if (_mouseClickState.left && someStatus == _gnapActionStatus) { + _isLeavingScene = false; + _gameSys->setAnimation(0, 0, animationIndex); + _gnapActionStatus = -1; + _beaverActionStatus = -1; + gnapWalkTo(gridX1, gridY1, -1, -1, 1); + platypusWalkTo(gridX2, gridY2, -1, -1, 1); + _mouseClickState.left = false; + return true; + } + return false; +} + +void GnapEngine::initGnapPos(int gridX, int gridY, int facing) { + _timers[2] = 30; + _timers[3] = 300; + _gnapX = gridX; + _gnapY = gridY; + if (facing <= 0) + _gnapIdleFacing = 1; + else + _gnapIdleFacing = facing; + if (_gnapIdleFacing == 3) { + _gnapSequenceId = 0x7B8; + } else { + _gnapSequenceId = 0x7B5; + _gnapIdleFacing = 1; + } + _gnapId = 20 * _gnapY; + _gnapSequenceDatNum = 1; + _gameSys->insertSequence(makeRid(1, _gnapSequenceId), 20 * _gnapY, + 0, 0, + 1, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); +} + +void GnapEngine::gnapInitBrainPulseRndValue() { + _gnapBrainPulseRndValue = 2 * getRandom(10); +} + +void GnapEngine::gnapUseDeviceOnBeaver() { + + playGnapSequence(makeRid(1, getGnapSequenceId(gskPullOutDevice, _platX, _platY))); + + if (_beaverFacing != 0) { + _gameSys->insertSequence(makeRid(1, 0x7D5), _beaverId, + makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, + 8, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + _beaverSequenceId = 0x7D5; + _beaverSequenceDatNum = 1; + } else { + _gameSys->insertSequence(makeRid(1, 0x7D4), _beaverId, + makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, + 8, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + _beaverSequenceId = 0x7D4; + _beaverSequenceDatNum = 1; + } + + int newSequenceId = getGnapSequenceId(gskUseDevice, 0, 0); + _gameSys->insertSequence(makeRid(1, newSequenceId), _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + _gnapSequenceId = newSequenceId; + _gnapSequenceDatNum = 1; + +} + +void GnapEngine::doCallback(int callback) { + switch (callback) { + case 8: + scene08_updateAnimationsCb(); + break; + case 10: + scene10_updateAnimationsCb(); + break; + case 20: + scene20_updateAnimationsCb(); + break; + } +} + +bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, int callback) { + bool result = false; + + if (_gnapActionStatus <= -1 && _beaverActionStatus <= -1) { + _gnapActionStatus = 100; + if (isPointBlocked(_platX + gridX, _platY + gridY) && (_platX + gridX != _gnapX || _platY + gridY != _gnapY)) + platypusWalkStep(); + if (!isPointBlocked(_platX + gridX, _platY + gridY) && (_platX + gridX != _gnapX || _platY + gridY != _gnapY)) { + gnapWalkTo(_platX + gridX, _platY + gridY, 0, 0x107B9, 1); + while (_gameSys->getAnimationStatus(0) != 2) { + updateMouseCursor(); + doCallback(callback); + gameUpdateTick(); + } + _gameSys->setAnimation(0, 0, 0); + if (_platX + gridX == _gnapX && _platY + gridY == _gnapY) { + _gameSys->setAnimation(platSequenceId, _beaverId, 1); + playBeaverSequence(platSequenceId); + while (_gameSys->getAnimationStatus(1) != 2) { + updateMouseCursor(); + doCallback(callback); + gameUpdateTick(); + } + result = true; + } + } + _gnapActionStatus = -1; + } + return result; +} + +void GnapEngine::gnapKissPlatypus(int callback) { + if (gnapPlatypusAction(-1, 0, 0x107D1, callback)) { + _gnapActionStatus = 100; + _gameSys->setAnimation(0, 0, 1); + _gameSys->setAnimation(0x10847, _gnapId, 0); + _gameSys->insertSequence(0x10847, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 15 * (5 * _gnapX - 20) - (21 - _gridMinX), 48 * (_gnapY - 6) - (146 - _gridMinY)); + _gnapSequenceDatNum = 1; + _gnapSequenceId = 0x847; + _gameSys->insertSequence(0x107CB, _beaverId, + makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, + 8, getSequenceTotalDuration(0x10847), 75 * _platX - _platGridX, 48 * _platY - _platGridY); + _beaverSequenceDatNum = 1; + _beaverSequenceId = 0x7CB; + _beaverFacing = 0; + playGnapSequence(0x107B5); + while (_gameSys->getAnimationStatus(0) != 2) { + updateMouseCursor(); + doCallback(callback); + gameUpdateTick(); + } + _gameSys->setAnimation(0, 0, 0); + _gnapActionStatus = -1; + } else { + playGnapSequence(getGnapSequenceId(gskScratchingHead, _platX, _platY) | 0x10000); + } +} + +void GnapEngine::gnapUseJointOnPlatypus() { + setGrabCursorSprite(-1); + if (gnapPlatypusAction(1, 0, 0x107C1, 0)) { + _gnapActionStatus = 100; + _gameSys->setAnimation(0, 0, 1); + _gameSys->setAnimation(0x10876, _beaverId, 0); + _gameSys->insertSequence(0x10875, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 15 * (5 * _gnapX - 30), 48 * (_gnapY - 7)); + _gnapSequenceDatNum = 1; + _gnapSequenceId = 0x875; + _gameSys->insertSequence(0x10876, _beaverId, + _beaverSequenceId | (_beaverSequenceDatNum << 16), _beaverId, + 8, 0, 15 * (5 * _platX - 25), 48 * (_platY - 7)); + _beaverSequenceDatNum = 1; + _beaverSequenceId = 0x876; + _beaverFacing = 0; + playGnapSequence(0x107B5); + gnapWalkStep(); + while (_gameSys->getAnimationStatus(0) != 2) { + updateMouseCursor(); + gameUpdateTick(); + } + _gameSys->setAnimation(0, 0, 0); + _gnapActionStatus = -1; + } else { + playGnapSequence(getGnapSequenceId(gskScratchingHead, _platX, _platY) | 0x10000); + } +} + +void GnapEngine::gnapUseDisguiseOnPlatypus() { + _gameSys->setAnimation(0x10846, _gnapId, 0); + playGnapSequence(0x10846); + while (_gameSys->getAnimationStatus(0) != 2) + gameUpdateTick(); + _newSceneNum = 47; + _isLeavingScene = true; + _sceneDone = true; + setFlag(10); +} + +int GnapEngine::getBeaverSequenceId(int kind, int gridX, int gridY) { + int sequenceId; + + // TODO kind is always 0, remove that parameter + if (kind != 0) + return 0; + + if (gridX > 0 && gridY > 0) { + if (gridX < _platX) { + sequenceId = 0x7CC; + _beaverFacing = 4; + } else { + sequenceId = 0x7CB; + _beaverFacing = 0; + } + } else if (_beaverFacing != 0) { + sequenceId = 0x7CC; + _beaverFacing = 4; + } else { + sequenceId = 0x7CB; + _beaverFacing = 0; + } + return sequenceId | 0x10000; +} + +void GnapEngine::playBeaverSequence(int sequenceId) { + _gameSys->insertSequence(sequenceId, _beaverId, + makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, + 9, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + _beaverSequenceId = ridToEntryIndex(sequenceId); + _beaverSequenceDatNum = ridToDatIndex(sequenceId); +} + +void GnapEngine::updateBeaverIdleSequence() { + if (_beaverActionStatus < 0 && _gnapActionStatus < 0) { + if (_timers[0] > 0) { + if (_timers[1] == 0) { + _timers[1] = getRandom(20) + 30; + _gnapRandomValue = getRandom(10); + if (_beaverFacing != 0) { + if (_gnapRandomValue != 0 || _beaverSequenceId != 0x7CA) { + if (_gnapRandomValue != 1 || _beaverSequenceId != 0x7CA) + playBeaverSequence(0x107CA); + else + playBeaverSequence(0x10845); + } else { + playBeaverSequence(0x107CC); + } + } else if (_gnapRandomValue != 0 || _beaverSequenceId != 0x7C9) { + if (_gnapRandomValue != 1 || _beaverSequenceId != 0x7C9) { + if (_gnapRandomValue != 2 || _beaverSequenceId != 0x7C9) + playBeaverSequence(0x107C9); + else + playBeaverSequence(0x108A4); + } else { + playBeaverSequence(0x10844); + } + } else { + playBeaverSequence(0x107CB); + } + } + } else { + _timers[0] = getRandom(75) + 75; + beaverMakeRoom(); + } + } else { + _timers[0] = 100; + _timers[1] = 35; + } +} + +void GnapEngine::beaverSub426234() { + if (_beaverActionStatus < 0 && _gnapActionStatus < 0) { + if (_timers[0]) { + if (!_timers[1]) { + _timers[1] = getRandom(20) + 30; + _gnapRandomValue = getRandom(10); + if (_beaverFacing != 0) { + if (_gnapRandomValue >= 2 || _beaverSequenceId != 0x7CA) + playBeaverSequence(0x107CA); + else + playBeaverSequence(0x107CC); + } else { + if (_gnapRandomValue >= 2 || _beaverSequenceId != 0x7C9) { + playBeaverSequence(0x107C9); + } else { + playBeaverSequence(0x107CB); + } + } + } + } else { + _timers[0] = getRandom(75) + 75; + beaverMakeRoom(); + } + } else { + _timers[0] = 100; + _timers[1] = 35; + } +} + +void GnapEngine::initBeaverPos(int gridX, int gridY, int facing) { + _timers[0] = 50; + _timers[1] = 20; + _platX = gridX; + _platY = gridY; + if (facing <= 0) + _beaverFacing = 0; + else + _beaverFacing = facing; + if (_beaverFacing == 4) { + _beaverSequenceId = 0x7D1; + } else { + _beaverSequenceId = 0x7C1; + _beaverFacing = 0; + } + _beaverId = 20 * _platY; + _beaverSequenceDatNum = 1; + _gameSys->insertSequence(makeRid(1, _beaverSequenceId), 20 * _platY, + 0, 0, + 1, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); +} + +//////////////////////////////////////////////////////////////////////////////// + +void GnapEngine::initGlobalSceneVars() { + + // Scene 1 + _s01_pigsIdCtr = 0; + _s01_smokeIdCtr = 0; + _s01_spaceshipSurface = 0; + + // Scene 2 + _s02_truckGrillCtr = 0; + + // Scene 3 + _s03_nextPlatSequenceId = -1; + _s03_platypusScared = false; + _s03_platypusHypnotized = false; + + // Scene 4 + _s04_dogIdCtr = 0; + //_s04_triedWindow = true;//?? + _s04_triedWindow = false; + + // Scene 5 + _s05_nextChickenSequenceId = -1; + + // Scene 6 + _s06_nextPlatSequenceId = -1; + + // Scene 11 + _s11_billardBallCtr = 0; + + // Scene 13 + _s13_backToiletCtr = -1; + + // Scene 17 + _s17_platTryGetWrenchCtr = 0; + _s17_wrenchCtr = 2; + _s17_nextCarWindowSequenceId = -1; + _s17_nextWrenchSequenceId = -1; + _s17_canTryGetWrench = true; + _s17_platPhoneCtr = 0; + _s17_nextPhoneSequenceId = -1; + _s17_currPhoneSequenceId = -1; + + // Scene 18 + _s18_garbageCanPos = 8; + _s18_platPhoneCtr = 0; + _s18_platPhoneIter = 0; + _s18_nextPhoneSequenceId = -1; + _s18_currPhoneSequenceId = -1; + + // Scene 19 + _s19_toyGrabCtr = 0; + _s19_pictureSurface = 0; + _s19_shopAssistantCtr = 0; + + // Scene 20 + _s20_stonerGuyCtr = 3; + _s20_stonerGuyShowingJoint = false; + _s20_groceryStoreGuyCtr = 0; + + // Scene 22 + _s22_caughtBefore = false; + _s22_cashierCtr = 3; + + // Scene 50 + _s50_timesPlayed = 0; + _s50_timesPlayedModifier = 0; + _s50_attackCounter = 0; + _s50_leftTongueEnergyBarPos = 10; + _s50_leftTongueNextIdCtr = 0; + _s50_rightTongueEnergyBarPos = 10; + _s50_rightTongueNextIdCtr = 0; + + // Scene 52 + _s52_gameScore = 0; + _s52_aliensInitialized = false; + _s52_alienDirection = 0; + _s52_soundToggle = false; + + // Scene 53 + _s53_callsMadeCtr = 0; + _s53_callsRndUsed = 0; + + // Toy UFO + _toyUfoId = 0; + _toyUfoActionStatus = -1; + _toyUfoX = 0; + _toyUfoY = 50; + +} + +bool GnapEngine::sceneXX_sub_4466B1() { + + if (isKeyStatus1(Common::KEYCODE_ESCAPE)) { + clearKeyStatus1(Common::KEYCODE_ESCAPE); + clearKeyStatus1(Common::KEYCODE_UP); + clearKeyStatus1(Common::KEYCODE_RIGHT); + clearKeyStatus1(Common::KEYCODE_LEFT); + clearKeyStatus1(Common::KEYCODE_p); + return true; + } + + if (isKeyStatus1(Common::KEYCODE_p)) { + clearKeyStatus1(Common::KEYCODE_p); + pauseGame(); + updatePause(); + } + return false; + +} + +void GnapEngine::sceneXX_playRandomSound(int timerIndex) { + if (!_timers[timerIndex]) { + _timers[timerIndex] = getRandom(40) + 50; + _gnapRandomValue = getRandom(4); + switch (_gnapRandomValue) { + case 0: + playSound(0x1091B, 0); + break; + case 1: + playSound(0x10921, 0); + break; + case 2: + playSound(0x10927, 0); + break; + case 3: + playSound(0x1091D, 0); + break; + } + } +} + +void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequenceId2, int sequenceId3) { + setGrabCursorSprite(-1); + _gameSys->setAnimation(sequenceId2, _gnapId, 0); + _gameSys->insertSequence(sequenceId2, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 15 * (5 * _gnapX - 25), 48 * (_gnapY - 8)); + _gnapSequenceId = sequenceId2; + _gnapSequenceDatNum = 0; + while (_gameSys->getAnimationStatus(0) != 2) + gameUpdateTick(); + hideCursor(); + addFullScreenSprite(fullScreenSpriteId, 255); + _gameSys->setAnimation(sequenceId1, 256, 0); + _gameSys->insertSequence(sequenceId1, 256, 0, 0, kSeqNone, 0, 0, 0); + while (_gameSys->getAnimationStatus(0) != 2) + gameUpdateTick(); + _gameSys->setAnimation(sequenceId3, _gnapId, 0); + _gameSys->insertSequence(sequenceId3, _gnapId, + makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + 8, 0, 15 * (5 * _gnapX - 25), 48 * (_gnapY - 8)); + removeFullScreenSprite(); + showCursor(); + _gnapSequenceId = sequenceId3; +} + +// Scene 0 + +int GnapEngine::scene00_init() { + return 0x37C; +} + +void GnapEngine::toyUfoSetStatus(int a1) { + clearFlag(16); + clearFlag(17); + clearFlag(18); + clearFlag(19); + setFlag(a1); +} + +int GnapEngine::toyUfoGetSequenceId() { + if (isFlag(16)) + return 0x84E; + if (isFlag(17)) + return 0x84B; + if (isFlag(18)) + return 0x84D; + if (isFlag(19)) + return 0x84C; + return 0x84E; +} + +bool GnapEngine::toyUfoCheckTimer() { + if (!isFlag(12) || isFlag(18) || _timers[9] || + _toyUfoSequenceId == 0x870 || _toyUfoSequenceId == 0x871 || _toyUfoSequenceId == 0x872 || _toyUfoSequenceId == 0x873) + return false; + _sceneDone = true; + _newSceneNum = 41; + return true; +} + +void GnapEngine::toyUfoFlyTo(int destX, int destY, int a3, int a4, int a5, int a6, int animationIndex) { + int v21 = 0; + int v14 = 0; + int v17 = 36; + int v15 = 32; + int i = 0; + GridStruct v16[34]; + + if (destX == -1) + destX = _leftClickMouseX; + + if (destY == -1) + destY = _leftClickMouseY; + + //CHECKME + + int v25 = CLIP(destX, a3, a4); + int v26 = CLIP(destY, a5, a6); + int v24, v23; + int v13, v20; + + if (v25 == _toyUfoX) + v24 = 0; + else + v24 = (v25 - _toyUfoX) / ABS(v25 - _toyUfoX); + + if (v26 == _toyUfoY) + v23 = 0; + else + v23 = (v26 - _toyUfoY) / ABS(v26 - _toyUfoY); + + v13 = ABS(v25 - _toyUfoX); + v20 = ABS(v26 - _toyUfoY); + + if (v20 > v13) { + int v22 = v20 / v15; + while (v14 < v20 && i < 34) { + if (v22 - 5 >= i) { + v15 = MIN(36, 8 * i + 8); + } else { + v15 = MAX(6, v15 - 3); + } + v14 += v15; + v16[i].gridX1 = _toyUfoX + v24 * v13 * v14 / v20; + v16[i].gridY1 = _toyUfoY + v23 * v14; + ++i; + } + } else { + int v22 = v13 / v17; + while (v14 < v13 && i < 34) { + if (v22 - 5 >= i) { + v17 = MIN(38, 8 * i + 8); + } else { + v17 = MAX(6, v17 - 3); + } + v14 += v17; + v16[i].gridX1 = _toyUfoX + v24 * v14; + v16[i].gridY1 = _toyUfoY + v23 * v20 * v14 / v13; + ++i; + } + } + + v21 = i - 1; + + _toyUfoX = v25; + _toyUfoY = v26; + + debug("v21: %d", v21); + + if (i - 1 > 0) { + int v18; + if (isFlag(16)) + v18 = 0x867; + else if (isFlag(17)) + v18 = 0x84F; + else if (isFlag(18)) + v18 = 0x85F; + else if (isFlag(19)) + v18 = 0x857; + v16[0].sequenceId = v18; + v16[0].id = 0; + _gameSys->insertSequence(v18 | 0x10000, 0, + _toyUfoSequenceId | 0x10000, _toyUfoId, + 8, 0, v16[0].gridX1 - 365, v16[0].gridY1 - 128); + for (i = 1; i < v21; ++i) { + v16[i].sequenceId = v18 + (i % 8); + v16[i].id = i; + _gameSys->insertSequence(v16[i].sequenceId | 0x10000, v16[i].id, + v16[i - 1].sequenceId | 0x10000, v16[i - 1].id, + 8, 0, + v16[i].gridX1 - 365, v16[i].gridY1 - 128); + } + + _toyUfoSequenceId = v16[v21 - 1].sequenceId; + _toyUfoId = v16[v21 - 1].id; + + if (animationIndex >= 0) + _gameSys->setAnimation(_toyUfoSequenceId | 0x10000, _toyUfoId, animationIndex); + + } + +} + +// Scene 99 + +int GnapEngine::cutscene_init() { + return -1; +} + +void GnapEngine::cutscene_run() { + + int itemIndex = 0; + int soundId = -1; + int volume = 100; + int duration = 0; + bool skip = false; + + int v1 = 0; + + if (_prevSceneNum == 2) { + soundId = 0x36B; + duration = MAX(1, 300 / getSequenceTotalDuration(_s99_dword_47F370[_s99_itemsCount - 1]));//CHECKME + _timers[0] = 0; + } + + if (soundId != -1) + playSound(soundId, 0); + + hideCursor(); + + _gameSys->drawSpriteToBackground(0, 0, _s99_dword_47F2F0[0]); + + for (int j = 0; j < _s99_dword_47F330[0]; ++j) + _gameSys->insertSequence(_s99_dword_47F370[j], j + 2, 0, 0, kSeqNone, 0, 0, 0); + _gameSys->setAnimation(_s99_dword_47F370[0], 2, 0); + + clearKeyStatus1(Common::KEYCODE_ESCAPE); + clearKeyStatus1(Common::KEYCODE_SPACE); + clearKeyStatus1(29); + + _mouseClickState.left = false; + + while (!_sceneDone) { + + gameUpdateTick(); + + if (_gameSys->getAnimationStatus(0) == 2 || skip) { + skip = 0; + _gameSys->requestClear2(0); + _gameSys->requestClear1(); + _gameSys->setAnimation(0, 0, 0); + v1 += _s99_dword_47F330[itemIndex++]; + if (itemIndex >= _s99_itemsCount) { + _sceneDone = true; + } else { + for (int m = 0; m < _s99_dword_47F330[itemIndex]; ++m) + _gameSys->insertSequence(_s99_dword_47F370[v1 + m], m + 2, 0, 0, kSeqNone, 0, 0, 0); + _gameSys->drawSpriteToBackground(0, 0, _s99_dword_47F2F0[itemIndex]); + _gameSys->setAnimation(_s99_dword_47F370[v1], 2, 0); + } + } + + if (isKeyStatus1(Common::KEYCODE_ESCAPE) || isKeyStatus1(Common::KEYCODE_SPACE) || isKeyStatus1(29)) { + clearKeyStatus1(Common::KEYCODE_ESCAPE); + clearKeyStatus1(Common::KEYCODE_SPACE); + clearKeyStatus1(29); + if (_s99_canSkip[itemIndex] & 1) + skip = true; + else + _sceneDone = true; + } + + if (!_timers[0] && itemIndex == _s99_itemsCount - 1) { + _timers[0] = 2; + volume = MAX(1, volume - duration); + setSoundVolume(soundId, volume); + } + + } + + if (soundId != -1) + stopSound(soundId); + +} + +} // End of namespace Gnap -- cgit v1.2.3 From ea59c06ba9194cd82de811f7516a69a0e8555c89 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 10:30:24 +0100 Subject: GNAP: Clean up scene 28 --- engines/gnap/gnap.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 08f598551e..80817b86ec 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -158,14 +158,14 @@ Common::Error GnapEngine::run() { //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); - _currentSceneNum = 26; + _currentSceneNum = 28; Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); _dat->open(0, datFilename.c_str()); _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); - _gameSys->insertSequence(0x5b, 100, -1, -1, 0, 0, 0, 0); + _gameSys->insertSequence(0x113, 100, -1, -1, 0, 0, 0, 0); CursorMan.showMouse(true); @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 27; + _newSceneNum = 28; _newCursorValue = 3; // < DEBUG END @@ -2131,6 +2131,7 @@ bool GnapEngine::sceneXX_sub_4466B1() { pauseGame(); updatePause(); } + return false; } -- cgit v1.2.3 From 22b8cc704a37e03373e77ebca45d6d6c4bb456d4 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 11:01:13 +0100 Subject: GNAP: Clean up scene 29 --- engines/gnap/gnap.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 80817b86ec..aa1b29eb4d 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -158,14 +158,14 @@ Common::Error GnapEngine::run() { //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); - _currentSceneNum = 28; + _currentSceneNum = 29; Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); _dat->open(0, datFilename.c_str()); _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); - _gameSys->insertSequence(0x113, 100, -1, -1, 0, 0, 0, 0); + _gameSys->insertSequence(0xed, 100, -1, -1, 0, 0, 0, 0); CursorMan.showMouse(true); @@ -721,8 +721,8 @@ void GnapEngine::initGameFlags(int num) { //invAdd(kItemPill); invAdd(kItemBucketWithBeer); invAdd(kItemChickenBucket); - invAdd(kItemGum); - invAdd(kItemPicture); + invAdd(kItemBanana); + invAdd(kItemHorn); #endif } @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 28; + _newSceneNum = 29; _newCursorValue = 3; // < DEBUG END -- cgit v1.2.3 From bd7d790f141eb0afb2276777391e2a7986195b09 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 11:21:18 +0100 Subject: GNAP: Clean up scene 30 --- engines/gnap/gnap.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index aa1b29eb4d..d1f4b8047a 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -158,14 +158,14 @@ Common::Error GnapEngine::run() { //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); - _currentSceneNum = 29; + _currentSceneNum = 30; Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); _dat->open(0, datFilename.c_str()); _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); - _gameSys->insertSequence(0xed, 100, -1, -1, 0, 0, 0, 0); + _gameSys->insertSequence(0xff, 100, -1, -1, 0, 0, 0, 0); CursorMan.showMouse(true); @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 29; + _newSceneNum = 30; _newCursorValue = 3; // < DEBUG END -- cgit v1.2.3 From 11c381c8df1ff9e6d545c63c4b2654df0e020281 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 11:40:15 +0100 Subject: GNAP: Clean up scene 31 --- engines/gnap/gnap.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index d1f4b8047a..4d18215223 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -158,14 +158,14 @@ Common::Error GnapEngine::run() { //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); - _currentSceneNum = 30; + _currentSceneNum = 31; Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); _dat->open(0, datFilename.c_str()); _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); - _gameSys->insertSequence(0xff, 100, -1, -1, 0, 0, 0, 0); + _gameSys->insertSequence(0xfe, 100, -1, -1, 0, 0, 0, 0); CursorMan.showMouse(true); @@ -719,7 +719,7 @@ void GnapEngine::initGameFlags(int num) { //invAdd(kItemTongs); invAdd(kItemDiceQuarterHole); //invAdd(kItemPill); - invAdd(kItemBucketWithBeer); + //invAdd(kItemBucketWithBeer); invAdd(kItemChickenBucket); invAdd(kItemBanana); invAdd(kItemHorn); @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 30; + _newSceneNum = 31; _newCursorValue = 3; // < DEBUG END @@ -2087,6 +2087,10 @@ void GnapEngine::initGlobalSceneVars() { // Scene 22 _s22_caughtBefore = false; _s22_cashierCtr = 3; + + // Scene 31 + _s31_beerGuyDistracted = false; + _s31_clerkMeasureMaxCtr = 3; // Scene 50 _s50_timesPlayed = 0; -- cgit v1.2.3 From fad62e18c898ec6f392b4cec5bfaa9bd7ff44bb5 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 12:51:43 +0100 Subject: GNAP: Clean up scene 32 --- engines/gnap/gnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 4d18215223..86fc38d7c0 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 31; + _newSceneNum = 32; _newCursorValue = 3; // < DEBUG END -- cgit v1.2.3 From 4752703298c568a87b3a7bfb281cd1993d9de3c7 Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 13:21:20 +0100 Subject: GNAP: Clean up scene 38 --- engines/gnap/gnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 86fc38d7c0..677b073207 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 32; + _newSceneNum = 38; _newCursorValue = 3; // < DEBUG END -- cgit v1.2.3 From 9bac81c802e12b64cde335af30d748a98815658c Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 13:53:06 +0100 Subject: GNAP: Clean up scene 39 --- engines/gnap/gnap.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 677b073207..598fd8c7c8 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -158,14 +158,14 @@ Common::Error GnapEngine::run() { //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); - _currentSceneNum = 31; + _currentSceneNum = 39; Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); _dat->open(0, datFilename.c_str()); _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); - _gameSys->insertSequence(0xfe, 100, -1, -1, 0, 0, 0, 0); + _gameSys->insertSequence(0x33, 100, -1, -1, 0, 0, 0, 0); CursorMan.showMouse(true); @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 38; + _newSceneNum = 39; _newCursorValue = 3; // < DEBUG END -- cgit v1.2.3 From bd5417aea1e513f591cedf7bc2f7daad345d375e Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 14:54:47 +0100 Subject: GNAP: Clean up scene 41 --- engines/gnap/gnap.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 598fd8c7c8..aaecbfb058 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -158,14 +158,14 @@ Common::Error GnapEngine::run() { //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); - _currentSceneNum = 39; + _currentSceneNum = 41; Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); _dat->open(0, datFilename.c_str()); _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); - _gameSys->insertSequence(0x33, 100, -1, -1, 0, 0, 0, 0); + _gameSys->insertSequence(0x11b, 100, -1, -1, 0, 0, 0, 0); CursorMan.showMouse(true); @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 39; + _newSceneNum = 41; _newCursorValue = 3; // < DEBUG END -- cgit v1.2.3 From 9f821cf1e1dab4e572873ad0c19704ba2bfcbd6e Mon Sep 17 00:00:00 2001 From: johndoe123 Date: Thu, 23 Jan 2014 16:58:49 +0100 Subject: GNAP: Clean up scene 42 --- engines/gnap/gnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index aaecbfb058..ba8214d4f1 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 41; + _newSceneNum = 42; _newCursorValue = 3; // < DEBUG END -- cgit v1.2.3 From 9d52140b09ccf1821515bfc4ed92127a5c97c3ce Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 14 Mar 2016 00:06:56 +0100 Subject: GNAP: Some renaming in toyUfoFlyTo --- engines/gnap/gnap.cpp | 79 +++++++++++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 40 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index ba8214d4f1..57fa625794 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2221,12 +2221,7 @@ bool GnapEngine::toyUfoCheckTimer() { return true; } -void GnapEngine::toyUfoFlyTo(int destX, int destY, int a3, int a4, int a5, int a6, int animationIndex) { - int v21 = 0; - int v14 = 0; - int v17 = 36; - int v15 = 32; - int i = 0; +void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, int maxY, int animationIndex) { GridStruct v16[34]; if (destX == -1) @@ -2237,76 +2232,80 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int a3, int a4, int a5, int a //CHECKME - int v25 = CLIP(destX, a3, a4); - int v26 = CLIP(destY, a5, a6); - int v24, v23; - int v13, v20; + int clippedDestX = CLIP(destX, minX, maxX); + int clippedDestY = CLIP(destY, minY, maxY); + int dirX, dirY; // 0, -1 or 1 - if (v25 == _toyUfoX) - v24 = 0; + if (clippedDestX == _toyUfoX) + dirX = 0; else - v24 = (v25 - _toyUfoX) / ABS(v25 - _toyUfoX); + dirX = (clippedDestX - _toyUfoX) / ABS(clippedDestX - _toyUfoX); - if (v26 == _toyUfoY) - v23 = 0; + if (clippedDestY == _toyUfoY) + dirY = 0; else - v23 = (v26 - _toyUfoY) / ABS(v26 - _toyUfoY); - - v13 = ABS(v25 - _toyUfoX); - v20 = ABS(v26 - _toyUfoY); + dirY = (clippedDestY - _toyUfoY) / ABS(clippedDestY - _toyUfoY); - if (v20 > v13) { - int v22 = v20 / v15; - while (v14 < v20 && i < 34) { + int deltaX = ABS(clippedDestX - _toyUfoX); + int deltaY = ABS(clippedDestY - _toyUfoY); + + int i = 0; + if (deltaY > deltaX) { + int v15 = 32; + int v22 = deltaY / v15; + int v14 = 0; + while (v14 < deltaY && i < 34) { if (v22 - 5 >= i) { v15 = MIN(36, 8 * i + 8); } else { v15 = MAX(6, v15 - 3); } v14 += v15; - v16[i].gridX1 = _toyUfoX + v24 * v13 * v14 / v20; - v16[i].gridY1 = _toyUfoY + v23 * v14; + v16[i].gridX1 = _toyUfoX + dirX * deltaX * v14 / deltaY; + v16[i].gridY1 = _toyUfoY + dirY * v14; ++i; } } else { - int v22 = v13 / v17; - while (v14 < v13 && i < 34) { + int v17 = 36; + int v22 = deltaX / v17; + int v14 = 0; + while (v14 < deltaX && i < 34) { if (v22 - 5 >= i) { v17 = MIN(38, 8 * i + 8); } else { v17 = MAX(6, v17 - 3); } v14 += v17; - v16[i].gridX1 = _toyUfoX + v24 * v14; - v16[i].gridY1 = _toyUfoY + v23 * v20 * v14 / v13; + v16[i].gridX1 = _toyUfoX + dirX * v14; + v16[i].gridY1 = _toyUfoY + dirY * deltaY * v14 / deltaX; ++i; } } - v21 = i - 1; + int v21 = i - 1; - _toyUfoX = v25; - _toyUfoY = v26; + _toyUfoX = clippedDestX; + _toyUfoY = clippedDestY; - debug("v21: %d", v21); +// debug("v21: %d", v21); if (i - 1 > 0) { - int v18; + int seqId; if (isFlag(16)) - v18 = 0x867; + seqId = 0x867; else if (isFlag(17)) - v18 = 0x84F; + seqId = 0x84F; else if (isFlag(18)) - v18 = 0x85F; + seqId = 0x85F; else if (isFlag(19)) - v18 = 0x857; - v16[0].sequenceId = v18; + seqId = 0x857; + v16[0].sequenceId = seqId; v16[0].id = 0; - _gameSys->insertSequence(v18 | 0x10000, 0, + _gameSys->insertSequence(seqId | 0x10000, 0, _toyUfoSequenceId | 0x10000, _toyUfoId, 8, 0, v16[0].gridX1 - 365, v16[0].gridY1 - 128); for (i = 1; i < v21; ++i) { - v16[i].sequenceId = v18 + (i % 8); + v16[i].sequenceId = seqId + (i % 8); v16[i].id = i; _gameSys->insertSequence(v16[i].sequenceId | 0x10000, v16[i].id, v16[i - 1].sequenceId | 0x10000, v16[i - 1].id, -- cgit v1.2.3 From 37f84d0bc5626f9b5a406c79ff82ba566e88f4af Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 14 Mar 2016 00:30:18 +0100 Subject: GNAP: change 3rd parameter of removeSequence to boolean, adapt calls accordingly --- engines/gnap/gnap.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 57fa625794..e31c78ee58 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -613,7 +613,7 @@ void GnapEngine::insertDeviceIconActive() { } void GnapEngine::removeDeviceIconActive() { - _gameSys->removeSequence(0x1084A, 21, 1); + _gameSys->removeSequence(0x1084A, 21, true); } void GnapEngine::setDeviceHotspot(int hotspotIndex, int x1, int y1, int x2, int y2) { @@ -2337,8 +2337,6 @@ void GnapEngine::cutscene_run() { int duration = 0; bool skip = false; - int v1 = 0; - if (_prevSceneNum == 2) { soundId = 0x36B; duration = MAX(1, 300 / getSequenceTotalDuration(_s99_dword_47F370[_s99_itemsCount - 1]));//CHECKME @@ -2362,6 +2360,7 @@ void GnapEngine::cutscene_run() { _mouseClickState.left = false; + int v1 = 0; while (!_sceneDone) { gameUpdateTick(); -- cgit v1.2.3 From ccadc0ab208c9de0c1b56a83c58b81e5002beb6a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 14 Mar 2016 07:04:52 +0100 Subject: GNAP: Some renaming, change some function parameters to boolean --- engines/gnap/gnap.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index e31c78ee58..a46b4c6cce 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -869,11 +869,11 @@ void GnapEngine::afterScene() { setGrabCursorSprite(-1); - _gameSys->requestClear2(0); + _gameSys->requestClear2(false); _gameSys->requestClear1(); _gameSys->waitForUpdate(); - _gameSys->requestClear2(0); + _gameSys->requestClear2(false); _gameSys->requestClear1(); _gameSys->waitForUpdate(); @@ -2366,8 +2366,8 @@ void GnapEngine::cutscene_run() { gameUpdateTick(); if (_gameSys->getAnimationStatus(0) == 2 || skip) { - skip = 0; - _gameSys->requestClear2(0); + skip = false; + _gameSys->requestClear2(false); _gameSys->requestClear1(); _gameSys->setAnimation(0, 0, 0); v1 += _s99_dword_47F330[itemIndex++]; -- cgit v1.2.3 From 83bc85713bacd3a50daaace0411a3382c855797a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 14 Mar 2016 07:40:03 +0100 Subject: GNAP: More renaming. Remove unused variable in MouseButtonState and Hotspot --- engines/gnap/gnap.cpp | 96 +++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 48 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index a46b4c6cce..08861f4398 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -246,20 +246,20 @@ void GnapEngine::updateEvents() { _mouseY = event.mouse.y; break; case Common::EVENT_LBUTTONUP: - _mouseButtonState.left = false; + _mouseButtonState._left = false; break; case Common::EVENT_LBUTTONDOWN: _leftClickMouseX = event.mouse.x; _leftClickMouseY = event.mouse.y; - _mouseButtonState.left = true; - _mouseClickState.left = true; + _mouseButtonState._left = true; + _mouseClickState._left = true; break; case Common::EVENT_RBUTTONUP: - _mouseButtonState.right = false; + _mouseButtonState._right = false; break; case Common::EVENT_RBUTTONDOWN: - _mouseButtonState.right = true; - _mouseClickState.right = true; + _mouseButtonState._right = true; + _mouseClickState._right = true; break; case Common::EVENT_QUIT: quitGame(); @@ -331,8 +331,8 @@ void GnapEngine::resumeGame() { // TODO stopMidi(); _isPaused = false; clearAllKeyStatus1(); - _mouseClickState.left = false; - _mouseClickState.right = false; + _mouseClickState._left = false; + _mouseClickState._right = false; showCursor(); _gameSys->_gameSysClock = 0; _gameSys->_lastUpdateClock = 0; @@ -375,12 +375,12 @@ void GnapEngine::delayTicksCursor(int a1) { void GnapEngine::setHotspot(int index, int16 x1, int16 y1, int16 x2, int16 y2, uint16 flags, int16 walkX, int16 walkY) { - _hotspots[index].x1 = x1; - _hotspots[index].y1 = y1; - _hotspots[index].x2 = x2; - _hotspots[index].y2 = y2; - _hotspots[index].flags = flags; - _hotspots[index].id = index; + _hotspots[index]._x1 = x1; + _hotspots[index]._y1 = y1; + _hotspots[index]._x2 = x2; + _hotspots[index]._y2 = y2; + _hotspots[index]._flags = flags; + _hotspots[index]._id = index; _hotspotsWalkPos[index].x = walkX; _hotspotsWalkPos[index].y = walkY; } @@ -406,44 +406,44 @@ void GnapEngine::updateCursorByHotspot() { if (hotspotIndex < 0) setCursor(kDisabledCursors[_verbCursor]); - else if (_hotspots[hotspotIndex].flags & SF_EXIT_L_CURSOR) + else if (_hotspots[hotspotIndex]._flags & SF_EXIT_L_CURSOR) setCursor(EXIT_L_CURSOR); - else if (_hotspots[hotspotIndex].flags & SF_EXIT_R_CURSOR) + else if (_hotspots[hotspotIndex]._flags & SF_EXIT_R_CURSOR) setCursor(EXIT_R_CURSOR); - else if (_hotspots[hotspotIndex].flags & SF_EXIT_U_CURSOR) + else if (_hotspots[hotspotIndex]._flags & SF_EXIT_U_CURSOR) setCursor(EXIT_U_CURSOR); - else if (_hotspots[hotspotIndex].flags & SF_EXIT_D_CURSOR) + else if (_hotspots[hotspotIndex]._flags & SF_EXIT_D_CURSOR) setCursor(EXIT_D_CURSOR); - else if (_hotspots[hotspotIndex].flags & SF_EXIT_NE_CURSOR) + else if (_hotspots[hotspotIndex]._flags & SF_EXIT_NE_CURSOR) setCursor(EXIT_NE_CURSOR); - else if (_hotspots[hotspotIndex].flags & SF_EXIT_NW_CURSOR) + else if (_hotspots[hotspotIndex]._flags & SF_EXIT_NW_CURSOR) setCursor(EXIT_NW_CURSOR); - else if (_hotspots[hotspotIndex].flags & SF_EXIT_SE_CURSOR) + else if (_hotspots[hotspotIndex]._flags & SF_EXIT_SE_CURSOR) setCursor(EXIT_SE_CURSOR); - else if (_hotspots[hotspotIndex].flags & SF_EXIT_SW_CURSOR) + else if (_hotspots[hotspotIndex]._flags & SF_EXIT_SW_CURSOR) setCursor(EXIT_SW_CURSOR); - else if (_hotspots[hotspotIndex].flags & (1 << _verbCursor)) + else if (_hotspots[hotspotIndex]._flags & (1 << _verbCursor)) setCursor(kCursors[_verbCursor]); else setCursor(kDisabledCursors[_verbCursor]); } // Update platypus hotspot - _hotspots[0].x1 = _gridMinX + 75 * _platX - 30; - _hotspots[0].y1 = _gridMinY + 48 * _platY - 100; - _hotspots[0].x2 = _gridMinX + 75 * _platX + 30; - _hotspots[0].y2 = _gridMinY + 48 * _platY; + _hotspots[0]._x1 = _gridMinX + 75 * _platX - 30; + _hotspots[0]._y1 = _gridMinY + 48 * _platY - 100; + _hotspots[0]._x2 = _gridMinX + 75 * _platX + 30; + _hotspots[0]._y2 = _gridMinY + 48 * _platY; } int GnapEngine::getClickedHotspotId() { int result = -1; if (_isWaiting) - _mouseClickState.left = false; - else if (_mouseClickState.left) { + _mouseClickState._left = false; + else if (_mouseClickState._left) { int hotspotIndex = getHotspotIndexAtPos(_leftClickMouseX, _leftClickMouseY); if (hotspotIndex >= 0) { - _mouseClickState.left = false; + _mouseClickState._left = false; _timers[3] = 300; - result = _hotspots[hotspotIndex].id; + result = _hotspots[hotspotIndex]._id; } } return result; @@ -454,9 +454,9 @@ int GnapEngine::getInventoryItemSpriteNum(int index) { } void GnapEngine::updateMouseCursor() { - if (_mouseClickState.right) { + if (_mouseClickState._right) { // Switch through the verb cursors - _mouseClickState.right = false; + _mouseClickState._right = false; _timers[3] = 300; _verbCursor = (_verbCursor + 1) % 4; if (!isFlag(0) && _verbCursor == PLAT_CURSOR && _cursorValue == 1) @@ -592,11 +592,11 @@ void GnapEngine::showFullScreenSprite(int resourceId) { hideCursor(); setGrabCursorSprite(-1); addFullScreenSprite(resourceId, 256); - while (!_mouseClickState.left && !isKeyStatus1(Common::KEYCODE_ESCAPE) && + while (!_mouseClickState._left && !isKeyStatus1(Common::KEYCODE_ESCAPE) && !isKeyStatus1(Common::KEYCODE_SPACE) && !isKeyStatus1(29)) { gameUpdateTick(); } - _mouseClickState.left = false; + _mouseClickState._left = false; clearKeyStatus1(Common::KEYCODE_ESCAPE); clearKeyStatus1(29); clearKeyStatus1(Common::KEYCODE_SPACE); @@ -629,12 +629,12 @@ void GnapEngine::setDeviceHotspot(int hotspotIndex, int x1, int y1, int x2, int _deviceY1 = 14; if (y2 == -1) _deviceY2 = 79; - _hotspots[hotspotIndex].x1 = _deviceX1; - _hotspots[hotspotIndex].y1 = _deviceY1; - _hotspots[hotspotIndex].x2 = _deviceX2; - _hotspots[hotspotIndex].y2 = _deviceY2; - _hotspots[hotspotIndex].flags = SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; - _hotspots[hotspotIndex].id = hotspotIndex; + _hotspots[hotspotIndex]._x1 = _deviceX1; + _hotspots[hotspotIndex]._y1 = _deviceY1; + _hotspots[hotspotIndex]._x2 = _deviceX2; + _hotspots[hotspotIndex]._y2 = _deviceY2; + _hotspots[hotspotIndex]._flags = SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; + _hotspots[hotspotIndex]._id = hotspotIndex; } int GnapEngine::getSequenceTotalDuration(int resourceId) { @@ -819,8 +819,8 @@ void GnapEngine::initScene() { gnapInitBrainPulseRndValue(); hideCursor(); clearAllKeyStatus1(); - _mouseClickState.left = false; - _mouseClickState.right = false; + _mouseClickState._left = false; + _mouseClickState._right = false; _sceneClickedHotspot = -1; datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); @@ -886,8 +886,8 @@ void GnapEngine::afterScene() { clearKeyStatus1(Common::KEYCODE_p); - _mouseClickState.left = false; - _mouseClickState.right = false; + _mouseClickState._left = false; + _mouseClickState._right = false; } @@ -1720,14 +1720,14 @@ void GnapEngine::updateGnapIdleSequence2() { } bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gridY1, int gridX2, int gridY2) { - if (_mouseClickState.left && someStatus == _gnapActionStatus) { + if (_mouseClickState._left && someStatus == _gnapActionStatus) { _isLeavingScene = false; _gameSys->setAnimation(0, 0, animationIndex); _gnapActionStatus = -1; _beaverActionStatus = -1; gnapWalkTo(gridX1, gridY1, -1, -1, 1); platypusWalkTo(gridX2, gridY2, -1, -1, 1); - _mouseClickState.left = false; + _mouseClickState._left = false; return true; } return false; @@ -2358,7 +2358,7 @@ void GnapEngine::cutscene_run() { clearKeyStatus1(Common::KEYCODE_SPACE); clearKeyStatus1(29); - _mouseClickState.left = false; + _mouseClickState._left = false; int v1 = 0; while (!_sceneDone) { -- cgit v1.2.3 From b6ba5cfd89bed28dfab39f5af7b445b0041c2c7e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 18 Mar 2016 01:32:32 +0100 Subject: GNAP: Reduce the scope of a couple of variables, make use of enum values in calls to InsertSequence --- engines/gnap/gnap.cpp | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 08861f4398..e6a789a7b7 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -165,7 +165,7 @@ Common::Error GnapEngine::run() { _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); - _gameSys->insertSequence(0x11b, 100, -1, -1, 0, 0, 0, 0); + _gameSys->insertSequence(0x11b, 100, -1, -1, kSeqNone, 0, 0, 0); CursorMan.showMouse(true); @@ -1559,7 +1559,7 @@ void GnapEngine::gnapIdle() { _gnapSequenceId == 0x831 || _gnapSequenceId == 0x89A)) { _gameSys->insertSequence(getGnapSequenceId(gskIdle, 0, 0) | 0x10000, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 32, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncExists, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = getGnapSequenceId(gskIdle, 0, 0); _gnapSequenceDatNum = 1; } @@ -1570,7 +1570,7 @@ void GnapEngine::gnapActionIdle(int sequenceId) { ridToEntryIndex(sequenceId) == _gnapSequenceId) { _gameSys->insertSequence(getGnapSequenceId(gskIdle, 0, 0) | 0x10000, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 32, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncExists, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = getGnapSequenceId(gskIdle, 0, 0); _gnapSequenceDatNum = 1; } @@ -1580,6 +1580,7 @@ void GnapEngine::playGnapSequence(int sequenceId) { _timers[2] = getRandom(30) + 20; _timers[3] = 300; gnapIdle(); + // CHECKME: Check the value of the flag _gameSys->insertSequence(sequenceId, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, 9, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); @@ -1668,13 +1669,13 @@ void GnapEngine::updateGnapIdleSequence() { if (_gnapIdleFacing == 1) { _gameSys->insertSequence(0x107BD, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = 0x7BD; _gnapSequenceDatNum = 1; } else if (_gnapIdleFacing == 3) { _gameSys->insertSequence(0x107BE, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = 0x7BE; _gnapSequenceDatNum = 1; } @@ -1702,13 +1703,13 @@ void GnapEngine::updateGnapIdleSequence2() { if (_gnapIdleFacing == 1) { _gameSys->insertSequence(0x107BD, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = 0x7BD; _gnapSequenceDatNum = 1; } else if (_gnapIdleFacing == 3) { _gameSys->insertSequence(0x107BE, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = 0x7BE; _gnapSequenceDatNum = 1; } @@ -1752,7 +1753,7 @@ void GnapEngine::initGnapPos(int gridX, int gridY, int facing) { _gnapSequenceDatNum = 1; _gameSys->insertSequence(makeRid(1, _gnapSequenceId), 20 * _gnapY, 0, 0, - 1, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqScale, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); } void GnapEngine::gnapInitBrainPulseRndValue() { @@ -1766,13 +1767,13 @@ void GnapEngine::gnapUseDeviceOnBeaver() { if (_beaverFacing != 0) { _gameSys->insertSequence(makeRid(1, 0x7D5), _beaverId, makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, - 8, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); _beaverSequenceId = 0x7D5; _beaverSequenceDatNum = 1; } else { _gameSys->insertSequence(makeRid(1, 0x7D4), _beaverId, makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, - 8, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); _beaverSequenceId = 0x7D4; _beaverSequenceDatNum = 1; } @@ -1780,7 +1781,7 @@ void GnapEngine::gnapUseDeviceOnBeaver() { int newSequenceId = getGnapSequenceId(gskUseDevice, 0, 0); _gameSys->insertSequence(makeRid(1, newSequenceId), _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = newSequenceId; _gnapSequenceDatNum = 1; @@ -1838,12 +1839,12 @@ void GnapEngine::gnapKissPlatypus(int callback) { _gameSys->setAnimation(0x10847, _gnapId, 0); _gameSys->insertSequence(0x10847, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 15 * (5 * _gnapX - 20) - (21 - _gridMinX), 48 * (_gnapY - 6) - (146 - _gridMinY)); + kSeqSyncWait, 0, 15 * (5 * _gnapX - 20) - (21 - _gridMinX), 48 * (_gnapY - 6) - (146 - _gridMinY)); _gnapSequenceDatNum = 1; _gnapSequenceId = 0x847; _gameSys->insertSequence(0x107CB, _beaverId, makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, - 8, getSequenceTotalDuration(0x10847), 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqSyncWait, getSequenceTotalDuration(0x10847), 75 * _platX - _platGridX, 48 * _platY - _platGridY); _beaverSequenceDatNum = 1; _beaverSequenceId = 0x7CB; _beaverFacing = 0; @@ -1868,12 +1869,12 @@ void GnapEngine::gnapUseJointOnPlatypus() { _gameSys->setAnimation(0x10876, _beaverId, 0); _gameSys->insertSequence(0x10875, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 15 * (5 * _gnapX - 30), 48 * (_gnapY - 7)); + kSeqSyncWait, 0, 15 * (5 * _gnapX - 30), 48 * (_gnapY - 7)); _gnapSequenceDatNum = 1; _gnapSequenceId = 0x875; _gameSys->insertSequence(0x10876, _beaverId, _beaverSequenceId | (_beaverSequenceDatNum << 16), _beaverId, - 8, 0, 15 * (5 * _platX - 25), 48 * (_platY - 7)); + kSeqSyncWait, 0, 15 * (5 * _platX - 25), 48 * (_platY - 7)); _beaverSequenceDatNum = 1; _beaverSequenceId = 0x876; _beaverFacing = 0; @@ -1927,6 +1928,7 @@ int GnapEngine::getBeaverSequenceId(int kind, int gridX, int gridY) { } void GnapEngine::playBeaverSequence(int sequenceId) { + // CHECKME: Check the value of the flag _gameSys->insertSequence(sequenceId, _beaverId, makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, 9, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); @@ -2020,7 +2022,7 @@ void GnapEngine::initBeaverPos(int gridX, int gridY, int facing) { _beaverSequenceDatNum = 1; _gameSys->insertSequence(makeRid(1, _beaverSequenceId), 20 * _platY, 0, 0, - 1, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqScale, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); } //////////////////////////////////////////////////////////////////////////////// @@ -2166,7 +2168,7 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ _gameSys->setAnimation(sequenceId2, _gnapId, 0); _gameSys->insertSequence(sequenceId2, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 15 * (5 * _gnapX - 25), 48 * (_gnapY - 8)); + kSeqSyncWait, 0, 15 * (5 * _gnapX - 25), 48 * (_gnapY - 8)); _gnapSequenceId = sequenceId2; _gnapSequenceDatNum = 0; while (_gameSys->getAnimationStatus(0) != 2) @@ -2180,7 +2182,7 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ _gameSys->setAnimation(sequenceId3, _gnapId, 0); _gameSys->insertSequence(sequenceId3, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 8, 0, 15 * (5 * _gnapX - 25), 48 * (_gnapY - 8)); + kSeqSyncWait, 0, 15 * (5 * _gnapX - 25), 48 * (_gnapY - 8)); removeFullScreenSprite(); showCursor(); _gnapSequenceId = sequenceId3; @@ -2303,13 +2305,13 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, v16[0].id = 0; _gameSys->insertSequence(seqId | 0x10000, 0, _toyUfoSequenceId | 0x10000, _toyUfoId, - 8, 0, v16[0].gridX1 - 365, v16[0].gridY1 - 128); + kSeqSyncWait, 0, v16[0].gridX1 - 365, v16[0].gridY1 - 128); for (i = 1; i < v21; ++i) { v16[i].sequenceId = seqId + (i % 8); v16[i].id = i; _gameSys->insertSequence(v16[i].sequenceId | 0x10000, v16[i].id, v16[i - 1].sequenceId | 0x10000, v16[i - 1].id, - 8, 0, + kSeqSyncWait, 0, v16[i].gridX1 - 365, v16[i].gridY1 - 128); } -- cgit v1.2.3 From db527374b78d75673b20d6a91e08b7c95a067d33 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 18 Mar 2016 07:34:28 +0100 Subject: GNAP: Some renaming --- engines/gnap/gnap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index e6a789a7b7..ce81f368b8 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2194,12 +2194,12 @@ int GnapEngine::scene00_init() { return 0x37C; } -void GnapEngine::toyUfoSetStatus(int a1) { +void GnapEngine::toyUfoSetStatus(int flagNum) { clearFlag(16); clearFlag(17); clearFlag(18); clearFlag(19); - setFlag(a1); + setFlag(flagNum); } int GnapEngine::toyUfoGetSequenceId() { -- cgit v1.2.3 From d546847b5a02f020f816d556ca16ee0df8a04756 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 18 Mar 2016 07:48:29 +0100 Subject: GNAP: More renaming in resource.h --- engines/gnap/gnap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index ce81f368b8..2edfcacabc 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -642,8 +642,8 @@ int GnapEngine::getSequenceTotalDuration(int resourceId) { int maxValue = 0; for (int i = 0; i < sequenceResource->_animationsCount; ++i) { SequenceAnimation *animation = &sequenceResource->_animations[i]; - if (animation->field_4 + animation->field_A > maxValue) - maxValue = animation->field_4 + animation->field_A; + if (animation->_additionalDelay + animation->_maxTotalDuration > maxValue) + maxValue = animation->_additionalDelay + animation->_maxTotalDuration; } int totalDuration = maxValue + sequenceResource->_totalDuration; _sequenceCache->release(resourceId); -- cgit v1.2.3 From cb69189a50abb8771fc7196c07b8bcfa93c06547 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 20 Mar 2016 23:37:05 +0100 Subject: GNAP: Renaming in cutscenes --- engines/gnap/gnap.cpp | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 2edfcacabc..30311ea776 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -751,7 +751,7 @@ void GnapEngine::mainLoop() { // > DEBUG BEGIN _currentSceneNum = 53; - _newSceneNum = 42; + _newSceneNum = 48; _newCursorValue = 3; // < DEBUG END @@ -2341,7 +2341,7 @@ void GnapEngine::cutscene_run() { if (_prevSceneNum == 2) { soundId = 0x36B; - duration = MAX(1, 300 / getSequenceTotalDuration(_s99_dword_47F370[_s99_itemsCount - 1]));//CHECKME + duration = MAX(1, 300 / getSequenceTotalDuration(_s99_sequenceIdArr[_s99_itemsCount - 1]));//CHECKME _timers[0] = 0; } @@ -2350,11 +2350,11 @@ void GnapEngine::cutscene_run() { hideCursor(); - _gameSys->drawSpriteToBackground(0, 0, _s99_dword_47F2F0[0]); + _gameSys->drawSpriteToBackground(0, 0, _s99_resourceIdArr[0]); - for (int j = 0; j < _s99_dword_47F330[0]; ++j) - _gameSys->insertSequence(_s99_dword_47F370[j], j + 2, 0, 0, kSeqNone, 0, 0, 0); - _gameSys->setAnimation(_s99_dword_47F370[0], 2, 0); + for (int j = 0; j < _s99_sequenceCountArr[0]; ++j) + _gameSys->insertSequence(_s99_sequenceIdArr[j], j + 2, 0, 0, kSeqNone, 0, 0, 0); + _gameSys->setAnimation(_s99_sequenceIdArr[0], 2, 0); clearKeyStatus1(Common::KEYCODE_ESCAPE); clearKeyStatus1(Common::KEYCODE_SPACE); @@ -2362,9 +2362,8 @@ void GnapEngine::cutscene_run() { _mouseClickState._left = false; - int v1 = 0; + int firstSequenceIndex = 0; while (!_sceneDone) { - gameUpdateTick(); if (_gameSys->getAnimationStatus(0) == 2 || skip) { @@ -2372,14 +2371,14 @@ void GnapEngine::cutscene_run() { _gameSys->requestClear2(false); _gameSys->requestClear1(); _gameSys->setAnimation(0, 0, 0); - v1 += _s99_dword_47F330[itemIndex++]; + firstSequenceIndex += _s99_sequenceCountArr[itemIndex++]; if (itemIndex >= _s99_itemsCount) { _sceneDone = true; } else { - for (int m = 0; m < _s99_dword_47F330[itemIndex]; ++m) - _gameSys->insertSequence(_s99_dword_47F370[v1 + m], m + 2, 0, 0, kSeqNone, 0, 0, 0); - _gameSys->drawSpriteToBackground(0, 0, _s99_dword_47F2F0[itemIndex]); - _gameSys->setAnimation(_s99_dword_47F370[v1], 2, 0); + for (int m = 0; m < _s99_sequenceCountArr[itemIndex]; ++m) + _gameSys->insertSequence(_s99_sequenceIdArr[firstSequenceIndex + m], m + 2, 0, 0, kSeqNone, 0, 0, 0); + _gameSys->drawSpriteToBackground(0, 0, _s99_resourceIdArr[itemIndex]); + _gameSys->setAnimation(_s99_sequenceIdArr[firstSequenceIndex], 2, 0); } } @@ -2398,12 +2397,10 @@ void GnapEngine::cutscene_run() { volume = MAX(1, volume - duration); setSoundVolume(soundId, volume); } - } if (soundId != -1) - stopSound(soundId); - + stopSound(soundId); } } // End of namespace Gnap -- cgit v1.2.3 From bec37164f840d47bd16b5c094d35f4345eb1d38c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 23 Mar 2016 08:03:33 +0100 Subject: GNAP: Change a couple of variables to boolean, soft refactoring --- engines/gnap/gnap.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 30311ea776..e0d2f188ba 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -294,7 +294,6 @@ void GnapEngine::gameUpdateTick() { _soundMan->update(); _system->updateScreen(); _system->delayMillis(5); - } void GnapEngine::saveTimers() { @@ -793,7 +792,6 @@ void GnapEngine::mainLoop() { if (_debugLevel == 4) _gameDone = true; } - } if (_backgroundSurface) @@ -804,11 +802,9 @@ void GnapEngine::mainLoop() { // TODO freeFont(); debug("MainLoop #XXX2"); - } void GnapEngine::initScene() { - Common::String datFilename; _isLeavingScene = false; @@ -856,7 +852,6 @@ void GnapEngine::endSceneInit() { } void GnapEngine::afterScene() { - if (_gameDone) return; @@ -906,7 +901,6 @@ void GnapEngine::startSoundTimerA(int timerIndex) { } int GnapEngine::playSoundA() { - static const int kSoundIdsA[] = { 0x93E, 0x93F, 0x941, 0x942, 0x943, 0x944, 0x945, 0x946, 0x947, 0x948, 0x949 @@ -1030,7 +1024,6 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { int sequenceId = 0; switch (kind) { - case gskPullOutDevice: if (gridX > 0 && gridY > 0) { if (_gnapY > gridY) { @@ -1364,14 +1357,12 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { _gnapIdleFacing = 1; } break; - } return sequenceId | 0x10000; } int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { - int sequenceId; int facing = _gnapIdleFacing; @@ -1761,7 +1752,6 @@ void GnapEngine::gnapInitBrainPulseRndValue() { } void GnapEngine::gnapUseDeviceOnBeaver() { - playGnapSequence(makeRid(1, getGnapSequenceId(gskPullOutDevice, _platX, _platY))); if (_beaverFacing != 0) { @@ -1902,6 +1892,7 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { setFlag(10); } +// CHECKME: The 3 parameters are always 0 int GnapEngine::getBeaverSequenceId(int kind, int gridX, int gridY) { int sequenceId; -- cgit v1.2.3 From ecc3e2a786629d06fbcf17e4d74605215efdc1ef Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 25 Mar 2016 07:33:22 +0100 Subject: GNAP: Change the type of some variables to boolean --- engines/gnap/gnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index e0d2f188ba..1a3bcf4f44 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2377,7 +2377,7 @@ void GnapEngine::cutscene_run() { clearKeyStatus1(Common::KEYCODE_ESCAPE); clearKeyStatus1(Common::KEYCODE_SPACE); clearKeyStatus1(29); - if (_s99_canSkip[itemIndex] & 1) + if (_s99_canSkip[itemIndex]) skip = true; else _sceneDone = true; -- cgit v1.2.3 From f3a164342b4f62c3bdf02c226880e6d2d6316a66 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 25 Mar 2016 07:49:43 +0100 Subject: GNAP: Remove a global variable used for randomization --- engines/gnap/gnap.cpp | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 1a3bcf4f44..5077568444 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1632,9 +1632,8 @@ void GnapEngine::updateGnapIdleSequence() { if (_timers[3] == 0) { _timers[2] = 60; _timers[3] = 300; - _gnapRandomValue = getRandom(5); if (_gnapIdleFacing == 1) { - switch (_gnapRandomValue) { + switch (getRandom(5)) { case 0: playGnapSequence(0x107A6); break; @@ -1649,7 +1648,7 @@ void GnapEngine::updateGnapIdleSequence() { break; } } else if (_gnapIdleFacing == 3) { - if (_gnapRandomValue > 2) + if (getRandom(5) > 2) playGnapSequence(0x10832); else playGnapSequence(0x10842); @@ -1932,19 +1931,19 @@ void GnapEngine::updateBeaverIdleSequence() { if (_timers[0] > 0) { if (_timers[1] == 0) { _timers[1] = getRandom(20) + 30; - _gnapRandomValue = getRandom(10); + int rnd = getRandom(10); if (_beaverFacing != 0) { - if (_gnapRandomValue != 0 || _beaverSequenceId != 0x7CA) { - if (_gnapRandomValue != 1 || _beaverSequenceId != 0x7CA) + if (rnd != 0 || _beaverSequenceId != 0x7CA) { + if (rnd != 1 || _beaverSequenceId != 0x7CA) playBeaverSequence(0x107CA); else playBeaverSequence(0x10845); } else { playBeaverSequence(0x107CC); } - } else if (_gnapRandomValue != 0 || _beaverSequenceId != 0x7C9) { - if (_gnapRandomValue != 1 || _beaverSequenceId != 0x7C9) { - if (_gnapRandomValue != 2 || _beaverSequenceId != 0x7C9) + } else if (rnd != 0 || _beaverSequenceId != 0x7C9) { + if (rnd != 1 || _beaverSequenceId != 0x7C9) { + if (rnd != 2 || _beaverSequenceId != 0x7C9) playBeaverSequence(0x107C9); else playBeaverSequence(0x108A4); @@ -1970,14 +1969,13 @@ void GnapEngine::beaverSub426234() { if (_timers[0]) { if (!_timers[1]) { _timers[1] = getRandom(20) + 30; - _gnapRandomValue = getRandom(10); if (_beaverFacing != 0) { - if (_gnapRandomValue >= 2 || _beaverSequenceId != 0x7CA) + if (getRandom(10) >= 2 || _beaverSequenceId != 0x7CA) playBeaverSequence(0x107CA); else playBeaverSequence(0x107CC); } else { - if (_gnapRandomValue >= 2 || _beaverSequenceId != 0x7C9) { + if (getRandom(10) >= 2 || _beaverSequenceId != 0x7C9) { playBeaverSequence(0x107C9); } else { playBeaverSequence(0x107CB); @@ -2136,8 +2134,7 @@ bool GnapEngine::sceneXX_sub_4466B1() { void GnapEngine::sceneXX_playRandomSound(int timerIndex) { if (!_timers[timerIndex]) { _timers[timerIndex] = getRandom(40) + 50; - _gnapRandomValue = getRandom(4); - switch (_gnapRandomValue) { + switch (getRandom(4)) { case 0: playSound(0x1091B, 0); break; -- cgit v1.2.3 From 29d989ac0e75cfb59173141851ad8f2131a58461 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 29 Mar 2016 00:00:36 +0200 Subject: GNAP: Change the initial values of backGroundImageValue2&4, change transparent to boolean, use nullptr in several places --- engines/gnap/gnap.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 5077568444..548a4362ac 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -97,13 +97,10 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _random = new Common::RandomSource("gnap"); Engine::syncSoundSettings(); - } GnapEngine::~GnapEngine() { - delete _random; - } Common::Error GnapEngine::run() { @@ -122,13 +119,13 @@ Common::Error GnapEngine::run() { _verbCursor = 1; invClear(); clearFlags(); - _grabCursorSprite = 0; + _grabCursorSprite = nullptr; _newGrabCursorSpriteIndex = -1; - _backgroundSurface = 0; + _backgroundSurface = nullptr; _isStockDatLoaded = false; _gameDone = false; _isPaused = false; - _pauseSprite = 0; + _pauseSprite = nullptr; //////////////////////////////////////////////////////////////////////////// @@ -143,7 +140,7 @@ Common::Error GnapEngine::run() { _gameSys = new GameSys(this); _soundMan = new SoundMan(this); - _menuBackgroundSurface = 0; + _menuBackgroundSurface = nullptr; initGlobalSceneVars(); -- cgit v1.2.3 From c0369a421b361a5e4ccfab3e7857d1c7ecd27cf7 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 1 Apr 2016 01:21:43 +0200 Subject: GNAP: Refactoring - Use an enum for Facing (Alien) --- engines/gnap/gnap.cpp | 233 +++++++++++++++++++++++++------------------------- 1 file changed, 117 insertions(+), 116 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 548a4362ac..c84583905f 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -890,6 +890,7 @@ void GnapEngine::checkGameKeys() { updatePause(); } // TODO? Debug input + debug("facing %d", _gnapIdleFacing); } void GnapEngine::startSoundTimerA(int timerIndex) { @@ -1026,29 +1027,29 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = 0x83F; - _gnapIdleFacing = 5; + _gnapIdleFacing = kDirUpLeft; } else { sequenceId = 0x83D; - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } } else { if (_gnapX > gridX) { sequenceId = 0x83B; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x839; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } } else { switch (_gnapIdleFacing) { - case 1: + case kDirBottomRight: sequenceId = 0x839; break; - case 3: + case kDirBottomLeft: sequenceId = 0x83B; break; - case 7: + case kDirUpRight: sequenceId = 0x83D; break; default: @@ -1063,29 +1064,29 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = 0x829; - _gnapIdleFacing = 5; + _gnapIdleFacing = kDirUpLeft; } else { sequenceId = 0x828; - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } } else { if (_gnapX > gridX) { sequenceId = 0x827; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x826; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } } else { switch (_gnapIdleFacing) { - case 1: + case kDirBottomRight: sequenceId = 0x826; break; - case 3: + case kDirBottomLeft: sequenceId = 0x827; break; - case 7: + case kDirUpRight: sequenceId = 0x828; break; default: @@ -1100,37 +1101,37 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = 0x834; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x885; - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } } else { if (_gnapX > gridX) { sequenceId = 0x834; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x833; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } } else { switch (_gnapIdleFacing) { - case 1: + case kDirBottomRight: sequenceId = 0x833; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; break; - case 3: + case kDirBottomLeft: sequenceId = 0x834; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; break; - case 7: + case kDirUpRight: sequenceId = 0x885; - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; break; default: sequenceId = 0x834; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; break; } } @@ -1141,29 +1142,29 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = 0x7BC; - _gnapIdleFacing = 5; + _gnapIdleFacing = kDirUpLeft; } else { sequenceId = 0x7BB; - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } } else { if (_gnapX > gridX) { sequenceId = 0x7BA; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7B9; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } } else { switch (_gnapIdleFacing) { - case 1: + case kDirBottomRight: sequenceId = 0x7B9; break; - case 3: + case kDirBottomLeft: sequenceId = 0x7BA; break; - case 7: + case kDirUpRight: sequenceId = 0x7BB; break; default: @@ -1179,29 +1180,29 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x812; - _gnapIdleFacing = 5; + _gnapIdleFacing = kDirUpLeft; } else { sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7FE; - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } } else { if (_gnapX > gridX) { sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7D6; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7EA; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } } else { switch (_gnapIdleFacing) { - case 1: + case kDirBottomRight: sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7EA; break; - case 3: + case kDirBottomLeft: sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7D6; break; - case 7: + case kDirUpRight: sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7FE; break; default: @@ -1216,32 +1217,32 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = 0x831; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7A8; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } else { if (_gnapX > gridX) { sequenceId = 0x831; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { if (_gnapX % 2) sequenceId = 0x7A8; else sequenceId = 0x89A; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } - } else if (_gnapIdleFacing != 1 && _gnapIdleFacing != 7) { + } else if (_gnapIdleFacing != kDirBottomRight && _gnapIdleFacing != kDirUpRight) { sequenceId = 0x831; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { if (_currentSceneNum % 2) sequenceId = 0x7A8; else sequenceId = 0x89A; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } break; @@ -1250,32 +1251,32 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = 0x830; - _gnapIdleFacing = 5; + _gnapIdleFacing = kDirUpLeft; } else { sequenceId = 0x82F; - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } } else { if (_gnapX > gridX) { sequenceId = 0x82E; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7A7; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } } else { switch (_gnapIdleFacing) { - case 1: + case kDirBottomRight: sequenceId = 0x7A7; break; - case 3: + case kDirBottomLeft: sequenceId = 0x82E; break; - case 5: + case kDirUpLeft: sequenceId = 0x830; break; - case 7: + case kDirUpRight: sequenceId = 0x82F; break; } @@ -1284,16 +1285,16 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case gskUseDevice: switch (_gnapIdleFacing) { - case 1: + case kDirBottomRight: sequenceId = 0x83A; break; - case 3: + case kDirBottomLeft: sequenceId = 0x83C; break; - case 5: + case kDirUpLeft: sequenceId = 0x840; break; - case 7: + case kDirUpRight: sequenceId = 0x83E; break; } @@ -1304,26 +1305,26 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = 0x832; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } else { if (_gnapX > gridX) { sequenceId = 0x832; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } - } else if (_gnapIdleFacing != 1 && _gnapIdleFacing != 7) { + } else if (_gnapIdleFacing != kDirBottomRight && _gnapIdleFacing != kDirUpRight) { sequenceId = 0x832; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } break; @@ -1332,26 +1333,26 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { if (_gnapY > gridY) { if (_gnapX > gridX) { sequenceId = 0x832; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } else { if (_gnapX > gridX) { sequenceId = 0x832; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } } - } else if (_gnapIdleFacing != 1 && _gnapIdleFacing != 7) { + } else if (_gnapIdleFacing != kDirBottomRight && _gnapIdleFacing != kDirUpRight) { sequenceId = 0x832; - _gnapIdleFacing = 3; + _gnapIdleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } break; } @@ -1361,120 +1362,120 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { int sequenceId; - int facing = _gnapIdleFacing; + Facing facing = _gnapIdleFacing; if (gridY > 0 && gridX > 0) { if (_gnapY > gridY) { if (_gnapX > gridX) - _gnapIdleFacing = 5; + _gnapIdleFacing = kDirUpLeft; else - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } else { if (_gnapX > gridX) - _gnapIdleFacing = 5; + _gnapIdleFacing = kDirUpLeft; else - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } - } else if (_gnapIdleFacing != 1 && _gnapIdleFacing != 7) { - _gnapIdleFacing = 5; + } else if (_gnapIdleFacing != kDirBottomRight && _gnapIdleFacing != kDirUpRight) { + _gnapIdleFacing = kDirUpLeft; } else { - _gnapIdleFacing = 7; + _gnapIdleFacing = kDirUpRight; } switch (index) { case 0: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x8A0; else sequenceId = 0x8A1; break; case 1: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x880; else sequenceId = 0x895; break; case 2: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x884; else sequenceId = 0x899; break; //Skip 3 case 4: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x881; else sequenceId = 0x896; break; case 5: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x883; else sequenceId = 0x898; break; case 6: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87E; else sequenceId = 0x893; break; case 7: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x848; else sequenceId = 0x890; break; case 8: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87D; else sequenceId = 0x892; break; case 9: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x882; else sequenceId = 0x897; break; case 10: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87C; else sequenceId = 0x891; break; case 11: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87C; else sequenceId = 0x891; break; case 12: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87D; else sequenceId = 0x892; break; case 13: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x888; else sequenceId = 0x89D; break; case 14: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87F; else sequenceId = 0x894; break; case 15: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87B; else sequenceId = 0x8A3; break; case 16: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x877; else sequenceId = 0x88C; @@ -1484,43 +1485,43 @@ int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { sequenceId = 0x887; break; case 19: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87A; else sequenceId = 0x88F; break; case 20: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x878; else sequenceId = 0x88D; break; case 21: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x879; else sequenceId = 0x88E; break; case 22: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x88A; else sequenceId = 0x89F; break; case 23: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x889; else sequenceId = 0x89E; break; case 24: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x886; else sequenceId = 0x89B; break; case 25: - if (_gnapIdleFacing == 7) + if (_gnapIdleFacing == kDirUpRight) sequenceId = 0x87A; else sequenceId = 0x88F; @@ -1629,7 +1630,7 @@ void GnapEngine::updateGnapIdleSequence() { if (_timers[3] == 0) { _timers[2] = 60; _timers[3] = 300; - if (_gnapIdleFacing == 1) { + if (_gnapIdleFacing == kDirBottomRight) { switch (getRandom(5)) { case 0: playGnapSequence(0x107A6); @@ -1644,7 +1645,7 @@ void GnapEngine::updateGnapIdleSequence() { playGnapSequence(0x108A2); break; } - } else if (_gnapIdleFacing == 3) { + } else if (_gnapIdleFacing == kDirBottomLeft) { if (getRandom(5) > 2) playGnapSequence(0x10832); else @@ -1653,13 +1654,13 @@ void GnapEngine::updateGnapIdleSequence() { } } else { _timers[2] = getRandom(30) + 20; - if (_gnapIdleFacing == 1) { + if (_gnapIdleFacing == kDirBottomRight) { _gameSys->insertSequence(0x107BD, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = 0x7BD; _gnapSequenceDatNum = 1; - } else if (_gnapIdleFacing == 3) { + } else if (_gnapIdleFacing == kDirBottomLeft) { _gameSys->insertSequence(0x107BE, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); @@ -1679,21 +1680,21 @@ void GnapEngine::updateGnapIdleSequence2() { if (_timers[3] == 0) { _timers[2] = 60; _timers[3] = 300; - if (_gnapIdleFacing == 1) { + if (_gnapIdleFacing == kDirBottomRight) { playGnapSequence(0x107AA); - } else if (_gnapIdleFacing == 3) { + } else if (_gnapIdleFacing == kDirBottomLeft) { playGnapSequence(0x10832); } } } else { _timers[2] = getRandom(30) + 20; - if (_gnapIdleFacing == 1) { + if (_gnapIdleFacing == kDirBottomRight) { _gameSys->insertSequence(0x107BD, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = 0x7BD; _gnapSequenceDatNum = 1; - } else if (_gnapIdleFacing == 3) { + } else if (_gnapIdleFacing == kDirBottomLeft) { _gameSys->insertSequence(0x107BE, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); @@ -1721,20 +1722,20 @@ bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gr return false; } -void GnapEngine::initGnapPos(int gridX, int gridY, int facing) { +void GnapEngine::initGnapPos(int gridX, int gridY, Facing facing) { _timers[2] = 30; _timers[3] = 300; _gnapX = gridX; _gnapY = gridY; - if (facing <= 0) - _gnapIdleFacing = 1; + if (facing == kDirNone) + _gnapIdleFacing = kDirBottomRight; else _gnapIdleFacing = facing; - if (_gnapIdleFacing == 3) { + if (_gnapIdleFacing == kDirBottomLeft) { _gnapSequenceId = 0x7B8; } else { _gnapSequenceId = 0x7B5; - _gnapIdleFacing = 1; + _gnapIdleFacing = kDirBottomRight; } _gnapId = 20 * _gnapY; _gnapSequenceDatNum = 1; -- cgit v1.2.3 From 2d63d769ebcb720507602b165eb042ff69e28c24 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 1 Apr 2016 07:52:25 +0200 Subject: GNAP: Refactoring - Use enum for beaver facing --- engines/gnap/gnap.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index c84583905f..dc677a1889 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1834,7 +1834,7 @@ void GnapEngine::gnapKissPlatypus(int callback) { kSeqSyncWait, getSequenceTotalDuration(0x10847), 75 * _platX - _platGridX, 48 * _platY - _platGridY); _beaverSequenceDatNum = 1; _beaverSequenceId = 0x7CB; - _beaverFacing = 0; + _beaverFacing = kDirNone; playGnapSequence(0x107B5); while (_gameSys->getAnimationStatus(0) != 2) { updateMouseCursor(); @@ -1864,7 +1864,7 @@ void GnapEngine::gnapUseJointOnPlatypus() { kSeqSyncWait, 0, 15 * (5 * _platX - 25), 48 * (_platY - 7)); _beaverSequenceDatNum = 1; _beaverSequenceId = 0x876; - _beaverFacing = 0; + _beaverFacing = kDirNone; playGnapSequence(0x107B5); gnapWalkStep(); while (_gameSys->getAnimationStatus(0) != 2) { @@ -1900,17 +1900,17 @@ int GnapEngine::getBeaverSequenceId(int kind, int gridX, int gridY) { if (gridX > 0 && gridY > 0) { if (gridX < _platX) { sequenceId = 0x7CC; - _beaverFacing = 4; + _beaverFacing = kDirUnk4; } else { sequenceId = 0x7CB; - _beaverFacing = 0; + _beaverFacing = kDirNone; } - } else if (_beaverFacing != 0) { + } else if (_beaverFacing != kDirNone) { sequenceId = 0x7CC; - _beaverFacing = 4; + _beaverFacing = kDirUnk4; } else { sequenceId = 0x7CB; - _beaverFacing = 0; + _beaverFacing = kDirNone; } return sequenceId | 0x10000; } @@ -1990,20 +1990,20 @@ void GnapEngine::beaverSub426234() { } } -void GnapEngine::initBeaverPos(int gridX, int gridY, int facing) { +void GnapEngine::initBeaverPos(int gridX, int gridY, Facing facing) { _timers[0] = 50; _timers[1] = 20; _platX = gridX; _platY = gridY; - if (facing <= 0) - _beaverFacing = 0; + if (facing == kDirNone) + _beaverFacing = kDirNone; else _beaverFacing = facing; - if (_beaverFacing == 4) { + if (_beaverFacing == kDirUnk4) { _beaverSequenceId = 0x7D1; } else { _beaverSequenceId = 0x7C1; - _beaverFacing = 0; + _beaverFacing = kDirNone; } _beaverId = 20 * _platY; _beaverSequenceDatNum = 1; -- cgit v1.2.3 From 16051780e01f584b1e5f06c541586dba9a3665fd Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 1 Apr 2016 07:55:10 +0200 Subject: GNAP: Some more enum changes --- engines/gnap/gnap.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index dc677a1889..2717a7b7fc 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1751,7 +1751,7 @@ void GnapEngine::gnapInitBrainPulseRndValue() { void GnapEngine::gnapUseDeviceOnBeaver() { playGnapSequence(makeRid(1, getGnapSequenceId(gskPullOutDevice, _platX, _platY))); - if (_beaverFacing != 0) { + if (_beaverFacing != kDirNone) { _gameSys->insertSequence(makeRid(1, 0x7D5), _beaverId, makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); @@ -1930,7 +1930,7 @@ void GnapEngine::updateBeaverIdleSequence() { if (_timers[1] == 0) { _timers[1] = getRandom(20) + 30; int rnd = getRandom(10); - if (_beaverFacing != 0) { + if (_beaverFacing != kDirNone) { if (rnd != 0 || _beaverSequenceId != 0x7CA) { if (rnd != 1 || _beaverSequenceId != 0x7CA) playBeaverSequence(0x107CA); @@ -1967,7 +1967,7 @@ void GnapEngine::beaverSub426234() { if (_timers[0]) { if (!_timers[1]) { _timers[1] = getRandom(20) + 30; - if (_beaverFacing != 0) { + if (_beaverFacing != kDirNone) { if (getRandom(10) >= 2 || _beaverSequenceId != 0x7CA) playBeaverSequence(0x107CA); else -- cgit v1.2.3 From cd29ffb1c6540cbe6db15337c635928bf3a09c34 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 1 Apr 2016 22:17:41 +0200 Subject: GNAP: Use constants for some more flag values --- engines/gnap/gnap.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 2717a7b7fc..95376fdf2b 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1569,10 +1569,9 @@ void GnapEngine::playGnapSequence(int sequenceId) { _timers[2] = getRandom(30) + 20; _timers[3] = 300; gnapIdle(); - // CHECKME: Check the value of the flag _gameSys->insertSequence(sequenceId, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - 9, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqScale | kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = ridToEntryIndex(sequenceId); _gnapSequenceDatNum = ridToDatIndex(sequenceId); } @@ -1916,10 +1915,9 @@ int GnapEngine::getBeaverSequenceId(int kind, int gridX, int gridY) { } void GnapEngine::playBeaverSequence(int sequenceId) { - // CHECKME: Check the value of the flag _gameSys->insertSequence(sequenceId, _beaverId, makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, - 9, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqScale | kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); _beaverSequenceId = ridToEntryIndex(sequenceId); _beaverSequenceDatNum = ridToDatIndex(sequenceId); } -- cgit v1.2.3 From 66f5610c74710a298ae6a4166b37f438d25882bd Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 3 Apr 2016 17:29:06 +0200 Subject: GNAP: Implement intro, currently disabled. Remove some Debug code. --- engines/gnap/gnap.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 95376fdf2b..ce9e680ee3 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -700,14 +700,16 @@ void GnapEngine::initGameFlags(int num) { } //DEBUG! +#if 0 // setFlag(0); // Enable platypus setFlag(25); invClear(); invAdd(kItemMagazine); +#endif #if 0 invAdd(kItemDisguise); #endif -#if 1 +#if 0 //invAdd(kItemGas); invAdd(kItemJoint); //invAdd(kItemKeys); @@ -741,14 +743,14 @@ void GnapEngine::mainLoop() { invClear(); clearFlags(); _grabCursorSpriteIndex = -1; - _grabCursorSprite = 0; + _grabCursorSprite = nullptr; debug("MainLoop #1"); // > DEBUG BEGIN - _currentSceneNum = 53; - _newSceneNum = 48; - _newCursorValue = 3; + _currentSceneNum = 0; + _newSceneNum = 1; + _newCursorValue = 1; // < DEBUG END loadStockDat(); @@ -890,7 +892,7 @@ void GnapEngine::checkGameKeys() { updatePause(); } // TODO? Debug input - debug("facing %d", _gnapIdleFacing); +// debug("facing %d", _gnapIdleFacing); } void GnapEngine::startSoundTimerA(int timerIndex) { @@ -2172,12 +2174,6 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ _gnapSequenceId = sequenceId3; } -// Scene 0 - -int GnapEngine::scene00_init() { - return 0x37C; -} - void GnapEngine::toyUfoSetStatus(int flagNum) { clearFlag(16); clearFlag(17); -- cgit v1.2.3 From 6a55da1504b54d4ac16dcccd3fd6c9811d6e3620 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 10 Apr 2016 11:44:38 +0200 Subject: GNAP: Replace flags values by enums (WIP) --- engines/gnap/gnap.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index ce9e680ee3..fad1e57841 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -455,7 +455,7 @@ void GnapEngine::updateMouseCursor() { _mouseClickState._right = false; _timers[3] = 300; _verbCursor = (_verbCursor + 1) % 4; - if (!isFlag(0) && _verbCursor == PLAT_CURSOR && _cursorValue == 1) + if (!isFlag(kGFPlatypus) && _verbCursor == PLAT_CURSOR && _cursorValue == 1) _verbCursor = (_verbCursor + 1) % 4; if (!_isWaiting) setCursor(kDisabledCursors[_verbCursor]); @@ -688,20 +688,20 @@ void GnapEngine::initGameFlags(int num) { invAdd(kItemHorn); invAdd(kItemLightbulb); clearFlags(); - setFlag(0); - setFlag(1); - setFlag(2); - setFlag(3); - setFlag(4); - setFlag(5); - setFlag(6); - setFlag(7); + setFlag(kGFPlatypus); + setFlag(kGFMudTaken); + setFlag(kGFNeedleTaken); + setFlag(kGFTwigTaken); + setFlag(kGFUnk04); + setFlag(kGFKeysTaken); + setFlag(kGFGrassTaken); + setFlag(kGFBarnPadlockOpen); break; } //DEBUG! #if 0 -// setFlag(0); // Enable platypus +// setFlag(kGFPlatypus); // Enable platypus setFlag(25); invClear(); invAdd(kItemMagazine); -- cgit v1.2.3 From 6dfa316b2454e34252225be399a08f56b78e274f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 10 Apr 2016 12:02:08 +0200 Subject: GNAP: Replace more flags values by enums (WIP) --- engines/gnap/gnap.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index fad1e57841..631f70c333 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -839,7 +839,7 @@ void GnapEngine::initScene() { _gameSys->drawBitmap(backgroundId); } - if ((_cursorValue == 4 && isFlag(12)) || _currentSceneNum == 41) + if ((_cursorValue == 4 && isFlag(kGFGnapControlsToyUFO)) || _currentSceneNum == 41) playSound(makeRid(1, 0x8F6), true); } @@ -1887,7 +1887,7 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { _newSceneNum = 47; _isLeavingScene = true; _sceneDone = true; - setFlag(10); + setFlag(kGFPlatyPussDisguised); } // CHECKME: The 3 parameters are always 0 @@ -2195,7 +2195,7 @@ int GnapEngine::toyUfoGetSequenceId() { } bool GnapEngine::toyUfoCheckTimer() { - if (!isFlag(12) || isFlag(18) || _timers[9] || + if (!isFlag(kGFGnapControlsToyUFO) || isFlag(18) || _timers[9] || _toyUfoSequenceId == 0x870 || _toyUfoSequenceId == 0x871 || _toyUfoSequenceId == 0x872 || _toyUfoSequenceId == 0x873) return false; _sceneDone = true; -- cgit v1.2.3 From 11c0fa8fed6d19bddc112a9d378f7895d4b7e21f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 10 Apr 2016 21:34:28 +0200 Subject: GNAP: Replace more flags values by enums (WIP) --- engines/gnap/gnap.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 631f70c333..e408cd821d 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2175,27 +2175,27 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ } void GnapEngine::toyUfoSetStatus(int flagNum) { - clearFlag(16); - clearFlag(17); - clearFlag(18); - clearFlag(19); + clearFlag(kGFUnk16); + clearFlag(kGFJointTaken); + clearFlag(kGFUnk18); + clearFlag(kGFGroceryStoreHatTaken); setFlag(flagNum); } int GnapEngine::toyUfoGetSequenceId() { - if (isFlag(16)) + if (isFlag(kGFUnk16)) return 0x84E; - if (isFlag(17)) + if (isFlag(kGFJointTaken)) return 0x84B; - if (isFlag(18)) + if (isFlag(kGFUnk18)) return 0x84D; - if (isFlag(19)) + if (isFlag(kGFGroceryStoreHatTaken)) return 0x84C; return 0x84E; } bool GnapEngine::toyUfoCheckTimer() { - if (!isFlag(kGFGnapControlsToyUFO) || isFlag(18) || _timers[9] || + if (!isFlag(kGFGnapControlsToyUFO) || isFlag(kGFUnk18) || _timers[9] || _toyUfoSequenceId == 0x870 || _toyUfoSequenceId == 0x871 || _toyUfoSequenceId == 0x872 || _toyUfoSequenceId == 0x873) return false; _sceneDone = true; @@ -2273,13 +2273,13 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, if (i - 1 > 0) { int seqId; - if (isFlag(16)) + if (isFlag(kGFUnk16)) seqId = 0x867; - else if (isFlag(17)) + else if (isFlag(kGFJointTaken)) seqId = 0x84F; - else if (isFlag(18)) + else if (isFlag(kGFUnk18)) seqId = 0x85F; - else if (isFlag(19)) + else if (isFlag(kGFGroceryStoreHatTaken)) seqId = 0x857; v16[0].sequenceId = seqId; v16[0].id = 0; -- cgit v1.2.3 From efa9466c815c6e1eaf913af0211a242d70c50e74 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 10 Apr 2016 21:50:31 +0200 Subject: GNAP: Replace more flags values by enums --- engines/gnap/gnap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index e408cd821d..08b8f95843 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -674,7 +674,7 @@ void GnapEngine::initGameFlags(int num) { invAdd(kItemMagazine); switch (num) { case 1: - setFlag(26); + setFlag(kGFPlatypusTalkingToAssistant); break; case 2: clearFlags(); @@ -702,7 +702,7 @@ void GnapEngine::initGameFlags(int num) { //DEBUG! #if 0 // setFlag(kGFPlatypus); // Enable platypus - setFlag(25); + setFlag(kGFUnk25); invClear(); invAdd(kItemMagazine); #endif -- cgit v1.2.3 From 558ab62fd7e526af549f82b92cc820f46faf2fcd Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 11 Apr 2016 23:37:24 +0200 Subject: GNAP: Enforce the use of a boolean when calling playSound() --- engines/gnap/gnap.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 08b8f95843..a755c9841f 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -911,7 +911,7 @@ int GnapEngine::playSoundA() { if (!_timers[_soundTimerIndexA]) { _timers[_soundTimerIndexA] = getRandom(50) + 100; soundId = kSoundIdsA[getRandom(11)]; - playSound(soundId | 0x10000, 0); + playSound(soundId | 0x10000, false); } return soundId; } @@ -935,7 +935,7 @@ int GnapEngine::playSoundB() { if (!_timers[_soundTimerIndexB]) { _timers[_soundTimerIndexB] = getRandom(50) + 150; soundId = kSoundIdsB[getRandom(19)]; - playSound(soundId | 0x10000, 0); + playSound(soundId | 0x10000, false); } return soundId; } @@ -957,7 +957,7 @@ int GnapEngine::playSoundC() { if (!_timers[_soundTimerIndexC]) { _timers[_soundTimerIndexC] = getRandom(50) + 150; soundId = kSoundIdsC[getRandom(7)] ; - playSound(soundId | 0x10000, 0); + playSound(soundId | 0x10000, false); } return soundId; } @@ -2134,16 +2134,16 @@ void GnapEngine::sceneXX_playRandomSound(int timerIndex) { _timers[timerIndex] = getRandom(40) + 50; switch (getRandom(4)) { case 0: - playSound(0x1091B, 0); + playSound(0x1091B, false); break; case 1: - playSound(0x10921, 0); + playSound(0x10921, false); break; case 2: - playSound(0x10927, 0); + playSound(0x10927, false); break; case 3: - playSound(0x1091D, 0); + playSound(0x1091D, false); break; } } @@ -2326,7 +2326,7 @@ void GnapEngine::cutscene_run() { } if (soundId != -1) - playSound(soundId, 0); + playSound(soundId, false); hideCursor(); -- cgit v1.2.3 From 03027be392de3dbf698361abf2395f3d7cc4e53e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 12 Apr 2016 06:57:12 +0200 Subject: GNAP: Fix hasFeature --- engines/gnap/gnap.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index a755c9841f..19dd353667 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -221,11 +221,6 @@ Common::Error GnapEngine::run() { return Common::kNoError; } -bool GnapEngine::hasFeature(EngineFeature f) const { - return - false; -} - void GnapEngine::updateEvents() { Common::Event event; -- cgit v1.2.3 From 52f0712b66fff3351ae6c2b5fd8e1abcdaad6001 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 12 Apr 2016 07:26:30 +0200 Subject: GNAP: Add debugger --- engines/gnap/gnap.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 19dd353667..793cc2f3e7 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -139,7 +139,8 @@ Common::Error GnapEngine::run() { _sequenceCache = new SequenceCache(_dat); _gameSys = new GameSys(this); _soundMan = new SoundMan(this); - + _debugger = new Debugger(this); + _menuBackgroundSurface = nullptr; initGlobalSceneVars(); @@ -213,6 +214,7 @@ Common::Error GnapEngine::run() { delete _soundCache; delete _spriteCache; delete _dat; + delete _debugger; delete _exe; @@ -227,6 +229,13 @@ void GnapEngine::updateEvents() { while (_eventMan->pollEvent(event)) { switch (event.type) { case Common::EVENT_KEYDOWN: + // Check for debugger + if (event.kbd.keycode == Common::KEYCODE_d && (event.kbd.flags & Common::KBD_CTRL)) { + // Attach to the debugger + _debugger->attach(); + _debugger->onFrame(); + } + _keyPressState[event.kbd.keycode] = 1; _keyDownState[event.kbd.keycode] = 1; break; @@ -387,13 +396,13 @@ void GnapEngine::updateCursorByHotspot() { if (!_isWaiting) { int hotspotIndex = getHotspotIndexAtPos(_mouseX, _mouseY); -#if 1 - // NOTE This causes some display glitches so don't worry - char t[256]; - sprintf(t, "hotspot = %d", hotspotIndex); - _gameSys->fillSurface(0, 10, 10, 80, 16, 0, 0, 0); - _gameSys->drawTextToSurface(0, 10, 10, 255, 255, 255, t); -#endif + if (_debugger->_showHotspotNumber) { + // NOTE This causes some display glitches so don't worry + char t[256]; + sprintf(t, "hotspot = %d", hotspotIndex); + _gameSys->fillSurface(0, 10, 10, 80, 16, 0, 0, 0); + _gameSys->drawTextToSurface(0, 10, 10, 255, 255, 255, t); + } if (hotspotIndex < 0) setCursor(kDisabledCursors[_verbCursor]); -- cgit v1.2.3 From 43c65df52620bc7f8cf013c460e77620d331836e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 12 Apr 2016 08:00:11 +0200 Subject: GNAP: Use debug channels --- engines/gnap/gnap.cpp | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 793cc2f3e7..6e81af9d15 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -95,6 +95,7 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : Engine(syst), _gameDescription(gd) { _random = new Common::RandomSource("gnap"); + DebugMan.addDebugChannel(kDebugBasic, "basic", "Basic debug level"); Engine::syncSoundSettings(); } @@ -218,8 +219,6 @@ Common::Error GnapEngine::run() { delete _exe; - debug("run() done"); - return Common::kNoError; } @@ -655,7 +654,7 @@ bool GnapEngine::isSoundPlaying(int resourceId) { } void GnapEngine::playSound(int resourceId, bool looping) { - debug(0, "playSound(%08X, %d)", resourceId, looping); + debugC(kDebugBasic, "playSound(%08X, %d)", resourceId, looping); _soundMan->playSound(resourceId, looping); } @@ -749,8 +748,6 @@ void GnapEngine::mainLoop() { _grabCursorSpriteIndex = -1; _grabCursorSprite = nullptr; - debug("MainLoop #1"); - // > DEBUG BEGIN _currentSceneNum = 0; _newSceneNum = 1; @@ -760,16 +757,15 @@ void GnapEngine::mainLoop() { loadStockDat(); while (!_gameDone) { - - debug("New scene: %d", _newSceneNum); - + debugC(kDebugBasic, "New scene: %d", _newSceneNum); + _prevSceneNum = _currentSceneNum; _currentSceneNum = _newSceneNum; - debug("GnapEngine::mainLoop() _prevSceneNum: %d; _currentSceneNum: %d", _prevSceneNum, _currentSceneNum); + debugC(kDebugBasic, "GnapEngine::mainLoop() _prevSceneNum: %d; _currentSceneNum: %d", _prevSceneNum, _currentSceneNum); if (_newCursorValue != _cursorValue) { - debug("_newCursorValue: %d", _newCursorValue); + debugC(kDebugBasic, "_newCursorValue: %d", _newCursorValue); _cursorValue = _newCursorValue; if (!_wasSavegameLoaded) initGameFlags(_cursorValue); @@ -803,8 +799,6 @@ void GnapEngine::mainLoop() { _dat->close(1); // TODO freeMenuSprite(); // TODO freeFont(); - - debug("MainLoop #XXX2"); } void GnapEngine::initScene() { @@ -824,7 +818,7 @@ void GnapEngine::initScene() { datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); - debug("GnapEngine::initScene() datFilename: %s", datFilename.c_str()); + debugC(kDebugBasic, "GnapEngine::initScene() datFilename: %s", datFilename.c_str()); _dat->open(0, datFilename.c_str()); @@ -896,7 +890,6 @@ void GnapEngine::checkGameKeys() { updatePause(); } // TODO? Debug input -// debug("facing %d", _gnapIdleFacing); } void GnapEngine::startSoundTimerA(int timerIndex) { @@ -2273,8 +2266,6 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, _toyUfoX = clippedDestX; _toyUfoY = clippedDestY; -// debug("v21: %d", v21); - if (i - 1 > 0) { int seqId; if (isFlag(kGFUnk16)) -- cgit v1.2.3 From 5c072b859e3e7ffaa45125f18cd1ff2c21aaf980 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Tue, 12 Apr 2016 13:41:50 +0200 Subject: GNAP: Fix warning --- engines/gnap/gnap.cpp | 112 ++++++++++++++++++++++++++------------------------ 1 file changed, 59 insertions(+), 53 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 6e81af9d15..2dfd0b1b72 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -93,10 +93,10 @@ static const char *kSceneNames[] = { GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : Engine(syst), _gameDescription(gd) { - + _random = new Common::RandomSource("gnap"); DebugMan.addDebugChannel(kDebugBasic, "basic", "Basic debug level"); - + Engine::syncSoundSettings(); } @@ -112,9 +112,9 @@ Common::Error GnapEngine::run() { // We do not support color conversion yet if (_system->getScreenFormat() != format) return Common::kUnsupportedColorMode; - + _lastUpdateClock = 0; - + // >>>>> Variable initialization _cursorIndex = -1; _verbCursor = 1; @@ -143,7 +143,7 @@ Common::Error GnapEngine::run() { _debugger = new Debugger(this); _menuBackgroundSurface = nullptr; - + initGlobalSceneVars(); #if 1 @@ -151,23 +151,23 @@ Common::Error GnapEngine::run() { mainLoop(); #else - + Graphics::Surface *testBack = new Graphics::Surface(); testBack->create(800, 600, _system->getScreenFormat()); //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); - + _currentSceneNum = 41; Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); _dat->open(0, datFilename.c_str()); - + _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); _gameSys->insertSequence(0x11b, 100, -1, -1, kSeqNone, 0, 0, 0); CursorMan.showMouse(true); - + while (!shouldQuit()) { Common::Event event; @@ -188,7 +188,7 @@ Common::Error GnapEngine::run() { break; } } - + _gameSys->fatUpdate(); _gameSys->drawSprites(); _gameSys->updateScreen(); @@ -201,7 +201,7 @@ Common::Error GnapEngine::run() { } _dat->close(0); - + testBack->free(); delete testBack; @@ -216,7 +216,7 @@ Common::Error GnapEngine::run() { delete _spriteCache; delete _dat; delete _debugger; - + delete _exe; return Common::kNoError; @@ -637,7 +637,7 @@ void GnapEngine::setDeviceHotspot(int hotspotIndex, int x1, int y1, int x2, int } int GnapEngine::getSequenceTotalDuration(int resourceId) { - SequenceResource *sequenceResource = _sequenceCache->get(resourceId); + SequenceResource *sequenceResource = _sequenceCache->get(resourceId); int maxValue = 0; for (int i = 0; i < sequenceResource->_animationsCount; ++i) { SequenceAnimation *animation = &sequenceResource->_animations[i]; @@ -737,7 +737,7 @@ void GnapEngine::loadStockDat() { } void GnapEngine::mainLoop() { - + _newCursorValue = 1; _cursorValue = -1; _newSceneNum = 0; @@ -757,11 +757,11 @@ void GnapEngine::mainLoop() { loadStockDat(); while (!_gameDone) { - debugC(kDebugBasic, "New scene: %d", _newSceneNum); + debugC(kDebugBasic, "New scene: %d", _newSceneNum); _prevSceneNum = _currentSceneNum; _currentSceneNum = _newSceneNum; - + debugC(kDebugBasic, "GnapEngine::mainLoop() _prevSceneNum: %d; _currentSceneNum: %d", _prevSceneNum, _currentSceneNum); if (_newCursorValue != _cursorValue) { @@ -775,10 +775,10 @@ void GnapEngine::mainLoop() { _wasSavegameLoaded = false; initScene(); - + runSceneLogic(); afterScene(); - + _soundMan->stopAll(); // Force purge all resources @@ -795,7 +795,7 @@ void GnapEngine::mainLoop() { if (_backgroundSurface) deleteSurface(&_backgroundSurface); - + _dat->close(1); // TODO freeMenuSprite(); // TODO freeFont(); @@ -803,7 +803,7 @@ void GnapEngine::mainLoop() { void GnapEngine::initScene() { Common::String datFilename; - + _isLeavingScene = false; _sceneDone = false; _newSceneNum = 55; @@ -851,7 +851,7 @@ void GnapEngine::endSceneInit() { void GnapEngine::afterScene() { if (_gameDone) return; - + if (_newCursorValue == _cursorValue && _newSceneNum != 0 && _newSceneNum != 16 && _newSceneNum != 47 && _newSceneNum != 48 && _newSceneNum != 54 && _newSceneNum != 49 && _newSceneNum != 50 && _newSceneNum != 51 && _newSceneNum != 52) @@ -904,7 +904,7 @@ int GnapEngine::playSoundA() { }; int soundId = -1; - + if (!_timers[_soundTimerIndexA]) { _timers[_soundTimerIndexA] = getRandom(50) + 100; soundId = kSoundIdsA[getRandom(11)]; @@ -928,7 +928,7 @@ int GnapEngine::playSoundB() { }; int soundId = -1; - + if (!_timers[_soundTimerIndexB]) { _timers[_soundTimerIndexB] = getRandom(50) + 150; soundId = kSoundIdsB[getRandom(19)]; @@ -1019,7 +1019,7 @@ void GnapEngine::deleteSurface(Graphics::Surface **surface) { int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { int sequenceId = 0; - + switch (kind) { case gskPullOutDevice: if (gridX > 0 && gridY > 0) { @@ -1278,6 +1278,9 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case kDirUpRight: sequenceId = 0x82F; break; + case kDirNone: + case kDirUnk4: + break; } } break; @@ -1296,6 +1299,9 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case kDirUpRight: sequenceId = 0x83E; break; + case kDirNone: + case kDirUnk4: + break; } break; @@ -1788,7 +1794,7 @@ void GnapEngine::doCallback(int callback) { bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, int callback) { bool result = false; - + if (_gnapActionStatus <= -1 && _beaverActionStatus <= -1) { _gnapActionStatus = 100; if (isPointBlocked(_platX + gridX, _platY + gridY) && (_platX + gridX != _gnapX || _platY + gridY != _gnapY)) @@ -2017,32 +2023,32 @@ void GnapEngine::initGlobalSceneVars() { _s01_pigsIdCtr = 0; _s01_smokeIdCtr = 0; _s01_spaceshipSurface = 0; - + // Scene 2 _s02_truckGrillCtr = 0; - + // Scene 3 _s03_nextPlatSequenceId = -1; _s03_platypusScared = false; _s03_platypusHypnotized = false; - + // Scene 4 _s04_dogIdCtr = 0; //_s04_triedWindow = true;//?? _s04_triedWindow = false; - + // Scene 5 _s05_nextChickenSequenceId = -1; - + // Scene 6 _s06_nextPlatSequenceId = -1; - + // Scene 11 _s11_billardBallCtr = 0; - + // Scene 13 _s13_backToiletCtr = -1; - + // Scene 17 _s17_platTryGetWrenchCtr = 0; _s17_wrenchCtr = 2; @@ -2052,14 +2058,14 @@ void GnapEngine::initGlobalSceneVars() { _s17_platPhoneCtr = 0; _s17_nextPhoneSequenceId = -1; _s17_currPhoneSequenceId = -1; - + // Scene 18 _s18_garbageCanPos = 8; _s18_platPhoneCtr = 0; _s18_platPhoneIter = 0; _s18_nextPhoneSequenceId = -1; _s18_currPhoneSequenceId = -1; - + // Scene 19 _s19_toyGrabCtr = 0; _s19_pictureSurface = 0; @@ -2069,11 +2075,11 @@ void GnapEngine::initGlobalSceneVars() { _s20_stonerGuyCtr = 3; _s20_stonerGuyShowingJoint = false; _s20_groceryStoreGuyCtr = 0; - + // Scene 22 _s22_caughtBefore = false; _s22_cashierCtr = 3; - + // Scene 31 _s31_beerGuyDistracted = false; _s31_clerkMeasureMaxCtr = 3; @@ -2086,13 +2092,13 @@ void GnapEngine::initGlobalSceneVars() { _s50_leftTongueNextIdCtr = 0; _s50_rightTongueEnergyBarPos = 10; _s50_rightTongueNextIdCtr = 0; - + // Scene 52 _s52_gameScore = 0; _s52_aliensInitialized = false; _s52_alienDirection = 0; _s52_soundToggle = false; - + // Scene 53 _s53_callsMadeCtr = 0; _s53_callsRndUsed = 0; @@ -2202,15 +2208,15 @@ bool GnapEngine::toyUfoCheckTimer() { void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, int maxY, int animationIndex) { GridStruct v16[34]; - + if (destX == -1) destX = _leftClickMouseX; - + if (destY == -1) destY = _leftClickMouseY; //CHECKME - + int clippedDestX = CLIP(destX, minX, maxX); int clippedDestY = CLIP(destY, minY, maxY); int dirX, dirY; // 0, -1 or 1 @@ -2219,12 +2225,12 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, dirX = 0; else dirX = (clippedDestX - _toyUfoX) / ABS(clippedDestX - _toyUfoX); - + if (clippedDestY == _toyUfoY) dirY = 0; else dirY = (clippedDestY - _toyUfoY) / ABS(clippedDestY - _toyUfoY); - + int deltaX = ABS(clippedDestX - _toyUfoX); int deltaY = ABS(clippedDestY - _toyUfoY); @@ -2262,10 +2268,10 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, } int v21 = i - 1; - + _toyUfoX = clippedDestX; _toyUfoY = clippedDestY; - + if (i - 1 > 0) { int seqId; if (isFlag(kGFUnk16)) @@ -2289,13 +2295,13 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, kSeqSyncWait, 0, v16[i].gridX1 - 365, v16[i].gridY1 - 128); } - + _toyUfoSequenceId = v16[v21 - 1].sequenceId; _toyUfoId = v16[v21 - 1].id; - + if (animationIndex >= 0) _gameSys->setAnimation(_toyUfoSequenceId | 0x10000, _toyUfoId, animationIndex); - + } } @@ -2307,7 +2313,7 @@ int GnapEngine::cutscene_init() { } void GnapEngine::cutscene_run() { - + int itemIndex = 0; int soundId = -1; int volume = 100; @@ -2330,13 +2336,13 @@ void GnapEngine::cutscene_run() { for (int j = 0; j < _s99_sequenceCountArr[0]; ++j) _gameSys->insertSequence(_s99_sequenceIdArr[j], j + 2, 0, 0, kSeqNone, 0, 0, 0); _gameSys->setAnimation(_s99_sequenceIdArr[0], 2, 0); - + clearKeyStatus1(Common::KEYCODE_ESCAPE); clearKeyStatus1(Common::KEYCODE_SPACE); clearKeyStatus1(29); _mouseClickState._left = false; - + int firstSequenceIndex = 0; while (!_sceneDone) { gameUpdateTick(); @@ -2375,7 +2381,7 @@ void GnapEngine::cutscene_run() { } if (soundId != -1) - stopSound(soundId); + stopSound(soundId); } } // End of namespace Gnap -- cgit v1.2.3 From 7762c494324075170ce3b84761bdaba31a390228 Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Tue, 12 Apr 2016 13:48:21 +0200 Subject: GNAP: Fix another warning and adding a catching condition --- engines/gnap/gnap.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 2dfd0b1b72..c42dc2b97f 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2273,7 +2273,7 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, _toyUfoY = clippedDestY; if (i - 1 > 0) { - int seqId; + int seqId = 0; if (isFlag(kGFUnk16)) seqId = 0x867; else if (isFlag(kGFJointTaken)) @@ -2282,6 +2282,8 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, seqId = 0x85F; else if (isFlag(kGFGroceryStoreHatTaken)) seqId = 0x857; + else + error("Unhandled flag in GnapEngine::toyUfoFlyTo(): 0x%x", _gameFlags); v16[0].sequenceId = seqId; v16[0].id = 0; _gameSys->insertSequence(seqId | 0x10000, 0, -- cgit v1.2.3 From bd72968ccbfbb5f91843068b508f0e3db7c47665 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 14 Apr 2016 07:18:47 +0200 Subject: GNAP: Rename members of GridStruct --- engines/gnap/gnap.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index c42dc2b97f..2188bda703 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2246,8 +2246,8 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, v15 = MAX(6, v15 - 3); } v14 += v15; - v16[i].gridX1 = _toyUfoX + dirX * deltaX * v14 / deltaY; - v16[i].gridY1 = _toyUfoY + dirY * v14; + v16[i]._gridX1 = _toyUfoX + dirX * deltaX * v14 / deltaY; + v16[i]._gridY1 = _toyUfoY + dirY * v14; ++i; } } else { @@ -2261,8 +2261,8 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, v17 = MAX(6, v17 - 3); } v14 += v17; - v16[i].gridX1 = _toyUfoX + dirX * v14; - v16[i].gridY1 = _toyUfoY + dirY * deltaY * v14 / deltaX; + v16[i]._gridX1 = _toyUfoX + dirX * v14; + v16[i]._gridY1 = _toyUfoY + dirY * deltaY * v14 / deltaX; ++i; } } @@ -2284,22 +2284,22 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, seqId = 0x857; else error("Unhandled flag in GnapEngine::toyUfoFlyTo(): 0x%x", _gameFlags); - v16[0].sequenceId = seqId; - v16[0].id = 0; + v16[0]._sequenceId = seqId; + v16[0]._id = 0; _gameSys->insertSequence(seqId | 0x10000, 0, _toyUfoSequenceId | 0x10000, _toyUfoId, - kSeqSyncWait, 0, v16[0].gridX1 - 365, v16[0].gridY1 - 128); + kSeqSyncWait, 0, v16[0]._gridX1 - 365, v16[0]._gridY1 - 128); for (i = 1; i < v21; ++i) { - v16[i].sequenceId = seqId + (i % 8); - v16[i].id = i; - _gameSys->insertSequence(v16[i].sequenceId | 0x10000, v16[i].id, - v16[i - 1].sequenceId | 0x10000, v16[i - 1].id, + v16[i]._sequenceId = seqId + (i % 8); + v16[i]._id = i; + _gameSys->insertSequence(v16[i]._sequenceId | 0x10000, v16[i]._id, + v16[i - 1]._sequenceId | 0x10000, v16[i - 1]._id, kSeqSyncWait, 0, - v16[i].gridX1 - 365, v16[i].gridY1 - 128); + v16[i]._gridX1 - 365, v16[i]._gridY1 - 128); } - _toyUfoSequenceId = v16[v21 - 1].sequenceId; - _toyUfoId = v16[v21 - 1].id; + _toyUfoSequenceId = v16[v21 - 1]._sequenceId; + _toyUfoId = v16[v21 - 1]._id; if (animationIndex >= 0) _gameSys->setAnimation(_toyUfoSequenceId | 0x10000, _toyUfoId, animationIndex); -- cgit v1.2.3 From e340538f5cce72619e8773e97797e4fb8d467980 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 14 Apr 2016 07:30:34 +0200 Subject: GNAP: Rename variables in toyUfoFlyTo --- engines/gnap/gnap.cpp | 80 ++++++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 43 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 2188bda703..bfb4978e94 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2207,7 +2207,7 @@ bool GnapEngine::toyUfoCheckTimer() { } void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, int maxY, int animationIndex) { - GridStruct v16[34]; + GridStruct flyNodes[34]; if (destX == -1) destX = _leftClickMouseX; @@ -2216,19 +2216,14 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, destY = _leftClickMouseY; //CHECKME - int clippedDestX = CLIP(destX, minX, maxX); int clippedDestY = CLIP(destY, minY, maxY); - int dirX, dirY; // 0, -1 or 1 + int dirX = 0, dirY = 0; // 0, -1 or 1 - if (clippedDestX == _toyUfoX) - dirX = 0; - else + if (clippedDestX != _toyUfoX) dirX = (clippedDestX - _toyUfoX) / ABS(clippedDestX - _toyUfoX); - if (clippedDestY == _toyUfoY) - dirY = 0; - else + if (clippedDestY != _toyUfoY) dirY = (clippedDestY - _toyUfoY) / ABS(clippedDestY - _toyUfoY); int deltaX = ABS(clippedDestX - _toyUfoX); @@ -2236,43 +2231,43 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, int i = 0; if (deltaY > deltaX) { - int v15 = 32; - int v22 = deltaY / v15; - int v14 = 0; - while (v14 < deltaY && i < 34) { - if (v22 - 5 >= i) { - v15 = MIN(36, 8 * i + 8); + int flyDirYIncr = 32; + int gridDistY = deltaY / flyDirYIncr; + int curMove = 0; + while (curMove < deltaY && i < 34) { + if (gridDistY - 5 >= i) { + flyDirYIncr = MIN(36, 8 * i + 8); } else { - v15 = MAX(6, v15 - 3); + flyDirYIncr = MAX(6, flyDirYIncr - 3); } - v14 += v15; - v16[i]._gridX1 = _toyUfoX + dirX * deltaX * v14 / deltaY; - v16[i]._gridY1 = _toyUfoY + dirY * v14; + curMove += flyDirYIncr; + flyNodes[i]._gridX1 = _toyUfoX + dirX * deltaX * curMove / deltaY; + flyNodes[i]._gridY1 = _toyUfoY + dirY * curMove; ++i; } } else { - int v17 = 36; - int v22 = deltaX / v17; - int v14 = 0; - while (v14 < deltaX && i < 34) { - if (v22 - 5 >= i) { - v17 = MIN(38, 8 * i + 8); + int flyDirXIncr = 36; + int gridDistX = deltaX / flyDirXIncr; + int curMove = 0; + while (curMove < deltaX && i < 34) { + if (gridDistX - 5 >= i) { + flyDirXIncr = MIN(38, 8 * i + 8); } else { - v17 = MAX(6, v17 - 3); + flyDirXIncr = MAX(6, flyDirXIncr - 3); } - v14 += v17; - v16[i]._gridX1 = _toyUfoX + dirX * v14; - v16[i]._gridY1 = _toyUfoY + dirY * deltaY * v14 / deltaX; + curMove += flyDirXIncr; + flyNodes[i]._gridX1 = _toyUfoX + dirX * curMove; + flyNodes[i]._gridY1 = _toyUfoY + dirY * deltaY * curMove / deltaX; ++i; } } - int v21 = i - 1; + int nodesCount = i - 1; _toyUfoX = clippedDestX; _toyUfoY = clippedDestY; - if (i - 1 > 0) { + if (nodesCount > 0) { int seqId = 0; if (isFlag(kGFUnk16)) seqId = 0x867; @@ -2284,28 +2279,27 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, seqId = 0x857; else error("Unhandled flag in GnapEngine::toyUfoFlyTo(): 0x%x", _gameFlags); - v16[0]._sequenceId = seqId; - v16[0]._id = 0; + flyNodes[0]._sequenceId = seqId; + flyNodes[0]._id = 0; _gameSys->insertSequence(seqId | 0x10000, 0, _toyUfoSequenceId | 0x10000, _toyUfoId, - kSeqSyncWait, 0, v16[0]._gridX1 - 365, v16[0]._gridY1 - 128); - for (i = 1; i < v21; ++i) { - v16[i]._sequenceId = seqId + (i % 8); - v16[i]._id = i; - _gameSys->insertSequence(v16[i]._sequenceId | 0x10000, v16[i]._id, - v16[i - 1]._sequenceId | 0x10000, v16[i - 1]._id, + kSeqSyncWait, 0, flyNodes[0]._gridX1 - 365, flyNodes[0]._gridY1 - 128); + for (i = 1; i < nodesCount; ++i) { + flyNodes[i]._sequenceId = seqId + (i % 8); + flyNodes[i]._id = i; + _gameSys->insertSequence(flyNodes[i]._sequenceId | 0x10000, flyNodes[i]._id, + flyNodes[i - 1]._sequenceId | 0x10000, flyNodes[i - 1]._id, kSeqSyncWait, 0, - v16[i]._gridX1 - 365, v16[i]._gridY1 - 128); + flyNodes[i]._gridX1 - 365, flyNodes[i]._gridY1 - 128); } - _toyUfoSequenceId = v16[v21 - 1]._sequenceId; - _toyUfoId = v16[v21 - 1]._id; + _toyUfoSequenceId = flyNodes[nodesCount - 1]._sequenceId; + _toyUfoId = flyNodes[nodesCount - 1]._id; if (animationIndex >= 0) _gameSys->setAnimation(_toyUfoSequenceId | 0x10000, _toyUfoId, animationIndex); } - } // Scene 99 -- cgit v1.2.3 From d6e4b67dca52c4cf7aae156ba5cb7523a60a0595 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 15 Apr 2016 07:27:13 +0200 Subject: GNAP: Add load from launcher --- engines/gnap/gnap.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index bfb4978e94..b9519110ac 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -118,8 +118,14 @@ Common::Error GnapEngine::run() { // >>>>> Variable initialization _cursorIndex = -1; _verbCursor = 1; + + _loadGameSlot = -1; + if (ConfMan.hasKey("save_slot")) + _loadGameSlot = ConfMan.getInt("save_slot"); + invClear(); clearFlags(); + _grabCursorSprite = nullptr; _newGrabCursorSpriteIndex = -1; _backgroundSurface = nullptr; @@ -737,7 +743,6 @@ void GnapEngine::loadStockDat() { } void GnapEngine::mainLoop() { - _newCursorValue = 1; _cursorValue = -1; _newSceneNum = 0; @@ -748,14 +753,25 @@ void GnapEngine::mainLoop() { _grabCursorSpriteIndex = -1; _grabCursorSprite = nullptr; +#if 0 // > DEBUG BEGIN _currentSceneNum = 0; _newSceneNum = 1; _newCursorValue = 1; // < DEBUG END +#endif loadStockDat(); + if (_loadGameSlot != -1) { + // Load a savegame + int slot = _loadGameSlot; + _loadGameSlot = -1; + loadGameState(slot); + + showCursor(); + } + while (!_gameDone) { debugC(kDebugBasic, "New scene: %d", _newSceneNum); -- cgit v1.2.3 From 08ba28db7ffa2db9dbd8bb660260e0e78e5a45fb Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 16 Apr 2016 00:51:49 +0200 Subject: GNAP: Cosmetic changes --- engines/gnap/gnap.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index b9519110ac..79cab3dc08 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -959,7 +959,6 @@ void GnapEngine::startSoundTimerC(int timerIndex) { } int GnapEngine::playSoundC() { - static const int kSoundIdsC[] = { 0x918, 0x91F, 0x920, 0x922, 0x923, 0x924, 0x926 -- cgit v1.2.3 From ff7f8aa26d69918c66f6431fb7863d7205e23d81 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 18 Apr 2016 07:49:27 +0200 Subject: GNAP: Refactor getBeaverSequenceId --- engines/gnap/gnap.cpp | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 79cab3dc08..8e4bc90661 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1908,29 +1908,17 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { setFlag(kGFPlatyPussDisguised); } -// CHECKME: The 3 parameters are always 0 -int GnapEngine::getBeaverSequenceId(int kind, int gridX, int gridY) { - int sequenceId; +int GnapEngine::getBeaverSequenceId() { + // The original had 3 parameters, all always set to 0. + // The code to handle the other values has been removed. - // TODO kind is always 0, remove that parameter - if (kind != 0) - return 0; + int sequenceId = 0x7CB; - if (gridX > 0 && gridY > 0) { - if (gridX < _platX) { - sequenceId = 0x7CC; - _beaverFacing = kDirUnk4; - } else { - sequenceId = 0x7CB; - _beaverFacing = kDirNone; - } - } else if (_beaverFacing != kDirNone) { + if (_beaverFacing != kDirNone) { sequenceId = 0x7CC; _beaverFacing = kDirUnk4; - } else { - sequenceId = 0x7CB; - _beaverFacing = kDirNone; } + return sequenceId | 0x10000; } -- cgit v1.2.3 From 90c7e1db014633a905993feaf6a8d0f152e11d2b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 18 Apr 2016 07:57:41 +0200 Subject: GNAP: Rename members of GnapEngine from beaver to platypus for consistency --- engines/gnap/gnap.cpp | 146 +++++++++++++++++++++++++------------------------- 1 file changed, 73 insertions(+), 73 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 8e4bc90661..15c949ab77 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -470,10 +470,10 @@ void GnapEngine::updateMouseCursor() { setCursor(kDisabledCursors[_verbCursor]); setGrabCursorSprite(-1); } - if (_isWaiting && ((_gnapActionStatus < 0 && _beaverActionStatus < 0) || _sceneWaiting)) { + if (_isWaiting && ((_gnapActionStatus < 0 && _platypusActionStatus < 0) || _sceneWaiting)) { setCursor(kDisabledCursors[_verbCursor]); _isWaiting = false; - } else if (!_isWaiting && (_gnapActionStatus >= 0 || _beaverActionStatus >= 0) && !_sceneWaiting) { + } else if (!_isWaiting && (_gnapActionStatus >= 0 || _platypusActionStatus >= 0) && !_sceneWaiting) { setCursor(WAIT_CURSOR); _isWaiting = true; } @@ -824,7 +824,7 @@ void GnapEngine::initScene() { _sceneDone = false; _newSceneNum = 55; _gnapActionStatus = -1; - _beaverActionStatus = -1; + _platypusActionStatus = -1; gnapInitBrainPulseRndValue(); hideCursor(); clearAllKeyStatus1(); @@ -1638,7 +1638,7 @@ void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int gridLookY) { if (_platX == gridX && _platY == gridY) - beaverMakeRoom(); + platypusMakeRoom(); gnapWalkTo(gridX, gridY, -1, -1, 1); playGnapShowItem(_grabCursorSpriteIndex, gridLookX, gridLookY); } @@ -1732,7 +1732,7 @@ bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gr _isLeavingScene = false; _gameSys->setAnimation(0, 0, animationIndex); _gnapActionStatus = -1; - _beaverActionStatus = -1; + _platypusActionStatus = -1; gnapWalkTo(gridX1, gridY1, -1, -1, 1); platypusWalkTo(gridX2, gridY2, -1, -1, 1); _mouseClickState._left = false; @@ -1767,21 +1767,21 @@ void GnapEngine::gnapInitBrainPulseRndValue() { _gnapBrainPulseRndValue = 2 * getRandom(10); } -void GnapEngine::gnapUseDeviceOnBeaver() { +void GnapEngine::gnapUseDeviceOnPlatypuss() { playGnapSequence(makeRid(1, getGnapSequenceId(gskPullOutDevice, _platX, _platY))); - if (_beaverFacing != kDirNone) { - _gameSys->insertSequence(makeRid(1, 0x7D5), _beaverId, - makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, + if (_platypusFacing != kDirNone) { + _gameSys->insertSequence(makeRid(1, 0x7D5), _platypusId, + makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); - _beaverSequenceId = 0x7D5; - _beaverSequenceDatNum = 1; + _platypusSequenceId = 0x7D5; + _platypusSequenceDatNum = 1; } else { - _gameSys->insertSequence(makeRid(1, 0x7D4), _beaverId, - makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, + _gameSys->insertSequence(makeRid(1, 0x7D4), _platypusId, + makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); - _beaverSequenceId = 0x7D4; - _beaverSequenceDatNum = 1; + _platypusSequenceId = 0x7D4; + _platypusSequenceDatNum = 1; } int newSequenceId = getGnapSequenceId(gskUseDevice, 0, 0); @@ -1810,7 +1810,7 @@ void GnapEngine::doCallback(int callback) { bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, int callback) { bool result = false; - if (_gnapActionStatus <= -1 && _beaverActionStatus <= -1) { + if (_gnapActionStatus <= -1 && _platypusActionStatus <= -1) { _gnapActionStatus = 100; if (isPointBlocked(_platX + gridX, _platY + gridY) && (_platX + gridX != _gnapX || _platY + gridY != _gnapY)) platypusWalkStep(); @@ -1823,8 +1823,8 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in } _gameSys->setAnimation(0, 0, 0); if (_platX + gridX == _gnapX && _platY + gridY == _gnapY) { - _gameSys->setAnimation(platSequenceId, _beaverId, 1); - playBeaverSequence(platSequenceId); + _gameSys->setAnimation(platSequenceId, _platypusId, 1); + playPlatypusSequence(platSequenceId); while (_gameSys->getAnimationStatus(1) != 2) { updateMouseCursor(); doCallback(callback); @@ -1848,12 +1848,12 @@ void GnapEngine::gnapKissPlatypus(int callback) { kSeqSyncWait, 0, 15 * (5 * _gnapX - 20) - (21 - _gridMinX), 48 * (_gnapY - 6) - (146 - _gridMinY)); _gnapSequenceDatNum = 1; _gnapSequenceId = 0x847; - _gameSys->insertSequence(0x107CB, _beaverId, - makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, + _gameSys->insertSequence(0x107CB, _platypusId, + makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, kSeqSyncWait, getSequenceTotalDuration(0x10847), 75 * _platX - _platGridX, 48 * _platY - _platGridY); - _beaverSequenceDatNum = 1; - _beaverSequenceId = 0x7CB; - _beaverFacing = kDirNone; + _platypusSequenceDatNum = 1; + _platypusSequenceId = 0x7CB; + _platypusFacing = kDirNone; playGnapSequence(0x107B5); while (_gameSys->getAnimationStatus(0) != 2) { updateMouseCursor(); @@ -1872,18 +1872,18 @@ void GnapEngine::gnapUseJointOnPlatypus() { if (gnapPlatypusAction(1, 0, 0x107C1, 0)) { _gnapActionStatus = 100; _gameSys->setAnimation(0, 0, 1); - _gameSys->setAnimation(0x10876, _beaverId, 0); + _gameSys->setAnimation(0x10876, _platypusId, 0); _gameSys->insertSequence(0x10875, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, kSeqSyncWait, 0, 15 * (5 * _gnapX - 30), 48 * (_gnapY - 7)); _gnapSequenceDatNum = 1; _gnapSequenceId = 0x875; - _gameSys->insertSequence(0x10876, _beaverId, - _beaverSequenceId | (_beaverSequenceDatNum << 16), _beaverId, + _gameSys->insertSequence(0x10876, _platypusId, + _platypusSequenceId | (_platypusSequenceDatNum << 16), _platypusId, kSeqSyncWait, 0, 15 * (5 * _platX - 25), 48 * (_platY - 7)); - _beaverSequenceDatNum = 1; - _beaverSequenceId = 0x876; - _beaverFacing = kDirNone; + _platypusSequenceDatNum = 1; + _platypusSequenceId = 0x876; + _platypusFacing = kDirNone; playGnapSequence(0x107B5); gnapWalkStep(); while (_gameSys->getAnimationStatus(0) != 2) { @@ -1908,59 +1908,59 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { setFlag(kGFPlatyPussDisguised); } -int GnapEngine::getBeaverSequenceId() { +int GnapEngine::getPlatypusSequenceId() { // The original had 3 parameters, all always set to 0. // The code to handle the other values has been removed. int sequenceId = 0x7CB; - if (_beaverFacing != kDirNone) { + if (_platypusFacing != kDirNone) { sequenceId = 0x7CC; - _beaverFacing = kDirUnk4; + _platypusFacing = kDirUnk4; } return sequenceId | 0x10000; } -void GnapEngine::playBeaverSequence(int sequenceId) { - _gameSys->insertSequence(sequenceId, _beaverId, - makeRid(_beaverSequenceDatNum, _beaverSequenceId), _beaverId, +void GnapEngine::playPlatypusSequence(int sequenceId) { + _gameSys->insertSequence(sequenceId, _platypusId, + makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, kSeqScale | kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); - _beaverSequenceId = ridToEntryIndex(sequenceId); - _beaverSequenceDatNum = ridToDatIndex(sequenceId); + _platypusSequenceId = ridToEntryIndex(sequenceId); + _platypusSequenceDatNum = ridToDatIndex(sequenceId); } -void GnapEngine::updateBeaverIdleSequence() { - if (_beaverActionStatus < 0 && _gnapActionStatus < 0) { +void GnapEngine::updatePlatypusIdleSequence() { + if (_platypusActionStatus < 0 && _gnapActionStatus < 0) { if (_timers[0] > 0) { if (_timers[1] == 0) { _timers[1] = getRandom(20) + 30; int rnd = getRandom(10); - if (_beaverFacing != kDirNone) { - if (rnd != 0 || _beaverSequenceId != 0x7CA) { - if (rnd != 1 || _beaverSequenceId != 0x7CA) - playBeaverSequence(0x107CA); + if (_platypusFacing != kDirNone) { + if (rnd != 0 || _platypusSequenceId != 0x7CA) { + if (rnd != 1 || _platypusSequenceId != 0x7CA) + playPlatypusSequence(0x107CA); else - playBeaverSequence(0x10845); + playPlatypusSequence(0x10845); } else { - playBeaverSequence(0x107CC); + playPlatypusSequence(0x107CC); } - } else if (rnd != 0 || _beaverSequenceId != 0x7C9) { - if (rnd != 1 || _beaverSequenceId != 0x7C9) { - if (rnd != 2 || _beaverSequenceId != 0x7C9) - playBeaverSequence(0x107C9); + } else if (rnd != 0 || _platypusSequenceId != 0x7C9) { + if (rnd != 1 || _platypusSequenceId != 0x7C9) { + if (rnd != 2 || _platypusSequenceId != 0x7C9) + playPlatypusSequence(0x107C9); else - playBeaverSequence(0x108A4); + playPlatypusSequence(0x108A4); } else { - playBeaverSequence(0x10844); + playPlatypusSequence(0x10844); } } else { - playBeaverSequence(0x107CB); + playPlatypusSequence(0x107CB); } } } else { _timers[0] = getRandom(75) + 75; - beaverMakeRoom(); + platypusMakeRoom(); } } else { _timers[0] = 100; @@ -1968,27 +1968,27 @@ void GnapEngine::updateBeaverIdleSequence() { } } -void GnapEngine::beaverSub426234() { - if (_beaverActionStatus < 0 && _gnapActionStatus < 0) { +void GnapEngine::platypusSub426234() { + if (_platypusActionStatus < 0 && _gnapActionStatus < 0) { if (_timers[0]) { if (!_timers[1]) { _timers[1] = getRandom(20) + 30; - if (_beaverFacing != kDirNone) { - if (getRandom(10) >= 2 || _beaverSequenceId != 0x7CA) - playBeaverSequence(0x107CA); + if (_platypusFacing != kDirNone) { + if (getRandom(10) >= 2 || _platypusSequenceId != 0x7CA) + playPlatypusSequence(0x107CA); else - playBeaverSequence(0x107CC); + playPlatypusSequence(0x107CC); } else { - if (getRandom(10) >= 2 || _beaverSequenceId != 0x7C9) { - playBeaverSequence(0x107C9); + if (getRandom(10) >= 2 || _platypusSequenceId != 0x7C9) { + playPlatypusSequence(0x107C9); } else { - playBeaverSequence(0x107CB); + playPlatypusSequence(0x107CB); } } } } else { _timers[0] = getRandom(75) + 75; - beaverMakeRoom(); + platypusMakeRoom(); } } else { _timers[0] = 100; @@ -1996,24 +1996,24 @@ void GnapEngine::beaverSub426234() { } } -void GnapEngine::initBeaverPos(int gridX, int gridY, Facing facing) { +void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { _timers[0] = 50; _timers[1] = 20; _platX = gridX; _platY = gridY; if (facing == kDirNone) - _beaverFacing = kDirNone; + _platypusFacing = kDirNone; else - _beaverFacing = facing; - if (_beaverFacing == kDirUnk4) { - _beaverSequenceId = 0x7D1; + _platypusFacing = facing; + if (_platypusFacing == kDirUnk4) { + _platypusSequenceId = 0x7D1; } else { - _beaverSequenceId = 0x7C1; - _beaverFacing = kDirNone; + _platypusSequenceId = 0x7C1; + _platypusFacing = kDirNone; } - _beaverId = 20 * _platY; - _beaverSequenceDatNum = 1; - _gameSys->insertSequence(makeRid(1, _beaverSequenceId), 20 * _platY, + _platypusId = 20 * _platY; + _platypusSequenceDatNum = 1; + _gameSys->insertSequence(makeRid(1, _platypusSequenceId), 20 * _platY, 0, 0, kSeqScale, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); } -- cgit v1.2.3 From 145b3751199219c4707e8f3462e2c63916b46460 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 19 Apr 2016 07:57:07 +0200 Subject: GNAP: Refactor Scene01 (WIP) --- engines/gnap/gnap.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 15c949ab77..dbe081c636 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -98,6 +98,7 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : DebugMan.addDebugChannel(kDebugBasic, "basic", "Basic debug level"); Engine::syncSoundSettings(); + _scene = nullptr; } GnapEngine::~GnapEngine() { @@ -2021,12 +2022,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - - // Scene 1 - _s01_pigsIdCtr = 0; - _s01_smokeIdCtr = 0; - _s01_spaceshipSurface = 0; - // Scene 2 _s02_truckGrillCtr = 0; -- cgit v1.2.3 From 65f8a72b16e19a7c14528e918549bdbbfa79dac3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 19 Apr 2016 21:10:45 +0200 Subject: GNAP: REfactor scene 2 --- engines/gnap/gnap.cpp | 3 --- 1 file changed, 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index dbe081c636..251ce55644 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2022,9 +2022,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - // Scene 2 - _s02_truckGrillCtr = 0; - // Scene 3 _s03_nextPlatSequenceId = -1; _s03_platypusScared = false; -- cgit v1.2.3 From 7a6c02ca0470023ae57a1775dbc347ff5f62be1b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 19 Apr 2016 22:10:40 +0200 Subject: GNAP: Refactor scene 3 --- engines/gnap/gnap.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 251ce55644..cb5c889a6e 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2022,11 +2022,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - // Scene 3 - _s03_nextPlatSequenceId = -1; - _s03_platypusScared = false; - _s03_platypusHypnotized = false; - // Scene 4 _s04_dogIdCtr = 0; //_s04_triedWindow = true;//?? -- cgit v1.2.3 From 58827530140a94c17053d02774884b23fd1dcab2 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 20 Apr 2016 01:34:08 +0200 Subject: GNAP: Refactor scene 4 --- engines/gnap/gnap.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index cb5c889a6e..f706dd3a3d 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2022,10 +2022,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - // Scene 4 - _s04_dogIdCtr = 0; - //_s04_triedWindow = true;//?? - _s04_triedWindow = false; // Scene 5 _s05_nextChickenSequenceId = -1; -- cgit v1.2.3 From ca21ed461514939da5a126482c164c089c23051e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 20 Apr 2016 07:21:55 +0200 Subject: GNAP: Refactor scene 5 --- engines/gnap/gnap.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index f706dd3a3d..b682d02798 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2022,10 +2022,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - - // Scene 5 - _s05_nextChickenSequenceId = -1; - // Scene 6 _s06_nextPlatSequenceId = -1; -- cgit v1.2.3 From aea51e0d40a0be2a724e7a6650382b7157b01952 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 20 Apr 2016 07:39:18 +0200 Subject: GNAP: Refactor scene 6 --- engines/gnap/gnap.cpp | 3 --- 1 file changed, 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index b682d02798..ddaa9f6a8e 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2022,9 +2022,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - // Scene 6 - _s06_nextPlatSequenceId = -1; - // Scene 11 _s11_billardBallCtr = 0; -- cgit v1.2.3 From 84bd15a525aa630d12551eac259abc3e3b6ad217 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 20 Apr 2016 22:59:17 +0200 Subject: GNAP: Refactor scene 8, Add updateAnimationsCb to Scene --- engines/gnap/gnap.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index ddaa9f6a8e..d0bbd8db5b 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1797,13 +1797,9 @@ void GnapEngine::gnapUseDeviceOnPlatypuss() { void GnapEngine::doCallback(int callback) { switch (callback) { case 8: - scene08_updateAnimationsCb(); - break; case 10: - scene10_updateAnimationsCb(); - break; case 20: - scene20_updateAnimationsCb(); + _scene->updateAnimationsCb(); break; } } -- cgit v1.2.3 From b535ef3abe397d4ce8457fb95e3a8ab89d94ae9e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 21 Apr 2016 07:11:15 +0200 Subject: GNAP: Refactor scene 11 --- engines/gnap/gnap.cpp | 3 --- 1 file changed, 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index d0bbd8db5b..daf8308321 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2018,9 +2018,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - // Scene 11 - _s11_billardBallCtr = 0; - // Scene 13 _s13_backToiletCtr = -1; -- cgit v1.2.3 From cc5bfede08504c433f56b2c91e25f409a47ee21a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 21 Apr 2016 07:52:06 +0200 Subject: GNAP: Refactor scene 13 --- engines/gnap/gnap.cpp | 3 --- 1 file changed, 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index daf8308321..7d097fdbdc 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2018,9 +2018,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - // Scene 13 - _s13_backToiletCtr = -1; - // Scene 17 _s17_platTryGetWrenchCtr = 0; _s17_wrenchCtr = 2; -- cgit v1.2.3 From 4f4c25534c3e7597c67ced3c5d790380b8a1d787 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 21 Apr 2016 20:23:46 +0200 Subject: GNAP: Use a nullptr instead of 0 in deleteSurface() --- engines/gnap/gnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 7d097fdbdc..77039c0dcb 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1029,7 +1029,7 @@ void GnapEngine::deleteSurface(Graphics::Surface **surface) { if (surface && *surface) { (*surface)->free(); delete *surface; - *surface = 0; + *surface = nullptr; } } -- cgit v1.2.3 From 861e5c10677d1493fc00542fec9ed1f0a030cb25 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 22 Apr 2016 00:26:09 +0200 Subject: GNAP: Refactor scenes 16, 47, 48, 54 (cutscenes) --- engines/gnap/gnap.cpp | 81 --------------------------------------------------- 1 file changed, 81 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 77039c0dcb..07978cb322 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2077,11 +2077,9 @@ void GnapEngine::initGlobalSceneVars() { _toyUfoActionStatus = -1; _toyUfoX = 0; _toyUfoY = 50; - } bool GnapEngine::sceneXX_sub_4466B1() { - if (isKeyStatus1(Common::KEYCODE_ESCAPE)) { clearKeyStatus1(Common::KEYCODE_ESCAPE); clearKeyStatus1(Common::KEYCODE_UP); @@ -2098,7 +2096,6 @@ bool GnapEngine::sceneXX_sub_4466B1() { } return false; - } void GnapEngine::sceneXX_playRandomSound(int timerIndex) { @@ -2271,82 +2268,4 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, } } -// Scene 99 - -int GnapEngine::cutscene_init() { - return -1; -} - -void GnapEngine::cutscene_run() { - - int itemIndex = 0; - int soundId = -1; - int volume = 100; - int duration = 0; - bool skip = false; - - if (_prevSceneNum == 2) { - soundId = 0x36B; - duration = MAX(1, 300 / getSequenceTotalDuration(_s99_sequenceIdArr[_s99_itemsCount - 1]));//CHECKME - _timers[0] = 0; - } - - if (soundId != -1) - playSound(soundId, false); - - hideCursor(); - - _gameSys->drawSpriteToBackground(0, 0, _s99_resourceIdArr[0]); - - for (int j = 0; j < _s99_sequenceCountArr[0]; ++j) - _gameSys->insertSequence(_s99_sequenceIdArr[j], j + 2, 0, 0, kSeqNone, 0, 0, 0); - _gameSys->setAnimation(_s99_sequenceIdArr[0], 2, 0); - - clearKeyStatus1(Common::KEYCODE_ESCAPE); - clearKeyStatus1(Common::KEYCODE_SPACE); - clearKeyStatus1(29); - - _mouseClickState._left = false; - - int firstSequenceIndex = 0; - while (!_sceneDone) { - gameUpdateTick(); - - if (_gameSys->getAnimationStatus(0) == 2 || skip) { - skip = false; - _gameSys->requestClear2(false); - _gameSys->requestClear1(); - _gameSys->setAnimation(0, 0, 0); - firstSequenceIndex += _s99_sequenceCountArr[itemIndex++]; - if (itemIndex >= _s99_itemsCount) { - _sceneDone = true; - } else { - for (int m = 0; m < _s99_sequenceCountArr[itemIndex]; ++m) - _gameSys->insertSequence(_s99_sequenceIdArr[firstSequenceIndex + m], m + 2, 0, 0, kSeqNone, 0, 0, 0); - _gameSys->drawSpriteToBackground(0, 0, _s99_resourceIdArr[itemIndex]); - _gameSys->setAnimation(_s99_sequenceIdArr[firstSequenceIndex], 2, 0); - } - } - - if (isKeyStatus1(Common::KEYCODE_ESCAPE) || isKeyStatus1(Common::KEYCODE_SPACE) || isKeyStatus1(29)) { - clearKeyStatus1(Common::KEYCODE_ESCAPE); - clearKeyStatus1(Common::KEYCODE_SPACE); - clearKeyStatus1(29); - if (_s99_canSkip[itemIndex]) - skip = true; - else - _sceneDone = true; - } - - if (!_timers[0] && itemIndex == _s99_itemsCount - 1) { - _timers[0] = 2; - volume = MAX(1, volume - duration); - setSoundVolume(soundId, volume); - } - } - - if (soundId != -1) - stopSound(soundId); -} - } // End of namespace Gnap -- cgit v1.2.3 From 453194b48b5692e7fb8719092d9998e371cbd0e8 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 22 Apr 2016 07:23:47 +0200 Subject: GNAP: Refactor scene 17 --- engines/gnap/gnap.cpp | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 07978cb322..e002bb5ec4 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2018,16 +2018,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - // Scene 17 - _s17_platTryGetWrenchCtr = 0; - _s17_wrenchCtr = 2; - _s17_nextCarWindowSequenceId = -1; - _s17_nextWrenchSequenceId = -1; - _s17_canTryGetWrench = true; - _s17_platPhoneCtr = 0; - _s17_nextPhoneSequenceId = -1; - _s17_currPhoneSequenceId = -1; - // Scene 18 _s18_garbageCanPos = 8; _s18_platPhoneCtr = 0; -- cgit v1.2.3 From c8f4fce89551cc1332f65ebce2cc02e75d74c332 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 23 Apr 2016 00:43:48 +0200 Subject: GNAP: Refactor scene 18 --- engines/gnap/gnap.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index e002bb5ec4..82035ebef8 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2020,10 +2020,6 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { void GnapEngine::initGlobalSceneVars() { // Scene 18 _s18_garbageCanPos = 8; - _s18_platPhoneCtr = 0; - _s18_platPhoneIter = 0; - _s18_nextPhoneSequenceId = -1; - _s18_currPhoneSequenceId = -1; // Scene 19 _s19_toyGrabCtr = 0; -- cgit v1.2.3 From 4c7756e75dcd3f7f9ad24e52e849e60936c8381d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 23 Apr 2016 10:23:49 +0200 Subject: GNAP: Refactor scenes 19 and 20 --- engines/gnap/gnap.cpp | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 82035ebef8..286bb7316d 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2021,16 +2021,6 @@ void GnapEngine::initGlobalSceneVars() { // Scene 18 _s18_garbageCanPos = 8; - // Scene 19 - _s19_toyGrabCtr = 0; - _s19_pictureSurface = 0; - _s19_shopAssistantCtr = 0; - - // Scene 20 - _s20_stonerGuyCtr = 3; - _s20_stonerGuyShowingJoint = false; - _s20_groceryStoreGuyCtr = 0; - // Scene 22 _s22_caughtBefore = false; _s22_cashierCtr = 3; -- cgit v1.2.3 From d1e7c9f594c6ad3ac31a3649e39db85e1be72d79 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 23 Apr 2016 11:34:39 +0200 Subject: GNAP: Refactor scenes 22 & 23 --- engines/gnap/gnap.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 286bb7316d..68704fdb8a 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2018,13 +2018,9 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { - // Scene 18 + // Shared by scenes 17 && 18 _s18_garbageCanPos = 8; - // Scene 22 - _s22_caughtBefore = false; - _s22_cashierCtr = 3; - // Scene 31 _s31_beerGuyDistracted = false; _s31_clerkMeasureMaxCtr = 3; -- cgit v1.2.3 From a8c1fb5727ff83f64da383e891d3d09f595f8635 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 24 Apr 2016 09:54:44 +0200 Subject: GNAP: Refactor scene 31 --- engines/gnap/gnap.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 68704fdb8a..2ef75164ba 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2021,10 +2021,6 @@ void GnapEngine::initGlobalSceneVars() { // Shared by scenes 17 && 18 _s18_garbageCanPos = 8; - // Scene 31 - _s31_beerGuyDistracted = false; - _s31_clerkMeasureMaxCtr = 3; - // Scene 50 _s50_timesPlayed = 0; _s50_timesPlayedModifier = 0; -- cgit v1.2.3 From aca5984e2b2f08890f828bbe9c331841c9b33674 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 24 Apr 2016 21:40:42 +0200 Subject: GNAP: Refactor scene 50 --- engines/gnap/gnap.cpp | 9 --------- 1 file changed, 9 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 2ef75164ba..5d4e8106ab 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2021,15 +2021,6 @@ void GnapEngine::initGlobalSceneVars() { // Shared by scenes 17 && 18 _s18_garbageCanPos = 8; - // Scene 50 - _s50_timesPlayed = 0; - _s50_timesPlayedModifier = 0; - _s50_attackCounter = 0; - _s50_leftTongueEnergyBarPos = 10; - _s50_leftTongueNextIdCtr = 0; - _s50_rightTongueEnergyBarPos = 10; - _s50_rightTongueNextIdCtr = 0; - // Scene 52 _s52_gameScore = 0; _s52_aliensInitialized = false; -- cgit v1.2.3 From 7a66d4b3568ebcfae549f13e87549f2771f36732 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 24 Apr 2016 22:38:30 +0200 Subject: GNAP: Refactor scenes 51&52 --- engines/gnap/gnap.cpp | 6 ------ 1 file changed, 6 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 5d4e8106ab..f6bff6025c 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2021,12 +2021,6 @@ void GnapEngine::initGlobalSceneVars() { // Shared by scenes 17 && 18 _s18_garbageCanPos = 8; - // Scene 52 - _s52_gameScore = 0; - _s52_aliensInitialized = false; - _s52_alienDirection = 0; - _s52_soundToggle = false; - // Scene 53 _s53_callsMadeCtr = 0; _s53_callsRndUsed = 0; -- cgit v1.2.3 From ba0c3f2cc316d932065437b6e749f1d5edc426e4 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 24 Apr 2016 22:59:45 +0200 Subject: GNAP: Refactor scene 53 --- engines/gnap/gnap.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index f6bff6025c..376c2790b7 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2021,10 +2021,6 @@ void GnapEngine::initGlobalSceneVars() { // Shared by scenes 17 && 18 _s18_garbageCanPos = 8; - // Scene 53 - _s53_callsMadeCtr = 0; - _s53_callsRndUsed = 0; - // Toy UFO _toyUfoId = 0; _toyUfoActionStatus = -1; -- cgit v1.2.3 From 28d8a8be7cba9f1695650c4c5de93eee458ebe7d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 24 Apr 2016 23:17:15 +0200 Subject: GNAP: Rename and move two fonctions to Scene --- engines/gnap/gnap.cpp | 39 --------------------------------------- 1 file changed, 39 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 376c2790b7..371e7ef45f 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -2028,45 +2028,6 @@ void GnapEngine::initGlobalSceneVars() { _toyUfoY = 50; } -bool GnapEngine::sceneXX_sub_4466B1() { - if (isKeyStatus1(Common::KEYCODE_ESCAPE)) { - clearKeyStatus1(Common::KEYCODE_ESCAPE); - clearKeyStatus1(Common::KEYCODE_UP); - clearKeyStatus1(Common::KEYCODE_RIGHT); - clearKeyStatus1(Common::KEYCODE_LEFT); - clearKeyStatus1(Common::KEYCODE_p); - return true; - } - - if (isKeyStatus1(Common::KEYCODE_p)) { - clearKeyStatus1(Common::KEYCODE_p); - pauseGame(); - updatePause(); - } - - return false; -} - -void GnapEngine::sceneXX_playRandomSound(int timerIndex) { - if (!_timers[timerIndex]) { - _timers[timerIndex] = getRandom(40) + 50; - switch (getRandom(4)) { - case 0: - playSound(0x1091B, false); - break; - case 1: - playSound(0x10921, false); - break; - case 2: - playSound(0x10927, false); - break; - case 3: - playSound(0x1091D, false); - break; - } - } -} - void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequenceId2, int sequenceId3) { setGrabCursorSprite(-1); _gameSys->setAnimation(sequenceId2, _gnapId, 0); -- cgit v1.2.3 From 441565db4d1e4a7934dd2cb580d0df35766222cc Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 24 Apr 2016 23:39:39 +0200 Subject: GNAP: Reduce code duplication in SceneCore --- engines/gnap/gnap.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 371e7ef45f..389124bdcd 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -936,7 +936,6 @@ void GnapEngine::startSoundTimerB(int timerIndex) { } int GnapEngine::playSoundB() { - static const int kSoundIdsB[] = { 0x93D, 0x929, 0x92A, 0x92B, 0x92C, 0x92D, 0x92E, 0x92F, 0x930, 0x931, 0x932, 0x933, @@ -1791,7 +1790,6 @@ void GnapEngine::gnapUseDeviceOnPlatypuss() { kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); _gnapSequenceId = newSequenceId; _gnapSequenceDatNum = 1; - } void GnapEngine::doCallback(int callback) { -- cgit v1.2.3 From 0a7f2fe938c4502ffa921d66c74e5380f8e2e2d5 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 25 Apr 2016 07:10:34 +0200 Subject: GNAP: Remove debug code --- engines/gnap/gnap.cpp | 24 ------------------------ 1 file changed, 24 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 389124bdcd..bcf2db1f56 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -708,30 +708,6 @@ void GnapEngine::initGameFlags(int num) { setFlag(kGFBarnPadlockOpen); break; } - - //DEBUG! -#if 0 -// setFlag(kGFPlatypus); // Enable platypus - setFlag(kGFUnk25); - invClear(); - invAdd(kItemMagazine); -#endif -#if 0 - invAdd(kItemDisguise); -#endif -#if 0 - //invAdd(kItemGas); - invAdd(kItemJoint); - //invAdd(kItemKeys); - invAdd(kItemWrench); - //invAdd(kItemTongs); - invAdd(kItemDiceQuarterHole); - //invAdd(kItemPill); - //invAdd(kItemBucketWithBeer); - invAdd(kItemChickenBucket); - invAdd(kItemBanana); - invAdd(kItemHorn); -#endif } void GnapEngine::loadStockDat() { -- cgit v1.2.3 From 12fa081a192c254e4a1d32a0edef2dffee61c154 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 27 Apr 2016 07:35:19 +0200 Subject: GNAP: Remove debug code --- engines/gnap/gnap.cpp | 71 --------------------------------------------------- 1 file changed, 71 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index bcf2db1f56..e4cc379604 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -152,70 +152,8 @@ Common::Error GnapEngine::run() { _menuBackgroundSurface = nullptr; initGlobalSceneVars(); - -#if 1 - mainLoop(); -#else - - Graphics::Surface *testBack = new Graphics::Surface(); - testBack->create(800, 600, _system->getScreenFormat()); - //testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFFFFFFFF); - testBack->fillRect(Common::Rect(0, 0, 800, 600), 0xFF000000); - - _currentSceneNum = 41; - - Common::String datFilename = Common::String::format("%s_n.dat", kSceneNames[_currentSceneNum]); - _dat->open(0, datFilename.c_str()); - - _gameSys->setBackgroundSurface(testBack, 0, 500, 1, 1000); - - _gameSys->insertSequence(0x11b, 100, -1, -1, kSeqNone, 0, 0, 0); - - CursorMan.showMouse(true); - - while (!shouldQuit()) { - Common::Event event; - - while (_eventMan->pollEvent(event)) { - switch (event.type) { - case Common::EVENT_KEYDOWN: - break; - case Common::EVENT_LBUTTONUP: - case Common::EVENT_LBUTTONDOWN: - case Common::EVENT_RBUTTONUP: - case Common::EVENT_RBUTTONDOWN: - case Common::EVENT_MOUSEMOVE: - break; - case Common::EVENT_QUIT: - quitGame(); - break; - default: - break; - } - } - - _gameSys->fatUpdate(); - _gameSys->drawSprites(); - _gameSys->updateScreen(); - _gameSys->_gameSysClock++; - updateTimers(); - - _system->updateScreen(); - _system->delayMillis(100); - - } - - _dat->close(0); - - testBack->free(); - delete testBack; - - return Common::kNoError; - -#endif - delete _soundMan; delete _gameSys; delete _sequenceCache; @@ -223,7 +161,6 @@ Common::Error GnapEngine::run() { delete _spriteCache; delete _dat; delete _debugger; - delete _exe; return Common::kNoError; @@ -730,14 +667,6 @@ void GnapEngine::mainLoop() { _grabCursorSpriteIndex = -1; _grabCursorSprite = nullptr; -#if 0 - // > DEBUG BEGIN - _currentSceneNum = 0; - _newSceneNum = 1; - _newCursorValue = 1; - // < DEBUG END -#endif - loadStockDat(); if (_loadGameSlot != -1) { -- cgit v1.2.3 From 02c8aeae2074c326b618adcc7224a9c5f7e6d86a Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 27 Apr 2016 22:09:08 +0200 Subject: GNAP: renaming and grouping of scenes in group 1 --- engines/gnap/gnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index e4cc379604..c17790f707 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1922,7 +1922,7 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { void GnapEngine::initGlobalSceneVars() { // Shared by scenes 17 && 18 - _s18_garbageCanPos = 8; + _s18GarbageCanPos = 8; // Toy UFO _toyUfoId = 0; -- cgit v1.2.3 From aee38421631479b6025585649172491f3251ce5e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 3 May 2016 07:47:15 +0200 Subject: GNAP: Some renaming --- engines/gnap/gnap.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index c17790f707..e5169e4927 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1672,7 +1672,7 @@ void GnapEngine::gnapInitBrainPulseRndValue() { _gnapBrainPulseRndValue = 2 * getRandom(10); } -void GnapEngine::gnapUseDeviceOnPlatypuss() { +void GnapEngine::gnapUseDeviceOnPlatypus() { playGnapSequence(makeRid(1, getGnapSequenceId(gskPullOutDevice, _platX, _platY))); if (_platypusFacing != kDirNone) { @@ -1805,7 +1805,7 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { _newSceneNum = 47; _isLeavingScene = true; _sceneDone = true; - setFlag(kGFPlatyPussDisguised); + setFlag(kGFPlatypusDisguised); } int GnapEngine::getPlatypusSequenceId() { @@ -1868,7 +1868,7 @@ void GnapEngine::updatePlatypusIdleSequence() { } } -void GnapEngine::platypusSub426234() { +void GnapEngine::updatePlatypusIdleSequence2() { if (_platypusActionStatus < 0 && _gnapActionStatus < 0) { if (_timers[0]) { if (!_timers[1]) { -- cgit v1.2.3 From 2e50019c05dbff0bbb559b72a201630605505c87 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 4 May 2016 07:13:48 +0200 Subject: GNAP: Introduce Character class - WIP --- engines/gnap/gnap.cpp | 303 +++++++++++++++++++++++++------------------------- 1 file changed, 152 insertions(+), 151 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index e5169e4927..ff9c79e9cd 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -148,12 +148,14 @@ Common::Error GnapEngine::run() { _gameSys = new GameSys(this); _soundMan = new SoundMan(this); _debugger = new Debugger(this); + _gnap = new PlayerGnap(this); _menuBackgroundSurface = nullptr; initGlobalSceneVars(); mainLoop(); + delete _gnap; delete _soundMan; delete _gameSys; delete _sequenceCache; @@ -943,25 +945,25 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { switch (kind) { case gskPullOutDevice: if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x83F; - _gnapIdleFacing = kDirUpLeft; + _gnap->_idleFacing = kDirUpLeft; } else { sequenceId = 0x83D; - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x83B; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x839; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } } else { - switch (_gnapIdleFacing) { + switch (_gnap->_idleFacing) { case kDirBottomRight: sequenceId = 0x839; break; @@ -980,25 +982,25 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case gskPullOutDeviceNonWorking: if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x829; - _gnapIdleFacing = kDirUpLeft; + _gnap->_idleFacing = kDirUpLeft; } else { sequenceId = 0x828; - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x827; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x826; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } } else { - switch (_gnapIdleFacing) { + switch (_gnap->_idleFacing) { case kDirBottomRight: sequenceId = 0x826; break; @@ -1017,40 +1019,40 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case gskScratchingHead: if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x834; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x885; - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x834; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x833; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } } else { - switch (_gnapIdleFacing) { + switch (_gnap->_idleFacing) { case kDirBottomRight: sequenceId = 0x833; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; break; case kDirBottomLeft: sequenceId = 0x834; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; break; case kDirUpRight: sequenceId = 0x885; - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; break; default: sequenceId = 0x834; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; break; } } @@ -1058,25 +1060,25 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case gskIdle: if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x7BC; - _gnapIdleFacing = kDirUpLeft; + _gnap->_idleFacing = kDirUpLeft; } else { sequenceId = 0x7BB; - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x7BA; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7B9; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } } else { - switch (_gnapIdleFacing) { + switch (_gnap->_idleFacing) { case kDirBottomRight: sequenceId = 0x7B9; break; @@ -1096,25 +1098,25 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case gskBrainPulsating: _gnapBrainPulseNum = (_gnapBrainPulseNum + 1) & 1; if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x812; - _gnapIdleFacing = kDirUpLeft; + _gnap->_idleFacing = kDirUpLeft; } else { sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7FE; - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7D6; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7EA; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } } else { - switch (_gnapIdleFacing) { + switch (_gnap->_idleFacing) { case kDirBottomRight: sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7EA; break; @@ -1133,59 +1135,59 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case gskImpossible: if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x831; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7A8; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x831; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { - if (_gnapX % 2) + if (_gnap->_pos.x % 2) sequenceId = 0x7A8; else sequenceId = 0x89A; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } - } else if (_gnapIdleFacing != kDirBottomRight && _gnapIdleFacing != kDirUpRight) { + } else if (_gnap->_idleFacing != kDirBottomRight && _gnap->_idleFacing != kDirUpRight) { sequenceId = 0x831; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { if (_currentSceneNum % 2) sequenceId = 0x7A8; else sequenceId = 0x89A; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } break; case gskDeflect: if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x830; - _gnapIdleFacing = kDirUpLeft; + _gnap->_idleFacing = kDirUpLeft; } else { sequenceId = 0x82F; - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x82E; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7A7; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } } else { - switch (_gnapIdleFacing) { + switch (_gnap->_idleFacing) { case kDirBottomRight: sequenceId = 0x7A7; break; @@ -1206,7 +1208,7 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { break; case gskUseDevice: - switch (_gnapIdleFacing) { + switch (_gnap->_idleFacing) { case kDirBottomRight: sequenceId = 0x83A; break; @@ -1227,57 +1229,57 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { case gskMoan1: if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x832; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x832; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } - } else if (_gnapIdleFacing != kDirBottomRight && _gnapIdleFacing != kDirUpRight) { + } else if (_gnap->_idleFacing != kDirBottomRight && _gnap->_idleFacing != kDirUpRight) { sequenceId = 0x832; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } break; case gskMoan2: if (gridX > 0 && gridY > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) { + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x832; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } else { - if (_gnapX > gridX) { + if (_gnap->_pos.x > gridX) { sequenceId = 0x832; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } } - } else if (_gnapIdleFacing != kDirBottomRight && _gnapIdleFacing != kDirUpRight) { + } else if (_gnap->_idleFacing != kDirBottomRight && _gnap->_idleFacing != kDirUpRight) { sequenceId = 0x832; - _gnapIdleFacing = kDirBottomLeft; + _gnap->_idleFacing = kDirBottomLeft; } else { sequenceId = 0x7AA; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } break; } @@ -1287,120 +1289,120 @@ int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { int sequenceId; - Facing facing = _gnapIdleFacing; + Facing facing = _gnap->_idleFacing; if (gridY > 0 && gridX > 0) { - if (_gnapY > gridY) { - if (_gnapX > gridX) - _gnapIdleFacing = kDirUpLeft; + if (_gnap->_pos.y > gridY) { + if (_gnap->_pos.x > gridX) + _gnap->_idleFacing = kDirUpLeft; else - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } else { - if (_gnapX > gridX) - _gnapIdleFacing = kDirUpLeft; + if (_gnap->_pos.x > gridX) + _gnap->_idleFacing = kDirUpLeft; else - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } - } else if (_gnapIdleFacing != kDirBottomRight && _gnapIdleFacing != kDirUpRight) { - _gnapIdleFacing = kDirUpLeft; + } else if (_gnap->_idleFacing != kDirBottomRight && _gnap->_idleFacing != kDirUpRight) { + _gnap->_idleFacing = kDirUpLeft; } else { - _gnapIdleFacing = kDirUpRight; + _gnap->_idleFacing = kDirUpRight; } switch (index) { case 0: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x8A0; else sequenceId = 0x8A1; break; case 1: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x880; else sequenceId = 0x895; break; case 2: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x884; else sequenceId = 0x899; break; //Skip 3 case 4: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x881; else sequenceId = 0x896; break; case 5: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x883; else sequenceId = 0x898; break; case 6: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87E; else sequenceId = 0x893; break; case 7: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x848; else sequenceId = 0x890; break; case 8: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87D; else sequenceId = 0x892; break; case 9: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x882; else sequenceId = 0x897; break; case 10: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87C; else sequenceId = 0x891; break; case 11: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87C; else sequenceId = 0x891; break; case 12: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87D; else sequenceId = 0x892; break; case 13: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x888; else sequenceId = 0x89D; break; case 14: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87F; else sequenceId = 0x894; break; case 15: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87B; else sequenceId = 0x8A3; break; case 16: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x877; else sequenceId = 0x88C; @@ -1410,43 +1412,43 @@ int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { sequenceId = 0x887; break; case 19: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87A; else sequenceId = 0x88F; break; case 20: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x878; else sequenceId = 0x88D; break; case 21: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x879; else sequenceId = 0x88E; break; case 22: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x88A; else sequenceId = 0x89F; break; case 23: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x889; else sequenceId = 0x89E; break; case 24: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x886; else sequenceId = 0x89B; break; case 25: - if (_gnapIdleFacing == kDirUpRight) + if (_gnap->_idleFacing == kDirUpRight) sequenceId = 0x87A; else sequenceId = 0x88F; @@ -1456,7 +1458,7 @@ int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { //Skip 28 //Skip 29 default: - _gnapIdleFacing = facing; + _gnap->_idleFacing = facing; sequenceId = getGnapSequenceId(gskImpossible, 0, 0); break; } @@ -1473,7 +1475,7 @@ void GnapEngine::gnapIdle() { _gnapSequenceId == 0x831 || _gnapSequenceId == 0x89A)) { _gameSys->insertSequence(getGnapSequenceId(gskIdle, 0, 0) | 0x10000, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncExists, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); _gnapSequenceId = getGnapSequenceId(gskIdle, 0, 0); _gnapSequenceDatNum = 1; } @@ -1484,7 +1486,7 @@ void GnapEngine::gnapActionIdle(int sequenceId) { ridToEntryIndex(sequenceId) == _gnapSequenceId) { _gameSys->insertSequence(getGnapSequenceId(gskIdle, 0, 0) | 0x10000, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncExists, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); _gnapSequenceId = getGnapSequenceId(gskIdle, 0, 0); _gnapSequenceDatNum = 1; } @@ -1496,7 +1498,7 @@ void GnapEngine::playGnapSequence(int sequenceId) { gnapIdle(); _gameSys->insertSequence(sequenceId, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqScale | kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqScale | kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); _gnapSequenceId = ridToEntryIndex(sequenceId); _gnapSequenceDatNum = ridToDatIndex(sequenceId); } @@ -1554,7 +1556,7 @@ void GnapEngine::updateGnapIdleSequence() { if (_timers[3] == 0) { _timers[2] = 60; _timers[3] = 300; - if (_gnapIdleFacing == kDirBottomRight) { + if (_gnap->_idleFacing == kDirBottomRight) { switch (getRandom(5)) { case 0: playGnapSequence(0x107A6); @@ -1569,7 +1571,7 @@ void GnapEngine::updateGnapIdleSequence() { playGnapSequence(0x108A2); break; } - } else if (_gnapIdleFacing == kDirBottomLeft) { + } else if (_gnap->_idleFacing == kDirBottomLeft) { if (getRandom(5) > 2) playGnapSequence(0x10832); else @@ -1578,16 +1580,16 @@ void GnapEngine::updateGnapIdleSequence() { } } else { _timers[2] = getRandom(30) + 20; - if (_gnapIdleFacing == kDirBottomRight) { + if (_gnap->_idleFacing == kDirBottomRight) { _gameSys->insertSequence(0x107BD, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); _gnapSequenceId = 0x7BD; _gnapSequenceDatNum = 1; - } else if (_gnapIdleFacing == kDirBottomLeft) { + } else if (_gnap->_idleFacing == kDirBottomLeft) { _gameSys->insertSequence(0x107BE, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); _gnapSequenceId = 0x7BE; _gnapSequenceDatNum = 1; } @@ -1604,24 +1606,24 @@ void GnapEngine::updateGnapIdleSequence2() { if (_timers[3] == 0) { _timers[2] = 60; _timers[3] = 300; - if (_gnapIdleFacing == kDirBottomRight) { + if (_gnap->_idleFacing == kDirBottomRight) { playGnapSequence(0x107AA); - } else if (_gnapIdleFacing == kDirBottomLeft) { + } else if (_gnap->_idleFacing == kDirBottomLeft) { playGnapSequence(0x10832); } } } else { _timers[2] = getRandom(30) + 20; - if (_gnapIdleFacing == kDirBottomRight) { + if (_gnap->_idleFacing == kDirBottomRight) { _gameSys->insertSequence(0x107BD, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); _gnapSequenceId = 0x7BD; _gnapSequenceDatNum = 1; - } else if (_gnapIdleFacing == kDirBottomLeft) { + } else if (_gnap->_idleFacing == kDirBottomLeft) { _gameSys->insertSequence(0x107BE, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); _gnapSequenceId = 0x7BE; _gnapSequenceDatNum = 1; } @@ -1649,23 +1651,22 @@ bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gr void GnapEngine::initGnapPos(int gridX, int gridY, Facing facing) { _timers[2] = 30; _timers[3] = 300; - _gnapX = gridX; - _gnapY = gridY; + _gnap->_pos = Common::Point(gridX, gridY); if (facing == kDirNone) - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; else - _gnapIdleFacing = facing; - if (_gnapIdleFacing == kDirBottomLeft) { + _gnap->_idleFacing = facing; + if (_gnap->_idleFacing == kDirBottomLeft) { _gnapSequenceId = 0x7B8; } else { _gnapSequenceId = 0x7B5; - _gnapIdleFacing = kDirBottomRight; + _gnap->_idleFacing = kDirBottomRight; } - _gnapId = 20 * _gnapY; + _gnapId = 20 * _gnap->_pos.y; _gnapSequenceDatNum = 1; - _gameSys->insertSequence(makeRid(1, _gnapSequenceId), 20 * _gnapY, + _gameSys->insertSequence(makeRid(1, _gnapSequenceId), 20 * _gnap->_pos.y, 0, 0, - kSeqScale, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqScale, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); } void GnapEngine::gnapInitBrainPulseRndValue() { @@ -1692,7 +1693,7 @@ void GnapEngine::gnapUseDeviceOnPlatypus() { int newSequenceId = getGnapSequenceId(gskUseDevice, 0, 0); _gameSys->insertSequence(makeRid(1, newSequenceId), _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 75 * _gnapX - _gnapGridX, 48 * _gnapY - _gnapGridY); + kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); _gnapSequenceId = newSequenceId; _gnapSequenceDatNum = 1; } @@ -1712,9 +1713,9 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in if (_gnapActionStatus <= -1 && _platypusActionStatus <= -1) { _gnapActionStatus = 100; - if (isPointBlocked(_platX + gridX, _platY + gridY) && (_platX + gridX != _gnapX || _platY + gridY != _gnapY)) + if (isPointBlocked(_platX + gridX, _platY + gridY) && (_gnap->_pos != Common::Point(_platX + gridX, _platY + gridY))) platypusWalkStep(); - if (!isPointBlocked(_platX + gridX, _platY + gridY) && (_platX + gridX != _gnapX || _platY + gridY != _gnapY)) { + if (!isPointBlocked(_platX + gridX, _platY + gridY) && (_gnap->_pos != Common::Point(_platX + gridX, _platY + gridY))) { gnapWalkTo(_platX + gridX, _platY + gridY, 0, 0x107B9, 1); while (_gameSys->getAnimationStatus(0) != 2) { updateMouseCursor(); @@ -1722,7 +1723,7 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in gameUpdateTick(); } _gameSys->setAnimation(0, 0, 0); - if (_platX + gridX == _gnapX && _platY + gridY == _gnapY) { + if (_gnap->_pos == Common::Point(_platX + gridX, _platY + gridY)) { _gameSys->setAnimation(platSequenceId, _platypusId, 1); playPlatypusSequence(platSequenceId); while (_gameSys->getAnimationStatus(1) != 2) { @@ -1745,7 +1746,7 @@ void GnapEngine::gnapKissPlatypus(int callback) { _gameSys->setAnimation(0x10847, _gnapId, 0); _gameSys->insertSequence(0x10847, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 15 * (5 * _gnapX - 20) - (21 - _gridMinX), 48 * (_gnapY - 6) - (146 - _gridMinY)); + kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 20) - (21 - _gridMinX), 48 * (_gnap->_pos.y - 6) - (146 - _gridMinY)); _gnapSequenceDatNum = 1; _gnapSequenceId = 0x847; _gameSys->insertSequence(0x107CB, _platypusId, @@ -1775,7 +1776,7 @@ void GnapEngine::gnapUseJointOnPlatypus() { _gameSys->setAnimation(0x10876, _platypusId, 0); _gameSys->insertSequence(0x10875, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 15 * (5 * _gnapX - 30), 48 * (_gnapY - 7)); + kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 30), 48 * (_gnap->_pos.y - 7)); _gnapSequenceDatNum = 1; _gnapSequenceId = 0x875; _gameSys->insertSequence(0x10876, _platypusId, @@ -1936,7 +1937,7 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ _gameSys->setAnimation(sequenceId2, _gnapId, 0); _gameSys->insertSequence(sequenceId2, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 15 * (5 * _gnapX - 25), 48 * (_gnapY - 8)); + kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 25), 48 * (_gnap->_pos.y - 8)); _gnapSequenceId = sequenceId2; _gnapSequenceDatNum = 0; while (_gameSys->getAnimationStatus(0) != 2) @@ -1950,7 +1951,7 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ _gameSys->setAnimation(sequenceId3, _gnapId, 0); _gameSys->insertSequence(sequenceId3, _gnapId, makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 15 * (5 * _gnapX - 25), 48 * (_gnapY - 8)); + kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 25), 48 * (_gnap->_pos.y - 8)); removeFullScreenSprite(); showCursor(); _gnapSequenceId = sequenceId3; -- cgit v1.2.3 From 45bc40166f3d256312327a7c67e055505649705e Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 4 May 2016 20:03:18 +0200 Subject: GNAP: Use a Character for Platypus (WIP) --- engines/gnap/gnap.cpp | 67 ++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 33 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index ff9c79e9cd..76184fc58d 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -149,12 +149,14 @@ Common::Error GnapEngine::run() { _soundMan = new SoundMan(this); _debugger = new Debugger(this); _gnap = new PlayerGnap(this); + _plat = new PlayerPlat(this); _menuBackgroundSurface = nullptr; initGlobalSceneVars(); mainLoop(); + delete _plat; delete _gnap; delete _soundMan; delete _gameSys; @@ -373,10 +375,10 @@ void GnapEngine::updateCursorByHotspot() { setCursor(kDisabledCursors[_verbCursor]); } // Update platypus hotspot - _hotspots[0]._x1 = _gridMinX + 75 * _platX - 30; - _hotspots[0]._y1 = _gridMinY + 48 * _platY - 100; - _hotspots[0]._x2 = _gridMinX + 75 * _platX + 30; - _hotspots[0]._y2 = _gridMinY + 48 * _platY; + _hotspots[0]._x1 = _gridMinX + 75 * _plat->_pos.x - 30; + _hotspots[0]._y1 = _gridMinY + 48 * _plat->_pos.y - 100; + _hotspots[0]._x2 = _gridMinX + 75 * _plat->_pos.x + 30; + _hotspots[0]._y2 = _gridMinY + 48 * _plat->_pos.y; } int GnapEngine::getClickedHotspotId() { @@ -1544,7 +1546,7 @@ void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { } void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int gridLookY) { - if (_platX == gridX && _platY == gridY) + if (_plat->_pos.x == gridX && _plat->_pos.y == gridY) platypusMakeRoom(); gnapWalkTo(gridX, gridY, -1, -1, 1); playGnapShowItem(_grabCursorSpriteIndex, gridLookX, gridLookY); @@ -1674,18 +1676,18 @@ void GnapEngine::gnapInitBrainPulseRndValue() { } void GnapEngine::gnapUseDeviceOnPlatypus() { - playGnapSequence(makeRid(1, getGnapSequenceId(gskPullOutDevice, _platX, _platY))); + playGnapSequence(makeRid(1, getGnapSequenceId(gskPullOutDevice, _plat->_pos.x, _plat->_pos.y))); - if (_platypusFacing != kDirNone) { + if (_plat->_idleFacing != kDirNone) { _gameSys->insertSequence(makeRid(1, 0x7D5), _platypusId, makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, - kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqSyncWait, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); _platypusSequenceId = 0x7D5; _platypusSequenceDatNum = 1; } else { _gameSys->insertSequence(makeRid(1, 0x7D4), _platypusId, makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, - kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqSyncWait, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); _platypusSequenceId = 0x7D4; _platypusSequenceDatNum = 1; } @@ -1713,17 +1715,17 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in if (_gnapActionStatus <= -1 && _platypusActionStatus <= -1) { _gnapActionStatus = 100; - if (isPointBlocked(_platX + gridX, _platY + gridY) && (_gnap->_pos != Common::Point(_platX + gridX, _platY + gridY))) + if (isPointBlocked(_plat->_pos.x + gridX, _plat->_pos.y + gridY) && (_gnap->_pos != Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY))) platypusWalkStep(); - if (!isPointBlocked(_platX + gridX, _platY + gridY) && (_gnap->_pos != Common::Point(_platX + gridX, _platY + gridY))) { - gnapWalkTo(_platX + gridX, _platY + gridY, 0, 0x107B9, 1); + if (!isPointBlocked(_plat->_pos.x + gridX, _plat->_pos.y + gridY) && (_gnap->_pos != Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY))) { + gnapWalkTo(_plat->_pos.x + gridX, _plat->_pos.y + gridY, 0, 0x107B9, 1); while (_gameSys->getAnimationStatus(0) != 2) { updateMouseCursor(); doCallback(callback); gameUpdateTick(); } _gameSys->setAnimation(0, 0, 0); - if (_gnap->_pos == Common::Point(_platX + gridX, _platY + gridY)) { + if (_gnap->_pos == Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY)) { _gameSys->setAnimation(platSequenceId, _platypusId, 1); playPlatypusSequence(platSequenceId); while (_gameSys->getAnimationStatus(1) != 2) { @@ -1751,10 +1753,10 @@ void GnapEngine::gnapKissPlatypus(int callback) { _gnapSequenceId = 0x847; _gameSys->insertSequence(0x107CB, _platypusId, makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, - kSeqSyncWait, getSequenceTotalDuration(0x10847), 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqSyncWait, getSequenceTotalDuration(0x10847), 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); _platypusSequenceDatNum = 1; _platypusSequenceId = 0x7CB; - _platypusFacing = kDirNone; + _plat->_idleFacing = kDirNone; playGnapSequence(0x107B5); while (_gameSys->getAnimationStatus(0) != 2) { updateMouseCursor(); @@ -1764,7 +1766,7 @@ void GnapEngine::gnapKissPlatypus(int callback) { _gameSys->setAnimation(0, 0, 0); _gnapActionStatus = -1; } else { - playGnapSequence(getGnapSequenceId(gskScratchingHead, _platX, _platY) | 0x10000); + playGnapSequence(getGnapSequenceId(gskScratchingHead, _plat->_pos.x, _plat->_pos.y) | 0x10000); } } @@ -1781,10 +1783,10 @@ void GnapEngine::gnapUseJointOnPlatypus() { _gnapSequenceId = 0x875; _gameSys->insertSequence(0x10876, _platypusId, _platypusSequenceId | (_platypusSequenceDatNum << 16), _platypusId, - kSeqSyncWait, 0, 15 * (5 * _platX - 25), 48 * (_platY - 7)); + kSeqSyncWait, 0, 15 * (5 * _plat->_pos.x - 25), 48 * (_plat->_pos.y - 7)); _platypusSequenceDatNum = 1; _platypusSequenceId = 0x876; - _platypusFacing = kDirNone; + _plat->_idleFacing = kDirNone; playGnapSequence(0x107B5); gnapWalkStep(); while (_gameSys->getAnimationStatus(0) != 2) { @@ -1794,7 +1796,7 @@ void GnapEngine::gnapUseJointOnPlatypus() { _gameSys->setAnimation(0, 0, 0); _gnapActionStatus = -1; } else { - playGnapSequence(getGnapSequenceId(gskScratchingHead, _platX, _platY) | 0x10000); + playGnapSequence(getGnapSequenceId(gskScratchingHead, _plat->_pos.x, _plat->_pos.y) | 0x10000); } } @@ -1815,9 +1817,9 @@ int GnapEngine::getPlatypusSequenceId() { int sequenceId = 0x7CB; - if (_platypusFacing != kDirNone) { + if (_plat->_idleFacing != kDirNone) { sequenceId = 0x7CC; - _platypusFacing = kDirUnk4; + _plat->_idleFacing = kDirUnk4; } return sequenceId | 0x10000; @@ -1826,7 +1828,7 @@ int GnapEngine::getPlatypusSequenceId() { void GnapEngine::playPlatypusSequence(int sequenceId) { _gameSys->insertSequence(sequenceId, _platypusId, makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, - kSeqScale | kSeqSyncWait, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqScale | kSeqSyncWait, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); _platypusSequenceId = ridToEntryIndex(sequenceId); _platypusSequenceDatNum = ridToDatIndex(sequenceId); } @@ -1837,7 +1839,7 @@ void GnapEngine::updatePlatypusIdleSequence() { if (_timers[1] == 0) { _timers[1] = getRandom(20) + 30; int rnd = getRandom(10); - if (_platypusFacing != kDirNone) { + if (_plat->_idleFacing != kDirNone) { if (rnd != 0 || _platypusSequenceId != 0x7CA) { if (rnd != 1 || _platypusSequenceId != 0x7CA) playPlatypusSequence(0x107CA); @@ -1874,7 +1876,7 @@ void GnapEngine::updatePlatypusIdleSequence2() { if (_timers[0]) { if (!_timers[1]) { _timers[1] = getRandom(20) + 30; - if (_platypusFacing != kDirNone) { + if (_plat->_idleFacing != kDirNone) { if (getRandom(10) >= 2 || _platypusSequenceId != 0x7CA) playPlatypusSequence(0x107CA); else @@ -1900,23 +1902,22 @@ void GnapEngine::updatePlatypusIdleSequence2() { void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { _timers[0] = 50; _timers[1] = 20; - _platX = gridX; - _platY = gridY; + _plat->_pos = Common::Point(gridX, gridY); if (facing == kDirNone) - _platypusFacing = kDirNone; + _plat->_idleFacing = kDirNone; else - _platypusFacing = facing; - if (_platypusFacing == kDirUnk4) { + _plat->_idleFacing = facing; + if (_plat->_idleFacing == kDirUnk4) { _platypusSequenceId = 0x7D1; } else { _platypusSequenceId = 0x7C1; - _platypusFacing = kDirNone; + _plat->_idleFacing = kDirNone; } - _platypusId = 20 * _platY; + _platypusId = 20 * _plat->_pos.y; _platypusSequenceDatNum = 1; - _gameSys->insertSequence(makeRid(1, _platypusSequenceId), 20 * _platY, + _gameSys->insertSequence(makeRid(1, _platypusSequenceId), 20 * _plat->_pos.y, 0, 0, - kSeqScale, 0, 75 * _platX - _platGridX, 48 * _platY - _platGridY); + kSeqScale, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); } //////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From dda4931ee9d78c704ebd768af243d7019e9d0913 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 4 May 2016 21:07:12 +0200 Subject: GNAP: Move _actionStatus to the Character class --- engines/gnap/gnap.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 76184fc58d..d02321a8f5 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -412,10 +412,10 @@ void GnapEngine::updateMouseCursor() { setCursor(kDisabledCursors[_verbCursor]); setGrabCursorSprite(-1); } - if (_isWaiting && ((_gnapActionStatus < 0 && _platypusActionStatus < 0) || _sceneWaiting)) { + if (_isWaiting && ((_gnap->_actionStatus < 0 && _plat->_actionStatus < 0) || _sceneWaiting)) { setCursor(kDisabledCursors[_verbCursor]); _isWaiting = false; - } else if (!_isWaiting && (_gnapActionStatus >= 0 || _platypusActionStatus >= 0) && !_sceneWaiting) { + } else if (!_isWaiting && (_gnap->_actionStatus >= 0 || _plat->_actionStatus >= 0) && !_sceneWaiting) { setCursor(WAIT_CURSOR); _isWaiting = true; } @@ -733,8 +733,8 @@ void GnapEngine::initScene() { _isLeavingScene = false; _sceneDone = false; _newSceneNum = 55; - _gnapActionStatus = -1; - _platypusActionStatus = -1; + _gnap->_actionStatus = -1; + _plat->_actionStatus = -1; gnapInitBrainPulseRndValue(); hideCursor(); clearAllKeyStatus1(); @@ -1553,7 +1553,7 @@ void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int g } void GnapEngine::updateGnapIdleSequence() { - if (_gnapActionStatus < 0) { + if (_gnap->_actionStatus < 0) { if (_timers[2] > 0) { if (_timers[3] == 0) { _timers[2] = 60; @@ -1603,7 +1603,7 @@ void GnapEngine::updateGnapIdleSequence() { } void GnapEngine::updateGnapIdleSequence2() { - if (_gnapActionStatus < 0) { + if (_gnap->_actionStatus < 0) { if (_timers[2] > 0) { if (_timers[3] == 0) { _timers[2] = 60; @@ -1637,11 +1637,11 @@ void GnapEngine::updateGnapIdleSequence2() { } bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gridY1, int gridX2, int gridY2) { - if (_mouseClickState._left && someStatus == _gnapActionStatus) { + if (_mouseClickState._left && someStatus == _gnap->_actionStatus) { _isLeavingScene = false; _gameSys->setAnimation(0, 0, animationIndex); - _gnapActionStatus = -1; - _platypusActionStatus = -1; + _gnap->_actionStatus = -1; + _plat->_actionStatus = -1; gnapWalkTo(gridX1, gridY1, -1, -1, 1); platypusWalkTo(gridX2, gridY2, -1, -1, 1); _mouseClickState._left = false; @@ -1713,8 +1713,8 @@ void GnapEngine::doCallback(int callback) { bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, int callback) { bool result = false; - if (_gnapActionStatus <= -1 && _platypusActionStatus <= -1) { - _gnapActionStatus = 100; + if (_gnap->_actionStatus <= -1 && _plat->_actionStatus <= -1) { + _gnap->_actionStatus = 100; if (isPointBlocked(_plat->_pos.x + gridX, _plat->_pos.y + gridY) && (_gnap->_pos != Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY))) platypusWalkStep(); if (!isPointBlocked(_plat->_pos.x + gridX, _plat->_pos.y + gridY) && (_gnap->_pos != Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY))) { @@ -1736,14 +1736,14 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in result = true; } } - _gnapActionStatus = -1; + _gnap->_actionStatus = -1; } return result; } void GnapEngine::gnapKissPlatypus(int callback) { if (gnapPlatypusAction(-1, 0, 0x107D1, callback)) { - _gnapActionStatus = 100; + _gnap->_actionStatus = 100; _gameSys->setAnimation(0, 0, 1); _gameSys->setAnimation(0x10847, _gnapId, 0); _gameSys->insertSequence(0x10847, _gnapId, @@ -1764,7 +1764,7 @@ void GnapEngine::gnapKissPlatypus(int callback) { gameUpdateTick(); } _gameSys->setAnimation(0, 0, 0); - _gnapActionStatus = -1; + _gnap->_actionStatus = -1; } else { playGnapSequence(getGnapSequenceId(gskScratchingHead, _plat->_pos.x, _plat->_pos.y) | 0x10000); } @@ -1773,7 +1773,7 @@ void GnapEngine::gnapKissPlatypus(int callback) { void GnapEngine::gnapUseJointOnPlatypus() { setGrabCursorSprite(-1); if (gnapPlatypusAction(1, 0, 0x107C1, 0)) { - _gnapActionStatus = 100; + _gnap->_actionStatus = 100; _gameSys->setAnimation(0, 0, 1); _gameSys->setAnimation(0x10876, _platypusId, 0); _gameSys->insertSequence(0x10875, _gnapId, @@ -1794,7 +1794,7 @@ void GnapEngine::gnapUseJointOnPlatypus() { gameUpdateTick(); } _gameSys->setAnimation(0, 0, 0); - _gnapActionStatus = -1; + _gnap->_actionStatus = -1; } else { playGnapSequence(getGnapSequenceId(gskScratchingHead, _plat->_pos.x, _plat->_pos.y) | 0x10000); } @@ -1834,7 +1834,7 @@ void GnapEngine::playPlatypusSequence(int sequenceId) { } void GnapEngine::updatePlatypusIdleSequence() { - if (_platypusActionStatus < 0 && _gnapActionStatus < 0) { + if (_plat->_actionStatus < 0 && _gnap->_actionStatus < 0) { if (_timers[0] > 0) { if (_timers[1] == 0) { _timers[1] = getRandom(20) + 30; @@ -1872,7 +1872,7 @@ void GnapEngine::updatePlatypusIdleSequence() { } void GnapEngine::updatePlatypusIdleSequence2() { - if (_platypusActionStatus < 0 && _gnapActionStatus < 0) { + if (_plat->_actionStatus < 0 && _gnap->_actionStatus < 0) { if (_timers[0]) { if (!_timers[1]) { _timers[1] = getRandom(20) + 30; -- cgit v1.2.3 From 579ecdabd19f0a5f6837224eafebf6a8ac74c0ad Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 5 May 2016 10:12:15 +0200 Subject: GNAP: More refactoring related to characters (WIP) --- engines/gnap/gnap.cpp | 610 +++++++------------------------------------------- 1 file changed, 80 insertions(+), 530 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index d02321a8f5..c020d752b6 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -735,7 +735,7 @@ void GnapEngine::initScene() { _newSceneNum = 55; _gnap->_actionStatus = -1; _plat->_actionStatus = -1; - gnapInitBrainPulseRndValue(); + _gnap->initBrainPulseRndValue(); hideCursor(); clearAllKeyStatus1(); _mouseClickState._left = false; @@ -941,354 +941,6 @@ void GnapEngine::deleteSurface(Graphics::Surface **surface) { } } -int GnapEngine::getGnapSequenceId(int kind, int gridX, int gridY) { - int sequenceId = 0; - - switch (kind) { - case gskPullOutDevice: - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x83F; - _gnap->_idleFacing = kDirUpLeft; - } else { - sequenceId = 0x83D; - _gnap->_idleFacing = kDirUpRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x83B; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x839; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else { - switch (_gnap->_idleFacing) { - case kDirBottomRight: - sequenceId = 0x839; - break; - case kDirBottomLeft: - sequenceId = 0x83B; - break; - case kDirUpRight: - sequenceId = 0x83D; - break; - default: - sequenceId = 0x83F; - break; - } - } - break; - - case gskPullOutDeviceNonWorking: - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x829; - _gnap->_idleFacing = kDirUpLeft; - } else { - sequenceId = 0x828; - _gnap->_idleFacing = kDirUpRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x827; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x826; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else { - switch (_gnap->_idleFacing) { - case kDirBottomRight: - sequenceId = 0x826; - break; - case kDirBottomLeft: - sequenceId = 0x827; - break; - case kDirUpRight: - sequenceId = 0x828; - break; - default: - sequenceId = 0x829; - break; - } - } - break; - - case gskScratchingHead: - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x834; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x885; - _gnap->_idleFacing = kDirUpRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x834; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x833; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else { - switch (_gnap->_idleFacing) { - case kDirBottomRight: - sequenceId = 0x833; - _gnap->_idleFacing = kDirBottomRight; - break; - case kDirBottomLeft: - sequenceId = 0x834; - _gnap->_idleFacing = kDirBottomLeft; - break; - case kDirUpRight: - sequenceId = 0x885; - _gnap->_idleFacing = kDirUpRight; - break; - default: - sequenceId = 0x834; - _gnap->_idleFacing = kDirBottomLeft; - break; - } - } - break; - - case gskIdle: - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x7BC; - _gnap->_idleFacing = kDirUpLeft; - } else { - sequenceId = 0x7BB; - _gnap->_idleFacing = kDirUpRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x7BA; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7B9; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else { - switch (_gnap->_idleFacing) { - case kDirBottomRight: - sequenceId = 0x7B9; - break; - case kDirBottomLeft: - sequenceId = 0x7BA; - break; - case kDirUpRight: - sequenceId = 0x7BB; - break; - default: - sequenceId = 0x7BC; - break; - } - } - break; - - case gskBrainPulsating: - _gnapBrainPulseNum = (_gnapBrainPulseNum + 1) & 1; - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x812; - _gnap->_idleFacing = kDirUpLeft; - } else { - sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7FE; - _gnap->_idleFacing = kDirUpRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7D6; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7EA; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else { - switch (_gnap->_idleFacing) { - case kDirBottomRight: - sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7EA; - break; - case kDirBottomLeft: - sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7D6; - break; - case kDirUpRight: - sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x7FE; - break; - default: - sequenceId = _gnapBrainPulseRndValue + _gnapBrainPulseNum + 0x812; - break; - } - } - break; - - case gskImpossible: - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x831; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7A8; - _gnap->_idleFacing = kDirBottomRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x831; - _gnap->_idleFacing = kDirBottomLeft; - } else { - if (_gnap->_pos.x % 2) - sequenceId = 0x7A8; - else - sequenceId = 0x89A; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else if (_gnap->_idleFacing != kDirBottomRight && _gnap->_idleFacing != kDirUpRight) { - sequenceId = 0x831; - _gnap->_idleFacing = kDirBottomLeft; - } else { - if (_currentSceneNum % 2) - sequenceId = 0x7A8; - else - sequenceId = 0x89A; - _gnap->_idleFacing = kDirBottomRight; - } - break; - - case gskDeflect: - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x830; - _gnap->_idleFacing = kDirUpLeft; - } else { - sequenceId = 0x82F; - _gnap->_idleFacing = kDirUpRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x82E; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7A7; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else { - switch (_gnap->_idleFacing) { - case kDirBottomRight: - sequenceId = 0x7A7; - break; - case kDirBottomLeft: - sequenceId = 0x82E; - break; - case kDirUpLeft: - sequenceId = 0x830; - break; - case kDirUpRight: - sequenceId = 0x82F; - break; - case kDirNone: - case kDirUnk4: - break; - } - } - break; - - case gskUseDevice: - switch (_gnap->_idleFacing) { - case kDirBottomRight: - sequenceId = 0x83A; - break; - case kDirBottomLeft: - sequenceId = 0x83C; - break; - case kDirUpLeft: - sequenceId = 0x840; - break; - case kDirUpRight: - sequenceId = 0x83E; - break; - case kDirNone: - case kDirUnk4: - break; - } - break; - - case gskMoan1: - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x832; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7AA; - _gnap->_idleFacing = kDirBottomRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x832; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7AA; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else if (_gnap->_idleFacing != kDirBottomRight && _gnap->_idleFacing != kDirUpRight) { - sequenceId = 0x832; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7AA; - _gnap->_idleFacing = kDirBottomRight; - } - break; - - case gskMoan2: - if (gridX > 0 && gridY > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x832; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7AA; - _gnap->_idleFacing = kDirBottomRight; - } - } else { - if (_gnap->_pos.x > gridX) { - sequenceId = 0x832; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7AA; - _gnap->_idleFacing = kDirBottomRight; - } - } - } else if (_gnap->_idleFacing != kDirBottomRight && _gnap->_idleFacing != kDirUpRight) { - sequenceId = 0x832; - _gnap->_idleFacing = kDirBottomLeft; - } else { - sequenceId = 0x7AA; - _gnap->_idleFacing = kDirBottomRight; - } - break; - } - - return sequenceId | 0x10000; -} - int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { int sequenceId; Facing facing = _gnap->_idleFacing; @@ -1461,36 +1113,36 @@ int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { //Skip 29 default: _gnap->_idleFacing = facing; - sequenceId = getGnapSequenceId(gskImpossible, 0, 0); + sequenceId = _gnap->getSequenceId(gskImpossible, 0, 0); break; } return sequenceId; } void GnapEngine::gnapIdle() { - if (_gnapSequenceId != -1 && _gnapSequenceDatNum == 1 && - (_gnapSequenceId == 0x7A6 || _gnapSequenceId == 0x7AA || - _gnapSequenceId == 0x832 || _gnapSequenceId == 0x841 || - _gnapSequenceId == 0x842 || _gnapSequenceId == 0x8A2 || - _gnapSequenceId == 0x833 || _gnapSequenceId == 0x834 || - _gnapSequenceId == 0x885 || _gnapSequenceId == 0x7A8 || - _gnapSequenceId == 0x831 || _gnapSequenceId == 0x89A)) { - _gameSys->insertSequence(getGnapSequenceId(gskIdle, 0, 0) | 0x10000, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + if (_gnap->_sequenceId != -1 && _gnap->_sequenceDatNum == 1 && + (_gnap->_sequenceId == 0x7A6 || _gnap->_sequenceId == 0x7AA || + _gnap->_sequenceId == 0x832 || _gnap->_sequenceId == 0x841 || + _gnap->_sequenceId == 0x842 || _gnap->_sequenceId == 0x8A2 || + _gnap->_sequenceId == 0x833 || _gnap->_sequenceId == 0x834 || + _gnap->_sequenceId == 0x885 || _gnap->_sequenceId == 0x7A8 || + _gnap->_sequenceId == 0x831 || _gnap->_sequenceId == 0x89A)) { + _gameSys->insertSequence(_gnap->getSequenceId(gskIdle, 0, 0) | 0x10000, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnapSequenceId = getGnapSequenceId(gskIdle, 0, 0); - _gnapSequenceDatNum = 1; + _gnap->_sequenceId = _gnap->getSequenceId(gskIdle, 0, 0); + _gnap->_sequenceDatNum = 1; } } void GnapEngine::gnapActionIdle(int sequenceId) { - if (_gnapSequenceId != -1 && ridToDatIndex(sequenceId) == _gnapSequenceDatNum && - ridToEntryIndex(sequenceId) == _gnapSequenceId) { - _gameSys->insertSequence(getGnapSequenceId(gskIdle, 0, 0) | 0x10000, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + if (_gnap->_sequenceId != -1 && ridToDatIndex(sequenceId) == _gnap->_sequenceDatNum && + ridToEntryIndex(sequenceId) == _gnap->_sequenceId) { + _gameSys->insertSequence(_gnap->getSequenceId(gskIdle, 0, 0) | 0x10000, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnapSequenceId = getGnapSequenceId(gskIdle, 0, 0); - _gnapSequenceDatNum = 1; + _gnap->_sequenceId = _gnap->getSequenceId(gskIdle, 0, 0); + _gnap->_sequenceDatNum = 1; } } @@ -1498,47 +1150,47 @@ void GnapEngine::playGnapSequence(int sequenceId) { _timers[2] = getRandom(30) + 20; _timers[3] = 300; gnapIdle(); - _gameSys->insertSequence(sequenceId, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + _gameSys->insertSequence(sequenceId, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqScale | kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnapSequenceId = ridToEntryIndex(sequenceId); - _gnapSequenceDatNum = ridToDatIndex(sequenceId); + _gnap->_sequenceId = ridToEntryIndex(sequenceId); + _gnap->_sequenceDatNum = ridToDatIndex(sequenceId); } void GnapEngine::playGnapImpossible(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskImpossible, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskImpossible, gridX, gridY) | 0x10000); } void GnapEngine::playGnapScratchingHead(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskScratchingHead, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskScratchingHead, gridX, gridY) | 0x10000); } void GnapEngine::playGnapMoan1(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskMoan1, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskMoan1, gridX, gridY) | 0x10000); } void GnapEngine::playGnapMoan2(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskMoan2, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskMoan2, gridX, gridY) | 0x10000); } void GnapEngine::playGnapBrainPulsating(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskBrainPulsating, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskBrainPulsating, gridX, gridY) | 0x10000); } void GnapEngine::playGnapPullOutDevice(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskPullOutDevice, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskPullOutDevice, gridX, gridY) | 0x10000); } void GnapEngine::playGnapPullOutDeviceNonWorking(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskPullOutDeviceNonWorking, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskPullOutDeviceNonWorking, gridX, gridY) | 0x10000); } void GnapEngine::playGnapUseDevice(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskUseDevice, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskUseDevice, gridX, gridY) | 0x10000); } void GnapEngine::playGnapIdle(int gridX, int gridY) { - playGnapSequence(getGnapSequenceId(gskIdle, gridX, gridY) | 0x10000); + playGnapSequence(_gnap->getSequenceId(gskIdle, gridX, gridY) | 0x10000); } void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { @@ -1583,17 +1235,17 @@ void GnapEngine::updateGnapIdleSequence() { } else { _timers[2] = getRandom(30) + 20; if (_gnap->_idleFacing == kDirBottomRight) { - _gameSys->insertSequence(0x107BD, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + _gameSys->insertSequence(0x107BD, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnapSequenceId = 0x7BD; - _gnapSequenceDatNum = 1; + _gnap->_sequenceId = 0x7BD; + _gnap->_sequenceDatNum = 1; } else if (_gnap->_idleFacing == kDirBottomLeft) { - _gameSys->insertSequence(0x107BE, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + _gameSys->insertSequence(0x107BE, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnapSequenceId = 0x7BE; - _gnapSequenceDatNum = 1; + _gnap->_sequenceId = 0x7BE; + _gnap->_sequenceDatNum = 1; } } } else { @@ -1617,17 +1269,17 @@ void GnapEngine::updateGnapIdleSequence2() { } else { _timers[2] = getRandom(30) + 20; if (_gnap->_idleFacing == kDirBottomRight) { - _gameSys->insertSequence(0x107BD, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + _gameSys->insertSequence(0x107BD, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnapSequenceId = 0x7BD; - _gnapSequenceDatNum = 1; + _gnap->_sequenceId = 0x7BD; + _gnap->_sequenceDatNum = 1; } else if (_gnap->_idleFacing == kDirBottomLeft) { - _gameSys->insertSequence(0x107BE, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + _gameSys->insertSequence(0x107BE, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnapSequenceId = 0x7BE; - _gnapSequenceDatNum = 1; + _gnap->_sequenceId = 0x7BE; + _gnap->_sequenceDatNum = 1; } } } else { @@ -1659,47 +1311,18 @@ void GnapEngine::initGnapPos(int gridX, int gridY, Facing facing) { else _gnap->_idleFacing = facing; if (_gnap->_idleFacing == kDirBottomLeft) { - _gnapSequenceId = 0x7B8; + _gnap->_sequenceId = 0x7B8; } else { - _gnapSequenceId = 0x7B5; + _gnap->_sequenceId = 0x7B5; _gnap->_idleFacing = kDirBottomRight; } - _gnapId = 20 * _gnap->_pos.y; - _gnapSequenceDatNum = 1; - _gameSys->insertSequence(makeRid(1, _gnapSequenceId), 20 * _gnap->_pos.y, + _gnap->_id = 20 * _gnap->_pos.y; + _gnap->_sequenceDatNum = 1; + _gameSys->insertSequence(makeRid(1, _gnap->_sequenceId), 20 * _gnap->_pos.y, 0, 0, kSeqScale, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); } -void GnapEngine::gnapInitBrainPulseRndValue() { - _gnapBrainPulseRndValue = 2 * getRandom(10); -} - -void GnapEngine::gnapUseDeviceOnPlatypus() { - playGnapSequence(makeRid(1, getGnapSequenceId(gskPullOutDevice, _plat->_pos.x, _plat->_pos.y))); - - if (_plat->_idleFacing != kDirNone) { - _gameSys->insertSequence(makeRid(1, 0x7D5), _platypusId, - makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, - kSeqSyncWait, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); - _platypusSequenceId = 0x7D5; - _platypusSequenceDatNum = 1; - } else { - _gameSys->insertSequence(makeRid(1, 0x7D4), _platypusId, - makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, - kSeqSyncWait, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); - _platypusSequenceId = 0x7D4; - _platypusSequenceDatNum = 1; - } - - int newSequenceId = getGnapSequenceId(gskUseDevice, 0, 0); - _gameSys->insertSequence(makeRid(1, newSequenceId), _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnapSequenceId = newSequenceId; - _gnapSequenceDatNum = 1; -} - void GnapEngine::doCallback(int callback) { switch (callback) { case 8: @@ -1726,7 +1349,7 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in } _gameSys->setAnimation(0, 0, 0); if (_gnap->_pos == Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY)) { - _gameSys->setAnimation(platSequenceId, _platypusId, 1); + _gameSys->setAnimation(platSequenceId, _plat->_id, 1); playPlatypusSequence(platSequenceId); while (_gameSys->getAnimationStatus(1) != 2) { updateMouseCursor(); @@ -1741,67 +1364,8 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in return result; } -void GnapEngine::gnapKissPlatypus(int callback) { - if (gnapPlatypusAction(-1, 0, 0x107D1, callback)) { - _gnap->_actionStatus = 100; - _gameSys->setAnimation(0, 0, 1); - _gameSys->setAnimation(0x10847, _gnapId, 0); - _gameSys->insertSequence(0x10847, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 20) - (21 - _gridMinX), 48 * (_gnap->_pos.y - 6) - (146 - _gridMinY)); - _gnapSequenceDatNum = 1; - _gnapSequenceId = 0x847; - _gameSys->insertSequence(0x107CB, _platypusId, - makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, - kSeqSyncWait, getSequenceTotalDuration(0x10847), 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); - _platypusSequenceDatNum = 1; - _platypusSequenceId = 0x7CB; - _plat->_idleFacing = kDirNone; - playGnapSequence(0x107B5); - while (_gameSys->getAnimationStatus(0) != 2) { - updateMouseCursor(); - doCallback(callback); - gameUpdateTick(); - } - _gameSys->setAnimation(0, 0, 0); - _gnap->_actionStatus = -1; - } else { - playGnapSequence(getGnapSequenceId(gskScratchingHead, _plat->_pos.x, _plat->_pos.y) | 0x10000); - } -} - -void GnapEngine::gnapUseJointOnPlatypus() { - setGrabCursorSprite(-1); - if (gnapPlatypusAction(1, 0, 0x107C1, 0)) { - _gnap->_actionStatus = 100; - _gameSys->setAnimation(0, 0, 1); - _gameSys->setAnimation(0x10876, _platypusId, 0); - _gameSys->insertSequence(0x10875, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, - kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 30), 48 * (_gnap->_pos.y - 7)); - _gnapSequenceDatNum = 1; - _gnapSequenceId = 0x875; - _gameSys->insertSequence(0x10876, _platypusId, - _platypusSequenceId | (_platypusSequenceDatNum << 16), _platypusId, - kSeqSyncWait, 0, 15 * (5 * _plat->_pos.x - 25), 48 * (_plat->_pos.y - 7)); - _platypusSequenceDatNum = 1; - _platypusSequenceId = 0x876; - _plat->_idleFacing = kDirNone; - playGnapSequence(0x107B5); - gnapWalkStep(); - while (_gameSys->getAnimationStatus(0) != 2) { - updateMouseCursor(); - gameUpdateTick(); - } - _gameSys->setAnimation(0, 0, 0); - _gnap->_actionStatus = -1; - } else { - playGnapSequence(getGnapSequenceId(gskScratchingHead, _plat->_pos.x, _plat->_pos.y) | 0x10000); - } -} - void GnapEngine::gnapUseDisguiseOnPlatypus() { - _gameSys->setAnimation(0x10846, _gnapId, 0); + _gameSys->setAnimation(0x10846, _gnap->_id, 0); playGnapSequence(0x10846); while (_gameSys->getAnimationStatus(0) != 2) gameUpdateTick(); @@ -1811,26 +1375,12 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { setFlag(kGFPlatypusDisguised); } -int GnapEngine::getPlatypusSequenceId() { - // The original had 3 parameters, all always set to 0. - // The code to handle the other values has been removed. - - int sequenceId = 0x7CB; - - if (_plat->_idleFacing != kDirNone) { - sequenceId = 0x7CC; - _plat->_idleFacing = kDirUnk4; - } - - return sequenceId | 0x10000; -} - void GnapEngine::playPlatypusSequence(int sequenceId) { - _gameSys->insertSequence(sequenceId, _platypusId, - makeRid(_platypusSequenceDatNum, _platypusSequenceId), _platypusId, + _gameSys->insertSequence(sequenceId, _plat->_id, + makeRid(_plat->_sequenceDatNum, _plat->_sequenceId), _plat->_id, kSeqScale | kSeqSyncWait, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); - _platypusSequenceId = ridToEntryIndex(sequenceId); - _platypusSequenceDatNum = ridToDatIndex(sequenceId); + _plat->_sequenceId = ridToEntryIndex(sequenceId); + _plat->_sequenceDatNum = ridToDatIndex(sequenceId); } void GnapEngine::updatePlatypusIdleSequence() { @@ -1840,17 +1390,17 @@ void GnapEngine::updatePlatypusIdleSequence() { _timers[1] = getRandom(20) + 30; int rnd = getRandom(10); if (_plat->_idleFacing != kDirNone) { - if (rnd != 0 || _platypusSequenceId != 0x7CA) { - if (rnd != 1 || _platypusSequenceId != 0x7CA) + if (rnd != 0 || _plat->_sequenceId != 0x7CA) { + if (rnd != 1 || _plat->_sequenceId != 0x7CA) playPlatypusSequence(0x107CA); else playPlatypusSequence(0x10845); } else { playPlatypusSequence(0x107CC); } - } else if (rnd != 0 || _platypusSequenceId != 0x7C9) { - if (rnd != 1 || _platypusSequenceId != 0x7C9) { - if (rnd != 2 || _platypusSequenceId != 0x7C9) + } else if (rnd != 0 || _plat->_sequenceId != 0x7C9) { + if (rnd != 1 || _plat->_sequenceId != 0x7C9) { + if (rnd != 2 || _plat->_sequenceId != 0x7C9) playPlatypusSequence(0x107C9); else playPlatypusSequence(0x108A4); @@ -1877,12 +1427,12 @@ void GnapEngine::updatePlatypusIdleSequence2() { if (!_timers[1]) { _timers[1] = getRandom(20) + 30; if (_plat->_idleFacing != kDirNone) { - if (getRandom(10) >= 2 || _platypusSequenceId != 0x7CA) + if (getRandom(10) >= 2 || _plat->_sequenceId != 0x7CA) playPlatypusSequence(0x107CA); else playPlatypusSequence(0x107CC); } else { - if (getRandom(10) >= 2 || _platypusSequenceId != 0x7C9) { + if (getRandom(10) >= 2 || _plat->_sequenceId != 0x7C9) { playPlatypusSequence(0x107C9); } else { playPlatypusSequence(0x107CB); @@ -1908,14 +1458,14 @@ void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { else _plat->_idleFacing = facing; if (_plat->_idleFacing == kDirUnk4) { - _platypusSequenceId = 0x7D1; + _plat->_sequenceId = 0x7D1; } else { - _platypusSequenceId = 0x7C1; + _plat->_sequenceId = 0x7C1; _plat->_idleFacing = kDirNone; } - _platypusId = 20 * _plat->_pos.y; - _platypusSequenceDatNum = 1; - _gameSys->insertSequence(makeRid(1, _platypusSequenceId), 20 * _plat->_pos.y, + _plat->_id = 20 * _plat->_pos.y; + _plat->_sequenceDatNum = 1; + _gameSys->insertSequence(makeRid(1, _plat->_sequenceId), 20 * _plat->_pos.y, 0, 0, kSeqScale, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); } @@ -1935,12 +1485,12 @@ void GnapEngine::initGlobalSceneVars() { void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequenceId2, int sequenceId3) { setGrabCursorSprite(-1); - _gameSys->setAnimation(sequenceId2, _gnapId, 0); - _gameSys->insertSequence(sequenceId2, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + _gameSys->setAnimation(sequenceId2, _gnap->_id, 0); + _gameSys->insertSequence(sequenceId2, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 25), 48 * (_gnap->_pos.y - 8)); - _gnapSequenceId = sequenceId2; - _gnapSequenceDatNum = 0; + _gnap->_sequenceId = sequenceId2; + _gnap->_sequenceDatNum = 0; while (_gameSys->getAnimationStatus(0) != 2) gameUpdateTick(); hideCursor(); @@ -1949,13 +1499,13 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ _gameSys->insertSequence(sequenceId1, 256, 0, 0, kSeqNone, 0, 0, 0); while (_gameSys->getAnimationStatus(0) != 2) gameUpdateTick(); - _gameSys->setAnimation(sequenceId3, _gnapId, 0); - _gameSys->insertSequence(sequenceId3, _gnapId, - makeRid(_gnapSequenceDatNum, _gnapSequenceId), _gnapId, + _gameSys->setAnimation(sequenceId3, _gnap->_id, 0); + _gameSys->insertSequence(sequenceId3, _gnap->_id, + makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 25), 48 * (_gnap->_pos.y - 8)); removeFullScreenSprite(); showCursor(); - _gnapSequenceId = sequenceId3; + _gnap->_sequenceId = sequenceId3; } void GnapEngine::toyUfoSetStatus(int flagNum) { -- cgit v1.2.3 From 00c544f9f815be3121b900ff16572676ee6c4bf5 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 5 May 2016 10:28:58 +0200 Subject: GNAP: More refactoring related to characters (WIP) --- engines/gnap/gnap.cpp | 81 ++++++++++++++++++++------------------------------- 1 file changed, 31 insertions(+), 50 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index c020d752b6..818ac89c4d 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1146,55 +1146,44 @@ void GnapEngine::gnapActionIdle(int sequenceId) { } } -void GnapEngine::playGnapSequence(int sequenceId) { - _timers[2] = getRandom(30) + 20; - _timers[3] = 300; - gnapIdle(); - _gameSys->insertSequence(sequenceId, _gnap->_id, - makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqScale | kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnap->_sequenceId = ridToEntryIndex(sequenceId); - _gnap->_sequenceDatNum = ridToDatIndex(sequenceId); -} - void GnapEngine::playGnapImpossible(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskImpossible, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskImpossible, gridX, gridY) | 0x10000); } void GnapEngine::playGnapScratchingHead(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskScratchingHead, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskScratchingHead, gridX, gridY) | 0x10000); } void GnapEngine::playGnapMoan1(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskMoan1, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskMoan1, gridX, gridY) | 0x10000); } void GnapEngine::playGnapMoan2(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskMoan2, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskMoan2, gridX, gridY) | 0x10000); } void GnapEngine::playGnapBrainPulsating(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskBrainPulsating, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskBrainPulsating, gridX, gridY) | 0x10000); } void GnapEngine::playGnapPullOutDevice(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskPullOutDevice, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskPullOutDevice, gridX, gridY) | 0x10000); } void GnapEngine::playGnapPullOutDeviceNonWorking(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskPullOutDeviceNonWorking, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskPullOutDeviceNonWorking, gridX, gridY) | 0x10000); } void GnapEngine::playGnapUseDevice(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskUseDevice, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskUseDevice, gridX, gridY) | 0x10000); } void GnapEngine::playGnapIdle(int gridX, int gridY) { - playGnapSequence(_gnap->getSequenceId(gskIdle, gridX, gridY) | 0x10000); + _gnap->playSequence(_gnap->getSequenceId(gskIdle, gridX, gridY) | 0x10000); } void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { - playGnapSequence(getGnapShowSequenceId(itemIndex, gridLookX, gridLookY) | 0x10000); + _gnap->playSequence(getGnapShowSequenceId(itemIndex, gridLookX, gridLookY) | 0x10000); } void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int gridLookY) { @@ -1213,23 +1202,23 @@ void GnapEngine::updateGnapIdleSequence() { if (_gnap->_idleFacing == kDirBottomRight) { switch (getRandom(5)) { case 0: - playGnapSequence(0x107A6); + _gnap->playSequence(0x107A6); break; case 1: - playGnapSequence(0x107AA); + _gnap->playSequence(0x107AA); break; case 2: - playGnapSequence(0x10841); + _gnap->playSequence(0x10841); break; default: - playGnapSequence(0x108A2); + _gnap->playSequence(0x108A2); break; } } else if (_gnap->_idleFacing == kDirBottomLeft) { if (getRandom(5) > 2) - playGnapSequence(0x10832); + _gnap->playSequence(0x10832); else - playGnapSequence(0x10842); + _gnap->playSequence(0x10842); } } } else { @@ -1261,9 +1250,9 @@ void GnapEngine::updateGnapIdleSequence2() { _timers[2] = 60; _timers[3] = 300; if (_gnap->_idleFacing == kDirBottomRight) { - playGnapSequence(0x107AA); + _gnap->playSequence(0x107AA); } else if (_gnap->_idleFacing == kDirBottomLeft) { - playGnapSequence(0x10832); + _gnap->playSequence(0x10832); } } } else { @@ -1350,7 +1339,7 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in _gameSys->setAnimation(0, 0, 0); if (_gnap->_pos == Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY)) { _gameSys->setAnimation(platSequenceId, _plat->_id, 1); - playPlatypusSequence(platSequenceId); + _plat->playSequence(platSequenceId); while (_gameSys->getAnimationStatus(1) != 2) { updateMouseCursor(); doCallback(callback); @@ -1366,7 +1355,7 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in void GnapEngine::gnapUseDisguiseOnPlatypus() { _gameSys->setAnimation(0x10846, _gnap->_id, 0); - playGnapSequence(0x10846); + _gnap->playSequence(0x10846); while (_gameSys->getAnimationStatus(0) != 2) gameUpdateTick(); _newSceneNum = 47; @@ -1375,14 +1364,6 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { setFlag(kGFPlatypusDisguised); } -void GnapEngine::playPlatypusSequence(int sequenceId) { - _gameSys->insertSequence(sequenceId, _plat->_id, - makeRid(_plat->_sequenceDatNum, _plat->_sequenceId), _plat->_id, - kSeqScale | kSeqSyncWait, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); - _plat->_sequenceId = ridToEntryIndex(sequenceId); - _plat->_sequenceDatNum = ridToDatIndex(sequenceId); -} - void GnapEngine::updatePlatypusIdleSequence() { if (_plat->_actionStatus < 0 && _gnap->_actionStatus < 0) { if (_timers[0] > 0) { @@ -1392,23 +1373,23 @@ void GnapEngine::updatePlatypusIdleSequence() { if (_plat->_idleFacing != kDirNone) { if (rnd != 0 || _plat->_sequenceId != 0x7CA) { if (rnd != 1 || _plat->_sequenceId != 0x7CA) - playPlatypusSequence(0x107CA); + _plat->playSequence(0x107CA); else - playPlatypusSequence(0x10845); + _plat->playSequence(0x10845); } else { - playPlatypusSequence(0x107CC); + _plat->playSequence(0x107CC); } } else if (rnd != 0 || _plat->_sequenceId != 0x7C9) { if (rnd != 1 || _plat->_sequenceId != 0x7C9) { if (rnd != 2 || _plat->_sequenceId != 0x7C9) - playPlatypusSequence(0x107C9); + _plat->playSequence(0x107C9); else - playPlatypusSequence(0x108A4); + _plat->playSequence(0x108A4); } else { - playPlatypusSequence(0x10844); + _plat->playSequence(0x10844); } } else { - playPlatypusSequence(0x107CB); + _plat->playSequence(0x107CB); } } } else { @@ -1428,14 +1409,14 @@ void GnapEngine::updatePlatypusIdleSequence2() { _timers[1] = getRandom(20) + 30; if (_plat->_idleFacing != kDirNone) { if (getRandom(10) >= 2 || _plat->_sequenceId != 0x7CA) - playPlatypusSequence(0x107CA); + _plat->playSequence(0x107CA); else - playPlatypusSequence(0x107CC); + _plat->playSequence(0x107CC); } else { if (getRandom(10) >= 2 || _plat->_sequenceId != 0x7C9) { - playPlatypusSequence(0x107C9); + _plat->playSequence(0x107C9); } else { - playPlatypusSequence(0x107CB); + _plat->playSequence(0x107CB); } } } -- cgit v1.2.3 From 45f27ea81c4aa3a4fbfa356a51f6b141447158d0 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 5 May 2016 11:58:10 +0200 Subject: GNAP: Even more refactoring related to characters (WIP) --- engines/gnap/gnap.cpp | 150 -------------------------------------------------- 1 file changed, 150 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 818ac89c4d..f72b7c6af3 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1193,90 +1193,6 @@ void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int g playGnapShowItem(_grabCursorSpriteIndex, gridLookX, gridLookY); } -void GnapEngine::updateGnapIdleSequence() { - if (_gnap->_actionStatus < 0) { - if (_timers[2] > 0) { - if (_timers[3] == 0) { - _timers[2] = 60; - _timers[3] = 300; - if (_gnap->_idleFacing == kDirBottomRight) { - switch (getRandom(5)) { - case 0: - _gnap->playSequence(0x107A6); - break; - case 1: - _gnap->playSequence(0x107AA); - break; - case 2: - _gnap->playSequence(0x10841); - break; - default: - _gnap->playSequence(0x108A2); - break; - } - } else if (_gnap->_idleFacing == kDirBottomLeft) { - if (getRandom(5) > 2) - _gnap->playSequence(0x10832); - else - _gnap->playSequence(0x10842); - } - } - } else { - _timers[2] = getRandom(30) + 20; - if (_gnap->_idleFacing == kDirBottomRight) { - _gameSys->insertSequence(0x107BD, _gnap->_id, - makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnap->_sequenceId = 0x7BD; - _gnap->_sequenceDatNum = 1; - } else if (_gnap->_idleFacing == kDirBottomLeft) { - _gameSys->insertSequence(0x107BE, _gnap->_id, - makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnap->_sequenceId = 0x7BE; - _gnap->_sequenceDatNum = 1; - } - } - } else { - _timers[2] = getRandom(30) + 20; - _timers[3] = 300; - } -} - -void GnapEngine::updateGnapIdleSequence2() { - if (_gnap->_actionStatus < 0) { - if (_timers[2] > 0) { - if (_timers[3] == 0) { - _timers[2] = 60; - _timers[3] = 300; - if (_gnap->_idleFacing == kDirBottomRight) { - _gnap->playSequence(0x107AA); - } else if (_gnap->_idleFacing == kDirBottomLeft) { - _gnap->playSequence(0x10832); - } - } - } else { - _timers[2] = getRandom(30) + 20; - if (_gnap->_idleFacing == kDirBottomRight) { - _gameSys->insertSequence(0x107BD, _gnap->_id, - makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnap->_sequenceId = 0x7BD; - _gnap->_sequenceDatNum = 1; - } else if (_gnap->_idleFacing == kDirBottomLeft) { - _gameSys->insertSequence(0x107BE, _gnap->_id, - makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqSyncWait, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); - _gnap->_sequenceId = 0x7BE; - _gnap->_sequenceDatNum = 1; - } - } - } else { - _timers[2] = getRandom(30) + 20; - _timers[3] = 300; - } -} - bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gridY1, int gridX2, int gridY2) { if (_mouseClickState._left && someStatus == _gnap->_actionStatus) { _isLeavingScene = false; @@ -1364,72 +1280,6 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { setFlag(kGFPlatypusDisguised); } -void GnapEngine::updatePlatypusIdleSequence() { - if (_plat->_actionStatus < 0 && _gnap->_actionStatus < 0) { - if (_timers[0] > 0) { - if (_timers[1] == 0) { - _timers[1] = getRandom(20) + 30; - int rnd = getRandom(10); - if (_plat->_idleFacing != kDirNone) { - if (rnd != 0 || _plat->_sequenceId != 0x7CA) { - if (rnd != 1 || _plat->_sequenceId != 0x7CA) - _plat->playSequence(0x107CA); - else - _plat->playSequence(0x10845); - } else { - _plat->playSequence(0x107CC); - } - } else if (rnd != 0 || _plat->_sequenceId != 0x7C9) { - if (rnd != 1 || _plat->_sequenceId != 0x7C9) { - if (rnd != 2 || _plat->_sequenceId != 0x7C9) - _plat->playSequence(0x107C9); - else - _plat->playSequence(0x108A4); - } else { - _plat->playSequence(0x10844); - } - } else { - _plat->playSequence(0x107CB); - } - } - } else { - _timers[0] = getRandom(75) + 75; - platypusMakeRoom(); - } - } else { - _timers[0] = 100; - _timers[1] = 35; - } -} - -void GnapEngine::updatePlatypusIdleSequence2() { - if (_plat->_actionStatus < 0 && _gnap->_actionStatus < 0) { - if (_timers[0]) { - if (!_timers[1]) { - _timers[1] = getRandom(20) + 30; - if (_plat->_idleFacing != kDirNone) { - if (getRandom(10) >= 2 || _plat->_sequenceId != 0x7CA) - _plat->playSequence(0x107CA); - else - _plat->playSequence(0x107CC); - } else { - if (getRandom(10) >= 2 || _plat->_sequenceId != 0x7C9) { - _plat->playSequence(0x107C9); - } else { - _plat->playSequence(0x107CB); - } - } - } - } else { - _timers[0] = getRandom(75) + 75; - platypusMakeRoom(); - } - } else { - _timers[0] = 100; - _timers[1] = 35; - } -} - void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { _timers[0] = 50; _timers[1] = 20; -- cgit v1.2.3 From 38a83d1770a35b82cdfd7b04c19fcccb174b157f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 5 May 2016 13:36:35 +0200 Subject: GNAP: More character refactoring (WIP) --- engines/gnap/gnap.cpp | 46 ++-------------------------------------------- 1 file changed, 2 insertions(+), 44 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index f72b7c6af3..78c7617c73 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1129,7 +1129,7 @@ void GnapEngine::gnapIdle() { _gnap->_sequenceId == 0x831 || _gnap->_sequenceId == 0x89A)) { _gameSys->insertSequence(_gnap->getSequenceId(gskIdle, 0, 0) | 0x10000, _gnap->_id, makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); + kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnap->_gridX, 48 * _gnap->_pos.y - _gnap->_gridY); _gnap->_sequenceId = _gnap->getSequenceId(gskIdle, 0, 0); _gnap->_sequenceDatNum = 1; } @@ -1140,7 +1140,7 @@ void GnapEngine::gnapActionIdle(int sequenceId) { ridToEntryIndex(sequenceId) == _gnap->_sequenceId) { _gameSys->insertSequence(_gnap->getSequenceId(gskIdle, 0, 0) | 0x10000, _gnap->_id, makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); + kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnap->_gridX, 48 * _gnap->_pos.y - _gnap->_gridY); _gnap->_sequenceId = _gnap->getSequenceId(gskIdle, 0, 0); _gnap->_sequenceDatNum = 1; } @@ -1207,27 +1207,6 @@ bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gr return false; } -void GnapEngine::initGnapPos(int gridX, int gridY, Facing facing) { - _timers[2] = 30; - _timers[3] = 300; - _gnap->_pos = Common::Point(gridX, gridY); - if (facing == kDirNone) - _gnap->_idleFacing = kDirBottomRight; - else - _gnap->_idleFacing = facing; - if (_gnap->_idleFacing == kDirBottomLeft) { - _gnap->_sequenceId = 0x7B8; - } else { - _gnap->_sequenceId = 0x7B5; - _gnap->_idleFacing = kDirBottomRight; - } - _gnap->_id = 20 * _gnap->_pos.y; - _gnap->_sequenceDatNum = 1; - _gameSys->insertSequence(makeRid(1, _gnap->_sequenceId), 20 * _gnap->_pos.y, - 0, 0, - kSeqScale, 0, 75 * _gnap->_pos.x - _gnapGridX, 48 * _gnap->_pos.y - _gnapGridY); -} - void GnapEngine::doCallback(int callback) { switch (callback) { case 8: @@ -1280,27 +1259,6 @@ void GnapEngine::gnapUseDisguiseOnPlatypus() { setFlag(kGFPlatypusDisguised); } -void GnapEngine::initPlatypusPos(int gridX, int gridY, Facing facing) { - _timers[0] = 50; - _timers[1] = 20; - _plat->_pos = Common::Point(gridX, gridY); - if (facing == kDirNone) - _plat->_idleFacing = kDirNone; - else - _plat->_idleFacing = facing; - if (_plat->_idleFacing == kDirUnk4) { - _plat->_sequenceId = 0x7D1; - } else { - _plat->_sequenceId = 0x7C1; - _plat->_idleFacing = kDirNone; - } - _plat->_id = 20 * _plat->_pos.y; - _plat->_sequenceDatNum = 1; - _gameSys->insertSequence(makeRid(1, _plat->_sequenceId), 20 * _plat->_pos.y, - 0, 0, - kSeqScale, 0, 75 * _plat->_pos.x - _platGridX, 48 * _plat->_pos.y - _platGridY); -} - //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { -- cgit v1.2.3 From 81074f4503fbb09903c62f5dbb857c741c75cfc3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 7 May 2016 12:29:18 +0200 Subject: GNAP: use Common::Point for gnapWalkTo --- engines/gnap/gnap.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 78c7617c73..36d288927d 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1189,7 +1189,7 @@ void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int gridLookY) { if (_plat->_pos.x == gridX && _plat->_pos.y == gridY) platypusMakeRoom(); - gnapWalkTo(gridX, gridY, -1, -1, 1); + gnapWalkTo(Common::Point(gridX, gridY), -1, -1, 1); playGnapShowItem(_grabCursorSpriteIndex, gridLookX, gridLookY); } @@ -1199,7 +1199,7 @@ bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gr _gameSys->setAnimation(0, 0, animationIndex); _gnap->_actionStatus = -1; _plat->_actionStatus = -1; - gnapWalkTo(gridX1, gridY1, -1, -1, 1); + gnapWalkTo(Common::Point(gridX1, gridY1), -1, -1, 1); platypusWalkTo(gridX2, gridY2, -1, -1, 1); _mouseClickState._left = false; return true; @@ -1222,17 +1222,21 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in if (_gnap->_actionStatus <= -1 && _plat->_actionStatus <= -1) { _gnap->_actionStatus = 100; - if (isPointBlocked(_plat->_pos.x + gridX, _plat->_pos.y + gridY) && (_gnap->_pos != Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY))) + Common::Point checkPt = _plat->_pos + Common::Point(gridX, gridY); + if (isPointBlocked(checkPt) && (_gnap->_pos != checkPt)) { platypusWalkStep(); - if (!isPointBlocked(_plat->_pos.x + gridX, _plat->_pos.y + gridY) && (_gnap->_pos != Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY))) { - gnapWalkTo(_plat->_pos.x + gridX, _plat->_pos.y + gridY, 0, 0x107B9, 1); + checkPt = _plat->_pos + Common::Point(gridX, gridY); + } + + if (!isPointBlocked(checkPt) && (_gnap->_pos != checkPt)) { + gnapWalkTo(checkPt, 0, 0x107B9, 1); while (_gameSys->getAnimationStatus(0) != 2) { updateMouseCursor(); doCallback(callback); gameUpdateTick(); } _gameSys->setAnimation(0, 0, 0); - if (_gnap->_pos == Common::Point(_plat->_pos.x + gridX, _plat->_pos.y + gridY)) { + if (_gnap->_pos == _plat->_pos + Common::Point(gridX, gridY)) { _gameSys->setAnimation(platSequenceId, _plat->_id, 1); _plat->playSequence(platSequenceId); while (_gameSys->getAnimationStatus(1) != 2) { -- cgit v1.2.3 From b3bf17a315092b38c675360dcf360a54c054d791 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 7 May 2016 15:52:56 +0200 Subject: GNAP: Use Common::Point with platypusWalkTo --- engines/gnap/gnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 36d288927d..9f1ae26150 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1200,7 +1200,7 @@ bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gr _gnap->_actionStatus = -1; _plat->_actionStatus = -1; gnapWalkTo(Common::Point(gridX1, gridY1), -1, -1, 1); - platypusWalkTo(gridX2, gridY2, -1, -1, 1); + platypusWalkTo(Common::Point(gridX2, gridY2), -1, -1, 1); _mouseClickState._left = false; return true; } -- cgit v1.2.3 From 951fab48530ab6b411ce396f459bf66d120ce05d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 7 May 2016 22:09:25 +0200 Subject: GNAP: Move walkTo and walkStep to Character --- engines/gnap/gnap.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 9f1ae26150..42d5277dc6 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1189,7 +1189,7 @@ void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int gridLookY) { if (_plat->_pos.x == gridX && _plat->_pos.y == gridY) platypusMakeRoom(); - gnapWalkTo(Common::Point(gridX, gridY), -1, -1, 1); + _gnap->walkTo(Common::Point(gridX, gridY), -1, -1, 1); playGnapShowItem(_grabCursorSpriteIndex, gridLookX, gridLookY); } @@ -1199,8 +1199,8 @@ bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gr _gameSys->setAnimation(0, 0, animationIndex); _gnap->_actionStatus = -1; _plat->_actionStatus = -1; - gnapWalkTo(Common::Point(gridX1, gridY1), -1, -1, 1); - platypusWalkTo(Common::Point(gridX2, gridY2), -1, -1, 1); + _gnap->walkTo(Common::Point(gridX1, gridY1), -1, -1, 1); + _plat->walkTo(Common::Point(gridX2, gridY2), -1, -1, 1); _mouseClickState._left = false; return true; } @@ -1224,12 +1224,12 @@ bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, in _gnap->_actionStatus = 100; Common::Point checkPt = _plat->_pos + Common::Point(gridX, gridY); if (isPointBlocked(checkPt) && (_gnap->_pos != checkPt)) { - platypusWalkStep(); + _plat->walkStep(); checkPt = _plat->_pos + Common::Point(gridX, gridY); } if (!isPointBlocked(checkPt) && (_gnap->_pos != checkPt)) { - gnapWalkTo(checkPt, 0, 0x107B9, 1); + _gnap->walkTo(checkPt, 0, 0x107B9, 1); while (_gameSys->getAnimationStatus(0) != 2) { updateMouseCursor(); doCallback(callback); -- cgit v1.2.3 From 8a725082a512d080ff394ee38370c96c6f13ec0b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 7 May 2016 22:59:59 +0200 Subject: GNAP: Move more functions to PlayerGnap --- engines/gnap/gnap.cpp | 209 +------------------------------------------------- 1 file changed, 2 insertions(+), 207 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 42d5277dc6..e40d50e621 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -941,211 +941,6 @@ void GnapEngine::deleteSurface(Graphics::Surface **surface) { } } -int GnapEngine::getGnapShowSequenceId(int index, int gridX, int gridY) { - int sequenceId; - Facing facing = _gnap->_idleFacing; - - if (gridY > 0 && gridX > 0) { - if (_gnap->_pos.y > gridY) { - if (_gnap->_pos.x > gridX) - _gnap->_idleFacing = kDirUpLeft; - else - _gnap->_idleFacing = kDirUpRight; - } else { - if (_gnap->_pos.x > gridX) - _gnap->_idleFacing = kDirUpLeft; - else - _gnap->_idleFacing = kDirUpRight; - } - } else if (_gnap->_idleFacing != kDirBottomRight && _gnap->_idleFacing != kDirUpRight) { - _gnap->_idleFacing = kDirUpLeft; - } else { - _gnap->_idleFacing = kDirUpRight; - } - - switch (index) { - case 0: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x8A0; - else - sequenceId = 0x8A1; - break; - case 1: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x880; - else - sequenceId = 0x895; - break; - case 2: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x884; - else - sequenceId = 0x899; - break; - //Skip 3 - case 4: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x881; - else - sequenceId = 0x896; - break; - case 5: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x883; - else - sequenceId = 0x898; - break; - case 6: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87E; - else - sequenceId = 0x893; - break; - case 7: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x848; - else - sequenceId = 0x890; - break; - case 8: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87D; - else - sequenceId = 0x892; - break; - case 9: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x882; - else - sequenceId = 0x897; - break; - case 10: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87C; - else - sequenceId = 0x891; - break; - case 11: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87C; - else - sequenceId = 0x891; - break; - case 12: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87D; - else - sequenceId = 0x892; - break; - case 13: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x888; - else - sequenceId = 0x89D; - break; - case 14: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87F; - else - sequenceId = 0x894; - break; - case 15: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87B; - else - sequenceId = 0x8A3; - break; - case 16: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x877; - else - sequenceId = 0x88C; - break; - //Skip 17 - case 18: - sequenceId = 0x887; - break; - case 19: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87A; - else - sequenceId = 0x88F; - break; - case 20: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x878; - else - sequenceId = 0x88D; - break; - case 21: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x879; - else - sequenceId = 0x88E; - break; - case 22: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x88A; - else - sequenceId = 0x89F; - break; - case 23: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x889; - else - sequenceId = 0x89E; - break; - case 24: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x886; - else - sequenceId = 0x89B; - break; - case 25: - if (_gnap->_idleFacing == kDirUpRight) - sequenceId = 0x87A; - else - sequenceId = 0x88F; - break; - //Skip 26 - //Skip 27 - //Skip 28 - //Skip 29 - default: - _gnap->_idleFacing = facing; - sequenceId = _gnap->getSequenceId(gskImpossible, 0, 0); - break; - } - return sequenceId; -} - -void GnapEngine::gnapIdle() { - if (_gnap->_sequenceId != -1 && _gnap->_sequenceDatNum == 1 && - (_gnap->_sequenceId == 0x7A6 || _gnap->_sequenceId == 0x7AA || - _gnap->_sequenceId == 0x832 || _gnap->_sequenceId == 0x841 || - _gnap->_sequenceId == 0x842 || _gnap->_sequenceId == 0x8A2 || - _gnap->_sequenceId == 0x833 || _gnap->_sequenceId == 0x834 || - _gnap->_sequenceId == 0x885 || _gnap->_sequenceId == 0x7A8 || - _gnap->_sequenceId == 0x831 || _gnap->_sequenceId == 0x89A)) { - _gameSys->insertSequence(_gnap->getSequenceId(gskIdle, 0, 0) | 0x10000, _gnap->_id, - makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnap->_gridX, 48 * _gnap->_pos.y - _gnap->_gridY); - _gnap->_sequenceId = _gnap->getSequenceId(gskIdle, 0, 0); - _gnap->_sequenceDatNum = 1; - } -} - -void GnapEngine::gnapActionIdle(int sequenceId) { - if (_gnap->_sequenceId != -1 && ridToDatIndex(sequenceId) == _gnap->_sequenceDatNum && - ridToEntryIndex(sequenceId) == _gnap->_sequenceId) { - _gameSys->insertSequence(_gnap->getSequenceId(gskIdle, 0, 0) | 0x10000, _gnap->_id, - makeRid(_gnap->_sequenceDatNum, _gnap->_sequenceId), _gnap->_id, - kSeqSyncExists, 0, 75 * _gnap->_pos.x - _gnap->_gridX, 48 * _gnap->_pos.y - _gnap->_gridY); - _gnap->_sequenceId = _gnap->getSequenceId(gskIdle, 0, 0); - _gnap->_sequenceDatNum = 1; - } -} - void GnapEngine::playGnapImpossible(int gridX, int gridY) { _gnap->playSequence(_gnap->getSequenceId(gskImpossible, gridX, gridY) | 0x10000); } @@ -1183,12 +978,12 @@ void GnapEngine::playGnapIdle(int gridX, int gridY) { } void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { - _gnap->playSequence(getGnapShowSequenceId(itemIndex, gridLookX, gridLookY) | 0x10000); + _gnap->playSequence(_gnap->getShowSequenceId(itemIndex, gridLookX, gridLookY) | 0x10000); } void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int gridLookY) { if (_plat->_pos.x == gridX && _plat->_pos.y == gridY) - platypusMakeRoom(); + _plat->makeRoom(); _gnap->walkTo(Common::Point(gridX, gridY), -1, -1, 1); playGnapShowItem(_grabCursorSpriteIndex, gridLookX, gridLookY); } -- cgit v1.2.3 From a508936349cd29ef2d89735699fac0b933ff9b7d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 7 May 2016 23:18:36 +0200 Subject: GNAP: Move Gnap action functions to PlayerGnap --- engines/gnap/gnap.cpp | 47 ----------------------------------------------- 1 file changed, 47 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index e40d50e621..3b6f84af37 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -941,53 +941,6 @@ void GnapEngine::deleteSurface(Graphics::Surface **surface) { } } -void GnapEngine::playGnapImpossible(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskImpossible, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapScratchingHead(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskScratchingHead, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapMoan1(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskMoan1, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapMoan2(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskMoan2, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapBrainPulsating(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskBrainPulsating, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapPullOutDevice(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskPullOutDevice, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapPullOutDeviceNonWorking(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskPullOutDeviceNonWorking, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapUseDevice(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskUseDevice, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapIdle(int gridX, int gridY) { - _gnap->playSequence(_gnap->getSequenceId(gskIdle, gridX, gridY) | 0x10000); -} - -void GnapEngine::playGnapShowItem(int itemIndex, int gridLookX, int gridLookY) { - _gnap->playSequence(_gnap->getShowSequenceId(itemIndex, gridLookX, gridLookY) | 0x10000); -} - -void GnapEngine::playGnapShowCurrItem(int gridX, int gridY, int gridLookX, int gridLookY) { - if (_plat->_pos.x == gridX && _plat->_pos.y == gridY) - _plat->makeRoom(); - _gnap->walkTo(Common::Point(gridX, gridY), -1, -1, 1); - playGnapShowItem(_grabCursorSpriteIndex, gridLookX, gridLookY); -} - bool GnapEngine::testWalk(int animationIndex, int someStatus, int gridX1, int gridY1, int gridX2, int gridY2) { if (_mouseClickState._left && someStatus == _gnap->_actionStatus) { _isLeavingScene = false; -- cgit v1.2.3 From 33ca09ae12a09df7d1367122eb8461f7b7a74572 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 7 May 2016 23:59:08 +0200 Subject: GNAP: Remove useless redirections, move two more functions --- engines/gnap/gnap.cpp | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 3b6f84af37..518dda26d2 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -965,52 +965,6 @@ void GnapEngine::doCallback(int callback) { } } -bool GnapEngine::gnapPlatypusAction(int gridX, int gridY, int platSequenceId, int callback) { - bool result = false; - - if (_gnap->_actionStatus <= -1 && _plat->_actionStatus <= -1) { - _gnap->_actionStatus = 100; - Common::Point checkPt = _plat->_pos + Common::Point(gridX, gridY); - if (isPointBlocked(checkPt) && (_gnap->_pos != checkPt)) { - _plat->walkStep(); - checkPt = _plat->_pos + Common::Point(gridX, gridY); - } - - if (!isPointBlocked(checkPt) && (_gnap->_pos != checkPt)) { - _gnap->walkTo(checkPt, 0, 0x107B9, 1); - while (_gameSys->getAnimationStatus(0) != 2) { - updateMouseCursor(); - doCallback(callback); - gameUpdateTick(); - } - _gameSys->setAnimation(0, 0, 0); - if (_gnap->_pos == _plat->_pos + Common::Point(gridX, gridY)) { - _gameSys->setAnimation(platSequenceId, _plat->_id, 1); - _plat->playSequence(platSequenceId); - while (_gameSys->getAnimationStatus(1) != 2) { - updateMouseCursor(); - doCallback(callback); - gameUpdateTick(); - } - result = true; - } - } - _gnap->_actionStatus = -1; - } - return result; -} - -void GnapEngine::gnapUseDisguiseOnPlatypus() { - _gameSys->setAnimation(0x10846, _gnap->_id, 0); - _gnap->playSequence(0x10846); - while (_gameSys->getAnimationStatus(0) != 2) - gameUpdateTick(); - _newSceneNum = 47; - _isLeavingScene = true; - _sceneDone = true; - setFlag(kGFPlatypusDisguised); -} - //////////////////////////////////////////////////////////////////////////////// void GnapEngine::initGlobalSceneVars() { -- cgit v1.2.3 From f467db5ed23cdaa96fb0601ae1b05853f44e3356 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 12 May 2016 00:32:31 +0200 Subject: GNAP: Add music when game is paused --- engines/gnap/gnap.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 518dda26d2..24de6ea40d 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -99,10 +99,12 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : Engine::syncSoundSettings(); _scene = nullptr; + _music = nullptr; } GnapEngine::~GnapEngine() { delete _random; + delete _music; } Common::Error GnapEngine::run() { @@ -263,7 +265,7 @@ void GnapEngine::pauseGame() { _gameSys->insertSpriteDrawItem(_pauseSprite, (800 - _pauseSprite->w) / 2, (600 - _pauseSprite->h) / 2, 356); _lastUpdateClock = 0; gameUpdateTick(); - // TODO playMidi("pause.mid"); + playMidi("pause.mid"); _isPaused = true; } } @@ -275,7 +277,7 @@ void GnapEngine::resumeGame() { _lastUpdateClock = 0; gameUpdateTick(); deleteSurface(&_pauseSprite); - // TODO stopMidi(); + stopMidi(); _isPaused = false; clearAllKeyStatus1(); _mouseClickState._left = false; @@ -1128,4 +1130,19 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, } } +void GnapEngine::playMidi(const char *name) { + if (_music) + return; + + _music = new MusicPlayer(name); + _music->playSMF(true); +} + +void GnapEngine::stopMidi() { + if (_music) { + _music->stop(); + delete _music; + _music = nullptr; + } +} } // End of namespace Gnap -- cgit v1.2.3 From af1cf151de9ffc9d040a4e52b57fe3dfd754969b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 12 May 2016 07:53:06 +0200 Subject: GNAP: Use Common::Rect for hotspots --- engines/gnap/gnap.cpp | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 24de6ea40d..d9c0971d8c 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -324,26 +324,24 @@ void GnapEngine::delayTicksCursor(int a1) { void GnapEngine::setHotspot(int index, int16 x1, int16 y1, int16 x2, int16 y2, uint16 flags, int16 walkX, int16 walkY) { - _hotspots[index]._x1 = x1; - _hotspots[index]._y1 = y1; - _hotspots[index]._x2 = x2; - _hotspots[index]._y2 = y2; + _hotspots[index]._rect = Common::Rect(x1, y1, x2, y2); _hotspots[index]._flags = flags; _hotspots[index]._id = index; _hotspotsWalkPos[index].x = walkX; _hotspotsWalkPos[index].y = walkY; } -int GnapEngine::getHotspotIndexAtPos(int16 x, int16 y) { - for (int i = 0; i < _hotspotsCount; ++i) - if (!_hotspots[i].isFlag(SF_DISABLED) && _hotspots[i].isPointInside(x, y)) +int GnapEngine::getHotspotIndexAtPos(Common::Point pos) { + for (int i = 0; i < _hotspotsCount; ++i) { + if (!_hotspots[i].isFlag(SF_DISABLED) && _hotspots[i].isPointInside(pos)) return i; + } return -1; } void GnapEngine::updateCursorByHotspot() { if (!_isWaiting) { - int hotspotIndex = getHotspotIndexAtPos(_mouseX, _mouseY); + int hotspotIndex = getHotspotIndexAtPos(Common::Point(_mouseX, _mouseY)); if (_debugger->_showHotspotNumber) { // NOTE This causes some display glitches so don't worry @@ -377,10 +375,8 @@ void GnapEngine::updateCursorByHotspot() { setCursor(kDisabledCursors[_verbCursor]); } // Update platypus hotspot - _hotspots[0]._x1 = _gridMinX + 75 * _plat->_pos.x - 30; - _hotspots[0]._y1 = _gridMinY + 48 * _plat->_pos.y - 100; - _hotspots[0]._x2 = _gridMinX + 75 * _plat->_pos.x + 30; - _hotspots[0]._y2 = _gridMinY + 48 * _plat->_pos.y; + _hotspots[0]._rect = Common::Rect(_gridMinX + 75 * _plat->_pos.x - 30, _gridMinY + 48 * _plat->_pos.y - 100 + , _gridMinX + 75 * _plat->_pos.x + 30, _gridMinY + 48 * _plat->_pos.y); } int GnapEngine::getClickedHotspotId() { @@ -388,7 +384,7 @@ int GnapEngine::getClickedHotspotId() { if (_isWaiting) _mouseClickState._left = false; else if (_mouseClickState._left) { - int hotspotIndex = getHotspotIndexAtPos(_leftClickMouseX, _leftClickMouseY); + int hotspotIndex = getHotspotIndexAtPos(Common::Point(_leftClickMouseX, _leftClickMouseY)); if (hotspotIndex >= 0) { _mouseClickState._left = false; _timers[3] = 300; @@ -578,10 +574,8 @@ void GnapEngine::setDeviceHotspot(int hotspotIndex, int x1, int y1, int x2, int _deviceY1 = 14; if (y2 == -1) _deviceY2 = 79; - _hotspots[hotspotIndex]._x1 = _deviceX1; - _hotspots[hotspotIndex]._y1 = _deviceY1; - _hotspots[hotspotIndex]._x2 = _deviceX2; - _hotspots[hotspotIndex]._y2 = _deviceY2; + + _hotspots[hotspotIndex]._rect = Common::Rect(_deviceX1, _deviceY1, _deviceX2, _deviceY2); _hotspots[hotspotIndex]._flags = SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; _hotspots[hotspotIndex]._id = hotspotIndex; } -- cgit v1.2.3 From 9c0808237c3c4cb8a93a31cad8bf939396415fd1 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 12 May 2016 07:59:20 +0200 Subject: GNAP: Remove _id from HotSpot structure --- engines/gnap/gnap.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index d9c0971d8c..3b5d1496e0 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -326,7 +326,6 @@ void GnapEngine::setHotspot(int index, int16 x1, int16 y1, int16 x2, int16 y2, u int16 walkX, int16 walkY) { _hotspots[index]._rect = Common::Rect(x1, y1, x2, y2); _hotspots[index]._flags = flags; - _hotspots[index]._id = index; _hotspotsWalkPos[index].x = walkX; _hotspotsWalkPos[index].y = walkY; } @@ -388,7 +387,7 @@ int GnapEngine::getClickedHotspotId() { if (hotspotIndex >= 0) { _mouseClickState._left = false; _timers[3] = 300; - result = _hotspots[hotspotIndex]._id; + result = hotspotIndex; } } return result; @@ -577,7 +576,6 @@ void GnapEngine::setDeviceHotspot(int hotspotIndex, int x1, int y1, int x2, int _hotspots[hotspotIndex]._rect = Common::Rect(_deviceX1, _deviceY1, _deviceX2, _deviceY2); _hotspots[hotspotIndex]._flags = SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; - _hotspots[hotspotIndex]._id = hotspotIndex; } int GnapEngine::getSequenceTotalDuration(int resourceId) { -- cgit v1.2.3 From 55162fb7ca2accfee74a6eb57cadfbf57962c161 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 12 May 2016 20:33:51 +0200 Subject: GNAP: Simplify some calls of _hotspotWalkPos --- engines/gnap/gnap.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 3b5d1496e0..dacf360eda 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -326,8 +326,7 @@ void GnapEngine::setHotspot(int index, int16 x1, int16 y1, int16 x2, int16 y2, u int16 walkX, int16 walkY) { _hotspots[index]._rect = Common::Rect(x1, y1, x2, y2); _hotspots[index]._flags = flags; - _hotspotsWalkPos[index].x = walkX; - _hotspotsWalkPos[index].y = walkY; + _hotspotsWalkPos[index] = Common::Point(walkX, walkY); } int GnapEngine::getHotspotIndexAtPos(Common::Point pos) { -- cgit v1.2.3 From 52374bfe7b3110d4a4c2b0cf116ea7fe476f4f7d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 16 May 2016 20:43:55 +0200 Subject: GNAP: Load TTF from the executable (optional) --- engines/gnap/gnap.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index dacf360eda..21329fefee 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -20,6 +20,7 @@ * */ +#include "graphics/cursorman.h" #include "gnap/gnap.h" #include "gnap/datarchive.h" #include "gnap/gamesys.h" @@ -28,14 +29,10 @@ #include "common/config-manager.h" #include "common/debug-channels.h" -#include "common/error.h" -#include "common/fs.h" #include "common/timer.h" #include "engines/util.h" -#include "graphics/cursorman.h" - namespace Gnap { static const int kCursors[] = { @@ -143,6 +140,15 @@ Common::Error GnapEngine::run() { if (!_exe->loadFromEXE("ufos.exe")) error("Could not load ufos.exe"); +#ifdef USE_FREETYPE2 + Common::SeekableReadStream *stream = _exe->getResource(Common::kPEFont, 2000); + _font = Graphics::loadTTFFont(*stream, 24); + if (!_font) + warning("Unable to load font"); +#else + _font = nullptr; +#endif + _dat = new DatManager(); _spriteCache = new SpriteCache(_dat); _soundCache = new SoundCache(_dat); @@ -167,6 +173,7 @@ Common::Error GnapEngine::run() { delete _spriteCache; delete _dat; delete _debugger; + delete _font; delete _exe; return Common::kNoError; @@ -342,10 +349,13 @@ void GnapEngine::updateCursorByHotspot() { int hotspotIndex = getHotspotIndexAtPos(Common::Point(_mouseX, _mouseY)); if (_debugger->_showHotspotNumber) { - // NOTE This causes some display glitches so don't worry + // NOTE This causes some display glitches char t[256]; - sprintf(t, "hotspot = %d", hotspotIndex); - _gameSys->fillSurface(0, 10, 10, 80, 16, 0, 0, 0); + sprintf(t, "hotspot = %2d", hotspotIndex); + if (!_font) + _gameSys->fillSurface(0, 10, 10, 80, 16, 0, 0, 0); + else + _gameSys->fillSurface(0, 8, 9, _font->getStringWidth(t) + 10, _font->getFontHeight() + 2, 0, 0, 0); _gameSys->drawTextToSurface(0, 10, 10, 255, 255, 255, t); } -- cgit v1.2.3 From 06f3dc29731cdfc0521929fb4c20c61e1d2c159d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 16 May 2016 23:24:02 +0200 Subject: GNAP: Fix a couple of unintialized variables --- engines/gnap/gnap.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 21329fefee..a061be068c 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -97,6 +97,11 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : Engine::syncSoundSettings(); _scene = nullptr; _music = nullptr; + + _wasSavegameLoaded = false; + for (int i = 0; i < kMaxTimers; ++i) + _savedTimers[i] = _timers[i] = 0; + } GnapEngine::~GnapEngine() { -- cgit v1.2.3 From e280c833c7cc65c263b05532533e5e010a0236c3 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 16 May 2016 23:34:58 +0200 Subject: GNAP: Enforce the use of nullptr in function calls --- engines/gnap/gnap.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index a061be068c..045ed4f9ef 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -358,10 +358,10 @@ void GnapEngine::updateCursorByHotspot() { char t[256]; sprintf(t, "hotspot = %2d", hotspotIndex); if (!_font) - _gameSys->fillSurface(0, 10, 10, 80, 16, 0, 0, 0); + _gameSys->fillSurface(nullptr, 10, 10, 80, 16, 0, 0, 0); else - _gameSys->fillSurface(0, 8, 9, _font->getStringWidth(t) + 10, _font->getFontHeight() + 2, 0, 0, 0); - _gameSys->drawTextToSurface(0, 10, 10, 255, 255, 255, t); + _gameSys->fillSurface(nullptr, 8, 9, _font->getStringWidth(t) + 10, _font->getFontHeight() + 2, 0, 0, 0); + _gameSys->drawTextToSurface(nullptr, 10, 10, 255, 255, 255, t); } if (hotspotIndex < 0) @@ -906,15 +906,15 @@ void GnapEngine::updateIdleTimer() { void GnapEngine::screenEffect(int dir, byte r, byte g, byte b) { if (dir == 1) { for (int y = 300; y < 600; y += 50) { - _gameSys->fillSurface(0, 0, y, 800, 50, r, g, b); - _gameSys->fillSurface(0, 0, 549 - y + 1, 800, 50, r, g, b); + _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); + _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); gameUpdateTick(); _system->delayMillis(50); } } else { for (int y = 0; y < 300; y += 50) { - _gameSys->fillSurface(0, 0, y, 800, 50, r, g, b); - _gameSys->fillSurface(0, 0, 549 - y + 1, 800, 50, r, g, b); + _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); + _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); gameUpdateTick(); _system->delayMillis(50); } -- cgit v1.2.3 From 090c178214867009ded91ba7cab4b658da3e7b6d Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 16 May 2016 23:38:49 +0200 Subject: GNAP: Fix another valgrind error --- engines/gnap/gnap.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 045ed4f9ef..2a143ad141 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -101,7 +101,8 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _wasSavegameLoaded = false; for (int i = 0; i < kMaxTimers; ++i) _savedTimers[i] = _timers[i] = 0; - + + _isWaiting = false; } GnapEngine::~GnapEngine() { -- cgit v1.2.3 From 63589812018eafc0c7ed4b7a8b77b7e048db10ad Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 17 May 2016 07:09:42 +0200 Subject: GNAP: USe Common::Point for mouse position, initialize some more variables --- engines/gnap/gnap.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 2a143ad141..21f44c3e59 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -103,6 +103,10 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _savedTimers[i] = _timers[i] = 0; _isWaiting = false; + _sceneWaiting = false; + + _mousePos = Common::Point(0, 0); + _currGrabCursorX = _currGrabCursorY = 0; } GnapEngine::~GnapEngine() { @@ -205,8 +209,7 @@ void GnapEngine::updateEvents() { _keyDownState[event.kbd.keycode] = 0; break; case Common::EVENT_MOUSEMOVE: - _mouseX = event.mouse.x; - _mouseY = event.mouse.y; + _mousePos = event.mouse; break; case Common::EVENT_LBUTTONUP: _mouseButtonState._left = false; @@ -352,7 +355,7 @@ int GnapEngine::getHotspotIndexAtPos(Common::Point pos) { void GnapEngine::updateCursorByHotspot() { if (!_isWaiting) { - int hotspotIndex = getHotspotIndexAtPos(Common::Point(_mouseX, _mouseY)); + int hotspotIndex = getHotspotIndexAtPos(_mousePos); if (_debugger->_showHotspotNumber) { // NOTE This causes some display glitches @@ -474,8 +477,8 @@ void GnapEngine::setGrabCursorSprite(int index) { void GnapEngine::createGrabCursorSprite(int spriteId) { _grabCursorSprite = _gameSys->createSurface(spriteId); _gameSys->insertSpriteDrawItem(_grabCursorSprite, - _mouseX - (_grabCursorSprite->w / 2), - _mouseY - (_grabCursorSprite->h / 2), + _mousePos.x - (_grabCursorSprite->w / 2), + _mousePos.y - (_grabCursorSprite->h / 2), 300); delayTicks(5); } @@ -491,8 +494,8 @@ void GnapEngine::freeGrabCursorSprite() { void GnapEngine::updateGrabCursorSprite(int x, int y) { if (_grabCursorSprite) { - int newGrabCursorX = _mouseX - (_grabCursorSprite->w / 2) - x; - int newGrabCursorY = _mouseY - (_grabCursorSprite->h / 2) - y; + int newGrabCursorX = _mousePos.x - (_grabCursorSprite->w / 2) - x; + int newGrabCursorY = _mousePos.y - (_grabCursorSprite->h / 2) - y; if (_currGrabCursorX != newGrabCursorX || _currGrabCursorY != newGrabCursorY) { _currGrabCursorX = newGrabCursorX; _currGrabCursorY = newGrabCursorY; -- cgit v1.2.3 From 4c37381a8eb83012cf4d580548b62f8cce106d80 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 17 May 2016 22:05:35 +0200 Subject: GNAP: Add missing stars in header, change include guard name in gnap.h --- engines/gnap/gnap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 21f44c3e59..4de50ee38f 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -8,12 +8,12 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -- cgit v1.2.3 From 931846182baf040101886d8d1ea228f28345adf5 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 18 May 2016 22:37:57 +0200 Subject: GNAP: Change pixel format - Courtesy of _sev --- engines/gnap/gnap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 4de50ee38f..d0d8d0adcd 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -115,8 +115,8 @@ GnapEngine::~GnapEngine() { } Common::Error GnapEngine::run() { - // Initialize the graphics mode to ARGB8888 - Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 16, 8, 0, 24); + // Initialize the graphics mode to RGBA8888 + Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0); initGraphics(800, 600, true, &format); // We do not support color conversion yet -- cgit v1.2.3 From 97ac77b5f1b41b77b5e9a79bac0f6a11a4063386 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 19 May 2016 07:06:48 +0200 Subject: GNAP: Compute the thumbnail when opening the device so that it doesn't show the large hand in savegames --- engines/gnap/gnap.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index d0d8d0adcd..435d0c7be6 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -97,6 +97,7 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : Engine::syncSoundSettings(); _scene = nullptr; _music = nullptr; + _tempThumbnail = nullptr; _wasSavegameLoaded = false; for (int i = 0; i < kMaxTimers; ++i) @@ -112,6 +113,7 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : GnapEngine::~GnapEngine() { delete _random; delete _music; + delete _tempThumbnail; } Common::Error GnapEngine::run() { -- cgit v1.2.3 From 9a2bc3c5720e807978fa8a302b5b3c532fb62d30 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Thu, 19 May 2016 07:59:07 +0200 Subject: GNAP: Add several checks on _gameDone in order to quit the game quickly --- engines/gnap/gnap.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 435d0c7be6..9af8128c06 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -241,7 +241,6 @@ void GnapEngine::updateEvents() { void GnapEngine::gameUpdateTick() { updateEvents(); - // TODO Check _gameDone in the various game loops if (shouldQuit()) { _gameDone = true; _sceneDone = true; @@ -307,13 +306,12 @@ void GnapEngine::resumeGame() { } void GnapEngine::updatePause() { - while (_isPaused) { + while (_isPaused && !_gameDone) { gameUpdateTick(); if (isKeyStatus1(Common::KEYCODE_p)) { clearKeyStatus1(Common::KEYCODE_p); resumeGame(); } - //_system->delayMillis(100); } } @@ -557,7 +555,7 @@ void GnapEngine::showFullScreenSprite(int resourceId) { setGrabCursorSprite(-1); addFullScreenSprite(resourceId, 256); while (!_mouseClickState._left && !isKeyStatus1(Common::KEYCODE_ESCAPE) && - !isKeyStatus1(Common::KEYCODE_SPACE) && !isKeyStatus1(29)) { + !isKeyStatus1(Common::KEYCODE_SPACE) && !isKeyStatus1(29) && !_gameDone) { gameUpdateTick(); } _mouseClickState._left = false; @@ -737,8 +735,6 @@ void GnapEngine::mainLoop() { deleteSurface(&_backgroundSurface); _dat->close(1); - // TODO freeMenuSprite(); - // TODO freeFont(); } void GnapEngine::initScene() { @@ -829,7 +825,6 @@ void GnapEngine::checkGameKeys() { pauseGame(); updatePause(); } - // TODO? Debug input } void GnapEngine::startSoundTimerA(int timerIndex) { @@ -911,14 +906,14 @@ void GnapEngine::updateIdleTimer() { void GnapEngine::screenEffect(int dir, byte r, byte g, byte b) { if (dir == 1) { - for (int y = 300; y < 600; y += 50) { + for (int y = 300; y < 600 && !_gameDone; y += 50) { _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); gameUpdateTick(); _system->delayMillis(50); } } else { - for (int y = 0; y < 300; y += 50) { + for (int y = 0; y < 300 && !_gameDone; y += 50) { _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); gameUpdateTick(); @@ -1000,13 +995,13 @@ void GnapEngine::playSequences(int fullScreenSpriteId, int sequenceId1, int sequ kSeqSyncWait, 0, 15 * (5 * _gnap->_pos.x - 25), 48 * (_gnap->_pos.y - 8)); _gnap->_sequenceId = sequenceId2; _gnap->_sequenceDatNum = 0; - while (_gameSys->getAnimationStatus(0) != 2) + while (_gameSys->getAnimationStatus(0) != 2 && !_gameDone) gameUpdateTick(); hideCursor(); addFullScreenSprite(fullScreenSpriteId, 255); _gameSys->setAnimation(sequenceId1, 256, 0); _gameSys->insertSequence(sequenceId1, 256, 0, 0, kSeqNone, 0, 0, 0); - while (_gameSys->getAnimationStatus(0) != 2) + while (_gameSys->getAnimationStatus(0) != 2 && !_gameDone) gameUpdateTick(); _gameSys->setAnimation(sequenceId3, _gnap->_id, 0); _gameSys->insertSequence(sequenceId3, _gnap->_id, -- cgit v1.2.3 From ba61f90eb6324ceb9f6759a78de06136d1c3be5b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 20 May 2016 01:21:22 +0200 Subject: GNAP: Rework the code of Scene07::run, remove an obsolete todo --- engines/gnap/gnap.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 9af8128c06..541d062efb 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -246,7 +246,6 @@ void GnapEngine::gameUpdateTick() { _sceneDone = true; } - // TODO Improve this (variable frame delay to keep ~15fps) int currClock = _system->getMillis(); if (currClock >= _lastUpdateClock + 66) { _gameSys->fatUpdate(); -- cgit v1.2.3 From 20b3d1814a54c5f82e29e141ebf61f572767840c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 20 May 2016 07:00:50 +0200 Subject: GNAP: Remove some CHECKME's --- engines/gnap/gnap.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 541d062efb..d6ec44cfc5 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -1049,7 +1049,6 @@ void GnapEngine::toyUfoFlyTo(int destX, int destY, int minX, int maxX, int minY, if (destY == -1) destY = _leftClickMouseY; - //CHECKME int clippedDestX = CLIP(destX, minX, maxX); int clippedDestY = CLIP(destY, minY, maxY); int dirX = 0, dirY = 0; // 0, -1 or 1 -- cgit v1.2.3 From f734291abb883278c51e35122e4342d6bef8abfd Mon Sep 17 00:00:00 2001 From: Strangerke Date: Fri, 20 May 2016 07:47:16 +0200 Subject: GNAP: Implement delayTicks functions, refactor them to share code --- engines/gnap/gnap.cpp | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index d6ec44cfc5..5175d0702b 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -327,14 +327,31 @@ int GnapEngine::loadSavegame(int savegameNum) { return 1; } -void GnapEngine::delayTicks(int a1) { - // TODO - gameUpdateTick(); +void GnapEngine::delayTicks(int val, int idx = 0, bool updateCursor = false) { + int startTick = _timers[idx]; + + _timers[idx] = val; + + while (_timers[idx] && !_gameDone) { + gameUpdateTick(); + + if (updateCursor) + updateGrabCursorSprite(0, 0); + } + + startTick -= _timers[idx]; + if (startTick < 0) + startTick = 0; + + _timers[idx] = startTick; +} + +void GnapEngine::delayTicksA(int val, int idx) { + delayTicks(val, idx); } -void GnapEngine::delayTicksCursor(int a1) { - // TODO - gameUpdateTick(); +void GnapEngine::delayTicksCursor(int val) { + delayTicks(val, 0, true); } void GnapEngine::setHotspot(int index, int16 x1, int16 y1, int16 x2, int16 y2, uint16 flags, -- cgit v1.2.3 From 8a946705167a56d8046d13201498ed1bcea413a4 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 21 May 2016 00:16:59 +0200 Subject: GNAP: Remove or rephrase a couple of notes --- engines/gnap/gnap.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 5175d0702b..b43fc244ff 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -683,8 +683,7 @@ void GnapEngine::loadStockDat() { if (!_isStockDatLoaded) { _isStockDatLoaded = true; _dat->open(1, "stock_n.dat"); - //createMenuSprite(); - // NOTE Skipped preloading of data + // The pre-loading of data is skipped as it's no longer required on modern hardware } } -- cgit v1.2.3 From 13c363f4408ac517036a74fa220bf537848a80a5 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 23 May 2016 00:00:51 +0200 Subject: GNAP: Remove double smi-columns --- engines/gnap/gnap.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index b43fc244ff..c951a5f44b 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -938,11 +938,11 @@ void GnapEngine::screenEffect(int dir, byte r, byte g, byte b) { } bool GnapEngine::isKeyStatus1(int key) { - return _keyPressState[key] != 0;; + return _keyPressState[key] != 0; } bool GnapEngine::isKeyStatus2(int key) { - return _keyDownState[key] != 0;; + return _keyDownState[key] != 0; } void GnapEngine::clearKeyStatus1(int key) { -- cgit v1.2.3 From 58fb1563cab13f912496fe3dcd42caef5978fef6 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 23 May 2016 00:33:50 +0200 Subject: GNAP: Map remaining Key codes --- engines/gnap/gnap.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index c951a5f44b..afb77ebea9 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -570,13 +570,13 @@ void GnapEngine::showFullScreenSprite(int resourceId) { hideCursor(); setGrabCursorSprite(-1); addFullScreenSprite(resourceId, 256); - while (!_mouseClickState._left && !isKeyStatus1(Common::KEYCODE_ESCAPE) && - !isKeyStatus1(Common::KEYCODE_SPACE) && !isKeyStatus1(29) && !_gameDone) { + while (!_mouseClickState._left && !isKeyStatus1(Common::KEYCODE_ESCAPE) + && !isKeyStatus1(Common::KEYCODE_SPACE) && !isKeyStatus1(Common::KEYCODE_RETURN) && !_gameDone) { gameUpdateTick(); } _mouseClickState._left = false; clearKeyStatus1(Common::KEYCODE_ESCAPE); - clearKeyStatus1(29); + clearKeyStatus1(Common::KEYCODE_RETURN); clearKeyStatus1(Common::KEYCODE_SPACE); removeFullScreenSprite(); showCursor(); @@ -739,8 +739,8 @@ void GnapEngine::mainLoop() { _soundCache->purge(true); _spriteCache->purge(true); - if (isKeyStatus1(28)) { - clearKeyStatus1(28); + if (isKeyStatus1(Common::KEYCODE_ESCAPE)) { + clearKeyStatus1(Common::KEYCODE_ESCAPE); if (_debugLevel == 4) _gameDone = true; } -- cgit v1.2.3 From 58e77d693b2575b3a7680fb2bca6dc2f41449278 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 23 May 2016 00:44:00 +0200 Subject: GNAP: Remove original debug code --- engines/gnap/gnap.cpp | 6 ------ 1 file changed, 6 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index afb77ebea9..cc0ac2e8b3 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -738,12 +738,6 @@ void GnapEngine::mainLoop() { _sequenceCache->purge(true); _soundCache->purge(true); _spriteCache->purge(true); - - if (isKeyStatus1(Common::KEYCODE_ESCAPE)) { - clearKeyStatus1(Common::KEYCODE_ESCAPE); - if (_debugLevel == 4) - _gameDone = true; - } } if (_backgroundSurface) -- cgit v1.2.3 From e14e7992cc95dce8c78d1fa7ccf6e7d0ab876095 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 23 May 2016 19:39:56 +0200 Subject: GNAP: Fix inventory content when loading from launcher --- engines/gnap/gnap.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index cc0ac2e8b3..8acc3eedae 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -705,6 +705,7 @@ void GnapEngine::mainLoop() { int slot = _loadGameSlot; _loadGameSlot = -1; loadGameState(slot); + _wasSavegameLoaded = true; showCursor(); } -- cgit v1.2.3 From 4cac7d15112da7c25cda1ca45cc8ee95eed0716e Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Tue, 24 May 2016 07:09:35 +0200 Subject: GNAP: Fix memory leaks, reported by Valgrind --- engines/gnap/gnap.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 8acc3eedae..7523cd4de5 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -157,6 +157,7 @@ Common::Error GnapEngine::run() { _font = Graphics::loadTTFFont(*stream, 24); if (!_font) warning("Unable to load font"); + delete stream; #else _font = nullptr; #endif -- cgit v1.2.3 From 0d77dbc1e102bc2a035148114f475fb00c1e02e2 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Wed, 25 May 2016 06:48:23 +0200 Subject: GNAP: Initialize some more variables --- engines/gnap/gnap.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 7523cd4de5..0df38df887 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -108,6 +108,36 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _mousePos = Common::Point(0, 0); _currGrabCursorX = _currGrabCursorY = 0; + + _idleTimerIndex = -1; + _menuStatus = 0; + _menuSpritesIndex = -1; + _menuDone = false; + _menuBackgroundSurface = nullptr; + _menuQuitQuerySprite = nullptr; + _largeSprite = nullptr; + _menuSaveLoadSprite = nullptr; + _menuSprite2 = nullptr; + _menuSprite1 = nullptr; + _spriteHandle = nullptr; + _cursorSprite = nullptr; + _savegameIndex = -1; + _gridMinX = 0; + _gridMinY = 0; + _gridMaxX = 0; + _gridMaxY = 0; + _toyUfoNextSequenceId = -1; + _toyUfoSequenceId = -1; + _toyUfoId = -1; + _toyUfoActionStatus = -1; + _toyUfoX = 0; + _toyUfoY = 0; + _s18GarbageCanPos = 0; + + for (int i = 0; i < 7; i++) + _savegameSprites[i] = nullptr; + for (int i = 0; i < 30; i++) + _menuInventorySprites[30] = nullptr ; } GnapEngine::~GnapEngine() { -- cgit v1.2.3 From 32e7eec73de61ff8b287dfb8ff78724ff3540051 Mon Sep 17 00:00:00 2001 From: Ori Avtalion Date: Wed, 25 May 2016 14:38:08 +0300 Subject: GNAP: Fix typo in initialization code --- engines/gnap/gnap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 0df38df887..98f2c01cac 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -137,7 +137,7 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : for (int i = 0; i < 7; i++) _savegameSprites[i] = nullptr; for (int i = 0; i < 30; i++) - _menuInventorySprites[30] = nullptr ; + _menuInventorySprites[i] = nullptr; } GnapEngine::~GnapEngine() { -- cgit v1.2.3 From cd271a0b34bc575201bf1d700069a7a3960b45de Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sat, 28 May 2016 18:37:22 +0200 Subject: GNAP: Remove duplicate code in screenEffect --- engines/gnap/gnap.cpp | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 98f2c01cac..ed2d25f3de 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -946,20 +946,15 @@ void GnapEngine::updateIdleTimer() { } void GnapEngine::screenEffect(int dir, byte r, byte g, byte b) { - if (dir == 1) { - for (int y = 300; y < 600 && !_gameDone; y += 50) { - _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); - _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); - gameUpdateTick(); - _system->delayMillis(50); - } - } else { - for (int y = 0; y < 300 && !_gameDone; y += 50) { - _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); - _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); - gameUpdateTick(); - _system->delayMillis(50); - } + int startVal = 0; + if (dir == 1) + startVal = 300; + + for (int y = startVal; y < startVal + 300 && !_gameDone; y += 50) { + _gameSys->fillSurface(nullptr, 0, y, 800, 50, r, g, b); + _gameSys->fillSurface(nullptr, 0, 549 - y + 1, 800, 50, r, g, b); + gameUpdateTick(); + _system->delayMillis(50); } } -- cgit v1.2.3 From 06eef7a4089a16ed0d52dfaf825b90ba0d1a024c Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 30 May 2016 07:07:28 +0200 Subject: GNAP: Initialize some unitialized variables in GnapEngine --- engines/gnap/gnap.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index ed2d25f3de..d86d1a484c 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -138,6 +138,33 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _savegameSprites[i] = nullptr; for (int i = 0; i < 30; i++) _menuInventorySprites[i] = nullptr; + + _newSceneNum = 0; + _sceneDone = false; + _inventory = 0; + _gameFlags = 0; + _hotspotsCount = 0; + _sceneClickedHotspot = -1; + _isLeavingScene = false; + _isStockDatLoaded = false; + _newCursorValue = 0; + _cursorValue = 0; + _verbCursor = 0; + _cursorIndex = -1; + _leftClickMouseX = 0; + _leftClickMouseY = 0; + _grabCursorSprite = nullptr; + _grabCursorSpriteIndex = 0; + _newGrabCursorSpriteIndex = 0; + _fullScreenSprite = nullptr; + _fullScreenSpriteId = 0; + _deviceX1 = 0; + _deviceY1 = 0; + _deviceX2 = 0; + _deviceY2 = 0; + _soundTimerIndexA = 0; + _soundTimerIndexB = 0; + _soundTimerIndexC = 0; } GnapEngine::~GnapEngine() { -- cgit v1.2.3 From 52ee33dfa675f0520eb2345c46e2bb0ecaa2aa2f Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 30 May 2016 07:15:43 +0200 Subject: GNAP: Make 2 variables local to setDeviceHotspot --- engines/gnap/gnap.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index d86d1a484c..f6c758becd 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -160,8 +160,6 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _fullScreenSpriteId = 0; _deviceX1 = 0; _deviceY1 = 0; - _deviceX2 = 0; - _deviceY2 = 0; _soundTimerIndexA = 0; _soundTimerIndexB = 0; _soundTimerIndexC = 0; @@ -654,19 +652,19 @@ void GnapEngine::removeDeviceIconActive() { void GnapEngine::setDeviceHotspot(int hotspotIndex, int x1, int y1, int x2, int y2) { _deviceX1 = x1; - _deviceX2 = x2; _deviceY1 = y1; - _deviceY2 = y2; + int deviceX2 = x2; + int deviceY2 = y2; if (x1 == -1) _deviceX1 = 730; if (x2 == -1) - _deviceX2 = 780; + deviceX2 = 780; if (y1 == -1) _deviceY1 = 14; if (y2 == -1) - _deviceY2 = 79; + deviceY2 = 79; - _hotspots[hotspotIndex]._rect = Common::Rect(_deviceX1, _deviceY1, _deviceX2, _deviceY2); + _hotspots[hotspotIndex]._rect = Common::Rect(_deviceX1, _deviceY1, deviceX2, deviceY2); _hotspots[hotspotIndex]._flags = SF_TALK_CURSOR | SF_GRAB_CURSOR | SF_LOOK_CURSOR; } -- cgit v1.2.3 From 1f2095b066bac6f212efed8ec5084dc204b26559 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 30 May 2016 21:39:12 +0200 Subject: GNAP: (hopefully) fix display on BE systems --- engines/gnap/gnap.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index f6c758becd..c9ea940933 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -173,7 +173,11 @@ GnapEngine::~GnapEngine() { Common::Error GnapEngine::run() { // Initialize the graphics mode to RGBA8888 +#if defined(SCUMM_BIG_ENDIAN) + Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 0, 8, 16, 24); +#else Graphics::PixelFormat format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0); +#endif initGraphics(800, 600, true, &format); // We do not support color conversion yet -- cgit v1.2.3 From 56569c84a1b03b80f309e1eb0f4675ddb788a453 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 31 May 2016 23:03:43 +0200 Subject: GNAP: Change two variables to bool, remove two useless variables --- engines/gnap/gnap.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index c9ea940933..76818181a5 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -264,11 +264,11 @@ void GnapEngine::updateEvents() { _debugger->onFrame(); } - _keyPressState[event.kbd.keycode] = 1; - _keyDownState[event.kbd.keycode] = 1; + _keyPressState[event.kbd.keycode] = true; + _keyDownState[event.kbd.keycode] = true; break; case Common::EVENT_KEYUP: - _keyDownState[event.kbd.keycode] = 0; + _keyDownState[event.kbd.keycode] = false; break; case Common::EVENT_MOUSEMOVE: _mousePos = event.mouse; @@ -988,21 +988,19 @@ void GnapEngine::screenEffect(int dir, byte r, byte g, byte b) { } bool GnapEngine::isKeyStatus1(int key) { - return _keyPressState[key] != 0; + return _keyPressState[key]; } bool GnapEngine::isKeyStatus2(int key) { - return _keyDownState[key] != 0; + return _keyDownState[key]; } void GnapEngine::clearKeyStatus1(int key) { - _keyPressState[key] = 0; - _keyDownState[key] = 0; + _keyPressState[key] = false; + _keyDownState[key] = false; } void GnapEngine::clearAllKeyStatus1() { - _keyStatus1[0] = 0; - _keyStatus1[1] = 0; memset(_keyPressState, 0, sizeof(_keyPressState)); memset(_keyDownState, 0, sizeof(_keyDownState)); } -- cgit v1.2.3 From 2473348cf05db29ce4d1d1da48cb199199cdc554 Mon Sep 17 00:00:00 2001 From: Strangerke Date: Mon, 6 Jun 2016 07:20:30 +0200 Subject: GNAP: Initialize some more variables, reorder initialization --- engines/gnap/gnap.cpp | 52 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 16 deletions(-) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 76818181a5..780955b9ae 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -95,16 +95,45 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : DebugMan.addDebugChannel(kDebugBasic, "basic", "Basic debug level"); Engine::syncSoundSettings(); + + _exe = nullptr; + _dat = nullptr; + _spriteCache = nullptr; + _soundCache = nullptr; + _sequenceCache = nullptr; + _gameSys = nullptr; + _soundMan = nullptr; + _debugger = nullptr; + _gnap = nullptr; + _plat = nullptr; + _font = nullptr; _scene = nullptr; _music = nullptr; _tempThumbnail = nullptr; + _menuBackgroundSurface = nullptr; + _menuQuitQuerySprite = nullptr; + _largeSprite = nullptr; + _menuSaveLoadSprite = nullptr; + _menuSprite2 = nullptr; + _menuSprite1 = nullptr; + _spriteHandle = nullptr; + _cursorSprite = nullptr; + _pauseSprite = nullptr; + _backgroundSurface = nullptr; _wasSavegameLoaded = false; - for (int i = 0; i < kMaxTimers; ++i) - _savedTimers[i] = _timers[i] = 0; - _isWaiting = false; _sceneWaiting = false; + _menuDone = false; + _sceneDone = false; + _isLeavingScene = false; + _isStockDatLoaded = false; + _gameDone = false; + _isPaused = false; + _sceneSavegameLoaded = false; + + for (int i = 0; i < kMaxTimers; ++i) + _savedTimers[i] = _timers[i] = 0; _mousePos = Common::Point(0, 0); _currGrabCursorX = _currGrabCursorY = 0; @@ -112,15 +141,6 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _idleTimerIndex = -1; _menuStatus = 0; _menuSpritesIndex = -1; - _menuDone = false; - _menuBackgroundSurface = nullptr; - _menuQuitQuerySprite = nullptr; - _largeSprite = nullptr; - _menuSaveLoadSprite = nullptr; - _menuSprite2 = nullptr; - _menuSprite1 = nullptr; - _spriteHandle = nullptr; - _cursorSprite = nullptr; _savegameIndex = -1; _gridMinX = 0; _gridMinY = 0; @@ -140,13 +160,10 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _menuInventorySprites[i] = nullptr; _newSceneNum = 0; - _sceneDone = false; _inventory = 0; _gameFlags = 0; _hotspotsCount = 0; _sceneClickedHotspot = -1; - _isLeavingScene = false; - _isStockDatLoaded = false; _newCursorValue = 0; _cursorValue = 0; _verbCursor = 0; @@ -163,6 +180,10 @@ GnapEngine::GnapEngine(OSystem *syst, const ADGameDescription *gd) : _soundTimerIndexA = 0; _soundTimerIndexB = 0; _soundTimerIndexC = 0; + _loadGameSlot = -1; + _lastUpdateClock = 0; + _prevSceneNum = -1; + _currentSceneNum = -1; } GnapEngine::~GnapEngine() { @@ -190,7 +211,6 @@ Common::Error GnapEngine::run() { _cursorIndex = -1; _verbCursor = 1; - _loadGameSlot = -1; if (ConfMan.hasKey("save_slot")) _loadGameSlot = ConfMan.getInt("save_slot"); -- cgit v1.2.3 From 30b8030c1086e0e7ef8946c1f0891f01d7f30d3b Mon Sep 17 00:00:00 2001 From: Strangerke Date: Tue, 7 Jun 2016 23:33:50 +0200 Subject: GNAP: As WAIT_CURSOR isn't available in the exe, hide and show the cursor adequately --- engines/gnap/gnap.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'engines/gnap/gnap.cpp') diff --git a/engines/gnap/gnap.cpp b/engines/gnap/gnap.cpp index 780955b9ae..6a03bf8eb0 100644 --- a/engines/gnap/gnap.cpp +++ b/engines/gnap/gnap.cpp @@ -525,9 +525,11 @@ void GnapEngine::updateMouseCursor() { } if (_isWaiting && ((_gnap->_actionStatus < 0 && _plat->_actionStatus < 0) || _sceneWaiting)) { setCursor(kDisabledCursors[_verbCursor]); + showCursor(); _isWaiting = false; } else if (!_isWaiting && (_gnap->_actionStatus >= 0 || _plat->_actionStatus >= 0) && !_sceneWaiting) { setCursor(WAIT_CURSOR); + hideCursor(); _isWaiting = true; } } -- cgit v1.2.3