Common::Error SkyEngine::init() { initGraphics(320, 200, false); _skyDisk = new Disk(); _skySound = new Sound(_mixer, _skyDisk, Audio::Mixer::kMaxChannelVolume); _systemVars.gameVersion = _skyDisk->determineGameVersion(); MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32); if (MidiDriver::getMusicType(dev) == MT_ADLIB) { _systemVars.systemFlags |= SF_SBLASTER; _skyMusic = new AdLibMusic(_mixer, _skyDisk); } else { _systemVars.systemFlags |= SF_ROLAND; if ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")) _skyMusic = new MT32Music(MidiDriver::createMidi(dev), _skyDisk); else _skyMusic = new GmMusic(MidiDriver::createMidi(dev), _skyDisk); } if (isCDVersion()) { if (ConfMan.hasKey("nosubtitles")) { warning("Configuration key 'nosubtitles' is deprecated. Use 'subtitles' instead"); if (!ConfMan.getBool("nosubtitles")) _systemVars.systemFlags |= SF_ALLOW_TEXT; } if (ConfMan.getBool("subtitles")) _systemVars.systemFlags |= SF_ALLOW_TEXT; if (!ConfMan.getBool("speech_mute")) _systemVars.systemFlags |= SF_ALLOW_SPEECH; } else _systemVars.systemFlags |= SF_ALLOW_TEXT; _systemVars.systemFlags |= SF_PLAY_VOCS; _systemVars.gameSpeed = 80; _skyCompact = new SkyCompact(); _skyText = new Text(_skyDisk, _skyCompact); _skyMouse = new Mouse(_system, _skyDisk, _skyCompact); _skyScreen = new Screen(_system, _skyDisk, _skyCompact); initVirgin(); initItemList(); loadFixedItems(); _skyLogic = new Logic(_skyCompact, _skyScreen, _skyDisk, _skyText, _skyMusic, _skyMouse, _skySound); _skyMouse->useLogicInstance(_skyLogic); _skyControl = new Control(_saveFileMan, _skyScreen, _skyDisk, _skyMouse, _skyText, _skyMusic, _skyLogic, _skySound, _skyCompact, _system); _skyLogic->useControlInstance(_skyControl); switch (Common::parseLanguage(ConfMan.get("language"))) { case Common::EN_USA: _systemVars.language = SKY_USA; break; case Common::DE_DEU: _systemVars.language = SKY_GERMAN; break; case Common::FR_FRA: _systemVars.language = SKY_FRENCH; break; case Common::IT_ITA: _systemVars.language = SKY_ITALIAN; break; case Common::PT_BRA: _systemVars.language = SKY_PORTUGUESE; break; case Common::ES_ESP: _systemVars.language = SKY_SPANISH; break; case Common::SE_SWE: _systemVars.language = SKY_SWEDISH; break; case Common::EN_GRB: _systemVars.language = SKY_ENGLISH; break; default: _systemVars.language = SKY_ENGLISH; break; } if (!_skyDisk->fileExists(60600 + SkyEngine::_systemVars.language * 8)) { warning("The language you selected does not exist in your BASS version"); if (_skyDisk->fileExists(60600)) SkyEngine::_systemVars.language = SKY_ENGLISH; // default to GB english if it exists.. else if (_skyDisk->fileExists(60600 + SKY_USA * 8)) SkyEngine::_systemVars.language = SKY_USA; // try US english... else for (uint8 cnt = SKY_ENGLISH; cnt <= SKY_SPANISH; cnt++) if (_skyDisk->fileExists(60600 + cnt * 8)) { // pick the first language we can find SkyEngine::_systemVars.language = cnt; break; } } // Setup mixer syncSoundSettings(); _debugger = new Debugger(_skyLogic, _skyMouse, _skyScreen, _skyCompact); return Common::kNoError; }
void KyraEngine_HoF::startup() { _sound->setSoundList(&_soundData[kMusicIngame]); // The track map is exactly the same // for FM-TOWNS and DOS _trackMap = _dosTrackMap; _trackMapSize = _dosTrackMapSize; allocAnimObjects(1, 10, 30); _screen->_curPage = 0; memset(_sceneShapeTable, 0, sizeof(_sceneShapeTable)); _gamePlayBuffer = new uint8[46080]; _unkBuf500Bytes = new uint8[500]; loadMouseShapes(); loadItemShapes(); _screen->setMouseCursor(0, 0, getShapePtr(0)); _screenBuffer = new uint8[64000]; _unkBuf200kByte = new uint8[200000]; loadChapterBuffer(_newChapterFile); loadCCodeBuffer("C_CODE.XXX"); if (_flags.isTalkie) { loadOptionsBuffer("OPTIONS.XXX"); showMessageFromCCode(265, 150, 0); _screen->updateScreen(); openTalkFile(0); _currentTalkFile = 1; openTalkFile(1); } else { _optionsBuffer = _cCodeBuffer; } showMessage(0, 207); _screen->setShapePages(5, 3); _mainCharacter.height = 0x30; _mainCharacter.facing = 4; _mainCharacter.animFrame = 0x12; memset(_sceneAnims, 0, sizeof(_sceneAnims)); for (int i = 0; i < ARRAYSIZE(_sceneAnimMovie); ++i) _sceneAnimMovie[i] = new WSAMovie_v2(this); memset(_wsaSlots, 0, sizeof(_wsaSlots)); for (int i = 0; i < ARRAYSIZE(_wsaSlots); ++i) _wsaSlots[i] = new WSAMovie_v2(this); _screen->_curPage = 0; _talkObjectList = new TalkObject[72]; memset(_talkObjectList, 0, sizeof(TalkObject)*72); _shapeDescTable = new ShapeDesc[55]; memset(_shapeDescTable, 0, sizeof(ShapeDesc)*55); for (int i = 9; i <= 32; ++i) { _shapeDescTable[i-9].width = 30; _shapeDescTable[i-9].height = 55; _shapeDescTable[i-9].xAdd = -15; _shapeDescTable[i-9].yAdd = -50; } for (int i = 19; i <= 24; ++i) { _shapeDescTable[i-9].width = 53; _shapeDescTable[i-9].yAdd = -51; } _gfxBackUpRect = new uint8[_screen->getRectSize(32, 32)]; initItemList(30); loadButtonShapes(); resetItemList(); _characterShapeFile = 1; loadCharacterShapes(_characterShapeFile); initInventoryButtonList(); setupLangButtonShapes(); loadInventoryShapes(); _screen->loadPalette("PALETTE.COL", _screen->getPalette(0)); _screen->loadBitmap("_PLAYFLD.CPS", 3, 3, 0); _screen->copyPage(3, 0); _screen->showMouse(); _screen->hideMouse(); clearAnimObjects(); for (int i = 0; i < 19; ++i) memset(_conversationState[i], -1, sizeof(int8)*14); clearCauldronTable(); memset(_inputColorCode, -1, sizeof(_inputColorCode)); memset(_newSceneDlgState, 0, sizeof(_newSceneDlgState)); for (int i = 0; i < 23; ++i) resetCauldronStateTable(i); _sceneList = new SceneDesc[86]; memset(_sceneList, 0, sizeof(SceneDesc)*86); _sceneListSize = 86; runStartScript(1, 0); loadNPCScript(); if (_gameToLoad == -1) { snd_playWanderScoreViaMap(52, 1); enterNewScene(_mainCharacter.sceneId, _mainCharacter.facing, 0, 0, 1); saveGameStateIntern(0, "New Game", 0); } else { loadGameStateCheck(_gameToLoad); } _screen->showMouse(); if (_menuDirectlyToLoad) (*_inventoryButtons[0].buttonCallback)(&_inventoryButtons[0]); setNextIdleAnimTimer(); setWalkspeed(_configWalkspeed); }
void KyraEngine_MR::startup() { _album.wsa = new WSAMovie_v2(this); assert(_album.wsa); _album.leftPage.wsa = new WSAMovie_v2(this); assert(_album.leftPage.wsa); _album.rightPage.wsa = new WSAMovie_v2(this); assert(_album.rightPage.wsa); _gamePlayBuffer = new uint8[64000]; _interface = new uint8[17920]; _interfaceCommandLine = new uint8[3840]; _screen->setFont(Screen::FID_8_FNT); _stringBuffer = new char[500]; allocAnimObjects(1, 16, 50); memset(_sceneShapes, 0, sizeof(_sceneShapes)); _screenBuffer = new uint8[64000]; if (!loadLanguageFile("ITEMS.", _itemFile)) error("Couldn't load ITEMS"); if (!loadLanguageFile("SCORE.", _scoreFile)) error("Couldn't load SCORE"); if (!loadLanguageFile("C_CODE.", _cCodeFile)) error("Couldn't load C_CODE"); if (!loadLanguageFile("SCENES.", _scenesFile)) error("Couldn't load SCENES"); if (!loadLanguageFile("OPTIONS.", _optionsFile)) error("Couldn't load OPTIONS"); if (!loadLanguageFile("_ACTOR.", _actorFile)) error("couldn't load _ACTOR"); openTalkFile(0); _currentTalkFile = 0; openTalkFile(1); loadCostPal(); for (int i = 0; i < 16; ++i) { _sceneAnims[i].flags = 0; _sceneAnimMovie[i] = new WSAMovie_v2(this); assert(_sceneAnimMovie[i]); } _screen->_curPage = 0; _talkObjectList = new TalkObject[88]; memset(_talkObjectList, 0, sizeof(TalkObject)*88); for (int i = 0; i < 88; ++i) _talkObjectList[i].sceneId = 0xFF; _gfxBackUpRect = new uint8[_screen->getRectSize(32, 32)]; initItemList(50); resetItemList(); loadShadowShape(); loadExtrasShapes(); _characterShapeFile = 0; loadCharacterShapes(_characterShapeFile); updateMalcolmShapes(); initMainButtonList(true); loadButtonShapes(); loadInterfaceShapes(); _screen->loadPalette("PALETTE.COL", _screen->getPalette(0)); _paletteOverlay = new uint8[256]; _screen->generateOverlay(_screen->getPalette(0), _paletteOverlay, 0xF0, 0x19); loadInterface(); clearAnimObjects(); _scoreMax = 0; for (int i = 0; i < _scoreTableSize; ++i) { if (_scoreTable[i] > 0) _scoreMax += _scoreTable[i]; } memset(_newSceneDlgState, 0, sizeof(_newSceneDlgState)); memset(_conversationState, -1, sizeof(_conversationState)); _sceneList = new SceneDesc[98]; assert(_sceneList); memset(_sceneList, 0, sizeof(SceneDesc)*98); _sceneListSize = 98; runStartupScript(1, 0); _res->exists("MOODOMTR.WSA", true); _invWsa = new WSAMovie_v2(this); assert(_invWsa); _invWsa->open("MOODOMTR.WSA", 1, 0); _invWsaFrame = 6; saveGameStateIntern(0, "New Game", 0); if (_gameToLoad == -1) enterNewScene(_mainCharacter.sceneId, _mainCharacter.facing, 0, 0, 1); else loadGameStateCheck(_gameToLoad); if (_menuDirectlyToLoad) (*_mainButtonData[0].buttonCallback)(&_mainButtonData[0]); _screen->updateScreen(); _screen->showMouse(); setNextIdleAnimTimer(); setWalkspeed(_configWalkspeed); }