sa2: propeller_spring -> flying_spring, document flying spring and em level task

This commit is contained in:
Oliver Bell committed 2026-05-27 00:59:34 +01:00
1 parent 978cf77612
commit 5efb59352f
13 files changed
+408 -405

No files matched your search

+2 -2
View File
@@ -234,7 +234,7 @@
"clear_pipe.h": "c",
"slowing_snow.h": "c",
"handlers_ia_pipe_horn_sequences.h": "c",
"sky_canyon_init.h": "c",
"sky_canyon_level_task.h": "c",
"mon.h": "c",
"kura_kura.h": "c",
"star.h": "c",
@@ -325,7 +325,7 @@
"kubinaga.h": "c",
"propeller.h": "c",
"game_3.h": "c",
"propeller_spring.h": "c",
"flying_spring.h": "c",
"sprite_data.h": "c",
"game_2.h": "c",
"palette_loader.h": "c",
@@ -3,20 +3,20 @@ Adv2,INTERACTABLES,65,20,,,,,
32,0,8,6,SPECIAL_RING,0,0,0,0
33,0,30,17,PLATFORM_SQUARE,0,-4,0,8
33,0,13,17,PLATFORM_SQUARE,-4,0,8,0
34,0,11,20,PROPELLER_SPRING,0,0,0,0
34,0,22,16,PROPELLER_SPRING,0,0,0,0
34,0,11,20,FLYING_SPRING,0,0,0,0
34,0,22,16,FLYING_SPRING,0,0,0,0
35,0,29,24,SPIKES__HIDING_UP,0,0,0,0
35,0,13,24,PROPELLER_SPRING,0,0,0,0
35,0,1,21,PROPELLER_SPRING,0,0,0,0
36,0,11,25,PROPELLER_SPRING,0,0,0,0
36,0,23,21,PROPELLER_SPRING,0,0,0,0
37,0,2,26,PROPELLER_SPRING,0,0,0,0
37,0,14,22,PROPELLER_SPRING,0,0,0,0
37,0,26,26,PROPELLER_SPRING,0,0,0,0
35,0,13,24,FLYING_SPRING,0,0,0,0
35,0,1,21,FLYING_SPRING,0,0,0,0
36,0,11,25,FLYING_SPRING,0,0,0,0
36,0,23,21,FLYING_SPRING,0,0,0,0
37,0,2,26,FLYING_SPRING,0,0,0,0
37,0,14,22,FLYING_SPRING,0,0,0,0
37,0,26,26,FLYING_SPRING,0,0,0,0
42,0,12,30,GRIND_RAIL__START_AIR,-12,-3,24,3
46,0,22,31,PROPELLER_SPRING,0,0,0,0
47,0,1,29,PROPELLER_SPRING,0,0,0,0
47,0,14,31,PROPELLER_SPRING,0,0,0,0
46,0,22,31,FLYING_SPRING,0,0,0,0
47,0,1,29,FLYING_SPRING,0,0,0,0
47,0,14,31,FLYING_SPRING,0,0,0,0
50,0,8,28,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,22
50,0,8,24,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,24,4
50,0,12,28,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,24
@@ -83,9 +83,9 @@ Adv2,INTERACTABLES,65,20,,,,,
50,2,20,8,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,12
51,2,30,2,SMALL_WINDMILL,15,0,0,0
53,2,11,20,TOGGLE__GOAL,0,0,0,0
27,3,29,31,PROPELLER_SPRING,0,0,0,0
28,3,9,28,PROPELLER_SPRING,0,0,0,0
28,3,21,31,PROPELLER_SPRING,0,0,0,0
27,3,29,31,FLYING_SPRING,0,0,0,0
28,3,9,28,FLYING_SPRING,0,0,0,0
28,3,21,31,FLYING_SPRING,0,0,0,0
29,3,17,24,RAMP,1,0,0,0
31,3,16,12,WHIRLWIND__B,0,-12,12,12
32,3,8,0,FAN__RIGHT,0,-12,12,12
@@ -228,8 +228,8 @@ Adv2,INTERACTABLES,65,20,,,,,
23,7,12,28,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,16
23,7,8,24,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,8,4
24,7,22,16,SPRING__UP,0,0,0,0
26,7,24,11,PROPELLER_SPRING,0,0,0,0
27,7,4,3,PROPELLER_SPRING,0,0,0,0
26,7,24,11,FLYING_SPRING,0,0,0,0
27,7,4,3,FLYING_SPRING,0,0,0,0
28,7,16,18,SPRING__BIG_UPRIGHT,1,0,0,0
30,7,30,16,SMALL_WINDMILL,2,0,0,0
35,7,18,28,SPRING__UP,0,0,0,0
@@ -246,20 +246,20 @@ Adv2,INTERACTABLES,65,20,,,,,
29,8,18,8,SPIKES__HIDING_UP,0,0,0,0
29,8,29,10,PROPELLER,0,0,0,0
29,8,8,10,SPRING__BIG_UPLEFT,1,0,0,0
32,8,2,17,PROPELLER_SPRING,0,0,0,0
32,8,14,15,PROPELLER_SPRING,0,0,0,0
32,8,26,19,PROPELLER_SPRING,0,0,0,0
33,8,5,14,PROPELLER_SPRING,0,0,0,0
32,8,2,17,FLYING_SPRING,0,0,0,0
32,8,14,15,FLYING_SPRING,0,0,0,0
32,8,26,19,FLYING_SPRING,0,0,0,0
33,8,5,14,FLYING_SPRING,0,0,0,0
33,8,24,14,FAN__RIGHT,0,-12,12,12
37,8,16,10,SPRING__BIG_UPRIGHT,1,0,0,0
10,9,11,31,PROPELLER_SPRING,0,0,0,0
10,9,11,31,FLYING_SPRING,0,0,0,0
10,9,28,19,SPECIAL_RING,0,0,0,0
11,9,14,28,PROPELLER_SPRING,0,0,0,0
12,9,6,28,PROPELLER_SPRING,0,0,0,0
12,9,16,31,PROPELLER_SPRING,0,0,0,0
20,9,13,27,PROPELLER_SPRING,0,0,0,0
20,9,4,18,PROPELLER_SPRING,0,0,0,0
20,9,13,8,PROPELLER_SPRING,0,0,0,0
11,9,14,28,FLYING_SPRING,0,0,0,0
12,9,6,28,FLYING_SPRING,0,0,0,0
12,9,16,31,FLYING_SPRING,0,0,0,0
20,9,13,27,FLYING_SPRING,0,0,0,0
20,9,4,18,FLYING_SPRING,0,0,0,0
20,9,13,8,FLYING_SPRING,0,0,0,0
20,9,28,0,BOOSTER,0,0,0,0
22,9,21,24,TOGGLE__CHECKPOINT,0,0,0,0
22,9,21,0,TOGGLE__CHECKPOINT,0,0,0,0
@@ -283,7 +283,7 @@ Adv2,INTERACTABLES,65,20,,,,,
38,9,2,12,BOOSTER,0,1,0,0
38,9,8,26,WHIRLWIND__B,0,-14,12,28
8,10,30,28,DASH_RING,1,0,0,0
11,10,26,0,PROPELLER_SPRING,0,0,0,0
11,10,26,0,FLYING_SPRING,0,0,0,0
12,10,20,16,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,14
12,10,16,16,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,14
12,10,16,12,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,8,4
@@ -304,8 +304,8 @@ Adv2,INTERACTABLES,65,20,,,,,
32,10,20,28,FAN__LEFT,-12,-12,12,12
32,10,2,16,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,12
32,10,20,30,SPIKES__NORMAL_RIGHT,0,0,0,0
34,10,26,30,PROPELLER_SPRING,0,0,0,0
35,10,6,31,PROPELLER_SPRING,0,0,0,0
34,10,26,30,FLYING_SPRING,0,0,0,0
35,10,6,31,FLYING_SPRING,0,0,0,0
36,10,21,28,RAMP,1,0,0,0
37,10,23,23,SMALL_WINDMILL,1,0,0,0
37,10,16,7,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,12,4
@@ -326,8 +326,8 @@ Adv2,INTERACTABLES,65,20,,,,,
25,11,26,20,SPRING__UP,2,0,0,0
26,11,2,8,BOOSTER,0,0,0,0
30,11,18,15,SMALL_WINDMILL,15,0,0,0
32,11,31,3,PROPELLER_SPRING,0,0,0,0
34,11,22,6,PROPELLER_SPRING,0,0,0,0
32,11,31,3,FLYING_SPRING,0,0,0,0
34,11,22,6,FLYING_SPRING,0,0,0,0
8,12,30,30,DASH_RING,0,0,0,0
10,12,31,0,RAMP,1,0,0,0
12,12,16,12,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,14
@@ -350,9 +350,9 @@ Adv2,INTERACTABLES,65,20,,,,,
26,12,20,12,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,24
30,12,24,29,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,4
30,12,20,29,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,4
31,12,13,25,PROPELLER_SPRING,0,0,0,0
31,12,27,27,PROPELLER_SPRING,0,0,0,0
32,12,8,25,PROPELLER_SPRING,0,0,0,0
31,12,13,25,FLYING_SPRING,0,0,0,0
31,12,27,27,FLYING_SPRING,0,0,0,0
32,12,8,25,FLYING_SPRING,0,0,0,0
32,12,28,24,BOUNCY_SPRING,0,0,0,0
8,13,4,21,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,4
8,13,8,16,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,24,4
1 Adv2 INTERACTABLES 65 20
3 32 0 8 6 SPECIAL_RING 0 0 0 0
4 33 0 30 17 PLATFORM_SQUARE 0 -4 0 8
5 33 0 13 17 PLATFORM_SQUARE -4 0 8 0
6 34 0 11 20 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
7 34 0 22 16 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
8 35 0 29 24 SPIKES__HIDING_UP 0 0 0 0
9 35 0 13 24 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
10 35 0 1 21 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
11 36 0 11 25 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
12 36 0 23 21 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
13 37 0 2 26 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
14 37 0 14 22 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
15 37 0 26 26 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
16 42 0 12 30 GRIND_RAIL__START_AIR -12 -3 24 3
17 46 0 22 31 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
18 47 0 1 29 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
19 47 0 14 31 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
20 50 0 8 28 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 22
21 50 0 8 24 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 24 4
22 50 0 12 28 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 24
83 50 2 20 8 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 12
84 51 2 30 2 SMALL_WINDMILL 15 0 0 0
85 53 2 11 20 TOGGLE__GOAL 0 0 0 0
86 27 3 29 31 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
87 28 3 9 28 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
88 28 3 21 31 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
89 29 3 17 24 RAMP 1 0 0 0
90 31 3 16 12 WHIRLWIND__B 0 -12 12 12
91 32 3 8 0 FAN__RIGHT 0 -12 12 12
228 23 7 12 28 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 16
229 23 7 8 24 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 8 4
230 24 7 22 16 SPRING__UP 0 0 0 0
231 26 7 24 11 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
232 27 7 4 3 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
233 28 7 16 18 SPRING__BIG_UPRIGHT 1 0 0 0
234 30 7 30 16 SMALL_WINDMILL 2 0 0 0
235 35 7 18 28 SPRING__UP 0 0 0 0
246 29 8 18 8 SPIKES__HIDING_UP 0 0 0 0
247 29 8 29 10 PROPELLER 0 0 0 0
248 29 8 8 10 SPRING__BIG_UPLEFT 1 0 0 0
249 32 8 2 17 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
250 32 8 14 15 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
251 32 8 26 19 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
252 33 8 5 14 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
253 33 8 24 14 FAN__RIGHT 0 -12 12 12
254 37 8 16 10 SPRING__BIG_UPRIGHT 1 0 0 0
255 10 9 11 31 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
256 10 9 28 19 SPECIAL_RING 0 0 0 0
257 11 9 14 28 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
258 12 9 6 28 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
259 12 9 16 31 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
260 20 9 13 27 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
261 20 9 4 18 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
262 20 9 13 8 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
263 20 9 28 0 BOOSTER 0 0 0 0
264 22 9 21 24 TOGGLE__CHECKPOINT 0 0 0 0
265 22 9 21 0 TOGGLE__CHECKPOINT 0 0 0 0
283 38 9 2 12 BOOSTER 0 1 0 0
284 38 9 8 26 WHIRLWIND__B 0 -14 12 28
285 8 10 30 28 DASH_RING 1 0 0 0
286 11 10 26 0 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
287 12 10 20 16 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 14
288 12 10 16 16 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 14
289 12 10 16 12 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 8 4
304 32 10 20 28 FAN__LEFT -12 -12 12 12
305 32 10 2 16 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 12
306 32 10 20 30 SPIKES__NORMAL_RIGHT 0 0 0 0
307 34 10 26 30 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
308 35 10 6 31 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
309 36 10 21 28 RAMP 1 0 0 0
310 37 10 23 23 SMALL_WINDMILL 1 0 0 0
311 37 10 16 7 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 12 4
326 25 11 26 20 SPRING__UP 2 0 0 0
327 26 11 2 8 BOOSTER 0 0 0 0
328 30 11 18 15 SMALL_WINDMILL 15 0 0 0
329 32 11 31 3 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
330 34 11 22 6 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
331 8 12 30 30 DASH_RING 0 0 0 0
332 10 12 31 0 RAMP 1 0 0 0
333 12 12 16 12 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 14
350 26 12 20 12 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 24
351 30 12 24 29 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 4
352 30 12 20 29 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 4
353 31 12 13 25 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
354 31 12 27 27 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
355 32 12 8 25 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
356 32 12 28 24 BOUNCY_SPRING 0 0 0 0
357 8 13 4 21 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 4
358 8 13 8 16 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 24 4
@@ -2,10 +2,10 @@ Adv2,INTERACTABLES,80,19,,,,,
40,0,9,24,TOGGLE__CHECKPOINT,0,0,0,0
40,0,9,0,TOGGLE__CHECKPOINT,0,0,0,0
40,1,9,16,TOGGLE__CHECKPOINT,0,0,0,0
63,1,30,30,PROPELLER_SPRING,0,0,0,0
64,1,14,23,PROPELLER_SPRING,0,0,0,0
64,1,6,16,PROPELLER_SPRING,0,0,0,0
64,1,15,9,PROPELLER_SPRING,0,0,0,0
63,1,30,30,FLYING_SPRING,0,0,0,0
64,1,14,23,FLYING_SPRING,0,0,0,0
64,1,6,16,FLYING_SPRING,0,0,0,0
64,1,15,9,FLYING_SPRING,0,0,0,0
64,1,28,1,SPECIAL_RING,0,0,0,0
65,1,16,16,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,13
65,1,20,16,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,24,4
@@ -17,14 +17,14 @@ Adv2,INTERACTABLES,80,19,,,,,
58,2,28,20,GRIND_RAIL__END_ALTERNATE,-6,-3,12,3
59,2,5,20,RAMP,1,0,0,0
62,2,14,20,SMALL_WINDMILL,1,0,0,0
63,2,21,30,PROPELLER_SPRING,0,0,0,0
63,2,26,15,PROPELLER_SPRING,0,0,0,0
63,2,20,5,PROPELLER_SPRING,0,0,0,0
64,2,14,27,PROPELLER_SPRING,0,0,0,0
64,2,3,23,PROPELLER_SPRING,0,0,0,0
64,2,17,12,PROPELLER_SPRING,0,0,0,0
64,2,21,0,PROPELLER_SPRING,0,0,0,0
64,2,10,4,PROPELLER_SPRING,0,0,0,0
63,2,21,30,FLYING_SPRING,0,0,0,0
63,2,26,15,FLYING_SPRING,0,0,0,0
63,2,20,5,FLYING_SPRING,0,0,0,0
64,2,14,27,FLYING_SPRING,0,0,0,0
64,2,3,23,FLYING_SPRING,0,0,0,0
64,2,17,12,FLYING_SPRING,0,0,0,0
64,2,21,0,FLYING_SPRING,0,0,0,0
64,2,10,4,FLYING_SPRING,0,0,0,0
67,2,28,18,SPRING__LEFT,2,0,0,0
67,2,19,8,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,13
40,3,9,0,TOGGLE__CHECKPOINT,0,0,0,0
@@ -35,9 +35,9 @@ Adv2,INTERACTABLES,80,19,,,,,
60,3,0,12,GRIND_RAIL__START_GROUND,-12,-3,24,3
62,3,30,24,SPRING__UP,0,0,0,0
62,3,8,24,GRIND_RAIL__END_ALTERNATE,-12,-3,24,3
63,3,20,14,PROPELLER_SPRING,0,0,0,0
64,3,2,8,PROPELLER_SPRING,0,0,0,0
64,3,16,13,PROPELLER_SPRING,0,0,0,0
63,3,20,14,FLYING_SPRING,0,0,0,0
64,3,2,8,FLYING_SPRING,0,0,0,0
64,3,16,13,FLYING_SPRING,0,0,0,0
65,3,20,10,SPRING__RIGHT,2,0,0,0
65,3,25,0,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,13
68,3,11,24,TOGGLE__GOAL,0,0,0,0
@@ -109,8 +109,8 @@ Adv2,INTERACTABLES,80,19,,,,,
49,7,31,17,PLATFORM_B,0,0,0,0
49,7,25,17,PLATFORM_B,0,0,0,0
49,7,19,17,PLATFORM_B,0,0,0,0
52,7,25,9,PROPELLER_SPRING,0,0,0,0
53,7,3,7,PROPELLER_SPRING,0,0,0,0
52,7,25,9,FLYING_SPRING,0,0,0,0
53,7,3,7,FLYING_SPRING,0,0,0,0
54,7,6,28,BOOSTER,0,0,0,0
54,7,20,31,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,21
55,7,0,31,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,9
@@ -123,10 +123,10 @@ Adv2,INTERACTABLES,80,19,,,,,
60,7,24,4,FAN__LEFT,-12,-24,12,24
60,7,0,4,GRIND_RAIL__END_GROUND,-12,-3,24,3
25,8,4,30,SPRING__RIGHT,3,0,0,0
29,8,25,13,PROPELLER_SPRING,0,0,0,0
29,8,13,16,PROPELLER_SPRING,0,0,0,0
30,8,29,5,PROPELLER_SPRING,0,0,0,0
31,8,9,1,PROPELLER_SPRING,0,0,0,0
29,8,25,13,FLYING_SPRING,0,0,0,0
29,8,13,16,FLYING_SPRING,0,0,0,0
30,8,29,5,FLYING_SPRING,0,0,0,0
31,8,9,1,FLYING_SPRING,0,0,0,0
35,8,16,21,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,19
35,8,12,16,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,16
36,8,20,8,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,14
@@ -178,9 +178,9 @@ Adv2,INTERACTABLES,80,19,,,,,
54,9,1,16,DASH_RING,2,0,0,0
55,9,31,30,SPRING__SMALL_UPRIGHT,3,0,0,0
57,9,30,12,SPRING__UP,3,0,0,0
22,10,29,29,PROPELLER_SPRING,0,0,0,0
22,10,17,22,PROPELLER_SPRING,0,0,0,0
22,10,22,13,PROPELLER_SPRING,0,0,0,0
22,10,29,29,FLYING_SPRING,0,0,0,0
22,10,17,22,FLYING_SPRING,0,0,0,0
22,10,22,13,FLYING_SPRING,0,0,0,0
22,10,28,4,FAN__RIGHT,0,-12,12,12
24,10,9,22,PLATFORM_SQUARE,0,-1,0,2
25,10,12,16,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,12
@@ -216,7 +216,7 @@ Adv2,INTERACTABLES,80,19,,,,,
41,10,8,8,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,9,4
41,10,4,4,TOGGLE_PLAYER_LAYER__BACKGROUND,0,0,4,8
41,10,15,16,SPRING__UP,3,0,0,0
42,10,12,9,PROPELLER_SPRING,0,0,0,0
42,10,12,9,FLYING_SPRING,0,0,0,0
43,10,19,16,BOOSTER,0,0,0,0
53,10,6,4,SPRING__UP,0,0,0,0
25,11,24,3,TOGGLE_PLAYER_LAYER__FOREGROUND,0,0,4,13
1 Adv2 INTERACTABLES 80 19
2 40 0 9 24 TOGGLE__CHECKPOINT 0 0 0 0
3 40 0 9 0 TOGGLE__CHECKPOINT 0 0 0 0
4 40 1 9 16 TOGGLE__CHECKPOINT 0 0 0 0
5 63 1 30 30 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
6 64 1 14 23 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
7 64 1 6 16 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
8 64 1 15 9 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
9 64 1 28 1 SPECIAL_RING 0 0 0 0
10 65 1 16 16 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 13
11 65 1 20 16 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 24 4
17 58 2 28 20 GRIND_RAIL__END_ALTERNATE -6 -3 12 3
18 59 2 5 20 RAMP 1 0 0 0
19 62 2 14 20 SMALL_WINDMILL 1 0 0 0
20 63 2 21 30 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
21 63 2 26 15 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
22 63 2 20 5 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
23 64 2 14 27 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
24 64 2 3 23 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
25 64 2 17 12 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
26 64 2 21 0 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
27 64 2 10 4 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
28 67 2 28 18 SPRING__LEFT 2 0 0 0
29 67 2 19 8 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 13
30 40 3 9 0 TOGGLE__CHECKPOINT 0 0 0 0
35 60 3 0 12 GRIND_RAIL__START_GROUND -12 -3 24 3
36 62 3 30 24 SPRING__UP 0 0 0 0
37 62 3 8 24 GRIND_RAIL__END_ALTERNATE -12 -3 24 3
38 63 3 20 14 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
39 64 3 2 8 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
40 64 3 16 13 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
41 65 3 20 10 SPRING__RIGHT 2 0 0 0
42 65 3 25 0 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 13
43 68 3 11 24 TOGGLE__GOAL 0 0 0 0
109 49 7 31 17 PLATFORM_B 0 0 0 0
110 49 7 25 17 PLATFORM_B 0 0 0 0
111 49 7 19 17 PLATFORM_B 0 0 0 0
112 52 7 25 9 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
113 53 7 3 7 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
114 54 7 6 28 BOOSTER 0 0 0 0
115 54 7 20 31 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 21
116 55 7 0 31 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 9
123 60 7 24 4 FAN__LEFT -12 -24 12 24
124 60 7 0 4 GRIND_RAIL__END_GROUND -12 -3 24 3
125 25 8 4 30 SPRING__RIGHT 3 0 0 0
126 29 8 25 13 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
127 29 8 13 16 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
128 30 8 29 5 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
129 31 8 9 1 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
130 35 8 16 21 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 19
131 35 8 12 16 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 16
132 36 8 20 8 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 14
178 54 9 1 16 DASH_RING 2 0 0 0
179 55 9 31 30 SPRING__SMALL_UPRIGHT 3 0 0 0
180 57 9 30 12 SPRING__UP 3 0 0 0
181 22 10 29 29 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
182 22 10 17 22 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
183 22 10 22 13 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
184 22 10 28 4 FAN__RIGHT 0 -12 12 12
185 24 10 9 22 PLATFORM_SQUARE 0 -1 0 2
186 25 10 12 16 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 12
216 41 10 8 8 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 9 4
217 41 10 4 4 TOGGLE_PLAYER_LAYER__BACKGROUND 0 0 4 8
218 41 10 15 16 SPRING__UP 3 0 0 0
219 42 10 12 9 PROPELLER_SPRING FLYING_SPRING 0 0 0 0
220 43 10 19 16 BOOSTER 0 0 0 0
221 53 10 6 4 SPRING__UP 0 0 0 0
222 25 11 24 3 TOGGLE_PLAYER_LAYER__FOREGROUND 0 0 4 13
+1 -1
View File
@@ -89,7 +89,7 @@
#define IA__PROPELLER 82
#define IA__SLIDY_ICE 83
#define IA__SMALL_WINDMILL 84
#define IA__PROPELLER_SPRING 85
#define IA__FLYING_SPRING 85
#define IA__WHIRLWIND__A 86
#define IA__FAN__LEFT 87
#define IA__FAN__RIGHT 88
@@ -8,10 +8,10 @@
typedef struct {
/* 0x00 */ Sprite spring;
/* 0x30 */ Sprite propellor;
/* 0x60 */ u16 unk60;
/* 0x62 */ u16 unk62;
} Sprite_OnInit_SkyCanyon;
/* 0x60 */ u16 visibleFlyingSprings;
/* 0x62 */ u16 visiblePropellers;
} SkyCanyonLevelTask;
Task *sub_80807CC(void);
Task *CreateLevelTask_SkyCanyon(void);
#endif
+1 -1
View File
@@ -39,7 +39,7 @@ typedef struct {
/* 0x0E|0x10 */ CamCoord prevCamY;
/* 0x10|0x14 */ u8 SA2_LABEL(unk14);
#if (GAME == GAME_SA2)
/* 0x18|0x18 */ Task *preInit;
/* 0x18|0x18 */ Task *levelTask;
#endif
} EntitiesManager;
extern Task *gEntitiesManagerTask;
+2 -2
View File
@@ -275,7 +275,7 @@ SECTIONS
src/game/sa2/stage/interactables/techno_base/light_globe.o(.text);
src/game/sa2/stage/interactables/sky_canyon/propeller.o(.text);
src/game/sa2/stage/interactables/sky_canyon/small_windmill.o(.text);
src/game/sa2/stage/interactables/sky_canyon/propeller_spring.o(.text);
src/game/sa2/stage/interactables/sky_canyon/flying_spring.o(.text);
src/game/sa2/stage/interactables/sky_canyon/whirlwind.o(.text);
src/game/sa2/stage/interactables/sky_canyon/fan.o(.text);
src/game/sa2/stage/interactables/egg_utopia/launcher.o(.text);
@@ -286,7 +286,7 @@ SECTIONS
src/game/sa2/stage/interactables/egg_utopia/speeding_platform.o(.text);
src/game/sa2/stage/interactables/egg_utopia/gravity_toggle.o(.text);
src/game/sa2/stage/interactables/collect_rings_lap_trigger.o(.text);
src/game/sa2/stage/interactables/sky_canyon_init.o(.text);
src/game/sa2/stage/interactables/sky_canyon_level_task.o(.text);
src/game/sa2/stage/interactables/105.o(.text);
src/game/sa2/stage/interactables/note_particle.o(.text);
src/game/sa2/stage/interactables/special_ring.o(.text);
@@ -0,0 +1,295 @@
#include "global.h"
#include "trig.h"
#include "lib/m4a/m4a.h"
#include "game/shared/stage/entities_manager.h"
#include "game/sa2/stage/interactables/sky_canyon/flying_spring.h"
#include "game/sa2/stage/interactables/sky_canyon_level_task.h"
#include "game/sa2/stage/player_controls.h"
#include "game/shared/stage/player.h"
#include "game/shared/stage/camera.h"
#include "constants/sa2/player_transitions.h"
#include "constants/sa2/songs.h"
#define STATE_JUMPED 2
#define STATE_MOVING_UP 1
typedef struct {
SpriteBase base;
Sprite sprite;
s32 x;
s32 y;
s16 qOffsetX;
s16 qOffsetY;
u8 state;
u8 step;
} Sprite_FlyingSpring;
static bool32 sub_807C424(Sprite_FlyingSpring *);
static void sub_807C4A0(Sprite_FlyingSpring *);
static bool32 sub_807C598(Sprite_FlyingSpring *);
static void sub_807C5E0(Sprite_FlyingSpring *);
static void UpdateSharedFlyingSpringAnimation(void);
static void RenderFlyingSpring(Sprite_FlyingSpring *);
static void TaskDestructor_Interactable085(Task *);
static void sub_807C52C(Sprite_FlyingSpring *);
static void sub_807C4EC(Sprite_FlyingSpring *);
static Sprite *GetSharedFlyingSpringSprite(void);
static void Task_Interactable085(void)
{
Sprite_FlyingSpring *flyingSpring = TASK_DATA(gCurTask);
flyingSpring->qOffsetY = SIN_24_8(flyingSpring->step * 4) * 2;
flyingSpring->step += 2;
if (sub_807C424(flyingSpring)) {
sub_807C4A0(flyingSpring);
}
if (sub_807C598(flyingSpring)) {
sub_807C5E0(flyingSpring);
} else {
UpdateSharedFlyingSpringAnimation();
RenderFlyingSpring(flyingSpring);
}
}
static void sub_807C2E0(void)
{
s16 r1;
Sprite_FlyingSpring *flyingSpring = TASK_DATA(gCurTask);
flyingSpring->qOffsetY = SIN_24_8(flyingSpring->step * 4) * 16;
sub_807C52C(flyingSpring);
r1 = (64 - flyingSpring->step) >> 2;
if (r1 > 3) {
if (r1 > 6) {
r1 = 6;
}
} else {
#ifndef NON_MATCHING
do
r1 = 4;
while (0);
#else
r1 = 4;
#endif
}
flyingSpring->step += r1;
if (flyingSpring->step >= 64) {
sub_807C4EC(flyingSpring);
}
UpdateSharedFlyingSpringAnimation();
RenderFlyingSpring(flyingSpring);
}
static void sub_807C504(Sprite_FlyingSpring *);
static void sub_807C360(void)
{
Sprite_FlyingSpring *flyingSpring = TASK_DATA(gCurTask);
flyingSpring->step += 8;
if (flyingSpring->step == 128) {
sub_807C504(flyingSpring);
} else if (flyingSpring->step > 128) {
flyingSpring->qOffsetY = SIN_24_8(flyingSpring->step * 4) * 6;
} else {
flyingSpring->qOffsetY = SIN_24_8(flyingSpring->step * 4) * 3;
}
UpdateSharedFlyingSpringAnimation();
RenderFlyingSpring(flyingSpring);
}
static void sub_807C3DC(Sprite_FlyingSpring *flyingSpring)
{
if (gPlayer.frameInput & gPlayerControls.jump) {
if (!(flyingSpring->state & STATE_JUMPED)) {
if (!(flyingSpring->state & STATE_MOVING_UP)) {
flyingSpring->state |= STATE_MOVING_UP;
} else {
flyingSpring->state &= ~STATE_MOVING_UP;
flyingSpring->state |= STATE_JUMPED;
}
}
}
}
static bool32 sub_807C424(Sprite_FlyingSpring *flyingSpring)
{
s16 springScreenX, playerScreenX, sprintScreenY, playerScreenY;
if (gPlayer.moveState & 0x80 || gPlayer.qSpeedAirY <= 0) {
return FALSE;
}
springScreenX = flyingSpring->x - gCamera.x;
sprintScreenY = flyingSpring->y - gCamera.y;
playerScreenX = I(gPlayer.qWorldX) - gCamera.x;
playerScreenY = I(gPlayer.qWorldY) - gCamera.y;
if (springScreenX - 20 <= playerScreenX && springScreenX + 20 >= playerScreenX) {
if (sprintScreenY - 12 <= playerScreenY && sprintScreenY + 12 >= playerScreenY) {
return TRUE;
}
}
return FALSE;
}
static void sub_807C4A0(Sprite_FlyingSpring *flyingSpring)
{
gPlayer.transition = PLTRANS_PROPELLER_SPRING;
if (flyingSpring->state & 1)
gPlayer.qSpeedAirY = -Q(5.5);
else
gPlayer.qSpeedAirY = -Q(5.5);
flyingSpring->step = 0;
flyingSpring->state = 0;
m4aSongNumStart(SE_284);
gCurTask->main = sub_807C2E0;
}
static void sub_807C6E4(void);
static void sub_807C4EC(Sprite_FlyingSpring *flyingSpring)
{
flyingSpring->step = 0;
gCurTask->main = sub_807C6E4;
}
static void sub_807C504(Sprite_FlyingSpring *flyingSpring)
{
flyingSpring->qOffsetX = 0;
flyingSpring->qOffsetY = 0;
flyingSpring->step = 0;
gCurTask->main = Task_Interactable085;
}
static void sub_807C52C(Sprite_FlyingSpring *flyingSpring)
{
if (gPlayer.frameInput & gPlayerControls.jump) {
flyingSpring->state |= STATE_JUMPED;
}
}
static void RenderFlyingSpring(Sprite_FlyingSpring *flyingSpring)
{
Sprite *sprite = GetSharedFlyingSpringSprite();
sprite->x = flyingSpring->x - gCamera.x + I(flyingSpring->qOffsetX);
sprite->y = flyingSpring->y - gCamera.y + I(flyingSpring->qOffsetY);
DisplaySprite(sprite);
}
static bool32 sub_807C598(Sprite_FlyingSpring *flyingSpring)
{
s32 springScreenX, springScreenY;
s16 x, y;
springScreenX = flyingSpring->x;
springScreenX -= gCamera.x;
springScreenY = flyingSpring->y;
springScreenY -= gCamera.y;
x = springScreenX;
y = springScreenY;
if (x < -(CAM_REGION_WIDTH / 2) || x > (DISPLAY_WIDTH + (CAM_REGION_WIDTH / 2)) || y < -(CAM_REGION_WIDTH / 2)
|| y > (DISPLAY_HEIGHT + (CAM_REGION_WIDTH / 2))) {
return TRUE;
}
return FALSE;
}
static void sub_807C5E0(Sprite_FlyingSpring *flyingSpring)
{
flyingSpring->base.me->x = flyingSpring->base.meX;
TaskDestroy(gCurTask);
}
static Sprite *GetSharedFlyingSpringSprite(void)
{
EntitiesManager *em = TASK_DATA(TASK_PARENT(gCurTask));
SkyCanyonLevelTask *level = TASK_DATA(em->levelTask);
return &level->spring;
}
static void UpdateSharedFlyingSpringAnimation(void)
{
EntitiesManager *em = TASK_DATA(TASK_PARENT(gCurTask));
SkyCanyonLevelTask *level = TASK_DATA(em->levelTask);
level->visibleFlyingSprings++;
}
void CreateEntity_PropellerSpring(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
{
Task *t = TaskCreate(Task_Interactable085, sizeof(Sprite_FlyingSpring), 0x2010, 0, TaskDestructor_Interactable085);
Sprite_FlyingSpring *flyingSpring = TASK_DATA(t);
flyingSpring->x = TO_WORLD_POS(me->x, spriteRegionX);
flyingSpring->y = TO_WORLD_POS(me->y, spriteRegionY);
flyingSpring->qOffsetX = 0;
flyingSpring->qOffsetY = 0;
flyingSpring->step = 0;
flyingSpring->base.regionX = spriteRegionX;
flyingSpring->base.regionY = spriteRegionY;
flyingSpring->base.me = me;
flyingSpring->base.meX = me->x;
flyingSpring->base.id = spriteY;
SET_MAP_ENTITY_INITIALIZED(me);
}
static void sub_807C72C(Sprite_FlyingSpring *);
static void sub_807C6E4(void)
{
Sprite_FlyingSpring *flyingSpring = TASK_DATA(gCurTask);
sub_807C3DC(flyingSpring);
if (++flyingSpring->step > 0) {
sub_807C72C(flyingSpring);
}
UpdateSharedFlyingSpringAnimation();
RenderFlyingSpring(flyingSpring);
}
static void TaskDestructor_Interactable085(Task *t)
{
// unused
}
static void sub_807C744(void);
static void sub_807C72C(Sprite_FlyingSpring *flyingSpring)
{
flyingSpring->step = 64;
gCurTask->main = sub_807C744;
}
static void sub_807C7A0(Sprite_FlyingSpring *);
static void sub_807C744(void)
{
Sprite_FlyingSpring *flyingSpring = TASK_DATA(gCurTask);
flyingSpring->qOffsetY = SIN_24_8(flyingSpring->step * 4) * 16;
sub_807C3DC(flyingSpring);
flyingSpring->step += 8;
if ((s8)flyingSpring->step < 0) {
sub_807C7A0(flyingSpring);
}
UpdateSharedFlyingSpringAnimation();
RenderFlyingSpring(flyingSpring);
}
static void sub_807C7A0(Sprite_FlyingSpring *flyingSpring)
{
flyingSpring->step = 128;
gCurTask->main = sub_807C360;
}
@@ -13,7 +13,7 @@
#include "game/shared/stage/camera.h"
#include "game/sa2/stage/interactables/sky_canyon/propeller.h"
#include "game/sa2/stage/interactables/sky_canyon_init.h"
#include "game/sa2/stage/interactables/sky_canyon_level_task.h"
#include "constants/sa2/animations.h"
#include "constants/sa2/char_states.h"
@@ -43,7 +43,7 @@ static void Render(Sprite_Propeller *);
static void StartPlayerFloatingTask(Sprite_Propeller *);
static bool32 ShouldDespawn(Sprite_Propeller *);
static void DestroyPropeller(Sprite_Propeller *);
Sprite_OnInit_SkyCanyon *sub_807BA54(void);
SkyCanyonLevelTask *sub_807BA54(void);
static void TaskDestructor_GiantPropeller(Task *);
static bool32 sub_807B9F0(Sprite_Propeller *);
@@ -314,18 +314,18 @@ static void DestroyPropeller(Sprite_Propeller *propeller)
TaskDestroy(gCurTask);
}
Sprite_OnInit_SkyCanyon *sub_807BA54(void)
SkyCanyonLevelTask *sub_807BA54(void)
{
EntitiesManager *em = TASK_DATA(TASK_PARENT(gCurTask));
return TASK_DATA(em->preInit);
return TASK_DATA(em->levelTask);
}
static void sub_807BA70(void)
{
EntitiesManager *em = TASK_DATA(TASK_PARENT(gCurTask));
Sprite_OnInit_SkyCanyon *level = TASK_DATA(em->preInit);
SkyCanyonLevelTask *level = TASK_DATA(em->levelTask);
level->unk62++;
level->visiblePropellers++;
}
void CreateEntity_Propeller(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
@@ -1,293 +0,0 @@
#include "global.h"
#include "trig.h"
#include "lib/m4a/m4a.h"
#include "game/shared/stage/entities_manager.h"
#include "game/sa2/stage/interactables/sky_canyon/propeller_spring.h"
#include "game/sa2/stage/interactables/sky_canyon_init.h"
#include "game/sa2/stage/player_controls.h"
#include "game/shared/stage/player.h"
#include "game/shared/stage/camera.h"
#include "constants/sa2/player_transitions.h"
#include "constants/sa2/songs.h"
typedef struct {
SpriteBase base;
Sprite sprite;
s32 unk3C;
s32 unk40;
s16 unk44;
s16 unk46;
u8 unk48;
u8 unk49;
} Sprite_IA85;
static bool32 sub_807C424(Sprite_IA85 *);
static void sub_807C4A0(Sprite_IA85 *);
static bool32 sub_807C598(Sprite_IA85 *);
static void sub_807C5E0(Sprite_IA85 *);
static void sub_807C614(void);
static void sub_807C558(Sprite_IA85 *);
static void TaskDestructor_Interactable085(Task *);
static void Task_Interactable085(void)
{
Sprite_IA85 *ia85 = TASK_DATA(gCurTask);
ia85->unk46 = SIN_24_8(ia85->unk49 * 4) * 2;
ia85->unk49 += 2;
if (sub_807C424(ia85)) {
sub_807C4A0(ia85);
}
if (sub_807C598(ia85)) {
sub_807C5E0(ia85);
} else {
sub_807C614();
sub_807C558(ia85);
}
}
static void sub_807C52C(Sprite_IA85 *);
static void sub_807C4EC(Sprite_IA85 *);
static void sub_807C2E0(void)
{
s16 r1;
Sprite_IA85 *ia85 = TASK_DATA(gCurTask);
ia85->unk46 = SIN_24_8(ia85->unk49 * 4) * 16;
sub_807C52C(ia85);
r1 = (0x40 - ia85->unk49) >> 2;
if (r1 > 3) {
if (r1 > 6) {
r1 = 6;
}
} else {
#ifndef NON_MATCHING
do
r1 = 4;
while (0);
#else
r1 = 4;
#endif
}
ia85->unk49 += r1;
if (ia85->unk49 > 63) {
sub_807C4EC(ia85);
}
sub_807C614();
sub_807C558(ia85);
}
static void sub_807C504(Sprite_IA85 *);
static void sub_807C360(void)
{
Sprite_IA85 *ia85 = TASK_DATA(gCurTask);
ia85->unk49 += 8;
if (ia85->unk49 == 0x80) {
sub_807C504(ia85);
} else if (ia85->unk49 > 0x80) {
ia85->unk46 = SIN_24_8(ia85->unk49 * 4) * 6;
} else {
ia85->unk46 = SIN_24_8(ia85->unk49 * 4) * 3;
}
sub_807C614();
sub_807C558(ia85);
}
static void sub_807C3DC(Sprite_IA85 *ia85)
{
if (gPlayer.frameInput & gPlayerControls.jump) {
if (!(ia85->unk48 & 2)) {
if (!(ia85->unk48 & 1)) {
ia85->unk48 |= 1;
} else {
ia85->unk48 &= ~0x1;
ia85->unk48 |= 2;
}
}
}
}
static bool32 sub_807C424(Sprite_IA85 *ia85)
{
s16 temp, temp2, temp3, temp4;
if (gPlayer.moveState & 0x80 || gPlayer.qSpeedAirY <= 0) {
return 0;
}
temp = ia85->unk3C - gCamera.x;
temp3 = ia85->unk40 - gCamera.y;
temp2 = I(gPlayer.qWorldX) - gCamera.x;
temp4 = I(gPlayer.qWorldY) - gCamera.y;
if (temp - 0x14 <= temp2 && temp + 0x14 >= temp2) {
if (temp3 - 0xC <= temp4 && temp3 + 0xC >= temp4) {
return 1;
}
}
return 0;
}
static void sub_807C4A0(Sprite_IA85 *ia85)
{
gPlayer.transition = PLTRANS_PROPELLER_SPRING;
if (ia85->unk48 & 1)
gPlayer.qSpeedAirY = -Q(5.5);
else
gPlayer.qSpeedAirY = -Q(5.5);
ia85->unk49 = 0;
ia85->unk48 = 0;
m4aSongNumStart(SE_284);
gCurTask->main = sub_807C2E0;
}
static void sub_807C6E4(void);
static void sub_807C4EC(Sprite_IA85 *ia85)
{
ia85->unk49 = 0;
gCurTask->main = sub_807C6E4;
}
static void sub_807C504(Sprite_IA85 *ia85)
{
ia85->unk44 = 0;
ia85->unk46 = 0;
ia85->unk49 = 0;
gCurTask->main = Task_Interactable085;
}
static void sub_807C52C(Sprite_IA85 *ia85)
{
if (gPlayer.frameInput & gPlayerControls.jump) {
ia85->unk48 |= 2;
}
}
static Sprite *sub_807C5F8(void);
static void sub_807C558(Sprite_IA85 *ia85)
{
Sprite *sprite = sub_807C5F8();
sprite->x = ia85->unk3C - gCamera.x + I(ia85->unk44);
sprite->y = ia85->unk40 - gCamera.y + I(ia85->unk46);
DisplaySprite(sprite);
}
static bool32 sub_807C598(Sprite_IA85 *ia85)
{
s32 temp1, temp;
s16 temp2, temp3;
temp1 = ia85->unk3C;
temp1 -= gCamera.x;
temp = ia85->unk40;
temp -= gCamera.y;
temp2 = temp1;
temp3 = temp;
if (temp2 < -128 || temp2 > (DISPLAY_WIDTH + 128) || temp3 < -128 || temp3 > (DISPLAY_HEIGHT + 128)) {
return 1;
}
return 0;
}
static void sub_807C5E0(Sprite_IA85 *ia85)
{
ia85->base.me->x = ia85->base.meX;
TaskDestroy(gCurTask);
}
static Sprite *sub_807C5F8(void)
{
EntitiesManager *em = TASK_DATA(TASK_PARENT(gCurTask));
Sprite_OnInit_SkyCanyon *level = TASK_DATA(em->preInit);
return &level->spring;
}
static void sub_807C614(void)
{
EntitiesManager *em = TASK_DATA(TASK_PARENT(gCurTask));
Sprite_OnInit_SkyCanyon *level = TASK_DATA(em->preInit);
level->unk60++;
}
void CreateEntity_PropellerSpring(MapEntity *me, u16 spriteRegionX, u16 spriteRegionY, u8 spriteY)
{
Task *t = TaskCreate(Task_Interactable085, sizeof(Sprite_IA85), 0x2010, 0, TaskDestructor_Interactable085);
Sprite_IA85 *ia85 = TASK_DATA(t);
ia85->unk3C = TO_WORLD_POS(me->x, spriteRegionX);
ia85->unk40 = TO_WORLD_POS(me->y, spriteRegionY);
ia85->unk44 = 0;
ia85->unk46 = 0;
ia85->unk49 = 0;
ia85->base.regionX = spriteRegionX;
ia85->base.regionY = spriteRegionY;
ia85->base.me = me;
ia85->base.meX = me->x;
ia85->base.id = spriteY;
SET_MAP_ENTITY_INITIALIZED(me);
}
static void sub_807C72C(Sprite_IA85 *);
static void sub_807C6E4(void)
{
Sprite_IA85 *ia85 = TASK_DATA(gCurTask);
sub_807C3DC(ia85);
if (++ia85->unk49 > 0) {
sub_807C72C(ia85);
}
sub_807C614();
sub_807C558(ia85);
}
static void TaskDestructor_Interactable085(Task *t)
{
// unused
}
static void sub_807C744(void);
static void sub_807C72C(Sprite_IA85 *ia85)
{
ia85->unk49 = 0x40;
gCurTask->main = sub_807C744;
}
static void sub_807C7A0(Sprite_IA85 *);
static void sub_807C744(void)
{
Sprite_IA85 *ia85 = TASK_DATA(gCurTask);
ia85->unk46 = SIN_24_8(ia85->unk49 * 4) * 16;
sub_807C3DC(ia85);
ia85->unk49 += 8;
if ((s8)ia85->unk49 < 0) {
sub_807C7A0(ia85);
}
sub_807C614();
sub_807C558(ia85);
}
static void sub_807C7A0(Sprite_IA85 *ia85)
{
ia85->unk49 = 0x80;
gCurTask->main = sub_807C360;
}
@@ -2,26 +2,20 @@
#include "sprite.h"
#include "task.h"
#include "game/sa2/stage/interactables/sky_canyon_init.h"
#include "game/sa2/stage/interactables/sky_canyon_level_task.h"
#include "constants/sa2/animations.h"
static void Task_80808DC(void);
static void Task_UpdateAnimations(void);
/* sub_80807CC is pointed to by 'gSpriteTileInits_PreStageEntry' inside collision.s
* Which itself is referenced by 'CreateStageEntitiesManager'
* It is called on stage-entry of ONLY Sky Canyon Acts 1 & 2,
* the other pointers inside 'gSpriteTileInits_PreStageEntry' are empty.
*/
Task *sub_80807CC(void)
Task *CreateLevelTask_SkyCanyon(void)
{
Task *t = TaskCreate(Task_80808DC, sizeof(Sprite_OnInit_SkyCanyon), 0x2001, 0, NULL);
Sprite_OnInit_SkyCanyon *init = TASK_DATA(t);
Task *t = TaskCreate(Task_UpdateAnimations, sizeof(SkyCanyonLevelTask), 0x2001, 0, NULL);
SkyCanyonLevelTask *init = TASK_DATA(t);
Sprite *spring, *propellor;
init->unk60 = 0;
init->unk62 = 0;
init->visibleFlyingSprings = 0;
init->visiblePropellers = 0;
spring = &init->spring;
SPRITE_INIT_WITHOUT_ANIM_OR_VRAM(spring, 18, 2, 0);
@@ -40,17 +34,17 @@ Task *sub_80807CC(void)
return t;
}
static void Task_80808DC(void)
static void Task_UpdateAnimations(void)
{
Sprite_OnInit_SkyCanyon *init = TASK_DATA(gCurTask);
SkyCanyonLevelTask *init = TASK_DATA(gCurTask);
if (init->unk60) {
if (init->visibleFlyingSprings != 0) {
UpdateSpriteAnimation(&init->spring);
}
init->unk60 = 0;
init->visibleFlyingSprings = 0;
if (init->unk62 != 0) {
if (init->visiblePropellers != 0) {
UpdateSpriteAnimation(&init->propellor);
}
init->unk62 = 0;
}
init->visiblePropellers = 0;
}
+22 -15
View File
@@ -68,7 +68,7 @@
#include "game/sa2/stage/interactables/sky_canyon/fan.h"
#include "game/sa2/stage/interactables/sky_canyon/small_windmill.h"
#include "game/sa2/stage/interactables/sky_canyon/whirlwind.h"
#include "game/sa2/stage/interactables/sky_canyon/propeller_spring.h"
#include "game/sa2/stage/interactables/sky_canyon/flying_spring.h"
#include "game/sa2/stage/interactables/techno_base/light_globe.h"
#include "game/sa2/stage/interactables/techno_base/light_bridge.h"
@@ -88,7 +88,7 @@
#include "game/sa2/stage/interactables/105.h"
#include "game/sa2/stage/interactables/special_ring.h"
#include "game/sa2/stage/interactables/collect_rings_lap_trigger.h"
#include "game/sa2/stage/interactables/sky_canyon_init.h"
#include "game/sa2/stage/interactables/sky_canyon_level_task.h"
#include "game/sa2/stage/mystery_itembox.h"
@@ -800,16 +800,23 @@ const MapEntityInit gSpriteInits_CollectRingsInteractables[] = {
};
#ifndef COLLECT_RINGS_ROM
const StagePreInitFunc gSpriteTileInits_PreStageEntry[] = {
NULL, NULL, NULL, NULL, // Leaf Forest
NULL, NULL, NULL, NULL, // Hot Crater
NULL, NULL, NULL, NULL, // Music Plant
NULL, NULL, NULL, NULL, // Ice Paradise
sub_80807CC, sub_80807CC, NULL, NULL, // Sky Canyon
NULL, NULL, NULL, NULL, // Techno Base
NULL, NULL, NULL, NULL, // Egg Utopia
NULL, NULL, NULL, NULL, // Final Zone
NULL, NULL,
const StagePreInitFunc sLevelTaskInits[] = {
// Leaf Forest
NULL, NULL, NULL, NULL,
// Hot Crater
NULL, NULL, NULL, NULL,
// Music Plant
NULL, NULL, NULL, NULL,
// Ice Paradise
NULL, NULL, NULL, NULL,
// Sky Canyon
CreateLevelTask_SkyCanyon, CreateLevelTask_SkyCanyon, NULL, NULL,
// Techno Base
NULL, NULL, NULL, NULL,
// Egg Utopia
NULL, NULL, NULL, NULL,
// Final Zone
NULL, NULL, NULL, NULL, NULL, NULL
};
#endif
#endif
@@ -842,10 +849,10 @@ void CreateStageEntitiesManager(void)
em->enemies = decompBuf;
#if (GAME == GAME_SA2)
em->preInit = NULL;
em->levelTask = NULL;
if (gSpriteTileInits_PreStageEntry[gCurrentLevel]) {
em->preInit = gSpriteTileInits_PreStageEntry[gCurrentLevel]();
if (sLevelTaskInits[gCurrentLevel]) {
em->levelTask = sLevelTaskInits[gCurrentLevel]();
}
#endif
} else {