Start documenting rayquaza_scene

This commit is contained in:
GriffinR 2020-08-25 17:49:42 -04:00
parent 9330df8b4c
commit 95ea0e92e7
54 changed files with 225 additions and 206 deletions

View File

@ -235,7 +235,7 @@ SootopolisCity_EventScript_LegendariesSceneFromPokeCenter:: @ 81E5946
fadescreenspeed FADE_TO_BLACK, 8 fadescreenspeed FADE_TO_BLACK, 8
setweather WEATHER_ABNORMAL setweather WEATHER_ABNORMAL
doweather doweather
setvar VAR_0x8004, 0 setvar VAR_0x8004, FALSE @ Just do Groudon/Kyogre fight scene
special Script_DoRayquazaScene special Script_DoRayquazaScene
waitstate waitstate
applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFastestLeft applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFastestLeft
@ -335,7 +335,7 @@ SootopolisCity_EventScript_LegendariesSceneFromDive:: @ 81E5A82
fadescreenspeed FADE_TO_BLACK, 8 fadescreenspeed FADE_TO_BLACK, 8
setweather WEATHER_ABNORMAL setweather WEATHER_ABNORMAL
doweather doweather
setvar VAR_0x8004, 0 setvar VAR_0x8004, FALSE @ Just do Groudon/Kyogre fight scene
special Script_DoRayquazaScene special Script_DoRayquazaScene
waitstate waitstate
applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFastestLeft applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFastestLeft
@ -528,7 +528,7 @@ SootopolisCity_EventScript_RayquazaSceneFromPokeCenter:: @ 81E5C1E
removeobject LOCALID_GROUDON removeobject LOCALID_GROUDON
removeobject LOCALID_KYOGRE removeobject LOCALID_KYOGRE
addobject LOCALID_RAYQUAZA addobject LOCALID_RAYQUAZA
setvar VAR_0x8004, 1 setvar VAR_0x8004, TRUE
special Script_DoRayquazaScene special Script_DoRayquazaScene
waitstate waitstate
playse SE_T_KAMI playse SE_T_KAMI
@ -581,7 +581,7 @@ SootopolisCity_EventScript_RayquazaSceneFromDive:: @ 81E5CCE
removeobject LOCALID_GROUDON removeobject LOCALID_GROUDON
removeobject LOCALID_KYOGRE removeobject LOCALID_KYOGRE
addobject LOCALID_RAYQUAZA addobject LOCALID_RAYQUAZA
setvar VAR_0x8004, 1 setvar VAR_0x8004, TRUE
special Script_DoRayquazaScene special Script_DoRayquazaScene
waitstate waitstate
special SpawnCameraObject special SpawnCameraObject

View File

Before

Width:  |  Height:  |  Size: 964 B

After

Width:  |  Height:  |  Size: 964 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 445 B

After

Width:  |  Height:  |  Size: 445 B

View File

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 259 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 261 B

After

Width:  |  Height:  |  Size: 261 B

View File

Before

Width:  |  Height:  |  Size: 179 B

After

Width:  |  Height:  |  Size: 179 B

View File

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 242 B

After

Width:  |  Height:  |  Size: 242 B

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 534 B

After

Width:  |  Height:  |  Size: 534 B

View File

Before

Width:  |  Height:  |  Size: 815 B

After

Width:  |  Height:  |  Size: 815 B

View File

Before

Width:  |  Height:  |  Size: 264 B

After

Width:  |  Height:  |  Size: 264 B

View File

Before

Width:  |  Height:  |  Size: 336 B

After

Width:  |  Height:  |  Size: 336 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Before

Width:  |  Height:  |  Size: 279 B

After

Width:  |  Height:  |  Size: 279 B

View File

Before

Width:  |  Height:  |  Size: 339 B

After

Width:  |  Height:  |  Size: 339 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 168 B

After

Width:  |  Height:  |  Size: 168 B

View File

Before

Width:  |  Height:  |  Size: 505 B

After

Width:  |  Height:  |  Size: 505 B

View File

Before

Width:  |  Height:  |  Size: 205 B

After

Width:  |  Height:  |  Size: 205 B

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 391 B

After

Width:  |  Height:  |  Size: 391 B

View File

Before

Width:  |  Height:  |  Size: 385 B

After

Width:  |  Height:  |  Size: 385 B

View File

@ -457,23 +457,23 @@ $(TYPESGFXDIR)/move_types.gbapal: $(TYPESGFXDIR)/move_types_1.gbapal \
$(INTERFACEGFXDIR)/bag_screen.4bpp: %.4bpp: %.png $(INTERFACEGFXDIR)/bag_screen.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 53 $(GFX) $< $@ -num_tiles 53
$(RAYQUAZAGFXDIR)/rayquaza.8bpp: %.8bpp: %.png $(RAYQUAZAGFXDIR)/scene_2/rayquaza.8bpp: %.8bpp: %.png
$(GFX) $< $@ -num_tiles 227 $(GFX) $< $@ -num_tiles 227
$(RAYQUAZAGFXDIR)/overcast.4bpp: %.4bpp: %.png $(RAYQUAZAGFXDIR)/scene_2/bg.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 313 $(GFX) $< $@ -num_tiles 313
$(RAYQUAZAGFXDIR)/rayquaza_fly1.4bpp: %.4bpp: %.png $(RAYQUAZAGFXDIR)/scene_3/rayquaza.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 124 $(GFX) $< $@ -num_tiles 124
$(RAYQUAZAGFXDIR)/rayquaza_tail_fix.4bpp: $(RAYQUAZAGFXDIR)/rayquaza_tail.4bpp $(RAYQUAZAGFXDIR)/scene_3/rayquaza_tail_fix.4bpp: $(RAYQUAZAGFXDIR)/scene_3/rayquaza_tail.4bpp
cp $< $@ cp $< $@
head -c 12 /dev/zero >> $@ head -c 12 /dev/zero >> $@
$(RAYQUAZAGFXDIR)/chase_streaks.4bpp: %.4bpp: %.png $(RAYQUAZAGFXDIR)/scene_4/streaks.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 19 $(GFX) $< $@ -num_tiles 19
$(RAYQUAZAGFXDIR)/rayquaza_chase.4bpp: %.4bpp: %.png $(RAYQUAZAGFXDIR)/scene_4/rayquaza.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 155 $(GFX) $< $@ -num_tiles 155
graphics/picture_frame/frame5.4bpp: %.4bpp: %.png graphics/picture_frame/frame5.4bpp: %.4bpp: %.png

