diff --git a/data/rom_1.s b/data/rom_1.s index 34e7c656..540698c5 100644 --- a/data/rom_1.s +++ b/data/rom_1.s @@ -787,8 +787,16 @@ gRayquazaBonusClear_Gfx:: @ 0x081408B4 .incbin "graphics/stage/rayquaza/rayquaza_bonus_clear.4bpp" .space 0x20 +@ The capture cutscene, streamed over the tile-704 overlay slot from three +@ places (main_board_center_capture_hole.c, main_board_to_be_split.c and +@ save_and_restore_game.c). t0..101 is the float-up fx drawn by +@ gPokemonFloatOamFramesets, t127..222 the ball absorb fx from +@ gMonCatchBallAbsorbPokemonFxSpriteSet. t102..105 and t123..126 are sub-slots +@ the ball graphic streams into, from gCaptureBallTilesGfx. +@ Unlike the other sheets here the copy is 0x20 short of the label, and that +@ last tile is not blank, so it stays in the sheet rather than becoming .space. gCaptureScreenTilesGfx:: @ 0x081428D4 - .incbin "baserom.gba", 0x1428D4, 0x1C20 + .incbin "graphics/stage/main/capture_screen.4bpp" .include "data/graphics/mon_hatch_sprites_pals.inc" diff --git a/graphics/stage/main/capture_screen_absorb_fx.png b/graphics/stage/main/capture_screen_absorb_fx.png new file mode 100644 index 00000000..f087e31b Binary files /dev/null and b/graphics/stage/main/capture_screen_absorb_fx.png differ diff --git a/graphics/stage/main/capture_screen_capture_ball_slot_0.png b/graphics/stage/main/capture_screen_capture_ball_slot_0.png new file mode 100644 index 00000000..3a7a03ed Binary files /dev/null and b/graphics/stage/main/capture_screen_capture_ball_slot_0.png differ diff --git a/graphics/stage/main/capture_screen_capture_ball_slot_1.png b/graphics/stage/main/capture_screen_capture_ball_slot_1.png new file mode 100644 index 00000000..d0ce92d1 Binary files /dev/null and b/graphics/stage/main/capture_screen_capture_ball_slot_1.png differ diff --git a/graphics/stage/main/capture_screen_float_mon.png b/graphics/stage/main/capture_screen_float_mon.png new file mode 100644 index 00000000..384a80d9 Binary files /dev/null and b/graphics/stage/main/capture_screen_float_mon.png differ diff --git a/graphics/stage/main/capture_screen_unreferenced_gap.png b/graphics/stage/main/capture_screen_unreferenced_gap.png new file mode 100644 index 00000000..ef991088 Binary files /dev/null and b/graphics/stage/main/capture_screen_unreferenced_gap.png differ diff --git a/graphics/stage/main/capture_screen_unused_tail.png b/graphics/stage/main/capture_screen_unused_tail.png new file mode 100644 index 00000000..30e1fbe1 Binary files /dev/null and b/graphics/stage/main/capture_screen_unused_tail.png differ diff --git a/graphics/stage/main/main_stage_gfx.json b/graphics/stage/main/main_stage_gfx.json index b788c12a..2bab6e83 100644 --- a/graphics/stage/main/main_stage_gfx.json +++ b/graphics/stage/main/main_stage_gfx.json @@ -9,26 +9,26 @@ "files": [ { "gfx_filename": "board_action", - "segments":[ + "segments": [ { - "segfile": "board_action_text_large", - "width": 8 + "segfile": "board_action_text_large", + "width": 8 }, { - "segfile": "board_action_text_medium", - "width": 8 + "segfile": "board_action_text_medium", + "width": 8 }, { - "segfile": "board_action_text_small", - "width": 6 + "segfile": "board_action_text_small", + "width": 6 }, { - "segfile": "board_action_bolts", - "width": 2 + "segfile": "board_action_bolts", + "width": 2 }, { - "segfile": "board_action_sparkle", - "width": 2 + "segfile": "board_action_sparkle", + "width": 2 } ], "palette": "board_action_obj.gbapal", @@ -36,50 +36,50 @@ }, { "gfx_filename": "catch_tile_reveal", - "segments":[ + "segments": [ { - "segfile": "catch_tile_reveal_shards_0", - "width": 4 + "segfile": "catch_tile_reveal_shards_0", + "width": 4 }, { - "segfile": "catch_tile_reveal_shards_1", - "width": 2 + "segfile": "catch_tile_reveal_shards_1", + "width": 2 }, { - "segfile": "catch_tile_reveal_specks_0", - "width": 1 + "segfile": "catch_tile_reveal_specks_0", + "width": 1 }, { - "segfile": "catch_tile_reveal_shards_2", - "width": 2 + "segfile": "catch_tile_reveal_shards_2", + "width": 2 }, { - "segfile": "catch_tile_reveal_specks_1", - "width": 1 + "segfile": "catch_tile_reveal_specks_1", + "width": 1 }, { - "segfile": "catch_tile_reveal_shards_3", - "width": 2 + "segfile": "catch_tile_reveal_shards_3", + "width": 2 }, { - "segfile": "catch_tile_reveal_wave_0", - "width": 4 + "segfile": "catch_tile_reveal_wave_0", + "width": 4 }, { - "segfile": "catch_tile_reveal_debris", - "width": 5 + "segfile": "catch_tile_reveal_debris", + "width": 5 }, { - "segfile": "catch_tile_reveal_wave_1", - "width": 4 + "segfile": "catch_tile_reveal_wave_1", + "width": 4 }, { - "segfile": "catch_tile_reveal_wave_1_cap", - "width": 1 + "segfile": "catch_tile_reveal_wave_1_cap", + "width": 1 }, { - "segfile": "catch_tile_reveal_dome", - "width": 4 + "segfile": "catch_tile_reveal_dome", + "width": 4 } ], "palette": "catch_tile_reveal.gbapal", @@ -87,74 +87,74 @@ }, { "gfx_filename": "gunk_084F61EC", - "mwidth":8, - "align":1, + "mwidth": 8, + "align": 1, "palette": "bonus_stage_obj.gbapal", "palbank": 5 }, { "gfx_filename": "gunk_0844AA0C", - "mwidth":6, + "mwidth": 6, "mheight": 6, - "oam":true, + "oam": true, "palette": "../main/bonus_stage_obj.gbapal", "palbank": 4 }, { "gfx_filename": "pika_spinner", - "mwidth":3, - "mheight":3, - "width":12, - "oam":true, + "mwidth": 3, + "mheight": 3, + "width": 12, + "oam": true, "palette": "../ruby/ruby_board_palset_0.gbapal", "palbank": 3 }, { "gfx_filename": "jirachi_banner", - "mwidth":30, - "mheight":9, - "oam":true + "mwidth": 30, + "mheight": 9, + "oam": true }, { "gfx_filename": "travel", - "segments":[ + "segments": [ { "segfile": "travel_banner", - "mwidth":30, - "mheight":8, - "oam":true + "mwidth": 30, + "mheight": 8, + "oam": true }, { "segfile": "travel_bottom_border", - "width":5 + "width": 5 }, { "segfile": "travel_pole", - "width":4 + "width": 4 }, { "segfile": "travel_arrows", - "mwidth":3, - "mheight":4, - "oam":true + "mwidth": 3, + "mheight": 4, + "oam": true }, { "segfile": "travel_pole_base", - "width":2 + "width": 2 } ] }, { "gfx_filename": "evo_banner", - "mheight":9, - "mwidth":30, - "oam":true + "mheight": 9, + "mwidth": 30, + "oam": true }, { "gfx_filename": "game_over_text", "mheight": 2, "mwidth": 2, - "width":16, + "width": 16, "palette": "bonus_clear_text_lit.gbapal", "palbank": 0 }, @@ -165,14 +165,14 @@ }, { "gfx_filename": "latios", - "mheight":8, - "mwidth":8, + "mheight": 8, + "mwidth": 8, "palette": "bonus_stage_lit.gbapal", "palbank": 0 }, { "gfx_filename": "latios_arm", - "width":2, + "width": 2, "palette": "bonus_stage_lit.gbapal", "palbank": 0 }, @@ -180,20 +180,20 @@ "gfx_filename": "ball_save", "segments": [ { - "segfile":"ball_save_banner", - "mwidth":16, - "mheight":8, - "oam":true + "segfile": "ball_save_banner", + "mwidth": 16, + "mheight": 8, + "oam": true }, { - "segfile":"ball_save_latias", - "width":8, - "height":8 + "segfile": "ball_save_latias", + "width": 8, + "height": 8 }, { - "segfile":"ball_save_latias_arm", - "width":2, - "height":3 + "segfile": "ball_save_latias_arm", + "width": 2, + "height": 3 } ], "palette": "bonus_stage_lit.gbapal", @@ -203,31 +203,31 @@ "gfx_filename": "end_of_ball", "segments": [ { - "segfile":"end_of_ball_left", - "mwidth":8, - "mheight":8 + "segfile": "end_of_ball_left", + "mwidth": 8, + "mheight": 8 }, { - "segfile":"end_of_ball_top_corner", - "mwidth":2, - "mheight":2 + "segfile": "end_of_ball_top_corner", + "mwidth": 2, + "mheight": 2 }, { - "segfile":"end_of_ball_banner", - "mwidth":22, - "mheight":2, - "oam":true + "segfile": "end_of_ball_banner", + "mwidth": 22, + "mheight": 2, + "oam": true }, { - "segfile":"end_of_ball_right", - "mwidth":8, - "mheight":8 + "segfile": "end_of_ball_right", + "mwidth": 8, + "mheight": 8 }, { - "segfile":"end_of_ball_space", - "mwidth":24, - "mheight":2, - "oam":true + "segfile": "end_of_ball_space", + "mwidth": 24, + "mheight": 2, + "oam": true } ], "palette": "bonus_clear_text_lit.gbapal", @@ -235,27 +235,27 @@ }, { "gfx_filename": "bonus_trap", - "mwidth":6, - "mheight":4, - "oam":true, + "mwidth": 6, + "mheight": 4, + "oam": true, "palette": "../ruby/ruby_board_palset_0.gbapal", "palbank": 1 }, { "gfx_filename": "pokeball_regular", - "mwidth":2 + "mwidth": 2 }, { "gfx_filename": "pokeball_great", - "mwidth":2 + "mwidth": 2 }, { "gfx_filename": "pokeball_ultra", - "mwidth":2 + "mwidth": 2 }, { "gfx_filename": "pokeball_master", - "mwidth":2 + "mwidth": 2 }, { "gfx_filename": "ball_open_to_catch", @@ -345,6 +345,47 @@ "gfx_filename": "catch_tile_burst_stage3", "palette": "catch_tile_burst_stage3.gbapal", "palbank": 0 + }, + { + "gfx_filename": "capture_screen", + "segments": [ + { + "segfile": "capture_screen_float_mon", + "width": 6, + "palette": "bonus_stage_obj.gbapal", + "palbank": 5 + }, + { + "segfile": "capture_screen_capture_ball_slot_0", + "width": 4, + "palette": "../ruby/ruby_board_palset_0.gbapal", + "palbank": 1 + }, + { + "segfile": "capture_screen_unreferenced_gap", + "width": 17, + "palette": "../ruby/ruby_board_palset_0.gbapal", + "palbank": 1 + }, + { + "segfile": "capture_screen_capture_ball_slot_1", + "width": 4, + "palette": "../ruby/ruby_board_palset_0.gbapal", + "palbank": 1 + }, + { + "segfile": "capture_screen_absorb_fx", + "width": 4, + "palette": "../ruby/ruby_board_palset_0.gbapal", + "palbank": 1 + }, + { + "segfile": "capture_screen_unused_tail", + "width": 2, + "palette": "../ruby/ruby_board_palset_0.gbapal", + "palbank": 1 + } + ] } ] } diff --git a/tools/scripts/objpalette.py b/tools/scripts/objpalette.py index 42cb7273..a24443b2 100644 --- a/tools/scripts/objpalette.py +++ b/tools/scripts/objpalette.py @@ -211,6 +211,7 @@ SLOTS = { ('graphics/stage/ruby', 'travel_paint'): ('ruby', 704, 192, 'main_board_launcher_and_cutscenes.c'), ('graphics/stage/sapphire', 'travel_paint'): ('sapphire', 704, 192, 'main_board_launcher_and_cutscenes.c'), ('graphics/stage/main', 'ball_save'): ('ruby', 704, 288, 'all_board_mode_change_and_debug_menu.c'), + ('graphics/stage/main', 'capture_screen'): ('ruby', 704, 225, 'main_board_center_capture_hole.c'), ('graphics/stage/main', 'end_of_ball'): ('ruby', 704, 320, 'all_board_mode_change_and_debug_menu.c'), ('graphics/stage/main', 'game_over_text'): ('ruby', 704, 32, 'all_board_mode_change_and_debug_menu.c'), ('graphics/stage/main', 'area_roulette_selected_fx'): ('ruby', 704, 20, 'main_board_intro_mode.c'), @@ -327,6 +328,20 @@ OVERRIDES = { # do not draw this art. Every gGroudon* entry landing in 704..959 names bank # 12 and nothing else, so that is the sheet's palette throughout; these are # the segments where a foreign set outvoted it. + # The capture cutscene shares the 704 slot with the banner sheets, which + # outvote it below the float-up fx. Everything from t123 on is the ball and + # its absorb fx: gMonCatchBallAbsorbPokemonFxSpriteSet names bank 1 + # throughout, and gCaptureBallTilesGfx streams the ball itself into t102..105 + # and t123..126, drawn with gBallPalettes in bank 1. + ('ruby', 'capture_screen', 'capture_screen_capture_ball_slot_0'): + (1, 'gCaptureBallTilesGfx slot, drawn with gBallPalettes'), + ('ruby', 'capture_screen', 'capture_screen_unreferenced_gap'): + (1, 'unreferenced, sits between the two ball slots'), + ('ruby', 'capture_screen', 'capture_screen_absorb_fx'): + (1, 'gMonCatchBallAbsorbPokemonFxSpriteSet; a banner sheet outvoted it'), + ('ruby', 'capture_screen', 'capture_screen_unused_tail'): + (1, 'past the end of the copy, matches the absorb fx'), + ('groudon', 'board_fx', 'board_fx_projectile_spawn'): (12, 'foreign set in the 704 slot outvoted bank 12'), ('groudon', 'board_fx', 'board_fx_projectile_impact'): (12, 'foreign set in the 704 slot outvoted bank 12'), ('groudon', 'board_fx', 'board_fx_projectile_debris'): (12, 'foreign set in the 704 slot outvoted bank 12'),