hallucination_interior = {} function hallucination_interior.off_left() ChangeMap("hallucination_beach", "fromRight") end function hallucination_interior.off_top() ChangeMap("hallucination_cliff", "fromBottom") end function hallucination_interior.off_right() ChangeMap("hallucination_mirror", "fromLeft") end function hallucination_interior.mailbox1() StartCutscene() DisplayMessage("* The mailbox lid is open...\n* Peek inside?", "", SpeakerType.NONE) ShowChoice("Yes", "No") WaitForEndOfMessage() if GetChoiceSelection() == 0 then DisplayMessage("* There are lots of postcards inside.\n* Read them?", "", SpeakerType.NONE) ShowChoice("Yes", "No") WaitForEndOfMessage() if GetChoiceSelection() == 0 then DisplayMessage("* The boy named Lucas is crying at a grave.\n\f* The boy named Lucas and his dog are loitering in the forest.\n\f* The boy named Lucas is getting into trouble in the mountains.\n\f* The boy named Lucas stole Beanoff from our garden.\n\f* The boy named Lucas is bullying animals.\n\f* The boy named Lucas learned some bad magic.\n\f* The boy named Lucas ......\n\f* The boy named Lucas ......\n\f* The boy named Lucas ......\n\f* The boy named Lucas .........\n\f* The mailbox let out a tremendous scream.", "", SpeakerType.NONE) WaitForEndOfMessage() end end HideCutsceneBars() end function hallucination_interior.join_claus() StartCutscene() SetAnimation("join_claus", "talk") DisplayMessage("* Say, Lucas. Whatcha up to?\n\f* It looks so fun! Let me join you!", "Claus", SpeakerType.MAN) ShowChoice("Yes", "No") WaitForEndOfMessage() if GetChoiceSelection() == 0 then DisplayMessage("* Yes!\n\f* Okay, then I'll be at the very end!\n* Thanks!", "Claus", SpeakerType.MAN) WaitForEndOfMessage() local clausId = getSpriteByAlias("join_claus") character():addSpriteToParty(getPlayerSprite(), clausId) transform():undoCollision(clausId) local clausSprite = getSprite(clausId) clausSprite.persistent = true gamestate.claus_joined = true gamestate.still_has_claus = true else DisplayMessage("* You won't let me join in?\nWhy not? Why not?\n\f* Why won't you let me join in?", "Claus", SpeakerType.MAN) WaitForEndOfMessage() end SetAnimation("join_claus", "still") HideCutsceneBars() end function hallucination_interior.mailbox_lightning() StartCutscene() DisplayMessage("* The mailbox lid is open...\n* Peek inside?", "", SpeakerType.NONE) ShowChoice("Yes", "No") WaitForEndOfMessage() if GetChoiceSelection() == 1 then HideCutsceneBars() return end FadeMap(500, 0.5) WaitForMapFade() DisplayMessage("* ...?", "", SpeakerType.NONE) WaitForEndOfMessage() PlaySound("lightning_crackle.wav") Delay(1196) local lucasPos = GetPosition("lucas") CreateAnimatedSpriteAtPosition("lightning_from_mailbox", "lightning", lucasPos:x() + 56, lucasPos:y() - 72, "strike", Direction.DOWN_LEFT, SpriteLayer.ABOVE) ShakeCamera(66) PlaySound("lightning_explosion.wav") SetDirection("lucas", Direction.DOWN) SetAnimation("lucas", "lightning_electrocute!") WaitForAnimation("lucas") StopShakingCamera() DestroyNamedSprite("lightning_from_mailbox") SetAnimation("lucas", "lightning_collapse!") WaitForAnimation("lucas") FadeMap(500, 0.0) WaitForMapFade() DisplayMessage("* It was lightning.\n\fAh.", "", SpeakerType.NONE) WaitForEndOfMessage() HideCutsceneBars(CutsceneOptions.DO_NOT_CHANGE_ANIMATION) end function hallucination_interior.approach_doria() if gamestate.approached_doria then return end gamestate.approached_doria = true StartCutscene() SetDirection("boney", Direction.LEFT) SetAnimation("boney", "barking") local barkingNoise = LoopSound("barking_at_hallucination.wav") Delay(200) ShowExpression("lucas", "surprise") SetDirection("lucas", Direction.LEFT) Delay(100) ShowExpression("kuma", "surprise") ShowExpression("duster", "surprise") SetDirection("kuma", Direction.LEFT) SetDirection("duster", Direction.LEFT) Delay(1000) PanToSprite("doria", 2000) Delay(500) RemoveExpression("lucas") RemoveExpression("kuma") RemoveExpression("duster") WaitForPan() SetDirection("doria", Direction.DOWN_RIGHT) SetAnimation("doria", "talk") ShowExpression("doria", "surprise") DisplayMessage("* Oh my!\n\f* Is that our little Kumatora I spy? `", "Doria", SpeakerType.MAN) Delay(1000) RemoveExpression("doria") WaitForEndOfMessage() SetAnimation("doria", "still") ReturnCamera(2000) Delay(1000) SetAnimation("kuma", "talk") DisplayMessage("* Doria...?\n\f* What the hell... You're still alive?", "Kumatora", SpeakerType.WOMAN) WaitForEndOfMessage() SetAnimation("boney", "crouch") StopSound(barkingNoise) PlaySound("boney_growl.wav") SetAnimation("kuma", "frozen") Delay(1000) SetAnimation("doria", "talk") DisplayMessage("* It is! It is her!\n\f* Such style! Such swagger!\nWhy, just as if she were Magifolk herself! `\n* When Ionia showed us the human she was looking after, I hardly knew what to think.", "Doria", SpeakerType.MAN) WaitForEndOfMessage() SetDirection("doria", Direction.DOWN) SetAnimation("doria", "hearts") DisplayMessage("* But what a lovely lady you've become!\n\f* You've made this old girl cry with pride! `", "Doria", SpeakerType.MAN) WaitForEndOfMessage() SetDirection("doria", Direction.DOWN_RIGHT) SetAnimation("doria", "talk") DisplayMessage("* Now I shudder to think how I'll move on once your short human life is over.\n* Ooh, get another one, I suppose!\nYes, we'll just get another human. `\nAnd the new Kumatora will be just as good, no, better than the last one!", "Doria", SpeakerType.MAN) WaitForEndOfMessage() SetDirection("doria", Direction.DOWN) SetAnimation("doria", "hairflip!") WaitForAnimation("doria") SetAnimation("doria", "still") Delay(1000) SetAnimation("kuma", "talk") DisplayMessage("* H-hey, what do you mean ?", "Kumatora", SpeakerType.WOMAN) WaitForEndOfMessage() HideCutsceneBars() end function hallucination_interior.talk_to_ionia() Halt("ionia") StartCutscene() SetAnimation("ionia", "talk") DisplayMessage("* Kumatora!\n\f* Oh! My goodness!\nGet away from that monster!", "Ionia", SpeakerType.MAN) WaitForEndOfMessage() SetAnimation("ionia", "still") HideCutsceneBars() end function hallucination_interior.mailbox_time_passage() StartCutscene() DisplayMessage("* The mailbox lid is open...\n* Peek inside?", "", SpeakerType.NONE) ShowChoice("Yes", "No") WaitForEndOfMessage() if GetChoiceSelection() == 1 then HideCutsceneBars() return end FadeoutMusic(2000) Delay(4000) DisplayMessage("* Inside the mailbox is a long hallway.", "", SpeakerType.NONE) WaitForEndOfMessage() Delay(1000) FadeToBlack(1000) HideCutsceneBars() DisablePlayerControl() ChangeMap("time_passage", "fromMailbox", ChangeMapOptions.DO_NOT_FADE | ChangeMapOptions.DO_NOT_CHANGE_MUSIC) Delay(1000) PlayMusic("time_passage", 2000) RemoveFadeout(2000) EnablePlayerControl() end