View File

@ -3310,8 +3310,8 @@ extern const u32 gBerryTag_Pal[];
// rayquaza scene gfx // rayquaza scene gfx
extern const u32 gRaySceneGroudon_Gfx[]; extern const u32 gRaySceneGroudon_Gfx[];
extern const u32 gRaySceneGroudon2_Gfx[]; extern const u32 gRaySceneGroudonShoulder_Gfx[];
extern const u32 gRaySceneGroudon3_Gfx[]; extern const u32 gRaySceneGroudonClaw_Gfx[];
extern const u32 gRaySceneKyogre_Gfx[]; extern const u32 gRaySceneKyogre_Gfx[];
extern const u32 gRaySceneKyogre2_Gfx[]; extern const u32 gRaySceneKyogre2_Gfx[];
extern const u32 gRaySceneKyogre3_Gfx[]; extern const u32 gRaySceneKyogre3_Gfx[];

View File

@ -1,17 +1,6 @@
#ifndef GUARD_RAYQUAZA_SCENE_H #ifndef GUARD_RAYQUAZA_SCENE_H
#define GUARD_RAYQUAZA_SCENE_H #define GUARD_RAYQUAZA_SCENE_H
void DoRayquazaScene(u8 animId, bool8 onlyOneAnim, void (*callback)(void)); void DoRayquazaScene(u8 animId, bool8 endEarly, void (*callback)(void));
enum
{
RAY_ANIM_DUO_FIGHT_PRE,
RAY_ANIM_DUO_FIGHT,
RAY_ANIM_TAKES_FLIGHT,
RAY_ANIM_DESCENDS,
RAY_ANIM_CHARGES,
RAY_ANIM_CHACES_AWAY,
RAY_ANIM_END
};
#endif // GUARD_RAYQUAZA_SCENE_H #endif // GUARD_RAYQUAZA_SCENE_H

View File

@ -1,4 +0,0 @@
#ifndef GUARD_rom_8011DC0_H
#define GUARD_rom_8011DC0_H
#endif //GUARD_rom_8011DC0_H

View File

@ -384,7 +384,7 @@ static void InitContestMonPixels(u16 species, u8 whichSprite)
} }
} }
#ifdef NONMATCHING //#ifdef NONMATCHING
// functionally equivalent. // functionally equivalent.
static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64])
{ {
@ -399,23 +399,22 @@ static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)
{ {
for (pixelX = 0; pixelX < 8; pixelX++) for (pixelX = 0; pixelX < 8; pixelX++)
{ {
int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2); colorIndex = spriteGfx[(((tileY * 8) + tileX) * 32) + (pixelY << 2) + (pixelX >> 1)];
colorIndex = spriteGfx[offset];
if (pixelX & 1) if (pixelX & 1)
colorIndex >>= 4; colorIndex >>= 4;
else else
colorIndex &= 0xF; colorIndex &= 0xF;
if (colorIndex == 0) // transparent pixel if (colorIndex == 0) // transparent pixel
(*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000; (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = 0x8000;
else else
(*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex]; (*destPixels)[tileY * 8 + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
} }
} }
} }
} }
} }
#else /*#else
NAKED NAKED
static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]) static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64])
{ {
@ -517,7 +516,7 @@ _081303F8:\n\
pop {r0}\n\ pop {r0}\n\
bx r0"); bx r0");
} }
#endif #endif*/
#define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)]) #define VRAM_PICTURE_DATA(x, y) (((u16 *)(BG_SCREEN_ADDR(12)))[(y) * 32 + (x)])

View File

