[Scummvm-cvs-logs] scummvm master -> aa875aefb2609ebea224f311638c8721711c5bb5
sev-
sev at scummvm.org
Tue May 10 18:07:17 CEST 2016
This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
0d356d1c66 AGI: Safer string copying
e61700f1b2 SCUMM HE: Proper place for the FOW drawing call
35335b253e SCUMM HE: Plug Moonbase FOW kludges in
543920a1d6 SCUMM HE: Started code for loading FOW resources
aa875aefb2 SCUMM HE: Read FOW image from U32
Commit: 0d356d1c666620fc01d60872edb03ee55b046689
https://github.com/scummvm/scummvm/commit/0d356d1c666620fc01d60872edb03ee55b046689
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-10T18:07:35+02:00
Commit Message:
AGI: Safer string copying
Changed paths:
engines/agi/op_cmd.cpp
engines/agi/op_test.cpp
engines/agi/preagi_mickey.cpp
engines/agi/preagi_winnie.cpp
engines/agi/saveload.cpp
engines/agi/text.cpp
diff --git a/engines/agi/op_cmd.cpp b/engines/agi/op_cmd.cpp
index fed07ea..8a62fce 100644
--- a/engines/agi/op_cmd.cpp
+++ b/engines/agi/op_cmd.cpp
@@ -662,7 +662,7 @@ void cmdWordToString(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
uint16 stringNr = parameter[0];
uint16 wordNr = parameter[1];
- strcpy(state->strings[stringNr], state->_vm->_words->getEgoWord(wordNr));
+ Common::strlcpy(state->strings[stringNr], state->_vm->_words->getEgoWord(wordNr), MAX_STRINGLEN);
}
void cmdOpenDialogue(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
@@ -2014,7 +2014,7 @@ void cmdGetString(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
// copy string to destination
// TODO: not sure if set all the time or only when ENTER is pressed
- strcpy(&state->_vm->_game.strings[stringDestNr][0], (char *)textMgr->_inputString);
+ Common::strlcpy(&state->_vm->_game.strings[stringDestNr][0], (char *)textMgr->_inputString, MAX_STRINGLEN);
textMgr->charPos_Pop();
@@ -2102,7 +2102,7 @@ void cmdSetString(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
// CM: to avoid crash in Groza (str = 150)
if (stringNr > MAX_STRINGS)
return;
- strcpy(state->strings[stringNr], state->_curLogic->texts[textNr]);
+ Common::strlcpy(state->strings[stringNr], state->_curLogic->texts[textNr], MAX_STRINGLEN);
}
void cmdDisplay(AgiGame *state, AgiEngine *vm, uint8 *parameter) {
diff --git a/engines/agi/op_test.cpp b/engines/agi/op_test.cpp
index 4b215ed..4505668 100644
--- a/engines/agi/op_test.cpp
+++ b/engines/agi/op_test.cpp
@@ -231,8 +231,8 @@ uint8 AgiEngine::testCompareStrings(uint8 s1, uint8 s2) {
char ms2[MAX_STRINGLEN];
int j, k, l;
- strcpy(ms1, _game.strings[s1]);
- strcpy(ms2, _game.strings[s2]);
+ Common::strlcpy(ms1, _game.strings[s1], MAX_STRINGLEN);
+ Common::strlcpy(ms2, _game.strings[s2], MAX_STRINGLEN);
l = strlen(ms1);
for (k = 0, j = 0; k < l; k++) {
diff --git a/engines/agi/preagi_mickey.cpp b/engines/agi/preagi_mickey.cpp
index 620d5e0..e1545cd 100644
--- a/engines/agi/preagi_mickey.cpp
+++ b/engines/agi/preagi_mickey.cpp
@@ -1205,7 +1205,7 @@ void MickeyEngine::printStory() {
clearScreen(IDA_DEFAULT);
for (iRow = 0; iRow < 25; iRow++) {
- strcpy(szLine, buffer + pBuf);
+ Common::strlcpy(szLine, buffer + pBuf, 41);
drawStr(iRow, 0, IDA_DEFAULT, szLine);
pBuf += strlen(szLine) + 1;
}
@@ -1213,7 +1213,7 @@ void MickeyEngine::printStory() {
clearScreen(IDA_DEFAULT);
for (iRow = 0; iRow < 21; iRow++) {
- strcpy(szLine, buffer + pBuf);
+ Common::strlcpy(szLine, buffer + pBuf, 41);
drawStr(iRow, 0, IDA_DEFAULT, szLine);
pBuf += strlen(szLine) + 1;
}
diff --git a/engines/agi/preagi_winnie.cpp b/engines/agi/preagi_winnie.cpp
index 87ac7c1..8fb9dac 100644
--- a/engines/agi/preagi_winnie.cpp
+++ b/engines/agi/preagi_winnie.cpp
@@ -292,7 +292,7 @@ int WinnieEngine::parser(int pc, int index, uint8 *buffer) {
}
// extract menu string
- strcpy(szMenu, (char *)(buffer + pc));
+ Common::strlcpy(szMenu, (char *)(buffer + pc), 121);
XOR80(szMenu);
break;
default:
diff --git a/engines/agi/saveload.cpp b/engines/agi/saveload.cpp
index 0658609..09fce93 100644
--- a/engines/agi/saveload.cpp
+++ b/engines/agi/saveload.cpp
@@ -118,7 +118,7 @@ int AgiEngine::saveGame(const Common::String &fileName, const Common::String &de
out->writeByte(2); // was _game.state, 2 = STATE_RUNNING
- strcpy(gameIDstring, _game.id);
+ Common::strlcpy(gameIDstring, _game.id, 8);
out->write(gameIDstring, 8);
debugC(5, kDebugLevelMain | kDebugLevelSavegame, "Writing game id (%s, %s)", gameIDstring, _game.id);
diff --git a/engines/agi/text.cpp b/engines/agi/text.cpp
index 110ba10..274a654 100644
--- a/engines/agi/text.cpp
+++ b/engines/agi/text.cpp
@@ -457,7 +457,7 @@ void TextMgr::drawMessageBox(const char *textPtr, int16 forcedHeight, int16 want
// Caller wants to force specified width/height? set it
if (forcedHeight)
_messageState.textSize_Height = forcedHeight;
-
+
if (forcedWidth) {
if (wantedWidth)
_messageState.textSize_Width = wantedWidth;
@@ -1207,7 +1207,7 @@ char *TextMgr::stringPrintf(const char *originalText) {
}
assert(resultString.size() < sizeof(resultPrintfBuffer));
- strcpy(resultPrintfBuffer, resultString.c_str());
+ Common::strlcpy(resultPrintfBuffer, resultString.c_str(), 2000);
return resultPrintfBuffer;
}
Commit: e61700f1b22e492cf9f33a1b94be2c928c0c9574
https://github.com/scummvm/scummvm/commit/e61700f1b22e492cf9f33a1b94be2c928c0c9574
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-10T18:07:35+02:00
Commit Message:
SCUMM HE: Proper place for the FOW drawing call
Changed paths:
engines/scumm/he/wiz_he.cpp
diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp
index 9a5be1c..2b1e6d1 100644
--- a/engines/scumm/he/wiz_he.cpp
+++ b/engines/scumm/he/wiz_he.cpp
@@ -1571,8 +1571,15 @@ uint8 *Wiz::drawWizImage(int resNum, int state, int maskNum, int maskState, int
transColor = (trns == NULL) ? _vm->VAR(_vm->VAR_WIZ_TCOLOR) : -1;
}
- drawWizImageEx(dst, dataPtr, mask, dstPitch, dstType, cw, ch, x1, y1, width, height,
- state, &rScreen, flags, palPtr, transColor, _vm->_bytesPerPixel, xmapPtr, conditionBits);
+ if (_vm->_game.id == GID_MOONBASE &&
+ resNum == _vm->_moonbase->_fowSentinelImage &&
+ state == _vm->_moonbase->_fowSentinelState &&
+ conditionBits == _vm->_moonbase->_fowSentinelConditionBits) {
+ _vm->_moonbase->renderFOW(dst, dstPitch, dstType, cw, ch, flags);
+ } else {
+ drawWizImageEx(dst, dataPtr, mask, dstPitch, dstType, cw, ch, x1, y1, width, height,
+ state, &rScreen, flags, palPtr, transColor, _vm->_bytesPerPixel, xmapPtr, conditionBits);
+ }
if (!(flags & kWIFBlitToMemBuffer) && dstResNum == 0) {
Common::Rect rImage(x1, y1, x1 + width, y1 + height);
@@ -2306,13 +2313,6 @@ void Wiz::displayWizComplexImage(const WizParameters *params) {
if (flags & kWIFIsPolygon) {
drawWizPolygon(params->img.resNum, state, po_x, flags, shadow, dstResNum, palette);
} else {
- if (_vm->_game.id == GID_MOONBASE) {
- if (params->img.resNum == _vm->_moonbase->_fowSentinelImage &&
- state == _vm->_moonbase->_fowSentinelState &&
- params->conditionBits == _vm->_moonbase->_fowSentinelConditionBits)
- _vm->_moonbase->renderFOW(0, 0, 0, 0, 0, flags);
- }
-
drawWizImage(params->img.resNum, state, 0, 0, po_x, po_y, params->img.zorder, shadow, zbuffer, r, flags, dstResNum, _vm->getHEPaletteSlot(palette), params->conditionBits);
}
}
Commit: 35335b253e046e1bc9f9b8cd04878708dc384492
https://github.com/scummvm/scummvm/commit/35335b253e046e1bc9f9b8cd04878708dc384492
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-10T18:07:36+02:00
Commit Message:
SCUMM HE: Plug Moonbase FOW kludges in
Changed paths:
engines/scumm/he/logic/moonbase_logic.cpp
diff --git a/engines/scumm/he/logic/moonbase_logic.cpp b/engines/scumm/he/logic/moonbase_logic.cpp
index 5f02fa9..604dc67 100644
--- a/engines/scumm/he/logic/moonbase_logic.cpp
+++ b/engines/scumm/he/logic/moonbase_logic.cpp
@@ -44,7 +44,7 @@ private:
void op_dos_command(int op, int numArgs, int32 *args);
void op_set_fow_sentinel(int32 *args);
void op_set_fow_information(int op, int numArgs, int32 *args);
- void op_set_fow_image(int op, int numArgs, int32 *args);
+ int op_set_fow_image(int op, int numArgs, int32 *args);
void op_ai_test_kludge(int op, int numArgs, int32 *args);
void op_ai_master_control_program(int op, int numArgs, int32 *args);
@@ -135,7 +135,7 @@ int32 LogicHEmoonbase::dispatch(int op, int numArgs, int32 *args) {
op_set_fow_information(op, numArgs, args);
break;
case OP_SET_FOW_IMAGE:
- op_set_fow_image(op, numArgs, args);
+ return op_set_fow_image(op, numArgs, args);
break;
case OP_AI_TEST_KLUDGE:
@@ -190,13 +190,32 @@ void LogicHEmoonbase::op_set_fow_sentinel(int32 *args) {
}
void LogicHEmoonbase::op_set_fow_information(int op, int numArgs, int32 *args) {
- warning("STUB: op_set_fow_information()");
- LogicHE::dispatch(op, numArgs, args);
+ Common::String str("op_set_fow_information(%d", args[0]);
+ for (int i = 1; i < numArgs; i++) {
+ str += Common::String::format(", %d", args[i]);
+ }
+ str += ")";
+
+ debug(2, "%s", str.c_str());
+
+ _vm->_moonbase->setFOWInfo(
+ args[0], // array
+ args[1], // array down dimension
+ args[2], // array across dimension
+ args[3], // logical view X coordinate
+ args[4], // logical view Y coordinate
+ args[5], // screen draw clip rect x1
+ args[6], // screen draw clip rect y1
+ args[7], // screen draw clip rect x2
+ args[8], // screen draw clip rect y2
+ args[9], // techinque
+ args[10] // frame
+ );
}
-void LogicHEmoonbase::op_set_fow_image(int op, int numArgs, int32 *args) {
- warning("STUB: op_set_fow_image()");
- LogicHE::dispatch(op, numArgs, args);
+int LogicHEmoonbase::op_set_fow_image(int op, int numArgs, int32 *args) {
+ debug(2, "STUB: op_set_fow_image(%d)", args[0]);
+ return _vm->_moonbase->setFOWImage(args[0]) ? 1 : 0;
}
void LogicHEmoonbase::op_ai_test_kludge(int op, int numArgs, int32 *args) {
Commit: 543920a1d672c13d6015bf0cedcf1ebe2f827270
https://github.com/scummvm/scummvm/commit/543920a1d672c13d6015bf0cedcf1ebe2f827270
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-10T18:07:36+02:00
Commit Message:
SCUMM HE: Started code for loading FOW resources
Changed paths:
engines/scumm/detection.cpp
engines/scumm/he/intern_he.h
engines/scumm/he/logic/moonbase_logic.cpp
engines/scumm/he/moonbase/moonbase.cpp
engines/scumm/he/moonbase/moonbase.h
engines/scumm/he/moonbase/moonbase_fow.cpp
engines/scumm/he/wiz_he.cpp
engines/scumm/scumm.cpp
diff --git a/engines/scumm/detection.cpp b/engines/scumm/detection.cpp
index 0867b20..4c9d122 100644
--- a/engines/scumm/detection.cpp
+++ b/engines/scumm/detection.cpp
@@ -186,6 +186,11 @@ Common::String ScummEngine_v70he::generateFilename(const int room) const {
}
if (_filenamePattern.genMethod == kGenHEPC || _filenamePattern.genMethod == kGenHEIOS) {
+ if (id == '3' && _game.id == GID_MOONBASE) {
+ result = Common::String::format("%s.u32", _filenamePattern.pattern);
+ break;
+ }
+
// For HE >= 98, we already called snprintf above.
if (_game.heversion < 98 || room < 0)
result = Common::String::format("%s.he%c", _filenamePattern.pattern, id);
diff --git a/engines/scumm/he/intern_he.h b/engines/scumm/he/intern_he.h
index 51d9a90..df62c59 100644
--- a/engines/scumm/he/intern_he.h
+++ b/engines/scumm/he/intern_he.h
@@ -27,8 +27,6 @@
#ifdef ENABLE_HE
#include "scumm/he/floodfill_he.h"
#include "scumm/he/wiz_he.h"
-
-#include "scumm/he/moonbase/moonbase.h"
#endif
#include "scumm/actor_he.h" // For AuxBlock & AuxEntry
@@ -186,6 +184,8 @@ protected:
};
#ifdef ENABLE_HE
+class Moonbase;
+
class ScummEngine_v71he : public ScummEngine_v70he {
friend class Wiz;
friend class Moonbase;
diff --git a/engines/scumm/he/logic/moonbase_logic.cpp b/engines/scumm/he/logic/moonbase_logic.cpp
index 604dc67..4483f1a 100644
--- a/engines/scumm/he/logic/moonbase_logic.cpp
+++ b/engines/scumm/he/logic/moonbase_logic.cpp
@@ -22,6 +22,7 @@
#include "scumm/he/intern_he.h"
#include "scumm/he/logic_he.h"
+#include "scumm/he/moonbase/moonbase.h"
namespace Scumm {
@@ -214,7 +215,7 @@ void LogicHEmoonbase::op_set_fow_information(int op, int numArgs, int32 *args) {
}
int LogicHEmoonbase::op_set_fow_image(int op, int numArgs, int32 *args) {
- debug(2, "STUB: op_set_fow_image(%d)", args[0]);
+ debug(2, "op_set_fow_image(%d)", args[0]);
return _vm->_moonbase->setFOWImage(args[0]) ? 1 : 0;
}
diff --git a/engines/scumm/he/moonbase/moonbase.cpp b/engines/scumm/he/moonbase/moonbase.cpp
index a07a874..57a2efa 100644
--- a/engines/scumm/he/moonbase/moonbase.cpp
+++ b/engines/scumm/he/moonbase/moonbase.cpp
@@ -21,6 +21,7 @@
*/
#include "scumm/he/intern_he.h"
+#include "scumm/he/moonbase/moonbase.h"
namespace Scumm {
diff --git a/engines/scumm/he/moonbase/moonbase.h b/engines/scumm/he/moonbase/moonbase.h
index e50337d..c312ddd 100644
--- a/engines/scumm/he/moonbase/moonbase.h
+++ b/engines/scumm/he/moonbase/moonbase.h
@@ -25,6 +25,8 @@
#ifdef ENABLE_HE
+#include "common/winexe_pe.h"
+
namespace Scumm {
class Moonbase {
@@ -86,6 +88,9 @@ private:
bool _fowBlackMode;
int _fowRenderTable[32768];
+
+ Common::PEResources _exe;
+ Common::String _fileName;
};
#endif
diff --git a/engines/scumm/he/moonbase/moonbase_fow.cpp b/engines/scumm/he/moonbase/moonbase_fow.cpp
index f76bebf..e907449 100644
--- a/engines/scumm/he/moonbase/moonbase_fow.cpp
+++ b/engines/scumm/he/moonbase/moonbase_fow.cpp
@@ -21,7 +21,9 @@
*/
#include "common/config-manager.h"
+
#include "scumm/he/intern_he.h"
+#include "scumm/he/moonbase/moonbase.h"
namespace Scumm {
@@ -108,10 +110,18 @@ bool Moonbase::setFOWImage(int image) {
// PIECES BUBBLES CIRCLES SIMPLE* WEDGEY BUBBLE2
// WEDGE2 SPIKEY ANGLES SMOOTHED WUZZY SYS7-BEVELED
- if (image >= -1 && image <= 12)
+ if (image >= -12 && image <= -1)
resType = 210 - image; // 211-222 range
else
resType = 214; // default, SIMPLE
+
+ if (_fileName.empty()) { // We are running for the first time
+ _fileName = _vm->generateFilename(-3);
+
+ if (!_exe.loadFromEXE(_fileName))
+ error("Cannot open file %s", _fileName.c_str());
+ }
+
#if 0 // TODO
HRSRC hResource = FindResource(g_hInst, resType, 10);
if (hResource) {
diff --git a/engines/scumm/he/wiz_he.cpp b/engines/scumm/he/wiz_he.cpp
index 2b1e6d1..4f4bfa1 100644
--- a/engines/scumm/he/wiz_he.cpp
+++ b/engines/scumm/he/wiz_he.cpp
@@ -31,6 +31,7 @@
#include "scumm/scumm.h"
#include "scumm/util.h"
#include "scumm/he/wiz_he.h"
+#include "scumm/he/moonbase/moonbase.h"
namespace Scumm {
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index ff25dc9..40f636c 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -66,6 +66,7 @@
#include "scumm/players/player_v5m.h"
#include "scumm/resource.h"
#include "scumm/he/resource_he.h"
+#include "scumm/he/moonbase/moonbase.h"
#include "scumm/scumm_v0.h"
#include "scumm/scumm_v8.h"
#include "scumm/sound.h"
Commit: aa875aefb2609ebea224f311638c8721711c5bb5
https://github.com/scummvm/scummvm/commit/aa875aefb2609ebea224f311638c8721711c5bb5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-10T18:07:36+02:00
Commit Message:
SCUMM HE: Read FOW image from U32
Changed paths:
engines/scumm/he/moonbase/moonbase.h
engines/scumm/he/moonbase/moonbase_fow.cpp
diff --git a/engines/scumm/he/moonbase/moonbase.h b/engines/scumm/he/moonbase/moonbase.h
index c312ddd..b3223b6 100644
--- a/engines/scumm/he/moonbase/moonbase.h
+++ b/engines/scumm/he/moonbase/moonbase.h
@@ -50,7 +50,6 @@ public:
void renderFOW(uint8 *destSurface, int dstPitch, int dstType, int dstw, int dsth, int flags);
private:
- bool captureFOWImageFromLocation(void *src);
int readFOWVisibilityArray(int array, int y, int x);
void renderFOWState(uint8 *destSurface, int dstPitch, int dstType, int dstw, int dsth, int x, int y, int srcw, int srch, int state, int flags);
diff --git a/engines/scumm/he/moonbase/moonbase_fow.cpp b/engines/scumm/he/moonbase/moonbase_fow.cpp
index e907449..4b7cb4b 100644
--- a/engines/scumm/he/moonbase/moonbase_fow.cpp
+++ b/engines/scumm/he/moonbase/moonbase_fow.cpp
@@ -69,25 +69,6 @@ void Moonbase::releaseFOWResources() {
}
}
-bool Moonbase::captureFOWImageFromLocation(void *src) {
- if (!src)
- return false;
-
- int imageDataSize = 0; //getMemoryBlockSize(src); // TODO
-
- if (imageDataSize <= 0)
- return false;
-
- _fowImage = (byte *)malloc(imageDataSize);
-
- if (!_fowImage)
- return false;
-
- memcpy(_fowImage, src, imageDataSize);
-
- return true;
-}
-
bool Moonbase::setFOWImage(int image) {
releaseFOWResources();
@@ -99,21 +80,21 @@ bool Moonbase::setFOWImage(int image) {
void *wiz = loadWizFromFilename(fowImageFilename);
if (wiz) {
- captureFOWImageFromLocation(wiz);
+ captureFOWImageFromLocation(wiz, file.size());
free(wiz);
}
}
#endif
if (!_fowImage && image < 0) {
- int resType;
+ int resId;
// PIECES BUBBLES CIRCLES SIMPLE* WEDGEY BUBBLE2
// WEDGE2 SPIKEY ANGLES SMOOTHED WUZZY SYS7-BEVELED
if (image >= -12 && image <= -1)
- resType = 210 - image; // 211-222 range
+ resId = 210 - image; // 211-222 range
else
- resType = 214; // default, SIMPLE
+ resId = 214; // default, SIMPLE
if (_fileName.empty()) { // We are running for the first time
_fileName = _vm->generateFilename(-3);
@@ -122,28 +103,20 @@ bool Moonbase::setFOWImage(int image) {
error("Cannot open file %s", _fileName.c_str());
}
-#if 0 // TODO
- HRSRC hResource = FindResource(g_hInst, resType, 10);
- if (hResource) {
- byte res = LoadResource(g_hInst, hResource);
+ Common::SeekableReadStream *stream = _exe.getResource(Common::kPERCData, resId);
- if (res) {
- uint16 nDataSize = SizeofResource(g_hInst, hResource);
+ if (stream->size()) {
+ _fowImage = (byte *)malloc(stream->size());
- if (nDataSize)
- captureFOWImageFromLocation(res);
- }
+ stream->read(_fowImage, stream->size());
}
-#endif
- }
- if (!_fowImage && image > 0) {
- void *glob = _vm->getResourceAddress(rtImage, image);
-
- if (glob)
- captureFOWImageFromLocation(glob);
+ delete stream;
}
+ if (!_fowImage && image > 0)
+ _fowImage = _vm->getResourceAddress(rtImage, image);
+
if (!_fowImage)
return false;
}
More information about the Scummvm-git-logs
mailing list