aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/simon/items.cpp16
-rw-r--r--engines/simon/simon.cpp98
-rw-r--r--engines/simon/simon.h6
3 files changed, 56 insertions, 64 deletions
diff --git a/engines/simon/items.cpp b/engines/simon/items.cpp
index dc289f9c98..39c09c7b22 100644
--- a/engines/simon/items.cpp
+++ b/engines/simon/items.cpp
@@ -1393,13 +1393,13 @@ void SimonEngine::o_b2NotZero() {
void SimonEngine::o_lockZones() {
// 175: vga pointer op 1
- _vgaBufStart = _vgaBufFreeStart;
+ _vgaMemBase = _vgaMemPtr;
}
void SimonEngine::o_unlockZones() {
// 176: vga pointer op 2
- _vgaBufFreeStart = _vgaFileBufOrg;
- _vgaBufStart = _vgaFileBufOrg;
+ _vgaMemPtr = _vgaFrozenBase;
+ _vgaMemBase = _vgaFrozenBase;
}
void SimonEngine::o1_screenTextPObj() {
@@ -2233,14 +2233,14 @@ void SimonEngine::waitForMark(uint i) {
}
void SimonEngine::freezeBottom() {
- _vgaBufStart = _vgaBufFreeStart;
- _vgaFileBufOrg = _vgaBufFreeStart;
+ _vgaMemBase = _vgaMemPtr;
+ _vgaFrozenBase = _vgaMemPtr;
}
void SimonEngine::unfreezeBottom() {
- _vgaBufFreeStart = _vgaFileBufOrg2;
- _vgaBufStart = _vgaFileBufOrg2;
- _vgaFileBufOrg = _vgaFileBufOrg2;
+ _vgaMemPtr = _vgaRealBase;
+ _vgaMemBase = _vgaRealBase;
+ _vgaFrozenBase = _vgaRealBase;
}
void SimonEngine::sendSync(uint a) {
diff --git a/engines/simon/simon.cpp b/engines/simon/simon.cpp
index c3bc5cd3ea..fc1b432ce6 100644
--- a/engines/simon/simon.cpp
+++ b/engines/simon/simon.cpp
@@ -244,7 +244,6 @@ SimonEngine::SimonEngine(OSystem *syst)
_fastFadeInFlag = 0;
_noOverWrite = 0;
- _rejectCount = 0;
_rejectBlock = false;
_fastFadeOutFlag = 0;
@@ -263,11 +262,12 @@ SimonEngine::SimonEngine(OSystem *syst)
_vgaSpriteChanged = 0;
- _vgaBufFreeStart = 0;
- _vgaBufEnd = 0;
- _vgaBufStart = 0;
- _vgaFileBufOrg = 0;
- _vgaFileBufOrg2 = 0;
+ _vgaMemPtr = 0;
+ _vgaMemEnd = 0;
+ _vgaMemBase = 0;
+ _vgaFrozenBase = 0;
+ _vgaRealBase = 0;
+ _zoneBuffers = 0;
_curVgaFile1 = 0;
_curVgaFile2 = 0;
@@ -478,7 +478,7 @@ int SimonEngine::init() {
_numTextBoxes = 40;
_numVideoOpcodes = 85;
#ifndef PALMOS_68K
- _vgaMemSize = 7500000;
+ _vgaMemSize = 7000000;
#else
_vgaMemSize = gVars->memory[kMemSimon2Games];
#endif
@@ -1290,29 +1290,25 @@ void SimonEngine::loadZone(uint vga_res) {
}
void SimonEngine::setZoneBuffers() {
- byte *alloced;
+ _zoneBuffers = (byte *)malloc(_vgaMemSize);
- alloced = (byte *)malloc(_vgaMemSize);
-
- _vgaBufFreeStart = alloced;
- _vgaBufStart = alloced;
- _vgaFileBufOrg = alloced;
- _vgaFileBufOrg2 = alloced;
- _vgaBufEnd = alloced + _vgaMemSize;
+ _vgaMemPtr = _zoneBuffers;
+ _vgaMemBase = _zoneBuffers;
+ _vgaFrozenBase = _zoneBuffers;
+ _vgaRealBase = _zoneBuffers;
+ _vgaMemEnd = _zoneBuffers + _vgaMemSize;
}
byte *SimonEngine::allocBlock(uint32 size) {
byte *block, *blockEnd;
+ int i;
- _rejectCount = 0;
-
- for (;;) {
- block = _vgaBufFreeStart;
-
+ for (i = 0; i < _vgaMemSize / size; i++) {
+ block = _vgaMemPtr;
blockEnd = block + size;
- if (blockEnd >= _vgaBufEnd) {
- _vgaBufFreeStart = _vgaBufStart;
+ if (blockEnd >= _vgaMemEnd) {
+ _vgaMemPtr = _vgaMemBase;
} else {
_rejectBlock = false;
checkNoOverWrite(blockEnd);
@@ -1322,10 +1318,12 @@ byte *SimonEngine::allocBlock(uint32 size) {
if (_rejectBlock)
continue;
checkZonePtrs(blockEnd);
- _vgaBufFreeStart = blockEnd;
+ _vgaMemPtr = blockEnd;
return block;
}
}
+
+ error("allocBlock: Couldn't find free block");
}
void SimonEngine::checkNoOverWrite(byte *end) {
@@ -1334,33 +1332,26 @@ void SimonEngine::checkNoOverWrite(byte *end) {
if (_noOverWrite == 0xFFFF)
return;
- if (_rejectCount == 2)
- error("checkNoOverWrite: _rejectCount == 2");
-
vpe = &_vgaBufferPointers[_noOverWrite];
if (getGameType() == GType_FF) {
- if (vpe->vgaFile1 < end && vpe->vgaFile1End > _vgaBufFreeStart) {
+ if (vpe->vgaFile1 < end && vpe->vgaFile1End > _vgaMemPtr) {
_rejectBlock = true;
- _rejectCount++;
- _vgaBufFreeStart = vpe->vgaFile1End;
- } else if (vpe->vgaFile2 < end && vpe->vgaFile2End > _vgaBufFreeStart) {
+ _vgaMemPtr = vpe->vgaFile1End;
+ } else if (vpe->vgaFile2 < end && vpe->vgaFile2End > _vgaMemPtr) {
_rejectBlock = true;
- _rejectCount++;
- _vgaBufFreeStart = vpe->vgaFile2End;
- } else if (vpe->sfxFile && vpe->sfxFile < end && vpe->sfxFileEnd > _vgaBufFreeStart) {
+ _vgaMemPtr = vpe->vgaFile2End;
+ } else if (vpe->sfxFile && vpe->sfxFile < end && vpe->sfxFileEnd > _vgaMemPtr) {
_rejectBlock = true;
- _rejectCount++;
- _vgaBufFreeStart = vpe->sfxFileEnd;
+ _vgaMemPtr = vpe->sfxFileEnd;
} else {
_rejectBlock = false;
}
} else {
- if (_vgaBufFreeStart <= vpe->vgaFile1 && end >= vpe->vgaFile1 ||
- _vgaBufFreeStart <= vpe->vgaFile2 && end >= vpe->vgaFile2) {
+ if (_vgaMemPtr <= vpe->vgaFile1 && end >= vpe->vgaFile1 ||
+ _vgaMemPtr <= vpe->vgaFile2 && end >= vpe->vgaFile2) {
_rejectBlock = true;
- _rejectCount++;
- _vgaBufFreeStart = vpe->vgaFile1 + 0x5000;
+ _vgaMemPtr = vpe->vgaFile1 + 0x5000;
} else {
_rejectBlock = false;
}
@@ -1387,23 +1378,23 @@ void SimonEngine::checkAnims(uint a, byte *end) {
vpe = &_vgaBufferPointers[a];
if (getGameType() == GType_FF) {
- if (vpe->vgaFile1 < end && vpe->vgaFile1End > _vgaBufFreeStart) {
+ if (vpe->vgaFile1 < end && vpe->vgaFile1End > _vgaMemPtr) {
_rejectBlock = true;
- _vgaBufFreeStart = vpe->vgaFile1End;
- } else if (vpe->vgaFile2 < end && vpe->vgaFile2End > _vgaBufFreeStart) {
+ _vgaMemPtr = vpe->vgaFile1End;
+ } else if (vpe->vgaFile2 < end && vpe->vgaFile2End > _vgaMemPtr) {
_rejectBlock = true;
- _vgaBufFreeStart = vpe->vgaFile2End;
- } else if (vpe->sfxFile && vpe->sfxFile < end && vpe->sfxFileEnd > _vgaBufFreeStart) {
+ _vgaMemPtr = vpe->vgaFile2End;
+ } else if (vpe->sfxFile && vpe->sfxFile < end && vpe->sfxFileEnd > _vgaMemPtr) {
_rejectBlock = true;
- _vgaBufFreeStart = vpe->sfxFileEnd;
+ _vgaMemPtr = vpe->sfxFileEnd;
} else {
_rejectBlock = false;
}
} else {
- if (_vgaBufFreeStart <= vpe->vgaFile1 && end >= vpe->vgaFile1 ||
- _vgaBufFreeStart <= vpe->vgaFile2 && end >= vpe->vgaFile2) {
+ if (_vgaMemPtr <= vpe->vgaFile1 && end >= vpe->vgaFile1 ||
+ _vgaMemPtr <= vpe->vgaFile2 && end >= vpe->vgaFile2) {
_rejectBlock = true;
- _vgaBufFreeStart = vpe->vgaFile1 + 0x5000;
+ _vgaMemPtr = vpe->vgaFile1 + 0x5000;
} else {
_rejectBlock = false;
}
@@ -1415,9 +1406,9 @@ void SimonEngine::checkZonePtrs(byte *end) {
VgaPointersEntry *vpe = _vgaBufferPointers;
do {
if (getGameType() == GType_FF) {
- if (vpe->vgaFile1 < end && vpe->vgaFile1End > _vgaBufFreeStart ||
- vpe->vgaFile2 < end && vpe->vgaFile2End > _vgaBufFreeStart ||
- vpe->sfxFile < end && vpe->sfxFileEnd > _vgaBufFreeStart) {
+ if (vpe->vgaFile1 < end && vpe->vgaFile1End > _vgaMemPtr ||
+ vpe->vgaFile2 < end && vpe->vgaFile2End > _vgaMemPtr ||
+ vpe->sfxFile < end && vpe->sfxFileEnd > _vgaMemPtr) {
vpe->vgaFile1 = NULL;
vpe->vgaFile1End = NULL;
vpe->vgaFile2 = NULL;
@@ -1426,8 +1417,8 @@ void SimonEngine::checkZonePtrs(byte *end) {
vpe->sfxFileEnd = NULL;
}
} else {
- if (_vgaBufFreeStart <= vpe->vgaFile1 && end >= vpe->vgaFile1 ||
- _vgaBufFreeStart <= vpe->vgaFile2 && end >= vpe->vgaFile2) {
+ if (_vgaMemPtr <= vpe->vgaFile1 && end >= vpe->vgaFile1 ||
+ _vgaMemPtr <= vpe->vgaFile2 && end >= vpe->vgaFile2) {
vpe->vgaFile1 = NULL;
vpe->vgaFile2 = NULL;
}
@@ -1958,6 +1949,7 @@ void SimonEngine::shutdown() {
free(_itemHeapPtr - _itemHeapCurPos);
free(_tablesHeapPtr - _tablesHeapCurPos);
free(_tblList);
+ free(_zoneBuffers);
free(_iconFilePtr);
free(_gameOffsetsPtr);
diff --git a/engines/simon/simon.h b/engines/simon/simon.h
index b942afb823..6e4dc1805b 100644
--- a/engines/simon/simon.h
+++ b/engines/simon/simon.h
@@ -351,7 +351,6 @@ protected:
int _screenWidth, _screenHeight;
uint16 _noOverWrite;
- byte _rejectCount;
bool _rejectBlock;
bool _exitCutscene;
@@ -365,8 +364,9 @@ protected:
uint _vgaSpriteChanged;
- byte *_vgaBufFreeStart, *_vgaBufEnd, *_vgaBufStart;
- byte *_vgaFileBufOrg, *_vgaFileBufOrg2;
+ byte *_vgaMemPtr, *_vgaMemEnd, *_vgaMemBase;
+ byte *_vgaFrozenBase, *_vgaRealBase;
+ byte *_zoneBuffers;
byte *_curVgaFile1;
byte *_curVgaFile2;