SpeakerType = { NONE = 0, MAN = 1, WOMAN = 2, BOY = 3, GIRL = 4, NONHUMAN = 5 } Direction = { UP = 0, UP_RIGHT = 1, RIGHT = 2, DOWN_RIGHT = 3, DOWN = 4, DOWN_LEFT = 5, LEFT = 6, UP_LEFT = 7 } CharacterState = { STILL = 0, WALKING = 1, CROUCHING = 2, RUNNING = 3 } function StartCutscene() local playerId = getPlayerSprite() local playerSprite = getSprite(playerId) playerSprite.controllable = false character():halt(playerId) end function DisplayMessage(msg, name, type) message():displayMessage(msg, name, type) end function ShowChoice(one, two) message():showChoice(one, two) end function GetChoiceSelection() return message():getChoiceSelection() end function WaitForEndOfMessage() while (message().isMessageActive) do coroutine.yield() end end function HideCutsceneBars() WaitForEndOfMessage() message():hideCutsceneBars() local playerId = getPlayerSprite() local playerSprite = getSprite(playerId) playerSprite.controllable = true end function SetDirection(spriteName, dir) local spriteId = getSpriteByAlias(spriteName) animation():setSpriteDirection(spriteId, dir) end function SetAnimation(spriteName, animName) local spriteId = getSpriteByAlias(spriteName) animation():setSpriteAnimation(spriteId, animName) end function WaitForAnimation(spriteName) local spriteId = getSpriteByAlias(spriteName) local sprite = getSprite(spriteId) repeat coroutine.yield() until sprite.animFinished end function PlaySound(filename) mixer():playSound("../res/sfx/" .. filename) end function LoopSound(filename) return mixer():loopSound("../res/sfx/" .. filename) end function StopSound(soundId) mixer():stopChannel(soundId) end function FadeToBlack(length) local progress = 0.0 while progress < length do progress = progress + coroutine.yield() setFadeoutProgress(progress / length) end setFadeoutProgress(1.0) end function RemoveFadeout(length) local progress = length while progress > 0 do progress = progress - coroutine.yield() setFadeoutProgress(progress / length) end setFadeoutProgress(0.0) end function SetPartyDirection(spriteId, direction) animation():setSpriteDirection(spriteId, direction) local sprite = getSprite(spriteId) for i=1,#sprite.followers do animation():setSpriteDirection(sprite.followers[i], direction) end end function ChangeMap(map, warp) local playerId = getPlayerSprite() local playerSprite = getSprite(playerId) local direction = playerSprite.dir local oldState = playerSprite.characterState playerSprite.controllable = false FadeToBlack(150) loadMap(map, warp, direction) local newPlayerId = getPlayerSprite() local newPlayerSprite = getSprite(newPlayerId) if oldState == CharacterState.RUNNING then character():startRunning(newPlayerId) end coroutine.yield() RemoveFadeout(150) newPlayerSprite.controllable = true end