[Scummvm-git-logs] scummvm master -> 5aef420c43c10aee2b91853e2d7faf02a93798d3
neuromancer
noreply at scummvm.org
Tue Mar 8 19:31:23 UTC 2022
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f725f3d8bf HYPNO: added difficulty selection in wet
860cc60f1b HYPNO: added menu for level selection in wet
5aef420c43 HYPNO: refactored hard coded functions of wet
Commit: f725f3d8bfba8a84baf00fc83d054879472decc6
https://github.com/scummvm/scummvm/commit/f725f3d8bfba8a84baf00fc83d054879472decc6
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-03-08T20:30:53+01:00
Commit Message:
HYPNO: added difficulty selection in wet
Changed paths:
engines/hypno/wet/wet.cpp
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index a16fc1008f7..541f996cd0f 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -471,13 +471,19 @@ void WetEngine::runMainMenu(Code *code) {
Common::Event event;
uint32 c = 252; // green
byte *palette;
- Graphics::Surface *frame = decodeFrame("c_misc/menus.smk", 16, &palette);
+ Graphics::Surface *menu = decodeFrame("c_misc/menus.smk", 16, &palette);
+ Graphics::Surface *overlay = decodeFrame("c_misc/menus.smk", 18, nullptr);
loadPalette(palette, 0, 256);
Common::String _name = "";
- drawImage(*frame, 0, 0, false);
- drawString("scifi08.fgx", "ENTER NAME :", 48, 50, 100, c);
- while (!shouldQuit()) {
+ Common::Rect subName(21, 10, 159, 24);
+
+ drawImage(*menu, 0, 0, false);
+ Graphics::Surface surName = overlay->getSubArea(subName);
+ drawImage(surName, subName.left, subName.top, false);
+ drawString("scifi08.fgx", "ENTER NAME :", 48, 50, 100, c);
+ bool cont = true;
+ while (!shouldQuit() && cont) {
while (g_system->getEventManager()->pollEvent(event)) {
// Events
switch (event.type) {
@@ -490,14 +496,15 @@ void WetEngine::runMainMenu(Code *code) {
if (event.kbd.keycode == Common::KEYCODE_BACKSPACE)
_name.deleteLastChar();
else if (event.kbd.keycode == Common::KEYCODE_RETURN && !_name.empty()) {
- _nextLevel = code->levelIfWin;
- return;
+ cont = false;
}
else if (Common::isAlnum(event.kbd.keycode)) {
+ playSound("sound/m_choice.raw", 1);
_name = _name + char(event.kbd.keycode - 32);
}
- drawImage(*frame, 0, 0, false);
+ drawImage(*menu, 0, 0, false);
+ drawImage(surName, subName.left, subName.top, false);
drawString("scifi08.fgx", "ENTER NAME :", 48, 50, 100, c);
drawString("scifi08.fgx", _name, 140, 50, 170, c);
break;
@@ -511,6 +518,73 @@ void WetEngine::runMainMenu(Code *code) {
drawScreen();
g_system->delayMillis(10);
}
+
+ Common::Rect subDifficulty(20, 104, 233, 119);
+ Graphics::Surface surDifficulty = overlay->getSubArea(subDifficulty);
+ drawImage(*menu, 0, 0, false);
+ drawImage(surDifficulty, subDifficulty.left, subDifficulty.top, false);
+
+ Common::Rect subWet(145, 149, 179, 159);
+ Graphics::Surface surWet = overlay->getSubArea(subWet);
+ drawImage(surWet, subWet.left, subWet.top, false);
+ playSound("sound/no_rapid.raw", 1, 11025);
+
+ Common::Rect subDamp(62, 149, 110, 159);
+ Graphics::Surface surDamp = overlay->getSubArea(subDamp);
+
+ Common::Rect subSoaked(204, 149, 272, 159);
+ Graphics::Surface surSoaked = overlay->getSubArea(subSoaked);
+
+ Common::Array<Common::String> difficulties;
+ difficulties.push_back("0");
+ difficulties.push_back("1");
+ difficulties.push_back("2");
+ uint32 idx = 1;
+
+ cont = true;
+ while (!shouldQuit() && cont) {
+ while (g_system->getEventManager()->pollEvent(event)) {
+ // Events
+ switch (event.type) {
+
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
+ break;
+
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode == Common::KEYCODE_LEFT && idx > 0) {
+ playSound("sound/no_rapid.raw", 1, 11025);
+ idx--;
+ } else if (event.kbd.keycode == Common::KEYCODE_RIGHT && idx < 2) {
+ playSound("sound/no_rapid.raw", 1, 11025);
+ idx++;
+ } else if (event.kbd.keycode == Common::KEYCODE_RETURN)
+ cont = false;
+
+ drawImage(*menu, 0, 0, false);
+ drawImage(surDifficulty, subDifficulty.left, subDifficulty.top, false);
+
+ if (difficulties[idx] == "0")
+ drawImage(surDamp, subDamp.left, subDamp.top, false);
+ else if (difficulties[idx] == "1")
+ drawImage(surWet, subWet.left, subWet.top, false);
+ else if (difficulties[idx] == "2")
+ drawImage(surSoaked, subSoaked.left, subSoaked.top, false);
+ else
+ error("Invalid difficulty: %s", difficulties[idx].c_str());
+
+ break;
+ default:
+ break;
+ }
+ }
+ drawScreen();
+ g_system->delayMillis(10);
+ }
+
+ _difficulty = difficulties[idx];
+ _nextLevel = code->levelIfWin;
+
}
Common::String WetEngine::findNextLevel(const Transition *trans) {
Commit: 860cc60f1be9f3d919863d5c5fc7b76c42304605
https://github.com/scummvm/scummvm/commit/860cc60f1be9f3d919863d5c5fc7b76c42304605
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-03-08T20:30:53+01:00
Commit Message:
HYPNO: added menu for level selection in wet
Changed paths:
engines/hypno/hypno.h
engines/hypno/wet/wet.cpp
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index 6c71e5bac63..d783fa824f1 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -345,6 +345,7 @@ public:
private:
void runMainMenu(Code *code);
+ void runLevelMenu(Code *code);
void runCheckLives(Code *code);
void endCredits(Code *code);
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index 541f996cd0f..d550595af74 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -253,11 +253,15 @@ void WetEngine::loadAssetsFullGame() {
_levels["<main_menu>"] = menu;
_levels["<main_menu>"]->levelIfWin = "<intros>";
+ Code *level_menu = new Code("<level_menu>");
+ _levels["<level_menu>"] = level_menu;
+ _levels["<level_menu>"]->levelIfWin = "?";
+
Transition *over = new Transition("<quit>");
over->intros.push_back("c_misc/gameover.smk");
_levels["<game_over>"] = over;
- Transition *intros = new Transition("c11");
+ Transition *intros = new Transition("<level_menu>");
intros->intros.push_back("c_misc/stardate.smk");
intros->intros.push_back("c_misc/intros.smk");
intros->intros.push_back("c_misc/confs.smk");
@@ -400,6 +404,8 @@ void WetEngine::runCode(Code *code) {
changeScreenMode("320x200");
if (code->name == "<main_menu>")
runMainMenu(code);
+ else if (code->name == "<level_menu>")
+ runLevelMenu(code);
else if (code->name == "<check_lives>")
runCheckLives(code);
else if (code->name == "<credits>")
@@ -467,6 +473,69 @@ void WetEngine::drawString(const Common::String &font, const Common::String &str
error("Invalid font: '%s'", font.c_str());
}
+void WetEngine::runLevelMenu(Code *code) {
+ Common::Event event;
+ byte *palette;
+ Graphics::Surface *menu = decodeFrame("c_misc/menus.smk", 20, &palette);
+ loadPalette(palette, 0, 256);
+ byte black[3] = {0x00, 0x00, 0x00}; // Always red?
+ byte lime[3] = {0x00, 0xFF, 0x00}; // Always red?
+ byte green[3] = {0x2C, 0x82, 0x28}; // Always red?
+ int lastLevel = 20;
+ int maxLevel = 20;
+ int currentLevel = 0;
+ for (int i = 0; i < maxLevel; i++)
+ if (i < lastLevel)
+ loadPalette((byte *) &green, 192+i, 1);
+ else
+ loadPalette((byte *) &black, 192+i, 1);
+
+ loadPalette((byte *) &lime, 192+currentLevel, 1);
+ drawImage(*menu, 0, 0, false);
+ bool cont = true;
+ while (!shouldQuit() && cont) {
+ while (g_system->getEventManager()->pollEvent(event)) {
+ // Events
+ switch (event.type) {
+
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
+ break;
+
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode == Common::KEYCODE_DOWN && currentLevel < lastLevel-1) {
+ playSound("sound/extra.raw", 1, 11025);
+ currentLevel++;
+ } else if (event.kbd.keycode == Common::KEYCODE_UP && currentLevel > 0) {
+ playSound("sound/extra.raw", 1, 11025);
+ currentLevel--;
+ } else if (event.kbd.keycode == Common::KEYCODE_RETURN ) {
+ _nextLevel = Common::String::format("c%d", rawChapterTable[currentLevel].id);
+ cont = false;
+ }
+
+ for (int i = 0; i < maxLevel; i++)
+ if (i < lastLevel)
+ loadPalette((byte *) &green, 192+i, 1);
+ else
+ loadPalette((byte *) &black, 192+i, 1);
+
+
+ loadPalette((byte *) &lime, 192+currentLevel, 1);
+ drawImage(*menu, 0, 0, false);
+ break;
+ default:
+ break;
+ }
+ }
+
+ drawScreen();
+ g_system->delayMillis(10);
+ }
+ menu->free();
+ delete menu;
+}
+
void WetEngine::runMainMenu(Code *code) {
Common::Event event;
uint32 c = 252; // green
Commit: 5aef420c43c10aee2b91853e2d7faf02a93798d3
https://github.com/scummvm/scummvm/commit/5aef420c43c10aee2b91853e2d7faf02a93798d3
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2022-03-08T20:30:53+01:00
Commit Message:
HYPNO: refactored hard coded functions of wet
Changed paths:
A engines/hypno/wet/hard.cpp
engines/hypno/hypno.h
engines/hypno/module.mk
engines/hypno/wet/wet.cpp
diff --git a/engines/hypno/hypno.h b/engines/hypno/hypno.h
index d783fa824f1..4945a40bc4d 100644
--- a/engines/hypno/hypno.h
+++ b/engines/hypno/hypno.h
@@ -318,6 +318,8 @@ class WetEngine : public HypnoEngine {
public:
WetEngine(OSystem *syst, const ADGameDescription *gd);
Common::HashMap<int, const struct chapterEntry*> _chapterTable;
+ Common::Array<int> _ids;
+
void loadAssets() override;
void loadAssetsDemoDisc();
void loadAssetsPCW();
diff --git a/engines/hypno/module.mk b/engines/hypno/module.mk
index 445e252cb56..b4e5b291a8e 100644
--- a/engines/hypno/module.mk
+++ b/engines/hypno/module.mk
@@ -19,6 +19,7 @@ MODULE_OBJS := \
spider/talk.o \
video.o \
wet/arcade.o \
+ wet/hard.o \
wet/wet.o
MODULE_DIRS += \
diff --git a/engines/hypno/wet/hard.cpp b/engines/hypno/wet/hard.cpp
new file mode 100644
index 00000000000..c5d8baa02c4
--- /dev/null
+++ b/engines/hypno/wet/hard.cpp
@@ -0,0 +1,239 @@
+/* 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/bitarray.h"
+#include "common/events.h"
+#include "common/config-manager.h"
+
+#include "hypno/hypno.h"
+
+namespace Hypno {
+
+void WetEngine::endCredits(Code *code) {
+ showCredits();
+ _nextLevel = "<main_menu>";
+}
+
+void WetEngine::runCode(Code *code) {
+ changeScreenMode("320x200");
+ if (code->name == "<main_menu>")
+ runMainMenu(code);
+ else if (code->name == "<level_menu>")
+ runLevelMenu(code);
+ else if (code->name == "<check_lives>")
+ runCheckLives(code);
+ else if (code->name == "<credits>")
+ endCredits(code);
+ else
+ error("invalid hardcoded level: %s", code->name.c_str());
+}
+
+void WetEngine::runCheckLives(Code *code) {
+ if (_lives < 0)
+ _nextLevel = "<game_over>";
+ else
+ _nextLevel = _checkpoint;
+}
+
+void WetEngine::runLevelMenu(Code *code) {
+ Common::Event event;
+ byte *palette;
+ Graphics::Surface *menu = decodeFrame("c_misc/menus.smk", 20, &palette);
+ loadPalette(palette, 0, 256);
+ byte black[3] = {0x00, 0x00, 0x00}; // Always red?
+ byte lime[3] = {0x00, 0xFF, 0x00}; // Always red?
+ byte green[3] = {0x2C, 0x82, 0x28}; // Always red?
+ int lastLevel = 20;
+ int maxLevel = 20;
+ int currentLevel = 0;
+ for (int i = 0; i < maxLevel; i++)
+ if (i < lastLevel)
+ loadPalette((byte *) &green, 192+i, 1);
+ else
+ loadPalette((byte *) &black, 192+i, 1);
+
+ loadPalette((byte *) &lime, 192+currentLevel, 1);
+ drawImage(*menu, 0, 0, false);
+ bool cont = true;
+ while (!shouldQuit() && cont) {
+ while (g_system->getEventManager()->pollEvent(event)) {
+ // Events
+ switch (event.type) {
+
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
+ break;
+
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode == Common::KEYCODE_DOWN && currentLevel < lastLevel-1) {
+ playSound("sound/extra.raw", 1, 11025);
+ currentLevel++;
+ } else if (event.kbd.keycode == Common::KEYCODE_UP && currentLevel > 0) {
+ playSound("sound/extra.raw", 1, 11025);
+ currentLevel--;
+ } else if (event.kbd.keycode == Common::KEYCODE_RETURN ) {
+ _nextLevel = Common::String::format("c%d", _ids[currentLevel]);
+ cont = false;
+ }
+
+ for (int i = 0; i < maxLevel; i++)
+ if (i < lastLevel)
+ loadPalette((byte *) &green, 192+i, 1);
+ else
+ loadPalette((byte *) &black, 192+i, 1);
+
+
+ loadPalette((byte *) &lime, 192+currentLevel, 1);
+ drawImage(*menu, 0, 0, false);
+ break;
+ default:
+ break;
+ }
+ }
+
+ drawScreen();
+ g_system->delayMillis(10);
+ }
+ menu->free();
+ delete menu;
+}
+
+void WetEngine::runMainMenu(Code *code) {
+ Common::Event event;
+ uint32 c = 252; // green
+ byte *palette;
+ Graphics::Surface *menu = decodeFrame("c_misc/menus.smk", 16, &palette);
+ Graphics::Surface *overlay = decodeFrame("c_misc/menus.smk", 18, nullptr);
+ loadPalette(palette, 0, 256);
+ Common::String _name = "";
+
+ Common::Rect subName(21, 10, 159, 24);
+
+ drawImage(*menu, 0, 0, false);
+ Graphics::Surface surName = overlay->getSubArea(subName);
+ drawImage(surName, subName.left, subName.top, false);
+ drawString("scifi08.fgx", "ENTER NAME :", 48, 50, 100, c);
+ bool cont = true;
+ while (!shouldQuit() && cont) {
+ while (g_system->getEventManager()->pollEvent(event)) {
+ // Events
+ switch (event.type) {
+
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
+ break;
+
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode == Common::KEYCODE_BACKSPACE)
+ _name.deleteLastChar();
+ else if (event.kbd.keycode == Common::KEYCODE_RETURN && !_name.empty()) {
+ cont = false;
+ }
+ else if (Common::isAlnum(event.kbd.keycode)) {
+ playSound("sound/m_choice.raw", 1);
+ _name = _name + char(event.kbd.keycode - 32);
+ }
+
+ drawImage(*menu, 0, 0, false);
+ drawImage(surName, subName.left, subName.top, false);
+ drawString("scifi08.fgx", "ENTER NAME :", 48, 50, 100, c);
+ drawString("scifi08.fgx", _name, 140, 50, 170, c);
+ break;
+
+
+ default:
+ break;
+ }
+ }
+
+ drawScreen();
+ g_system->delayMillis(10);
+ }
+
+ Common::Rect subDifficulty(20, 104, 233, 119);
+ Graphics::Surface surDifficulty = overlay->getSubArea(subDifficulty);
+ drawImage(*menu, 0, 0, false);
+ drawImage(surDifficulty, subDifficulty.left, subDifficulty.top, false);
+
+ Common::Rect subWet(145, 149, 179, 159);
+ Graphics::Surface surWet = overlay->getSubArea(subWet);
+ drawImage(surWet, subWet.left, subWet.top, false);
+ playSound("sound/no_rapid.raw", 1, 11025);
+
+ Common::Rect subDamp(62, 149, 110, 159);
+ Graphics::Surface surDamp = overlay->getSubArea(subDamp);
+
+ Common::Rect subSoaked(204, 149, 272, 159);
+ Graphics::Surface surSoaked = overlay->getSubArea(subSoaked);
+
+ Common::Array<Common::String> difficulties;
+ difficulties.push_back("0");
+ difficulties.push_back("1");
+ difficulties.push_back("2");
+ uint32 idx = 1;
+
+ cont = true;
+ while (!shouldQuit() && cont) {
+ while (g_system->getEventManager()->pollEvent(event)) {
+ // Events
+ switch (event.type) {
+
+ case Common::EVENT_QUIT:
+ case Common::EVENT_RETURN_TO_LAUNCHER:
+ break;
+
+ case Common::EVENT_KEYDOWN:
+ if (event.kbd.keycode == Common::KEYCODE_LEFT && idx > 0) {
+ playSound("sound/no_rapid.raw", 1, 11025);
+ idx--;
+ } else if (event.kbd.keycode == Common::KEYCODE_RIGHT && idx < 2) {
+ playSound("sound/no_rapid.raw", 1, 11025);
+ idx++;
+ } else if (event.kbd.keycode == Common::KEYCODE_RETURN)
+ cont = false;
+
+ drawImage(*menu, 0, 0, false);
+ drawImage(surDifficulty, subDifficulty.left, subDifficulty.top, false);
+
+ if (difficulties[idx] == "0")
+ drawImage(surDamp, subDamp.left, subDamp.top, false);
+ else if (difficulties[idx] == "1")
+ drawImage(surWet, subWet.left, subWet.top, false);
+ else if (difficulties[idx] == "2")
+ drawImage(surSoaked, subSoaked.left, subSoaked.top, false);
+ else
+ error("Invalid difficulty: %s", difficulties[idx].c_str());
+
+ break;
+ default:
+ break;
+ }
+ }
+ drawScreen();
+ g_system->delayMillis(10);
+ }
+
+ _difficulty = difficulties[idx];
+ _nextLevel = code->levelIfWin;
+
+}
+
+} // End of namespace Hypno
diff --git a/engines/hypno/wet/wet.cpp b/engines/hypno/wet/wet.cpp
index d550595af74..ac834a910ab 100644
--- a/engines/hypno/wet/wet.cpp
+++ b/engines/hypno/wet/wet.cpp
@@ -61,6 +61,7 @@ WetEngine::WetEngine(OSystem *syst, const ADGameDescription *gd) : HypnoEngine(s
const chapterEntry *entry = rawChapterTable;
while (entry->id) {
+ _ids.push_back(entry->id);
_chapterTable[entry->id] = entry;
entry++;
}
@@ -395,32 +396,6 @@ void WetEngine::showCredits() {
}
}
-void WetEngine::endCredits(Code *code) {
- showCredits();
- _nextLevel = "<main_menu>";
-}
-
-void WetEngine::runCode(Code *code) {
- changeScreenMode("320x200");
- if (code->name == "<main_menu>")
- runMainMenu(code);
- else if (code->name == "<level_menu>")
- runLevelMenu(code);
- else if (code->name == "<check_lives>")
- runCheckLives(code);
- else if (code->name == "<credits>")
- endCredits(code);
- else
- error("invalid hardcoded level: %s", code->name.c_str());
-}
-
-void WetEngine::runCheckLives(Code *code) {
- if (_lives < 0)
- _nextLevel = "<game_over>";
- else
- _nextLevel = _checkpoint;
-}
-
void WetEngine::loadFonts() {
Common::File file;
@@ -473,189 +448,6 @@ void WetEngine::drawString(const Common::String &font, const Common::String &str
error("Invalid font: '%s'", font.c_str());
}
-void WetEngine::runLevelMenu(Code *code) {
- Common::Event event;
- byte *palette;
- Graphics::Surface *menu = decodeFrame("c_misc/menus.smk", 20, &palette);
- loadPalette(palette, 0, 256);
- byte black[3] = {0x00, 0x00, 0x00}; // Always red?
- byte lime[3] = {0x00, 0xFF, 0x00}; // Always red?
- byte green[3] = {0x2C, 0x82, 0x28}; // Always red?
- int lastLevel = 20;
- int maxLevel = 20;
- int currentLevel = 0;
- for (int i = 0; i < maxLevel; i++)
- if (i < lastLevel)
- loadPalette((byte *) &green, 192+i, 1);
- else
- loadPalette((byte *) &black, 192+i, 1);
-
- loadPalette((byte *) &lime, 192+currentLevel, 1);
- drawImage(*menu, 0, 0, false);
- bool cont = true;
- while (!shouldQuit() && cont) {
- while (g_system->getEventManager()->pollEvent(event)) {
- // Events
- switch (event.type) {
-
- case Common::EVENT_QUIT:
- case Common::EVENT_RETURN_TO_LAUNCHER:
- break;
-
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_DOWN && currentLevel < lastLevel-1) {
- playSound("sound/extra.raw", 1, 11025);
- currentLevel++;
- } else if (event.kbd.keycode == Common::KEYCODE_UP && currentLevel > 0) {
- playSound("sound/extra.raw", 1, 11025);
- currentLevel--;
- } else if (event.kbd.keycode == Common::KEYCODE_RETURN ) {
- _nextLevel = Common::String::format("c%d", rawChapterTable[currentLevel].id);
- cont = false;
- }
-
- for (int i = 0; i < maxLevel; i++)
- if (i < lastLevel)
- loadPalette((byte *) &green, 192+i, 1);
- else
- loadPalette((byte *) &black, 192+i, 1);
-
-
- loadPalette((byte *) &lime, 192+currentLevel, 1);
- drawImage(*menu, 0, 0, false);
- break;
- default:
- break;
- }
- }
-
- drawScreen();
- g_system->delayMillis(10);
- }
- menu->free();
- delete menu;
-}
-
-void WetEngine::runMainMenu(Code *code) {
- Common::Event event;
- uint32 c = 252; // green
- byte *palette;
- Graphics::Surface *menu = decodeFrame("c_misc/menus.smk", 16, &palette);
- Graphics::Surface *overlay = decodeFrame("c_misc/menus.smk", 18, nullptr);
- loadPalette(palette, 0, 256);
- Common::String _name = "";
-
- Common::Rect subName(21, 10, 159, 24);
-
- drawImage(*menu, 0, 0, false);
- Graphics::Surface surName = overlay->getSubArea(subName);
- drawImage(surName, subName.left, subName.top, false);
- drawString("scifi08.fgx", "ENTER NAME :", 48, 50, 100, c);
- bool cont = true;
- while (!shouldQuit() && cont) {
- while (g_system->getEventManager()->pollEvent(event)) {
- // Events
- switch (event.type) {
-
- case Common::EVENT_QUIT:
- case Common::EVENT_RETURN_TO_LAUNCHER:
- break;
-
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_BACKSPACE)
- _name.deleteLastChar();
- else if (event.kbd.keycode == Common::KEYCODE_RETURN && !_name.empty()) {
- cont = false;
- }
- else if (Common::isAlnum(event.kbd.keycode)) {
- playSound("sound/m_choice.raw", 1);
- _name = _name + char(event.kbd.keycode - 32);
- }
-
- drawImage(*menu, 0, 0, false);
- drawImage(surName, subName.left, subName.top, false);
- drawString("scifi08.fgx", "ENTER NAME :", 48, 50, 100, c);
- drawString("scifi08.fgx", _name, 140, 50, 170, c);
- break;
-
-
- default:
- break;
- }
- }
-
- drawScreen();
- g_system->delayMillis(10);
- }
-
- Common::Rect subDifficulty(20, 104, 233, 119);
- Graphics::Surface surDifficulty = overlay->getSubArea(subDifficulty);
- drawImage(*menu, 0, 0, false);
- drawImage(surDifficulty, subDifficulty.left, subDifficulty.top, false);
-
- Common::Rect subWet(145, 149, 179, 159);
- Graphics::Surface surWet = overlay->getSubArea(subWet);
- drawImage(surWet, subWet.left, subWet.top, false);
- playSound("sound/no_rapid.raw", 1, 11025);
-
- Common::Rect subDamp(62, 149, 110, 159);
- Graphics::Surface surDamp = overlay->getSubArea(subDamp);
-
- Common::Rect subSoaked(204, 149, 272, 159);
- Graphics::Surface surSoaked = overlay->getSubArea(subSoaked);
-
- Common::Array<Common::String> difficulties;
- difficulties.push_back("0");
- difficulties.push_back("1");
- difficulties.push_back("2");
- uint32 idx = 1;
-
- cont = true;
- while (!shouldQuit() && cont) {
- while (g_system->getEventManager()->pollEvent(event)) {
- // Events
- switch (event.type) {
-
- case Common::EVENT_QUIT:
- case Common::EVENT_RETURN_TO_LAUNCHER:
- break;
-
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_LEFT && idx > 0) {
- playSound("sound/no_rapid.raw", 1, 11025);
- idx--;
- } else if (event.kbd.keycode == Common::KEYCODE_RIGHT && idx < 2) {
- playSound("sound/no_rapid.raw", 1, 11025);
- idx++;
- } else if (event.kbd.keycode == Common::KEYCODE_RETURN)
- cont = false;
-
- drawImage(*menu, 0, 0, false);
- drawImage(surDifficulty, subDifficulty.left, subDifficulty.top, false);
-
- if (difficulties[idx] == "0")
- drawImage(surDamp, subDamp.left, subDamp.top, false);
- else if (difficulties[idx] == "1")
- drawImage(surWet, subWet.left, subWet.top, false);
- else if (difficulties[idx] == "2")
- drawImage(surSoaked, subSoaked.left, subSoaked.top, false);
- else
- error("Invalid difficulty: %s", difficulties[idx].c_str());
-
- break;
- default:
- break;
- }
- }
- drawScreen();
- g_system->delayMillis(10);
- }
-
- _difficulty = difficulties[idx];
- _nextLevel = code->levelIfWin;
-
-}
-
Common::String WetEngine::findNextLevel(const Transition *trans) {
if (trans->nextLevel.empty())
error("Invalid transition!");
More information about the Scummvm-git-logs
mailing list