[Scummvm-git-logs] scummvm master -> 5650217194a7fc836ae8f3fe42cb72e27b6db9a0
dreammaster
dreammaster at scummvm.org
Thu Apr 8 04:21:08 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:
5650217194 AGS: Workaround for QFG2 F10 cheat key
Commit: 5650217194a7fc836ae8f3fe42cb72e27b6db9a0
https://github.com/scummvm/scummvm/commit/5650217194a7fc836ae8f3fe42cb72e27b6db9a0
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-04-07T21:21:00-07:00
Commit Message:
AGS: Workaround for QFG2 F10 cheat key
Changed paths:
engines/ags/engine/script/cc_instance.cpp
engines/ags/engine/script/cc_instance.h
engines/ags/shared/gui/guimain.cpp
engines/ags/shared/gui/guimain.h
diff --git a/engines/ags/engine/script/cc_instance.cpp b/engines/ags/engine/script/cc_instance.cpp
index 082d0665b6..f769f17f3c 100644
--- a/engines/ags/engine/script/cc_instance.cpp
+++ b/engines/ags/engine/script/cc_instance.cpp
@@ -44,6 +44,7 @@
#include "ags/shared/util/memory.h"
#include "ags/shared/util/string_utils.h" // linux strnicmp definition
#include "ags/globals.h"
+#include "ags/ags.h"
namespace AGS3 {
@@ -513,6 +514,19 @@ int ccInstance::Run(int32_t curpc) {
DumpInstruction(codeOp);
}
+ switch (checkForWorkaround(codeOp)) {
+ case WorkaroundResult::WR_SKIP_FUNCTION:
+ codeOp.Instruction.Code = 0;
+ _G(current_instance) = this;
+ next_call_needs_object = 0;
+ num_args_to_func = -1;
+
+ pc += codeOp.ArgCount + 1;
+ continue;
+ default:
+ break;
+ }
+
switch (codeOp.Instruction.Code) {
case SCMD_LINENUM:
line_number = arg1.IValue;
@@ -1199,6 +1213,18 @@ int ccInstance::Run(int32_t curpc) {
}
}
+ccInstance::WorkaroundResult ccInstance::checkForWorkaround(ScriptOperation &codeOp) {
+ if (pc == 0x72bab && codeOp.Instruction.Code == SCMD_CALLEXT &&
+ ::AGS::g_vm->getGameId() == "qfg2agdi") {
+ GUIMain &gui = _GP(guis)[2];
+ registers[SREG_AX] = gui.IsVisibleAndNotConcealed() ? 1 : 0;
+
+ return WorkaroundResult::WR_SKIP_FUNCTION;
+ }
+
+ return WorkaroundResult::WR_NONE;
+}
+
String ccInstance::GetCallStack(int maxLines) {
String buffer = String::FromFormat("in \"%s\", line %d\n", runningInst->instanceof->GetSectionName(pc), line_number);
diff --git a/engines/ags/engine/script/cc_instance.h b/engines/ags/engine/script/cc_instance.h
index 176a5502de..16b9025d25 100644
--- a/engines/ags/engine/script/cc_instance.h
+++ b/engines/ags/engine/script/cc_instance.h
@@ -217,6 +217,10 @@ protected:
// Function call stack processing
void PushToFuncCallStack(FunctionCallStack &func_callstack, const RuntimeScriptValue &rval);
void PopFromFuncCallStack(FunctionCallStack &func_callstack, int32_t num_entries);
+
+private:
+ enum WorkaroundResult { WR_NONE, WR_SKIP_FUNCTION };
+ WorkaroundResult checkForWorkaround(ScriptOperation &codeOp);
};
} // namespace AGS3
diff --git a/engines/ags/shared/gui/guimain.cpp b/engines/ags/shared/gui/guimain.cpp
index e7b54f6c8d..59b3344d24 100644
--- a/engines/ags/shared/gui/guimain.cpp
+++ b/engines/ags/shared/gui/guimain.cpp
@@ -175,6 +175,11 @@ bool GUIMain::IsVisible() const {
return (_flags & kGUIMain_Visible) != 0;
}
+bool GUIMain::IsVisibleAndNotConcealed() const {
+ return (_flags & kGUIMain_Visible) != 0 &&
+ (_flags & kGUIMain_Concealed) == 0;
+}
+
void GUIMain::AddControl(GUIControlType type, int id, GUIObject *control) {
_ctrlRefs.push_back(std::make_pair(type, id));
_controls.push_back(control);
diff --git a/engines/ags/shared/gui/guimain.h b/engines/ags/shared/gui/guimain.h
index c32da7fe97..e6936a8129 100644
--- a/engines/ags/shared/gui/guimain.h
+++ b/engines/ags/shared/gui/guimain.h
@@ -98,6 +98,7 @@ public:
// For example GUI with kGUIPopupMouseY style will not be shown unless
// mouse cursor is at certain position on screen.
bool IsVisible() const;
+ bool IsVisibleAndNotConcealed() const;
int32_t FindControlUnderMouse() const;
// this version allows some extra leeway in the Editor so that
More information about the Scummvm-git-logs
mailing list