mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-21 19:51:49 +00:00
Changed tricky variable access from pointers to a new class that minds endianess.
This should fix a few regressions with BE games on LE systems and vice versa that I introduced when I changed how variables are stored (which was necessary to get Woodruff work on BE systems). svn-id: r33014
This commit is contained in:
parent
7ddd961bf2
commit
c1ec21d999
@ -78,58 +78,6 @@ Goblin::Goblin(GobEngine *vm) : _vm(vm) {
|
||||
_pressedMapY = 0;
|
||||
_pathExistence = 0;
|
||||
|
||||
_some0ValPtr = 0;
|
||||
|
||||
_gobRetVarPtr = 0;
|
||||
_curGobVarPtr = 0;
|
||||
_curGobXPosVarPtr = 0;
|
||||
_curGobYPosVarPtr = 0;
|
||||
_itemInPocketVarPtr = 0;
|
||||
|
||||
_curGobStateVarPtr = 0;
|
||||
_curGobFrameVarPtr = 0;
|
||||
_curGobMultStateVarPtr = 0;
|
||||
_curGobNextStateVarPtr = 0;
|
||||
_curGobScrXVarPtr = 0;
|
||||
_curGobScrYVarPtr = 0;
|
||||
_curGobLeftVarPtr = 0;
|
||||
_curGobTopVarPtr = 0;
|
||||
_curGobRightVarPtr = 0;
|
||||
_curGobBottomVarPtr = 0;
|
||||
_curGobDoAnimVarPtr = 0;
|
||||
_curGobOrderVarPtr = 0;
|
||||
_curGobNoTickVarPtr = 0;
|
||||
_curGobTypeVarPtr = 0;
|
||||
_curGobMaxTickVarPtr = 0;
|
||||
_curGobTickVarPtr = 0;
|
||||
_curGobActStartStateVarPtr = 0;
|
||||
_curGobLookDirVarPtr = 0;
|
||||
_curGobPickableVarPtr = 0;
|
||||
_curGobRelaxVarPtr = 0;
|
||||
_curGobMaxFrameVarPtr = 0;
|
||||
|
||||
_destItemStateVarPtr = 0;
|
||||
_destItemFrameVarPtr = 0;
|
||||
_destItemMultStateVarPtr = 0;
|
||||
_destItemNextStateVarPtr = 0;
|
||||
_destItemScrXVarPtr = 0;
|
||||
_destItemScrYVarPtr = 0;
|
||||
_destItemLeftVarPtr = 0;
|
||||
_destItemTopVarPtr = 0;
|
||||
_destItemRightVarPtr = 0;
|
||||
_destItemBottomVarPtr = 0;
|
||||
_destItemDoAnimVarPtr = 0;
|
||||
_destItemOrderVarPtr = 0;
|
||||
_destItemNoTickVarPtr = 0;
|
||||
_destItemTypeVarPtr = 0;
|
||||
_destItemMaxTickVarPtr = 0;
|
||||
_destItemTickVarPtr = 0;
|
||||
_destItemActStartStVarPtr = 0;
|
||||
_destItemLookDirVarPtr = 0;
|
||||
_destItemPickableVarPtr = 0;
|
||||
_destItemRelaxVarPtr = 0;
|
||||
_destItemMaxFrameVarPtr = 0;
|
||||
|
||||
_destItemType = 0;
|
||||
_destItemState = 0;
|
||||
for (int i = 0; i < 20; i++) {
|
||||
@ -690,7 +638,7 @@ void Goblin::switchGoblin(int16 index) {
|
||||
_gobDestY = tmp;
|
||||
_vm->_map->_curGoblinY = tmp;
|
||||
|
||||
*_curGobVarPtr = _currentGoblin;
|
||||
_curGobVarPtr = (uint32) _currentGoblin;
|
||||
_pathExistence = 0;
|
||||
_readyToAct = 0;
|
||||
}
|
||||
@ -1250,172 +1198,172 @@ void Goblin::loadObjects(const char *source) {
|
||||
|
||||
void Goblin::saveGobDataToVars(int16 xPos, int16 yPos, int16 someVal) {
|
||||
Gob_Object *obj;
|
||||
*_some0ValPtr = someVal;
|
||||
*_curGobXPosVarPtr = xPos;
|
||||
*_curGobYPosVarPtr = yPos;
|
||||
*_itemInPocketVarPtr = _itemIndInPocket;
|
||||
_some0ValPtr = (uint32) someVal;
|
||||
_curGobXPosVarPtr = (uint32) xPos;
|
||||
_curGobYPosVarPtr = (uint32) yPos;
|
||||
_itemInPocketVarPtr = (uint32) _itemIndInPocket;
|
||||
|
||||
obj = _goblins[_currentGoblin];
|
||||
|
||||
*_curGobStateVarPtr = obj->state;
|
||||
*_curGobFrameVarPtr = obj->curFrame;
|
||||
*_curGobMultStateVarPtr = obj->multState;
|
||||
*_curGobNextStateVarPtr = obj->nextState;
|
||||
*_curGobScrXVarPtr = obj->xPos;
|
||||
*_curGobScrYVarPtr = obj->yPos;
|
||||
*_curGobLeftVarPtr = obj->left;
|
||||
*_curGobTopVarPtr = obj->top;
|
||||
*_curGobRightVarPtr = obj->right;
|
||||
*_curGobBottomVarPtr = obj->bottom;
|
||||
*_curGobDoAnimVarPtr = obj->doAnim;
|
||||
*_curGobOrderVarPtr = obj->order;
|
||||
*_curGobNoTickVarPtr = obj->noTick;
|
||||
*_curGobTypeVarPtr = obj->type;
|
||||
*_curGobMaxTickVarPtr = obj->maxTick;
|
||||
*_curGobTickVarPtr = obj->tick;
|
||||
*_curGobActStartStateVarPtr = obj->actionStartState;
|
||||
*_curGobLookDirVarPtr = obj->curLookDir;
|
||||
*_curGobPickableVarPtr = obj->pickable;
|
||||
*_curGobRelaxVarPtr = obj->relaxTime;
|
||||
*_curGobMaxFrameVarPtr = getObjMaxFrame(obj);
|
||||
_curGobStateVarPtr = (uint32) obj->state;
|
||||
_curGobFrameVarPtr = (uint32) obj->curFrame;
|
||||
_curGobMultStateVarPtr = (uint32) obj->multState;
|
||||
_curGobNextStateVarPtr = (uint32) obj->nextState;
|
||||
_curGobScrXVarPtr = (uint32) obj->xPos;
|
||||
_curGobScrYVarPtr = (uint32) obj->yPos;
|
||||
_curGobLeftVarPtr = (uint32) obj->left;
|
||||
_curGobTopVarPtr = (uint32) obj->top;
|
||||
_curGobRightVarPtr = (uint32) obj->right;
|
||||
_curGobBottomVarPtr = (uint32) obj->bottom;
|
||||
_curGobDoAnimVarPtr = (uint32) obj->doAnim;
|
||||
_curGobOrderVarPtr = (uint32) obj->order;
|
||||
_curGobNoTickVarPtr = (uint32) obj->noTick;
|
||||
_curGobTypeVarPtr = (uint32) obj->type;
|
||||
_curGobMaxTickVarPtr = (uint32) obj->maxTick;
|
||||
_curGobTickVarPtr = (uint32) obj->tick;
|
||||
_curGobActStartStateVarPtr = (uint32) obj->actionStartState;
|
||||
_curGobLookDirVarPtr = (uint32) obj->curLookDir;
|
||||
_curGobPickableVarPtr = (uint32) obj->pickable;
|
||||
_curGobRelaxVarPtr = (uint32) obj->relaxTime;
|
||||
_curGobMaxFrameVarPtr = (uint32) getObjMaxFrame(obj);
|
||||
|
||||
if (_actDestItemDesc == 0)
|
||||
return;
|
||||
|
||||
obj = _actDestItemDesc;
|
||||
*_destItemStateVarPtr = obj->state;
|
||||
*_destItemFrameVarPtr = obj->curFrame;
|
||||
*_destItemMultStateVarPtr = obj->multState;
|
||||
*_destItemNextStateVarPtr = obj->nextState;
|
||||
*_destItemScrXVarPtr = obj->xPos;
|
||||
*_destItemScrYVarPtr = obj->yPos;
|
||||
*_destItemLeftVarPtr = obj->left;
|
||||
*_destItemTopVarPtr = obj->top;
|
||||
*_destItemRightVarPtr = obj->right;
|
||||
*_destItemBottomVarPtr = obj->bottom;
|
||||
*_destItemDoAnimVarPtr = obj->doAnim;
|
||||
*_destItemOrderVarPtr = obj->order;
|
||||
*_destItemNoTickVarPtr = obj->noTick;
|
||||
*_destItemTypeVarPtr = obj->type;
|
||||
*_destItemMaxTickVarPtr = obj->maxTick;
|
||||
*_destItemTickVarPtr = obj->tick;
|
||||
*_destItemActStartStVarPtr = obj->actionStartState;
|
||||
*_destItemLookDirVarPtr = obj->curLookDir;
|
||||
*_destItemPickableVarPtr = obj->pickable;
|
||||
*_destItemRelaxVarPtr = obj->relaxTime;
|
||||
*_destItemMaxFrameVarPtr = getObjMaxFrame(obj);
|
||||
_destItemStateVarPtr = (uint32) obj->state;
|
||||
_destItemFrameVarPtr = (uint32) obj->curFrame;
|
||||
_destItemMultStateVarPtr = (uint32) obj->multState;
|
||||
_destItemNextStateVarPtr = (uint32) obj->nextState;
|
||||
_destItemScrXVarPtr = (uint32) obj->xPos;
|
||||
_destItemScrYVarPtr = (uint32) obj->yPos;
|
||||
_destItemLeftVarPtr = (uint32) obj->left;
|
||||
_destItemTopVarPtr = (uint32) obj->top;
|
||||
_destItemRightVarPtr = (uint32) obj->right;
|
||||
_destItemBottomVarPtr = (uint32) obj->bottom;
|
||||
_destItemDoAnimVarPtr = (uint32) obj->doAnim;
|
||||
_destItemOrderVarPtr = (uint32) obj->order;
|
||||
_destItemNoTickVarPtr = (uint32) obj->noTick;
|
||||
_destItemTypeVarPtr = (uint32) obj->type;
|
||||
_destItemMaxTickVarPtr = (uint32) obj->maxTick;
|
||||
_destItemTickVarPtr = (uint32) obj->tick;
|
||||
_destItemActStartStVarPtr = (uint32) obj->actionStartState;
|
||||
_destItemLookDirVarPtr = (uint32) obj->curLookDir;
|
||||
_destItemPickableVarPtr = (uint32) obj->pickable;
|
||||
_destItemRelaxVarPtr = (uint32) obj->relaxTime;
|
||||
_destItemMaxFrameVarPtr = (uint32) getObjMaxFrame(obj);
|
||||
|
||||
_destItemState = obj->state;
|
||||
_destItemType = obj->type;
|
||||
}
|
||||
|
||||
void Goblin::initVarPointers(void) {
|
||||
_gobRetVarPtr = (int32 *)VAR_ADDRESS(59);
|
||||
_curGobStateVarPtr = (int32 *)VAR_ADDRESS(60);
|
||||
_curGobFrameVarPtr = (int32 *)VAR_ADDRESS(61);
|
||||
_curGobMultStateVarPtr = (int32 *)VAR_ADDRESS(62);
|
||||
_curGobNextStateVarPtr = (int32 *)VAR_ADDRESS(63);
|
||||
_curGobScrXVarPtr = (int32 *)VAR_ADDRESS(64);
|
||||
_curGobScrYVarPtr = (int32 *)VAR_ADDRESS(65);
|
||||
_curGobLeftVarPtr = (int32 *)VAR_ADDRESS(66);
|
||||
_curGobTopVarPtr = (int32 *)VAR_ADDRESS(67);
|
||||
_curGobRightVarPtr = (int32 *)VAR_ADDRESS(68);
|
||||
_curGobBottomVarPtr = (int32 *)VAR_ADDRESS(69);
|
||||
_curGobDoAnimVarPtr = (int32 *)VAR_ADDRESS(70);
|
||||
_curGobOrderVarPtr = (int32 *)VAR_ADDRESS(71);
|
||||
_curGobNoTickVarPtr = (int32 *)VAR_ADDRESS(72);
|
||||
_curGobTypeVarPtr = (int32 *)VAR_ADDRESS(73);
|
||||
_curGobMaxTickVarPtr = (int32 *)VAR_ADDRESS(74);
|
||||
_curGobTickVarPtr = (int32 *)VAR_ADDRESS(75);
|
||||
_curGobActStartStateVarPtr = (int32 *)VAR_ADDRESS(76);
|
||||
_curGobLookDirVarPtr = (int32 *)VAR_ADDRESS(77);
|
||||
_curGobPickableVarPtr = (int32 *)VAR_ADDRESS(80);
|
||||
_curGobRelaxVarPtr = (int32 *)VAR_ADDRESS(81);
|
||||
_destItemStateVarPtr = (int32 *)VAR_ADDRESS(82);
|
||||
_destItemFrameVarPtr = (int32 *)VAR_ADDRESS(83);
|
||||
_destItemMultStateVarPtr = (int32 *)VAR_ADDRESS(84);
|
||||
_destItemNextStateVarPtr = (int32 *)VAR_ADDRESS(85);
|
||||
_destItemScrXVarPtr = (int32 *)VAR_ADDRESS(86);
|
||||
_destItemScrYVarPtr = (int32 *)VAR_ADDRESS(87);
|
||||
_destItemLeftVarPtr = (int32 *)VAR_ADDRESS(88);
|
||||
_destItemTopVarPtr = (int32 *)VAR_ADDRESS(89);
|
||||
_destItemRightVarPtr = (int32 *)VAR_ADDRESS(90);
|
||||
_destItemBottomVarPtr = (int32 *)VAR_ADDRESS(91);
|
||||
_destItemDoAnimVarPtr = (int32 *)VAR_ADDRESS(92);
|
||||
_destItemOrderVarPtr = (int32 *)VAR_ADDRESS(93);
|
||||
_destItemNoTickVarPtr = (int32 *)VAR_ADDRESS(94);
|
||||
_destItemTypeVarPtr = (int32 *)VAR_ADDRESS(95);
|
||||
_destItemMaxTickVarPtr = (int32 *)VAR_ADDRESS(96);
|
||||
_destItemTickVarPtr = (int32 *)VAR_ADDRESS(97);
|
||||
_destItemActStartStVarPtr = (int32 *)VAR_ADDRESS(98);
|
||||
_destItemLookDirVarPtr = (int32 *)VAR_ADDRESS(99);
|
||||
_destItemPickableVarPtr = (int32 *)VAR_ADDRESS(102);
|
||||
_destItemRelaxVarPtr = (int32 *)VAR_ADDRESS(103);
|
||||
_destItemMaxFrameVarPtr = (int32 *)VAR_ADDRESS(105);
|
||||
_curGobVarPtr = (int32 *)VAR_ADDRESS(106);
|
||||
_some0ValPtr = (int32 *)VAR_ADDRESS(107);
|
||||
_curGobXPosVarPtr = (int32 *)VAR_ADDRESS(108);
|
||||
_curGobYPosVarPtr = (int32 *)VAR_ADDRESS(109);
|
||||
_curGobMaxFrameVarPtr = (int32 *)VAR_ADDRESS(110);
|
||||
_gobRetVarPtr.set(*_vm->_inter->_variables, 236);
|
||||
_curGobStateVarPtr.set(*_vm->_inter->_variables, 240);
|
||||
_curGobFrameVarPtr.set(*_vm->_inter->_variables, 244);
|
||||
_curGobMultStateVarPtr.set(*_vm->_inter->_variables, 248);
|
||||
_curGobNextStateVarPtr.set(*_vm->_inter->_variables, 252);
|
||||
_curGobScrXVarPtr.set(*_vm->_inter->_variables, 256);
|
||||
_curGobScrYVarPtr.set(*_vm->_inter->_variables, 260);
|
||||
_curGobLeftVarPtr.set(*_vm->_inter->_variables, 264);
|
||||
_curGobTopVarPtr.set(*_vm->_inter->_variables, 268);
|
||||
_curGobRightVarPtr.set(*_vm->_inter->_variables, 272);
|
||||
_curGobBottomVarPtr.set(*_vm->_inter->_variables, 276);
|
||||
_curGobDoAnimVarPtr.set(*_vm->_inter->_variables, 280);
|
||||
_curGobOrderVarPtr.set(*_vm->_inter->_variables, 284);
|
||||
_curGobNoTickVarPtr.set(*_vm->_inter->_variables, 288);
|
||||
_curGobTypeVarPtr.set(*_vm->_inter->_variables, 292);
|
||||
_curGobMaxTickVarPtr.set(*_vm->_inter->_variables, 296);
|
||||
_curGobTickVarPtr.set(*_vm->_inter->_variables, 300);
|
||||
_curGobActStartStateVarPtr.set(*_vm->_inter->_variables, 304);
|
||||
_curGobLookDirVarPtr.set(*_vm->_inter->_variables, 308);
|
||||
_curGobPickableVarPtr.set(*_vm->_inter->_variables, 320);
|
||||
_curGobRelaxVarPtr.set(*_vm->_inter->_variables, 324);
|
||||
_destItemStateVarPtr.set(*_vm->_inter->_variables, 328);
|
||||
_destItemFrameVarPtr.set(*_vm->_inter->_variables, 332);
|
||||
_destItemMultStateVarPtr.set(*_vm->_inter->_variables, 336);
|
||||
_destItemNextStateVarPtr.set(*_vm->_inter->_variables, 340);
|
||||
_destItemScrXVarPtr.set(*_vm->_inter->_variables, 344);
|
||||
_destItemScrYVarPtr.set(*_vm->_inter->_variables, 348);
|
||||
_destItemLeftVarPtr.set(*_vm->_inter->_variables, 352);
|
||||
_destItemTopVarPtr.set(*_vm->_inter->_variables, 356);
|
||||
_destItemRightVarPtr.set(*_vm->_inter->_variables, 360);
|
||||
_destItemBottomVarPtr.set(*_vm->_inter->_variables, 364);
|
||||
_destItemDoAnimVarPtr.set(*_vm->_inter->_variables, 368);
|
||||
_destItemOrderVarPtr.set(*_vm->_inter->_variables, 372);
|
||||
_destItemNoTickVarPtr.set(*_vm->_inter->_variables, 376);
|
||||
_destItemTypeVarPtr.set(*_vm->_inter->_variables, 380);
|
||||
_destItemMaxTickVarPtr.set(*_vm->_inter->_variables, 384);
|
||||
_destItemTickVarPtr.set(*_vm->_inter->_variables, 388);
|
||||
_destItemActStartStVarPtr.set(*_vm->_inter->_variables, 392);
|
||||
_destItemLookDirVarPtr.set(*_vm->_inter->_variables, 396);
|
||||
_destItemPickableVarPtr.set(*_vm->_inter->_variables, 408);
|
||||
_destItemRelaxVarPtr.set(*_vm->_inter->_variables, 412);
|
||||
_destItemMaxFrameVarPtr.set(*_vm->_inter->_variables, 420);
|
||||
_curGobVarPtr.set(*_vm->_inter->_variables, 424);
|
||||
_some0ValPtr.set(*_vm->_inter->_variables, 428);
|
||||
_curGobXPosVarPtr.set(*_vm->_inter->_variables, 432);
|
||||
_curGobYPosVarPtr.set(*_vm->_inter->_variables, 436);
|
||||
_curGobMaxFrameVarPtr.set(*_vm->_inter->_variables, 440);
|
||||
|
||||
_itemInPocketVarPtr = (int32 *)VAR_ADDRESS(114);
|
||||
_itemInPocketVarPtr.set(*_vm->_inter->_variables, 456);
|
||||
|
||||
*_itemInPocketVarPtr = -2;
|
||||
_itemInPocketVarPtr = (uint32) -2;
|
||||
}
|
||||
|
||||
void Goblin::loadGobDataFromVars(void) {
|
||||
Gob_Object *obj;
|
||||
|
||||
_itemIndInPocket = *_itemInPocketVarPtr;
|
||||
_itemIndInPocket = (int32) _itemInPocketVarPtr;
|
||||
|
||||
obj = _goblins[_currentGoblin];
|
||||
|
||||
obj->state = *_curGobStateVarPtr;
|
||||
obj->curFrame = *_curGobFrameVarPtr;
|
||||
obj->multState = *_curGobMultStateVarPtr;
|
||||
obj->nextState = *_curGobNextStateVarPtr;
|
||||
obj->xPos = *_curGobScrXVarPtr;
|
||||
obj->yPos = *_curGobScrYVarPtr;
|
||||
obj->left = *_curGobLeftVarPtr;
|
||||
obj->top = *_curGobTopVarPtr;
|
||||
obj->right = *_curGobRightVarPtr;
|
||||
obj->bottom = *_curGobBottomVarPtr;
|
||||
obj->doAnim = *_curGobDoAnimVarPtr;
|
||||
obj->order = *_curGobOrderVarPtr;
|
||||
obj->noTick = *_curGobNoTickVarPtr;
|
||||
obj->type = *_curGobTypeVarPtr;
|
||||
obj->maxTick = *_curGobMaxTickVarPtr;
|
||||
obj->tick = *_curGobTickVarPtr;
|
||||
obj->actionStartState = *_curGobActStartStateVarPtr;
|
||||
obj->curLookDir = *_curGobLookDirVarPtr;
|
||||
obj->pickable = *_curGobPickableVarPtr;
|
||||
obj->relaxTime = *_curGobRelaxVarPtr;
|
||||
obj->state = (int32) _curGobStateVarPtr;
|
||||
obj->curFrame = (int32) _curGobFrameVarPtr;
|
||||
obj->multState = (int32) _curGobMultStateVarPtr;
|
||||
obj->nextState = (int32) _curGobNextStateVarPtr;
|
||||
obj->xPos = (int32) _curGobScrXVarPtr;
|
||||
obj->yPos = (int32) _curGobScrYVarPtr;
|
||||
obj->left = (int32) _curGobLeftVarPtr;
|
||||
obj->top = (int32) _curGobTopVarPtr;
|
||||
obj->right = (int32) _curGobRightVarPtr;
|
||||
obj->bottom = (int32) _curGobBottomVarPtr;
|
||||
obj->doAnim = (int32) _curGobDoAnimVarPtr;
|
||||
obj->order = (int32) _curGobOrderVarPtr;
|
||||
obj->noTick = (int32) _curGobNoTickVarPtr;
|
||||
obj->type = (int32) _curGobTypeVarPtr;
|
||||
obj->maxTick = (int32) _curGobMaxTickVarPtr;
|
||||
obj->tick = (int32) _curGobTickVarPtr;
|
||||
obj->actionStartState = (int32) _curGobActStartStateVarPtr;
|
||||
obj->curLookDir = (int32) _curGobLookDirVarPtr;
|
||||
obj->pickable = (int32) _curGobPickableVarPtr;
|
||||
obj->relaxTime = (int32) _curGobRelaxVarPtr;
|
||||
|
||||
if (_actDestItemDesc == 0)
|
||||
return;
|
||||
|
||||
obj = _actDestItemDesc;
|
||||
|
||||
obj->state = *_destItemStateVarPtr;
|
||||
obj->curFrame = *_destItemFrameVarPtr;
|
||||
obj->multState = *_destItemMultStateVarPtr;
|
||||
obj->nextState = *_destItemNextStateVarPtr;
|
||||
obj->xPos = *_destItemScrXVarPtr;
|
||||
obj->yPos = *_destItemScrYVarPtr;
|
||||
obj->left = *_destItemLeftVarPtr;
|
||||
obj->top = *_destItemTopVarPtr;
|
||||
obj->right = *_destItemRightVarPtr;
|
||||
obj->bottom = *_destItemBottomVarPtr;
|
||||
obj->doAnim = *_destItemDoAnimVarPtr;
|
||||
obj->order = *_destItemOrderVarPtr;
|
||||
obj->noTick = *_destItemNoTickVarPtr;
|
||||
obj->type = *_destItemTypeVarPtr;
|
||||
obj->maxTick = *_destItemMaxTickVarPtr;
|
||||
obj->tick = *_destItemTickVarPtr;
|
||||
obj->actionStartState = *_destItemActStartStVarPtr;
|
||||
obj->curLookDir = *_destItemLookDirVarPtr;
|
||||
obj->pickable = *_destItemPickableVarPtr;
|
||||
obj->relaxTime = *_destItemRelaxVarPtr;
|
||||
obj->state = (int32) _destItemStateVarPtr;
|
||||
obj->curFrame = (int32) _destItemFrameVarPtr;
|
||||
obj->multState = (int32) _destItemMultStateVarPtr;
|
||||
obj->nextState = (int32) _destItemNextStateVarPtr;
|
||||
obj->xPos = (int32) _destItemScrXVarPtr;
|
||||
obj->yPos = (int32) _destItemScrYVarPtr;
|
||||
obj->left = (int32) _destItemLeftVarPtr;
|
||||
obj->top = (int32) _destItemTopVarPtr;
|
||||
obj->right = (int32) _destItemRightVarPtr;
|
||||
obj->bottom = (int32) _destItemBottomVarPtr;
|
||||
obj->doAnim = (int32) _destItemDoAnimVarPtr;
|
||||
obj->order = (int32) _destItemOrderVarPtr;
|
||||
obj->noTick = (int32) _destItemNoTickVarPtr;
|
||||
obj->type = (int32) _destItemTypeVarPtr;
|
||||
obj->maxTick = (int32) _destItemMaxTickVarPtr;
|
||||
obj->tick = (int32) _destItemTickVarPtr;
|
||||
obj->actionStartState = (int32) _destItemActStartStVarPtr;
|
||||
obj->curLookDir = (int32) _destItemLookDirVarPtr;
|
||||
obj->pickable = (int32) _destItemPickableVarPtr;
|
||||
obj->relaxTime = (int32) _destItemRelaxVarPtr;
|
||||
|
||||
if (obj->type != _destItemType)
|
||||
obj->toRedraw = 1;
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#include "gob/util.h"
|
||||
#include "gob/mult.h"
|
||||
#include "gob/variables.h"
|
||||
#include "gob/sound/sounddesc.h"
|
||||
|
||||
namespace Gob {
|
||||
@ -115,57 +116,57 @@ public:
|
||||
char _pathExistence;
|
||||
|
||||
// Pointers to interpreter variables
|
||||
int32 *_some0ValPtr;
|
||||
VariableReference _some0ValPtr;
|
||||
|
||||
int32 *_gobRetVarPtr;
|
||||
int32 *_curGobVarPtr;
|
||||
int32 *_curGobXPosVarPtr;
|
||||
int32 *_curGobYPosVarPtr;
|
||||
int32 *_itemInPocketVarPtr;
|
||||
VariableReference _gobRetVarPtr;
|
||||
VariableReference _curGobVarPtr;
|
||||
VariableReference _curGobXPosVarPtr;
|
||||
VariableReference _curGobYPosVarPtr;
|
||||
VariableReference _itemInPocketVarPtr;
|
||||
|
||||
int32 *_curGobStateVarPtr;
|
||||
int32 *_curGobFrameVarPtr;
|
||||
int32 *_curGobMultStateVarPtr;
|
||||
int32 *_curGobNextStateVarPtr;
|
||||
int32 *_curGobScrXVarPtr;
|
||||
int32 *_curGobScrYVarPtr;
|
||||
int32 *_curGobLeftVarPtr;
|
||||
int32 *_curGobTopVarPtr;
|
||||
int32 *_curGobRightVarPtr;
|
||||
int32 *_curGobBottomVarPtr;
|
||||
int32 *_curGobDoAnimVarPtr;
|
||||
int32 *_curGobOrderVarPtr;
|
||||
int32 *_curGobNoTickVarPtr;
|
||||
int32 *_curGobTypeVarPtr;
|
||||
int32 *_curGobMaxTickVarPtr;
|
||||
int32 *_curGobTickVarPtr;
|
||||
int32 *_curGobActStartStateVarPtr;
|
||||
int32 *_curGobLookDirVarPtr;
|
||||
int32 *_curGobPickableVarPtr;
|
||||
int32 *_curGobRelaxVarPtr;
|
||||
int32 *_curGobMaxFrameVarPtr;
|
||||
VariableReference _curGobStateVarPtr;
|
||||
VariableReference _curGobFrameVarPtr;
|
||||
VariableReference _curGobMultStateVarPtr;
|
||||
VariableReference _curGobNextStateVarPtr;
|
||||
VariableReference _curGobScrXVarPtr;
|
||||
VariableReference _curGobScrYVarPtr;
|
||||
VariableReference _curGobLeftVarPtr;
|
||||
VariableReference _curGobTopVarPtr;
|
||||
VariableReference _curGobRightVarPtr;
|
||||
VariableReference _curGobBottomVarPtr;
|
||||
VariableReference _curGobDoAnimVarPtr;
|
||||
VariableReference _curGobOrderVarPtr;
|
||||
VariableReference _curGobNoTickVarPtr;
|
||||
VariableReference _curGobTypeVarPtr;
|
||||
VariableReference _curGobMaxTickVarPtr;
|
||||
VariableReference _curGobTickVarPtr;
|
||||
VariableReference _curGobActStartStateVarPtr;
|
||||
VariableReference _curGobLookDirVarPtr;
|
||||
VariableReference _curGobPickableVarPtr;
|
||||
VariableReference _curGobRelaxVarPtr;
|
||||
VariableReference _curGobMaxFrameVarPtr;
|
||||
|
||||
int32 *_destItemStateVarPtr;
|
||||
int32 *_destItemFrameVarPtr;
|
||||
int32 *_destItemMultStateVarPtr;
|
||||
int32 *_destItemNextStateVarPtr;
|
||||
int32 *_destItemScrXVarPtr;
|
||||
int32 *_destItemScrYVarPtr;
|
||||
int32 *_destItemLeftVarPtr;
|
||||
int32 *_destItemTopVarPtr;
|
||||
int32 *_destItemRightVarPtr;
|
||||
int32 *_destItemBottomVarPtr;
|
||||
int32 *_destItemDoAnimVarPtr;
|
||||
int32 *_destItemOrderVarPtr;
|
||||
int32 *_destItemNoTickVarPtr;
|
||||
int32 *_destItemTypeVarPtr;
|
||||
int32 *_destItemMaxTickVarPtr;
|
||||
int32 *_destItemTickVarPtr;
|
||||
int32 *_destItemActStartStVarPtr;
|
||||
int32 *_destItemLookDirVarPtr;
|
||||
int32 *_destItemPickableVarPtr;
|
||||
int32 *_destItemRelaxVarPtr;
|
||||
int32 *_destItemMaxFrameVarPtr;
|
||||
VariableReference _destItemStateVarPtr;
|
||||
VariableReference _destItemFrameVarPtr;
|
||||
VariableReference _destItemMultStateVarPtr;
|
||||
VariableReference _destItemNextStateVarPtr;
|
||||
VariableReference _destItemScrXVarPtr;
|
||||
VariableReference _destItemScrYVarPtr;
|
||||
VariableReference _destItemLeftVarPtr;
|
||||
VariableReference _destItemTopVarPtr;
|
||||
VariableReference _destItemRightVarPtr;
|
||||
VariableReference _destItemBottomVarPtr;
|
||||
VariableReference _destItemDoAnimVarPtr;
|
||||
VariableReference _destItemOrderVarPtr;
|
||||
VariableReference _destItemNoTickVarPtr;
|
||||
VariableReference _destItemTypeVarPtr;
|
||||
VariableReference _destItemMaxTickVarPtr;
|
||||
VariableReference _destItemTickVarPtr;
|
||||
VariableReference _destItemActStartStVarPtr;
|
||||
VariableReference _destItemLookDirVarPtr;
|
||||
VariableReference _destItemPickableVarPtr;
|
||||
VariableReference _destItemRelaxVarPtr;
|
||||
VariableReference _destItemMaxFrameVarPtr;
|
||||
|
||||
int16 _destItemType;
|
||||
int16 _destItemState;
|
||||
|
@ -79,7 +79,7 @@ protected:
|
||||
};
|
||||
struct OpGobParams {
|
||||
int16 extraData;
|
||||
int32 *retVarPtr;
|
||||
VariableReference retVarPtr;
|
||||
Goblin::Gob_Object *objDesc;
|
||||
};
|
||||
|
||||
|
@ -912,12 +912,21 @@ void Inter_v1::o1_initMult() {
|
||||
animDataVar = _vm->_parse->parseVarIndex();
|
||||
|
||||
if (_vm->_mult->_objects && (oldObjCount != _vm->_mult->_objCount)) {
|
||||
|
||||
warning("Initializing new objects without having "
|
||||
"cleaned up the old ones at first");
|
||||
|
||||
for (int i = 0; i < _vm->_mult->_objCount; i++) {
|
||||
delete _vm->_mult->_objects[i].pPosX;
|
||||
delete _vm->_mult->_objects[i].pPosY;
|
||||
}
|
||||
|
||||
delete[] _vm->_mult->_objects;
|
||||
delete[] _vm->_mult->_renderData;
|
||||
|
||||
_vm->_mult->_objects = 0;
|
||||
_vm->_mult->_renderObjs = 0;
|
||||
|
||||
}
|
||||
|
||||
if (_vm->_mult->_objects == 0) {
|
||||
@ -933,8 +942,8 @@ void Inter_v1::o1_initMult() {
|
||||
uint32 offPosY = i * 4 + (posYVar / 4) * 4;
|
||||
uint32 offAnim = animDataVar + i * 4 * _vm->_global->_inter_animDataSize;
|
||||
|
||||
_vm->_mult->_objects[i].pPosX = (int32 *) _variables->getAddressOff32(offPosX);
|
||||
_vm->_mult->_objects[i].pPosY = (int32 *) _variables->getAddressOff32(offPosY);
|
||||
_vm->_mult->_objects[i].pPosX = new VariableReference(*_vm->_inter->_variables, offPosX);
|
||||
_vm->_mult->_objects[i].pPosY = new VariableReference(*_vm->_inter->_variables, offPosY);
|
||||
|
||||
_vm->_mult->_objects[i].pAnimData =
|
||||
(Mult::Mult_AnimData *) _variables->getAddressOff8(offAnim,
|
||||
@ -1774,7 +1783,7 @@ bool Inter_v1::o1_goblinFunc(OpFuncParams ¶ms) {
|
||||
|
||||
gobParams.extraData = 0;
|
||||
gobParams.objDesc = 0;
|
||||
gobParams.retVarPtr = (int32 *) VAR_ADDRESS(59);
|
||||
gobParams.retVarPtr.set(*_vm->_inter->_variables, 236);
|
||||
|
||||
cmd = load16();
|
||||
_vm->_global->_inter_execPtr += 2;
|
||||
@ -2268,49 +2277,49 @@ bool Inter_v1::o1_manageDataFile(OpFuncParams ¶ms) {
|
||||
void Inter_v1::o1_setState(OpGobParams ¶ms) {
|
||||
params.objDesc->state = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemStateVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemStateVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setCurFrame(OpGobParams ¶ms) {
|
||||
params.objDesc->curFrame = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemFrameVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemFrameVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setNextState(OpGobParams ¶ms) {
|
||||
params.objDesc->nextState = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemNextStateVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemNextStateVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setMultState(OpGobParams ¶ms) {
|
||||
params.objDesc->multState = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemMultStateVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemMultStateVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setOrder(OpGobParams ¶ms) {
|
||||
params.objDesc->order = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemOrderVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemOrderVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setActionStartState(OpGobParams ¶ms) {
|
||||
params.objDesc->actionStartState = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemActStartStVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemActStartStVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setCurLookDir(OpGobParams ¶ms) {
|
||||
params.objDesc->curLookDir = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemLookDirVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemLookDirVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setType(OpGobParams ¶ms) {
|
||||
params.objDesc->type = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemTypeVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemTypeVarPtr = (uint32) params.extraData;
|
||||
|
||||
if (params.extraData == 0)
|
||||
params.objDesc->toRedraw = 1;
|
||||
@ -2319,107 +2328,107 @@ void Inter_v1::o1_setType(OpGobParams ¶ms) {
|
||||
void Inter_v1::o1_setNoTick(OpGobParams ¶ms) {
|
||||
params.objDesc->noTick = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemNoTickVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemNoTickVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setPickable(OpGobParams ¶ms) {
|
||||
params.objDesc->pickable = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemPickableVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemPickableVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setXPos(OpGobParams ¶ms) {
|
||||
params.objDesc->xPos = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemScrXVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemScrXVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setYPos(OpGobParams ¶ms) {
|
||||
params.objDesc->yPos = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemScrYVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemScrYVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setDoAnim(OpGobParams ¶ms) {
|
||||
params.objDesc->doAnim = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemDoAnimVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemDoAnimVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setRelaxTime(OpGobParams ¶ms) {
|
||||
params.objDesc->relaxTime = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemRelaxVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemRelaxVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setMaxTick(OpGobParams ¶ms) {
|
||||
params.objDesc->maxTick = params.extraData;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc)
|
||||
*_vm->_goblin->_destItemMaxTickVarPtr = params.extraData;
|
||||
_vm->_goblin->_destItemMaxTickVarPtr = (uint32) params.extraData;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getState(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->state;
|
||||
params.retVarPtr = (uint32) params.objDesc->state;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getCurFrame(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->curFrame;
|
||||
params.retVarPtr = (uint32) params.objDesc->curFrame;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getNextState(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->nextState;
|
||||
params.retVarPtr = (uint32) params.objDesc->nextState;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getMultState(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->multState;
|
||||
params.retVarPtr = (uint32) params.objDesc->multState;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getOrder(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->order;
|
||||
params.retVarPtr = (uint32) params.objDesc->order;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getActionStartState(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->actionStartState;
|
||||
params.retVarPtr = (uint32) params.objDesc->actionStartState;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getCurLookDir(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->curLookDir;
|
||||
params.retVarPtr = (uint32) params.objDesc->curLookDir;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getType(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->type;
|
||||
params.retVarPtr = (uint32) params.objDesc->type;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getNoTick(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->noTick;
|
||||
params.retVarPtr = (uint32) params.objDesc->noTick;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getPickable(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->pickable;
|
||||
params.retVarPtr = (uint32) params.objDesc->pickable;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getObjMaxFrame(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = _vm->_goblin->getObjMaxFrame(params.objDesc);
|
||||
params.retVarPtr = (uint32) _vm->_goblin->getObjMaxFrame(params.objDesc);
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getXPos(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->xPos;
|
||||
params.retVarPtr = (uint32) params.objDesc->xPos;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getYPos(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->yPos;
|
||||
params.retVarPtr = (uint32) params.objDesc->yPos;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getDoAnim(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->doAnim;
|
||||
params.retVarPtr = (uint32) params.objDesc->doAnim;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getRelaxTime(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->relaxTime;
|
||||
params.retVarPtr = (uint32) params.objDesc->relaxTime;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getMaxTick(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = params.objDesc->maxTick;
|
||||
params.retVarPtr = (uint32) params.objDesc->maxTick;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_manipulateMap(OpGobParams ¶ms) {
|
||||
@ -2435,9 +2444,9 @@ void Inter_v1::o1_getItem(OpGobParams ¶ms) {
|
||||
int16 yPos = load16();
|
||||
|
||||
if ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) != 0)
|
||||
*params.retVarPtr = (_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) >> 8;
|
||||
params.retVarPtr = (uint32) ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) >> 8);
|
||||
else
|
||||
*params.retVarPtr = _vm->_map->_itemsMap[yPos][xPos];
|
||||
params.retVarPtr = (uint32) _vm->_map->_itemsMap[yPos][xPos];
|
||||
}
|
||||
|
||||
void Inter_v1::o1_manipulateMapIndirect(OpGobParams ¶ms) {
|
||||
@ -2460,9 +2469,9 @@ void Inter_v1::o1_getItemIndirect(OpGobParams ¶ms) {
|
||||
yPos = VAR(yPos);
|
||||
|
||||
if ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) != 0)
|
||||
*params.retVarPtr = (_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) >> 8;
|
||||
params.retVarPtr = (uint32) ((_vm->_map->_itemsMap[yPos][xPos] & 0xFF00) >> 8);
|
||||
else
|
||||
*params.retVarPtr = _vm->_map->_itemsMap[yPos][xPos];
|
||||
params.retVarPtr = (uint32) _vm->_map->_itemsMap[yPos][xPos];
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setPassMap(OpGobParams ¶ms) {
|
||||
@ -2500,11 +2509,11 @@ void Inter_v1::o1_setGoblinPosH(OpGobParams ¶ms) {
|
||||
params.objDesc->curFrame = 0;
|
||||
params.objDesc->state = 21;
|
||||
if (_vm->_goblin->_currentGoblin == item) {
|
||||
*_vm->_goblin->_curGobScrXVarPtr = params.objDesc->xPos;
|
||||
*_vm->_goblin->_curGobScrYVarPtr = params.objDesc->yPos;
|
||||
_vm->_goblin->_curGobScrXVarPtr = (uint32) params.objDesc->xPos;
|
||||
_vm->_goblin->_curGobScrYVarPtr = (uint32) params.objDesc->yPos;
|
||||
|
||||
*_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
*_vm->_goblin->_curGobStateVarPtr = 18;
|
||||
_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
_vm->_goblin->_curGobStateVarPtr = 18;
|
||||
_vm->_goblin->_pressedMapX = _vm->_goblin->_gobPositions[item].x;
|
||||
_vm->_goblin->_pressedMapY = _vm->_goblin->_gobPositions[item].y;
|
||||
}
|
||||
@ -2512,12 +2521,12 @@ void Inter_v1::o1_setGoblinPosH(OpGobParams ¶ms) {
|
||||
|
||||
void Inter_v1::o1_getGoblinPosXH(OpGobParams ¶ms) {
|
||||
int16 item = load16();
|
||||
*params.retVarPtr = _vm->_goblin->_gobPositions[item].x >> 1;
|
||||
params.retVarPtr = (uint32) (_vm->_goblin->_gobPositions[item].x >> 1);
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getGoblinPosYH(OpGobParams ¶ms) {
|
||||
int16 item = load16();
|
||||
*params.retVarPtr = _vm->_goblin->_gobPositions[item].y >> 1;
|
||||
params.retVarPtr = (uint32) (_vm->_goblin->_gobPositions[item].y >> 1);
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setGoblinMultState(OpGobParams ¶ms) {
|
||||
@ -2539,14 +2548,14 @@ void Inter_v1::o1_setGoblinMultState(OpGobParams ¶ms) {
|
||||
params.objDesc->xPos = animLayer->posX;
|
||||
params.objDesc->yPos = animLayer->posY;
|
||||
|
||||
*_vm->_goblin->_curGobScrXVarPtr = params.objDesc->xPos;
|
||||
*_vm->_goblin->_curGobScrYVarPtr = params.objDesc->yPos;
|
||||
*_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
*_vm->_goblin->_curGobStateVarPtr = params.objDesc->state;
|
||||
*_vm->_goblin->_curGobNextStateVarPtr = params.objDesc->nextState;
|
||||
*_vm->_goblin->_curGobMultStateVarPtr = params.objDesc->multState;
|
||||
*_vm->_goblin->_curGobMaxFrameVarPtr =
|
||||
_vm->_goblin->getObjMaxFrame(params.objDesc);
|
||||
_vm->_goblin->_curGobScrXVarPtr = (uint32) params.objDesc->xPos;
|
||||
_vm->_goblin->_curGobScrYVarPtr = (uint32) params.objDesc->yPos;
|
||||
_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
_vm->_goblin->_curGobStateVarPtr = (uint32) params.objDesc->state;
|
||||
_vm->_goblin->_curGobNextStateVarPtr = (uint32) params.objDesc->nextState;
|
||||
_vm->_goblin->_curGobMultStateVarPtr = (uint32) params.objDesc->multState;
|
||||
_vm->_goblin->_curGobMaxFrameVarPtr =
|
||||
(uint32) _vm->_goblin->getObjMaxFrame(params.objDesc);
|
||||
_vm->_goblin->_noPick = 1;
|
||||
return;
|
||||
}
|
||||
@ -2573,12 +2582,12 @@ void Inter_v1::o1_setGoblinMultState(OpGobParams ¶ms) {
|
||||
_vm->_goblin->_pressedMapY = yPos;
|
||||
_vm->_map->_curGoblinY = yPos;
|
||||
|
||||
*_vm->_goblin->_curGobScrXVarPtr = params.objDesc->xPos;
|
||||
*_vm->_goblin->_curGobScrYVarPtr = params.objDesc->yPos;
|
||||
*_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
*_vm->_goblin->_curGobStateVarPtr = 21;
|
||||
*_vm->_goblin->_curGobNextStateVarPtr = 21;
|
||||
*_vm->_goblin->_curGobMultStateVarPtr = -1;
|
||||
_vm->_goblin->_curGobScrXVarPtr = (uint32) params.objDesc->xPos;
|
||||
_vm->_goblin->_curGobScrYVarPtr = (uint32) params.objDesc->yPos;
|
||||
_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
_vm->_goblin->_curGobStateVarPtr = 21;
|
||||
_vm->_goblin->_curGobNextStateVarPtr = 21;
|
||||
_vm->_goblin->_curGobMultStateVarPtr = (uint32) -1;
|
||||
_vm->_goblin->_noPick = 0;
|
||||
}
|
||||
|
||||
@ -2598,11 +2607,11 @@ void Inter_v1::o1_setItemIndInPocket(OpGobParams ¶ms) {
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getItemIdInPocket(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = _vm->_goblin->_itemIdInPocket;
|
||||
params.retVarPtr = (uint32) _vm->_goblin->_itemIdInPocket;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getItemIndInPocket(OpGobParams ¶ms) {
|
||||
*params.retVarPtr = _vm->_goblin->_itemIndInPocket;
|
||||
params.retVarPtr = (uint32) _vm->_goblin->_itemIndInPocket;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setGoblinPos(OpGobParams ¶ms) {
|
||||
@ -2632,10 +2641,10 @@ void Inter_v1::o1_setGoblinPos(OpGobParams ¶ms) {
|
||||
params.objDesc->state = 21;
|
||||
|
||||
if (_vm->_goblin->_currentGoblin == item) {
|
||||
*_vm->_goblin->_curGobScrXVarPtr = params.objDesc->xPos;
|
||||
*_vm->_goblin->_curGobScrYVarPtr = params.objDesc->yPos;
|
||||
*_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
*_vm->_goblin->_curGobStateVarPtr = 18;
|
||||
_vm->_goblin->_curGobScrXVarPtr = (uint32) params.objDesc->xPos;
|
||||
_vm->_goblin->_curGobScrYVarPtr = (uint32) params.objDesc->yPos;
|
||||
_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
_vm->_goblin->_curGobStateVarPtr = 18;
|
||||
|
||||
_vm->_goblin->_pressedMapX = _vm->_goblin->_gobPositions[item].x;
|
||||
_vm->_goblin->_pressedMapY = _vm->_goblin->_gobPositions[item].y;
|
||||
@ -2659,11 +2668,11 @@ void Inter_v1::o1_setGoblinState(OpGobParams ¶ms) {
|
||||
params.objDesc->yPos = animLayer->posY;
|
||||
|
||||
if (item == _vm->_goblin->_currentGoblin) {
|
||||
*_vm->_goblin->_curGobScrXVarPtr = params.objDesc->xPos;
|
||||
*_vm->_goblin->_curGobScrYVarPtr = params.objDesc->yPos;
|
||||
*_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
*_vm->_goblin->_curGobStateVarPtr = params.objDesc->state;
|
||||
*_vm->_goblin->_curGobMultStateVarPtr = params.objDesc->multState;
|
||||
_vm->_goblin->_curGobScrXVarPtr = (uint32) params.objDesc->xPos;
|
||||
_vm->_goblin->_curGobScrYVarPtr = (uint32) params.objDesc->yPos;
|
||||
_vm->_goblin->_curGobFrameVarPtr = 0;
|
||||
_vm->_goblin->_curGobStateVarPtr = (uint32) params.objDesc->state;
|
||||
_vm->_goblin->_curGobMultStateVarPtr = (uint32) params.objDesc->multState;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2686,13 +2695,13 @@ void Inter_v1::o1_setGoblinStateRedraw(OpGobParams ¶ms) {
|
||||
params.objDesc->toRedraw = 1;
|
||||
params.objDesc->type = 0;
|
||||
if (params.objDesc == _vm->_goblin->_actDestItemDesc) {
|
||||
*_vm->_goblin->_destItemScrXVarPtr = params.objDesc->xPos;
|
||||
*_vm->_goblin->_destItemScrYVarPtr = params.objDesc->yPos;
|
||||
_vm->_goblin->_destItemScrXVarPtr = (uint32) params.objDesc->xPos;
|
||||
_vm->_goblin->_destItemScrYVarPtr = (uint32) params.objDesc->yPos;
|
||||
|
||||
*_vm->_goblin->_destItemStateVarPtr = params.objDesc->state;
|
||||
*_vm->_goblin->_destItemNextStateVarPtr = -1;
|
||||
*_vm->_goblin->_destItemMultStateVarPtr = -1;
|
||||
*_vm->_goblin->_destItemFrameVarPtr = 0;
|
||||
_vm->_goblin->_destItemStateVarPtr = (uint32) params.objDesc->state;
|
||||
_vm->_goblin->_destItemNextStateVarPtr = (uint32) -1;
|
||||
_vm->_goblin->_destItemMultStateVarPtr = (uint32) -1;
|
||||
_vm->_goblin->_destItemFrameVarPtr = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2712,12 +2721,12 @@ void Inter_v1::o1_decRelaxTime(OpGobParams ¶ms) {
|
||||
|
||||
void Inter_v1::o1_getGoblinPosX(OpGobParams ¶ms) {
|
||||
int16 item = load16();
|
||||
*params.retVarPtr = _vm->_goblin->_gobPositions[item].x;
|
||||
params.retVarPtr = (uint32) _vm->_goblin->_gobPositions[item].x;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getGoblinPosY(OpGobParams ¶ms) {
|
||||
int16 item = load16();
|
||||
*params.retVarPtr = _vm->_goblin->_gobPositions[item].y;
|
||||
params.retVarPtr = (uint32) _vm->_goblin->_gobPositions[item].y;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_clearPathExistence(OpGobParams ¶ms) {
|
||||
@ -2741,9 +2750,9 @@ void Inter_v1::o1_getObjectIntersect(OpGobParams ¶ms) {
|
||||
params.objDesc = _vm->_goblin->_objects[params.extraData];
|
||||
if (_vm->_goblin->objIntersected(params.objDesc,
|
||||
_vm->_goblin->_goblins[item]))
|
||||
*params.retVarPtr = 1;
|
||||
params.retVarPtr = 1;
|
||||
else
|
||||
*params.retVarPtr = 0;
|
||||
params.retVarPtr = 0;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_getGoblinIntersect(OpGobParams ¶ms) {
|
||||
@ -2753,9 +2762,9 @@ void Inter_v1::o1_getGoblinIntersect(OpGobParams ¶ms) {
|
||||
params.objDesc = _vm->_goblin->_goblins[params.extraData];
|
||||
if (_vm->_goblin->objIntersected(params.objDesc,
|
||||
_vm->_goblin->_goblins[item]))
|
||||
*params.retVarPtr = 1;
|
||||
params.retVarPtr = 1;
|
||||
else
|
||||
*params.retVarPtr = 0;
|
||||
params.retVarPtr = 0;
|
||||
}
|
||||
|
||||
void Inter_v1::o1_setItemPos(OpGobParams ¶ms) {
|
||||
@ -2886,7 +2895,7 @@ void Inter_v1::o1_initGoblin(OpGobParams ¶ms) {
|
||||
_vm->_map->_destY = _vm->_goblin->_gobPositions[0].y;
|
||||
_vm->_goblin->_gobDestY = _vm->_goblin->_gobPositions[0].y;
|
||||
|
||||
*_vm->_goblin->_curGobVarPtr = 0;
|
||||
_vm->_goblin->_curGobVarPtr = 0;
|
||||
_vm->_goblin->_pathExistence = 0;
|
||||
_vm->_goblin->_readyToAct = 0;
|
||||
}
|
||||
|
@ -880,9 +880,15 @@ void Inter_v2::o2_initMult() {
|
||||
|
||||
_vm->_mult->clearObjectVideos();
|
||||
|
||||
for (int i = 0; i < _vm->_mult->_objCount; i++) {
|
||||
delete _vm->_mult->_objects[i].pPosX;
|
||||
delete _vm->_mult->_objects[i].pPosY;
|
||||
}
|
||||
|
||||
delete[] _vm->_mult->_objects;
|
||||
delete[] _vm->_mult->_renderObjs;
|
||||
delete[] _vm->_mult->_orderArray;
|
||||
|
||||
_vm->_mult->_objects = 0;
|
||||
_vm->_mult->_renderObjs = 0;
|
||||
_vm->_mult->_orderArray = 0;
|
||||
@ -907,8 +913,8 @@ void Inter_v2::o2_initMult() {
|
||||
uint32 offPosY = i * 4 + (posYVar / 4) * 4;
|
||||
uint32 offAnim = animDataVar + i * 4 * _vm->_global->_inter_animDataSize;
|
||||
|
||||
_vm->_mult->_objects[i].pPosX = (int32 *) _variables->getAddressOff32(offPosX);
|
||||
_vm->_mult->_objects[i].pPosY = (int32 *) _variables->getAddressOff32(offPosY);
|
||||
_vm->_mult->_objects[i].pPosX = new VariableReference(*_vm->_inter->_variables, offPosX);
|
||||
_vm->_mult->_objects[i].pPosY = new VariableReference(*_vm->_inter->_variables, offPosY);
|
||||
|
||||
_vm->_mult->_objects[i].pAnimData =
|
||||
(Mult::Mult_AnimData *) _variables->getAddressOff8(offAnim,
|
||||
@ -1046,7 +1052,7 @@ void Inter_v2::o2_loadMultObject() {
|
||||
|
||||
} else if ((objAnim.animType != 100) && (objAnim.animType != 101)) {
|
||||
|
||||
if ((*(obj.pPosX) == -1234) && (*(obj.pPosY) == -4321)) {
|
||||
if ((((int32) *(obj.pPosX)) == -1234) && (((int32) *(obj.pPosY)) == -4321)) {
|
||||
|
||||
if (obj.videoSlot > 0)
|
||||
_vm->_vidPlayer->slotClose(obj.videoSlot - 1);
|
||||
|
@ -93,12 +93,18 @@ Mult::Mult(GobEngine *vm) : _vm(vm) {
|
||||
}
|
||||
|
||||
Mult::~Mult() {
|
||||
if (_objects)
|
||||
for (int i = 0; i < _objCount; i++) {
|
||||
delete _objects[i].pPosX;
|
||||
delete _objects[i].pPosY;
|
||||
}
|
||||
|
||||
delete[] _objects;
|
||||
delete[] _orderArray;
|
||||
delete[] _renderData;
|
||||
delete[] _renderObjs;
|
||||
delete[] _animArrayX;
|
||||
delete[] _animArrayY;
|
||||
delete _animArrayX;
|
||||
delete _animArrayY;
|
||||
delete[] _animArrayData;
|
||||
delete _multData;
|
||||
}
|
||||
@ -123,6 +129,12 @@ void Mult::freeAll(void) {
|
||||
void Mult::freeMult() {
|
||||
clearObjectVideos();
|
||||
|
||||
if (_objects)
|
||||
for (int i = 0; i < _objCount; i++) {
|
||||
delete _objects[i].pPosX;
|
||||
delete _objects[i].pPosY;
|
||||
}
|
||||
|
||||
delete[] _objects;
|
||||
delete[] _renderData;
|
||||
delete[] _renderObjs;
|
||||
@ -203,11 +215,17 @@ void Mult::playMult(int16 startFrame, int16 endFrame, char checkEscape,
|
||||
if (_animDataAllocated) {
|
||||
clearObjectVideos();
|
||||
|
||||
if (_objects)
|
||||
for (int i = 0; i < _objCount; i++) {
|
||||
delete _objects[i].pPosX;
|
||||
delete _objects[i].pPosY;
|
||||
}
|
||||
|
||||
delete[] _objects;
|
||||
delete[] _renderData;
|
||||
delete[] _renderObjs;
|
||||
delete[] _animArrayX;
|
||||
delete[] _animArrayY;
|
||||
delete _animArrayX;
|
||||
delete _animArrayY;
|
||||
delete[] _animArrayData;
|
||||
delete[] _orderArray;
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#define GOB_MULT_H
|
||||
|
||||
#include "gob/video.h"
|
||||
#include "gob/variables.h"
|
||||
|
||||
namespace Gob {
|
||||
|
||||
@ -77,8 +78,8 @@ public:
|
||||
} PACKED_STRUCT;
|
||||
|
||||
struct Mult_Object {
|
||||
int32 *pPosX;
|
||||
int32 *pPosY;
|
||||
VariableReference *pPosX;
|
||||
VariableReference *pPosY;
|
||||
Mult_AnimData *pAnimData;
|
||||
int16 tick;
|
||||
int16 lastLeft;
|
||||
@ -267,8 +268,8 @@ protected:
|
||||
|
||||
bool _doPalSubst;
|
||||
|
||||
int32 *_animArrayX;
|
||||
int32 *_animArrayY;
|
||||
Variables *_animArrayX;
|
||||
Variables *_animArrayY;
|
||||
Mult_AnimData *_animArrayData;
|
||||
|
||||
int16 _palKeyIndex;
|
||||
|
@ -216,10 +216,16 @@ void Mult_v1::freeMultKeys() {
|
||||
if (_animDataAllocated) {
|
||||
clearObjectVideos();
|
||||
|
||||
if (_objects)
|
||||
for (int i = 0; i < _objCount; i++) {
|
||||
delete _objects[i].pPosX;
|
||||
delete _objects[i].pPosY;
|
||||
}
|
||||
|
||||
delete[] _objects;
|
||||
delete[] _renderData;
|
||||
delete[] _animArrayX;
|
||||
delete[] _animArrayY;
|
||||
delete _animArrayX;
|
||||
delete _animArrayY;
|
||||
delete[] _animArrayData;
|
||||
|
||||
_objects = 0;
|
||||
@ -263,6 +269,14 @@ void Mult_v1::playMultInit() {
|
||||
_oldPalette = _vm->_global->_pPaletteDesc->vgaPal;
|
||||
|
||||
if (!_animSurf) {
|
||||
if (_objects)
|
||||
for (int i = 0; i < _objCount; i++) {
|
||||
delete _objects[i].pPosX;
|
||||
delete _objects[i].pPosY;
|
||||
}
|
||||
|
||||
delete[] _objects;
|
||||
|
||||
_vm->_util->setFrameRate(_multData->frameRate);
|
||||
_animTop = 0;
|
||||
_animLeft = 0;
|
||||
@ -270,30 +284,27 @@ void Mult_v1::playMultInit() {
|
||||
_animHeight = 200;
|
||||
_objCount = 4;
|
||||
|
||||
delete[] _objects;
|
||||
delete[] _renderData;
|
||||
delete[] _animArrayX;
|
||||
delete[] _animArrayY;
|
||||
delete _animArrayX;
|
||||
delete _animArrayY;
|
||||
delete[] _animArrayData;
|
||||
|
||||
_objects = new Mult_Object[_objCount];
|
||||
_renderData = new int16[9 * _objCount];
|
||||
_animArrayX = new int32[_objCount];
|
||||
_animArrayY = new int32[_objCount];
|
||||
_animArrayX = new VariablesLE(_objCount * 4);
|
||||
_animArrayY = new VariablesLE(_objCount * 4);
|
||||
_animArrayData = new Mult_AnimData[_objCount];
|
||||
|
||||
memset(_objects, 0, _objCount * sizeof(Mult_Object));
|
||||
memset(_renderData, 0, _objCount * 9 * sizeof(int16));
|
||||
memset(_animArrayX, 0, _objCount * sizeof(int32));
|
||||
memset(_animArrayY, 0, _objCount * sizeof(int32));
|
||||
memset(_animArrayData, 0, _objCount * sizeof(Mult_AnimData));
|
||||
|
||||
for (_counter = 0; _counter < _objCount; _counter++) {
|
||||
Mult_Object &multObj = _objects[_counter];
|
||||
Mult_AnimData &animData = _animArrayData[_counter];
|
||||
|
||||
multObj.pPosX = (int32 *) &_animArrayX[_counter];
|
||||
multObj.pPosY = (int32 *) &_animArrayY[_counter];
|
||||
multObj.pPosX = new VariableReference(*_animArrayX, _counter * 4);
|
||||
multObj.pPosY = new VariableReference(*_animArrayY, _counter * 4);
|
||||
multObj.pAnimData = &animData;
|
||||
|
||||
animData.isStatic = 1;
|
||||
|
@ -329,8 +329,8 @@ void Mult_v2::freeMultKeys() {
|
||||
if (_animDataAllocated) {
|
||||
freeMult();
|
||||
|
||||
delete[] _animArrayX;
|
||||
delete[] _animArrayY;
|
||||
delete _animArrayX;
|
||||
delete _animArrayY;
|
||||
delete[] _animArrayData;
|
||||
|
||||
_animArrayX = 0;
|
||||
@ -510,6 +510,13 @@ void Mult_v2::playMultInit() {
|
||||
if (!_animSurf) {
|
||||
int16 width, height;
|
||||
|
||||
for (int i = 0; i < _objCount; i++) {
|
||||
delete _objects[i].pPosX;
|
||||
delete _objects[i].pPosY;
|
||||
}
|
||||
|
||||
delete[] _objects;
|
||||
|
||||
_vm->_util->setFrameRate(_multData->frameRate);
|
||||
_animTop = 0;
|
||||
_animLeft = 0;
|
||||
@ -517,33 +524,30 @@ void Mult_v2::playMultInit() {
|
||||
_animHeight = _vm->_video->_surfHeight;
|
||||
_objCount = 4;
|
||||
|
||||
delete[] _objects;
|
||||
delete[] _orderArray;
|
||||
delete[] _renderObjs;
|
||||
delete[] _animArrayX;
|
||||
delete[] _animArrayY;
|
||||
delete _animArrayX;
|
||||
delete _animArrayY;
|
||||
delete[] _animArrayData;
|
||||
|
||||
_objects = new Mult_Object[_objCount];
|
||||
_orderArray = new int8[_objCount];
|
||||
_renderObjs = new Mult_Object*[_objCount];
|
||||
_animArrayX = new int32[_objCount];
|
||||
_animArrayY = new int32[_objCount];
|
||||
_animArrayX = new VariablesLE(_objCount * 4);
|
||||
_animArrayY = new VariablesLE(_objCount * 4);
|
||||
_animArrayData = new Mult_AnimData[_objCount];
|
||||
|
||||
memset(_objects, 0, _objCount * sizeof(Mult_Object));
|
||||
memset(_orderArray, 0, _objCount * sizeof(int8));
|
||||
memset(_renderObjs, 0, _objCount * sizeof(Mult_Object *));
|
||||
memset(_animArrayX, 0, _objCount * sizeof(int32));
|
||||
memset(_animArrayY, 0, _objCount * sizeof(int32));
|
||||
memset(_animArrayData, 0, _objCount * sizeof(Mult_AnimData));
|
||||
|
||||
for (_counter = 0; _counter < _objCount; _counter++) {
|
||||
Mult_Object &multObj = _objects[_counter];
|
||||
Mult_AnimData &animData = _animArrayData[_counter];
|
||||
|
||||
multObj.pPosX = (int32 *) &_animArrayX[_counter];
|
||||
multObj.pPosY = (int32 *) &_animArrayY[_counter];
|
||||
multObj.pPosX = new VariableReference(*_animArrayX, _counter * 4);
|
||||
multObj.pPosY = new VariableReference(*_animArrayY, _counter * 4);
|
||||
multObj.pAnimData = &animData;
|
||||
|
||||
animData.isStatic = 1;
|
||||
|
@ -144,4 +144,4 @@ private:
|
||||
|
||||
} // End of namespace Gob
|
||||
|
||||
#endif // GOB_SOUND_H
|
||||
#endif // GOB_SOUND_SOUND_H
|
||||
|
@ -308,4 +308,62 @@ uint32 VariablesBE::read32(const byte *buf) const {
|
||||
return READ_BE_UINT32(buf);
|
||||
}
|
||||
|
||||
VariableReference::VariableReference() {
|
||||
_vars = 0;
|
||||
_offset = 0;
|
||||
}
|
||||
|
||||
VariableReference::VariableReference(Variables &vars, uint32 offset, Variables::Type type) {
|
||||
set(vars, offset, type);
|
||||
}
|
||||
|
||||
VariableReference::~VariableReference() {
|
||||
}
|
||||
|
||||
void VariableReference::set(Variables &vars, uint32 offset, Variables::Type type) {
|
||||
_vars = &vars;
|
||||
_offset = offset;
|
||||
_type = type;
|
||||
}
|
||||
|
||||
VariableReference &VariableReference::operator=(uint32 value) {
|
||||
if (_vars) {
|
||||
switch (_type) {
|
||||
case Variables::kVariableType8:
|
||||
_vars->writeOff8(_offset, (uint8) value);
|
||||
break;
|
||||
case Variables::kVariableType16:
|
||||
_vars->writeOff16(_offset, (uint16) value);
|
||||
break;
|
||||
case Variables::kVariableType32:
|
||||
_vars->writeOff32(_offset, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
VariableReference::operator uint32() {
|
||||
if (_vars) {
|
||||
switch (_type) {
|
||||
case Variables::kVariableType8:
|
||||
return (uint32) _vars->readOff8(_offset);
|
||||
case Variables::kVariableType16:
|
||||
return (uint32) _vars->readOff16(_offset);
|
||||
case Variables::kVariableType32:
|
||||
return _vars->readOff32(_offset);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
VariableReference &VariableReference::operator+=(uint32 value) {
|
||||
return (*this = (*this + value));
|
||||
}
|
||||
|
||||
VariableReference &VariableReference::operator*=(uint32 value) {
|
||||
return (*this = (*this * value));
|
||||
}
|
||||
|
||||
} // End of namespace Gob
|
||||
|
@ -30,6 +30,12 @@ namespace Gob {
|
||||
|
||||
class Variables {
|
||||
public:
|
||||
enum Type {
|
||||
kVariableType8,
|
||||
kVariableType16,
|
||||
kVariableType32
|
||||
};
|
||||
|
||||
Variables(uint32 size);
|
||||
virtual ~Variables();
|
||||
|
||||
@ -142,6 +148,26 @@ protected:
|
||||
uint32 read32(const byte *buf) const;
|
||||
};
|
||||
|
||||
class VariableReference {
|
||||
public:
|
||||
VariableReference();
|
||||
VariableReference(Variables &vars, uint32 offset,
|
||||
Variables::Type type = Variables::kVariableType32);
|
||||
~VariableReference();
|
||||
|
||||
void set(Variables &vars, uint32 offset, Variables::Type type = Variables::kVariableType32);
|
||||
|
||||
VariableReference &operator=(uint32 value);
|
||||
VariableReference &operator+=(uint32 value);
|
||||
VariableReference &operator*=(uint32 value);
|
||||
operator uint32();
|
||||
|
||||
private:
|
||||
Variables *_vars;
|
||||
uint32 _offset;
|
||||
Variables::Type _type;
|
||||
};
|
||||
|
||||
} // End of namespace Gob
|
||||
|
||||
#endif // GOB_VARIABLES_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user