diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-03-09 13:49:03 -0500 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-03-09 13:49:03 -0500 |
commit | aac3b1bc1ba48b6e50f661b97326ef191cce3e6c (patch) | |
tree | dff16d2e26332a09576ff4965d0126070efa1b63 | |
parent | 032f60bc2686364f4df5bfb6c9faf86b84de31a6 (diff) | |
download | tanetane-aac3b1bc1ba48b6e50f661b97326ef191cce3e6c.tar.gz tanetane-aac3b1bc1ba48b6e50f661b97326ef191cce3e6c.tar.bz2 tanetane-aac3b1bc1ba48b6e50f661b97326ef191cce3e6c.zip |
switch_claus starts talking when he gets ya
Kumatora, Duster, and Boney had to be given hitboxes, but they are not considered solid. #10
-rw-r--r-- | res/maps/hallucination_interior.tmx | 1 | ||||
-rw-r--r-- | res/scripts/hallucination_interior.lua | 7 | ||||
-rw-r--r-- | src/character_system.cpp | 17 | ||||
-rw-r--r-- | src/game.cpp | 3 | ||||
-rw-r--r-- | src/main.cpp | 3 | ||||
-rw-r--r-- | src/map.cpp | 2 | ||||
-rw-r--r-- | src/map.h | 1 | ||||
-rw-r--r-- | src/sprite.h | 2 |
8 files changed, 35 insertions, 1 deletions
diff --git a/res/maps/hallucination_interior.tmx b/res/maps/hallucination_interior.tmx index 7e012eb..1077cf5 100644 --- a/res/maps/hallucination_interior.tmx +++ b/res/maps/hallucination_interior.tmx | |||
@@ -159,6 +159,7 @@ | |||
159 | <object id="7" name="switch_claus" type="sprite" x="864" y="784"> | 159 | <object id="7" name="switch_claus" type="sprite" x="864" y="784"> |
160 | <properties> | 160 | <properties> |
161 | <property name="animation" value="claus"/> | 161 | <property name="animation" value="claus"/> |
162 | <property name="bumpPlayerScript" value="lets_switch_places"/> | ||
162 | <property name="enclosureZone" value="switch_claus_enclosure"/> | 163 | <property name="enclosureZone" value="switch_claus_enclosure"/> |
163 | <property name="interactionScript" value="lets_switch_places"/> | 164 | <property name="interactionScript" value="lets_switch_places"/> |
164 | <property name="movementSpeed" type="int" value="1"/> | 165 | <property name="movementSpeed" type="int" value="1"/> |
diff --git a/res/scripts/hallucination_interior.lua b/res/scripts/hallucination_interior.lua index 96b90a6..c265a46 100644 --- a/res/scripts/hallucination_interior.lua +++ b/res/scripts/hallucination_interior.lua | |||
@@ -270,6 +270,7 @@ end | |||
270 | function hallucination_interior.lets_switch_places() | 270 | function hallucination_interior.lets_switch_places() |
271 | StartCutscene() | 271 | StartCutscene() |
272 | 272 | ||
273 | FaceTowardSprite("switch_claus", "lucas") | ||
273 | FacePartyTowardSprite("lucas", "switch_claus") | 274 | FacePartyTowardSprite("lucas", "switch_claus") |
274 | Halt("switch_claus") | 275 | Halt("switch_claus") |
275 | SetAnimation("switch_claus", "talk") | 276 | SetAnimation("switch_claus", "talk") |
@@ -280,9 +281,13 @@ function hallucination_interior.lets_switch_places() | |||
280 | 281 | ||
281 | if GetChoiceSelection() == 0 then | 282 | if GetChoiceSelection() == 0 then |
282 | DisplayMessage("* You'd like that, wouldn't you?\n\f* ...no. That's too easy.\n\fI'm not letting you off that easy.\n\f* It should've been you, right?\nYou feel guilty, right?\n\f* Well guess what, Lucas?\n\fYou're going to live with that for the rest of your life.\n\f* You know why?\n\f* Because you're going to live, Lucas!\n\fYOU'RE. GOING. TO. LIVE!", "Claus", SpeakerType.MAN) | 283 | DisplayMessage("* You'd like that, wouldn't you?\n\f* ...no. That's too easy.\n\fI'm not letting you off that easy.\n\f* It should've been you, right?\nYou feel guilty, right?\n\f* Well guess what, Lucas?\n\fYou're going to live with that for the rest of your life.\n\f* You know why?\n\f* Because you're going to live, Lucas!\n\fYOU'RE. GOING. TO. LIVE!", "Claus", SpeakerType.MAN) |
283 | SetAnimation("switch_claus", "still") | ||
284 | HideCutsceneBars() | 284 | HideCutsceneBars() |
285 | |||
286 | SetAnimation("switch_claus", "still") | ||
285 | else | 287 | else |
286 | -- TODO: let's switch places | 288 | -- TODO: let's switch places |
287 | end | 289 | end |
290 | |||
291 | -- Just so we can get away, for now. | ||
292 | hallucination_interior.switch_claus_lose_interest() | ||
288 | end | 293 | end |
diff --git a/src/character_system.cpp b/src/character_system.cpp index 48d2a33..548bd9d 100644 --- a/src/character_system.cpp +++ b/src/character_system.cpp | |||
@@ -18,6 +18,7 @@ void CharacterSystem::addSpriteToParty(int leaderId, int followerId) { | |||
18 | Sprite& leader = game_.getSprite(leaderId); | 18 | Sprite& leader = game_.getSprite(leaderId); |
19 | Sprite& follower = game_.getSprite(followerId); | 19 | Sprite& follower = game_.getSprite(followerId); |
20 | follower.orientable = false; | 20 | follower.orientable = false; |
21 | follower.leaderId = leaderId; | ||
21 | 22 | ||
22 | vec2i targetPos = leader.loc; | 23 | vec2i targetPos = leader.loc; |
23 | 24 | ||
@@ -83,6 +84,7 @@ void CharacterSystem::breakUpParty(int leaderId) { | |||
83 | for (int followerId : followers) { | 84 | for (int followerId : followers) { |
84 | Sprite& follower = game_.getSprite(followerId); | 85 | Sprite& follower = game_.getSprite(followerId); |
85 | follower.trail.clear(); | 86 | follower.trail.clear(); |
87 | follower.leaderId = -1; | ||
86 | } | 88 | } |
87 | } | 89 | } |
88 | 90 | ||
@@ -153,6 +155,7 @@ void CharacterSystem::tick(double dt) { | |||
153 | // Check collision. | 155 | // Check collision. |
154 | CollisionResult collision = game_.getSystem<TransformSystem>().checkCollision(spriteId, sprite.loc, pLoc, sprite.movementDir); | 156 | CollisionResult collision = game_.getSystem<TransformSystem>().checkCollision(spriteId, sprite.loc, pLoc, sprite.movementDir); |
155 | bool blocked = collision.horiz.blocked || collision.vert.blocked; | 157 | bool blocked = collision.horiz.blocked || collision.vert.blocked; |
158 | int colliderSpriteId = (collision.horiz.colliderSprite == -1) ? collision.vert.colliderSprite : collision.horiz.colliderSprite; | ||
156 | 159 | ||
157 | if (collision.horiz.blocked && !sprite.clipping) { | 160 | if (collision.horiz.blocked && !sprite.clipping) { |
158 | pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; | 161 | pLoc.x() = sprite.loc.x();//(newColPosDR * map.getTileSize() - (collisionBox / 2)).x() - 1; |
@@ -179,6 +182,20 @@ void CharacterSystem::tick(double dt) { | |||
179 | game_.getMixer().playSound("../res/sfx/bump.wav"); | 182 | game_.getMixer().playSound("../res/sfx/bump.wav"); |
180 | } | 183 | } |
181 | 184 | ||
185 | if (colliderSpriteId != -1 && !sprite.bumpPlayerScript.empty()) { | ||
186 | Sprite& collider = game_.getSprite(colliderSpriteId); | ||
187 | bool bumpedPlayer = collider.player; | ||
188 | |||
189 | if (!bumpedPlayer && collider.leaderId != -1) { | ||
190 | Sprite& colliderLeader = game_.getSprite(collider.leaderId); | ||
191 | bumpedPlayer = colliderLeader.player; | ||
192 | } | ||
193 | |||
194 | if (bumpedPlayer) { | ||
195 | game_.getSystem<ScriptSystem>().runScript(game_.getMap().getName(), sprite.bumpPlayerScript); | ||
196 | } | ||
197 | } | ||
198 | |||
182 | // Move everything | 199 | // Move everything |
183 | if (pLoc != sprite.loc) { | 200 | if (pLoc != sprite.loc) { |
184 | game_.getSystem<TransformSystem>().moveSprite(spriteId, pLoc); | 201 | game_.getSystem<TransformSystem>().moveSprite(spriteId, pLoc); |
diff --git a/src/game.cpp b/src/game.cpp index bedd934..80ff506 100644 --- a/src/game.cpp +++ b/src/game.cpp | |||
@@ -72,6 +72,9 @@ void Game::loadMap(std::string filename) { | |||
72 | if (p.wander) { | 72 | if (p.wander) { |
73 | getSprite(spriteId).behaviourType = BehaviourType::Wander; | 73 | getSprite(spriteId).behaviourType = BehaviourType::Wander; |
74 | } | 74 | } |
75 | if (!p.bumpPlayerScript.empty()) { | ||
76 | getSprite(spriteId).bumpPlayerScript = p.bumpPlayerScript; | ||
77 | } | ||
75 | } | 78 | } |
76 | if (!p.enclosureZone.empty()) { | 79 | if (!p.enclosureZone.empty()) { |
77 | getSprite(spriteId).enclosureZone = p.enclosureZone; | 80 | getSprite(spriteId).enclosureZone = p.enclosureZone; |
diff --git a/src/main.cpp b/src/main.cpp index 9cc25bb..051c4d1 100644 --- a/src/main.cpp +++ b/src/main.cpp | |||
@@ -48,6 +48,7 @@ void loop(Renderer& renderer, std::mt19937& rng) { | |||
48 | 48 | ||
49 | int kumaSprite = game.emplaceSprite("kuma"); | 49 | int kumaSprite = game.emplaceSprite("kuma"); |
50 | game.getSystem<TransformSystem>().initSprite(kumaSprite, warpLoc); | 50 | game.getSystem<TransformSystem>().initSprite(kumaSprite, warpLoc); |
51 | game.getSystem<TransformSystem>().setUpCollision(kumaSprite, {-8, -8}, {12, 8}, false); | ||
51 | game.getSystem<AnimationSystem>().initSprite(kumaSprite, "../res/sprites/kuma_anim.txt"); | 52 | game.getSystem<AnimationSystem>().initSprite(kumaSprite, "../res/sprites/kuma_anim.txt"); |
52 | game.getSystem<AnimationSystem>().setSpriteDirection(kumaSprite, Direction::down); | 53 | game.getSystem<AnimationSystem>().setSpriteDirection(kumaSprite, Direction::down); |
53 | game.getSprite(kumaSprite).normallyHasShadow = true; | 54 | game.getSprite(kumaSprite).normallyHasShadow = true; |
@@ -56,6 +57,7 @@ void loop(Renderer& renderer, std::mt19937& rng) { | |||
56 | 57 | ||
57 | int dusterSprite = game.emplaceSprite("duster"); | 58 | int dusterSprite = game.emplaceSprite("duster"); |
58 | game.getSystem<TransformSystem>().initSprite(dusterSprite, warpLoc); | 59 | game.getSystem<TransformSystem>().initSprite(dusterSprite, warpLoc); |
60 | game.getSystem<TransformSystem>().setUpCollision(dusterSprite, {-8, -8}, {12, 8}, false); | ||
59 | game.getSystem<AnimationSystem>().initSprite(dusterSprite, "../res/sprites/duster_anim.txt"); | 61 | game.getSystem<AnimationSystem>().initSprite(dusterSprite, "../res/sprites/duster_anim.txt"); |
60 | game.getSystem<AnimationSystem>().setSpriteDirection(dusterSprite, Direction::down); | 62 | game.getSystem<AnimationSystem>().setSpriteDirection(dusterSprite, Direction::down); |
61 | game.getSprite(dusterSprite).normallyHasShadow = true; | 63 | game.getSprite(dusterSprite).normallyHasShadow = true; |
@@ -64,6 +66,7 @@ void loop(Renderer& renderer, std::mt19937& rng) { | |||
64 | 66 | ||
65 | int boneySprite = game.emplaceSprite("boney"); | 67 | int boneySprite = game.emplaceSprite("boney"); |
66 | game.getSystem<TransformSystem>().initSprite(boneySprite, warpLoc); | 68 | game.getSystem<TransformSystem>().initSprite(boneySprite, warpLoc); |
69 | game.getSystem<TransformSystem>().setUpCollision(boneySprite, {-8, -8}, {12, 8}, false); | ||
67 | game.getSystem<AnimationSystem>().initSprite(boneySprite, "../res/sprites/boney_anim.txt"); | 70 | game.getSystem<AnimationSystem>().initSprite(boneySprite, "../res/sprites/boney_anim.txt"); |
68 | game.getSystem<AnimationSystem>().setSpriteDirection(boneySprite, Direction::down); | 71 | game.getSystem<AnimationSystem>().setSpriteDirection(boneySprite, Direction::down); |
69 | game.getSprite(boneySprite).normallyHasShadow = true; | 72 | game.getSprite(boneySprite).normallyHasShadow = true; |
diff --git a/src/map.cpp b/src/map.cpp index 32203e5..a170288 100644 --- a/src/map.cpp +++ b/src/map.cpp | |||
@@ -119,6 +119,8 @@ Map::Map(std::string_view name) : name_(name) { | |||
119 | p.mirrorAxis = property.getIntValue(); | 119 | p.mirrorAxis = property.getIntValue(); |
120 | } else if (property.getName() == "mirrorSprite") { | 120 | } else if (property.getName() == "mirrorSprite") { |
121 | p.spriteToMirror = property.getStringValue(); | 121 | p.spriteToMirror = property.getStringValue(); |
122 | } else if (property.getName() == "bumpPlayerScript") { | ||
123 | p.bumpPlayerScript = property.getStringValue(); | ||
122 | } | 124 | } |
123 | } | 125 | } |
124 | 126 | ||
diff --git a/src/map.h b/src/map.h index eb926c7..9418aad 100644 --- a/src/map.h +++ b/src/map.h | |||
@@ -27,6 +27,7 @@ struct Prototype { | |||
27 | std::string animName; | 27 | std::string animName; |
28 | Direction dir = Direction::down; | 28 | Direction dir = Direction::down; |
29 | std::string interactionScript; | 29 | std::string interactionScript; |
30 | std::string bumpPlayerScript; | ||
30 | bool shadow = false; | 31 | bool shadow = false; |
31 | bool wander = false; | 32 | bool wander = false; |
32 | int movementSpeed = -1; | 33 | int movementSpeed = -1; |
diff --git a/src/sprite.h b/src/sprite.h index 10dd3a8..f631652 100644 --- a/src/sprite.h +++ b/src/sprite.h | |||
@@ -81,6 +81,7 @@ public: | |||
81 | vec2i collisionSize; | 81 | vec2i collisionSize; |
82 | std::string interactionScript; | 82 | std::string interactionScript; |
83 | std::string walkthroughScript; | 83 | std::string walkthroughScript; |
84 | std::string bumpPlayerScript; | ||
84 | std::string enclosureZone; | 85 | std::string enclosureZone; |
85 | 86 | ||
86 | // Animation (internals) | 87 | // Animation (internals) |
@@ -109,6 +110,7 @@ public: | |||
109 | bool orientable = false; | 110 | bool orientable = false; |
110 | int movementSpeed = 0; // 1 is slow (good for NPCs), 2 is Lucas's default walking speed | 111 | int movementSpeed = 0; // 1 is slow (good for NPCs), 2 is Lucas's default walking speed |
111 | std::vector<int> followers; | 112 | std::vector<int> followers; |
113 | int leaderId = -1; | ||
112 | std::deque<Movement> trail; | 114 | std::deque<Movement> trail; |
113 | bool trailsAreHalved = false; | 115 | bool trailsAreHalved = false; |
114 | CharacterState characterState = CharacterState::Still; | 116 | CharacterState characterState = CharacterState::Still; |