[Scummvm-git-logs] scummvm master -> 6da5e4aa3124bec2a1eba270e98bcba1bda190e2
whoozle
noreply at scummvm.org
Thu Oct 22 10:43:28 UTC 2026
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
6da5e4aa31 PHOENIXVR: Run Sherlock - The Mystery of Mummy
Commit: 6da5e4aa3124bec2a1eba270e98bcba1bda190e2
https://github.com/scummvm/scummvm/commit/6da5e4aa3124bec2a1eba270e98bcba1bda190e2
Author: Vladimir Menshakov (vladimir.menshakov at gmail.com)
Date: 2026-10-22T11:42:44+01:00
Commit Message:
PHOENIXVR: Run Sherlock - The Mystery of Mummy
Add enough commands to compile and run sherlock startup script.
The game is not playable just yet.
Changed paths:
engines/phoenixvr/commands_v2.cpp
engines/phoenixvr/phoenixvr.cpp
engines/phoenixvr/script_v2.cpp
diff --git a/engines/phoenixvr/commands_v2.cpp b/engines/phoenixvr/commands_v2.cpp
index 5974a89c82b..5f0f1635989 100644
--- a/engines/phoenixvr/commands_v2.cpp
+++ b/engines/phoenixvr/commands_v2.cpp
@@ -51,6 +51,59 @@ struct Sub : public Command {
}
};
+struct Add_Item : public Command {
+ Common::String name;
+ Common::String index;
+ Add_Item(const Common::Array<Common::String> &args) : name(args[0]), index(args[1]) {}
+ void exec(ExecutionContext &ctx) const override {
+ auto idx = valueOf(index);
+ warning("add_item %s %d", name.c_str(), idx);
+ }
+};
+
+struct Use_Item : public Command {
+ Common::String name;
+ Use_Item(const Common::Array<Common::String> &args) : name(args[0]) {}
+ void exec(ExecutionContext &ctx) const override {
+ warning("use_item %s", name.c_str());
+ }
+};
+
+struct Remove_Item : public Command {
+ Common::String name;
+ Remove_Item(const Common::Array<Common::String> &args) : name(args[0]) {}
+ void exec(ExecutionContext &ctx) const override {
+ warning("remove_item %s", name.c_str());
+ }
+};
+
+struct Drop_Item : public Command {
+ Drop_Item(const Common::Array<Common::String> &args) {}
+ void exec(ExecutionContext &ctx) const override {
+ warning("drop_item");
+ }
+};
+
+struct Display_Message : public Command {
+ Common::String message;
+ Common::String duration;
+ Display_Message(const Common::Array<Common::String> &args) : message(args[0]), duration(args[1]) {}
+ void exec(ExecutionContext &ctx) const override {
+ auto m = valueOf(message);
+ auto d = valueOf(duration);
+ warning("display_message %d %d", m, d);
+ }
+};
+
+struct Call : public Command {
+ int test;
+ Call(const Common::Array<Common::String> &args) : test(atoi(args[0].c_str())) {}
+ void exec(ExecutionContext &ctx) const override {
+ debug("call %d", test);
+ g_engine->executeTest(test);
+ }
+};
+
struct Go_Back : public Command {
Go_Back(const Common::Array<Common::String> &args) {}
void exec(ExecutionContext &ctx) const override {
@@ -128,6 +181,18 @@ struct Play_Amb : public Command {
}
};
+struct Play_Music : public Command {
+ Common::String path;
+ Common::String volume;
+ int loops;
+ Play_Music(const Common::Array<Common::String> &args) : path(args[0]),
+ volume(args.size() > 1 ? args[1] : Common::String{}), loops(args.size() > 2 ? atoi(args[2].c_str()) : 0) {}
+ void exec(ExecutionContext &ctx) const override {
+ int v = !volume.empty() ? valueOf(volume) : 100;
+ g_engine->playSound(path, Audio::Mixer::kMusicSoundType, v, loops);
+ }
+};
+
struct Delay_Sound : public Command {
Common::String path;
float delay;
@@ -188,6 +253,10 @@ struct Stop_Sound : public Command {
}
};
+struct Stop_Music : public Stop_Sound {
+ Stop_Music(const Common::Array<Common::String> &args) : Stop_Sound(args) {}
+};
+
struct Stop_All_Sounds : public Command {
Stop_All_Sounds(const Common::Array<Common::String> &args) {}
@@ -347,7 +416,7 @@ struct Set_Jump_Key : public Command {
key = 0;
else if (keyName == "_KEY_RIGHT_CLIC")
key = 12;
- else if (keyName == "_KEY_Q" || keyName == "_KEY_SPACE")
+ else if (keyName == "_KEY_Q" || keyName == "_KEY_SPACE" || keyName == "_KEY_A")
warning("unhandled key name: %s", keyName.c_str());
else
error("unhandled key name: %s", keyName.c_str());
@@ -381,6 +450,20 @@ struct Test_Slot : public Command {
}
};
+struct Load_Context : public Command {
+ Load_Context(const Common::Array<Common::String> &args) {}
+ void exec(ExecutionContext &ctx) const override {
+ debug("load_context");
+ }
+};
+
+struct Save_Context : public Command {
+ Save_Context(const Common::Array<Common::String> &args) {}
+ void exec(ExecutionContext &ctx) const override {
+ debug("save_context");
+ }
+};
+
struct Load_Slot : public Command {
Common::String slot;
Load_Slot(const Common::Array<Common::String> &args) : slot(args[0]) {}
@@ -481,6 +564,7 @@ static const char *const kUnhandledV2Commands[] = {
"CURSOR_SET",
"CURSOR_SET_SPEED",
"DELAY_3DSOUND",
+ "DISPLAY",
"DIV",
"END",
"END_SCRIPT",
@@ -488,10 +572,11 @@ static const char *const kUnhandledV2Commands[] = {
"GET_MOUSE_BUTTON",
"GOTO_REF",
"INTERPOLATE_VIEW",
+ "LOAD_CURSORS",
+ "LOAD_LETTERS",
"MUL",
"NOT",
"OR",
- "PLAY_MUSIC",
"QUIT_SCRIPT",
"SET_EFFECTS_MODE",
"SET_FILTER_KEY",
@@ -505,7 +590,6 @@ static const char *const kUnhandledV2Commands[] = {
"SPRITE_SCREEN_MODE",
"SPRITE_WARP",
"SPRITE_WARP_MODE",
- "STOP_MUSIC",
"UNDERWATER_EFFECT",
"ZONES_CLICK_MODE"};
@@ -513,10 +597,14 @@ static const char *const kUnhandledV2Commands[] = {
#define COMMAND_LIST(E) \
E(Add) \
+ E(Add_Item) \
+ E(Display_Message) \
+ E(Call) \
E(Continue_Game) \
E(Cursor_Load) \
E(Cursor_Set) \
E(Delay_Sound) \
+ E(Drop_Item) \
E(Enter_Level) \
E(Exit_Game) \
E(Fade) \
@@ -525,14 +613,18 @@ static const char *const kUnhandledV2Commands[] = {
E(Goto_Warp) \
E(Leave_Save) \
E(Limit_View) \
+ E(Load_Context) \
E(Load_Slot) \
E(Play_3DSound) \
E(Play_Amb) \
E(Play_AnimBloc) \
E(Play_Movie) \
+ E(Play_Music) \
E(Play_Sound) \
E(Quit_URL) \
+ E(Remove_Item) \
E(Retrieve_State) \
+ E(Save_Context) \
E(Save_Slot) \
E(Set_Jump_Key) \
E(Set_Lens) \
@@ -546,11 +638,13 @@ static const char *const kUnhandledV2Commands[] = {
E(Stop_AnimBloc) \
E(Stop_Delay) \
E(Stop_Light) \
+ E(Stop_Music) \
E(Stop_Sound) \
E(Stop_Timer) \
E(Store_State) \
E(Sub) \
- E(Test_Slot)
+ E(Test_Slot) \
+ E(Use_Item)
#define ADD_COMMAND(NAME) \
if (cmd.equalsIgnoreCase(#NAME)) \
diff --git a/engines/phoenixvr/phoenixvr.cpp b/engines/phoenixvr/phoenixvr.cpp
index 25b933309a2..aeee772f2a8 100644
--- a/engines/phoenixvr/phoenixvr.cpp
+++ b/engines/phoenixvr/phoenixvr.cpp
@@ -1258,7 +1258,7 @@ Graphics::ManagedSurface *PhoenixVREngine::loadSurface(const Common::String &pat
dec.reset(new Image::PCXDecoder);
} else if (filename.hasSuffixIgnoreCase(".gif")) {
dec.reset(new Image::GIFDecoder);
- } else if (filename.hasSuffixIgnoreCase(".cur") || filename.hasSuffixIgnoreCase(".spr")) {
+ } else if (filename.hasSuffixIgnoreCase(".cur") || filename.hasSuffixIgnoreCase(".spr") || filename.hasSuffixIgnoreCase(".tga")) {
dec.reset(new Image::TGADecoder);
} else {
warning("can't find decoder for %s", filename.c_str());
diff --git a/engines/phoenixvr/script_v2.cpp b/engines/phoenixvr/script_v2.cpp
index 6afae4bf6a5..8a79728efdb 100644
--- a/engines/phoenixvr/script_v2.cpp
+++ b/engines/phoenixvr/script_v2.cpp
@@ -179,7 +179,7 @@ void ScriptV2::parseLine(const Common::String &line, uint lineno) {
_warpNames.push_back(vr);
_currentTest.reset();
_currentTestScope = nullptr;
- } else if (p.maybe("test]:")) {
+ } else if (p.maybe("test]:") || p.maybe("stest]:")) {
if (!_currentWarp)
error("test without warp");
auto idx = p.nextInt();
@@ -260,6 +260,8 @@ void ScriptV2::parseLine(const Common::String &line, uint lineno) {
} else if (p.maybe('(')) {
auto args = p.readStringList();
p.expect(')');
+ if (name.hasPrefixIgnoreCase("sh_"))
+ name = name.substr(3);
command = createV2Command(name, args, lineno);
} else
error("invalid syntax at %d", lineno);
More information about the Scummvm-git-logs
mailing list