diff options
Diffstat (limited to 'res/scripts')
-rw-r--r-- | res/scripts/common.lua | 10 | ||||
-rw-r--r-- | res/scripts/hallucination_mirror.lua | 22 |
2 files changed, 32 insertions, 0 deletions
diff --git a/res/scripts/common.lua b/res/scripts/common.lua index 2a2ce35..d0ea6b5 100644 --- a/res/scripts/common.lua +++ b/res/scripts/common.lua | |||
@@ -542,3 +542,13 @@ function ExitAreaTransition() | |||
542 | effect():circleTransition(1, 0.0) | 542 | effect():circleTransition(1, 0.0) |
543 | Delay(1000) | 543 | Delay(1000) |
544 | end | 544 | end |
545 | |||
546 | --- Checks whether a sprite is in a zone. | ||
547 | -- @param spriteName the name of the sprite to locate | ||
548 | -- @param zoneName the name of the zone on the current map to use as a boundary | ||
549 | function IsSpriteInZone(spriteName, zoneName) | ||
550 | local pos = GetPosition(spriteName) | ||
551 | local zone = getMap():getZone(zoneName) | ||
552 | |||
553 | return (pos:x() >= zone.ul:x()) and (pos:x() <= zone.dr:x()) and (pos:y() >= zone.ul:y()) and (pos:y() <= zone.dr:y()) | ||
554 | end | ||
diff --git a/res/scripts/hallucination_mirror.lua b/res/scripts/hallucination_mirror.lua index 6e2ef55..bf1faba 100644 --- a/res/scripts/hallucination_mirror.lua +++ b/res/scripts/hallucination_mirror.lua | |||
@@ -1,5 +1,27 @@ | |||
1 | hallucination_mirror = {} | 1 | hallucination_mirror = {} |
2 | 2 | ||
3 | function hallucination_mirror.init() | ||
4 | coroutine.yield() | ||
5 | -- This routine makes the player's party face the mirror if they are standing | ||
6 | -- in front of it for a few (5) seconds. The fact that this has to run | ||
7 | -- continuously makes it a bit complicated, and is why we keep checking that | ||
8 | -- we're on the same map. | ||
9 | while getMap():getName() == "hallucination_mirror" do | ||
10 | if IsSpriteInZone("lucas", "mirror_sight") and IsSpriteInZone("kuma", "mirror_sight") and IsSpriteInZone("duster", "mirror_sight") and IsSpriteInZone("boney", "mirror_sight") then | ||
11 | timer = 5000 -- milliseconds | ||
12 | while timer > 0 and getSprite(getPlayerSprite()).characterState == CharacterState.STILL and getMap():getName() == "hallucination_mirror" do | ||
13 | timer = timer - coroutine.yield() | ||
14 | end | ||
15 | |||
16 | if timer <= 0 and getSprite(getPlayerSprite()).characterState == CharacterState.STILL and getMap():getName() == "hallucination_mirror" then | ||
17 | SetPartyDirection(getPlayerSprite(), Direction.UP) | ||
18 | end | ||
19 | end | ||
20 | |||
21 | coroutine.yield() | ||
22 | end | ||
23 | end | ||
24 | |||
3 | function hallucination_mirror.mailbox() | 25 | function hallucination_mirror.mailbox() |
4 | StartCutscene() | 26 | StartCutscene() |
5 | DisplayMessage("* The mailbox lid is open...\n* Peek inside?", "", SpeakerType.NONE) | 27 | DisplayMessage("* The mailbox lid is open...\n* Peek inside?", "", SpeakerType.NONE) |