diff options
-rw-r--r-- | sword2/build_display.cpp | 15 | ||||
-rw-r--r-- | sword2/debug.cpp | 10 | ||||
-rw-r--r-- | sword2/events.cpp | 5 | ||||
-rw-r--r-- | sword2/layers.cpp | 3 | ||||
-rw-r--r-- | sword2/mouse.cpp | 31 | ||||
-rw-r--r-- | sword2/protocol.cpp | 17 | ||||
-rw-r--r-- | sword2/sound.cpp | 4 | ||||
-rw-r--r-- | sword2/speech.cpp | 13 | ||||
-rw-r--r-- | sword2/sword2.h | 2 | ||||
-rw-r--r-- | sword2/walker.cpp | 12 |
10 files changed, 68 insertions, 44 deletions
diff --git a/sword2/build_display.cpp b/sword2/build_display.cpp index 1072960708..9f424b9bce 100644 --- a/sword2/build_display.cpp +++ b/sword2/build_display.cpp @@ -282,10 +282,12 @@ void Sword2Engine::processLayer(byte *file, uint32 layer_number) { uint32 current_layer_area = layer_head->width * layer_head->height; if (current_layer_area > _largestLayerArea) { + byte buf[NAME_LEN]; + _largestLayerArea = current_layer_area; sprintf(_largestLayerInfo, "largest layer: %s layer(%d) is %dx%d", - fetchObjectName(_thisScreen.background_layer_id), + fetchObjectName(_thisScreen.background_layer_id, buf), layer_number, layer_head->width, layer_head->height); } @@ -366,10 +368,12 @@ void Sword2Engine::processImage(BuildUnit *build_unit) { uint32 current_sprite_area = frame_head->width * frame_head->height; if (current_sprite_area > _largestSpriteArea) { + byte buf[NAME_LEN]; + _largestSpriteArea = current_sprite_area; sprintf(_largestSpriteInfo, "largest sprite: %s frame(%d) is %dx%d", - fetchObjectName(build_unit->anim_resource), + fetchObjectName(build_unit->anim_resource, buf), build_unit->anim_pc, frame_head->width, frame_head->height); @@ -398,10 +402,13 @@ void Sword2Engine::processImage(BuildUnit *build_unit) { } uint32 rv = _graphics->drawSprite(&spriteInfo); - if (rv) + if (rv) { + byte buf[NAME_LEN]; + error("Driver Error %.8x with sprite %s (%d) in processImage", - rv, fetchObjectName(build_unit->anim_resource), + rv, fetchObjectName(build_unit->anim_resource, buf), build_unit->anim_resource); + } // release the anim resource _resman->closeResource(build_unit->anim_resource); diff --git a/sword2/debug.cpp b/sword2/debug.cpp index 3c41f34655..da61b81b43 100644 --- a/sword2/debug.cpp +++ b/sword2/debug.cpp @@ -158,6 +158,8 @@ void Debugger::buildDebugText(void) { // general debug info if (_displayDebugText) { + byte name[NAME_LEN]; + /* // CD in use sprintf(buf, "CD-%d", currentCD); @@ -171,7 +173,7 @@ void Debugger::buildDebugText(void) { Logic::_scriptVars[MOUSE_X], Logic::_scriptVars[MOUSE_Y], Logic::_scriptVars[CLICKED_ID], - _vm->fetchObjectName(Logic::_scriptVars[CLICKED_ID])); + _vm->fetchObjectName(Logic::_scriptVars[CLICKED_ID], name)); else sprintf(buf, "last click at %d,%d (---)", Logic::_scriptVars[MOUSE_X], @@ -184,7 +186,7 @@ void Debugger::buildDebugText(void) { _vm->_input->_mouseX + _vm->_thisScreen.scroll_offset_x, _vm->_input->_mouseY + _vm->_thisScreen.scroll_offset_y, _vm->_mouseTouching, - _vm->fetchObjectName(_vm->_mouseTouching)); + _vm->fetchObjectName(_vm->_mouseTouching, name)); else sprintf(buf, "mouse %d,%d (not touching)", _vm->_input->_mouseX + _vm->_thisScreen.scroll_offset_x, @@ -199,7 +201,7 @@ void Debugger::buildDebugText(void) { sprintf(buf, "player %d,%d %s (%d) #%d/%d", _vm->_thisScreen.player_feet_x, _vm->_thisScreen.player_feet_y, - _vm->fetchObjectName(_playerGraphic.anim_resource), + _vm->fetchObjectName(_playerGraphic.anim_resource, name), _playerGraphic.anim_resource, _playerGraphic.anim_pc, _playerGraphicNoFrames); @@ -265,7 +267,7 @@ void Debugger::buildDebugText(void) { if (_vm->_logic->_speechScriptWaiting) { sprintf(buf, "script waiting for %s (%d)", - _vm->fetchObjectName(_vm->_logic->_speechScriptWaiting), + _vm->fetchObjectName(_vm->_logic->_speechScriptWaiting, name), _vm->_logic->_speechScriptWaiting); makeDebugTextBlock(buf, 0, 90); } diff --git a/sword2/events.cpp b/sword2/events.cpp index f567118c5c..e318529efb 100644 --- a/sword2/events.cpp +++ b/sword2/events.cpp @@ -194,11 +194,12 @@ void Logic::printEventList(void) { for (uint32 i = 0; i < MAX_events; i++) { if (_eventList[i].id) { + byte buf[NAME_LEN]; uint32 target = _eventList[i].id; uint32 script = _eventList[i].interact_id; - Debug_Printf("slot %2d: id = %s (%d)\n", i, _vm->fetchObjectName(target), target); - Debug_Printf(" script = %s (%d) pos %d\n", _vm->fetchObjectName(script / 65536), script / 65536, script % 65536); + Debug_Printf("slot %2d: id = %s (%d)\n", i, _vm->fetchObjectName(target, buf), target); + Debug_Printf(" script = %s (%d) pos %d\n", _vm->fetchObjectName(script / 65536, buf), script / 65536, script % 65536); } } } diff --git a/sword2/layers.cpp b/sword2/layers.cpp index ad2cc47d4a..b5070e7b32 100644 --- a/sword2/layers.cpp +++ b/sword2/layers.cpp @@ -50,10 +50,11 @@ int32 Logic::fnInitBackground(int32 *params) { */ int32 Sword2Engine::initBackground(int32 res, int32 new_palette) { + byte buf[NAME_LEN]; int i; assert(res); - debug(1, "CHANGED TO LOCATION \"%s\"", fetchObjectName(res)); + debug(1, "CHANGED TO LOCATION \"%s\"", fetchObjectName(res, buf)); // The resources age every time a new room is entered. _resman->passTime(); diff --git a/sword2/mouse.cpp b/sword2/mouse.cpp index b9e837cd0d..ad8286b30f 100644 --- a/sword2/mouse.cpp +++ b/sword2/mouse.cpp @@ -258,6 +258,7 @@ void Sword2Engine::systemMenuMouse(void) { } void Sword2Engine::dragMouse(void) { + byte buf1[NAME_LEN], buf2[NAME_LEN]; MouseEvent *me; int hit; @@ -329,8 +330,8 @@ void Sword2Engine::dragMouse(void) { _logic->setPlayerActionEvent(CUR_PLAYER_ID, _mouseTouching); debug(2, "Used \"%s\" on \"%s\"", - fetchObjectName(Logic::_scriptVars[OBJECT_HELD]), - fetchObjectName(Logic::_scriptVars[CLICKED_ID])); + fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf1), + fetchObjectName(Logic::_scriptVars[CLICKED_ID], buf2)); // Hide menu - back to normal menu mode @@ -370,8 +371,8 @@ void Sword2Engine::dragMouse(void) { noHuman(); debug(2, "Used \"%s\" on \"%s\"", - fetchObjectName(Logic::_scriptVars[OBJECT_HELD]), - fetchObjectName(Logic::_scriptVars[COMBINE_BASE])); + fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf1), + fetchObjectName(Logic::_scriptVars[COMBINE_BASE], buf2)); } // Refresh the menu @@ -380,6 +381,7 @@ void Sword2Engine::dragMouse(void) { } void Sword2Engine::menuMouse(void) { + byte buf[NAME_LEN]; MouseEvent *me; int hit; @@ -427,7 +429,7 @@ void Sword2Engine::menuMouse(void) { noHuman(); debug(2, "Right-click on \"%s\" icon", - fetchObjectName(Logic::_scriptVars[OBJECT_HELD])); + fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf)); return; } @@ -455,7 +457,7 @@ void Sword2Engine::menuMouse(void) { setLuggage(_masterMenuList[hit].luggage_resource); debug(2, "Left-clicked on \"%s\" icon - switch to drag mode", - fetchObjectName(Logic::_scriptVars[OBJECT_HELD])); + fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf)); } } @@ -664,16 +666,18 @@ void Sword2Engine::normalMouse(void) { } else _logic->setPlayerActionEvent(CUR_PLAYER_ID, _mouseTouching); + byte buf1[NAME_LEN], buf2[NAME_LEN]; + if (Logic::_scriptVars[OBJECT_HELD]) debug(2, "Used \"%s\" on \"%s\"", - fetchObjectName(Logic::_scriptVars[OBJECT_HELD]), - fetchObjectName(Logic::_scriptVars[CLICKED_ID])); + fetchObjectName(Logic::_scriptVars[OBJECT_HELD], buf1), + fetchObjectName(Logic::_scriptVars[CLICKED_ID], buf2)); else if (Logic::_scriptVars[LEFT_BUTTON]) debug(2, "Left-clicked on \"%s\"", - fetchObjectName(Logic::_scriptVars[CLICKED_ID])); + fetchObjectName(Logic::_scriptVars[CLICKED_ID], buf1)); else // RIGHT BUTTON debug(2, "Right-clicked on \"%s\"", - fetchObjectName(Logic::_scriptVars[CLICKED_ID])); + fetchObjectName(Logic::_scriptVars[CLICKED_ID], buf1)); } } @@ -731,8 +735,11 @@ void Sword2Engine::mouseOnOff(void) { if (Logic::_scriptVars[OBJECT_HELD]) { setLuggage(_currentLuggageResource); } - } else - error("ERROR: mouse.pointer==0 for object %d (%s) - update logic script!", _mouseTouching, fetchObjectName(_mouseTouching)); + } else { + byte buf[NAME_LEN]; + + error("ERROR: mouse.pointer==0 for object %d (%s) - update logic script!", _mouseTouching, fetchObjectName(_mouseTouching, buf)); + } } else if (_oldMouseTouching && !_mouseTouching) { // the cursor has moved off something - reset cursor to // normal pointer diff --git a/sword2/protocol.cpp b/sword2/protocol.cpp index 4f7f2350fc..e928fd0e0a 100644 --- a/sword2/protocol.cpp +++ b/sword2/protocol.cpp @@ -208,19 +208,12 @@ bool Sword2Engine::checkTextLine(byte *file, uint32 text_line) { return text_line < text_header->noOfLines; } -byte *Sword2Engine::fetchObjectName(int32 resourceId) { - StandardHeader *header; - - header = (StandardHeader *) _resman->openResource(resourceId); - _resman->closeResource(resourceId); - - // Note this pointer is no longer valid, but it should be ok until - // another resource is opened! +byte *Sword2Engine::fetchObjectName(int32 resourceId, byte *buf) { + StandardHeader *header = (StandardHeader *) _resman->openResource(resourceId); - // FIXME: I don't like the sound of this at all. Though thanks to the - // resource caching, at least it will still point to malloced memory. - - return header->name; + memcpy(buf, header->name, NAME_LEN); + _resman->closeResource(resourceId); + return buf; } } // End of namespace Sword2 diff --git a/sword2/sound.cpp b/sword2/sound.cpp index b197625c90..fe97d44437 100644 --- a/sword2/sound.cpp +++ b/sword2/sound.cpp @@ -186,7 +186,9 @@ int32 Logic::fnPlayFx(int32 *params) { break; } - debug(0, "SFX (sample=\"%s\", vol=%d, pan=%d, delay=%d, type=%s)", _vm->fetchObjectName(params[0]), params[3], params[4], params[2], type); + byte buf[NAME_LEN]; + + debug(0, "SFX (sample=\"%s\", vol=%d, pan=%d, delay=%d, type=%s)", _vm->fetchObjectName(params[0], buf), params[3], params[4], params[2], type); } while (j < FXQ_LENGTH && _vm->_fxQueue[j].resource != 0) diff --git a/sword2/speech.cpp b/sword2/speech.cpp index 174ef3b976..86f28debf2 100644 --- a/sword2/speech.cpp +++ b/sword2/speech.cpp @@ -208,9 +208,11 @@ int32 Logic::fnChoose(int32 *params) { debug(5, "Icons available:"); + byte buf[NAME_LEN]; + // change icons for (i = 0; i < _scriptVars[IN_SUBJECT]; i++) { - debug(5, "%s", _vm->fetchObjectName(_subjectList[i].res)); + debug(5, "%s", _vm->fetchObjectName(_subjectList[i].res, buf)); // change all others to grey if (i != (uint32) hit) { @@ -220,7 +222,7 @@ int32 Logic::fnChoose(int32 *params) { } } - debug(2, "Selected: %s", _vm->fetchObjectName(_subjectList[hit].res)); + debug(2, "Selected: %s", _vm->fetchObjectName(_subjectList[hit].res, buf)); // this is our looping flag _choosing = false; @@ -982,8 +984,11 @@ int32 Logic::fnISpeak(int32 *params) { if (_scriptVars[PLAYER_ID] != CUR_PLAYER_ID) debug(5, "(%d) Nico: %s", _officialTextNumber, text + 2); - else - debug(5, "(%d) %s: %s", _officialTextNumber, _vm->fetchObjectName(_scriptVars[ID]), text + 2); + else { + byte buf[NAME_LEN]; + + debug(5, "(%d) %s: %s", _officialTextNumber, _vm->fetchObjectName(_scriptVars[ID], buf), text + 2); + } // Set up the speech animation diff --git a/sword2/sword2.h b/sword2/sword2.h index 64d90ea2ce..b256557f01 100644 --- a/sword2/sword2.h +++ b/sword2/sword2.h @@ -275,7 +275,7 @@ public: byte *fetchTextLine(byte *file, uint32 text_line); bool checkTextLine(byte *file, uint32 text_line); byte *fetchPaletteMatchTable(byte *screenFile); - byte *fetchObjectName(int32 resourceId); + byte *fetchObjectName(int32 resourceId, byte *buf); // savegame file header diff --git a/sword2/walker.cpp b/sword2/walker.cpp index 49312844ae..4aab1b4173 100644 --- a/sword2/walker.cpp +++ b/sword2/walker.cpp @@ -243,11 +243,13 @@ int32 Logic::fnWalkToAnim(int32 *params) { // coords (which should be set beforehand in the script). if (pars[4] == 0 && pars[5] == 0) { + byte buf[NAME_LEN]; + pars[4] = _standbyX; pars[5] = _standbyY; pars[6] = _standbyDir; - debug(3, "WARNING: fnWalkToAnim(%s) used standby coords", _vm->fetchObjectName(params[4])); + debug(3, "WARNING: fnWalkToAnim(%s) used standby coords", _vm->fetchObjectName(params[4], buf)); } assert(pars[6] >= 0 && pars[6] <= 7); @@ -374,11 +376,13 @@ int32 Logic::fnStandAfterAnim(int32 *params) { // should be set beforehand in the script) if (pars[2] == 0 && pars[3] == 0) { + byte buf[NAME_LEN]; + pars[2] = _standbyX; pars[3] = _standbyY; pars[4] = _standbyDir; - debug(3, "WARNING: fnStandAfterAnim(%s) used standby coords", _vm->fetchObjectName(params[2])); + debug(3, "WARNING: fnStandAfterAnim(%s) used standby coords", _vm->fetchObjectName(params[2], buf)); } assert(pars[4] >= 0 && pars[4] <= 7); @@ -412,11 +416,13 @@ int32 Logic::fnStandAtAnim(int32 *params) { // be set beforehand in the script) if (pars[2] == 0 && pars[3] == 0) { + byte buf[NAME_LEN]; + pars[2] = _standbyX; pars[3] = _standbyY; pars[4] = _standbyDir; - debug(3, "WARNING: fnStandAtAnim(%s) used standby coords", _vm->fetchObjectName(params[2])); + debug(3, "WARNING: fnStandAtAnim(%s) used standby coords", _vm->fetchObjectName(params[2], buf)); } assert(pars[4] >= 0 && pars[4] <= 7); |