@ -1,73 +1,62 @@
const u32 gRaySceneGroudon_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon.4bpp.lz"); // Scene 1 (RAY_ANIM_DUO_FIGHT / RAY_ANIM_DUO_FIGHT_PRE)
const u32 gRaySceneGroudon2_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon_shoulder.4bpp.lz"); const u32 gRaySceneGroudon_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/groudon.4bpp.lz");
const u32 gRaySceneGroudon3_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon_claw.4bpp.lz"); const u32 gRaySceneGroudonShoulder_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/groudon_shoulder.4bpp.lz");
const u32 gRaySceneGroudonClaw_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/groudon_claw.4bpp.lz");
const u32 gRaySceneKyogre_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/kyogre.4bpp.lz");
const u32 gRaySceneKyogre2_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/kyogre_shoulder.4bpp.lz");
const u32 gRaySceneKyogre3_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/kyogre_fin.4bpp.lz");
const u32 gRaySceneGroudon_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/groudon.gbapal.lz");
const u32 gRaySceneKyogre_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/kyogre.gbapal.lz");
const u32 gRaySceneClouds_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds.4bpp.lz");
const u32 gRaySceneClouds_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds.gbapal.lz"); // pal 1 clouds, pal 2 rain
const u32 gRaySceneClouds1_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds1.bin.lz");
const u32 gRaySceneClouds2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds2.bin.lz");
const u32 gRaySceneClouds3_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_1/clouds3.bin.lz");
const u32 gRaySceneKyogre_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/kyogre.4bpp.lz"); // Scene 2 (RAY_ANIM_TAKES_FLIGHT)
const u32 gRaySceneKyogre2_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/kyogre_shoulder.4bpp.lz"); const u32 gRaySceneSmoke_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/smoke.4bpp.lz");
const u32 gRaySceneKyogre3_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/kyogre_fin.4bpp.lz"); const u32 gRaySceneSmoke_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/smoke.gbapal.lz");
const u32 gRaySceneRayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/rayquaza.8bpp.lz");
const u32 gRaySceneRayquaza_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/rayquaza.gbapal.lz");
const u32 gRaySceneRayquaza_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/rayquaza.bin.lz");
const u32 gRaySceneOvercast_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/bg.4bpp.lz"); // uses pal 2 of gRaySceneRayquaza_Pal
const u32 gRaySceneOvercast_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_2/bg.bin.lz");
const u32 gRaySceneGroudon_Pal[] = INCBIN_U32("graphics/rayquaza_scene/groudon.gbapal.lz"); // Scene 3 (RAY_ANIM_DESCENDS)
const u32 gRaySceneKyogre_Pal[] = INCBIN_U32("graphics/rayquaza_scene/kyogre.gbapal.lz"); const u32 gRaySceneRayquazaFly1_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza.4bpp.lz");
// for some reason there are an extra 0xC bytes at the end of the original 4bpp, so in order to produce the correct lz,
// we have to cat the bytes at the end with a make rule. not sure why those bytes are there, it may have been a bug in Game Freak's software.
const u32 gRaySceneRayquazaTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/rayquaza_tail_fix.4bpp.lz");
const u32 gRaySceneOvercast2_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.4bpp.lz");
const u32 gRaySceneRayquazaLight_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/light.4bpp.lz"); // uses pal 2 of gRaySceneOvercast2_Pal
const u32 gRaySceneOvercast2_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.gbapal.lz");
const u32 gRaySceneOvercast2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/bg.bin.lz");
const u32 gRaySceneRayquazaLight_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_3/light.bin.lz");
const u32 gRaySceneClouds_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/clouds.4bpp.lz"); // Scene 4 (RAY_ANIM_CHARGES)
const u32 gRaySceneClouds_Pal[] = INCBIN_U32("graphics/rayquaza_scene/clouds.gbapal.lz"); // pal 1 clouds, pal 2 rain const u32 gRaySceneChaseBg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/bg.4bpp.lz");
const u32 gRaySceneClouds1_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/clouds1.bin.lz"); const u32 gRaySceneChaseBg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/bg.bin.lz");
const u32 gRaySceneClouds2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/clouds2.bin.lz"); const u32 gRaySceneChaseStreaks_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/streaks.4bpp.lz");
const u32 gRaySceneClouds3_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/clouds3.bin.lz"); const u32 gRaySceneChaseStreaks_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/streaks.bin.lz");
const u32 gRaySceneRayquazaChase_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/rayquaza.4bpp.lz");
const u32 gRayChaseRayquazaChase_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/rayquaza.bin.lz");
const u32 gRayChaseRayquazaChase2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/rayquaza2.bin.lz");
const u32 gRaySceneChase_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_4/bg.gbapal.lz");
const u32 gRaySceneSmoke_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/smoke.4bpp.lz"); // Scene 5 (RAY_ANIM_CHASES_AWAY)
const u32 gRaySceneSmoke_Pal[] = INCBIN_U32("graphics/rayquaza_scene/smoke.gbapal.lz"); const u32 gRaySceneGroudonLeft_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/groudon.4bpp.lz");
const u32 gRaySceneGroudonTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/groudon_tail.4bpp.lz");
const u32 gRaySceneRayquaza_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza.8bpp.lz"); const u32 gRaySceneKyogreRight_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/kyogre.4bpp.lz");
const u32 gRaySceneRayquaza_Pal[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza.gbapal.lz"); const u32 gRaySceneRayquazaHover_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/rayquaza.4bpp.lz");
const u32 gRaySceneRayquaza_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza.bin.lz"); const u32 gRaySceneRayquazaFlyIn_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/rayquaza_tail.4bpp.lz");
const u32 gRaySceneSplash_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/kyogre_splash.4bpp.lz");
const u32 gRaySceneOvercast_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/overcast.4bpp.lz"); // uses pal 2 of gRaySceneRayquaza_Pal const u32 gRaySceneGroudonLeft_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/groudon.gbapal.lz");
const u32 gRaySceneOvercast_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/overcast.bin.lz"); const u32 gRaySceneKyogreRight_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/kyogre.gbapal.lz");
const u32 gRaySceneRayquazaHover_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/rayquaza.gbapal.lz");
const u32 gRaySceneRayquazaFly1_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_fly1.4bpp.lz"); const u32 gRaySceneSplash_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/kyogre_splash.gbapal.lz");
const u32 gRaySceneRayquazaTail_Gfx[] = INCBIN_U32( "graphics/rayquaza_scene/rayquaza_tail_fix.4bpp.lz"); // for some reason there are an extra 0xC bytes at the end of the original 4bpp, so in order to produce the correct lz, we have to cat the bytes at the end with a make rule. not sure why those bytes are there, it may have been a bug in Game Freak's software. const u32 gRaySceneHushBg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/bg.4bpp.lz");
const u32 gRaySceneHushRing_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/ring.8bpp.lz");
const u32 gRaySceneOvercast2_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/overcast2.4bpp.lz"); const u32 gRaySceneHushBg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/bg.bin.lz");
const u32 gRaySceneHushRing_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/ring.bin.lz");
const u32 gRaySceneRayquazaLight_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_light.4bpp.lz"); // uses pal 2 of gRaySceneOvercast2_Pal const u32 gRaySceneHushRing_Map[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/ring_map.bin.lz");
const u32 gRaySceneHushBg_Pal[] = INCBIN_U32("graphics/rayquaza_scene/scene_5/bg.gbapal.lz");
const u32 gRaySceneOvercast2_Pal[] = INCBIN_U32("graphics/rayquaza_scene/overcast2.gbapal.lz");
const u32 gRaySceneOvercast2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/overcast2.bin.lz");
const u32 gRaySceneRayquazaLight_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_light.bin.lz");
const u32 gRaySceneChaseBg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/chase_bg.4bpp.lz");
const u32 gRaySceneChaseBg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/chase_bg.bin.lz");
const u32 gRaySceneChaseStreaks_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/chase_streaks.4bpp.lz");
const u32 gRaySceneChaseStreaks_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/chase_streaks.bin.lz");
const u32 gRaySceneRayquazaChase_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_chase.4bpp.lz");
const u32 gRayChaseRayquazaChase_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_chase.bin.lz");
const u32 gRayChaseRayquazaChase2_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_chase2.bin.lz");
const u32 gRaySceneChase_Pal[] = INCBIN_U32("graphics/rayquaza_scene/chase.gbapal.lz");
const u32 gRaySceneGroudonLeft_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon_left.4bpp.lz");
const u32 gRaySceneGroudonTail_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/groudon_tail.4bpp.lz");
const u32 gRaySceneKyogreRight_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/kyogre_right.4bpp.lz");
const u32 gRaySceneRayquazaHover_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_hover.4bpp.lz");
const u32 gRaySceneRayquazaFlyIn_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_flyin.4bpp.lz");
const u32 gRaySceneSplash_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/splash.4bpp.lz");
const u32 gRaySceneGroudonLeft_Pal[] = INCBIN_U32("graphics/rayquaza_scene/groudon_left.gbapal.lz");
const u32 gRaySceneKyogreRight_Pal[] = INCBIN_U32("graphics/rayquaza_scene/kyogre_right.gbapal.lz");
const u32 gRaySceneRayquazaHover_Pal[] = INCBIN_U32("graphics/rayquaza_scene/rayquaza_hover.gbapal.lz");
const u32 gRaySceneSplash_Pal[] = INCBIN_U32("graphics/rayquaza_scene/splash.gbapal.lz");
const u32 gRaySceneHushBg_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/hush_bg.4bpp.lz");
const u32 gRaySceneHushRing_Gfx[] = INCBIN_U32("graphics/rayquaza_scene/hush_ring.8bpp.lz");
const u32 gRaySceneHushBg_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/hush_bg.bin.lz");
const u32 gRaySceneHushRing_Tilemap[] = INCBIN_U32("graphics/rayquaza_scene/hush_ring.bin.lz");
const u32 gRaySceneHushRing_Map[] = INCBIN_U32("graphics/rayquaza_scene/hush_ring_map.bin.lz");
const u32 gRaySceneHushBg_Pal[] = INCBIN_U32("graphics/rayquaza_scene/hush_bg.gbapal.lz");

