diff options
-rw-r--r-- | res/maps/map2.tmx | 14 | ||||
-rw-r--r-- | res/scripts/map2.lua | 26 | ||||
-rw-r--r-- | res/sprites/claus.png | bin | 0 -> 9024 bytes | |||
-rw-r--r-- | res/sprites/claus_anim.txt | 42 | ||||
-rw-r--r-- | res/sprites/claus_frames.txt | 57 | ||||
-rw-r--r-- | src/script_system.cpp | 7 | ||||
-rw-r--r-- | src/transform_system.cpp | 9 | ||||
-rw-r--r-- | src/transform_system.h | 2 |
8 files changed, 154 insertions, 3 deletions
diff --git a/res/maps/map2.tmx b/res/maps/map2.tmx index 1ea8c00..19d3727 100644 --- a/res/maps/map2.tmx +++ b/res/maps/map2.tmx | |||
@@ -1,5 +1,5 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="64" height="64" tilewidth="16" tileheight="16" infinite="0" nextlayerid="3" nextobjectid="9"> | 2 | <map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="64" height="64" tilewidth="16" tileheight="16" infinite="0" nextlayerid="3" nextobjectid="10"> |
3 | <tileset firstgid="1" name="fromRom" tilewidth="16" tileheight="16" tilecount="180" columns="10"> | 3 | <tileset firstgid="1" name="fromRom" tilewidth="16" tileheight="16" tilecount="180" columns="10"> |
4 | <image source="map2_tiles.png" width="160" height="288"/> | 4 | <image source="map2_tiles.png" width="160" height="288"/> |
5 | <tile id="61"> | 5 | <tile id="61"> |
@@ -676,6 +676,18 @@ | |||
676 | <property name="script" value="approach_doria"/> | 676 | <property name="script" value="approach_doria"/> |
677 | </properties> | 677 | </properties> |
678 | </object> | 678 | </object> |
679 | <object id="9" name="join_claus" type="sprite" x="640.334" y="153.667"> | ||
680 | <properties> | ||
681 | <property name="animation" value="../res/sprites/claus_anim.txt"/> | ||
682 | <property name="collisionHeight" type="int" value="8"/> | ||
683 | <property name="collisionOffsetX" type="int" value="-8"/> | ||
684 | <property name="collisionOffsetY" type="int" value="-8"/> | ||
685 | <property name="collisionWidth" type="int" value="12"/> | ||
686 | <property name="interactionScript" value="join_claus"/> | ||
687 | <property name="shadow" type="bool" value="true"/> | ||
688 | </properties> | ||
689 | <point/> | ||
690 | </object> | ||
679 | </objectgroup> | 691 | </objectgroup> |
680 | <layer id="1" name="Layer 0" width="64" height="64"> | 692 | <layer id="1" name="Layer 0" width="64" height="64"> |
681 | <data encoding="csv"> | 693 | <data encoding="csv"> |
diff --git a/res/scripts/map2.lua b/res/scripts/map2.lua index 295a0c1..3c3a5d9 100644 --- a/res/scripts/map2.lua +++ b/res/scripts/map2.lua | |||
@@ -24,6 +24,32 @@ function map2.mailbox1() | |||
24 | HideCutsceneBars() | 24 | HideCutsceneBars() |
25 | end | 25 | end |
26 | 26 | ||
27 | function map2.join_claus() | ||
28 | StartCutscene() | ||
29 | SetAnimation("join_claus", "talk") | ||
30 | DisplayMessage("* Say, Lucas. Whatcha up to?\n\f* It looks so fun! Let me join you!", "Claus", SpeakerType.MAN) | ||
31 | ShowChoice("Yes", "No") | ||
32 | WaitForEndOfMessage() | ||
33 | |||
34 | if GetChoiceSelection() == 0 then | ||
35 | DisplayMessage("* Yes!\n\f* Okay, then I'll be at the very end!\n* Thanks!", "Claus", SpeakerType.MAN) | ||
36 | WaitForEndOfMessage() | ||
37 | |||
38 | local clausId = getSpriteByAlias("join_claus") | ||
39 | character():addSpriteToParty(getPlayerSprite(), clausId) | ||
40 | transform():undoCollision(clausId) | ||
41 | |||
42 | local clausSprite = getSprite(clausId) | ||
43 | clausSprite.persistent = true | ||
44 | else | ||
45 | 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) | ||
46 | WaitForEndOfMessage() | ||
47 | end | ||
48 | |||
49 | SetAnimation("join_claus", "still") | ||
50 | HideCutsceneBars() | ||
51 | end | ||
52 | |||
27 | function map2.mailbox_lightning() | 53 | function map2.mailbox_lightning() |
28 | StartCutscene() | 54 | StartCutscene() |
29 | DisplayMessage("* The mailbox lid is open...\n* Peek inside?", "", SpeakerType.NONE) | 55 | DisplayMessage("* The mailbox lid is open...\n* Peek inside?", "", SpeakerType.NONE) |
diff --git a/res/sprites/claus.png b/res/sprites/claus.png new file mode 100644 index 0000000..3e85a01 --- /dev/null +++ b/res/sprites/claus.png | |||
Binary files differ | |||
diff --git a/res/sprites/claus_anim.txt b/res/sprites/claus_anim.txt new file mode 100644 index 0000000..79cb64b --- /dev/null +++ b/res/sprites/claus_anim.txt | |||
@@ -0,0 +1,42 @@ | |||
1 | ../res/sprites/claus.png | ||
2 | ../res/sprites/claus_frames.txt | ||
3 | still[down]: 0 | ||
4 | still[down_left]: 1 | ||
5 | still[left]: 2 | ||
6 | still[up_left]: 3 | ||
7 | still[up]: 4 | ||
8 | still[up_right]: 5 | ||
9 | still[right]: 6 | ||
10 | still[down_right]: 7 | ||
11 | walk[down]: 8,0,16,0 | ||
12 | walk[down_left]: 9,1,17,1 | ||
13 | walk[left]: 10,2,18,2 | ||
14 | walk[up_left]: 11,3,19,3 | ||
15 | walk[up]: 12,4,20,4 | ||
16 | walk[up_right]: 13,5,21,5 | ||
17 | walk[right]: 14,6,22,6 | ||
18 | walk[down_right]: 15,7,23,7 | ||
19 | crouch[down]: 0 | ||
20 | crouch[down_left]: 1 | ||
21 | crouch[left]: 2 | ||
22 | crouch[up_left]: 3 | ||
23 | crouch[up]: 4 | ||
24 | crouch[up_right]: 5 | ||
25 | crouch[right]: 6 | ||
26 | crouch[down_right]: 7 | ||
27 | run[down]: 8,0,16,0 | ||
28 | run[down_left]: 9,1,17,1 | ||
29 | run[left]: 10,2,18,2 | ||
30 | run[up_left]: 11,3,19,3 | ||
31 | run[up]: 12,4,20,4 | ||
32 | run[up_right]: 13,5,21,5 | ||
33 | run[right]: 14,6,22,6 | ||
34 | run[down_right]: 15,7,23,7 | ||
35 | talk[down]: 24,0 | ||
36 | talk[down_left]: 25,1 | ||
37 | talk[left]: 26,2 | ||
38 | talk[up_left]: 27,3 | ||
39 | talk[up]: 28,4 | ||
40 | talk[up_right]: 29,5 | ||
41 | talk[right]: 30,6 | ||
42 | talk[down_right]: 31,7 \ No newline at end of file | ||
diff --git a/res/sprites/claus_frames.txt b/res/sprites/claus_frames.txt new file mode 100644 index 0000000..272ddc9 --- /dev/null +++ b/res/sprites/claus_frames.txt | |||
@@ -0,0 +1,57 @@ | |||
1 | 17,32 cell size | ||
2 | 10 frames per row | ||
3 | 53 frames | ||
4 | |||
5 | 16,32,8,32 | ||
6 | 16,32,8,32 | ||
7 | 16,32,8,32 | ||
8 | 16,32,8,32 | ||
9 | 16,32,9,32 | ||
10 | 16,32,9,32 | ||
11 | 16,32,9,32 | ||
12 | 16,32,9,32 | ||
13 | 16,24,8,24 | ||
14 | 16,24,8,24 | ||
15 | 16,24,8,24 | ||
16 | 16,24,8,24 | ||
17 | 16,24,9,24 | ||
18 | 16,24,9,24 | ||
19 | 16,24,9,24 | ||
20 | 16,24,9,24 | ||
21 | 17,24,9,24 | ||
22 | 16,24,8,24 | ||
23 | 16,24,8,24 | ||
24 | 16,24,8,24 | ||
25 | 17,24,9,24 | ||
26 | 16,24,9,24 | ||
27 | 16,24,9,24 | ||
28 | 16,24,9,24 | ||
29 | 16,32,8,32 | ||
30 | 16,32,8,32 | ||
31 | 16,32,8,32 | ||
32 | 16,32,8,32 | ||
33 | 17,32,9,32 | ||
34 | 16,32,9,32 | ||
35 | 16,32,9,32 | ||
36 | 16,32,9,32 | ||
37 | 16,32,8,32 | ||
38 | 16,24,8,24 | ||
39 | 17,32,9,32 | ||
40 | 17,24,9,24 | ||
41 | 16,24,8,24 | ||
42 | 16,24,8,24 | ||
43 | 16,24,8,24 | ||
44 | 16,24,8,24 | ||
45 | 16,24,8,24 | ||
46 | 16,24,8,24 | ||
47 | 16,24,8,24 | ||
48 | 16,24,8,24 | ||
49 | 16,24,9,24 | ||
50 | 16,24,9,24 | ||
51 | 16,24,9,24 | ||
52 | 16,24,9,24 | ||
53 | 16,24,9,24 | ||
54 | 16,24,9,24 | ||
55 | 16,24,9,24 | ||
56 | 16,24,9,24 | ||
57 | 16,24,9,24 | ||
diff --git a/src/script_system.cpp b/src/script_system.cpp index 090bf46..d4ee0ce 100644 --- a/src/script_system.cpp +++ b/src/script_system.cpp | |||
@@ -35,7 +35,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { | |||
35 | "animFinished", &Sprite::animFinished, | 35 | "animFinished", &Sprite::animFinished, |
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 | 40 | ||
40 | engine_.new_usertype<MessageSystem>( | 41 | engine_.new_usertype<MessageSystem>( |
41 | "message", | 42 | "message", |
@@ -54,6 +55,7 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { | |||
54 | 55 | ||
55 | engine_.new_usertype<CharacterSystem>( | 56 | engine_.new_usertype<CharacterSystem>( |
56 | "character", | 57 | "character", |
58 | "addSpriteToParty", &CharacterSystem::addSpriteToParty, | ||
57 | "transplantParty", &CharacterSystem::transplantParty, | 59 | "transplantParty", &CharacterSystem::transplantParty, |
58 | "startRunning", &CharacterSystem::startRunning, | 60 | "startRunning", &CharacterSystem::startRunning, |
59 | "halt", &CharacterSystem::halt); | 61 | "halt", &CharacterSystem::halt); |
@@ -62,7 +64,8 @@ ScriptSystem::ScriptSystem(Game& game) : game_(game) { | |||
62 | "transform", | 64 | "transform", |
63 | "initSprite", [] (TransformSystem& transform, int spriteId, int x, int y, SpriteLayer layer) { | 65 | "initSprite", [] (TransformSystem& transform, int spriteId, int x, int y, SpriteLayer layer) { |
64 | transform.initSprite(spriteId, vec2i{x, y}, layer); | 66 | transform.initSprite(spriteId, vec2i{x, y}, layer); |
65 | }); | 67 | }, |
68 | "undoCollision", &TransformSystem::undoCollision); | ||
66 | 69 | ||
67 | engine_.new_usertype<EffectSystem>( | 70 | engine_.new_usertype<EffectSystem>( |
68 | "effect", | 71 | "effect", |
diff --git a/src/transform_system.cpp b/src/transform_system.cpp index 144477b..1d4a9f3 100644 --- a/src/transform_system.cpp +++ b/src/transform_system.cpp | |||
@@ -19,6 +19,15 @@ void TransformSystem::setUpCollision(int spriteId, vec2i offset, vec2i size, boo | |||
19 | addCollidable(spriteId); | 19 | addCollidable(spriteId); |
20 | } | 20 | } |
21 | 21 | ||
22 | void TransformSystem::undoCollision(int spriteId) { | ||
23 | Sprite& sprite = game_.getSprite(spriteId); | ||
24 | |||
25 | sprite.collidable = false; | ||
26 | sprite.solid = false; | ||
27 | |||
28 | removeCollidable(spriteId); | ||
29 | } | ||
30 | |||
22 | void TransformSystem::moveSprite(int spriteId, vec2i newLoc) { | 31 | void TransformSystem::moveSprite(int spriteId, vec2i newLoc) { |
23 | Sprite& sprite = game_.getSprite(spriteId); | 32 | Sprite& sprite = game_.getSprite(spriteId); |
24 | if (sprite.collidable) { | 33 | if (sprite.collidable) { |
diff --git a/src/transform_system.h b/src/transform_system.h index 4ee481e..d894b30 100644 --- a/src/transform_system.h +++ b/src/transform_system.h | |||
@@ -35,6 +35,8 @@ public: | |||
35 | 35 | ||
36 | void setUpCollision(int spriteId, vec2i offset, vec2i size, bool solid); | 36 | void setUpCollision(int spriteId, vec2i offset, vec2i size, bool solid); |
37 | 37 | ||
38 | void undoCollision(int spriteId); | ||
39 | |||
38 | void moveSprite(int spriteId, vec2i newLoc); | 40 | void moveSprite(int spriteId, vec2i newLoc); |
39 | 41 | ||
40 | auto getSpritesByY(SpriteLayer layer) const { | 42 | auto getSpritesByY(SpriteLayer layer) const { |