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 }; |