diff options
| -rw-r--r-- | res/maps/map2.tmx | 1 | ||||
| -rw-r--r-- | res/scripts/common.lua | 15 | ||||
| -rw-r--r-- | res/scripts/map2.lua | 11 | ||||
| -rw-r--r-- | src/behaviour_system.cpp | 2 | ||||
| -rw-r--r-- | src/character_system.cpp | 2 | ||||
| -rw-r--r-- | src/script_system.cpp | 9 | ||||
| -rw-r--r-- | src/sprite.h | 1 |
7 files changed, 38 insertions, 3 deletions
| diff --git a/res/maps/map2.tmx b/res/maps/map2.tmx index af021bf..77e7725 100644 --- a/res/maps/map2.tmx +++ b/res/maps/map2.tmx | |||
| @@ -696,6 +696,7 @@ | |||
| 696 | <property name="collisionOffsetY" type="int" value="-8"/> | 696 | <property name="collisionOffsetY" type="int" value="-8"/> |
| 697 | <property name="collisionWidth" type="int" value="12"/> | 697 | <property name="collisionWidth" type="int" value="12"/> |
| 698 | <property name="enclosureZone" value="ionia_enclosure"/> | 698 | <property name="enclosureZone" value="ionia_enclosure"/> |
| 699 | <property name="interactionScript" value="talk_to_ionia"/> | ||
| 699 | <property name="movementSpeed" type="int" value="1"/> | 700 | <property name="movementSpeed" type="int" value="1"/> |
| 700 | <property name="shadow" type="bool" value="true"/> | 701 | <property name="shadow" type="bool" value="true"/> |
| 701 | <property name="wander" type="bool" value="true"/> | 702 | <property name="wander" type="bool" value="true"/> |
| diff --git a/res/scripts/common.lua b/res/scripts/common.lua index 4dfa1a2..494ace9 100644 --- a/res/scripts/common.lua +++ b/res/scripts/common.lua | |||
| @@ -49,6 +49,11 @@ function StartCutscene() | |||
| 49 | playerSprite.controllable = false | 49 | playerSprite.controllable = false |
| 50 | character():halt(playerId) | 50 | character():halt(playerId) |
| 51 | message():displayCutsceneBars() | 51 | message():displayCutsceneBars() |
| 52 | |||
| 53 | local allSprites = getAllSprites() | ||
| 54 | for k,v in pairs(allSprites) do | ||
| 55 | getSprite(v).paused = true | ||
| 56 | end | ||
| 52 | end | 57 | end |
| 53 | 58 | ||
| 54 | --- Queues a message for display. | 59 | --- Queues a message for display. |
| @@ -94,6 +99,11 @@ function HideCutsceneBars() | |||
| 94 | local playerId = getPlayerSprite() | 99 | local playerId = getPlayerSprite() |
| 95 | local playerSprite = getSprite(playerId) | 100 | local playerSprite = getSprite(playerId) |
| 96 | playerSprite.controllable = true | 101 | playerSprite.controllable = true |
| 102 | |||
| 103 | local allSprites = getAllSprites() | ||
| 104 | for k,v in pairs(allSprites) do | ||
| 105 | getSprite(v).paused = false | ||
| 106 | end | ||
| 97 | end | 107 | end |
| 98 | 108 | ||
| 99 | function GetPosition(spriteName) | 109 | function GetPosition(spriteName) |
| @@ -120,6 +130,11 @@ function WaitForAnimation(spriteName) | |||
| 120 | until sprite.animFinished | 130 | until sprite.animFinished |
| 121 | end | 131 | end |
| 122 | 132 | ||
| 133 | function Halt(spriteName) | ||
| 134 | local spriteId = getSpriteByAlias(spriteName) | ||
| 135 | character():halt(spriteId) | ||
| 136 | end | ||
| 137 | |||
| 123 | function PlaySound(filename) | 138 | function PlaySound(filename) |
| 124 | mixer():playSound("../res/sfx/" .. filename) | 139 | mixer():playSound("../res/sfx/" .. filename) |
| 125 | end | 140 | end |
| diff --git a/res/scripts/map2.lua b/res/scripts/map2.lua index 3c3a5d9..cb373b4 100644 --- a/res/scripts/map2.lua +++ b/res/scripts/map2.lua | |||
| @@ -172,3 +172,14 @@ function map2.approach_doria() | |||
| 172 | 172 | ||
| 173 | HideCutsceneBars() | 173 | HideCutsceneBars() |
| 174 | end | 174 | end |
| 175 | |||
| 176 | function map2.talk_to_ionia() | ||
| 177 | Halt("ionia") | ||
| 178 | StartCutscene() | ||
| 179 | SetAnimation("ionia", "talk") | ||
| 180 | DisplayMessage("* Kumatora!", "Ionia", SpeakerType.MAN) | ||
| 181 | WaitForEndOfMessage() | ||
| 182 | |||
| 183 | SetAnimation("ionia", "still") | ||
| 184 | HideCutsceneBars() | ||
| 185 | end | ||
| diff --git a/src/behaviour_system.cpp b/src/behaviour_system.cpp index 8f17329..6cd0b52 100644 --- a/src/behaviour_system.cpp +++ b/src/behaviour_system.cpp | |||
| @@ -9,7 +9,7 @@ void BehaviourSystem::tick(double dt) { | |||
| 9 | while (timer_.step()) { | 9 | while (timer_.step()) { |
| 10 | for (int spriteId : game_.getSprites()) { | 10 | for (int spriteId : game_.getSprites()) { |
| 11 | Sprite& sprite = game_.getSprite(spriteId); | 11 | Sprite& sprite = game_.getSprite(spriteId); |
| 12 | if (sprite.wander) { | 12 | if (sprite.wander && !sprite.paused) { |
| 13 | // 75% chance of changing what's happening | 13 | // 75% chance of changing what's happening |
| 14 | if (std::bernoulli_distribution(0.75)(game_.getRng())) { | 14 | if (std::bernoulli_distribution(0.75)(game_.getRng())) { |
| 15 | // 50% chance of choosing a direction or stopping | 15 | // 50% chance of choosing a direction or stopping |
| diff --git a/src/character_system.cpp b/src/character_system.cpp index e6dddf6..7b628b0 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp | |||
| @@ -96,7 +96,7 @@ void CharacterSystem::tick(double dt) { | |||
| 96 | for (int spriteId : game_.getSprites()) { | 96 | for (int spriteId : game_.getSprites()) { |
| 97 | Sprite& sprite = game_.getSprite(spriteId); | 97 | Sprite& sprite = game_.getSprite(spriteId); |
| 98 | 98 | ||
| 99 | if (sprite.orientable) { | 99 | if (sprite.orientable && !sprite.paused) { |
| 100 | vec2i pLoc = sprite.loc; | 100 | vec2i pLoc = sprite.loc; |
| 101 | 101 | ||
| 102 | if (sprite.characterState == CharacterState::Still || | 102 | if (sprite.characterState == CharacterState::Still || |
| diff --git a/src/script_system.cpp b/src/script_system.cpp index d4ee0ce..3293753 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp | |||
| @@ -36,7 +36,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { | |||
| 36 | "getCurrentFrame", [] (const Sprite& sprite) -> const SpriteFrame& { | 36 | "getCurrentFrame", [] (const Sprite& sprite) -> const SpriteFrame& { |
| 37 | return sprite.frames[sprite.animations[sprite.animationId].frameIndices[sprite.animationFrame]]; | 37 | return sprite.frames[sprite.animations[sprite.animationId].frameIndices[sprite.animationFrame]]; |
| 38 | }, | 38 | }, |
| 39 | "persistent", &Sprite::persistent); | 39 | "persistent", &Sprite::persistent, |
| 40 | "paused", &Sprite::paused); | ||
| 40 | 41 | ||
| 41 | engine_.new_usertype<MessageSystem>( | 42 | engine_.new_usertype<MessageSystem>( |
| 42 | "message", | 43 | "message", |
| @@ -168,6 +169,12 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { | |||
| 168 | }); | 169 | }); |
| 169 | 170 | ||
| 170 | engine_.set_function( | 171 | engine_.set_function( |
| 172 | "getAllSprites", | ||
| 173 | [&] () -> const std::set<int>& { | ||
| 174 | return game_.getSprites(); | ||
| 175 | }); | ||
| 176 | |||
| 177 | engine_.set_function( | ||
| 171 | "loadMap", | 178 | "loadMap", |
| 172 | [&] (std::string filename) { | 179 | [&] (std::string filename) { |
| 173 | game_.loadMap(filename); | 180 | game_.loadMap(filename); |
| diff --git a/src/sprite.h b/src/sprite.h index 4e3e490..35ca7aa 100644 --- a/src/sprite.h +++ b/src/sprite.h | |||
| @@ -43,6 +43,7 @@ public: | |||
| 43 | 43 | ||
| 44 | std::string alias; | 44 | std::string alias; |
| 45 | bool persistent = false; | 45 | bool persistent = false; |
| 46 | bool paused = false; | ||
| 46 | 47 | ||
| 47 | // Transform | 48 | // Transform |
| 48 | vec2i loc { 0, 0 }; | 49 | vec2i loc { 0, 0 }; |
