[Scummvm-git-logs] scummvm master -> 560d09f3140de78ef5b3ad8d82e396db829bacc2
sluicebox
noreply at scummvm.org
Tue Jan 2 06:01:36 UTC 2024
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:
ad9537227b AGI: Fix print.at parameter count in SQ1 1.0X
0877da67b2 AGI: Fix uninit memory use, crash on `error`
560d09f314 AGI: Remove unused function declarations
Commit: ad9537227b1c03262e7973c7fda7a5a16badac81
https://github.com/scummvm/scummvm/commit/ad9537227b1c03262e7973c7fda7a5a16badac81
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2024-01-01T21:58:43-08:00
Commit Message:
AGI: Fix print.at parameter count in SQ1 1.0X
Fixes the skimmer sequence locking up when displaying a message box.
fixes bug #10872
Changed paths:
engines/agi/opcodes.cpp
diff --git a/engines/agi/opcodes.cpp b/engines/agi/opcodes.cpp
index 8b7a7ca2875..acb36d02510 100644
--- a/engines/agi/opcodes.cpp
+++ b/engines/agi/opcodes.cpp
@@ -320,7 +320,7 @@ AgiOpCodeDefinitionEntry opCodesV2[] = {
{ "reposition.to.v", "nvv", &cmdRepositionToF }, // 94
{ "trace.on", "", &cmdTraceOn }, // 95
{ "trace.info", "nnn", &cmdTraceInfo }, // 96
- { "print.at", "snnn", &cmdPrintAt }, // 3 args for AGI versions before 2.440
+ { "print.at", "snnn", &cmdPrintAt }, // 3 args for AGI versions before 2.089
{ "print.at.v", "vnnn", &cmdPrintAtV }, // 98
{ "discard.view.v", "v", &cmdDiscardView}, // 99
{ "clear.text.rect", "nnnnn", &cmdClearTextRect }, // 9A
@@ -404,10 +404,10 @@ void AgiEngine::setupOpCodes(uint16 version) {
if (version == 0x2089)
_opCodes[0x86].parameters = "";
- // 'print.at' and 'print.at.v' take 3 args before 2.272
- // This is documented in the specs as only < 2.440, but it seems
- // that KQ3 (2.272) needs a 'print.at' taking 4 args.
- if (version < 0x2272) {
+ // 'print.at' and 'print.at.v' take 3 args before 2.089.
+ // This is documented in the specs as only < 2.440, but
+ // SQ1 1.0X (2.089) and KQ3 (2.272) take 4 args. Bug #10872
+ if (version < 0x2089) {
_opCodes[0x97].parameters = "vvv";
_opCodes[0x98].parameters = "vvv";
}
Commit: 0877da67b20fe570cf4812a6ca486a648cd108ab
https://github.com/scummvm/scummvm/commit/0877da67b20fe570cf4812a6ca486a648cd108ab
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2024-01-01T21:59:20-08:00
Commit Message:
AGI: Fix uninit memory use, crash on `error`
Fixes random crashes when an illegal opcode is encountered.
See bug #14699
Changed paths:
engines/agi/op_cmd.cpp
engines/agi/opcodes.cpp
diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp
index 177a0a90057..a5a0cfe4a01 100644
--- a/engines/agi/op_cmd.cpp
+++ b/engines/agi/op_cmd.cpp
@@ -2439,16 +2439,16 @@ int AgiEngine::runLogic(int16 logicNr) {
_game.execStack.pop_back();
return 1;
default:
+ if (!_opCodes[op].functionPtr) {
+ error("Illegal opcode %x in logic %d, ip %d", op, state->curLogicNr, state->_curLogic->cIP);
+ }
+
curParameterSize = _opCodes[op].parameterSize;
memmove(p, state->_curLogic->data + state->_curLogic->cIP, curParameterSize);
memset(p + curParameterSize, 0, CMD_BSIZE - curParameterSize);
debugC(2, kDebugLevelScripts, "%s%s(%d %d %d)", st, _opCodes[op].name, p[0], p[1], p[2]);
- if (!_opCodes[op].functionPtr) {
- error("Illegal opcode %x in logic %d, ip %d", op, state->curLogicNr, state->_curLogic->cIP);
- }
-
_opCodes[op].functionPtr(&_game, this, p);
state->_curLogic->cIP += curParameterSize;
}
diff --git a/engines/agi/opcodes.cpp b/engines/agi/opcodes.cpp
index acb36d02510..f391dcb2e5b 100644
--- a/engines/agi/opcodes.cpp
+++ b/engines/agi/opcodes.cpp
@@ -366,8 +366,6 @@ void AgiEngine::setupOpCodes(uint16 version) {
const AgiOpCodeDefinitionEntry *opCodesCondTable = nullptr;
uint16 opCodesTableSize = 0;
uint16 opCodesCondTableSize = 0;
- uint16 opCodesTableMaxSize = sizeof(_opCodes) / sizeof(AgiOpCodeEntry);
- uint16 opCodesCondTableMaxSize = sizeof(_opCodesCond) / sizeof(AgiOpCodeEntry);
debug(0, "Setting up for version 0x%04X", version);
@@ -443,16 +441,18 @@ void AgiEngine::setupOpCodes(uint16 version) {
_opCodes[182].parameters = "vv";
// add invalid entries for every opcode, that is not defined at all
- for (int opCodeNr = opCodesTableSize; opCodeNr < opCodesTableMaxSize; opCodeNr++) {
+ for (int opCodeNr = opCodesTableSize; opCodeNr < ARRAYSIZE(_opCodes); opCodeNr++) {
_opCodes[opCodeNr].name = "illegal";
_opCodes[opCodeNr].parameters = "";
_opCodes[opCodeNr].functionPtr = nullptr;
+ _opCodes[opCodeNr].parameterSize = 0;
}
- for (int opCodeNr = opCodesCondTableSize; opCodeNr < opCodesCondTableMaxSize; opCodeNr++) {
+ for (int opCodeNr = opCodesCondTableSize; opCodeNr < ARRAYSIZE(_opCodesCond); opCodeNr++) {
_opCodesCond[opCodeNr].name = "illegal";
_opCodesCond[opCodeNr].parameters = "";
_opCodesCond[opCodeNr].functionPtr = nullptr;
+ _opCodesCond[opCodeNr].parameterSize = 0;
}
// calculate parameter size
Commit: 560d09f3140de78ef5b3ad8d82e396db829bacc2
https://github.com/scummvm/scummvm/commit/560d09f3140de78ef5b3ad8d82e396db829bacc2
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2024-01-01T21:59:20-08:00
Commit Message:
AGI: Remove unused function declarations
Changed paths:
engines/agi/agi.h
engines/agi/graphics.h
engines/agi/loader_v3.cpp
engines/agi/picture.h
engines/agi/sound.h
engines/agi/sprite.h
diff --git a/engines/agi/agi.h b/engines/agi/agi.h
index ac78d7c37ee..499bcf7ae17 100644
--- a/engines/agi/agi.h
+++ b/engines/agi/agi.h
@@ -932,14 +932,8 @@ public:
public:
void decrypt(uint8 *mem, int len);
- void releaseSprites();
uint16 processAGIEvents();
- int viewPictures();
int runGame();
- int getAppDir(char *appDir, unsigned int size);
-
- int setupV2Game(int ver);
- int setupV3Game(int ver);
void newRoom(int16 newRoomNr);
void resetControllers();
@@ -954,7 +948,6 @@ public:
// Objects
public:
- int showObjects();
int loadObjects(const char *fname);
int loadObjects(Common::File &fp);
const char *objectName(uint16 objectNr);
@@ -1002,8 +995,6 @@ public:
// View
private:
-
- void lSetLoop(ScreenObjEntry *screenObj, int16 loopNr);
void updateView(ScreenObjEntry *screenObj);
public:
@@ -1024,8 +1015,6 @@ private:
void unpackViewCelDataAGI256(AgiViewCel *celData, byte *compressedData, uint16 compressedSize);
public:
- void addToPic(int, int, int, int, int, int, int);
- void drawObj(int);
bool isEgoView(const ScreenObjEntry *screenObj);
// Motion
@@ -1055,14 +1044,12 @@ public:
// Keyboard
int doPollKeyboard();
- void cleanKeyboard();
bool handleMouseClicks(uint16 &key);
bool handleController(uint16 key);
bool showPredictiveDialog();
- uint16 agiGetKeypress();
int waitKey();
int waitAnyKey();
diff --git a/engines/agi/graphics.h b/engines/agi/graphics.h
index 726fecf1214..ab9464a2fe0 100644
--- a/engines/agi/graphics.h
+++ b/engines/agi/graphics.h
@@ -92,7 +92,6 @@ public:
void translateGameRectToDisplayScreen(int16 &x, int16 &y, int16 &width, int16 &height);
void translateVisualRectToDisplayScreen(int16 &x, int16 &y, int16 &width, int16 &height);
- void translateDisplayRectToVisualScreen(int16 &x, int16 &y, int16 &width, int16 &height);
uint32 getDisplayOffsetToGameScreenPos(int16 x, int16 y);
uint32 getDisplayOffsetToVisualScreenPos(int16 x, int16 y);
diff --git a/engines/agi/loader_v3.cpp b/engines/agi/loader_v3.cpp
index e5409a8c076..8f82ee02018 100644
--- a/engines/agi/loader_v3.cpp
+++ b/engines/agi/loader_v3.cpp
@@ -232,8 +232,6 @@ uint8 *AgiLoader_v3::loadVolRes(AgiDir *agid) {
// Manhunter 2 uses such pictures
data = compBuffer;
agid->flags |= RES_PICTURE_V3_NIBBLE_PARM;
- //data = _vm->_picture->convertV3Pic(compBuffer, agid->clen);
- // compBuffer has been freed inside convertV3Pic()
} else if (agid->len == agid->clen) {
// do not decompress
data = compBuffer;
diff --git a/engines/agi/picture.h b/engines/agi/picture.h
index 4954c3b7189..82231719fdc 100644
--- a/engines/agi/picture.h
+++ b/engines/agi/picture.h
@@ -75,7 +75,6 @@ public:
private:
void draw_xCorner(bool skipOtherCoords = false);
void yCorner(bool skipOtherCoords = false);
- int plotPatternPoint(int x, int y, int bitpos);
void plotBrush();
byte getNextByte();
@@ -112,7 +111,6 @@ public:
void showPic(); // <-- for regular AGI games
void showPic(int16 x, int16 y, int16 pic_width, int16 pic_height); // <-- for preAGI games
void showPicWithTransition();
- uint8 *convertV3Pic(uint8 *src, uint32 len);
void plotPattern(int x, int y); // public because it's used directly by preagi
diff --git a/engines/agi/sound.h b/engines/agi/sound.h
index b823b280382..ecc19a7c34e 100644
--- a/engines/agi/sound.h
+++ b/engines/agi/sound.h
@@ -137,7 +137,6 @@ public:
void setVolume(uint8 volume);
void unloadSound(int);
- void playSound();
void startSound(int, int);
void stopSound();
diff --git a/engines/agi/sprite.h b/engines/agi/sprite.h
index 0c67f772630..96107ed2d22 100644
--- a/engines/agi/sprite.h
+++ b/engines/agi/sprite.h
@@ -94,8 +94,6 @@ public:
SpritesMgr(AgiEngine *agi, GfxMgr *gfx);
~SpritesMgr();
- int initSprites();
- void deinitSprites();
void addToPic(int16 viewNr, int16 loopNr, int16 celNr, int16 xPos, int16 yPos, int16 priority, int16 border);
void addToPicDrawPriorityBox(ScreenObjEntry *screenObj, int16 border);
};
More information about the Scummvm-git-logs
mailing list