void KyraEngine_HoF::enterNewSceneUnk2(int unk1) { _savedMouseState = -1; if (_flags.isTalkie) { if (_mainCharX == -1 && _mainCharY == -1 && _mainCharacter.sceneId != 61 && !queryGameFlag(0x1F1) && !queryGameFlag(0x192) && !queryGameFlag(0x193) && _mainCharacter.sceneId != 70 && !queryGameFlag(0x159) && _mainCharacter.sceneId != 37) { _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; updateCharacterAnim(0); refreshAnimObjectsIfNeed(); } } else if (_mainCharX != -1 && _mainCharY != -1) { if (_characterFrameTable[_mainCharacter.facing] == 25) _mainCharacter.facing = 5; _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; updateCharacterAnim(0); refreshAnimObjectsIfNeed(); } if (!unk1) { runSceneScript4(0); zanthSceneStartupChat(); } _unk4 = 0; _savedMouseState = -1; }
int KyraEngine_MR::o3_addItemToCurScene(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_addItemToCurScene(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2)); const uint16 item = stackPos(0); int x = stackPos(1); int y = stackPos(2); int itemSlot = findFreeItem(); if (x < 20) x = 20; else if (x > 299) x = 299; if (y < 18) y = 18; else if (y > 187) y = 187; if (itemSlot >= 0) { _itemList[itemSlot].x = x; _itemList[itemSlot].y = y; _itemList[itemSlot].id = item; _itemList[itemSlot].sceneId = _mainCharacter.sceneId; addItemToAnimList(itemSlot); refreshAnimObjectsIfNeed(); } return itemSlot; }
int KyraEngine_MR::o3_setCharacterAnimFrameFromFacing(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_setCharacterAnimFrameFromFacing(%p) ()", (const void *)script); updateCharPal(0); _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; updateCharacterAnim(0); refreshAnimObjectsIfNeed(); return 0; }
void KyraEngine_MR::makeCharFacingMouse() { if (_mainCharacter.x1 > _mouseX) _mainCharacter.facing = 5; else _mainCharacter.facing = 3; _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; updateCharacterAnim(0); refreshAnimObjectsIfNeed(); }
void KyraEngine_MR::update() { updateInput(); refreshAnimObjectsIfNeed(); updateMouse(); updateSpecialSceneScripts(); updateCommandLine(); updateItemAnimations(); _screen->updateScreen(); }
void KyraEngine_HoF::update() { updateInput(); refreshAnimObjectsIfNeed(); updateMouse(); updateSpecialSceneScripts(); _timer->update(); updateItemAnimations(); updateInvWsa(); fadeMessagePalette(); _screen->updateScreen(); }
void KyraEngine_MR::showGoodConscience() { if (_goodConscienceShown) return; _goodConscienceShown = true; ++_goodConscienceAnim; _goodConscienceAnim %= 5; setNextIdleAnimTimer(); _goodConsciencePosition = (_mainCharacter.x1 <= 160); if (_badConscienceShown) _goodConsciencePosition = !_badConsciencePosition; int anim = _goodConscienceAnim + (_goodConsciencePosition ? 0 : 5); TalkObject &talkObject = _talkObjectList[87]; if (_goodConsciencePosition) talkObject.x = 290; else talkObject.x = 30; talkObject.y = 30; static const char *const animFilenames[] = { "STUFL00.WSA", "STUFL02.WSA", "STUFL04.WSA", "STUFL03.WSA", "STUFL01.WSA", "STUFR00.WSA", "STUFR02.WSA", "STUFR04.WSA", "STUFR03.WSA", "STUFR01.WSA" }; setupSceneAnimObject(0x0F, 9, 0, 187, -1, -1, -1, -1, 0, 0, 0, -1, animFilenames[anim]); for (uint i = 0; i <= _goodConscienceFrameTable[_goodConscienceAnim]; ++i) { if (i == 10) snd_playSoundEffect(0x7F, 0xC8); updateSceneAnim(0x0F, i); delay(2*_tickLength, true); } if (_mainCharacter.animFrame < 50 || _mainCharacter.animFrame > 87) return; if (_mainCharacter.y1 == -1 || (_mainCharacter.x1 != -1 && _mainCharacter.animFrame == 87) || _mainCharacter.animFrame == 87) { _mainCharacter.animFrame = 87; } else { if (_goodConsciencePosition) _mainCharacter.facing = 3; else _mainCharacter.facing = 5; _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; } updateCharacterAnim(0); refreshAnimObjectsIfNeed(); }
void KyraEngine_MR::enterNewSceneUnk2(int unk1) { _savedMouseState = -1; if (_mainCharX == -1 && _mainCharY == -1 && !unk1) { _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; updateCharacterAnim(0); refreshAnimObjectsIfNeed(); } if (!unk1) { runSceneScript4(0); malcolmSceneStartupChat(); } _unk4 = 0; _savedMouseState = -1; }
void KyraEngine_v2::deleteItemAnimEntry(int item) { assert(item < _itemListSize); AnimObj *animObj = _animItems + item; restorePage3(); animObj->shapePtr = 0; animObj->shapeIndex1 = 0xFFFF; animObj->shapeIndex2 = 0xFFFF; animObj->needRefresh = 1; refreshAnimObjectsIfNeed(); animObj->enabled = 0; _animList = deleteAnimListEntry(_animList, animObj); }
int KyraEngine_MR::o3_refreshCharacter(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_MR::o3_refreshCharacter(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2)); const int frame = stackPos(0); const int facing = stackPos(1); const bool updateNeed = stackPos(2) != 0; if (facing >= 0) _mainCharacter.facing = facing; if (frame >= 0 && frame != 87) _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; else _mainCharacter.animFrame = 87; updateCharacterAnim(0); if (updateNeed) refreshAnimObjectsIfNeed(); return 0; }
int KyraEngine_MR::o3_drawSceneShape(EMCState *script) { debugC(3, kDebugLevelScriptFuncs, "KyraEngine_v2::o3_drawSceneShape(%p) (%d, %d)", (const void *)script, stackPos(0), stackPos(1)); int shape = stackPos(0); int flag = (stackPos(1) != 0) ? 1 : 0; restorePage3(); const int x = _sceneShapeDescs[shape].drawX; const int y = _sceneShapeDescs[shape].drawY; _screen->drawShape(2, _sceneShapes[shape], x, y, 2, flag); _screen->copyRegionToBuffer(3, 0, 0, 320, 200, _gamePlayBuffer); _screen->drawShape(0, _sceneShapes[shape], x, y, 2, flag); flagAnimObjsForRefresh(); refreshAnimObjectsIfNeed(); return 0; }
void KyraEngine_MR::showBadConscience() { if (_badConscienceShown) return; _badConscienceShown = true; _badConscienceAnim = _rnd.getRandomNumberRng(0, 2); if (_currentChapter == 2) _badConscienceAnim = 5; else if (_currentChapter == 3) _badConscienceAnim = 3; else if (_currentChapter == 4 && _rnd.getRandomNumberRng(1, 100) <= 25) _badConscienceAnim = 6; else if (_currentChapter == 5 && _rnd.getRandomNumberRng(1, 100) <= 25) _badConscienceAnim = 7; if (_characterShapeFile == 9) _badConscienceAnim = 4; _badConsciencePosition = (_mainCharacter.x1 <= 160); if (_goodConscienceShown) _badConsciencePosition = !_goodConsciencePosition; int anim = _badConscienceAnim + (_badConsciencePosition ? 0 : 8); TalkObject &talkObject = _talkObjectList[1]; if (_badConsciencePosition) talkObject.x = 290; else talkObject.x = 30; talkObject.y = 30; static const char *const animFilenames[] = { "GUNFL00.WSA", "GUNFL01.WSA", "GUNFL02.WSA", "GUNFL03.WSA", "GUNFL04.WSA", "GUNFL05.WSA", "GUNFL06.WSA", "GUNFL07.WSA", "GUNFR00.WSA", "GUNFR01.WSA", "GUNFR02.WSA", "GUNFR03.WSA", "GUNFR04.WSA", "GUNFR05.WSA", "GUNFR06.WSA", "GUNFR07.WSA" }; setupSceneAnimObject(0x0E, 9, 0, 187, -1, -1, -1, -1, 0, 0, 0, -1, animFilenames[anim]); for (uint i = 0; i <= _badConscienceFrameTable[_badConscienceAnim]; ++i) { if (i == 8) snd_playSoundEffect(0x1B, 0xC8); updateSceneAnim(0x0E, i); delay(3*_tickLength, true); } if (_mainCharacter.animFrame < 50 || _mainCharacter.animFrame > 87) return; if (_mainCharacter.y1 == -1 || (_mainCharacter.x1 != -1 && _mainCharacter.animFrame == 87) || _mainCharacter.animFrame == 87) { _mainCharacter.animFrame = 87; } else { if (_badConsciencePosition) _mainCharacter.facing = 3; else _mainCharacter.facing = 5; _mainCharacter.animFrame = _characterFrameTable[_mainCharacter.facing]; } updateCharacterAnim(0); refreshAnimObjectsIfNeed(); }
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; }