mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-26 12:48:16 +00:00
1211 lines
41 KiB
C++
1211 lines
41 KiB
C++
/* 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
#include "common/events.h"
|
|
#include "common/config-manager.h"
|
|
|
|
#include "hypno/grammar.h"
|
|
#include "hypno/hypno.h"
|
|
#include "hypno/libfile.h"
|
|
|
|
namespace Hypno {
|
|
|
|
extern const char *sceneVariables[];
|
|
|
|
SpiderEngine::SpiderEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine(syst, gd) {
|
|
_screenW = 640;
|
|
_screenH = 480;
|
|
_font = nullptr;
|
|
}
|
|
|
|
void SpiderEngine::loadAssets() {
|
|
if (!isDemo())
|
|
loadAssetsFullGame();
|
|
else
|
|
loadAssetsDemo();
|
|
}
|
|
|
|
void SpiderEngine::loadAssetsFullGame() {
|
|
|
|
Common::Language language = Common::parseLanguage(ConfMan.get("language"));
|
|
Common::String prefix = "spider";
|
|
if (language == Common::EN_USA) {
|
|
if (!_installerArchive.open("DATA.Z"))
|
|
error("Failed to open DATA.Z");
|
|
|
|
SearchMan.add("DATA.Z", (Common::Archive *) &_installerArchive, 0, false);
|
|
}
|
|
|
|
Common::ArchiveMemberList files;
|
|
LibFile *missions = loadLib("", "spider/c_misc/missions.lib", true);
|
|
if (missions == nullptr || missions->listMembers(files) == 0)
|
|
error("Failed to load any file from missions.lib");
|
|
|
|
loadLib("", "spider/c_misc/fonts.lib", true);
|
|
loadFonts();
|
|
|
|
loadLib("spider/sound.lib/", "spider/c_misc/sound.lib", true);
|
|
|
|
_levels["<quit>"]->prefix = prefix;
|
|
|
|
Code *credits = new Code("<credits>");
|
|
credits->prefix = prefix;
|
|
_levels["<credits>"] = credits;
|
|
credits->levelIfWin = "options.mi_";
|
|
|
|
Scene *sc;
|
|
ChangeLevel *cl;
|
|
Global *gl;
|
|
|
|
loadSceneLevel("mainmenu.mi_", "", prefix);
|
|
loadSceneLevel("tryagain.mi_", "", prefix);
|
|
|
|
cl = new ChangeLevel("<give_up>");
|
|
sc = (Scene *) _levels["tryagain.mi_"];
|
|
sc->hots[1].actions.push_back(cl);
|
|
|
|
LoadCheckpoint *lc = new LoadCheckpoint();
|
|
sc->hots[2].actions.push_back(lc);
|
|
|
|
loadSceneLevel("options.mi_", "", prefix);
|
|
loadSceneLevel("levels.mi_", "mv0t.mi_", prefix);
|
|
loadSceneLevel("combmenu.mi_", "", prefix);
|
|
|
|
// start level
|
|
Transition *start = new Transition("mainmenu.mi_");
|
|
start->intros.push_back("spider/cine/dcine1.smk");
|
|
start->intros.push_back("spider/cine/dcine2.smk");
|
|
_levels["<start>"] = start;
|
|
|
|
sc = (Scene *) _levels["mainmenu.mi_"];
|
|
cl = new ChangeLevel("levels.mi_");
|
|
sc->hots[1].actions.push_back(cl);
|
|
sc->music = "sound.lib/menu_mus.raw";
|
|
|
|
Load *ld = new Load();
|
|
sc->hots[2].actions.push_back(ld);
|
|
|
|
//Save *sv = new Save();
|
|
//sc->hots[3].actions.push_back(sv);
|
|
|
|
cl = new ChangeLevel("options.mi_");
|
|
sc->hots[4].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<quit>");
|
|
sc->hots[5].actions.push_back(cl);
|
|
|
|
sc = (Scene *) _levels["levels.mi_"];
|
|
cl = new ChangeLevel("levels.mi_");
|
|
sc->hots[1].actions.push_back(cl);
|
|
sc->hots[2].actions.push_back(cl);
|
|
sc->hots[3].actions.push_back(cl);
|
|
sc->hots[4].actions.push_back(cl);
|
|
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[5].actions.push_back(gl);
|
|
cl = new ChangeLevel("mainmenu.mi_");
|
|
sc->hots[6].actions.push_back(cl);
|
|
|
|
sc = (Scene *) _levels["options.mi_"];
|
|
|
|
cl = new ChangeLevel("combmenu.mi_");
|
|
sc->hots[1].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("mainmenu.mi_");
|
|
sc->hots[4].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<credits>");
|
|
sc->hots[5].actions.push_back(cl);
|
|
|
|
sc = (Scene *) _levels["combmenu.mi_"];
|
|
|
|
cl = new ChangeLevel("options.mi_");
|
|
sc->hots[1].actions.push_back(cl);
|
|
|
|
Transition *practice_win = new Transition("combmenu.mi_");
|
|
practice_win->intros.push_back("spider/cine/practwin.smk");
|
|
_levels["<practice_win>"] = practice_win;
|
|
|
|
Transition *practice_lose = new Transition("combmenu.mi_");
|
|
practice_lose->intros.push_back("spider/cine/praclose.smk");
|
|
_levels["<practice_lose>"] = practice_lose;
|
|
|
|
loadArcadeLevel("c1h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c1h_solo.mi_"] = _levels["c1h.mi_"];
|
|
|
|
cl = new ChangeLevel("c1h_solo.mi_");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c2h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c2h_solo.mi_"] = _levels["c2h.mi_"];
|
|
|
|
cl = new ChangeLevel("c2h_solo.mi_");
|
|
sc->hots[4].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c3h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c3h_solo.mi_"] = _levels["c3h.mi_"];
|
|
|
|
cl = new ChangeLevel("c3h_solo.mi_");
|
|
sc->hots[6].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c4h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c4h_solo.mi_"] = _levels["c4h.mi_"];
|
|
|
|
cl = new ChangeLevel("c4h_solo.mi_");
|
|
sc->hots[3].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c5h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c5h_solo.mi_"] = _levels["c5h.mi_"];
|
|
|
|
cl = new ChangeLevel("c5h_solo.mi_");
|
|
sc->hots[5].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c8h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c8h_solo.mi_"] = _levels["c8h.mi_"];
|
|
|
|
cl = new ChangeLevel("c8h_solo.mi_");
|
|
sc->hots[7].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c9h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c9h_solo.mi_"] = _levels["c9h.mi_"];
|
|
|
|
cl = new ChangeLevel("c9h_solo.mi_");
|
|
sc->hots[8].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c10h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c10h_solo.mi_"] = _levels["c10h.mi_"];
|
|
|
|
cl = new ChangeLevel("c10h_solo.mi_");
|
|
sc->hots[9].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c11h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c11h_solo.mi_"] = _levels["c11h.mi_"];
|
|
|
|
cl = new ChangeLevel("c11h_solo.mi_");
|
|
sc->hots[10].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c12h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c12h_solo.mi_"] = _levels["c12h.mi_"];
|
|
|
|
cl = new ChangeLevel("c12h_solo.mi_");
|
|
sc->hots[12].actions.push_back(cl);
|
|
|
|
loadArcadeLevel("c13h.mi_", "<practice_win>", "<practice_lose>", prefix);
|
|
_levels["c13h_solo.mi_"] = _levels["c13h.mi_"];
|
|
|
|
cl = new ChangeLevel("c13h_solo.mi_");
|
|
sc->hots[11].actions.push_back(cl);
|
|
|
|
loadSceneLevel("mv0t.mi_", "roof.mi_", prefix);
|
|
_levels["mv0t.mi_"]->intros.push_back("cine/ints001s.smk");
|
|
_levels["mv0t.mi_"]->music = "sound.lib/sm001.raw";
|
|
|
|
loadSceneLevel("roof.mi_", "decide1.mi_", prefix);
|
|
_levels["roof.mi_"]->music = "sound.lib/ros_mus.raw";
|
|
|
|
loadSceneLevel("decide1.mi_", "", prefix);
|
|
_levels["decide1.mi_"]->music = "sound.lib/sh_mus.raw";
|
|
_levels["decide1.mi_"]->musicRate = 11025;
|
|
_levels["decide1.mi_"]->intros.push_back("cine/siren1s.smk");
|
|
sc = (Scene *) _levels["decide1.mi_"];
|
|
cl = new ChangeLevel("bank.mi_");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("c1");
|
|
sc->hots[4].actions.push_back(cl);
|
|
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
loadSceneLevel("bank.mi_", "", prefix);
|
|
_levels["bank.mi_"]->intros.push_back("cine/swcs001s.smk");
|
|
_levels["bank.mi_"]->levelIfWin = "<alley_selector>";
|
|
_levels["bank.mi_"]->music = "sound.lib/cbh_mus.raw";
|
|
|
|
Transition *alley_selector = new Transition("alley.mi_", "<puz_matr>");
|
|
_levels["<alley_selector>"] = alley_selector;
|
|
|
|
loadSceneLevel("alley.mi_", "<after_bank>", prefix);
|
|
_levels["alley.mi_"]->music = "sound.lib/alleymus.raw";
|
|
_levels["alley.mi_"]->intros.push_back("cine/aleyc01s.smk");
|
|
|
|
loadArcadeLevel("c1.mi_", "<trans_apt_1>", "<over_apt_1>", prefix);
|
|
_levels["c1.mi_"]->intros.push_back("cine/ross002s.smk");
|
|
|
|
loadArcadeLevel("c1h.mi_", "<trans_apt_1>", "<over_apt_1>", prefix);
|
|
_levels["c1h.mi_"]->intros.push_back("cine/ross002s.smk");
|
|
|
|
// Hardcoded levels
|
|
Code *matrix = new Code("<puz_matr>");
|
|
matrix->intros.push_back("cine/aleyc01s.smk");
|
|
matrix->levelIfWin = "<after_bank>";
|
|
matrix->prefix = prefix;
|
|
_levels["<puz_matr>"] = matrix;
|
|
|
|
// Transitions
|
|
Transition *after_bank = new Transition("<trans_apt_2>");
|
|
after_bank->intros.push_back("spider/cine/bals003s.smk");
|
|
_levels["<after_bank>"] = after_bank;
|
|
|
|
Transition *trans_apt_1 = new Transition("busint.mi_");
|
|
trans_apt_1->intros.push_back("spider/cine/ross004s.smk");
|
|
trans_apt_1->intros.push_back("spider/cine/ross005s.smk");
|
|
trans_apt_1->intros.push_back("spider/cine/apts002s.smk");
|
|
trans_apt_1->intros.push_back("spider/cine/blcs00.smk");
|
|
_levels["<trans_apt_1>"] = trans_apt_1;
|
|
|
|
Transition *trans_apt_2 = new Transition("busint.mi_");
|
|
trans_apt_2->intros.push_back("spider/cine/dia002s.smk");
|
|
trans_apt_2->intros.push_back("spider/cine/apts004s.smk");
|
|
trans_apt_1->intros.push_back("spider/cine/blcs00.smk");
|
|
_levels["<trans_apt_2>"] = trans_apt_2;
|
|
|
|
loadSceneLevel("busint.mi_", "<bus_selector>", prefix);
|
|
_levels["busint.mi_"]->music = "sound.lib/blc_mus1.raw";
|
|
loadSceneLevel("busintro.mi_", "buspuz.mi_", prefix);
|
|
_levels["busintro.mi_"]->intros.push_back("cine/blcs00a.smk");
|
|
_levels["busintro.mi_"]->intros.push_back("cine/blcs001s.smk");
|
|
|
|
Transition *bus_selector = new Transition("busintro.mi_", "<bus_hard_intro>");
|
|
_levels["<bus_selector>"] = bus_selector;
|
|
|
|
Transition *bus_hard_intro = new Transition("bushard2.mi_");
|
|
bus_hard_intro->intros.push_back("spider/cine/blcs00a.smk");
|
|
bus_hard_intro->intros.push_back("spider/cine/blcs001s.smk");
|
|
bus_hard_intro->intros.push_back("spider/cine/ppv001s.smk");
|
|
_levels["<bus_hard_intro>"] = bus_hard_intro;
|
|
|
|
Code *add_ingredient = new Code("<add_ingredient>");
|
|
add_ingredient->prefix = prefix;
|
|
_levels["<add_ingredient>"] = add_ingredient;
|
|
|
|
Code *check_mixture = new Code("<check_mixture>");
|
|
check_mixture->prefix = prefix;
|
|
_levels["<check_mixture>"] = check_mixture;
|
|
|
|
loadSceneLevel("bushard2.mi_", "", prefix);
|
|
sc = (Scene *) _levels["bushard2.mi_"];
|
|
Escape *escape = new Escape();
|
|
|
|
Hotspots *hs = sc->hots[1].smenu;
|
|
(*hs)[1].actions.push_back(escape);
|
|
|
|
cl = new ChangeLevel("<check_mixture>");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<add_ingredient>");
|
|
sc->hots[3].actions.push_back(cl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH1", "TURNON"); // hairspray
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[5].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH2", "TURNON"); // spot remover
|
|
sc->hots[5].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[6].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH3", "TURNON"); // rubbing alcohol
|
|
sc->hots[6].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[7].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH4", "TURNON"); // turpentine
|
|
sc->hots[7].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[8].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH5", "TURNON"); // spray paint
|
|
sc->hots[8].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[9].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH0", "TURNON"); // other
|
|
sc->hots[9].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[10].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH0", "TURNON"); // other
|
|
sc->hots[10].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[11].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH0", "TURNON"); // other
|
|
sc->hots[11].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[12].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH6", "TURNON"); // fingernail polish
|
|
sc->hots[12].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[13].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH0", "TURNON"); // other
|
|
sc->hots[13].actions.push_back(gl);
|
|
|
|
gl = new Global("", "CLEAR");
|
|
sc->hots[14].actions.push_back(gl);
|
|
|
|
gl = new Global("GS_SWITCH0", "TURNON"); // other
|
|
sc->hots[14].actions.push_back(gl);
|
|
|
|
loadSceneLevel("buspuz.mi_", "<after_bus_easy>", prefix);
|
|
_levels["buspuz.mi_"]->music = "sound.lib/blc_mus2.raw";
|
|
_levels["buspuz.mi_"]->musicRate = 11025;
|
|
|
|
Transition *after_bus_easy = new Transition("decide3.mi_");
|
|
after_bus_easy->intros.push_back("spider/cine/blcs003s.smk");
|
|
_levels["<after_bus_easy>"] = after_bus_easy;
|
|
|
|
Transition *after_bus_hard = new Transition("decide3.mi_");
|
|
after_bus_hard->intros.push_back("spider/cine/blcs004s.smk");
|
|
_levels["<after_bus_hard>"] = after_bus_hard;
|
|
|
|
loadSceneLevel("decide3.mi_", "", prefix);
|
|
_levels["decide3.mi_"]->music = "sound.lib/sh_mus.raw";
|
|
_levels["decide3.mi_"]->musicRate = 11025;
|
|
|
|
sc = (Scene *) _levels["decide3.mi_"];
|
|
cl = new ChangeLevel("alofintr.mi_");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("c4");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
loadSceneLevel("int_roof.mi_", "", prefix);
|
|
sc = (Scene *) _levels["int_roof.mi_"];
|
|
cl = new ChangeLevel("<recept>");
|
|
sc->hots[1].actions.push_back(cl);
|
|
cl = new ChangeLevel("<boil_selector_1>");
|
|
sc->hots[2].actions.push_back(cl);
|
|
Overlay *over = (Overlay*) sc->hots[0].actions[2];
|
|
over->path = "int_alof\\ROOFB1.SMK"; // seems to be a bug?
|
|
|
|
loadSceneLevel("alofintr.mi_", "<boil_selector_1>", prefix);
|
|
sc = (Scene *) _levels["alofintr.mi_"];
|
|
sc->intros.push_back("cine/swc002as.smk");
|
|
// This is necessary, for some reason
|
|
gl = new Global("GS_SWITCH1", "TURNON"); // alarm system
|
|
sc->hots[2].actions.push_back(gl);
|
|
gl = new Global("GS_SWITCH2", "TURNON"); // camera
|
|
sc->hots[2].actions.push_back(gl);
|
|
gl = new Global("GS_SWITCH3", "TURNON"); // lights recept
|
|
sc->hots[2].actions.push_back(gl);
|
|
gl = new Global("GS_SWITCH4", "TURNON"); // Side A door
|
|
sc->hots[2].actions.push_back(gl);
|
|
gl = new Global("GS_SWITCH5", "TURNON"); // Side B door
|
|
sc->hots[2].actions.push_back(gl);
|
|
gl = new Global("GS_SWITCH6", "TURNON"); // Office light
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
Transition *boil_selector_1 = new Transition("boiler.mi_", "boilhard.mi_");
|
|
_levels["<boil_selector_1>"] = boil_selector_1;
|
|
_levels["<boil_selector_1>"]->intros.push_back("spider/cine/leapdown.smk");
|
|
|
|
Transition *boil_selector_2 = new Transition("boiler.mi_", "boilhard.mi_");
|
|
_levels["<boil_selector_2>"] = boil_selector_2;
|
|
|
|
loadSceneLevel("boiler.mi_", "", prefix);
|
|
sc = (Scene *) _levels["boiler.mi_"];
|
|
over = (Overlay*) sc->hots[0].actions[2];
|
|
over->path = "int_alof\\BOILB1.SMK"; // seems to be a bug?
|
|
|
|
Code *fuse_panel = new Code("<fuse_panel>");
|
|
fuse_panel->levelIfWin = "<boil_selector_2>";
|
|
fuse_panel->prefix = prefix;
|
|
_levels["<fuse_panel>"] = fuse_panel;
|
|
|
|
Code *office = new Code("<office>");
|
|
office->prefix = prefix;
|
|
_levels["<office>"] = office;
|
|
|
|
cl = new ChangeLevel("<back_roof_1>");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<fuse_panel>");
|
|
sc->hots[3].actions.push_back(cl);
|
|
|
|
Transition *back_roof_1 = new Transition("int_roof.mi_");
|
|
_levels["<back_roof_1>"] = back_roof_1;
|
|
_levels["<back_roof_1>"]->intros.push_back("spider/cine/leapup.smk");
|
|
|
|
loadSceneLevel("boilhard.mi_", "", prefix);
|
|
sc = (Scene *) _levels["boilhard.mi_"];
|
|
over = (Overlay*) sc->hots[0].actions[2];
|
|
over->path = "int_alof\\BOILB1.SMK"; // seems to be a bug?
|
|
|
|
cl = new ChangeLevel("<back_roof_1>");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<fuse_panel>");
|
|
sc->hots[3].actions.push_back(cl);
|
|
|
|
Code *file_cabinet = new Code("<file_cabinet>");
|
|
file_cabinet->levelIfWin = "<alveroff_selector>";
|
|
file_cabinet->prefix = prefix;
|
|
_levels["<file_cabinet>"] = file_cabinet;
|
|
|
|
loadSceneLevel("alverofh.mi_", "", prefix);
|
|
sc = (Scene *) _levels["alverofh.mi_"];
|
|
|
|
cl = new ChangeLevel("<tape>");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<file_cabinet>");
|
|
sc->hots[3].actions.push_back(cl);
|
|
|
|
loadSceneLevel("alveroff.mi_", "", prefix);
|
|
sc = (Scene *) _levels["alveroff.mi_"];
|
|
|
|
cl = new ChangeLevel("<tape>");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<file_cabinet>");
|
|
sc->hots[3].actions.push_back(cl);
|
|
|
|
Transition *tape = new Transition("decide4.mi_");
|
|
_levels["<tape>"] = tape;
|
|
_levels["<tape>"]->intros.push_back("spider/cine/iaos001s.smk");
|
|
|
|
Transition *alveroff_selector = new Transition("alveroff.mi_", "alverofh.mi_");
|
|
_levels["<alveroff_selector>"] = alveroff_selector;
|
|
|
|
Code *recept = new Code("<recept>");
|
|
recept->prefix = prefix;
|
|
_levels["<recept>"] = recept;
|
|
|
|
loadSceneLevel("recept.mi_", "", prefix);
|
|
sc = (Scene *) _levels["recept.mi_"];
|
|
sc->intros.push_back("cine/recpinto.smk");
|
|
over = (Overlay*) sc->hots[0].actions[2];
|
|
over->path = "int_alof\\rec0B1.SMK"; // seems to be a bug?
|
|
|
|
cl = new ChangeLevel("<back_roof_2>");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<door_a>");
|
|
sc->hots[3].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<office>");
|
|
sc->hots[4].actions.push_back(cl);
|
|
|
|
Transition *door_a = new Transition("<over_apt_5>");
|
|
door_a->intros.push_back("spider/cine/iobs002s.smk");
|
|
_levels["<door_a>"] = door_a;
|
|
|
|
Transition *back_roof_2 = new Transition("int_roof.mi_");
|
|
_levels["<back_roof_2>"] = back_roof_2;
|
|
_levels["<back_roof_2>"]->intros.push_back("spider/cine/recpout.smk");
|
|
|
|
loadArcadeLevel("c4.mi_", "c2", "<over_hob_vul>", prefix);
|
|
_levels["c4.mi_"]->intros.push_back("cine/dals001s.smk");
|
|
|
|
loadArcadeLevel("c2.mi_", "<after_c2>", "<over_hob_vul>", prefix);
|
|
_levels["c2.mi_"]->intros.push_back("cine/dals002s.smk");
|
|
|
|
loadArcadeLevel("c4h.mi_", "c2", "<over_hob_vul>", prefix);
|
|
_levels["c4h.mi_"]->intros.push_back("cine/dals001s.smk");
|
|
|
|
loadArcadeLevel("c2h.mi_", "<after_c2>", "<over_hob_vul>", prefix);
|
|
_levels["c2h.mi_"]->intros.push_back("cine/dals002s.smk");
|
|
|
|
Transition *after_c2 = new Transition("decide4.mi_");
|
|
after_c2->intros.push_back("spider/cine/dals003s.smk");
|
|
_levels["<after_c2>"] = after_c2;
|
|
|
|
loadSceneLevel("decide4.mi_", "", prefix);
|
|
_levels["decide4.mi_"]->music = "sound.lib/sh_mus.raw";
|
|
_levels["decide4.mi_"]->musicRate = 11025;
|
|
sc = (Scene *) _levels["decide4.mi_"];
|
|
sc->intros.push_back("cine/apts006s.smk");
|
|
cl = new ChangeLevel("ball1.mi_");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("c5");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
loadArcadeLevel("c5.mi_", "<trans_apt_6>", "<over_hob2>", prefix);
|
|
if (_restoredContentEnabled)
|
|
_levels["c5.mi_"]->intros.push_back("cine/ppv006bs.smk");
|
|
_levels["c5.mi_"]->intros.push_back("cine/ctss001s.smk");
|
|
|
|
loadArcadeLevel("c5h.mi_", "<trans_apt_6>", "<over_hob2>", prefix);
|
|
if (_restoredContentEnabled)
|
|
_levels["c5.mi_"]->intros.push_back("cine/ppv006bs.smk");
|
|
_levels["c5h.mi_"]->intros.push_back("cine/ctss001s.smk");
|
|
|
|
Transition *trans_apt_6 = new Transition("factory1.mi_");
|
|
trans_apt_6->intros.push_back("spider/cine/ctss002s.smk");
|
|
trans_apt_6->intros.push_back("spider/cine/apts06as.smk");
|
|
_levels["<trans_apt_6>"] = trans_apt_6;
|
|
|
|
loadSceneLevel("ball1.mi_", "<note>", prefix);
|
|
_levels["ball1.mi_"]->music = "sound.lib/ballroom.raw";
|
|
_levels["ball1.mi_"]->musicRate = 11025;
|
|
if (_restoredContentEnabled)
|
|
_levels["ball1.mi_"]->intros.push_back("cine/ppv006as.smk");
|
|
loadSceneLevel("coat.mi_", "ball2.mi_", prefix);
|
|
_levels["coat.mi_"]->music = "sound.lib/ballroom.raw";
|
|
_levels["coat.mi_"]->musicRate = 11025;
|
|
|
|
Code *note = new Code("<note>");
|
|
note->levelIfWin = "coat.mi_";
|
|
note->intros.push_back("cine/dia005s.smk");
|
|
note->prefix = prefix;
|
|
_levels["<note>"] = note;
|
|
|
|
loadSceneLevel("ball2.mi_", "balcony.mi_", prefix);
|
|
_levels["ball2.mi_"]->intros.push_back("cine/register.smk");
|
|
_levels["ball2.mi_"]->music = "sound.lib/ballroom.raw";
|
|
_levels["ball2.mi_"]->musicRate = 11025;
|
|
|
|
loadSceneLevel("balcony.mi_", "factory1.mi_", prefix);
|
|
_levels["balcony.mi_"]->music = "sound.lib/balcony.raw";
|
|
_levels["balcony.mi_"]->musicRate = 11025;
|
|
|
|
loadSceneLevel("factory1.mi_", "intercom.mi_", prefix);
|
|
_levels["factory1.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["factory1.mi_"]->musicRate = 11025;
|
|
_levels["factory1.mi_"]->intros.push_back("cine/swc003s.smk");
|
|
loadSceneLevel("intercom.mi_", "c3", prefix);
|
|
_levels["intercom.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["intercom.mi_"]->musicRate = 11025;
|
|
|
|
loadArcadeLevel("c3.mi_", "c6", "<over_octo1>", prefix);
|
|
_levels["c3.mi_"]->intros.push_back("cine/vrfs001s.smk");
|
|
|
|
loadArcadeLevel("c3h.mi_", "c6", "<over_octo1>", prefix);
|
|
_levels["c3h.mi_"]->intros.push_back("cine/vrfs001s.smk");
|
|
|
|
loadArcadeLevel("c6.mi_", "<lock>", "<over_gas>", prefix);
|
|
_levels["c6.mi_"]->intros.push_back("cine/vrfs002s.smk");
|
|
_levels["c6.mi_"]->intros.push_back("cine/dia007s.smk");
|
|
_levels["c6.mi_"]->intros.push_back("cine/rdss001s.smk");
|
|
|
|
loadArcadeLevel("c6h.mi_", "<lock>", "<over_gas>", prefix);
|
|
_levels["c6h.mi_"]->intros.push_back("cine/vrfs002s.smk");
|
|
_levels["c6h.mi_"]->intros.push_back("cine/dia007s.smk");
|
|
_levels["c6h.mi_"]->intros.push_back("cine/rdss001s.smk");
|
|
|
|
Code *lock = new Code("<lock>");
|
|
lock->intros.push_back("cine/rdss003s.smk");
|
|
lock->levelIfWin = "movie2.mi_";
|
|
lock->prefix = prefix;
|
|
_levels["<lock>"] = lock;
|
|
|
|
loadSceneLevel("movie2.mi_", "decide5.mi_", prefix);
|
|
_levels["movie2.mi_"]->intros.push_back("cine/vrfs003s.smk");
|
|
_levels["movie2.mi_"]->music = "sound.lib/ims_mus2.raw";
|
|
_levels["movie2.mi_"]->musicRate = 11025;
|
|
|
|
loadSceneLevel("decide5.mi_", "", prefix);
|
|
_levels["decide5.mi_"]->music = "sound.lib/sh_mus.raw";
|
|
_levels["decide5.mi_"]->musicRate = 11025;
|
|
sc = (Scene *) _levels["decide5.mi_"];
|
|
|
|
cl = new ChangeLevel("movie3.mi_");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("decide6.mi_");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
loadSceneLevel("movie3.mi_", "movie4.mi_", prefix);
|
|
_levels["movie3.mi_"]->music = "sound.lib/ims_mus2.raw";
|
|
_levels["movie3.mi_"]->musicRate = 11025;
|
|
_levels["movie3.mi_"]->intros.push_back("cine/imss001s.smk");
|
|
loadSceneLevel("movie4.mi_", "<fuse_box>", prefix);
|
|
_levels["movie4.mi_"]->intros.push_back("cine/imss002s.smk");
|
|
_levels["movie4.mi_"]->music = "sound.lib/ims_mus2.raw";
|
|
_levels["movie4.mi_"]->musicRate = 11025;
|
|
|
|
Code *fuse_box = new Code("<fuse_box>");
|
|
fuse_box->levelIfWin = "<trans_fuse_box>";
|
|
fuse_box->prefix = prefix;
|
|
_levels["<fuse_box>"] = fuse_box;
|
|
|
|
Transition *trans_fuse_box = new Transition("decide6.mi_");
|
|
trans_fuse_box->intros.push_back("spider/cine/dia009s.smk");
|
|
trans_fuse_box->intros.push_back("spider/cine/imss003s.smk");
|
|
_levels["<trans_fuse_box>"] = trans_fuse_box;
|
|
|
|
loadSceneLevel("decide6.mi_", "", prefix);
|
|
_levels["decide6.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["decide6.mi_"]->musicRate = 11025;
|
|
sc = (Scene *) _levels["decide6.mi_"];
|
|
|
|
cl = new ChangeLevel("shoctalk.mi_");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("decide10.mi_");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
loadSceneLevel("shoctalk.mi_", "decide7.mi_", prefix);
|
|
_levels["shoctalk.mi_"]->music = "sound.lib/sh_mus.raw";
|
|
_levels["shoctalk.mi_"]->musicRate = 11025;
|
|
_levels["shoctalk.mi_"]->intros.push_back("cine/vrfs004s.smk");
|
|
|
|
loadSceneLevel("decide7.mi_", "", prefix);
|
|
_levels["decide7.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["decide7.mi_"]->musicRate = 11025;
|
|
sc = (Scene *) _levels["decide7.mi_"];
|
|
|
|
cl = new ChangeLevel("decide8.mi_");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("c13.mi_");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
loadArcadeLevel("c13.mi_", "<after_c13>", "<over_shock>", prefix);
|
|
_levels["c13.mi_"]->intros.push_back("cine/spf007bs.smk");
|
|
|
|
loadArcadeLevel("c13h.mi_", "<after_c13>", "<over_shock>", prefix);
|
|
_levels["c13h.mi_"]->intros.push_back("cine/spf007bs.smk");
|
|
|
|
Transition *after_c13 = new Transition("docoffi2.mi_");
|
|
after_c13->intros.push_back("spider/cine/vrfs06bs.smk");
|
|
after_c13->intros.push_back("spider/cine/spv064as.smk");
|
|
//after_c13->intros.push_back("spider/cine/spv064s.smk"); low-quality version?
|
|
_levels["<after_c13>"] = after_c13;
|
|
|
|
loadSceneLevel("docoffi2.mi_", "c12a", prefix);
|
|
_levels["docoffi2.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["docoffi2.mi_"]->musicRate = 11025;
|
|
|
|
loadArcadeLevel("c12.mi_", "<chip_lives_with_spiderman>", "<over_vr>", prefix);
|
|
_levels["c12.mi_"]->intros.push_back("cine/vrws010s.smk");
|
|
_levels["c12.mi_"]->intros.push_back("cine/cybs001s.smk");
|
|
_levels["c12a.mi_"] = _levels["c12.mi_"];
|
|
|
|
loadArcadeLevel("c12h.mi_", "<chip_lives_with_spiderman>", "<over_vr>", prefix);
|
|
_levels["c12h.mi_"]->intros.push_back("cine/vrws010s.smk");
|
|
_levels["c12h.mi_"]->intros.push_back("cine/cybs001s.smk");
|
|
_levels["c12ah.mi_"] = _levels["c12h.mi_"];
|
|
|
|
loadSceneLevel("decide8.mi_", "", prefix);
|
|
_levels["decide8.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["decide8.mi_"]->musicRate = 11025;
|
|
sc = (Scene *) _levels["decide8.mi_"];
|
|
|
|
cl = new ChangeLevel("c8");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("c9");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
loadArcadeLevel("c8.mi_", "<after_c8>", "<over_myst2>", prefix);
|
|
_levels["c8.mi_"]->intros.push_back("cine/utns001s.smk");
|
|
|
|
loadArcadeLevel("c8h.mi_", "<after_c8>", "<over_myst2>", prefix);
|
|
_levels["c8h.mi_"]->intros.push_back("cine/utns001s.smk");
|
|
|
|
Transition *after_c8 = new Transition("c10");
|
|
after_c8->intros.push_back("spider/cine/utns002s.smk");
|
|
_levels["<after_c8>"] = after_c8;
|
|
|
|
loadArcadeLevel("c9.mi_", "<after_c9>", "<over_vul2>", prefix);
|
|
_levels["c9.mi_"]->intros.push_back("cine/vrfs005s.smk");
|
|
|
|
loadArcadeLevel("c9h.mi_", "<after_c9>", "<over_vul2>", prefix);
|
|
_levels["c9h.mi_"]->intros.push_back("cine/vrfs005s.smk");
|
|
|
|
Transition *after_c9 = new Transition("c10");
|
|
after_c9->intros.push_back("spider/cine/vrfs006s.smk");
|
|
_levels["<after_c9>"] = after_c9;
|
|
|
|
loadArcadeLevel("c10.mi_", "<after_c10>", "<over_cam>", prefix);
|
|
_levels["c10.mi_"]->intros.push_back("cine/utns003s.smk");
|
|
|
|
loadArcadeLevel("c10h.mi_", "<after_c10>", "<over_cam>", prefix);
|
|
_levels["c10h.mi_"]->intros.push_back("cine/utns003s.smk");
|
|
|
|
Transition *after_c10 = new Transition("docoffic.mi_");
|
|
after_c10->intros.push_back("spider/cine/utns004s.smk");
|
|
after_c10->intros.push_back("spider/cine/bustitxs.smk");
|
|
_levels["<after_c10>"] = after_c10;
|
|
|
|
loadSceneLevel("docoffic.mi_", "decide9.mi_", prefix);
|
|
_levels["docoffic.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["docoffic.mi_"]->musicRate = 11025;
|
|
|
|
loadSceneLevel("decide9.mi_", "", prefix);
|
|
_levels["decide9.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["decide9.mi_"]->musicRate = 11025;
|
|
sc = (Scene *) _levels["decide9.mi_"];
|
|
sc->intros.push_back("cine/doocin1s.smk");
|
|
|
|
cl = new ChangeLevel("c11s");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("c12s");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
// Octopus fight without Mason
|
|
loadArcadeLevel("c11.mi_", "<chip_dies_with_shocker>", "<over_octo2>", prefix);
|
|
_levels["c11s.mi_"] = _levels["c11.mi_"];
|
|
|
|
loadArcadeLevel("c11h.mi_", "<chip_dies_with_shocker>", "<over_octo2>", prefix);
|
|
_levels["c11sh.mi_"] = _levels["c11h.mi_"];
|
|
|
|
loadArcadeLevel("c12.mi_", "<chip_lives_with_shocker>", "<over_vr>", prefix);
|
|
_levels["c12.mi_"]->intros.push_back("cine/vrwd001s.smk");
|
|
_levels["c12.mi_"]->intros.push_back("cine/cybs001s.smk");
|
|
_levels["c12s.mi_"] = _levels["c12.mi_"];
|
|
|
|
loadArcadeLevel("c12h.mi_", "<chip_lives_with_shocker>", "<over_vr>", prefix);
|
|
_levels["c12h.mi_"]->intros.push_back("cine/vrwd001s.smk");
|
|
_levels["c12h.mi_"]->intros.push_back("cine/cybs001s.smk");
|
|
|
|
_levels["c12sh.mi_"] = _levels["c12h.mi_"];
|
|
|
|
loadSceneLevel("decide10.mi_", "", prefix);
|
|
_levels["decide10.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["decide10.mi_"]->musicRate = 11025;
|
|
sc = (Scene *) _levels["decide10.mi_"];
|
|
sc->intros.push_back("cine/dia012s.smk");
|
|
|
|
cl = new ChangeLevel("docoffi1.mi_");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("<dont_believe_mason>");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
loadSceneLevel("docoffi1.mi_", "decide11.mi_", prefix);
|
|
_levels["docoffi1.mi_"]->intros.push_back("cine/doos002s.smk");
|
|
_levels["docoffi1.mi_"]->intros.push_back("cine/doocin2s.smk");
|
|
_levels["docoffi1.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["docoffi1.mi_"]->musicRate = 11025;
|
|
|
|
loadSceneLevel("decide11.mi_", "", prefix);
|
|
_levels["decide11.mi_"]->music = "sound.lib/vm_mus.raw";
|
|
_levels["decide11.mi_"]->musicRate = 11025;
|
|
sc = (Scene *) _levels["decide11.mi_"];
|
|
//sc->intros.push_back("cine/dia012s.smk");
|
|
|
|
cl = new ChangeLevel("c11m");
|
|
sc->hots[2].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[2].actions.push_back(gl);
|
|
|
|
cl = new ChangeLevel("c12m");
|
|
sc->hots[4].actions.push_back(cl);
|
|
gl = new Global("GS_LEVELWON", "TURNON");
|
|
sc->hots[4].actions.push_back(gl);
|
|
|
|
// No c7/c7h level?
|
|
// Octopus fight with Mason
|
|
loadArcadeLevel("c11.mi_", "<chip_dies_with_mason>", "<over_octo>", prefix);
|
|
_levels["c11m.mi_"] = _levels["c11.mi_"];
|
|
loadArcadeLevel("c11h.mi_", "<chip_dies_with_mason>", "<over_octo>", prefix);
|
|
_levels["c11mh.mi_"] = _levels["c11h.mi_"];
|
|
|
|
loadArcadeLevel("c12.mi_", "<chip_lives_with_mason>", "<over_vr>", prefix);
|
|
_levels["c12.mi_"]->intros.push_back("cine/cybs001s.smk");
|
|
_levels["c12m.mi_"] = _levels["c12.mi_"];
|
|
|
|
loadArcadeLevel("c12h.mi_", "<chip_lives_with_mason>", "<over_vr>", prefix);
|
|
_levels["c12h.mi_"]->intros.push_back("cine/cybs001s.smk");
|
|
_levels["c12mh.mi_"] = _levels["c12h.mi_"];
|
|
|
|
// Game overs
|
|
Transition *over_apt_1 = new Transition("tryagain.mi_");
|
|
over_apt_1->intros.push_back("spider/cine/ross003s.smk");
|
|
over_apt_1->intros.push_back("spider/cine/apts01as.smk");
|
|
_levels["<over_apt_1>"] = over_apt_1;
|
|
|
|
Transition *over_apt_5 = new Transition("tryagain.mi_");
|
|
over_apt_5->intros.push_back("spider/cine/apts05as.smk");
|
|
_levels["<over_apt_5>"] = over_apt_5;
|
|
|
|
Transition *over_alley = new Transition("tryagain.mi_");
|
|
over_alley->intros.push_back("spider/cine/bals002s.smk");
|
|
over_alley->intros.push_back("spider/cine/apts01as.smk");
|
|
_levels["<over_alley>"] = over_alley;
|
|
|
|
Transition *over_bus = new Transition("tryagain.mi_");
|
|
over_bus->intros.push_back("spider/cine/blcs002s.smk");
|
|
over_bus->intros.push_back("spider/cine/apt04as.smk");
|
|
_levels["<over_bus>"] = over_bus;
|
|
|
|
Transition *over_octo1 = new Transition("tryagain.mi_");
|
|
over_octo1->intros.push_back("spider/cine/doos001a.smk");
|
|
_levels["<over_octo1>"] = over_octo1;
|
|
|
|
Transition *over_hob_vul = new Transition("tryagain.mi_");
|
|
over_hob_vul->intros.push_back("spider/cine/dals001a.smk");
|
|
over_hob_vul->intros.push_back("spider/cine/apts001s.smk");
|
|
_levels["<over_hob_vul>"] = over_hob_vul;
|
|
|
|
Transition *over_hob2 = new Transition("tryagain.mi_");
|
|
over_hob2->intros.push_back("spider/cine/ctss01as.smk");
|
|
over_hob2->intros.push_back("spider/cine/apts001s.smk");
|
|
_levels["<over_hob2>"] = over_hob2;
|
|
|
|
Transition *over_gas = new Transition("tryagain.mi_");
|
|
over_gas->intros.push_back("spider/cine/rdss002s.smk");
|
|
_levels["<over_gas>"] = over_gas;
|
|
|
|
Transition *over_myst2 = new Transition("tryagain.mi_");
|
|
over_myst2->intros.push_back("spider/cine/utns01as.smk");
|
|
_levels["<over_myst2>"] = over_myst2;
|
|
|
|
Transition *over_cam = new Transition("tryagain.mi_");
|
|
over_cam->intros.push_back("spider/cine/utns04as.smk");
|
|
_levels["<over_cam>"] = over_cam;
|
|
|
|
Transition *over_octo2 = new Transition("tryagain.mi_");
|
|
over_octo2->intros.push_back("spider/cine/vrfs01as.smk");
|
|
_levels["<over_octo2>"] = over_octo2;
|
|
|
|
Transition *over_vul2 = new Transition("tryagain.mi_");
|
|
over_vul2->intros.push_back("spider/cine/vrfs05as.smk");
|
|
_levels["<over_vul2>"] = over_vul2;
|
|
|
|
Transition *over_shock = new Transition("tryagain.mi_");
|
|
over_shock->intros.push_back("spider/cine/vrfs06as.smk");
|
|
_levels["<over_shock>"] = over_shock;
|
|
|
|
Transition *over_vr = new Transition("tryagain.mi_");
|
|
over_vr->intros.push_back("spider/cine/cybs002s.smk");
|
|
_levels["<over_vr>"] = over_vr;
|
|
|
|
// Endings
|
|
|
|
// Worst ending
|
|
Transition *dont_believe_mason = new Transition("<credits>");
|
|
dont_believe_mason->intros.push_back("spider/cine/doos004s.smk");
|
|
dont_believe_mason->intros.push_back("spider/cine/apts008s.smk");
|
|
_levels["<dont_believe_mason>"] = dont_believe_mason;
|
|
|
|
Transition *chip_dies_with_mason = new Transition("<credits>");
|
|
chip_dies_with_mason->intros.push_back("spider/cine/doos003s.smk");
|
|
chip_dies_with_mason->intros.push_back("spider/cine/vrws002s.smk");
|
|
_levels["<chip_dies_with_mason>"] = chip_dies_with_mason;
|
|
|
|
Transition *chip_dies_with_shocker = new Transition("<credits>");
|
|
chip_dies_with_shocker->intros.push_back("spider/cine/doos001s.smk");
|
|
chip_dies_with_shocker->intros.push_back("spider/cine/vrws001s.smk");
|
|
_levels["<chip_dies_with_shocker>"] = chip_dies_with_shocker;
|
|
|
|
// Unreachable?
|
|
Transition *chip_dies_with_spiderman = new Transition("<credits>");
|
|
chip_dies_with_spiderman->intros.push_back("spider/cine/vrws010s.smk");
|
|
_levels["<chip_dies_with_spiderman>"] = chip_dies_with_spiderman;
|
|
|
|
Transition *chip_lives_with_mason = new Transition("<credits>");
|
|
chip_lives_with_mason->intros.push_back("spider/cine/vrja001s.smk");
|
|
_levels["<chip_lives_with_mason>"] = chip_lives_with_mason;
|
|
|
|
Transition *chip_lives_with_shocker = new Transition("<credits>");
|
|
chip_lives_with_shocker->intros.push_back("spider/cine/vrja002s.smk");
|
|
chip_lives_with_shocker->intros.push_back("spider/cine/apts06cs.smk");
|
|
_levels["<chip_lives_with_shocker>"] = chip_lives_with_shocker;
|
|
|
|
// Best ending
|
|
Transition *chip_lives_with_spiderman = new Transition("<credits>");
|
|
chip_lives_with_spiderman->intros.push_back("spider/cine/vrja003s.smk");
|
|
chip_lives_with_spiderman->intros.push_back("spider/cine/wins001s.smk");
|
|
_levels["<chip_lives_with_spiderman>"] = chip_lives_with_spiderman;
|
|
|
|
Code *give_up = new Code("<give_up>");
|
|
give_up->prefix = prefix;
|
|
_levels["<give_up>"] = give_up;
|
|
|
|
_defaultCursor = "mouse/cursor1.smk";
|
|
|
|
// hints areas
|
|
_h1Area = Common::Rect(9, 45, 28, 60);
|
|
_h2Area = Common::Rect(37, 45, 56, 60);
|
|
_h3Area = Common::Rect(64, 45, 83, 60);
|
|
_nextLevel = "<start>";
|
|
}
|
|
|
|
void SpiderEngine::loadAssetsDemo() {
|
|
|
|
if (!_installerArchive.open("DATA.Z"))
|
|
error("Failed to open DATA.Z");
|
|
|
|
SearchMan.add("DATA.Z", (Common::Archive *) &_installerArchive, 0, false);
|
|
Common::String prefix = "sixdemo";
|
|
|
|
Common::ArchiveMemberList files;
|
|
LibFile *missions = loadLib("", "sixdemo/c_misc/missions.lib", true);
|
|
if (missions == nullptr || missions->listMembers(files) == 0)
|
|
error("Failed to load any file from missions.lib");
|
|
|
|
_levels["<quit>"]->prefix = prefix;
|
|
// start level
|
|
Transition *start = new Transition("sixdemo/mis/demo.mis");
|
|
start->prefix = prefix;
|
|
start->intros.push_back("demo/dcine1.smk");
|
|
start->intros.push_back("demo/dcine2.smk");
|
|
_levels["<start>"] = start;
|
|
|
|
loadArcadeLevel("c1.mi_", "sixdemo/mis/demo.mis", "sixdemo/mis/demo.mis", prefix);
|
|
|
|
loadLib("", "sixdemo/c_misc/fonts.lib", true);
|
|
loadFonts();
|
|
loadLib("c_misc/sound.lib/", "sixdemo/c_misc/sound.lib", true);
|
|
loadLib("demo/sound.lib/", "sixdemo/demo/sound.lib", true);
|
|
|
|
// Read assets from mis files
|
|
loadSceneLevel("sixdemo/mis/demo.mis", "", prefix);
|
|
ChangeLevel *cl = new ChangeLevel("c1.mi_");
|
|
|
|
Scene *sc = (Scene *) _levels["sixdemo/mis/demo.mis"];
|
|
sc->hots[1].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("sixdemo/mis/alley.mis");
|
|
sc->hots[2].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("<puz_matr>");
|
|
sc->hots[3].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("sixdemo/mis/shoctalk.mis");
|
|
sc->hots[4].actions.push_back(cl);
|
|
|
|
cl = new ChangeLevel("sixdemo/mis/order.mis");
|
|
sc->hots[5].actions.push_back(cl);
|
|
sc->music = "demo/sound.lib/menu_mus.raw";
|
|
|
|
loadSceneLevel("sixdemo/mis/order.mis", "", prefix);
|
|
sc = (Scene *) _levels["sixdemo/mis/order.mis"];
|
|
cl = new ChangeLevel("<quit>");
|
|
sc->hots[1].actions.push_back(cl);
|
|
|
|
loadSceneLevel("sixdemo/mis/alley.mis", "", prefix);
|
|
sc = (Scene *) _levels["sixdemo/mis/alley.mis"];
|
|
|
|
sc->intros.push_back("demo/aleyc01s.smk");
|
|
sc->music = "demo/sound.lib/alleymus.raw";
|
|
sc->levelIfWin = "sixdemo/mis/demo.mis";
|
|
sc->levelIfLose = "sixdemo/mis/demo.mis";
|
|
|
|
loadSceneLevel("sixdemo/mis/shoctalk.mis", "", prefix);
|
|
sc = (Scene *) _levels["sixdemo/mis/shoctalk.mis"];
|
|
sc->music = "demo/sound.lib/sh_mus.raw";
|
|
sc->musicRate = 11025;
|
|
|
|
Code *matrix = new Code("<puz_matr>");
|
|
matrix->prefix = prefix;
|
|
matrix->intros.push_back("demo/aleyc01s.smk");
|
|
matrix->levelIfWin = "sixdemo/mis/demo.mis";
|
|
matrix->levelIfLose = "sixdemo/mis/demo.mis";
|
|
_levels["<puz_matr>"] = matrix;
|
|
_soundPath = "c_misc/sound.lib/";
|
|
_defaultCursor = "mouse/cursor1.smk";
|
|
_nextLevel = "<start>";
|
|
}
|
|
|
|
Common::String SpiderEngine::findNextLevel(const Transition *trans) {
|
|
if (trans->nextLevel.empty())
|
|
return _sceneState["GS_PUZZLELEVEL"] == 0 ? trans->levelEasy : trans->levelHard;
|
|
|
|
return trans->nextLevel;
|
|
}
|
|
|
|
void SpiderEngine::loadFonts() {
|
|
Common::File file;
|
|
|
|
if (!file.open("block05.fgx"))
|
|
error("Cannot open font");
|
|
|
|
byte *font = (byte *)malloc(file.size());
|
|
file.read(font, file.size());
|
|
|
|
_font05.set_size(file.size()*8);
|
|
_font05.set_bits((byte *)font);
|
|
|
|
file.close();
|
|
free(font);
|
|
if (!file.open("scifi08.fgx"))
|
|
error("Cannot open font");
|
|
|
|
font = (byte *)malloc(file.size());
|
|
file.read(font, file.size());
|
|
|
|
_font08.set_size(file.size()*8);
|
|
_font08.set_bits((byte *)font);
|
|
|
|
free(font);
|
|
|
|
// Additional fonts
|
|
_font = FontMan.getFontByUsage(Graphics::FontManager::kConsoleFont);
|
|
}
|
|
|
|
void SpiderEngine::drawString(const Common::String &font, const Common::String &str, int x, int y, int w, uint32 color) {
|
|
if (font == "block05.fgx") {
|
|
for (uint32 c = 0; c < str.size(); c++) {
|
|
for (int i = 0; i < 5; i++) {
|
|
for (int j = 0; j < 5; j++) {
|
|
if (!_font05.get(275 + 40*str[c] + j*8 + i))
|
|
_compositeSurface->setPixel(x + 5 - i + 6*c, y + j, color);
|
|
}
|
|
}
|
|
}
|
|
} else if (font == "scifi08.fgx") {
|
|
for (uint32 c = 0; c < str.size(); c++) {
|
|
if (str[c] == 0)
|
|
continue;
|
|
assert(str[c] >= 32);
|
|
for (int i = 0; i < 6; i++) {
|
|
for (int j = 0; j < 8; j++) {
|
|
if (!_font08.get(1554 + 72*(str[c]-32) + j*8 + i))
|
|
_compositeSurface->setPixel(x + 6 - i + 7*c, y + j, color);
|
|
}
|
|
}
|
|
}
|
|
} else if (font == "console") {
|
|
_font->drawString(_compositeSurface, str, x, y, w, color);
|
|
} else
|
|
error("Invalid font: '%s'", font.c_str());
|
|
}
|
|
|
|
Common::Error SpiderEngine::loadGameStream(Common::SeekableReadStream *stream) {
|
|
int puzzleDifficulty = stream->readUint32LE();
|
|
int combatDifficulty = stream->readUint32LE();
|
|
int score = stream->readUint32LE();
|
|
const Common::String nextLevel = stream->readString();
|
|
loadGame(nextLevel, score, puzzleDifficulty, combatDifficulty);
|
|
return Common::kNoError;
|
|
}
|
|
|
|
void SpiderEngine::loadGame(const Common::String &nextLevel, int score, int puzzleDifficulty, int combatDifficulty) {
|
|
|
|
// We don't want to continue with any sound from a previous game
|
|
stopSound();
|
|
_sceneState["GS_PUZZLELEVEL"] = puzzleDifficulty;
|
|
_sceneState["GS_COMBATLEVEL"] = combatDifficulty;
|
|
_score = score;
|
|
_nextLevel = nextLevel;
|
|
_checkpoint = _nextLevel;
|
|
|
|
// Reset played intros
|
|
_intros.clear();
|
|
|
|
// Reset state variables from puzzles
|
|
for (int i = 0; i < 2; i++)
|
|
for (int j = 0; j < 10; j++)
|
|
_fuseState[i][j] = 0;
|
|
|
|
_isFuseRust = true;
|
|
_isFuseUnreadable = false;
|
|
for (int i = 0; i < 7; i++)
|
|
ingredients[i] = 0;
|
|
}
|
|
|
|
Common::Error SpiderEngine::saveGameStream(Common::WriteStream *stream, bool isAutosave) {
|
|
if (isAutosave)
|
|
return Common::kNoError;
|
|
|
|
if (_checkpoint.empty())
|
|
error("Invalid checkpoint!");
|
|
|
|
stream->writeUint32LE(_sceneState["GS_PUZZLELEVEL"]);
|
|
stream->writeUint32LE(_sceneState["GS_COMBATLEVEL"]);
|
|
stream->writeUint32LE(_score);
|
|
stream->writeString(_checkpoint);
|
|
stream->writeByte(0);
|
|
return Common::kNoError;
|
|
}
|
|
|
|
void SpiderEngine::drawBackToMenu(Hotspot *h) {
|
|
Graphics::Surface *menu = nullptr;
|
|
bool transparent = false;
|
|
if (_conversation.empty()) {
|
|
if (h->flags[0] == "HINTS" || h->flags[1] == "HINTS" || h->flags[2] == "HINTS") {
|
|
menu = decodeFrame("int_main/hint1.smk", 0);
|
|
} else if (h->flags[0] == "AUTO_BUTTONS" || h->flags[0] == "SINGLE_RUN") {
|
|
if (isDemo()) {
|
|
if (_currentLevel != "sixdemo/mis/demo.mis" && _currentLevel != "sixdemo/mis/order.mis") {
|
|
menu = decodeFrame("int_main/resume.smk", 0);
|
|
transparent = true;
|
|
}
|
|
} else {
|
|
if (_currentLevel != "mainmenu.mi_" && _currentLevel != "options.mi_" && _currentLevel != "combmenu.mi_")
|
|
menu = decodeFrame("int_main/menu.smk", 0);
|
|
}
|
|
}
|
|
|
|
if (menu) {
|
|
h->rect = Common::Rect(0, 0, menu->w, menu->h);
|
|
drawImage(*menu, 0, 0, transparent);
|
|
}
|
|
}
|
|
}
|
|
|
|
Common::String SpiderEngine::findNextLevel(const Common::String &level) {
|
|
if (Common::matchString(level.c_str(), "c#") || Common::matchString(level.c_str(), "c##") || Common::matchString(level.c_str(), "c##?"))
|
|
return level + (_sceneState["GS_COMBATLEVEL"] == 0 ? "" : "h") + ".mi_";
|
|
else {
|
|
return level;
|
|
}
|
|
}
|
|
|
|
} // End of namespace Hypno
|