mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-30 05:34:00 +00:00
TOLTECS: - Hopefully fixed a bug in findRectAtPoint which causes the game to crash before the first scene
- sfHandleInput
This commit is contained in:
parent
8ea6831825
commit
2acf1bf6f5
@ -920,10 +920,12 @@ void ScriptInterpreter::sfSetGuiHeight() {
|
||||
void ScriptInterpreter::sfFindMouseInRectIndex1() {
|
||||
int16 index = -1;
|
||||
if (_vm->_mouseY < _vm->_cameraHeight) {
|
||||
index = _vm->findRectAtPoint(getSlotData(arg16(5)) + arg16(3),
|
||||
int16 slotIndex = arg16(5);
|
||||
index = _vm->findRectAtPoint(getSlotData(slotIndex) + arg16(3),
|
||||
_vm->_mouseX + _vm->_cameraX,
|
||||
_vm->_mouseY + _vm->_cameraY,
|
||||
arg16(11) + 1, arg16(7));
|
||||
arg16(11) + 1, arg16(7),
|
||||
getSlotData(slotIndex) + _slots[slotIndex].size);
|
||||
}
|
||||
localWrite16(arg16(9), index);
|
||||
}
|
||||
@ -932,10 +934,12 @@ void ScriptInterpreter::sfFindMouseInRectIndex2() {
|
||||
int16 index = -1;
|
||||
if (_vm->_sceneResIndex != 0) {
|
||||
if (_vm->_mouseY < _vm->_cameraHeight) {
|
||||
index = _vm->findRectAtPoint(getSlotData(arg16(5)) + arg16(3),
|
||||
int16 slotIndex = arg16(5);
|
||||
index = _vm->findRectAtPoint(getSlotData(slotIndex) + arg16(3),
|
||||
_vm->_mouseX + _vm->_cameraX,
|
||||
_vm->_mouseY + _vm->_cameraY,
|
||||
0, arg16(7));
|
||||
0, arg16(7),
|
||||
getSlotData(slotIndex) + _slots[slotIndex].size);
|
||||
}
|
||||
}
|
||||
localWrite16(arg16(9), index);
|
||||
@ -1066,7 +1070,14 @@ void ScriptInterpreter::sfClearScreen() {
|
||||
void ScriptInterpreter::sfHandleInput() {
|
||||
// TODO: Recheck what this does
|
||||
int16 varOfs = arg16(3);
|
||||
localWrite16(varOfs, 0);
|
||||
int16 keyCode = 0;
|
||||
if (_vm->_rightButtonDown) {
|
||||
keyCode = 1;
|
||||
} else {
|
||||
// TODO: Handle Escape
|
||||
// TODO: Set keyboard scancode
|
||||
}
|
||||
localWrite16(varOfs, keyCode);
|
||||
}
|
||||
|
||||
void ScriptInterpreter::sfRunOptionsScreen() {
|
||||
@ -1074,7 +1085,7 @@ void ScriptInterpreter::sfRunOptionsScreen() {
|
||||
}
|
||||
|
||||
/* NOTE: The opcodes sfPrecacheSprites, sfPrecacheSounds1, sfPrecacheSounds2 and
|
||||
sfDeletePrecachedFiles were used by the original engine to handle precaching
|
||||
sfDeletePrecachedFiles were used by the original engine to handle precaching
|
||||
of data so the game doesn't stall while playing (due to the slow speed of
|
||||
CD-Drives back then). This is not needed in ScummVM since all supported
|
||||
systems are fast enough to load data in-game. */
|
||||
|
@ -245,6 +245,7 @@ void ToltecsEngine::updateScreen() {
|
||||
//printf("_guiHeight = %d\n", _guiHeight); fflush(stdout);
|
||||
|
||||
if (_screen->_guiRefresh && _guiHeight > 0 && _cameraHeight > 0) {
|
||||
// Update the GUI when needed and it's visible
|
||||
_system->copyRectToScreen((const byte *)_screen->_frontScreen + _cameraHeight * 640,
|
||||
640, 0, _cameraHeight, 640, _guiHeight);
|
||||
_screen->_guiRefresh = false;
|
||||
@ -263,6 +264,9 @@ void ToltecsEngine::updateInput() {
|
||||
while (eventMan->pollEvent(event)) {
|
||||
switch (event.type) {
|
||||
case Common::EVENT_KEYDOWN:
|
||||
_keyState = event.kbd;
|
||||
|
||||
//debug("key: flags = %02X; keycode = %d", _keyState.flags, _keyState.keycode);
|
||||
|
||||
// FIXME: This is just for debugging
|
||||
switch (event.kbd.keycode) {
|
||||
@ -276,6 +280,9 @@ void ToltecsEngine::updateInput() {
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case Common::EVENT_KEYUP:
|
||||
_keyState.reset();
|
||||
break;
|
||||
case Common::EVENT_QUIT:
|
||||
quitGame();
|
||||
@ -540,11 +547,12 @@ void ToltecsEngine::walk(byte *walkData) {
|
||||
|
||||
}
|
||||
|
||||
int16 ToltecsEngine::findRectAtPoint(byte *rectData, int16 x, int16 y, int16 index, int16 itemSize) {
|
||||
int16 ToltecsEngine::findRectAtPoint(byte *rectData, int16 x, int16 y, int16 index, int16 itemSize,
|
||||
byte *rectDataEnd) {
|
||||
|
||||
rectData += index * itemSize;
|
||||
|
||||
while (1) {
|
||||
while (rectData < rectDataEnd) {
|
||||
int16 rectY = READ_LE_UINT16(rectData);
|
||||
if (rectY == -10)
|
||||
break;
|
||||
|
@ -98,7 +98,8 @@ public:
|
||||
|
||||
void walk(byte *walkData);
|
||||
|
||||
int16 findRectAtPoint(byte *rectData, int16 x, int16 y, int16 index, int16 itemSize);
|
||||
int16 findRectAtPoint(byte *rectData, int16 x, int16 y, int16 index, int16 itemSize,
|
||||
byte *rectDataEnd);
|
||||
|
||||
public:
|
||||
|
||||
@ -130,6 +131,7 @@ public:
|
||||
|
||||
int16 _walkSpeedY, _walkSpeedX;
|
||||
|
||||
Common::KeyState _keyState;
|
||||
int16 _mouseX, _mouseY;
|
||||
int16 _mouseCounter;
|
||||
bool _mouseButtonPressedFlag;
|
||||
|
Loading…
Reference in New Issue
Block a user