o Unstubbed sfPreDialog -- we have enough code for that

o Started to restore inventory functionality

svn-id: r17666
This commit is contained in:
Eugene Sandulenko 2005-04-18 10:26:43 +00:00
parent 0ca8095e95
commit 769b2fed46
6 changed files with 25 additions and 26 deletions

View file

@ -260,6 +260,8 @@ Actor::Actor(SagaEngine *vm) : _vm(vm) {
obj->location.y = ITE_ObjectTable[i].y; obj->location.y = ITE_ObjectTable[i].y;
obj->location.z = ITE_ObjectTable[i].z; obj->location.z = ITE_ObjectTable[i].z;
obj->disabled = false; obj->disabled = false;
obj->spritelistRn = 0;
} }
} else { } else {

View file

@ -216,6 +216,7 @@ typedef SortedList<CommonObjectDataPointer> CommonObjectOrderList;
class ObjectData: public CommonObjectData { class ObjectData: public CommonObjectData {
public: public:
uint16 interactBits; uint16 interactBits;
int32 spritelistRn;
}; };
class ActorData: public CommonObjectData { class ActorData: public CommonObjectData {

View file

@ -533,7 +533,6 @@ void Interface::removeFromInventory(int sprite) {
void Interface::drawInventory() { void Interface::drawInventory() {
if (_panelMode != kPanelMain) if (_panelMode != kPanelMain)
return; return;
/*
SURFACE *back_buf = _vm->_gfx->getBackBuffer(); SURFACE *back_buf = _vm->_gfx->getBackBuffer();
// TODO: Inventory scrolling // TODO: Inventory scrolling
@ -548,14 +547,14 @@ void Interface::drawInventory() {
Point drawPoint; Point drawPoint;
for (int i = 0; i < _inventoryCount; i++) { for (int i = 0; i < _inventoryCount; i++) {
if (_inventory[i] >= ARRAYSIZE(ObjectTable)) { if (!_vm->_actor->validObjId(_vm->_actor->objIndexToId(_inventory[i]))) {
continue; continue;
} }
drawPoint.x = x + col * width; drawPoint.x = x + col * width;
drawPoint.y = y + row * height; drawPoint.y = y + row * height;
_vm->_sprite->draw(back_buf, _vm->_sprite->_mainSprites, _vm->_sprite->draw(back_buf, _vm->_sprite->_mainSprites,
ObjectTable[_inventory[i]].spritelistRn, _vm->_actor->getObj(_vm->_actor->objIndexToId(_inventory[i]))->spritelistRn,
drawPoint, 256); drawPoint, 256);
if (++col >= _vm->getDisplayInfo().inventoryColumns) { if (++col >= _vm->getDisplayInfo().inventoryColumns) {
@ -564,7 +563,7 @@ void Interface::drawInventory() {
} }
col = 0; col = 0;
} }
}*/ }
} }
int Interface::inventoryTest(const Point& imousePt, int *ibutton) { int Interface::inventoryTest(const Point& imousePt, int *ibutton) {

View file

@ -186,7 +186,7 @@ void Script::sfTakeObject(SCRIPTFUNC_PARAMS) {
obj = _vm->_actor->getObj(objectId); obj = _vm->_actor->getObj(objectId);
if (obj->sceneNumber != ITE_SCENE_INV) { if (obj->sceneNumber != ITE_SCENE_INV) {
obj->sceneNumber = ITE_SCENE_INV; obj->sceneNumber = ITE_SCENE_INV;
//_vm->_interface->addToInventory(index); TODO: do it _vm->_interface->addToInventory(objectId);
} }
} }
@ -370,14 +370,12 @@ void Script::sfLockUser(SCRIPTFUNC_PARAMS) {
// Disables mouse input, etc. // Disables mouse input, etc.
void Script::sfPreDialog(SCRIPTFUNC_PARAMS) { void Script::sfPreDialog(SCRIPTFUNC_PARAMS) {
_vm->_interface->deactivate(); _vm->_interface->deactivate();
; // clear converse text _vm->_interface->converseClear();
if (_vm->_interface->isInMainMode()) if (_vm->_interface->isInMainMode())
_vm->_interface->setMode(kPanelConverse); _vm->_interface->setMode(kPanelConverse);
else else
; // display zero text _vm->_interface->converseDisplayText(0);
_vm->_interface->setMode(kPanelNull); _vm->_interface->setMode(kPanelNull);
debug(0, "STUB: SF_preDialog()");
} }
// Script function #13 (0x0D) // Script function #13 (0x0D)
@ -732,28 +730,27 @@ void Script::sfSceneEq(SCRIPTFUNC_PARAMS) {
// Script function #32 (0x20) // Script function #32 (0x20)
void Script::SF_dropObject(SCRIPTFUNC_PARAMS) { void Script::SF_dropObject(SCRIPTFUNC_PARAMS) {
error("SF_dropObject Not implemented"); uint16 obj_param = thread->pop();
uint16 sprite_param = thread->pop();
/* ScriptDataWord obj_param = thread->pop(); int16 x_param = thread->pop();
ScriptDataWord sprite_param = thread->pop(); int16 y_param = thread->pop();
ScriptDataWord x_param = thread->pop(); ObjectData *obj;
ScriptDataWord y_param = thread->pop();
int index = obj_param & 0x1FFF; int index = obj_param & 0x1FFF;
if (index >= ARRAYSIZE(ObjectTable)) { if (!_vm->_actor->validObjId(_vm->_actor->objIndexToId(index)))
return FAILURE; return;
}
if (ObjectTable[index].sceneIndex == -1) { obj = _vm->_actor->getObj(_vm->_actor->objIndexToId(index));
if (obj->sceneNumber == -1) {
_vm->_interface->removeFromInventory(index); _vm->_interface->removeFromInventory(index);
} }
ObjectTable[index].sceneIndex = _vm->_scene->currentSceneNumber(); obj->sceneNumber = _vm->_scene->currentSceneNumber();
ObjectTable[index].spritelistRn = 9 + sprite_param; obj->spritelistRn = 9 + sprite_param;
ObjectTable[index].x = x_param; obj->location.x = x_param;
ObjectTable[index].y = y_param; obj->location.y = y_param;
*/
} }
// Script function #33 (0x21) // Script function #33 (0x21)

View file

@ -217,7 +217,7 @@ void Sprite::drawClip(SURFACE *ds, Rect clip, const Point &spritePointer, int wi
} }
} }
int Sprite::draw(SURFACE *ds, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale) { int Sprite::draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale) {
const byte *spriteBuffer; const byte *spriteBuffer;
int width; int width;
int height; int height;

View file

@ -70,7 +70,7 @@ public:
Sprite(SagaEngine *vm); Sprite(SagaEngine *vm);
~Sprite(void); ~Sprite(void);
int loadList(int resourceId, SpriteList &spriteList); // load or append spriteList int loadList(int resourceId, SpriteList &spriteList); // load or append spriteList
int draw(SURFACE *ds, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale); int draw(SURFACE *ds, SpriteList &spriteList, int32 spriteNumber, const Point &screenCoord, int scale);
int drawOccluded(SURFACE *ds, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth); int drawOccluded(SURFACE *ds, SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, int depth);
bool hitTest(SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, const Point &testPoint); bool hitTest(SpriteList &spriteList, int spriteNumber, const Point &screenCoord, int scale, const Point &testPoint);
void getScaledSpriteBuffer(SpriteList &spriteList, int spriteNumber, int scale, int &width, int &height, int &xAlign, int &yAlign, const byte *&buffer); void getScaledSpriteBuffer(SpriteList &spriteList, int spriteNumber, int scale, int &width, int &height, int &xAlign, int &yAlign, const byte *&buffer);