View File

@ -3888,12 +3888,14 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
void Script_DoRayquazaScene(void) void Script_DoRayquazaScene(void)
{ {
if (gSpecialVar_0x8004 == 0) if (!gSpecialVar_0x8004)
{ {
// Groudon/Kyogre fight scene
DoRayquazaScene(0, TRUE, CB2_ReturnToFieldContinueScriptPlayMapMusic); DoRayquazaScene(0, TRUE, CB2_ReturnToFieldContinueScriptPlayMapMusic);
} }
else else
{ {
// Rayquaza arrives scene
DoRayquazaScene(1, FALSE, CB2_ReturnToFieldContinueScriptPlayMapMusic); DoRayquazaScene(1, FALSE, CB2_ReturnToFieldContinueScriptPlayMapMusic);
} }
} }

View File

@ -18,84 +18,129 @@
#include "constants/rgb.h" #include "constants/rgb.h"
#include "random.h" #include "random.h"
struct RaySceneStruct /*
This file handles the cutscene showing Rayquaza arriving to settle the Groudon/Kyogre fight
It consists of 5 separate scenes:
- Groudon and Kyogre facing one another in a thunderstorm (RAY_ANIM_DUO_FIGHT)
- Over the shoulder of Rayquaza flying (RAY_ANIM_TAKES_FLIGHT)
- Rayquaza emerging from a spotlight down through the clouds (RAY_ANIM_DESCENDS)
- A close-up of Rayquaza flying down (RAY_ANIM_CHARGES)
- Rayquaza floating above Groudon/Kyogre as they back away offscreen (RAY_ANIM_CHASES_AWAY)
Notably this is re-used to show the Groudon/Kyogre fight when the player first arrives
in Sootopolis during the conflict, which uses a shortened version of the first scene
This is indicated by the endEarly argument to DoRayquazaScene
*/
enum
{ {
MainCallback callback; RAY_ANIM_DUO_FIGHT_PRE,
u8 tilemapBuffers[4][0x800]; RAY_ANIM_DUO_FIGHT,
u16 field_2004; // set but unused RAY_ANIM_TAKES_FLIGHT,
u8 animId; RAY_ANIM_DESCENDS,
bool8 onlyOneAnim; RAY_ANIM_CHARGES,
s16 field_2008; RAY_ANIM_CHASES_AWAY,
s16 field_200A; RAY_ANIM_END
u8 unusedFields[12]; // completely unused
}; };
// EWRAM vars #define GFXTAG_GROUDON 30505
static EWRAM_DATA struct RaySceneStruct *sRayScene = NULL; #define GFXTAG_GROUDON_SHOULDER 30506
#define GFXTAG_GROUDON_CLAW 30507
#define GFXTAG_KYOGRE1 30508
#define GFXTAG_KYOGRE2 30509
#define GFXTAG_KYOGRE3 30510
#define GFXTAG_SMOKE 30555
#define GFXTAG_GROUDON_SIDE 30565
#define PALTAG_GROUDON 30505
#define PALTAG_KYOGRE 30508
#define PALTAG_SMOKE 30555
struct RayquazaScene
{
MainCallback exitCallback;
u8 tilemapBuffers[4][BG_SCREEN_SIZE];
u16 unk; // never read
u8 animId;
bool8 endEarly;
s16 field_2008;
s16 field_200A;
u8 unused[12];
};
static EWRAM_DATA struct RayquazaScene *sRayScene = NULL;
// this file's functions
static void Task_DuoFightAnim(u8 taskId);
static void Task_RayTakesFlightAnim(u8 taskId);
static void Task_RayDescendsAnim(u8 taskId);
static void Task_RayChargesAnim(u8 taskId);
static void Task_RayChasesAwayAnim(u8 taskId);
static void Task_HandleRayDescends(u8 taskId);
static void Task_RayDescendsEnd(u8 taskId);
static void Task_HandleRayCharges(u8 taskId);
static void sub_81D8AD8(u8 taskId);
static void sub_81D8B2C(u8 taskId);
static void Task_RayChargesEnd(u8 taskId);
static void Task_HandleRayChasesAway(u8 taskId);
static void sub_81D8FB0(u8 taskId);
static void sub_81D7228(u8 taskId);
static void Task_HandleDuoFight(u8 taskId);
static void sub_81D752C(u8 taskId);
static void Task_DuoFightEnd(u8 taskId);
static void Task_HandleRayTakesFlight(u8 taskId);
static void sub_81D81A4(u8 taskId);
static void Task_RayTakesFlightEnd(u8 taskId);
static void sub_81D94D4(u8 taskId);
static void sub_81D93D8(u8 taskId);
static void Task_RayChasesAwayEnd(u8 taskId);
static void sub_81D90A8(u8 taskId);
static void sub_81D98B4(u8 taskId);
static void Task_EndAfterFadeScreen(u8 taskId);
static void CB2_InitRayquazaScene(void); static void CB2_InitRayquazaScene(void);
static void CB2_RayquazaScene(void); static void CB2_RayquazaScene(void);
static void Task_EndAfterFadeScreen(u8 taskId);
// RAY_ANIM_DUO_FIGHT_PRE / RAY_ANIM_DUO_FIGHT
static void Task_DuoFightAnim(u8 taskId);
static void Task_HandleDuoFight(u8 taskId);
static void Task_DuoFightEnd(u8 taskId);
static void DuoFightEnd(u8 taskId, s8 palDelay);
static void sub_81D7228(u8 taskId);
static void sub_81D752C(u8 taskId);
static void sub_81D750C(void); static void sub_81D750C(void);
static void sub_81D7438(void); static void sub_81D7438(void);
static void sub_81D7480(void); static void sub_81D7480(void);
static void sub_81D74C8(void); static void sub_81D74C8(void);
static void sub_81D8BB4(void);
static void sub_81D6A20(struct Sprite *sprite); static void sub_81D6A20(struct Sprite *sprite);
static void sub_81D6D20(struct Sprite *sprite); static void sub_81D6D20(struct Sprite *sprite);
static void sub_81D7860(struct Sprite *sprite); static void sub_81D7860(struct Sprite *sprite);
static void sub_81D7D14(struct Sprite *sprite); static void sub_81D7D14(struct Sprite *sprite);
static void sub_81D7700(struct Sprite *sprite); static void sub_81D7700(struct Sprite *sprite);
static void sub_81D7A60(struct Sprite *sprite); static void sub_81D7A60(struct Sprite *sprite);
static void sub_81D874C(struct Sprite *sprite);
static void sub_81D9338(struct Sprite *sprite);
static void sub_81D9420(struct Sprite *sprite);
static void sub_81D8260(struct Sprite *sprite);
static void sub_81D961C(struct Sprite *sprite);
static void sub_81D97E0(struct Sprite *sprite);
static void sub_81D9528(struct Sprite *sprite);
static u8 sub_81D7664(void); static u8 sub_81D7664(void);
static u8 sub_81D78BC(void); static u8 sub_81D78BC(void);
// RAY_ANIM_TAKES_FLIGHT
static void Task_RayTakesFlightAnim(u8 taskId);
static void Task_HandleRayTakesFlight(u8 taskId);
static void Task_RayTakesFlightEnd(u8 taskId);
static void sub_81D81A4(u8 taskId);
static void sub_81D8260(struct Sprite *sprite);
// RAY_ANIM_DESCENDS
static void Task_RayDescendsAnim(u8 taskId);
static void Task_HandleRayDescends(u8 taskId);
static void Task_RayDescendsEnd(u8 taskId);
static void sub_81D874C(struct Sprite *sprite);
static u8 sub_81D86CC(void); static u8 sub_81D86CC(void);
static void DuoFightEnd(u8 taskId, s8 palDelay);
// RAY_ANIM_CHARGES
static void Task_RayChargesAnim(u8 taskId);
static void Task_HandleRayCharges(u8 taskId);
static void Task_RayChargesEnd(u8 taskId);
static void sub_81D8AD8(u8 taskId);
static void sub_81D8B2C(u8 taskId);
static void sub_81D8BB4(void);
// RAY_ANIM_CHASES_AWAY
static void Task_RayChasesAwayAnim(u8 taskId);
static void Task_HandleRayChasesAway(u8 taskId);
static void Task_RayChasesAwayEnd(u8 taskId);
static void sub_81D8FB0(u8 taskId);
static void sub_81D94D4(u8 taskId);
static void sub_81D93D8(u8 taskId);
static void sub_81D90A8(u8 taskId);
static void sub_81D98B4(u8 taskId);
static void sub_81D9420(struct Sprite *sprite);
static void sub_81D97E0(struct Sprite *sprite);
static void sub_81D9528(struct Sprite *sprite);
static void sub_81D961C(struct Sprite *sprite);
static void sub_81D9338(struct Sprite *sprite);
static void sub_81D9868(struct Sprite *sprite, u8 animNum, s16 x, s16 y); static void sub_81D9868(struct Sprite *sprite, u8 animNum, s16 x, s16 y);
// const rom data
static const TaskFunc sTasksForAnimations[] = static const TaskFunc sTasksForAnimations[] =
{ {
[RAY_ANIM_DUO_FIGHT_PRE] = Task_DuoFightAnim, [RAY_ANIM_DUO_FIGHT_PRE] = Task_DuoFightAnim,
[RAY_ANIM_DUO_FIGHT] = Task_DuoFightAnim, [RAY_ANIM_DUO_FIGHT] = Task_DuoFightAnim,
[RAY_ANIM_TAKES_FLIGHT] = Task_RayTakesFlightAnim, [RAY_ANIM_TAKES_FLIGHT] = Task_RayTakesFlightAnim,
[RAY_ANIM_DESCENDS] = Task_RayDescendsAnim, [RAY_ANIM_DESCENDS] = Task_RayDescendsAnim,
[RAY_ANIM_CHARGES] = Task_RayChargesAnim, [RAY_ANIM_CHARGES] = Task_RayChargesAnim,
[RAY_ANIM_CHACES_AWAY] = Task_RayChasesAwayAnim, [RAY_ANIM_CHASES_AWAY] = Task_RayChasesAwayAnim,
[RAY_ANIM_END] = Task_EndAfterFadeScreen, [RAY_ANIM_END] = Task_EndAfterFadeScreen,
}; };
static const struct OamData sOamData_862A6BC = static const struct OamData sOamData_862A6BC =
@ -260,8 +305,8 @@ static const union AnimCmd *const sSpriteAnimTable_862A724[] =
static const struct SpriteTemplate sUnknown_0862A72C = static const struct SpriteTemplate sUnknown_0862A72C =
{ {
.tileTag = 30505, .tileTag = GFXTAG_GROUDON,
.paletteTag = 30505, .paletteTag = PALTAG_GROUDON,
.oam = &sOamData_862A6BC, .oam = &sOamData_862A6BC,
.anims = sSpriteAnimTable_862A724, .anims = sSpriteAnimTable_862A724,
.images = NULL, .images = NULL,
@ -282,8 +327,8 @@ static const union AnimCmd *const sSpriteAnimTable_862A74C[] =
static const struct SpriteTemplate sUnknown_0862A750 = static const struct SpriteTemplate sUnknown_0862A750 =
{ {
.tileTag = 30506, .tileTag = GFXTAG_GROUDON_SHOULDER,
.paletteTag = 30505, .paletteTag = PALTAG_GROUDON,
.oam = &sOamData_862A6C4, .oam = &sOamData_862A6C4,
.anims = sSpriteAnimTable_862A74C, .anims = sSpriteAnimTable_862A74C,
.images = NULL, .images = NULL,
@ -304,8 +349,8 @@ static const union AnimCmd *const sSpriteAnimTable_862A770[] =
static const struct SpriteTemplate sUnknown_0862A774 = static const struct SpriteTemplate sUnknown_0862A774 =
{ {
.tileTag = 30507, .tileTag = GFXTAG_GROUDON_CLAW,
.paletteTag = 30505, .paletteTag = PALTAG_GROUDON,
.oam = &sOamData_862A6CC, .oam = &sOamData_862A6CC,
.anims = sSpriteAnimTable_862A770, .anims = sSpriteAnimTable_862A770,
.images = NULL, .images = NULL,
@ -391,8 +436,8 @@ static const union AnimCmd *const sSpriteAnimTable_862A7F8[] =
static const struct SpriteTemplate sUnknown_0862A81C = static const struct SpriteTemplate sUnknown_0862A81C =
{ {
.tileTag = 30508, .tileTag = GFXTAG_KYOGRE1,
.paletteTag = 30508, .paletteTag = PALTAG_KYOGRE,
.oam = &sOamData_862A6D4, .oam = &sOamData_862A6D4,
.anims = sSpriteAnimTable_862A7F8, .anims = sSpriteAnimTable_862A7F8,
.images = NULL, .images = NULL,
@ -416,8 +461,8 @@ static const union AnimCmd *const sSpriteAnimTable_862A848[] =
static const struct SpriteTemplate sUnknown_0862A84C = static const struct SpriteTemplate sUnknown_0862A84C =
{ {
.tileTag = 30509, .tileTag = GFXTAG_KYOGRE2,
.paletteTag = 30508, .paletteTag = PALTAG_KYOGRE,
.oam = &sOamData_862A6DC, .oam = &sOamData_862A6DC,
.anims = sSpriteAnimTable_862A848, .anims = sSpriteAnimTable_862A848,
.images = NULL, .images = NULL,
@ -427,8 +472,8 @@ static const struct SpriteTemplate sUnknown_0862A84C =
static const struct SpriteTemplate sUnknown_0862A864 = static const struct SpriteTemplate sUnknown_0862A864 =
{ {
.tileTag = 30510, .tileTag = GFXTAG_KYOGRE3,
.paletteTag = 30508, .paletteTag = PALTAG_KYOGRE,
.oam = &sOamData_862A6C4, .oam = &sOamData_862A6C4,
.anims = sSpriteAnimTable_862A74C, .anims = sSpriteAnimTable_862A74C,
.images = NULL, .images = NULL,
@ -500,18 +545,18 @@ static const union AnimCmd *const sSpriteAnimTable_862A8BC[] =
static const struct CompressedSpriteSheet sUnknown_0862A8C4 = static const struct CompressedSpriteSheet sUnknown_0862A8C4 =
{ {
gRaySceneGroudon_Gfx, 0x3000, 30505 gRaySceneGroudon_Gfx, 0x3000, GFXTAG_GROUDON
}; };
static const struct CompressedSpritePalette sUnknown_0862A8CC = static const struct CompressedSpritePalette sUnknown_0862A8CC =
{ {
gRaySceneGroudon_Pal, 30505 gRaySceneGroudon_Pal, PALTAG_GROUDON
}; };
static const struct SpriteTemplate sUnknown_0862A8D4 = static const struct SpriteTemplate sUnknown_0862A8D4 =
{ {
.tileTag = 30505, .tileTag = GFXTAG_GROUDON,
.paletteTag = 30505, .paletteTag = PALTAG_GROUDON,
.oam = &sOamData_862A6BC, .oam = &sOamData_862A6BC,
.anims = sSpriteAnimTable_862A8BC, .anims = sSpriteAnimTable_862A8BC,
.images = NULL, .images = NULL,
@ -532,13 +577,13 @@ static const union AnimCmd *const sSpriteAnimTable_862A8F4[] =
static const struct CompressedSpriteSheet sUnknown_0862A8F8 = static const struct CompressedSpriteSheet sUnknown_0862A8F8 =
{ {
gRaySceneGroudon2_Gfx, 0x200, 30506 gRaySceneGroudonShoulder_Gfx, 0x200, GFXTAG_GROUDON_SHOULDER
}; };
static const struct SpriteTemplate sUnknown_0862A900 = static const struct SpriteTemplate sUnknown_0862A900 =
{ {
.tileTag = 30506, .tileTag = GFXTAG_GROUDON_SHOULDER,
.paletteTag = 30505, .paletteTag = PALTAG_GROUDON,
.oam = &sOamData_862A6C4, .oam = &sOamData_862A6C4,
.anims = sSpriteAnimTable_862A8F4, .anims = sSpriteAnimTable_862A8F4,
.images = NULL, .images = NULL,
@ -559,13 +604,13 @@ static const union AnimCmd *const sSpriteAnimTable_862A920[] =
static const struct CompressedSpriteSheet sUnknown_0862A924 = static const struct CompressedSpriteSheet sUnknown_0862A924 =
{ {
gRaySceneGroudon3_Gfx, 0x400, 30507 gRaySceneGroudonClaw_Gfx, 0x400, GFXTAG_GROUDON_CLAW
}; };
static const struct SpriteTemplate sUnknown_0862A92C = static const struct SpriteTemplate sUnknown_0862A92C =
{ {
.tileTag = 30507, .tileTag = GFXTAG_GROUDON_CLAW,
.paletteTag = 30505, .paletteTag = PALTAG_GROUDON,
.oam = &sOamData_862A6CC, .oam = &sOamData_862A6CC,
.anims = sSpriteAnimTable_862A920, .anims = sSpriteAnimTable_862A920,
.images = NULL, .images = NULL,
@ -651,18 +696,18 @@ static const union AnimCmd *const sSpriteAnimTable_862A9B0[] =
static const struct CompressedSpriteSheet sUnknown_0862A9D4 = static const struct CompressedSpriteSheet sUnknown_0862A9D4 =
{ {
gRaySceneKyogre_Gfx, 0xF00, 30508 gRaySceneKyogre_Gfx, 0xF00, GFXTAG_KYOGRE1
}; };
static const struct CompressedSpritePalette sUnknown_0862A9DC = static const struct CompressedSpritePalette sUnknown_0862A9DC =
{ {
gRaySceneKyogre_Pal, 30508 gRaySceneKyogre_Pal, PALTAG_KYOGRE
}; };
static const struct SpriteTemplate sUnknown_0862A9E4 = static const struct SpriteTemplate sUnknown_0862A9E4 =
{ {
.tileTag = 30508, .tileTag = GFXTAG_KYOGRE1,
.paletteTag = 30508, .paletteTag = PALTAG_KYOGRE,
.oam = &sOamData_862A6D4, .oam = &sOamData_862A6D4,
.anims = sSpriteAnimTable_862A9B0, .anims = sSpriteAnimTable_862A9B0,
.images = NULL, .images = NULL,
@ -686,13 +731,13 @@ static const union AnimCmd *const sSpriteAnimTable_862AA10[] =
static const struct CompressedSpriteSheet sUnknown_0862AA14 = static const struct CompressedSpriteSheet sUnknown_0862AA14 =
{ {
gRaySceneKyogre2_Gfx, 0xC0, 30509 gRaySceneKyogre2_Gfx, 0xC0, GFXTAG_KYOGRE2
}; };
static const struct SpriteTemplate sUnknown_0862AA1C = static const struct SpriteTemplate sUnknown_0862AA1C =
{ {
.tileTag = 30509, .tileTag = GFXTAG_KYOGRE2,
.paletteTag = 30508, .paletteTag = PALTAG_KYOGRE,
.oam = &sOamData_862A6DC, .oam = &sOamData_862A6DC,
.anims = sSpriteAnimTable_862AA10, .anims = sSpriteAnimTable_862AA10,
.images = NULL, .images = NULL,
@ -702,13 +747,13 @@ static const struct SpriteTemplate sUnknown_0862AA1C =
static const struct CompressedSpriteSheet sUnknown_0862AA34 = static const struct CompressedSpriteSheet sUnknown_0862AA34 =
{ {
gRaySceneKyogre3_Gfx, 0x200, 30510 gRaySceneKyogre3_Gfx, 0x200, GFXTAG_KYOGRE3
}; };
static const struct SpriteTemplate sUnknown_0862AA3C = static const struct SpriteTemplate sUnknown_0862AA3C =
{ {
.tileTag = 30510, .tileTag = GFXTAG_KYOGRE3,
.paletteTag = 30508, .paletteTag = PALTAG_KYOGRE,
.oam = &sOamData_862A6C4, .oam = &sOamData_862A6C4,
.anims = sSpriteAnimTable_862A8F4, .anims = sSpriteAnimTable_862A8F4,
.images = NULL, .images = NULL,
@ -773,18 +818,18 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_862AA8C[] =
static const struct CompressedSpriteSheet sUnknown_0862AA90 = static const struct CompressedSpriteSheet sUnknown_0862AA90 =
{ {
gRaySceneSmoke_Gfx, 0x100, 30555 gRaySceneSmoke_Gfx, 0x100, GFXTAG_SMOKE
}; };
static const struct CompressedSpritePalette sUnknown_0862AA98 = static const struct CompressedSpritePalette sUnknown_0862AA98 =
{ {
gRaySceneSmoke_Pal, 30555 gRaySceneSmoke_Pal, PALTAG_SMOKE
}; };
static const struct SpriteTemplate sUnknown_0862AAA0 = static const struct SpriteTemplate sUnknown_0862AAA0 =
{ {
.tileTag = 30555, .tileTag = GFXTAG_SMOKE,
.paletteTag = 30555, .paletteTag = PALTAG_SMOKE,
.oam = &sOamData_862A6D4, .oam = &sOamData_862A6D4,
.anims = sSpriteAnimTable_862AA68, .anims = sSpriteAnimTable_862AA68,
.images = NULL, .images = NULL,
@ -1086,7 +1131,7 @@ static const union AnimCmd *const sSpriteAnimTable_862AC24[] =
static const struct CompressedSpriteSheet sUnknown_0862AC28 = static const struct CompressedSpriteSheet sUnknown_0862AC28 =
{ {
gRaySceneGroudonLeft_Gfx, 0x1800, 30565 gRaySceneGroudonLeft_Gfx, 0x1800, GFXTAG_GROUDON_SIDE
}; };
static const struct CompressedSpriteSheet sUnknown_0862AC30 = static const struct CompressedSpriteSheet sUnknown_0862AC30 =
@ -1116,7 +1161,7 @@ static const struct CompressedSpriteSheet sUnknown_0862AC50 =
static const struct CompressedSpritePalette sUnknown_0862AC58 = static const struct CompressedSpritePalette sUnknown_0862AC58 =
{ {
gRaySceneGroudonLeft_Pal, 30565 gRaySceneGroudonLeft_Pal, GFXTAG_GROUDON_SIDE
}; };
static const struct CompressedSpritePalette sUnknown_0862AC60 = static const struct CompressedSpritePalette sUnknown_0862AC60 =
@ -1136,7 +1181,7 @@ static const struct CompressedSpritePalette sUnknown_0862AC70 =
static const struct SpriteTemplate sUnknown_0862AC78 = static const struct SpriteTemplate sUnknown_0862AC78 =
{ {
.tileTag = 30565, .tileTag = GFXTAG_GROUDON_SIDE,
.paletteTag = 30565, .paletteTag = 30565,
.oam = &sOamData_862A6BC, .oam = &sOamData_862A6BC,
.anims = sSpriteAnimTable_862AB70, .anims = sSpriteAnimTable_862AB70,
@ -1232,12 +1277,12 @@ static const struct BgTemplate sUnknown_0862AD08[] =
}; };
// code // code
void DoRayquazaScene(u8 animId, bool8 onlyOneAnim, void (*callback)(void)) void DoRayquazaScene(u8 animId, bool8 endEarly, void (*exitCallback)(void))
{ {
sRayScene = AllocZeroed(sizeof(*sRayScene)); sRayScene = AllocZeroed(sizeof(*sRayScene));
sRayScene->animId = animId; sRayScene->animId = animId;
sRayScene->callback = callback; sRayScene->exitCallback = exitCallback;
sRayScene->onlyOneAnim = onlyOneAnim; sRayScene->endEarly = endEarly;
SetMainCallback2(CB2_InitRayquazaScene); SetMainCallback2(CB2_InitRayquazaScene);
} }
@ -1277,7 +1322,7 @@ static void Task_EndAfterFadeScreen(u8 taskId)
{ {
ResetSpriteData(); ResetSpriteData();
FreeAllSpritePalettes(); FreeAllSpritePalettes();
SetMainCallback2(sRayScene->callback); SetMainCallback2(sRayScene->exitCallback);
Free(sRayScene); Free(sRayScene);
DestroyTask(taskId); DestroyTask(taskId);
} }
@ -1287,14 +1332,14 @@ static void Task_SetNextAnim(u8 taskId)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
if (sRayScene->onlyOneAnim == TRUE) if (sRayScene->endEarly == TRUE)
{ {
gTasks[taskId].func = Task_EndAfterFadeScreen; gTasks[taskId].func = Task_EndAfterFadeScreen;
} }
else else
{ {
sRayScene->animId++; sRayScene->animId++;
sRayScene->field_2004 = 0; sRayScene->unk = 0;
gTasks[taskId].func = sTasksForAnimations[sRayScene->animId]; gTasks[taskId].func = sTasksForAnimations[sRayScene->animId];
} }
} }
@ -2405,6 +2450,7 @@ static void Task_HandleRayCharges(u8 taskId)
} }
} }
// These two, BG scrolling for Rayquaza charge
static void sub_81D8AD8(u8 taskId) static void sub_81D8AD8(u8 taskId)
{ {
s16 *data = gTasks[taskId].data; s16 *data = gTasks[taskId].data;

View File

@ -43,7 +43,6 @@
#include "trainer_card.h" #include "trainer_card.h"
#include "window.h" #include "window.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "rom_8011DC0.h"
#include "union_room.h" #include "union_room.h"
#include "constants/rgb.h" #include "constants/rgb.h"

View File

@ -30,7 +30,6 @@
#include "pokemon_summary_screen.h" #include "pokemon_summary_screen.h"
#include "pokemon_storage_system.h" #include "pokemon_storage_system.h"
#include "random.h" #include "random.h"
#include "rom_8011DC0.h"
#include "save.h" #include "save.h"
#include "script.h" #include "script.h"
#include "sound.h" #include "sound.h"