void KyraEngine_MR::updateCharAnimFrame(int *table) { ++_mainCharacter.animFrame; int facing = _mainCharacter.facing; if (table) { if (table[0] != table[-1] && table[1] == table[-1]) { facing = getOppositeFacingDirection(table[-1]); table[0] = table[-1]; } } if (facing) { if (facing == 7 || facing == 1) { if (_characterAnimTable[0] > 2) facing = 0; memset(_characterAnimTable, 0, sizeof(_characterAnimTable)); } else if (facing == 4) { ++_characterAnimTable[1]; } else if (facing == 5 || facing == 3) { if (_characterAnimTable[1] > 2) facing = 4; memset(_characterAnimTable, 0, sizeof(_characterAnimTable)); } } else { ++_characterAnimTable[0]; } switch (facing) { case 0: if (_mainCharacter.animFrame < 79 || _mainCharacter.animFrame > 86) _mainCharacter.animFrame = 79; break; case 1: case 2: case 3: if (_mainCharacter.animFrame < 71 || _mainCharacter.animFrame > 78) _mainCharacter.animFrame = 71; break; case 4: if (_mainCharacter.animFrame < 55 || _mainCharacter.animFrame > 62) _mainCharacter.animFrame = 55; break; case 5: case 6: case 7: if (_mainCharacter.animFrame < 63 || _mainCharacter.animFrame > 70) _mainCharacter.animFrame = 63; break; default: break; } updateCharacterAnim(0); }
int KyraEngine_HoF::trySceneChange(int *moveTable, int unk1, int updateChar) { bool running = true; bool unkFlag = false; int8 updateType = -1; int changedScene = 0; const int *moveTableStart = moveTable; _unk4 = 0; while (running && !shouldQuit()) { if (*moveTable >= 0 && *moveTable <= 7) { _mainCharacter.facing = getOppositeFacingDirection(*moveTable); unkFlag = true; } else { if (*moveTable == 8) { running = false; } else { ++moveTable; unkFlag = false; } } if (checkSceneChange()) { running = false; changedScene = 1; } if (unk1) { if (skipFlag()) { resetSkipFlag(false); running = false; _unk4 = 1; } } if (!unkFlag || !running) continue; int ret = 0; if (moveTable == moveTableStart || moveTable[1] == 8) ret = updateCharPos(0); else ret = updateCharPos(moveTable); if (ret) ++moveTable; ++updateType; if (!updateType) { update(); } else if (updateType == 1) { refreshAnimObjectsIfNeed(); updateType = -1; } delay(10); } if (updateChar) _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; updateCharacterAnim(0); refreshAnimObjectsIfNeed(); return changedScene; }