[Scummvm-cvs-logs] SF.net SVN: scummvm: [21924] scummvm/trunk/engines/simon
kirben at users.sourceforge.net
kirben at users.sourceforge.net
Sat Apr 15 15:15:03 CEST 2006
Revision: 21924
Author: kirben
Date: 2006-04-15 15:14:39 -0700 (Sat, 15 Apr 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=21924&view=rev
Log Message:
-----------
Use different methods to avoid overflows to FF, to avoid regressions
Modified Paths:
--------------
scummvm/trunk/engines/simon/simon.h
scummvm/trunk/engines/simon/vga.cpp
Modified: scummvm/trunk/engines/simon/simon.h
===================================================================
--- scummvm/trunk/engines/simon/simon.h 2006-04-15 22:14:18 UTC (rev 21923)
+++ scummvm/trunk/engines/simon/simon.h 2006-04-15 22:14:39 UTC (rev 21924)
@@ -383,8 +383,9 @@
uint16 _speechIdArray4[40];
uint16 _bitArray[48];
- int32 _variableArray[256];
- int32 _variableArray2[256];
+ int16 _variableArray[256];
+ int16 _variableArray2[256];
+ int16 *_variableArrayPtr;
WindowBlock *_windowArray[16];
Modified: scummvm/trunk/engines/simon/vga.cpp
===================================================================
--- scummvm/trunk/engines/simon/vga.cpp 2006-04-15 22:14:18 UTC (rev 21923)
+++ scummvm/trunk/engines/simon/vga.cpp 2006-04-15 22:14:39 UTC (rev 21924)
@@ -172,18 +172,12 @@
uint SimonEngine::vcReadVar(uint var) {
assert(var < 255);
- if (getGameType() == GType_FF && getBitFlag(82))
- return (uint16)_variableArray2[var];
- else
- return (uint16)_variableArray[var];
+ return (uint16)_variableArrayPtr[var];
}
void SimonEngine::vcWriteVar(uint var, int16 value) {
assert(var < 255);
- if (getGameType() == GType_FF && getBitFlag(82))
- _variableArray2[var] = value;
- else
- _variableArray[var] = value;
+ _variableArrayPtr[var] = value;
}
void SimonEngine::vcSkipNextInstruction() {
@@ -1308,9 +1302,8 @@
_scrollYMax = 0;
_scrollImage = state->depack_src;
_scrollHeight = state->height;
- int tmp = vcReadVar(34);
- if (tmp < 0)
- state->x = vcReadVar(251);
+ if (_variableArrayPtr[34] < 0)
+ state->x = _variableArrayPtr[251];
_scrollX = state->x;
@@ -1341,9 +1334,8 @@
_scrollYMax = state->height - 480;
_scrollImage = state->depack_src;
_scrollWidth = state->width;
- int tmp = vcReadVar(34);
- if (tmp < 0)
- state->y = vcReadVar(250);
+ if (_variableArrayPtr[34] < 0)
+ state->y = _variableArrayPtr[250];
_scrollY = state->y;
@@ -1861,7 +1853,7 @@
}
void SimonEngine::vc48_setPathFinder() {
- uint a = (uint16)vcReadVar(12);
+ uint a = (uint16)_variableArrayPtr[12];
const uint16 *p = _pathFindArray[a - 1];
if (getGameType() == GType_FF) {
@@ -1900,8 +1892,8 @@
vsp->y = y1;
checkScrollY(y1 - y, y1);
- vcWriteVar(11, x1);
- vcWriteVar(13, pos);
+ _variableArrayPtr[11] = x1;
+ _variableArrayPtr[13] = pos;
} else {
uint b = (uint16)_variableArray[13];
p += b * 2 + 1;
@@ -1909,7 +1901,7 @@
int step;
int y1, y2;
- int32 *vp;
+ int16 *vp;
step = 2;
if (c < 0) {
@@ -1935,6 +1927,13 @@
void SimonEngine::setBitFlag(uint bit, bool value) {
uint16 *bits = &_bitArray[bit / 16];
*bits = (*bits & ~(1 << (bit & 15))) | (value << (bit & 15));
+
+ if (getGameType() == GType_FF && bit == 82) {
+ if (value == true)
+ _variableArrayPtr = _variableArray2;
+ else
+ _variableArrayPtr = _variableArray;
+ }
}
bool SimonEngine::getBitFlag(uint bit) {
@@ -2375,7 +2374,7 @@
int var = vcReadNextWord();
vsp->x += getScale(vsp->y, x);
- vcWriteVar(var, vsp->x);
+ _variableArrayPtr[var] = vsp->x;
checkScrollX(x, vsp->x);
@@ -2390,7 +2389,7 @@
int var = vcReadNextWord();
vsp->y += getScale(vsp->y, y);
- vcWriteVar(var, vsp->y);
+ _variableArrayPtr[var] = vsp->y;
if (y != 0)
checkScrollY(y, vsp->y);
@@ -2401,18 +2400,18 @@
void SimonEngine::vc78_computeXY() {
VgaSprite *vsp = findCurSprite();
- uint a = (uint16)vcReadVar(12);
- uint b = (uint16)vcReadVar(13);
+ uint a = (uint16)_variableArrayPtr[12];
+ uint b = (uint16)_variableArrayPtr[13];
const uint16 *p = _pathFindArray[a - 1];
p += b * 2;
uint16 posx = readUint16Wrapper(p);
- vcWriteVar(15, posx);
+ _variableArrayPtr[15] = posx;
vsp->x = posx;
uint16 posy = readUint16Wrapper(p + 1);
- vcWriteVar(16, posy);
+ _variableArrayPtr[16] = posy;
vsp->y = posy;
setBitFlag(85, false);
@@ -2422,17 +2421,17 @@
}
void SimonEngine::vc79_computePosNum() {
- uint a = (uint16)vcReadVar(12);
+ uint a = (uint16)_variableArrayPtr[12];
const uint16 *p = _pathFindArray[a - 1];
uint pos = 0;
- uint16 y = vcReadVar(16);
+ int16 y = _variableArrayPtr[16];
while (y >= readUint16Wrapper(p + 1)) {
p += 2;
pos++;
}
- vcWriteVar(13, pos);
+ _variableArrayPtr[13] = pos;
}
void SimonEngine::vc80_setOverlayImage() {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list