bouncy chain -> chord

This commit is contained in:
Oliver Bell committed 2025-03-20 23:00:15 +00:00
1 parent c35510e1cc
commit 911ad8a808
16 files changed
+379 -379

No files matched your search

+1 -1
View File
@@ -285,7 +285,7 @@
"anim_commands.h": "c",
"platform_crumbling.h": "c",
"german_flute.h": "c",
"bouncy_chain.h": "c",
"chord.h": "c",
"giant_propeller.h": "c",
"collect_ring_effect.h": "c",
"zone_1.h": "c",
@@ -61,7 +61,7 @@ Adv2,INTERACTABLES,99,19,,,,,
14,5,15,28,NOTE_BLOCK__SPHERE,2,0,0,0
14,5,26,26,NOTE_BLOCK__SPHERE,4,0,0,0
22,5,22,16,GRIND_RAIL__START_AIR,-12,-3,24,3
22,5,10,23,BOUNCY_CHAIN,0,0,0,0
22,5,10,23,CHORD,0,0,0,0
28,5,4,20,GRIND_RAIL__START_GROUND,-12,-3,24,3
13,6,24,0,SPRING__UP,0,0,0,0
15,6,7,12,BOOSTER,0,0,0,0
@@ -95,7 +95,7 @@ Adv2,INTERACTABLES,99,19,,,,,
21,7,18,4,NOTE_BLOCK__BLOCK,3,0,0,0
21,7,22,4,NOTE_BLOCK__BLOCK,4,0,0,0
21,7,26,4,NOTE_BLOCK__BLOCK,5,0,0,0
23,7,14,7,BOUNCY_CHAIN,0,0,0,0
23,7,14,7,CHORD,0,0,0,0
30,7,24,4,GRIND_RAIL__END_AIR,-12,-3,24,3
32,7,12,22,SPIKES__NORMAL_UP,0,0,0,0
33,7,6,24,GRIND_RAIL__START_AIR,-12,-3,24,3
@@ -137,7 +137,7 @@ Adv2,INTERACTABLES,99,19,,,,,
32,9,11,14,COMMON_THIN_PLATFORM,0,0,0,0
32,9,17,14,COMMON_THIN_PLATFORM,0,0,0,0
33,9,15,0,BOOSTER,0,0,0,0
33,9,6,15,BOUNCY_CHAIN,0,0,0,0
33,9,6,15,CHORD,0,0,0,0
35,9,22,24,NOTE_BLOCK__BLOCK,0,0,0,0
35,9,26,24,NOTE_BLOCK__BLOCK,1,0,0,0
35,9,30,24,NOTE_BLOCK__BLOCK,2,0,0,0
@@ -164,7 +164,7 @@ Adv2,INTERACTABLES,99,19,,,,,
40,9,26,0,NOTE_BLOCK__BLOCK,4,0,0,0
40,9,30,0,NOTE_BLOCK__BLOCK,5,0,0,0
42,9,12,1,SPRING__BIG_UPRIGHT,0,0,0,0
42,9,6,21,BOUNCY_CHAIN,0,0,0,0
42,9,6,21,CHORD,0,0,0,0
43,9,16,6,GRIND_RAIL__START_GROUND,-5,-3,10,3
43,9,4,23,SPRING__BIG_DOWNLEFT,1,0,0,0
45,9,2,12,NOTE_BLOCK__BLOCK,0,0,0,0
@@ -235,10 +235,10 @@ Adv2,INTERACTABLES,99,19,,,,,
44,11,21,20,SPRING__UP,1,0,0,0
44,11,17,20,SPRING__UP,0,0,0,0
45,11,24,6,SPRING__RIGHT,1,0,0,0
48,11,18,28,BOUNCY_CHAIN,0,0,0,0
48,11,18,28,CHORD,0,0,0,0
49,11,14,6,SPECIAL_RING,0,0,0,0
50,11,0,8,BOOSTER,0,0,0,0
51,11,30,16,BOUNCY_CHAIN,0,0,0,0
51,11,30,16,CHORD,0,0,0,0
53,11,11,13,TOGGLE__CHECKPOINT,0,0,0,0
53,11,20,8,GRIND_RAIL__END_ALTERNATE,-3,-3,6,3
54,11,0,8,GRIND_RAIL__START_GROUND,-5,-3,10,3
@@ -249,7 +249,7 @@ Adv2,INTERACTABLES,99,19,,,,,
60,11,6,26,NOTE_BLOCK__SPHERE,4,0,0,0
61,11,0,23,NOTE_BLOCK__SPHERE,7,0,0,0
64,11,10,14,GRIND_RAIL__START_AIR,-10,-3,20,3
64,11,4,28,BOUNCY_CHAIN,0,0,0,0
64,11,4,28,CHORD,0,0,0,0
39,12,22,12,SPRING__UP,2,0,0,0
39,12,18,12,SPRING__UP,2,0,0,0
40,12,8,6,SPRING__UP,0,0,0,0
@@ -278,8 +278,8 @@ Adv2,INTERACTABLES,99,19,,,,,
56,12,22,12,SPIKES__HIDING_UP,0,0,0,0
59,12,20,5,BOOSTER,5,1,0,0
60,12,12,28,SPRING__LEFT,1,0,0,0
62,12,26,20,BOUNCY_CHAIN,0,0,0,0
63,12,12,8,BOUNCY_CHAIN,0,0,0,0
62,12,26,20,CHORD,0,0,0,0
63,12,12,8,CHORD,0,0,0,0
66,12,9,20,GRIND_RAIL__END_AIR,-6,-3,12,3
66,12,3,24,SPRING__UP,0,0,0,0
48,13,22,16,SPRING__UP,1,0,0,0
@@ -335,7 +335,7 @@ Adv2,INTERACTABLES,99,19,,,,,
68,15,6,24,SPRING__UP,2,0,0,0
68,15,2,24,SPRING__UP,1,0,0,0
71,15,22,6,SPRING__SMALL_UPRIGHT,1,0,0,0
72,15,6,27,BOUNCY_CHAIN,0,0,0,0
72,15,6,27,CHORD,0,0,0,0
74,15,6,0,SPRING__UP,0,0,0,0
76,15,4,0,GRIND_RAIL__START_GROUND,-6,-3,12,3
60,16,30,16,SPRING__UP,0,0,0,0
@@ -358,8 +358,8 @@ Adv2,INTERACTABLES,99,19,,,,,
74,16,22,4,NOTE_BLOCK__BLOCK,3,0,0,0
74,16,26,4,NOTE_BLOCK__BLOCK,4,0,0,0
74,16,30,4,NOTE_BLOCK__BLOCK,5,0,0,0
75,16,0,4,BOUNCY_CHAIN,0,0,0,0
75,16,0,30,BOUNCY_CHAIN,0,0,0,0
75,16,0,4,CHORD,0,0,0,0
75,16,0,30,CHORD,0,0,0,0
75,16,26,22,SPRING__SMALL_UPRIGHT,1,0,0,0
77,16,20,1,GRIND_RAIL__END_AIR,-3,-3,6,3
78,16,2,16,NOTE_BLOCK__BLOCK,0,0,0,0
1 Adv2 INTERACTABLES 99 19
61 14 5 15 28 NOTE_BLOCK__SPHERE 2 0 0 0
62 14 5 26 26 NOTE_BLOCK__SPHERE 4 0 0 0
63 22 5 22 16 GRIND_RAIL__START_AIR -12 -3 24 3
64 22 5 10 23 BOUNCY_CHAIN CHORD 0 0 0 0
65 28 5 4 20 GRIND_RAIL__START_GROUND -12 -3 24 3
66 13 6 24 0 SPRING__UP 0 0 0 0
67 15 6 7 12 BOOSTER 0 0 0 0
95 21 7 18 4 NOTE_BLOCK__BLOCK 3 0 0 0
96 21 7 22 4 NOTE_BLOCK__BLOCK 4 0 0 0
97 21 7 26 4 NOTE_BLOCK__BLOCK 5 0 0 0
98 23 7 14 7 BOUNCY_CHAIN CHORD 0 0 0 0
99 30 7 24 4 GRIND_RAIL__END_AIR -12 -3 24 3
100 32 7 12 22 SPIKES__NORMAL_UP 0 0 0 0
101 33 7 6 24 GRIND_RAIL__START_AIR -12 -3 24 3
137 32 9 11 14 COMMON_THIN_PLATFORM 0 0 0 0
138 32 9 17 14 COMMON_THIN_PLATFORM 0 0 0 0
139 33 9 15 0 BOOSTER 0 0 0 0
140 33 9 6 15 BOUNCY_CHAIN CHORD 0 0 0 0
141 35 9 22 24 NOTE_BLOCK__BLOCK 0 0 0 0
142 35 9 26 24 NOTE_BLOCK__BLOCK 1 0 0 0
143 35 9 30 24 NOTE_BLOCK__BLOCK 2 0 0 0
164 40 9 26 0 NOTE_BLOCK__BLOCK 4 0 0 0
165 40 9 30 0 NOTE_BLOCK__BLOCK 5 0 0 0
166 42 9 12 1 SPRING__BIG_UPRIGHT 0 0 0 0
167 42 9 6 21 BOUNCY_CHAIN CHORD 0 0 0 0
168 43 9 16 6 GRIND_RAIL__START_GROUND -5 -3 10 3
169 43 9 4 23 SPRING__BIG_DOWNLEFT 1 0 0 0
170 45 9 2 12 NOTE_BLOCK__BLOCK 0 0 0 0
235 44 11 21 20 SPRING__UP 1 0 0 0
236 44 11 17 20 SPRING__UP 0 0 0 0
237 45 11 24 6 SPRING__RIGHT 1 0 0 0
238 48 11 18 28 BOUNCY_CHAIN CHORD 0 0 0 0
239 49 11 14 6 SPECIAL_RING 0 0 0 0
240 50 11 0 8 BOOSTER 0 0 0 0
241 51 11 30 16 BOUNCY_CHAIN CHORD 0 0 0 0
242 53 11 11 13 TOGGLE__CHECKPOINT 0 0 0 0
243 53 11 20 8 GRIND_RAIL__END_ALTERNATE -3 -3 6 3
244 54 11 0 8 GRIND_RAIL__START_GROUND -5 -3 10 3
249 60 11 6 26 NOTE_BLOCK__SPHERE 4 0 0 0
250 61 11 0 23 NOTE_BLOCK__SPHERE 7 0 0 0
251 64 11 10 14 GRIND_RAIL__START_AIR -10 -3 20 3
252 64 11 4 28 BOUNCY_CHAIN CHORD 0 0 0 0
253 39 12 22 12 SPRING__UP 2 0 0 0
254 39 12 18 12 SPRING__UP 2 0 0 0
255 40 12 8 6 SPRING__UP 0 0 0 0
278 56 12 22 12 SPIKES__HIDING_UP 0 0 0 0
279 59 12 20 5 BOOSTER 5 1 0 0
280 60 12 12 28 SPRING__LEFT 1 0 0 0
281 62 12 26 20 BOUNCY_CHAIN CHORD 0 0 0 0
282 63 12 12 8 BOUNCY_CHAIN CHORD 0 0 0 0
283 66 12 9 20 GRIND_RAIL__END_AIR -6 -3 12 3
284 66 12 3 24 SPRING__UP 0 0 0 0
285 48 13 22 16 SPRING__UP 1 0 0 0
335 68 15 6 24 SPRING__UP 2 0 0 0
336 68 15 2 24 SPRING__UP 1 0 0 0
337 71 15 22 6 SPRING__SMALL_UPRIGHT 1 0 0 0
338 72 15 6 27 BOUNCY_CHAIN CHORD 0 0 0 0
339 74 15 6 0 SPRING__UP 0 0 0 0
340 76 15 4 0 GRIND_RAIL__START_GROUND -6 -3 12 3
341 60 16 30 16 SPRING__UP 0 0 0 0
358 74 16 22 4 NOTE_BLOCK__BLOCK 3 0 0 0
359 74 16 26 4 NOTE_BLOCK__BLOCK 4 0 0 0
360 74 16 30 4 NOTE_BLOCK__BLOCK 5 0 0 0
361 75 16 0 4 BOUNCY_CHAIN CHORD 0 0 0 0
362 75 16 0 30 BOUNCY_CHAIN CHORD 0 0 0 0
363 75 16 26 22 SPRING__SMALL_UPRIGHT 1 0 0 0
364 77 16 20 1 GRIND_RAIL__END_AIR -3 -3 6 3
365 78 16 2 16 NOTE_BLOCK__BLOCK 0 0 0 0
@@ -44,7 +44,7 @@ Adv2,INTERACTABLES,105,16,,,,,
8,3,10,12,SPRING__UP,0,0,0,0
8,3,6,12,SPRING__UP,0,0,0,0
9,3,6,22,SPRING__RIGHT,2,0,0,0
12,3,12,27,BOUNCY_CHAIN,0,0,0,0
12,3,12,27,CHORD,0,0,0,0
12,3,12,3,SPRING__BIG_UPRIGHT,1,0,0,0
15,3,25,12,SPIKES__NORMAL_UP,0,0,0,0
16,3,13,4,PIPE_INSTRUMENT_ENTRY,4,0,0,0
@@ -91,7 +91,7 @@ Adv2,INTERACTABLES,105,16,,,,,
39,4,21,22,NOTE_BLOCK__SPHERE,4,0,0,0
39,4,29,23,NOTE_BLOCK__SPHERE,3,0,0,0
40,4,22,16,BOOSTER,0,0,0,0
40,4,10,31,BOUNCY_CHAIN,0,0,0,0
40,4,10,31,CHORD,0,0,0,0
40,4,7,28,SPECIAL_RING,0,0,0,0
12,5,30,26,SPRING__UP,0,0,0,0
12,5,26,26,SPRING__UP,1,0,0,0
@@ -101,7 +101,7 @@ Adv2,INTERACTABLES,105,16,,,,,
13,5,2,26,SPRING__UP,0,0,0,0
14,5,25,9,KEYBOARD_HORIZONTAL_LEFT,-17,-1,36,3
15,5,29,9,KEYBOARD_HORIZONTAL_LEFT,-17,-1,36,3
23,5,26,17,BOUNCY_CHAIN,0,0,0,0
23,5,26,17,CHORD,0,0,0,0
23,5,23,14,SPIKES__HIDING_UP,0,0,0,0
24,5,10,2,SPRING__UP,0,0,0,0
25,5,4,12,SPRING__RIGHT,1,0,0,0
@@ -156,7 +156,7 @@ Adv2,INTERACTABLES,105,16,,,,,
16,6,18,18,NOTE_BLOCK__BLOCK,2,0,0,0
16,6,22,18,NOTE_BLOCK__BLOCK,1,0,0,0
16,6,26,18,NOTE_BLOCK__BLOCK,0,0,0,0
20,6,8,27,BOUNCY_CHAIN,0,0,0,0
20,6,8,27,CHORD,0,0,0,0
21,6,25,16,TRUMPET_ENTRY,2,0,0,0
24,6,13,16,TRUMPET_ENTRY,1,0,0,0
29,6,30,0,SPRING__UP,1,4,1,1
@@ -244,7 +244,7 @@ Adv2,INTERACTABLES,105,16,,,,,
47,7,10,4,NOTE_BLOCK__BLOCK,3,0,0,0
47,7,14,4,NOTE_BLOCK__BLOCK,4,0,0,0
47,7,18,4,NOTE_BLOCK__BLOCK,5,0,0,0
48,7,12,1,BOUNCY_CHAIN,0,0,0,0
48,7,12,1,CHORD,0,0,0,0
51,7,24,22,GRIND_RAIL__END_ALTERNATE,-12,-3,24,3
52,7,19,16,CHECKPOINT,0,0,0,0
52,7,19,0,TOGGLE__CHECKPOINT,0,0,0,0
@@ -280,7 +280,7 @@ Adv2,INTERACTABLES,105,16,,,,,
44,8,21,24,TRUMPET_ENTRY,2,0,0,0
47,8,29,24,PIPE_INSTRUMENT_ENTRY,3,0,0,0
47,8,24,29,PIPE_INSTRUMENT_ENTRY,5,0,0,0
51,8,18,17,BOUNCY_CHAIN,0,0,0,0
51,8,18,17,CHORD,0,0,0,0
58,8,24,16,NOTE_BLOCK__SPHERE,2,0,0,0
59,8,2,15,NOTE_BLOCK__SPHERE,3,0,0,0
59,8,10,14,NOTE_BLOCK__SPHERE,4,0,0,0
@@ -329,7 +329,7 @@ Adv2,INTERACTABLES,105,16,,,,,
40,9,28,23,SPRING__RIGHT,2,0,0,0
43,9,18,30,BOOSTER,0,0,0,0
51,9,0,16,SPRING__RIGHT,0,0,0,0
60,9,6,21,BOUNCY_CHAIN,0,0,0,0
60,9,6,21,CHORD,0,0,0,0
61,9,14,24,SPIKES__HIDING_UP,0,0,0,0
62,9,27,31,NOTE_BLOCK__SPHERE,3,0,0,0
63,9,12,6,GRIND_RAIL__START_AIR,-12,-3,24,3
@@ -352,7 +352,7 @@ Adv2,INTERACTABLES,105,16,,,,,
73,9,25,0,BOOSTER,0,0,0,0
74,9,2,18,NOTE_BLOCK__BLOCK,1,0,0,0
74,9,6,18,NOTE_BLOCK__BLOCK,0,0,0,0
78,9,12,2,BOUNCY_CHAIN,0,0,0,0
78,9,12,2,CHORD,0,0,0,0
83,9,14,10,NOTE_BLOCK__SPHERE,0,0,0,0
83,9,6,10,NOTE_BLOCK__SPHERE,0,0,0,0
83,9,23,8,NOTE_BLOCK__SPHERE,2,0,0,0
@@ -391,7 +391,7 @@ Adv2,INTERACTABLES,105,16,,,,,
72,10,24,16,GRIND_RAIL__END_ALTERNATE,-12,-3,24,3
75,10,8,2,KEYBOARD_VERTICAL,1,-22,3,48
75,10,22,8,KEYBOARD_VERTICAL,-1,-19,3,39
78,10,12,13,BOUNCY_CHAIN,0,0,0,0
78,10,12,13,CHORD,0,0,0,0
78,10,22,10,SPRING__UP,0,0,0,0
80,10,21,8,TRUMPET_ENTRY,2,0,0,0
82,10,16,4,GRIND_RAIL__START_GROUND,-12,-3,24,3
@@ -435,7 +435,7 @@ Adv2,INTERACTABLES,105,16,,,,,
89,11,22,14,NOTE_BLOCK__BLOCK,3,0,0,0
89,11,26,14,NOTE_BLOCK__BLOCK,4,0,0,0
89,11,30,14,NOTE_BLOCK__BLOCK,5,0,0,0
90,11,6,5,BOUNCY_CHAIN,0,0,0,0
90,11,6,5,CHORD,0,0,0,0
63,12,10,12,SPRING__UP,2,0,0,0
66,12,27,0,SPRING__UP,0,0,0,0
73,12,29,4,TRUMPET_ENTRY,1,0,0,0
1 Adv2 INTERACTABLES 105 16
44 8 3 10 12 SPRING__UP 0 0 0 0
45 8 3 6 12 SPRING__UP 0 0 0 0
46 9 3 6 22 SPRING__RIGHT 2 0 0 0
47 12 3 12 27 BOUNCY_CHAIN CHORD 0 0 0 0
48 12 3 12 3 SPRING__BIG_UPRIGHT 1 0 0 0
49 15 3 25 12 SPIKES__NORMAL_UP 0 0 0 0
50 16 3 13 4 PIPE_INSTRUMENT_ENTRY 4 0 0 0
91 39 4 21 22 NOTE_BLOCK__SPHERE 4 0 0 0
92 39 4 29 23 NOTE_BLOCK__SPHERE 3 0 0 0
93 40 4 22 16 BOOSTER 0 0 0 0
94 40 4 10 31 BOUNCY_CHAIN CHORD 0 0 0 0
95 40 4 7 28 SPECIAL_RING 0 0 0 0
96 12 5 30 26 SPRING__UP 0 0 0 0
97 12 5 26 26 SPRING__UP 1 0 0 0
101 13 5 2 26 SPRING__UP 0 0 0 0
102 14 5 25 9 KEYBOARD_HORIZONTAL_LEFT -17 -1 36 3
103 15 5 29 9 KEYBOARD_HORIZONTAL_LEFT -17 -1 36 3
104 23 5 26 17 BOUNCY_CHAIN CHORD 0 0 0 0
105 23 5 23 14 SPIKES__HIDING_UP 0 0 0 0
106 24 5 10 2 SPRING__UP 0 0 0 0
107 25 5 4 12 SPRING__RIGHT 1 0 0 0
156 16 6 18 18 NOTE_BLOCK__BLOCK 2 0 0 0
157 16 6 22 18 NOTE_BLOCK__BLOCK 1 0 0 0
158 16 6 26 18 NOTE_BLOCK__BLOCK 0 0 0 0
159 20 6 8 27 BOUNCY_CHAIN CHORD 0 0 0 0
160 21 6 25 16 TRUMPET_ENTRY 2 0 0 0
161 24 6 13 16 TRUMPET_ENTRY 1 0 0 0
162 29 6 30 0 SPRING__UP 1 4 1 1
244 47 7 10 4 NOTE_BLOCK__BLOCK 3 0 0 0
245 47 7 14 4 NOTE_BLOCK__BLOCK 4 0 0 0
246 47 7 18 4 NOTE_BLOCK__BLOCK 5 0 0 0
247 48 7 12 1 BOUNCY_CHAIN CHORD 0 0 0 0
248 51 7 24 22 GRIND_RAIL__END_ALTERNATE -12 -3 24 3
249 52 7 19 16 CHECKPOINT 0 0 0 0
250 52 7 19 0 TOGGLE__CHECKPOINT 0 0 0 0
280 44 8 21 24 TRUMPET_ENTRY 2 0 0 0
281 47 8 29 24 PIPE_INSTRUMENT_ENTRY 3 0 0 0
282 47 8 24 29 PIPE_INSTRUMENT_ENTRY 5 0 0 0
283 51 8 18 17 BOUNCY_CHAIN CHORD 0 0 0 0
284 58 8 24 16 NOTE_BLOCK__SPHERE 2 0 0 0
285 59 8 2 15 NOTE_BLOCK__SPHERE 3 0 0 0
286 59 8 10 14 NOTE_BLOCK__SPHERE 4 0 0 0
329 40 9 28 23 SPRING__RIGHT 2 0 0 0
330 43 9 18 30 BOOSTER 0 0 0 0
331 51 9 0 16 SPRING__RIGHT 0 0 0 0
332 60 9 6 21 BOUNCY_CHAIN CHORD 0 0 0 0
333 61 9 14 24 SPIKES__HIDING_UP 0 0 0 0
334 62 9 27 31 NOTE_BLOCK__SPHERE 3 0 0 0
335 63 9 12 6 GRIND_RAIL__START_AIR -12 -3 24 3
352 73 9 25 0 BOOSTER 0 0 0 0
353 74 9 2 18 NOTE_BLOCK__BLOCK 1 0 0 0
354 74 9 6 18 NOTE_BLOCK__BLOCK 0 0 0 0
355 78 9 12 2 BOUNCY_CHAIN CHORD 0 0 0 0
356 83 9 14 10 NOTE_BLOCK__SPHERE 0 0 0 0
357 83 9 6 10 NOTE_BLOCK__SPHERE 0 0 0 0
358 83 9 23 8 NOTE_BLOCK__SPHERE 2 0 0 0
391 72 10 24 16 GRIND_RAIL__END_ALTERNATE -12 -3 24 3
392 75 10 8 2 KEYBOARD_VERTICAL 1 -22 3 48
393 75 10 22 8 KEYBOARD_VERTICAL -1 -19 3 39
394 78 10 12 13 BOUNCY_CHAIN CHORD 0 0 0 0
395 78 10 22 10 SPRING__UP 0 0 0 0
396 80 10 21 8 TRUMPET_ENTRY 2 0 0 0
397 82 10 16 4 GRIND_RAIL__START_GROUND -12 -3 24 3
435 89 11 22 14 NOTE_BLOCK__BLOCK 3 0 0 0
436 89 11 26 14 NOTE_BLOCK__BLOCK 4 0 0 0
437 89 11 30 14 NOTE_BLOCK__BLOCK 5 0 0 0
438 90 11 6 5 BOUNCY_CHAIN CHORD 0 0 0 0
439 63 12 10 12 SPRING__UP 2 0 0 0
440 66 12 27 0 SPRING__UP 0 0 0 0
441 73 12 29 4 TRUMPET_ENTRY 1 0 0 0
+1 -1
View File
@@ -266,7 +266,7 @@
#define SA2_ANIM_SPRING_MUS_PLA_2 573
#define SA2_ANIM_PLATFORM_SQUARE_MUS_PLA 574
#define SA2_ANIM_NOTE_BLOCK 575
#define SA2_ANIM_VARIANT_NOTE_BLOCK_CHAIN_LINK 15
#define SA2_ANIM_VARIANT_NOTE_BLOCK_CHORD_ELEM 15
#define SA2_ANIM_NOTE_PARTICLES 576
#define SA2_ANIM_VARIANT_NOTE_H 0
#define SA2_ANIM_VARIANT_NOTE_V 1
+1 -1
View File
@@ -62,7 +62,7 @@
#define IA__FLOATING_SPRING 55
#define IA__NOTE_BLOCK__SPHERE 56
#define IA__NOTE_BLOCK__BLOCK 57
#define IA__BOUNCY_CHAIN 58
#define IA__CHORD 58
#define IA__KEYBOARD_VERTICAL 59
#define IA__KEYBOARD_HORIZONTAL_LEFT 60
#define IA__KEYBOARD_HORIZONTAL_RIGHT 61
+1 -1
View File
@@ -272,7 +272,7 @@
#define SE_MUSIC_PLANT_ENTER_HORN2 321
#define SE_MUSIC_PLANT_EXIT_HORN2 322
#define SE_MUSIC_PLANT_HORN3 323
#define SE_MUSIC_PLANT_BOUNCY_CHAIN 324
#define SE_MUSIC_PLANT_CHORD 324
#define SE_MUSIC_PLANT_PIANO 325
#define SE_MUSIC_PLANT_FLUTE_1 326
#define SE_MUSIC_PLANT_FLUTE_2 327
@@ -1,10 +0,0 @@
#ifndef GUARD_INTERACTABLE_BOUNCY_CHAIN_H
#define GUARD_INTERACTABLE_BOUNCY_CHAIN_H
#include "global.h"
#include "game/entity.h"
void CreateEntity_BouncyChain(MapEntity *, u16, u16, u8);
#endif
@@ -0,0 +1,10 @@
#ifndef GUARD_INTERACTABLE_CHORD_H
#define GUARD_INTERACTABLE_CHORD_H
#include "global.h"
#include "game/entity.h"
void CreateEntity_Chord(MapEntity *, u16, u16, u8);
#endif
+2 -2
View File
@@ -279,7 +279,7 @@ SECTIONS
src/game/interactables_2/hot_crater/floating_spring.o(.text);
src/game/interactables_2/music_plant/note_sphere.o(.text);
src/game/interactables_2/music_plant/note_block.o(.text);
src/game/interactables_2/music_plant/bouncy_chain.o(.text);
src/game/interactables_2/music_plant/chord.o(.text);
src/game/interactables_2/music_plant/keyboard.o(.text);
src/game/interactables_2/music_plant/german_flute.o(.text);
src/game/interactables_2/music_plant/pipe_horn.o(.text);
@@ -768,7 +768,7 @@ SECTIONS
sound/songs/midi/se_music_plant_enter_horn2.o(.rodata);
sound/songs/midi/se_music_plant_exit_horn2.o(.rodata);
sound/songs/midi/se_music_plant_horn3.o(.rodata);
sound/songs/midi/se_music_plant_bouncy_chain.o(.rodata);
sound/songs/midi/se_music_plant_chord.o(.rodata);
sound/songs/midi/se_music_plant_piano.o(.rodata);
sound/songs/midi/se_music_plant_flute_1.o(.rodata);
sound/songs/midi/se_music_plant_flute_2.o(.rodata);
+1 -1
View File
@@ -700,7 +700,7 @@ $(MID_SUBDIR)/se_music_plant_exit_horn2.s: %.s: %.mid
$(MID_SUBDIR)/se_music_plant_horn3.s: %.s: %.mid
$(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -P20 -V120
$(MID_SUBDIR)/se_music_plant_bouncy_chain.s: %.s: %.mid
$(MID_SUBDIR)/se_music_plant_chord.s: %.s: %.mid
$(MID2AGB) $< $@ -C $(MIDI_COMMENTS) -E -R$(STD_REVERB) -G6 -P20 -V127
$(MID_SUBDIR)/se_music_plant_piano.s: %.s: %.mid
+1 -1
View File
@@ -649,7 +649,7 @@ mAlignWord
mAlignWord
song C_DECL(se_music_plant_horn3), 2, 2
mAlignWord
song C_DECL(se_music_plant_bouncy_chain), 2, 2
song C_DECL(se_music_plant_chord), 2, 2
mAlignWord
song C_DECL(se_music_plant_piano), 2, 2
mAlignWord
@@ -1,333 +0,0 @@
#include "global.h"
#include "core.h"
#include "lib/m4a/m4a.h"
#include "sprite.h"
#include "game/entity.h"
#include "task.h"
#include "game/stage/player.h"
#include "game/stage/camera.h"
#include "game/interactables_2/music_plant/bouncy_chain.h"
#include "constants/animations.h"
#include "constants/char_states.h"
#include "constants/player_transitions.h"
#include "constants/songs.h"
#define NUM_BOUNCY_CHAIN_LINKS 6
#define CHAIN_WIDTH_PX (NUM_BOUNCY_CHAIN_LINKS * TILE_WIDTH)
#define BOUNCE_MIN_ACCEL Q_8_8(4.0)
#define BOUNCE_MAX_ACCEL Q_8_8(12.0)
typedef struct {
s16 x;
s16 y;
// spike of oscillation
s16 peak;
} ChainLink;
typedef struct {
/* 0x00 */ ChainLink links[NUM_BOUNCY_CHAIN_LINKS];
/* 0x30 */ SpriteBase base;
/* 0x3C */ Sprite s;
/* 0x6C */ s32 posX;
/* 0x70 */ s32 posY;
/* 0x74 */ s16 bounceAccel;
} Sprite_BouncyChain; /* size 0x78 */
static void Task_Idle(void);
static void TaskDestructor_BouncyChain(struct Task *);
static void Render(Sprite_BouncyChain *);
static bool32 PlayerIsHittingChain(Sprite_BouncyChain *);
static void LaunchPlayer(Sprite_BouncyChain *);
static void HandleVibrateFinished(Sprite_BouncyChain *);
static void ResetChainAndHandleBounce(Sprite_BouncyChain *);
static void SetPlayerBouncePosition(Sprite_BouncyChain *);
static bool32 ShouldDespawn(Sprite_BouncyChain *);
void CreateEntity_BouncyChain(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
{
struct Task *t = TaskCreate(Task_Idle, sizeof(Sprite_BouncyChain), 0x2010, 0, TaskDestructor_BouncyChain);
Sprite_BouncyChain *chain = TASK_DATA(t);
Sprite *s = &chain->s;
u16 i;
chain->base.regionX = spriteRegionX;
chain->base.regionY = spriteRegionY;
chain->base.me = me;
chain->base.spriteX = me->x;
chain->base.id = spriteY;
SPRITE_INIT_WITHOUT_ANIM_OR_VRAM(s, 18, 2, 0);
s->graphics.dest = (void *)(OBJ_VRAM0 + 0x3700);
s->graphics.anim = SA2_ANIM_NOTE_BLOCK;
s->variant = SA2_ANIM_VARIANT_NOTE_BLOCK_CHAIN_LINK;
chain->posX = TO_WORLD_POS(me->x, spriteRegionX);
chain->posY = TO_WORLD_POS(me->y, spriteRegionY);
SET_MAP_ENTITY_INITIALIZED(me);
UpdateSpriteAnimation(s);
for (i = 0; i < NUM_BOUNCY_CHAIN_LINKS; i++) {
ChainLink *link = &chain->links[i];
s16 offsetX = Q_8_8(i * TILE_WIDTH);
s16 offsetY = 0;
link->x = offsetX;
link->y = offsetY;
switch (i) {
case 0:
case 5: {
link->peak = Q_8_8(0);
} break;
case 1:
case 4: {
link->peak = Q_8_8(0.5);
} break;
case 2:
case 3: {
link->peak = Q_8_8(0.5);
// Required for match
link->peak *= 2;
} break;
}
}
}
static void Task_Bounce(void)
{
u8 r7 = 0;
Sprite_BouncyChain *chain = TASK_DATA(gCurTask);
u8 i;
SetPlayerBouncePosition(chain);
for (i = 0; i < NUM_BOUNCY_CHAIN_LINKS; i++) {
ChainLink *link = &chain->links[i];
s16 r1 = I((chain->bounceAccel - link->y) * link->peak);
if (r1 <= link->y) {
r7++;
} else {
r1 = (r1 - link->y) >> 2;
if (r1 < Q_8_8(0.5)) {
r1 = Q_8_8(0.5);
}
link->y += r1;
}
}
if (PLAYER_IS_ALIVE) {
gPlayer.qWorldY = Q(chain->posY - 16) + chain->links[2].y;
gPlayer.rotation = 64;
}
if (r7 == NUM_BOUNCY_CHAIN_LINKS) {
LaunchPlayer(chain);
}
Render(chain);
}
static void Task_Vibrate(void)
{
u8 r5 = 0;
Sprite_BouncyChain *chain = TASK_DATA(gCurTask);
u8 i;
for (i = 0; i < NUM_BOUNCY_CHAIN_LINKS; i++) {
ChainLink *link = &chain->links[i];
u16 r2 = link->y;
if (link->y == 0) {
r5++;
} else {
if (link->y > 0) {
u32 value = r2 - Q_8_8(1);
r2 = 0;
link->y = value;
if (link->y < 0)
link->y = 0;
} else {
u32 value = r2 + Q_8_8(1);
r2 = 0;
link->y = value;
if (link->y > 0)
link->y = r2;
}
link->y = -link->y;
}
}
if (r5 == NUM_BOUNCY_CHAIN_LINKS) {
HandleVibrateFinished(chain);
}
if (PlayerIsHittingChain(chain)) {
ResetChainAndHandleBounce(chain);
}
Render(chain);
}
static void HandleBounce(Sprite_BouncyChain *chain)
{
if (PLAYER_IS_ALIVE) {
Player_SetMovestate_IsInScriptedSequence();
gPlayer.moveState |= MOVESTATE_IA_OVERRIDE;
gPlayer.charState = CHARSTATE_SPIN_ATTACK;
gPlayer.qSpeedAirX = 0;
gPlayer.qSpeedAirY = (s32)(gPlayer.qSpeedAirY * 3) >> 1;
CLAMP_INLINE(gPlayer.qSpeedAirY, BOUNCE_MIN_ACCEL, BOUNCE_MAX_ACCEL);
}
chain->bounceAccel = (u16)gPlayer.qSpeedAirY * 2;
if (chain->bounceAccel < BOUNCE_MIN_ACCEL) {
chain->bounceAccel = BOUNCE_MIN_ACCEL;
}
gCurTask->main = Task_Bounce;
}
static void Render(Sprite_BouncyChain *chain)
{
Sprite *s = &chain->s;
u8 i;
for (i = 0; i < NUM_BOUNCY_CHAIN_LINKS; i++) {
ChainLink *link = &chain->links[i];
s16 elY = ABS(link->y) >> 3;
s32 r2, r1;
if (i > 2)
elY = -elY;
r2 = chain->posX + 4;
r2 += I(link->x + elY);
r2 -= gCamera.x;
s->x = r2;
r1 = chain->posY;
r1 += I(link->y);
r1 -= gCamera.y;
s->y = r1;
DisplaySprite(s);
}
}
static bool32 PlayerIsHittingChain(Sprite_BouncyChain *chain)
{
if (PLAYER_IS_ALIVE && gPlayer.qSpeedAirY > 0) {
s16 screenX = chain->posX - gCamera.x;
s16 screenY = chain->posY - gCamera.y;
s16 playerX = I(gPlayer.qWorldX) - gCamera.x;
s16 playerY = I(gPlayer.qWorldY) - gCamera.y;
if ((screenX <= playerX) && ((screenX + CHAIN_WIDTH_PX) >= playerX) && ((screenY - 9) <= playerY) && ((screenY + 9) >= playerY)) {
return TRUE;
}
}
return FALSE;
}
static void Task_Idle(void)
{
Sprite_BouncyChain *chain = TASK_DATA(gCurTask);
if (PlayerIsHittingChain(chain)) {
HandleBounce(chain);
}
if (ShouldDespawn(chain)) {
chain->base.me->x = chain->base.spriteX;
TaskDestroy(gCurTask);
return;
}
Render(chain);
}
static void TaskDestructor_BouncyChain(struct Task UNUSED *t) { }
static void LaunchPlayer(Sprite_BouncyChain UNUSED *chain)
{
if (PLAYER_IS_ALIVE) {
Player_ClearMovestate_IsInScriptedSequence();
gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE;
gPlayer.transition = PLTRANS_UNCURL;
gPlayer.qSpeedAirY = -gPlayer.qSpeedAirY;
m4aSongNumStart(SE_MUSIC_PLANT_BOUNCY_CHAIN);
}
gCurTask->main = Task_Vibrate;
}
static void HandleVibrateFinished(Sprite_BouncyChain UNUSED *chain) { gCurTask->main = Task_Idle; }
static void ResetChainAndHandleBounce(Sprite_BouncyChain *chain)
{
u8 i;
for (i = 0; i < NUM_BOUNCY_CHAIN_LINKS; i++) {
ChainLink *link = &chain->links[i];
link->y = 0;
}
HandleBounce(chain);
}
// Because assigning it to a variable doesn't match...
#define LOCAL_CHAIN_MARGIN (Q(chain->posX + (CHAIN_WIDTH_PX / 2)))
static void SetPlayerBouncePosition(Sprite_BouncyChain *chain)
{
if (PLAYER_IS_ALIVE) {
if (gPlayer.qWorldX != LOCAL_CHAIN_MARGIN) {
if (gPlayer.qWorldX > LOCAL_CHAIN_MARGIN) {
gPlayer.qWorldX -= Q(0.5);
if (gPlayer.qWorldX < LOCAL_CHAIN_MARGIN)
gPlayer.qWorldX = LOCAL_CHAIN_MARGIN;
} else {
gPlayer.qWorldX += Q(0.5);
if (gPlayer.qWorldX > LOCAL_CHAIN_MARGIN)
gPlayer.qWorldX = LOCAL_CHAIN_MARGIN;
}
}
}
}
#undef LOCAL_CHAIN_MARGIN
static bool32 ShouldDespawn(Sprite_BouncyChain *chain)
{
s32 screenX, screenY;
s16 otherX, otherY;
screenX = chain->posX;
screenX -= gCamera.x;
screenY = chain->posY;
screenY -= gCamera.y;
otherY = screenY;
otherX = screenX;
if (IS_OUT_OF_RANGE_2(otherX, otherY, (CAM_REGION_WIDTH + (CHAIN_WIDTH_PX / 2)) / 2, CAM_REGION_WIDTH / 2)) {
return TRUE;
}
return FALSE;
}
@@ -0,0 +1,333 @@
#include "global.h"
#include "core.h"
#include "lib/m4a/m4a.h"
#include "sprite.h"
#include "game/entity.h"
#include "task.h"
#include "game/stage/player.h"
#include "game/stage/camera.h"
#include "game/interactables_2/music_plant/chord.h"
#include "constants/animations.h"
#include "constants/char_states.h"
#include "constants/player_transitions.h"
#include "constants/songs.h"
#define NUM_CHORD_ELEMENTS 6
#define CHORD_WIDTH_PX (NUM_CHORD_ELEMENTS * TILE_WIDTH)
#define BOUNCE_MIN_ACCEL Q_8_8(4.0)
#define BOUNCE_MAX_ACCEL Q_8_8(12.0)
typedef struct {
s16 x;
s16 y;
// spike of oscillation
s16 peak;
} ChordElement;
typedef struct {
/* 0x00 */ ChordElement elements[NUM_CHORD_ELEMENTS];
/* 0x30 */ SpriteBase base;
/* 0x3C */ Sprite s;
/* 0x6C */ s32 posX;
/* 0x70 */ s32 posY;
/* 0x74 */ s16 bounceAccel;
} Sprite_Chord; /* size 0x78 */
static void Task_Idle(void);
static void TaskDestructor_Chord(struct Task *);
static void Render(Sprite_Chord *);
static bool32 PlayerIsHittingChord(Sprite_Chord *);
static void LaunchPlayer(Sprite_Chord *);
static void HandleVibrateFinished(Sprite_Chord *);
static void ResetChordAndHandleBounce(Sprite_Chord *);
static void SetPlayerBouncePosition(Sprite_Chord *);
static bool32 ShouldDespawn(Sprite_Chord *);
void CreateEntity_Chord(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
{
struct Task *t = TaskCreate(Task_Idle, sizeof(Sprite_Chord), 0x2010, 0, TaskDestructor_Chord);
Sprite_Chord *chord = TASK_DATA(t);
Sprite *s = &chord->s;
u16 i;
chord->base.regionX = spriteRegionX;
chord->base.regionY = spriteRegionY;
chord->base.me = me;
chord->base.spriteX = me->x;
chord->base.id = spriteY;
SPRITE_INIT_WITHOUT_ANIM_OR_VRAM(s, 18, 2, 0);
s->graphics.dest = (void *)(OBJ_VRAM0 + 0x3700);
s->graphics.anim = SA2_ANIM_NOTE_BLOCK;
s->variant = SA2_ANIM_VARIANT_NOTE_BLOCK_CHORD_ELEM;
chord->posX = TO_WORLD_POS(me->x, spriteRegionX);
chord->posY = TO_WORLD_POS(me->y, spriteRegionY);
SET_MAP_ENTITY_INITIALIZED(me);
UpdateSpriteAnimation(s);
for (i = 0; i < NUM_CHORD_ELEMENTS; i++) {
ChordElement *element = &chord->elements[i];
s16 offsetX = Q_8_8(i * TILE_WIDTH);
s16 offsetY = 0;
element->x = offsetX;
element->y = offsetY;
switch (i) {
case 0:
case 5: {
element->peak = Q_8_8(0);
} break;
case 1:
case 4: {
element->peak = Q_8_8(0.5);
} break;
case 2:
case 3: {
element->peak = Q_8_8(0.5);
// Required for match
element->peak *= 2;
} break;
}
}
}
static void Task_Bounce(void)
{
u8 r7 = 0;
Sprite_Chord *chord = TASK_DATA(gCurTask);
u8 i;
SetPlayerBouncePosition(chord);
for (i = 0; i < NUM_CHORD_ELEMENTS; i++) {
ChordElement *element = &chord->elements[i];
s16 r1 = I((chord->bounceAccel - element->y) * element->peak);
if (r1 <= element->y) {
r7++;
} else {
r1 = (r1 - element->y) >> 2;
if (r1 < Q_8_8(0.5)) {
r1 = Q_8_8(0.5);
}
element->y += r1;
}
}
if (PLAYER_IS_ALIVE) {
gPlayer.qWorldY = Q(chord->posY - 16) + chord->elements[2].y;
gPlayer.rotation = 64;
}
if (r7 == NUM_CHORD_ELEMENTS) {
LaunchPlayer(chord);
}
Render(chord);
}
static void Task_Vibrate(void)
{
u8 r5 = 0;
Sprite_Chord *chord = TASK_DATA(gCurTask);
u8 i;
for (i = 0; i < NUM_CHORD_ELEMENTS; i++) {
ChordElement *element = &chord->elements[i];
u16 r2 = element->y;
if (element->y == 0) {
r5++;
} else {
if (element->y > 0) {
u32 value = r2 - Q_8_8(1);
r2 = 0;
element->y = value;
if (element->y < 0)
element->y = 0;
} else {
u32 value = r2 + Q_8_8(1);
r2 = 0;
element->y = value;
if (element->y > 0)
element->y = r2;
}
element->y = -element->y;
}
}
if (r5 == NUM_CHORD_ELEMENTS) {
HandleVibrateFinished(chord);
}
if (PlayerIsHittingChord(chord)) {
ResetChordAndHandleBounce(chord);
}
Render(chord);
}
static void HandleBounce(Sprite_Chord *chord)
{
if (PLAYER_IS_ALIVE) {
Player_SetMovestate_IsInScriptedSequence();
gPlayer.moveState |= MOVESTATE_IA_OVERRIDE;
gPlayer.charState = CHARSTATE_SPIN_ATTACK;
gPlayer.qSpeedAirX = 0;
gPlayer.qSpeedAirY = (s32)(gPlayer.qSpeedAirY * 3) >> 1;
CLAMP_INLINE(gPlayer.qSpeedAirY, BOUNCE_MIN_ACCEL, BOUNCE_MAX_ACCEL);
}
chord->bounceAccel = (u16)gPlayer.qSpeedAirY * 2;
if (chord->bounceAccel < BOUNCE_MIN_ACCEL) {
chord->bounceAccel = BOUNCE_MIN_ACCEL;
}
gCurTask->main = Task_Bounce;
}
static void Render(Sprite_Chord *chord)
{
Sprite *s = &chord->s;
u8 i;
for (i = 0; i < NUM_CHORD_ELEMENTS; i++) {
ChordElement *element = &chord->elements[i];
s16 elY = ABS(element->y) >> 3;
s32 r2, r1;
if (i > 2)
elY = -elY;
r2 = chord->posX + 4;
r2 += I(element->x + elY);
r2 -= gCamera.x;
s->x = r2;
r1 = chord->posY;
r1 += I(element->y);
r1 -= gCamera.y;
s->y = r1;
DisplaySprite(s);
}
}
static bool32 PlayerIsHittingChord(Sprite_Chord *chord)
{
if (PLAYER_IS_ALIVE && gPlayer.qSpeedAirY > 0) {
s16 screenX = chord->posX - gCamera.x;
s16 screenY = chord->posY - gCamera.y;
s16 playerX = I(gPlayer.qWorldX) - gCamera.x;
s16 playerY = I(gPlayer.qWorldY) - gCamera.y;
if ((screenX <= playerX) && ((screenX + CHORD_WIDTH_PX) >= playerX) && ((screenY - 9) <= playerY) && ((screenY + 9) >= playerY)) {
return TRUE;
}
}
return FALSE;
}
static void Task_Idle(void)
{
Sprite_Chord *chord = TASK_DATA(gCurTask);
if (PlayerIsHittingChord(chord)) {
HandleBounce(chord);
}
if (ShouldDespawn(chord)) {
chord->base.me->x = chord->base.spriteX;
TaskDestroy(gCurTask);
return;
}
Render(chord);
}
static void TaskDestructor_Chord(struct Task UNUSED *t) { }
static void LaunchPlayer(Sprite_Chord UNUSED *chord)
{
if (PLAYER_IS_ALIVE) {
Player_ClearMovestate_IsInScriptedSequence();
gPlayer.moveState &= ~MOVESTATE_IA_OVERRIDE;
gPlayer.transition = PLTRANS_UNCURL;
gPlayer.qSpeedAirY = -gPlayer.qSpeedAirY;
m4aSongNumStart(SE_MUSIC_PLANT_CHORD);
}
gCurTask->main = Task_Vibrate;
}
static void HandleVibrateFinished(Sprite_Chord UNUSED *chord) { gCurTask->main = Task_Idle; }
static void ResetChordAndHandleBounce(Sprite_Chord *chord)
{
u8 i;
for (i = 0; i < NUM_CHORD_ELEMENTS; i++) {
ChordElement *element = &chord->elements[i];
element->y = 0;
}
HandleBounce(chord);
}
// Because assigning it to a variable doesn't match...
#define LOCAL_CHORD_ELEMENT_MARGIN (Q(chord->posX + (CHORD_WIDTH_PX / 2)))
static void SetPlayerBouncePosition(Sprite_Chord *chord)
{
if (PLAYER_IS_ALIVE) {
if (gPlayer.qWorldX != LOCAL_CHORD_ELEMENT_MARGIN) {
if (gPlayer.qWorldX > LOCAL_CHORD_ELEMENT_MARGIN) {
gPlayer.qWorldX -= Q(0.5);
if (gPlayer.qWorldX < LOCAL_CHORD_ELEMENT_MARGIN)
gPlayer.qWorldX = LOCAL_CHORD_ELEMENT_MARGIN;
} else {
gPlayer.qWorldX += Q(0.5);
if (gPlayer.qWorldX > LOCAL_CHORD_ELEMENT_MARGIN)
gPlayer.qWorldX = LOCAL_CHORD_ELEMENT_MARGIN;
}
}
}
}
#undef LOCAL_CHORD_ELEMENT_MARGIN
static bool32 ShouldDespawn(Sprite_Chord *chord)
{
s32 screenX, screenY;
s16 otherX, otherY;
screenX = chord->posX;
screenX -= gCamera.x;
screenY = chord->posY;
screenY -= gCamera.y;
otherY = screenY;
otherX = screenX;
if (IS_OUT_OF_RANGE_2(otherX, otherY, (CAM_REGION_WIDTH + (CHORD_WIDTH_PX / 2)) / 2, CAM_REGION_WIDTH / 2)) {
return TRUE;
}
return FALSE;
}
+2 -2
View File
@@ -48,7 +48,7 @@
#include "game/interactables_2/music_plant/pipe_horn.h"
#include "game/interactables_2/music_plant/keyboard.h"
#include "game/interactables_2/music_plant/note_block.h"
#include "game/interactables_2/music_plant/bouncy_chain.h"
#include "game/interactables_2/music_plant/chord.h"
#include "game/interactables_2/music_plant/german_flute.h"
#include "game/interactables_2/ice_paradise/big_snowball.h"
@@ -323,7 +323,7 @@ const MapEntityInit gSpriteInits_Interactables[] = {
CreateEntity_FloatingSpring_Up,
CreateEntity_NoteSphere,
CreateEntity_NoteBlock,
CreateEntity_BouncyChain,
CreateEntity_Chord,
CreateEntity_Keyboard_Vertical,
CreateEntity_Keyboard_Horizontal_PushLeft,
CreateEntity_Keyboard_Horizontal_PushRight,
+4 -4
View File
@@ -13,8 +13,8 @@
/* TODO: Make including <entity>.h from game code work */
//From "game/interactables_2/music_plant/bouncy_chain.h"
#define NUM_BOUNCY_CHAIN_ELEMS 6
//From "game/interactables_2/music_plant/chord.h"
#define NUM_CHORD_ELEMS 6
// From light_bridge.h
#define BRIDGE_SEGMENT_WIDTH 12
@@ -163,8 +163,8 @@ DrawEntInteractableSA2(AppState *state, int x, int y, int kind, char data[4])
#if 0
// NOTE: The frame for the bouncy chain elements is in
// variant 15 of NOTE_BLOCK, for some reason.
case IA__BOUNCY_CHAIN: {
for(int i = 0; i < NUM_BOUNCY_CHAIN_ELEMS; i++) {
case IA__CHORD: {
for(int i = 0; i < NUM_CHORD_ELEMS; i++) {
}
} break;