void KyraEngine_HoF::initSceneScreen(int unk1) { if (_unkSceneScreenFlag1) { _screen->copyRegion(0, 0, 0, 0, 320, 144, 2, 0, Screen::CR_NO_P_CHECK); return; } if (_noScriptEnter) { _screen->getPalette(0).fill(0, 128, 0); _screen->setScreenPalette(_screen->getPalette(0)); } _screen->copyRegion(0, 0, 0, 0, 320, 144, 2, 0, Screen::CR_NO_P_CHECK); if (_noScriptEnter) { _screen->setScreenPalette(_screen->getPalette(1)); _screen->getPalette(0).copy(_screen->getPalette(1), 0, 128); } updateCharPal(0); _emc->start(&_sceneScriptState, 3); _sceneScriptState.regs[5] = unk1; while (_emc->isValid(&_sceneScriptState)) _emc->run(&_sceneScriptState); }
void KyraEngine_HoF::updateCharacterAnim(int) { Character *c = &_mainCharacter; AnimObj *animState = _animObjects; animState->needRefresh = 1; animState->specialRefresh = 1; if (c->facing >= 1 && c->facing <= 3) animState->flags |= 1; else if (c->facing >= 5 && c->facing <= 7) animState->flags &= ~1; animState->xPos2 = animState->xPos1 = c->x1; animState->yPos2 = animState->yPos1 = c->y1; animState->shapePtr = getShapePtr(c->animFrame); animState->shapeIndex1 = animState->shapeIndex2 = c->animFrame; int xAdd = _shapeDescTable[c->animFrame-9].xAdd; int yAdd = _shapeDescTable[c->animFrame-9].yAdd; _charScale = getScale(c->x1, c->y1); animState->xPos2 += (xAdd * _charScale) >> 8; animState->yPos2 += (yAdd * _charScale) >> 8; animState->width2 = 8; animState->height2 = 10; _animList = deleteAnimListEntry(_animList, animState); if (_animList) _animList = addToAnimListSorted(_animList, animState); else _animList = initAnimList(_animList, animState); updateCharPal(1); }
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::updateCharacterAnim(int charId) { AnimObj *obj = &_animObjects[0]; obj->needRefresh = true; obj->flags &= ~1; obj->xPos1 = _mainCharacter.x1; obj->yPos1 = _mainCharacter.y1; obj->shapePtr = getShapePtr(_mainCharacter.animFrame); obj->shapeIndex1 = obj->shapeIndex2 = _mainCharacter.animFrame; int shapeOffsetX = 0, shapeOffsetY = 0; if (_mainCharacter.animFrame >= 50 && _mainCharacter.animFrame <= 87) { shapeOffsetX = _malcolmShapeXOffset; shapeOffsetY = _malcolmShapeYOffset; } else { shapeOffsetX = _animShapeXAdd; shapeOffsetY = _animShapeYAdd; } obj->xPos2 = _mainCharacter.x1; obj->yPos2 = _mainCharacter.y1; _charScale = getScale(_mainCharacter.x1, _mainCharacter.y1); obj->xPos2 += (shapeOffsetX * _charScale) >> 8; obj->yPos2 += (shapeOffsetY * _charScale) >> 8; _mainCharacter.x3 = _mainCharacter.x1 - (_charScale >> 4) - 1; _mainCharacter.y3 = _mainCharacter.y1 - (_charScale >> 6) - 1; if (_charBackUpWidth2 == -1) { obj->width2 = 4; obj->height2 = 10; } for (int i = 1; i <= 16; ++i) { if (_animObjects[i].enabled && _animObjects[i].specialRefresh) _animObjects[i].needRefresh = true; } _animList = deleteAnimListEntry(_animList, obj); if (_animList) _animList = addToAnimListSorted(_animList, obj); else _animList = initAnimList(_animList, obj); if (!_loadingState) updateCharPal(1); }