From 902e1f06f2a8939f88fbe215045ee6d25c19b3da Mon Sep 17 00:00:00 2001 From: Strangerke Date: Sun, 2 Jan 2022 23:18:18 +0100 Subject: [PATCH] EFH: Fix an issue in displayAnimFrame, small refactoring, add some debug traces --- engines/efh/efh.cpp | 34 ++++++++++++++++++++++------------ engines/efh/efh.h | 5 +---- engines/efh/graphics.cpp | 4 ++-- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/engines/efh/efh.cpp b/engines/efh/efh.cpp index ad27c79c160..8bbf3431a0a 100644 --- a/engines/efh/efh.cpp +++ b/engines/efh/efh.cpp @@ -70,7 +70,7 @@ void UnkMapStruct::init() { } void UnkAnimStruct::init() { - field0 = field1 = field2 = field3 = 0; + memset(_field, 0, 4); } void AnimInfo::init() { @@ -206,7 +206,7 @@ EfhEngine::EfhEngine(OSystem *syst, const EfhGameDescription *gd) : Engine(syst) _word31E9E = false; _oldAnimImageSetId = -1; - _animImageSetId = 254; + _animImageSetId = 0xFE; _paletteTransformationConstant = 10; for (int i = 0; i < 12; ++i) @@ -585,29 +585,39 @@ void EfhEngine::initialize() { } void EfhEngine::readAnimInfo() { - debug("readAnimInfo"); + debugC(6, kDebugEngine, "readAnimInfo"); Common::String fileName = "animinfo"; uint8 animInfoBuf[9000]; memset(animInfoBuf, 0, 9000); uint8 *curPtr = animInfoBuf; - + readFileToBuffer(fileName, animInfoBuf); for (int i = 0; i < 100; ++i) { for (int id = 0; id < 15; ++id) { - _animInfo[i]._unkAnimArray[id].field0 = *curPtr++; - _animInfo[i]._unkAnimArray[id].field1 = *curPtr++; - _animInfo[i]._unkAnimArray[id].field2 = *curPtr++; - _animInfo[i]._unkAnimArray[id].field3 = *curPtr++; + _animInfo[i]._unkAnimArray[id]._field[0] = *curPtr++; + _animInfo[i]._unkAnimArray[id]._field[1] = *curPtr++; + _animInfo[i]._unkAnimArray[id]._field[2] = *curPtr++; + _animInfo[i]._unkAnimArray[id]._field[3] = *curPtr++; + + debugC(6, kDebugEngine, "%d %d %d %d", _animInfo[i]._unkAnimArray[id]._field[0], _animInfo[i]._unkAnimArray[id]._field[1], _animInfo[i]._unkAnimArray[id]._field[2], _animInfo[i]._unkAnimArray[id]._field[3]); } - for (int id = 0; id < 10; ++id) + Common::String debugStr = ""; + for (int id = 0; id < 10; ++id) { _animInfo[i]._field3C_startY[id] = *curPtr++; + debugStr += Common::String::format("%d ", _animInfo[i]._field3C_startY[id]); + } + debugC(6, kDebugEngine, "%s", debugStr.c_str()); + debugStr = ""; for (int id = 0; id < 10; ++id) { _animInfo[i]._field46_startX[id] = READ_LE_INT16(curPtr); curPtr += 2; + debugStr += Common::String::format("%d ", _animInfo[i]._field46_startX[id]); } + debugC(6, kDebugEngine, "%s", debugStr.c_str()); + debugC(6, kDebugEngine, "---------"); } } @@ -1069,10 +1079,10 @@ void EfhEngine::loadMapArrays() { } void EfhEngine::saveAnimImageSetId() { - debug("saveAnimImageSetId"); + debugC(6, kDebugEngine, "saveAnimImageSetId"); _oldAnimImageSetId = _animImageSetId; - _animImageSetId = 255; + _animImageSetId = 0xFF; } int16 EfhEngine::getEquipmentDefense(int16 charId, bool flag) { @@ -6765,7 +6775,7 @@ bool EfhEngine::sub16E14() { } void EfhEngine::loadImageSetToTileBank(int16 tileBankId, int16 imageSetId) { - debug("loadImageSetToTileBank %d %d", tileBankId, imageSetId); + debugC(3, kDebugEngine, "loadImageSetToTileBank %d %d", tileBankId, imageSetId); // TODO: all the values of titleBankId and imageSetId are hardcoded. When all the calls are implemented, fix the values to avoid to have to decrease them int16 bankId = tileBankId - 1; diff --git a/engines/efh/efh.h b/engines/efh/efh.h index 4374f04d223..cdeddbc228a 100644 --- a/engines/efh/efh.h +++ b/engines/efh/efh.h @@ -98,10 +98,7 @@ struct UnkMapStruct { }; struct UnkAnimStruct { - uint8 field0; - uint8 field1; - uint8 field2; - uint8 field3; + int8 _field[4]; void init(); }; diff --git a/engines/efh/graphics.cpp b/engines/efh/graphics.cpp index 2bb1a426fe2..9566d95ffb8 100644 --- a/engines/efh/graphics.cpp +++ b/engines/efh/graphics.cpp @@ -71,8 +71,8 @@ void EfhEngine::displayAnimFrame() { displayRawDataAtPos(_portraitSubFilesArray[0], 16, 8); for (int i = 0; i < 4; ++i) { - int16 var2 = _animInfo[_animImageSetId]._unkAnimArray[_unkAnimRelatedIndex].field0; - if (var2 == 0xFF) + int8 var2 = _animInfo[_animImageSetId]._unkAnimArray[_unkAnimRelatedIndex]._field[i]; + if (var2 == -1) continue; displayRawDataAtPos(_portraitSubFilesArray[var2 + 1], _animInfo[_animImageSetId]._field46_startX[var2] + 16, _animInfo[_animImageSetId]._field3C_startY[var2] + 8); }