[Scummvm-git-logs] scummvm master -> 44bc37764a1580ba506eb70ca57b0d7313e3deb0
neuromancer
noreply at scummvm.org
Sat Dec 25 17:49:59 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
44bc37764a HYPNO: added fuse box puzzle and some intros
Commit: 44bc37764a1580ba506eb70ca57b0d7313e3deb0
https://github.com/scummvm/scummvm/commit/44bc37764a1580ba506eb70ca57b0d7313e3deb0
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2021-12-25T18:49:30+01:00
Commit Message:
HYPNO: added fuse box puzzle and some intros
Changed paths:
engines/hypno/hypno.h
engines/hypno/spider/hard.cpp
engines/hypno/spider/spider.cpp
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 642df3360d..8e362b28e5 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -303,6 +303,7 @@ private:
void runOffice(Code *code);
void runFileCabinet(Code *code);
void runLock(Code *code);
+ void runFuseBox(Code *code);
bool isFuseRust = true;
bool isFuseUnreadable = false;
diff --git a/engines/hypno/spider/hard.cpp b/engines/hypno/spider/hard.cpp
index b60b80cd25..fd6d1e2411 100644
--- a/engines/hypno/spider/hard.cpp
+++ b/engines/hypno/spider/hard.cpp
@@ -41,6 +41,8 @@ void SpiderEngine::runCode(Code *code) {
runFileCabinet(code);
else if (code->name == "<lock>")
runLock(code);
+ else if (code->name == "<fuse_box>")
+ runFuseBox(code);
else if (code->name == "<credits>")
showCredits();
else
@@ -619,6 +621,160 @@ void SpiderEngine::runLock(Code *code) {
}
+void SpiderEngine::runFuseBox(Code *code) {
+ changeScreenMode("640x480");
+ Common::Point mousePos;
+ Common::Event event;
+
+ defaultCursor();
+
+ bool hdata[8][9] = {};
+ bool vdata[9][8] = {};
+
+ bool vsol[9][8] = {
+ {0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 1, 1, 1, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 1, 1, 1, 0},
+ {0, 1, 1, 1, 1, 1, 1, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 1, 1, 1, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0},
+ };
+
+ bool hsol[8][9] = {
+ {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 1, 0, 0, 1, 0, 0, 1, 0},
+ {0, 1, 0, 0, 1, 0, 0, 1, 0},
+ {0, 1, 0, 0, 1, 0, 0, 1, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, 1, 0, 0, 1, 0, 0, 0, 0},
+ {0, 1, 0, 0, 1, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ };
+
+ Common::Rect matrix(289, 89, 551, 351);
+ Common::Point fuse(292, 87);
+ Common::Point vz(289, 89);
+ Common::Point hz(289, 89);
+
+ uint32 dxVert = 412 - 380;
+ uint32 dyVert = 120 - 88;
+
+ uint32 dxHoriz = 359 - 327;
+ uint32 dyHoriz = 146 - 114;
+
+ Common::Rect vcell(0, 0, 8, 32);
+ Common::Rect hcell(0, 0, 32, 8);
+
+ loadImage("spider/movie2/hfusebg.smk", 0, 0, false);
+ Frames fuses = decodeFrames("spider/movie2/onoffuse.smk");
+ //drawImage(*fuses[1], matrix.left, matrix.top, true);
+
+ while (!shouldQuit()) {
+
+ while (g_system->getEventManager()->pollEvent(event)) {
+ mousePos = g_system->getEventManager()->getMousePos();
+ // Events
+ switch (event.type) {
+
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
+ break;
+
+ case Common::EVENT_LBUTTONDOWN:
+ if (matrix.contains(mousePos)) {
+ loadImage("spider/movie2/hfusebg.smk", 0, 0, false);
+
+ //drawImage(*fuses[1], matrix.left, matrix.top, true);
+ //bool found = false;
+ debug("\nvdata:");
+ for (int i = 0; i < 9; i++) {
+ for (int j = 0; j < 8; j++) {
+ vcell.moveTo(vz.x + i*dxVert, vz.y + j*dyVert);
+ if (vcell.contains(mousePos.x, mousePos.y)) {
+ vdata[i][j] = !vdata[i][j];
+ }
+ debugN("%d, ", vdata[i][j]);
+ }
+ debugN("\n");
+ }
+
+ debug("\nhdata:");
+ for (int i = 0; i < 8; i++) {
+ for (int j = 0; j < 9; j++) {
+ hcell.moveTo(hz.x + i*dxHoriz, hz.y + j*dyHoriz);
+ if (hcell.contains(mousePos.x, mousePos.y)) {
+ hdata[i][j] = !hdata[i][j];
+ }
+ debugN("%d, ", hdata[i][j]);
+ }
+ debugN("\n");
+ }
+
+ for (int i = 0; i < 9; i++) {
+ for (int j = 0; j < 8; j++) {
+ if (vdata[i][j]) {
+ vcell.moveTo(i*dxVert, j*dyVert);
+ Graphics::Surface sub = fuses[0]->getSubArea(vcell);
+ drawImage(sub, vz.x + i*dxVert, vz.y + j*dyVert, true);
+ }
+ }
+ }
+
+ for (int i = 0; i < 8; i++) {
+ for (int j = 0; j < 9; j++) {
+ if (hdata[i][j]) {
+ hcell.moveTo(i*dxHoriz, j*dyHoriz);
+ Graphics::Surface sub = fuses[0]->getSubArea(hcell);
+ drawImage(sub, hz.x + i*dxHoriz, hz.y + j*dyHoriz, true);
+ //debug("Found horizontal fuse between %d, %d and %d, %d", i, j, i + 1, j);
+ }
+ }
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ bool hfound = true;
+ for (int i = 0; i < 8; i++) {
+ for (int j = 0; j < 9; j++) {
+ if (hdata[i][j] != hsol[i][j]) {
+ hfound = false;
+ break;
+ }
+ }
+ if (!hfound)
+ break;
+ }
+
+ bool vfound = true;
+ for (int i = 0; i < 9; i++) {
+ for (int j = 0; j < 8; j++) {
+ if (vdata[i][j] != vsol[i][j]) {
+ vfound = false;
+ break;
+ }
+ }
+ if (!vfound)
+ break;
+ }
+
+ if (hfound && vfound) {
+ _nextLevel = code->levelIfWin;
+ return;
+ }
+
+ drawScreen();
+ g_system->delayMillis(10);
+ }
+}
+
void SpiderEngine::showCredits() {
changeScreenMode("640x480");
MVideo video("cine/credits.smk", Common::Point(0, 0), false, false, false);
diff --git a/engines/hypno/spider/spider.cpp b/engines/hypno/spider/spider.cpp
index 4011a86f27..bc490a77f7 100644
--- a/engines/hypno/spider/spider.cpp
+++ b/engines/hypno/spider/spider.cpp
@@ -330,8 +330,21 @@ void SpiderEngine::loadAssetsFullGame() {
sc->hots[2].actions.push_back(cl);
loadSceneLevel("movie3.mi_", "movie4.mi_", prefix);
- loadSceneLevel("movie4.mi_", "", prefix);
-
+ _levels["movie3.mi_"]->intros.push_back("cine/imss001s.smk");
+ loadSceneLevel("movie4.mi_", "<fuse_box>", prefix);
+ _levels["movie4.mi_"]->intros.push_back("cine/imss002s.smk");
+ Code *fuse_box = new Code();
+ fuse_box->name = "<fuse_box>";
+ fuse_box->levelIfWin = "<trans_fuse_box>";
+ _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);
+ loadSceneLevel("decide10.mi_", "", prefix);
// No c7 level?
loadArcadeLevel("c8.mi_", "", prefix);
@@ -438,7 +451,7 @@ void SpiderEngine::loadAssetsFullGame() {
over_apt_5->intros.push_back("spider/cine/apts05as.smk");
_levels["<over_apt_5>"] = over_apt_5;
- _nextLevel = "decide5.mi_";
+ _nextLevel = "<start>";
}
void SpiderEngine::loadAssetsDemo() {
More information about the Scummvm-git-logs
mailing list