From f6255c8cfc3ccd70ed84a3f77026996a971ce619 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 29 Apr 2025 17:29:37 -0400 Subject: [PATCH 001/429] remerge AsparagusEduardo's merge --- README.md | 203 +- data/pinball/flipper_normal_angles.bin | Bin 0 -> 24576 bytes data/pinball/flipper_radii.bin | Bin 0 -> 24576 bytes data/pinball/gastly_normal_angles.bin | 8 + data/pinball/gengar_normal_angles.bin | 19 + data/pinball/haunter_normal_angles.bin | 7 + data/pinball/meowth_jewel_normal_angles.bin | 5 + data/pinball/meowth_normal_angles.bin | Bin 0 -> 1920 bytes data/pinball/seel_normal_angles.bin | 8 + data/pinball/tilt_down_deltas.bin | Bin 0 -> 1024 bytes data/pinball/tilt_down_left_deltas.bin | Bin 0 -> 1024 bytes data/pinball/tilt_down_right_deltas.bin | Bin 0 -> 1024 bytes data/pinball/tilt_left_deltas.bin | Bin 0 -> 1024 bytes data/pinball/tilt_right_deltas.bin | Bin 0 -> 1024 bytes data/specials.inc | 8 + .../anim/lights/light_anim_0.png | Bin 0 -> 245 bytes .../anim/lights/light_anim_1.png | Bin 0 -> 245 bytes .../anim/lights/light_anim_2.png | Bin 0 -> 245 bytes .../anim/lights/light_anim_3.png | Bin 0 -> 245 bytes .../anim/lights/light_anim_4.png | Bin 0 -> 245 bytes .../anim/lights/light_anim_5.png | Bin 0 -> 232 bytes graphics/blackjack/background.pal | 19 + graphics/blackjack/background_tiles.bin | Bin 0 -> 1280 bytes graphics/blackjack/background_tiles.png | Bin 0 -> 1686 bytes graphics/blackjack/cards.pal | 19 + .../blackjack/cards/clubs/cards_clubs_10.png | Bin 0 -> 679 bytes .../blackjack/cards/clubs/cards_clubs_2.png | Bin 0 -> 678 bytes .../blackjack/cards/clubs/cards_clubs_3.png | Bin 0 -> 666 bytes .../blackjack/cards/clubs/cards_clubs_4.png | Bin 0 -> 664 bytes .../blackjack/cards/clubs/cards_clubs_5.png | Bin 0 -> 671 bytes .../blackjack/cards/clubs/cards_clubs_6.png | Bin 0 -> 675 bytes .../blackjack/cards/clubs/cards_clubs_7.png | Bin 0 -> 664 bytes .../blackjack/cards/clubs/cards_clubs_8.png | Bin 0 -> 666 bytes .../blackjack/cards/clubs/cards_clubs_9.png | Bin 0 -> 671 bytes .../blackjack/cards/clubs/cards_clubs_a.png | Bin 0 -> 698 bytes .../blackjack/cards/clubs/cards_clubs_j.png | Bin 0 -> 796 bytes .../blackjack/cards/clubs/cards_clubs_k.png | Bin 0 -> 780 bytes .../blackjack/cards/clubs/cards_clubs_q.png | Bin 0 -> 787 bytes .../cards/diamonds/cards_diamonds_10.png | Bin 0 -> 654 bytes .../cards/diamonds/cards_diamonds_2.png | Bin 0 -> 647 bytes .../cards/diamonds/cards_diamonds_3.png | Bin 0 -> 636 bytes .../cards/diamonds/cards_diamonds_4.png | Bin 0 -> 638 bytes .../cards/diamonds/cards_diamonds_5.png | Bin 0 -> 642 bytes .../cards/diamonds/cards_diamonds_6.png | Bin 0 -> 645 bytes .../cards/diamonds/cards_diamonds_7.png | Bin 0 -> 639 bytes .../cards/diamonds/cards_diamonds_8.png | Bin 0 -> 638 bytes .../cards/diamonds/cards_diamonds_9.png | Bin 0 -> 642 bytes .../cards/diamonds/cards_diamonds_a.png | Bin 0 -> 630 bytes .../cards/diamonds/cards_diamonds_j.png | Bin 0 -> 721 bytes .../cards/diamonds/cards_diamonds_k.png | Bin 0 -> 735 bytes .../cards/diamonds/cards_diamonds_q.png | Bin 0 -> 728 bytes .../cards/hearts/cards_hearts_10.png | Bin 0 -> 645 bytes .../blackjack/cards/hearts/cards_hearts_2.png | Bin 0 -> 636 bytes .../blackjack/cards/hearts/cards_hearts_3.png | Bin 0 -> 633 bytes .../blackjack/cards/hearts/cards_hearts_4.png | Bin 0 -> 629 bytes .../blackjack/cards/hearts/cards_hearts_5.png | Bin 0 -> 637 bytes .../blackjack/cards/hearts/cards_hearts_6.png | Bin 0 -> 633 bytes .../blackjack/cards/hearts/cards_hearts_7.png | Bin 0 -> 636 bytes .../blackjack/cards/hearts/cards_hearts_8.png | Bin 0 -> 630 bytes .../blackjack/cards/hearts/cards_hearts_9.png | Bin 0 -> 634 bytes .../blackjack/cards/hearts/cards_hearts_a.png | Bin 0 -> 677 bytes .../blackjack/cards/hearts/cards_hearts_j.png | Bin 0 -> 788 bytes .../blackjack/cards/hearts/cards_hearts_k.png | Bin 0 -> 781 bytes .../blackjack/cards/hearts/cards_hearts_q.png | Bin 0 -> 782 bytes .../cards/spades/cards_spades_10.png | Bin 0 -> 713 bytes .../blackjack/cards/spades/cards_spades_2.png | Bin 0 -> 700 bytes .../blackjack/cards/spades/cards_spades_3.png | Bin 0 -> 690 bytes .../blackjack/cards/spades/cards_spades_4.png | Bin 0 -> 693 bytes .../blackjack/cards/spades/cards_spades_5.png | Bin 0 -> 690 bytes .../blackjack/cards/spades/cards_spades_6.png | Bin 0 -> 694 bytes .../blackjack/cards/spades/cards_spades_7.png | Bin 0 -> 700 bytes .../blackjack/cards/spades/cards_spades_8.png | Bin 0 -> 686 bytes .../blackjack/cards/spades/cards_spades_9.png | Bin 0 -> 687 bytes .../blackjack/cards/spades/cards_spades_a.png | Bin 0 -> 677 bytes .../blackjack/cards/spades/cards_spades_j.png | Bin 0 -> 772 bytes .../blackjack/cards/spades/cards_spades_k.png | Bin 0 -> 765 bytes .../blackjack/cards/spades/cards_spades_q.png | Bin 0 -> 763 bytes graphics/blackjack/cursor.pal | 19 + graphics/blackjack/cursor.png | Bin 0 -> 438 bytes graphics/blackjack/digits.pal | 19 + graphics/blackjack/digits.png | Bin 0 -> 306 bytes graphics/blackjack/digits_dealer.pal | 19 + graphics/blackjack/digits_dealer.png | Bin 0 -> 306 bytes graphics/blackjack/digits_player.pal | 19 + graphics/blackjack/digits_player.png | Bin 0 -> 306 bytes graphics/blackjack/facedown.png | Bin 0 -> 370 bytes graphics/blackjack/option_1.png | Bin 0 -> 330 bytes graphics/blackjack/option_2.png | Bin 0 -> 346 bytes graphics/blackjack/option_3.png | Bin 0 -> 389 bytes graphics/blackjack/popup.png | Bin 0 -> 931 bytes graphics/block_stacker/arrow.pal | 19 + graphics/block_stacker/arrow.png | Bin 0 -> 329 bytes graphics/block_stacker/bgblock.pal | 19 + graphics/block_stacker/blockbgtiles.bin | Bin 0 -> 1280 bytes graphics/block_stacker/blockbgtiles.png | Bin 0 -> 1491 bytes graphics/block_stacker/blocks.pal | 19 + graphics/block_stacker/blocks.png | Bin 0 -> 369 bytes graphics/block_stacker/commands.pal | 19 + graphics/block_stacker/commands.png | Bin 0 -> 399 bytes graphics/block_stacker/gameover.png | Bin 0 -> 599 bytes graphics/block_stacker/highlight.pal | 19 + graphics/block_stacker/highlight.png | Bin 0 -> 352 bytes graphics/block_stacker/keepgoing.png | Bin 0 -> 593 bytes graphics/block_stacker/lives.pal | 19 + graphics/block_stacker/lives.png | Bin 0 -> 330 bytes graphics/block_stacker/no.png | Bin 0 -> 407 bytes graphics/block_stacker/rhydon.pal | 19 + graphics/block_stacker/rhydon.png | Bin 0 -> 4068 bytes graphics/block_stacker/rhydon2.png | Bin 0 -> 2929 bytes graphics/block_stacker/rhydonblock.pal | 19 + graphics/block_stacker/rhydonblock.png | Bin 0 -> 373 bytes graphics/block_stacker/start.png | Bin 0 -> 490 bytes graphics/block_stacker/text.pal | 19 + graphics/block_stacker/title.pal | 19 + graphics/block_stacker/title.png | Bin 0 -> 640 bytes graphics/block_stacker/winner.png | Bin 0 -> 533 bytes graphics/block_stacker/x.pal | 19 + graphics/block_stacker/x.png | Bin 0 -> 326 bytes graphics/block_stacker/yes.png | Bin 0 -> 426 bytes graphics/block_stacker/yesno.pal | 19 + graphics/derby/10p.png | Bin 0 -> 369 bytes graphics/derby/arrow-1.png | Bin 0 -> 294 bytes graphics/derby/arrow-2.png | Bin 0 -> 295 bytes graphics/derby/bet_bg.pal | 19 + graphics/derby/bet_bg_2.pal | 19 + graphics/derby/bet_text.pal | 19 + graphics/derby/betmenu_interface.pal | 19 + graphics/derby/betslip_bg.bin | Bin 0 -> 1280 bytes graphics/derby/betslip_bg.png | Bin 0 -> 1925 bytes graphics/derby/betslip_bg_2.bin | Bin 0 -> 1280 bytes graphics/derby/betslip_bg_2.png | Bin 0 -> 1807 bytes graphics/derby/clef.pal | 19 + graphics/derby/clef.png | Bin 0 -> 1129 bytes graphics/derby/condition.pal | 19 + graphics/derby/condition.png | Bin 0 -> 600 bytes graphics/derby/condition/condition-1.png | Bin 0 -> 393 bytes graphics/derby/condition/condition-2.png | Bin 0 -> 404 bytes graphics/derby/condition/condition-3.png | Bin 0 -> 404 bytes graphics/derby/condition/condition-4.png | Bin 0 -> 384 bytes graphics/derby/condition/condition-5.png | Bin 0 -> 337 bytes graphics/derby/countdown/countdown-1.png | Bin 0 -> 383 bytes graphics/derby/countdown/countdown-2.png | Bin 0 -> 429 bytes graphics/derby/countdown/countdown-3.png | Bin 0 -> 420 bytes graphics/derby/countdown/countdown.pal | 19 + graphics/derby/countdown/go.png | Bin 0 -> 539 bytes graphics/derby/credit.pal | 19 + graphics/derby/credit.png | Bin 0 -> 288 bytes graphics/derby/creditred.png | Bin 0 -> 291 bytes graphics/derby/digits.pal | 19 + graphics/derby/digits.png | Bin 0 -> 384 bytes graphics/derby/digits_2.png | Bin 0 -> 360 bytes graphics/derby/feebas_ow.png | Bin 0 -> 469 bytes graphics/derby/payout.png | Bin 0 -> 521 bytes graphics/derby/payout/payout-1.png | Bin 0 -> 292 bytes graphics/derby/payout/payout-2.png | Bin 0 -> 298 bytes graphics/derby/payout/payout-3.png | Bin 0 -> 301 bytes graphics/derby/payout/payout-4.png | Bin 0 -> 300 bytes graphics/derby/payout/payout-5.png | Bin 0 -> 303 bytes graphics/derby/payout/payout-6.png | Bin 0 -> 303 bytes graphics/derby/payout/payout-7.png | Bin 0 -> 330 bytes graphics/derby/pokemon_ui/ui-1.png | Bin 0 -> 248 bytes graphics/derby/pokemon_ui/ui-2.png | Bin 0 -> 254 bytes graphics/derby/pokemon_ui/ui-3.png | Bin 0 -> 255 bytes graphics/derby/pokemon_ui/ui-4.png | Bin 0 -> 254 bytes graphics/derby/pokemon_ui/ui-5.png | Bin 0 -> 253 bytes graphics/derby/pokemon_ui/ui-6.png | Bin 0 -> 250 bytes graphics/derby/ponyta_ow.png | Bin 0 -> 741 bytes graphics/derby/race_bg.bin | Bin 0 -> 1280 bytes graphics/derby/race_bg.png | Bin 0 -> 607 bytes graphics/derby/racetrack_bg.pal | 19 + graphics/derby/rapidash_ow.png | Bin 0 -> 1060 bytes graphics/derby/rattata_ow.png | Bin 0 -> 443 bytes graphics/derby/selection.pal | 19 + graphics/derby/selection.png | Bin 0 -> 281 bytes graphics/derby/species.png | Bin 0 -> 520 bytes graphics/derby/species_name/name-feebas.png | Bin 0 -> 316 bytes graphics/derby/species_name/name-ponyta.png | Bin 0 -> 328 bytes graphics/derby/species_name/name-rapidash.png | Bin 0 -> 346 bytes graphics/derby/species_name/name-rattata.png | Bin 0 -> 327 bytes graphics/flappybird/arcade-screen.bin | Bin 0 -> 1280 bytes graphics/flappybird/arcade-screen.pal | 19 + graphics/flappybird/arcade-screen.png | Bin 0 -> 196 bytes graphics/flappybird/bottomleft.png | Bin 0 -> 304 bytes graphics/flappybird/butterfree-hitbox.pal | 19 + graphics/flappybird/butterfree-hitbox.png | Bin 0 -> 232 bytes graphics/flappybird/butterfree.pal | 19 + graphics/flappybird/butterfree.png | Bin 0 -> 1086 bytes graphics/flappybird/damage.png | Bin 0 -> 885 bytes graphics/flappybird/digits.png | Bin 0 -> 354 bytes graphics/flappybird/flap.pal | 19 + graphics/flappybird/flap.png | Bin 0 -> 307 bytes graphics/flappybird/flappy-bg.bin | Bin 0 -> 1280 bytes graphics/flappybird/flappy-bg.pal | 19 + graphics/flappybird/flappy-bg.png | Bin 0 -> 748 bytes graphics/flappybird/flappy-fg.bin | Bin 0 -> 1280 bytes graphics/flappybird/flappy-fg.pal | 19 + graphics/flappybird/flappy-fg.png | Bin 0 -> 852 bytes graphics/flappybird/gameover.png | Bin 0 -> 598 bytes graphics/flappybird/hiscore.png | Bin 0 -> 587 bytes graphics/flappybird/one.png | Bin 0 -> 347 bytes graphics/flappybird/score.png | Bin 0 -> 305 bytes graphics/flappybird/score2.png | Bin 0 -> 317 bytes graphics/flappybird/start.png | Bin 0 -> 489 bytes graphics/flappybird/text.pal | 19 + graphics/flappybird/three.png | Bin 0 -> 386 bytes graphics/flappybird/topleft.png | Bin 0 -> 304 bytes graphics/flappybird/trail.pal | 19 + graphics/flappybird/trail.png | Bin 0 -> 694 bytes graphics/flappybird/two.png | Bin 0 -> 381 bytes graphics/gacha/arrows.png | Bin 0 -> 281 bytes graphics/gacha/belossom.pal | 19 + graphics/gacha/belossom.png | Bin 0 -> 1350 bytes graphics/gacha/bg_basic.pal | 19 + graphics/gacha/bg_great.pal | 19 + graphics/gacha/bg_left.bin | Bin 0 -> 1280 bytes graphics/gacha/bg_left.png | Bin 0 -> 2915 bytes graphics/gacha/bg_master.pal | 19 + graphics/gacha/bg_middle.bin | Bin 0 -> 1280 bytes graphics/gacha/bg_middle.png | Bin 0 -> 2913 bytes graphics/gacha/bg_mon.bin | Bin 0 -> 1280 bytes graphics/gacha/bg_mon.pal | 19 + graphics/gacha/bg_mon.png | Bin 0 -> 129 bytes graphics/gacha/bg_right.bin | Bin 0 -> 1280 bytes graphics/gacha/bg_right.png | Bin 0 -> 2915 bytes graphics/gacha/bg_ultra.pal | 19 + graphics/gacha/digital_text.pal | 19 + graphics/gacha/digital_text.png | Bin 0 -> 444 bytes graphics/gacha/elekid.pal | 19 + graphics/gacha/elekid.png | Bin 0 -> 811 bytes graphics/gacha/hoppip.pal | 19 + graphics/gacha/hoppip.png | Bin 0 -> 828 bytes graphics/gacha/input_numbers.pal | 19 + graphics/gacha/input_numbers.png | Bin 0 -> 347 bytes graphics/gacha/knob.pal | 19 + graphics/gacha/knob.png | Bin 0 -> 619 bytes graphics/gacha/lottery.pal | 19 + graphics/gacha/lottery_japan.png | Bin 0 -> 645 bytes graphics/gacha/menu2_basic.pal | 19 + graphics/gacha/menu2_great.pal | 19 + graphics/gacha/menu2_master.pal | 19 + graphics/gacha/menu2_ultra.pal | 19 + graphics/gacha/menu_1.png | Bin 0 -> 412 bytes graphics/gacha/menu_2.png | Bin 0 -> 555 bytes graphics/gacha/menu_basic.pal | 19 + graphics/gacha/menu_great.pal | 19 + graphics/gacha/menu_master.pal | 19 + graphics/gacha/menu_ultra.pal | 19 + graphics/gacha/numbers.pal | 19 + graphics/gacha/numbers.png | Bin 0 -> 347 bytes graphics/gacha/phanpy.pal | 19 + graphics/gacha/phanpy.png | Bin 0 -> 1132 bytes graphics/gacha/pressA.png | Bin 0 -> 598 bytes graphics/gacha/press_a.pal | 19 + graphics/gacha/teddiursa.pal | 19 + graphics/gacha/teddiursa.png | Bin 0 -> 1240 bytes graphics/pachinko/LevelCollision/Level_01.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_02.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_03.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_04.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_05.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_06.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_07.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_08.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_09.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_10.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_11.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_12.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_13.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_14.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_15.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_16.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_17.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_18.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_19.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_20.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_21.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_22.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelCollision/Level_23.bin | Bin 0 -> 704 bytes graphics/pachinko/LevelTilemaps/Level_01.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_02.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_03.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_04.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_05.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_06.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_07.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_08.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_09.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_10.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_11.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_12.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_13.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_14.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_15.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_16.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_17.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_18.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_19.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_20.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_21.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_22.bin | Bin 0 -> 1280 bytes graphics/pachinko/LevelTilemaps/Level_23.bin | Bin 0 -> 1280 bytes graphics/pachinko/arrow.pal | 19 + graphics/pachinko/arrow.png | Bin 0 -> 295 bytes graphics/pachinko/bg_indexed.pal | 19 + graphics/pachinko/bgtiles.png | Bin 0 -> 2222 bytes graphics/pachinko/collisionmap.bin | Bin 0 -> 704 bytes graphics/pachinko/gameover.pal | 19 + graphics/pachinko/gameover.png | Bin 0 -> 1093 bytes graphics/pachinko/input_numbers.pal | 19 + graphics/pachinko/input_numbers.png | Bin 0 -> 370 bytes graphics/pachinko/lives.pal | 19 + graphics/pachinko/lives.png | Bin 0 -> 299 bytes graphics/pachinko/multiplier.pal | 19 + graphics/pachinko/multiplier.png | Bin 0 -> 773 bytes graphics/pachinko/newlevel.pal | 19 + graphics/pachinko/newlevel.png | Bin 0 -> 906 bytes graphics/pachinko/pachinkobg1.bin | Bin 0 -> 1280 bytes graphics/pachinko/speed.pal | 19 + graphics/pachinko/speed.png | Bin 0 -> 491 bytes graphics/pachinko/spider.pal | 19 + graphics/pachinko/spider.png | Bin 0 -> 2111 bytes graphics/pachinko/title.pal | 19 + graphics/pachinko/title.png | Bin 0 -> 1188 bytes graphics/pachinko/win.pal | 19 + graphics/pachinko/win.png | Bin 0 -> 1407 bytes graphics/pinball/ball_pokeball.png | Bin 0 -> 696 bytes graphics/pinball/bg_collision_map_diglett.bin | Bin 0 -> 960 bytes .../bg_collision_map_diglett_entrance.bin | Bin 0 -> 960 bytes graphics/pinball/bg_collision_map_gengar.bin | Bin 0 -> 960 bytes .../bg_collision_map_gengar_entrance.bin | Bin 0 -> 960 bytes graphics/pinball/bg_collision_map_meowth.bin | Bin 0 -> 1024 bytes .../bg_collision_map_meowth_entrance.bin | Bin 0 -> 960 bytes graphics/pinball/bg_collision_map_seel.bin | Bin 0 -> 960 bytes .../bg_collision_map_seel_entrance.bin | Bin 0 -> 960 bytes .../pinball/bg_collision_masks_diglett.png | Bin 0 -> 246 bytes .../pinball/bg_collision_masks_gengar.png | Bin 0 -> 258 bytes .../pinball/bg_collision_masks_meowth.png | Bin 0 -> 176 bytes graphics/pinball/bg_collision_masks_seel.png | Bin 0 -> 176 bytes graphics/pinball/bg_cover_tiles.png | Bin 0 -> 211 bytes graphics/pinball/bg_tilemap_cover.bin | Bin 0 -> 1344 bytes graphics/pinball/bg_tilemap_diglett.bin | Bin 0 -> 2048 bytes graphics/pinball/bg_tilemap_gengar.bin | Bin 0 -> 2048 bytes graphics/pinball/bg_tilemap_meowth.bin | Bin 0 -> 2048 bytes graphics/pinball/bg_tilemap_seel.bin | Bin 0 -> 2048 bytes graphics/pinball/bg_tiles_diglett.png | Bin 0 -> 3133 bytes graphics/pinball/bg_tiles_gengar.pal | 19 + graphics/pinball/bg_tiles_gengar.png | Bin 0 -> 3739 bytes graphics/pinball/bg_tiles_meowth.png | Bin 0 -> 705 bytes graphics/pinball/bg_tiles_seel.png | Bin 0 -> 957 bytes graphics/pinball/dugtrio_animation.png | Bin 0 -> 1247 bytes graphics/pinball/flipper.png | Bin 0 -> 440 bytes .../pinball/flipper_left_masks_minigame.png | Bin 0 -> 198 bytes .../pinball/flipper_right_masks_minigame.png | Bin 0 -> 198 bytes graphics/pinball/gastly_animation.png | Bin 0 -> 683 bytes graphics/pinball/gengar_animation.png | Bin 0 -> 1905 bytes graphics/pinball/haunter_animation.png | Bin 0 -> 1790 bytes graphics/pinball/input_numbers.png | Bin 0 -> 347 bytes graphics/pinball/meowth_animation.png | Bin 0 -> 1365 bytes graphics/pinball/meowth_jewel_animation.png | Bin 0 -> 461 bytes graphics/pinball/meowth_jewel_multipliers.pal | 19 + graphics/pinball/meowth_jewel_multipliers.png | Bin 0 -> 424 bytes graphics/pinball/meowth_sparkle.pal | 19 + graphics/pinball/meowth_sparkle.png | Bin 0 -> 262 bytes graphics/pinball/seel_animation.png | Bin 0 -> 1398 bytes graphics/pinball/seel_multipliers.png | Bin 0 -> 461 bytes graphics/pinball/seel_sparkle.png | Bin 0 -> 262 bytes graphics/pinball/timer_digits.png | Bin 0 -> 384 bytes graphics/rogue_voltorbflip/Raw/gameboard.png | Bin 0 -> 1454 bytes graphics/rogue_voltorbflip/Raw/pal.pal | 19 + graphics/rogue_voltorbflip/Raw/sprites.png | Bin 0 -> 469 bytes graphics/rogue_voltorbflip/coins.pal | 19 + graphics/rogue_voltorbflip/coins.png | Bin 0 -> 313 bytes graphics/rogue_voltorbflip/digits.pal | 19 + graphics/rogue_voltorbflip/digits.png | Bin 0 -> 381 bytes graphics/rogue_voltorbflip/gameboard.bin | Bin 0 -> 1280 bytes graphics/rogue_voltorbflip/gameboard.png | Bin 0 -> 1178 bytes graphics/rogue_voltorbflip/sprites.png | Bin 0 -> 463 bytes graphics/snake/berry.pal | 19 + graphics/snake/berry1.png | Bin 0 -> 280 bytes graphics/snake/berry2.png | Bin 0 -> 280 bytes graphics/snake/berry3.png | Bin 0 -> 280 bytes graphics/snake/bg.pal | 19 + graphics/snake/digits.pal | 19 + graphics/snake/digits.png | Bin 0 -> 304 bytes graphics/snake/gameover.png | Bin 0 -> 598 bytes graphics/snake/menu.pal | 19 + graphics/snake/menu.png | Bin 0 -> 406 bytes graphics/snake/onix-body-2.png | Bin 0 -> 350 bytes graphics/snake/onix-body-3.png | Bin 0 -> 338 bytes graphics/snake/onix-body-4.png | Bin 0 -> 397 bytes graphics/snake/onix-body.png | Bin 0 -> 363 bytes graphics/snake/onix-head.png | Bin 0 -> 1039 bytes graphics/snake/onix.pal | 19 + graphics/snake/snake-bg.bin | Bin 0 -> 1280 bytes graphics/snake/snake-bg.png | Bin 0 -> 870 bytes graphics/snake/start.png | Bin 0 -> 489 bytes graphics/snake/text.pal | 19 + include/config/game_corner_expansion.h | 37 + include/constants/global.h | 1 + include/constants/songs.h | 12 +- include/derby.h | 8 + include/flappybird.h | 7 + include/game_corner_blackjack.h | 12 + include/game_corner_block_stacker.h | 7 + include/game_corner_gacha.h | 7 + include/pachinko.h | 4 + include/pinball.h | 4 + include/rogue_voltorbflip.h | 6 + include/snake.h | 7 + sound/direct_sound_data.inc | 20 + .../pinball_11_vibraphone.aif | Bin 0 -> 2040 bytes .../pinball_12_marimba.aif | Bin 0 -> 2422 bytes .../pinball_16_drawbar_organ.aif | Bin 0 -> 52002 bytes .../pinball_52_clarinet.aif | Bin 0 -> 20548 bytes sound/direct_sound_samples/pinball_7_clav.aif | Bin 0 -> 30716 bytes sound/song_table.inc | 10 + sound/songs/midi/midi.cfg | 10 + sound/songs/midi/mus_casino_plus_1.mid | Bin 0 -> 4942 bytes sound/songs/midi/mus_casino_plus_2.mid | Bin 0 -> 23405 bytes sound/songs/midi/mus_casino_plus_3.mid | Bin 0 -> 10233 bytes sound/songs/midi/mus_casino_plus_4.mid | Bin 0 -> 2227 bytes sound/songs/midi/mus_casino_plus_5.mid | Bin 0 -> 2227 bytes sound/songs/midi/mus_casino_plus_6.mid | Bin 0 -> 8809 bytes sound/songs/midi/mus_casino_plus_7.mid | Bin 0 -> 4227 bytes sound/songs/midi/mus_casino_plus_8.mid | Bin 0 -> 25793 bytes sound/songs/midi/mus_casino_plus_9.mid | Bin 0 -> 38260 bytes sound/songs/midi/mus_hgss_casino.mid | Bin 0 -> 18016 bytes sound/voice_groups.inc | 1 + sound/voicegroups/voicegroup191.inc | 131 + src/block_stacker.c | 2379 ++++++ src/debug.c | 10 + src/derby.c | 5266 +++++++++++++ src/field_specials.c | 8 + src/flappybird.c | 1846 +++++ src/game_corner_blackjack.c | 3361 ++++++++ src/game_corner_gacha.c | 3880 ++++++++++ src/new_game.c | 3 + src/pachinko.c | 6831 +++++++++++++++++ src/pinball.c | 5177 +++++++++++++ src/rogue_voltorbflip.c | 1364 ++++ src/snake.c | 2175 ++++++ 441 files changed, 34242 insertions(+), 196 deletions(-) create mode 100644 data/pinball/flipper_normal_angles.bin create mode 100644 data/pinball/flipper_radii.bin create mode 100644 data/pinball/gastly_normal_angles.bin create mode 100644 data/pinball/gengar_normal_angles.bin create mode 100644 data/pinball/haunter_normal_angles.bin create mode 100644 data/pinball/meowth_jewel_normal_angles.bin create mode 100644 data/pinball/meowth_normal_angles.bin create mode 100644 data/pinball/seel_normal_angles.bin create mode 100644 data/pinball/tilt_down_deltas.bin create mode 100644 data/pinball/tilt_down_left_deltas.bin create mode 100644 data/pinball/tilt_down_right_deltas.bin create mode 100644 data/pinball/tilt_left_deltas.bin create mode 100644 data/pinball/tilt_right_deltas.bin create mode 100644 data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_0.png create mode 100644 data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_1.png create mode 100644 data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_2.png create mode 100644 data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_3.png create mode 100644 data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_4.png create mode 100644 data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_5.png create mode 100644 graphics/blackjack/background.pal create mode 100644 graphics/blackjack/background_tiles.bin create mode 100644 graphics/blackjack/background_tiles.png create mode 100644 graphics/blackjack/cards.pal create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_10.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_2.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_3.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_4.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_5.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_6.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_7.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_8.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_9.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_a.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_j.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_k.png create mode 100644 graphics/blackjack/cards/clubs/cards_clubs_q.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_10.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_2.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_3.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_4.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_5.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_6.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_7.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_8.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_9.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_a.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_j.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_k.png create mode 100644 graphics/blackjack/cards/diamonds/cards_diamonds_q.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_10.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_2.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_3.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_4.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_5.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_6.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_7.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_8.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_9.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_a.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_j.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_k.png create mode 100644 graphics/blackjack/cards/hearts/cards_hearts_q.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_10.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_2.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_3.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_4.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_5.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_6.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_7.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_8.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_9.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_a.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_j.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_k.png create mode 100644 graphics/blackjack/cards/spades/cards_spades_q.png create mode 100644 graphics/blackjack/cursor.pal create mode 100644 graphics/blackjack/cursor.png create mode 100644 graphics/blackjack/digits.pal create mode 100644 graphics/blackjack/digits.png create mode 100644 graphics/blackjack/digits_dealer.pal create mode 100644 graphics/blackjack/digits_dealer.png create mode 100644 graphics/blackjack/digits_player.pal create mode 100644 graphics/blackjack/digits_player.png create mode 100644 graphics/blackjack/facedown.png create mode 100644 graphics/blackjack/option_1.png create mode 100644 graphics/blackjack/option_2.png create mode 100644 graphics/blackjack/option_3.png create mode 100644 graphics/blackjack/popup.png create mode 100644 graphics/block_stacker/arrow.pal create mode 100644 graphics/block_stacker/arrow.png create mode 100644 graphics/block_stacker/bgblock.pal create mode 100644 graphics/block_stacker/blockbgtiles.bin create mode 100644 graphics/block_stacker/blockbgtiles.png create mode 100644 graphics/block_stacker/blocks.pal create mode 100644 graphics/block_stacker/blocks.png create mode 100644 graphics/block_stacker/commands.pal create mode 100644 graphics/block_stacker/commands.png create mode 100644 graphics/block_stacker/gameover.png create mode 100644 graphics/block_stacker/highlight.pal create mode 100644 graphics/block_stacker/highlight.png create mode 100644 graphics/block_stacker/keepgoing.png create mode 100644 graphics/block_stacker/lives.pal create mode 100644 graphics/block_stacker/lives.png create mode 100644 graphics/block_stacker/no.png create mode 100644 graphics/block_stacker/rhydon.pal create mode 100644 graphics/block_stacker/rhydon.png create mode 100644 graphics/block_stacker/rhydon2.png create mode 100644 graphics/block_stacker/rhydonblock.pal create mode 100644 graphics/block_stacker/rhydonblock.png create mode 100644 graphics/block_stacker/start.png create mode 100644 graphics/block_stacker/text.pal create mode 100644 graphics/block_stacker/title.pal create mode 100644 graphics/block_stacker/title.png create mode 100644 graphics/block_stacker/winner.png create mode 100644 graphics/block_stacker/x.pal create mode 100644 graphics/block_stacker/x.png create mode 100644 graphics/block_stacker/yes.png create mode 100644 graphics/block_stacker/yesno.pal create mode 100644 graphics/derby/10p.png create mode 100644 graphics/derby/arrow-1.png create mode 100644 graphics/derby/arrow-2.png create mode 100644 graphics/derby/bet_bg.pal create mode 100644 graphics/derby/bet_bg_2.pal create mode 100644 graphics/derby/bet_text.pal create mode 100644 graphics/derby/betmenu_interface.pal create mode 100644 graphics/derby/betslip_bg.bin create mode 100644 graphics/derby/betslip_bg.png create mode 100644 graphics/derby/betslip_bg_2.bin create mode 100644 graphics/derby/betslip_bg_2.png create mode 100644 graphics/derby/clef.pal create mode 100644 graphics/derby/clef.png create mode 100644 graphics/derby/condition.pal create mode 100644 graphics/derby/condition.png create mode 100644 graphics/derby/condition/condition-1.png create mode 100644 graphics/derby/condition/condition-2.png create mode 100644 graphics/derby/condition/condition-3.png create mode 100644 graphics/derby/condition/condition-4.png create mode 100644 graphics/derby/condition/condition-5.png create mode 100644 graphics/derby/countdown/countdown-1.png create mode 100644 graphics/derby/countdown/countdown-2.png create mode 100644 graphics/derby/countdown/countdown-3.png create mode 100644 graphics/derby/countdown/countdown.pal create mode 100644 graphics/derby/countdown/go.png create mode 100644 graphics/derby/credit.pal create mode 100644 graphics/derby/credit.png create mode 100644 graphics/derby/creditred.png create mode 100644 graphics/derby/digits.pal create mode 100644 graphics/derby/digits.png create mode 100644 graphics/derby/digits_2.png create mode 100644 graphics/derby/feebas_ow.png create mode 100644 graphics/derby/payout.png create mode 100644 graphics/derby/payout/payout-1.png create mode 100644 graphics/derby/payout/payout-2.png create mode 100644 graphics/derby/payout/payout-3.png create mode 100644 graphics/derby/payout/payout-4.png create mode 100644 graphics/derby/payout/payout-5.png create mode 100644 graphics/derby/payout/payout-6.png create mode 100644 graphics/derby/payout/payout-7.png create mode 100644 graphics/derby/pokemon_ui/ui-1.png create mode 100644 graphics/derby/pokemon_ui/ui-2.png create mode 100644 graphics/derby/pokemon_ui/ui-3.png create mode 100644 graphics/derby/pokemon_ui/ui-4.png create mode 100644 graphics/derby/pokemon_ui/ui-5.png create mode 100644 graphics/derby/pokemon_ui/ui-6.png create mode 100644 graphics/derby/ponyta_ow.png create mode 100644 graphics/derby/race_bg.bin create mode 100644 graphics/derby/race_bg.png create mode 100644 graphics/derby/racetrack_bg.pal create mode 100644 graphics/derby/rapidash_ow.png create mode 100644 graphics/derby/rattata_ow.png create mode 100644 graphics/derby/selection.pal create mode 100644 graphics/derby/selection.png create mode 100644 graphics/derby/species.png create mode 100644 graphics/derby/species_name/name-feebas.png create mode 100644 graphics/derby/species_name/name-ponyta.png create mode 100644 graphics/derby/species_name/name-rapidash.png create mode 100644 graphics/derby/species_name/name-rattata.png create mode 100644 graphics/flappybird/arcade-screen.bin create mode 100644 graphics/flappybird/arcade-screen.pal create mode 100644 graphics/flappybird/arcade-screen.png create mode 100644 graphics/flappybird/bottomleft.png create mode 100644 graphics/flappybird/butterfree-hitbox.pal create mode 100644 graphics/flappybird/butterfree-hitbox.png create mode 100644 graphics/flappybird/butterfree.pal create mode 100644 graphics/flappybird/butterfree.png create mode 100644 graphics/flappybird/damage.png create mode 100644 graphics/flappybird/digits.png create mode 100644 graphics/flappybird/flap.pal create mode 100644 graphics/flappybird/flap.png create mode 100644 graphics/flappybird/flappy-bg.bin create mode 100644 graphics/flappybird/flappy-bg.pal create mode 100644 graphics/flappybird/flappy-bg.png create mode 100644 graphics/flappybird/flappy-fg.bin create mode 100644 graphics/flappybird/flappy-fg.pal create mode 100644 graphics/flappybird/flappy-fg.png create mode 100644 graphics/flappybird/gameover.png create mode 100644 graphics/flappybird/hiscore.png create mode 100644 graphics/flappybird/one.png create mode 100644 graphics/flappybird/score.png create mode 100644 graphics/flappybird/score2.png create mode 100644 graphics/flappybird/start.png create mode 100644 graphics/flappybird/text.pal create mode 100644 graphics/flappybird/three.png create mode 100644 graphics/flappybird/topleft.png create mode 100644 graphics/flappybird/trail.pal create mode 100644 graphics/flappybird/trail.png create mode 100644 graphics/flappybird/two.png create mode 100644 graphics/gacha/arrows.png create mode 100644 graphics/gacha/belossom.pal create mode 100644 graphics/gacha/belossom.png create mode 100644 graphics/gacha/bg_basic.pal create mode 100644 graphics/gacha/bg_great.pal create mode 100644 graphics/gacha/bg_left.bin create mode 100644 graphics/gacha/bg_left.png create mode 100644 graphics/gacha/bg_master.pal create mode 100644 graphics/gacha/bg_middle.bin create mode 100644 graphics/gacha/bg_middle.png create mode 100644 graphics/gacha/bg_mon.bin create mode 100644 graphics/gacha/bg_mon.pal create mode 100644 graphics/gacha/bg_mon.png create mode 100644 graphics/gacha/bg_right.bin create mode 100644 graphics/gacha/bg_right.png create mode 100644 graphics/gacha/bg_ultra.pal create mode 100644 graphics/gacha/digital_text.pal create mode 100644 graphics/gacha/digital_text.png create mode 100644 graphics/gacha/elekid.pal create mode 100644 graphics/gacha/elekid.png create mode 100644 graphics/gacha/hoppip.pal create mode 100644 graphics/gacha/hoppip.png create mode 100644 graphics/gacha/input_numbers.pal create mode 100644 graphics/gacha/input_numbers.png create mode 100644 graphics/gacha/knob.pal create mode 100644 graphics/gacha/knob.png create mode 100644 graphics/gacha/lottery.pal create mode 100644 graphics/gacha/lottery_japan.png create mode 100644 graphics/gacha/menu2_basic.pal create mode 100644 graphics/gacha/menu2_great.pal create mode 100644 graphics/gacha/menu2_master.pal create mode 100644 graphics/gacha/menu2_ultra.pal create mode 100644 graphics/gacha/menu_1.png create mode 100644 graphics/gacha/menu_2.png create mode 100644 graphics/gacha/menu_basic.pal create mode 100644 graphics/gacha/menu_great.pal create mode 100644 graphics/gacha/menu_master.pal create mode 100644 graphics/gacha/menu_ultra.pal create mode 100644 graphics/gacha/numbers.pal create mode 100644 graphics/gacha/numbers.png create mode 100644 graphics/gacha/phanpy.pal create mode 100644 graphics/gacha/phanpy.png create mode 100644 graphics/gacha/pressA.png create mode 100644 graphics/gacha/press_a.pal create mode 100644 graphics/gacha/teddiursa.pal create mode 100644 graphics/gacha/teddiursa.png create mode 100644 graphics/pachinko/LevelCollision/Level_01.bin create mode 100644 graphics/pachinko/LevelCollision/Level_02.bin create mode 100644 graphics/pachinko/LevelCollision/Level_03.bin create mode 100644 graphics/pachinko/LevelCollision/Level_04.bin create mode 100644 graphics/pachinko/LevelCollision/Level_05.bin create mode 100644 graphics/pachinko/LevelCollision/Level_06.bin create mode 100644 graphics/pachinko/LevelCollision/Level_07.bin create mode 100644 graphics/pachinko/LevelCollision/Level_08.bin create mode 100644 graphics/pachinko/LevelCollision/Level_09.bin create mode 100644 graphics/pachinko/LevelCollision/Level_10.bin create mode 100644 graphics/pachinko/LevelCollision/Level_11.bin create mode 100644 graphics/pachinko/LevelCollision/Level_12.bin create mode 100644 graphics/pachinko/LevelCollision/Level_13.bin create mode 100644 graphics/pachinko/LevelCollision/Level_14.bin create mode 100644 graphics/pachinko/LevelCollision/Level_15.bin create mode 100644 graphics/pachinko/LevelCollision/Level_16.bin create mode 100644 graphics/pachinko/LevelCollision/Level_17.bin create mode 100644 graphics/pachinko/LevelCollision/Level_18.bin create mode 100644 graphics/pachinko/LevelCollision/Level_19.bin create mode 100644 graphics/pachinko/LevelCollision/Level_20.bin create mode 100644 graphics/pachinko/LevelCollision/Level_21.bin create mode 100644 graphics/pachinko/LevelCollision/Level_22.bin create mode 100644 graphics/pachinko/LevelCollision/Level_23.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_01.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_02.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_03.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_04.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_05.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_06.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_07.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_08.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_09.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_10.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_11.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_12.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_13.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_14.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_15.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_16.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_17.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_18.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_19.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_20.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_21.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_22.bin create mode 100644 graphics/pachinko/LevelTilemaps/Level_23.bin create mode 100644 graphics/pachinko/arrow.pal create mode 100644 graphics/pachinko/arrow.png create mode 100644 graphics/pachinko/bg_indexed.pal create mode 100644 graphics/pachinko/bgtiles.png create mode 100644 graphics/pachinko/collisionmap.bin create mode 100644 graphics/pachinko/gameover.pal create mode 100644 graphics/pachinko/gameover.png create mode 100644 graphics/pachinko/input_numbers.pal create mode 100644 graphics/pachinko/input_numbers.png create mode 100644 graphics/pachinko/lives.pal create mode 100644 graphics/pachinko/lives.png create mode 100644 graphics/pachinko/multiplier.pal create mode 100644 graphics/pachinko/multiplier.png create mode 100644 graphics/pachinko/newlevel.pal create mode 100644 graphics/pachinko/newlevel.png create mode 100644 graphics/pachinko/pachinkobg1.bin create mode 100644 graphics/pachinko/speed.pal create mode 100644 graphics/pachinko/speed.png create mode 100644 graphics/pachinko/spider.pal create mode 100644 graphics/pachinko/spider.png create mode 100644 graphics/pachinko/title.pal create mode 100644 graphics/pachinko/title.png create mode 100644 graphics/pachinko/win.pal create mode 100644 graphics/pachinko/win.png create mode 100644 graphics/pinball/ball_pokeball.png create mode 100644 graphics/pinball/bg_collision_map_diglett.bin create mode 100644 graphics/pinball/bg_collision_map_diglett_entrance.bin create mode 100644 graphics/pinball/bg_collision_map_gengar.bin create mode 100644 graphics/pinball/bg_collision_map_gengar_entrance.bin create mode 100644 graphics/pinball/bg_collision_map_meowth.bin create mode 100644 graphics/pinball/bg_collision_map_meowth_entrance.bin create mode 100644 graphics/pinball/bg_collision_map_seel.bin create mode 100644 graphics/pinball/bg_collision_map_seel_entrance.bin create mode 100644 graphics/pinball/bg_collision_masks_diglett.png create mode 100644 graphics/pinball/bg_collision_masks_gengar.png create mode 100644 graphics/pinball/bg_collision_masks_meowth.png create mode 100644 graphics/pinball/bg_collision_masks_seel.png create mode 100644 graphics/pinball/bg_cover_tiles.png create mode 100644 graphics/pinball/bg_tilemap_cover.bin create mode 100644 graphics/pinball/bg_tilemap_diglett.bin create mode 100644 graphics/pinball/bg_tilemap_gengar.bin create mode 100644 graphics/pinball/bg_tilemap_meowth.bin create mode 100644 graphics/pinball/bg_tilemap_seel.bin create mode 100644 graphics/pinball/bg_tiles_diglett.png create mode 100644 graphics/pinball/bg_tiles_gengar.pal create mode 100644 graphics/pinball/bg_tiles_gengar.png create mode 100644 graphics/pinball/bg_tiles_meowth.png create mode 100644 graphics/pinball/bg_tiles_seel.png create mode 100644 graphics/pinball/dugtrio_animation.png create mode 100644 graphics/pinball/flipper.png create mode 100644 graphics/pinball/flipper_left_masks_minigame.png create mode 100644 graphics/pinball/flipper_right_masks_minigame.png create mode 100644 graphics/pinball/gastly_animation.png create mode 100644 graphics/pinball/gengar_animation.png create mode 100644 graphics/pinball/haunter_animation.png create mode 100644 graphics/pinball/input_numbers.png create mode 100644 graphics/pinball/meowth_animation.png create mode 100644 graphics/pinball/meowth_jewel_animation.png create mode 100644 graphics/pinball/meowth_jewel_multipliers.pal create mode 100644 graphics/pinball/meowth_jewel_multipliers.png create mode 100644 graphics/pinball/meowth_sparkle.pal create mode 100644 graphics/pinball/meowth_sparkle.png create mode 100644 graphics/pinball/seel_animation.png create mode 100644 graphics/pinball/seel_multipliers.png create mode 100644 graphics/pinball/seel_sparkle.png create mode 100644 graphics/pinball/timer_digits.png create mode 100644 graphics/rogue_voltorbflip/Raw/gameboard.png create mode 100644 graphics/rogue_voltorbflip/Raw/pal.pal create mode 100644 graphics/rogue_voltorbflip/Raw/sprites.png create mode 100644 graphics/rogue_voltorbflip/coins.pal create mode 100644 graphics/rogue_voltorbflip/coins.png create mode 100644 graphics/rogue_voltorbflip/digits.pal create mode 100644 graphics/rogue_voltorbflip/digits.png create mode 100644 graphics/rogue_voltorbflip/gameboard.bin create mode 100644 graphics/rogue_voltorbflip/gameboard.png create mode 100644 graphics/rogue_voltorbflip/sprites.png create mode 100644 graphics/snake/berry.pal create mode 100644 graphics/snake/berry1.png create mode 100644 graphics/snake/berry2.png create mode 100644 graphics/snake/berry3.png create mode 100644 graphics/snake/bg.pal create mode 100644 graphics/snake/digits.pal create mode 100644 graphics/snake/digits.png create mode 100644 graphics/snake/gameover.png create mode 100644 graphics/snake/menu.pal create mode 100644 graphics/snake/menu.png create mode 100644 graphics/snake/onix-body-2.png create mode 100644 graphics/snake/onix-body-3.png create mode 100644 graphics/snake/onix-body-4.png create mode 100644 graphics/snake/onix-body.png create mode 100644 graphics/snake/onix-head.png create mode 100644 graphics/snake/onix.pal create mode 100644 graphics/snake/snake-bg.bin create mode 100644 graphics/snake/snake-bg.png create mode 100644 graphics/snake/start.png create mode 100644 graphics/snake/text.pal create mode 100644 include/config/game_corner_expansion.h create mode 100644 include/derby.h create mode 100644 include/flappybird.h create mode 100644 include/game_corner_blackjack.h create mode 100644 include/game_corner_block_stacker.h create mode 100644 include/game_corner_gacha.h create mode 100644 include/pachinko.h create mode 100644 include/pinball.h create mode 100644 include/rogue_voltorbflip.h create mode 100644 include/snake.h create mode 100644 sound/direct_sound_samples/pinball_11_vibraphone.aif create mode 100644 sound/direct_sound_samples/pinball_12_marimba.aif create mode 100644 sound/direct_sound_samples/pinball_16_drawbar_organ.aif create mode 100644 sound/direct_sound_samples/pinball_52_clarinet.aif create mode 100644 sound/direct_sound_samples/pinball_7_clav.aif create mode 100644 sound/songs/midi/mus_casino_plus_1.mid create mode 100644 sound/songs/midi/mus_casino_plus_2.mid create mode 100644 sound/songs/midi/mus_casino_plus_3.mid create mode 100644 sound/songs/midi/mus_casino_plus_4.mid create mode 100644 sound/songs/midi/mus_casino_plus_5.mid create mode 100644 sound/songs/midi/mus_casino_plus_6.mid create mode 100644 sound/songs/midi/mus_casino_plus_7.mid create mode 100644 sound/songs/midi/mus_casino_plus_8.mid create mode 100644 sound/songs/midi/mus_casino_plus_9.mid create mode 100644 sound/songs/midi/mus_hgss_casino.mid create mode 100644 sound/voicegroups/voicegroup191.inc create mode 100644 src/block_stacker.c create mode 100644 src/derby.c create mode 100644 src/flappybird.c create mode 100644 src/game_corner_blackjack.c create mode 100644 src/game_corner_gacha.c create mode 100644 src/pachinko.c create mode 100644 src/pinball.c create mode 100644 src/rogue_voltorbflip.c create mode 100644 src/snake.c diff --git a/README.md b/README.md index 75a63603a555..ed1ab827eb4d 100644 --- a/README.md +++ b/README.md @@ -1,200 +1,13 @@ -# pokeemerald-expansion +# Pokémon Emerald Game Corner Expansion -pokeemerald-expansion is ***a romhack base*** based off pret's [pokeemerald](https://github.com/pret/pokeemerald) decompilation project. ***It is NOT a playable romhack,*** but it has multiple features available to romhackers so that they can create their own games, so it's not meant to be played on its own. +Hello! This is an an all-in-one package to expand the Mauville Game Corner, that, in its current state, isn't configurable. +It uses several unused Emerald flags, vars, and FR/LG tracks to make things work... Please keep this in mind if you would like to use this for your own hack. -## Should I use this or vanilla pokeemerald for my hack? -The main advantage of using vanilla pokeemerald as a base is being able to link with other official GBA Pokémon games for battles and trading, pokeemerald-expansion can battle and trade with itself out of the box. If you don't mind losing full vanilla compatiblitity, we recommend using pokeemerald-expansion. Otherwise, use pret's pokeemerald. You'll still receive documentation improvements from pret, as we regurlarly incorporate pret's documentation changes. +More specifically, this adds 4 pinball mini-games, Flappy Bird, Block Stacker, Snake, Blackjack, Voltorb Flip, Plinko, Mauville Derby, and Gacha Machines into the Game Corner. -## Using pokeemerald-expansion +Updated to pokeemerald-expansion v1.11.1 -If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. -You can phrase it as the following: -``` -Based off RHH's pokeemerald-expansion 1.11.1 https://github.com/rh-hideout/pokeemerald-expansion/ -``` +Big thank you to huderlem (Pokemon Pinball to Emerald), and Pokeabbie (Voltorb Flip from Emerald Rogue). All I really did for these was some graphics, music, and code to work with coins. They deserve the real credits here. +Also thank you to Viperio, who made an initial Snake for Pokemon Emerald that I based my code on. -#### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there. - -Please follow the instructions in `INSTALL.md` to get pokeemerald-expansion set up on your machine. - -### If I already have a project based on regular pokeemerald, can I use pokeemerald-expansion? -Yes! Keep in mind that we keep up with pret's documentation of pokeemerald, which means that if your project a bit old, you might get merge conflicts that you need to solve manually. -- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. -- Once you have your remote set up, run the command `git pull RHH master`. - -With this, you'll get the latest version of pokeemerald-expansion, plus a couple of bugfixes that haven't yet been released into the next patch version :) - -## Documentation -[Please click here to visit our documentation page.](https://rh-hideout.github.io/pokeemerald-expansion/) - -## **How do I update my version of pokeemerald-expansion?** -- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. -- Check your current version. - - You can check in the debug menu's `Utilities -> Expansion Version` option. - - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](docs/CHANGELOG.md) to determine your version based on the features available on your repository. -- ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on. Check the [online documentation site](https://rh-hideout.github.io/pokeemerald-expansion/CHANGELOG.html) to see the latest versions of each step.) -- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.11.1, use `git pull RHH expansion/1.11.1`). - - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on) -- Alternatively, you can update to unreleased versions of the expansion. - - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`. - - ***upcoming (unstable, with potential bugs):*** It contains unreleased **features** that will come in the next minor version. To merge, use `git pull RHH upcoming`. - -### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :) - -## Who maintains the project? -The project was originally started by DizzyEgg alongside other contributors. Now it is maintained by a team in the ROM Hacking Hideout's community called the "Expansion Senate". ROM Hacking Hideout (RHH for short) is a Discord-based ROM hacking community specialized in Pokémon romhacks. A lot of the discussion in regards of the development of the project happens there. - -[Click here to join the RHH Discord Server!](https://discord.gg/6CzjAG6GZk) - -## There's a bug in the project. How do I let you guys know? -Please submit any issues with the project [here](https://github.com/rh-hideout/pokeemerald-expansion/issues) and make sure that the issue wasn't reported by someone else by searching using the filters. You may also join the Discord server to try getting more in-depth support from the team and other members of the server. - -## Can I contribute even if I'm not a member of ROM Hacking Hideout? -Yes! Contributions are welcome via Pull Requests and they will be reviewed by maintainers in due time. -Also, *please follow the Pull Request template and feel free to discuss how the reviews are being handled. **Communication is key!*** Don't feel discouraged if we take a bit to review your PR, we'll get to it. - -## What features are included? -- ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**: - - [Battle configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h) - - [Pokémon configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/pokemon.h) - - [Item configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/item.h) - - [Overworld configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/overworld.h) - - [Debug configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/debug.h) -- ***Upgraded battle engine.*** - - Gen5+ damage calculation. - - 2v2 Wild battles support. - - 1v2/2v1 battles support. - - Fairy Type (configurable). - - Physical/Special/Status Category (configurable). - - New moves and abilities up to Scarlet and Violet. - - Custom Contest data up to SwSh, newer moves are WIP. ([source](https://web.archive.org/web/20240910012333/https://pokemonurpg.com/info/contests/rse-move-list/)) - - Battle gimmick support: - - Mega Evolution - - Primal Reversion - - Ultra Burst - - Z-Moves - - Gen 8+ damaging moves are given power extrapolated from Gen 7. - - Gen 8+ status moves have no additional effects, like Healing Wish. - - Dynamax and Gigantamax - - Initial battle parameters - - Queueing stat boosts (aka, Totem Boosts) - - Setting Terrains. - - Mid-turn speed recalculation. - - Quick Poké Ball selection in Wild Battles - - Hold `R` to change selection with the D-Pad. - - Press `R` to use last selected Poké Ball. - - Run option shortcut - - Faster battle intro - Message and animation/cry happens at the same time. - - Faster HP drain. - - Battle Debug menu. - - Accessed by pressing `Select` on the "Fight/Bag/Pokémon/Run" menu. - - Option to use AI flags in wild Pokémon battles. - - FRLG/Gen4+ whiteout money calculation. - - Configurable experience settings - - Experience on catch. - - Splitting experience. - - Trainer experience. - - Scaled experience. - - Unevolved experience boost. - - Frostbite. - - Doesn't replace freezing unless a config is enabled, so you can mix and match. - - Critical capture. - - Removed badge boosts (configurable). - - Recalculating stats at the end of every battle. - - Level 100 Pokémon can earn EVs. - - Inverse battle support. - - TONS of other features listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h). -- ***Full Trainer customization*** - - Nickname, EVs, IVs, moves, ability, ball, friendship, nature, gender, shininess. - - Custom tag battle support (teaming up an NPC in a double battle). - - Sliding trainer messages. - - Upgraded Trainer AI - - Considers newer move effects. - - New flag options to let you customize the intelligence of your trainers. - - Faster calculations. - - Specify Poké Balls by Trainer class. -- ***Pokémon Species from Generations 1-9.*** - - Simplified process to add new Pokémon. - - Option to disable unwanted families. - - Updated sprites to DS style. - - Updated stats, types, abilities and egg groups (configurable). - - Updated Hoenn's Regional Dex to match ORAS' (configurable). - - Updated National Dex incorporating the new species. - - Sprite and animation visualizer. - - Accesible by pressing `Select` on a Pokémon's Summary screen. - - Gen4+ evolution methods, with some changes: - - Mossy Rock, Icy Rock and Magnetic Field locations match ORAS'. - - Leaf, Ice and Thunder Stones may also be used. - - Inkay just needs level 30 to evolve. - - You can't physically have both the RTC and gyroscope, so we skip this requirement. - - Sylveon uses Gen8+'s evolution method (friendship + Fairy Move). - - Option to use hold evolution items directly like stones. - - Hidden Abilities. - - Available via Ability Patch. - - Compatible with Ghoul's DexNav branch. - - All gender differences. - - Custom female icons for female Hippopotas Hippowdon, Pikachu and Wobbufett - - 3 Perfect IVs on Legendaries, Mythicals and Ultra Beasts. -- ***Customizable form change tables. Full list of methods [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/form_change_types.h).*** - - Item holding (eg. Giratina/Arceus) - - Item using (eg. Oricorio) - - Time of day option for Shaymin - - Fainting - - Battle begin and end (eg. Xerneas) - - Move change option for Zacian/Zamazenta - - Battle end in terrains (eg. Burmy) - - Switched in battle (eg. Palafin) - - HP Threshold (eg. Darmanitan) - - Weather (eg. Castform) - - End of turn (eg. Morpeko) - - Time of day (eg. Shaymin) - - Fusions (eg. Kyurem) -- ***Breeding Improvements*** - - Incense Baby Pokémon now happen automatically (configurable). - - Level 1 eggs (configurable). - - Poké Ball inheriting (configurable). - - Egg Move Transfer, including Mirror Herb (configurable). - - Nature inheriting 100% of the time with Everstone (configurable) - - Gen6+ Ability inheriting (configurable). -- ***Items from newer Generations. Full list [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/items.h).*** - - ***Gen 6+ Exp. Share*** (configurable) - - Berserk Gene - - Most battle items from Gen 4+ -- ***Feature branches incorporated (with permission):*** - - [RHH intro credits](https://github.com/Xhyzi/pokeemerald/tree/rhh-intro-credits) by @Xhyzi. - - A small signature from all of us to show the collective effort in the project :) - - [Overworld debug](https://github.com/TheXaman/pokeemerald/tree/tx_debug_system) by @TheXaman - - May be disabled. - - Accesible by pressing `R + Start` in the overworld by default. - - **Additional features**: - - *Clear Boxes*: cleans every Pokémon from the Boxes. - - *Hatch an Egg*: lets you choose an Egg in your party and immediately hatch it. - - [HGSS Pokédex](https://github.com/TheXaman/pokeemerald/tree/tx_pokedexPlus_hgss) by @TheXaman - - May be disabled. - - **Additional features**: - - *Support for new evolution methods*. - - *Dark Mode*. - - [Nature Colors](https://github.com/DizzyEggg/pokeemerald/tree/nature_color) in summary screen by @DizzyEggg - - [Dynamic Multichoice](https://github.com/SBird1337/pokeemerald/tree/feature/dynmulti) by @SBird1337 - - [Saveblock Cleansing](https://github.com/ghoulslash/pokeemerald/tree/saveblock) by @ghoulslash - - [Followers & Expanded IDs](https://github.com/aarant/pokeemerald/tree/followers-expanded-id) by @aarant - - May be disabled. - - Includes Pokémon followers like in HGSS, including interactions. - - ***Expands the amount of possible object event IDs beyond 255.*** - - ***Includes an implementation of dynamic overworld palettes (DOWP).*** - - **Additional features**: - - *Pokémon overworld sprites up to Generation 8.* - - *Integration with our Pokémon Sprite Visualizer, allowing users to browse through the follower sprites alongside battle sprites.* -- ***Other features*** - - Pressing B while holding a Pokémon drops them like in modern games (configurable). - - Running indoors (configurable). - - Configurable overworld poison damage. - - Configurable flags for disabling Wild encounters and Trainer battles. - - Configurable flags for forcing or disabling Shinies. - - Reusable TM (configurable). - - B2W2+ Repel system that also supports LGPE's Lures - - Gen6+'s EV cap. - - All bugfixes from pret included. - - Fixed overworld snow effect. - -There are some mechanics, moves and abilities that are missing and being developed. Check [the project's milestones](https://github.com/rh-hideout/pokeemerald-expansion/milestones) and our [issues page](https://github.com/rh-hideout/pokeemerald-expansion/issues) to see which ones. +... diff --git a/data/pinball/flipper_normal_angles.bin b/data/pinball/flipper_normal_angles.bin new file mode 100644 index 0000000000000000000000000000000000000000..273454d82fa36a7138d0bdb3bf23e6b2c751ca7e GIT binary patch literal 24576 zcmeI4d2AKO8NdfWKOfKb^Z9&n+2%Ipu)zjw4u{L!_YDEeeV8lcfZTzkO-NB&p|)w- zN=R+fv=J&aB!L`~Ej0(>bg+`rq>+%)q-i45v<72rOuz4&J!W=i_Mw;vqrCa!d3S!_ z%9LXEii(fMj+3hxMmVyj}aoYcK!# zC9~50d-2nc|91ZD`@mm4a_EmQ*nls6{@KM(|Nh~*lke2N{>tH({_xv_a==$#e(~AG ze_S|!`rX>&FCTjGcL#s-ycBTh>wo|2pBF#*=-hj?#}5DL_XmId%U_86f8YG)($`;p ze(~e;@7KP1=!Jv7dhTZjekuf9x!m~QZ!UfH#l;J!YhQlx;PXE}@RQtJfnRIB+H|Gy zn@e9_JYRe0;B!c!*a6qCx3;!iYi?@1bg}l}0fG{@Bbf>DuT>o#?f1vT#s!knb8>R* z2#d$Y#Rn3SQqr@tva_?ZvdjpJCnP2%r=(|wGPAH`hFk$Dsp+BYjEqnwmQY4UI*+hA zNDpP@q@_au7Qkt#6ku_dosycCmJSh6($mw@Qd5#K!VXAINu`K%qJWcwNg`)FAPq|@ z$BBtTdjgaRvZO zB2er+F3!OLU`Zev9~T?DUvAHU5Ddgab~k6Su`ykH77ZIeYw^l;3d~qcw;uh9M~s^`Z>bV9 zR?ug_kczQWW@|814=Sw~tEUliXC8qt{%>fn{~Oxt|AzMZzu~6+|6}o=w(b80?*IMZ z;cWXP%l;=QaXXS>L!;QWw*ND;GEFS>Z~7nnoEZwa0}TIjfoEix0rm#a|E9n}(5@W- z|AU`F&7^OzJCCqCND7jkO?{^%Q-IAG%GVG$={tx40;d2jaF8?@I?)l31a_AF?dSl+ zEclxgENy@#CX&4cf5%Dz3EbW!aFj5JG)CM*!`_y_L8N|(b9-}xqlIJq4vzAsf;2Yf zNBf?Z+oQax0Db1Ey?giUad40~FZpw7?tNhQLk}r<43zxhNlVvl*|F1!LGG|qxp{?U z6XxE%X5$t&Xa4NYd3^?r7(Zj-^3@8=SeLwB{Y%QnO`W?~i5ctJZ{X01v6E+MFjN

BES`h&LM?V|+wHaV{kRAfLQhuEZ8FsP}U~>jrAUz`m zee(c;lY9+N*|+U) z#|FsUn4D7vj(V4O0PJl-ls||zTG~MtYugrq%-K7RUq z-PJ*lz5|9%%ON8qgY_)kMv|DW+5|7kcEX8b3t|IdUO|7o}X z&zR#sVe-vU5x}=!725%{A>gW?J@P`eui=L zfP(V?Zt(bc9w4@d)EKmE_&ZL)QNBic4f>`4sXYvQpq{zgIZu%S{9tB7;IO3V0B*sU z#qU>ebhBBaqcK40pUW8nNYOr@i!+~(P&BIF7p39|s6<6YJ-K(U+&^PbOQrX!ogn{* zA935Ml)j_YqL1m-HPo1M|O_e3XMvvFi2)TVnAiV!ic;5g0;0)&X`uo2P z=T3Ux|E+Jg|4(?||7|!K=Kk+3%K!EL2LT&JIM0^H8{n3oRUPmEE@&ku zJrno)6&o;;Yc6mVx9kj(R&y}3;dUPdNM8WuY{(nruHcrvN#PhEw+A_+zM@Yc$KYaeWt;)e67EH~^$?IP+eaV_lTUCQY8Ch^|pm@~edCOL>ckCTs z?UD!jA5}GL;oVA%_XY-+jh;Att_DMO$?(w=^fW?l;}JMZhByKNfusLT0b7G00;l#yfQo~+EdQ!F$PxX^ z(_=G0=$~N+rl2+4610kA2d1FaoYczgYy^ngXXsWVdyZCd3NRwn+}5*_8}5b8L`Crc zY5TUFLC`90*%=hA=Fp!Za4k1CNde}H^Kbrxk39O=V~>fy4+^;fp9#T?ypc;c?YQ@W zUCw6gMq&_VkmVJPp0#{k&9-}7oTa8`=H~S+89jBu@--XXn6Yfo|A5jllV>kpp~8&i z^(-7bY)sXR`DzTc14>4WnW&`^a9fW6`2TH>`Jd>2;QINWkpF|48*4S&Z)&JimI{%vv=Q;3$j;VjBKTFX(MEc#39x;G3{B&?b(HaiwL%I5Vdd>xG zajAP)L3ctAT5kAP&v_SK95<=vmRxn*(y!UxvHO;NHQcbTy?sY}urK$st~~@$h=yOk zP62IgT7I2}7~HXW##-_DkzlCjq&3^_RqH>Pl95v|c>ID@8@KLoHD{3hXLZgmEFCv< zNws?HC#Oq(pFzXN>K_}(hk2tTJRci?d82nJHXW(z7)K!D{|n!_|9vX|bA6FODM{Y7 zTlT+UFAN|~AHr|O=AFDaDpcM5FKx60Sv|D zj@`p)|FQ82$yxoTuLb@4oVy1DLy5uEQ0JaQsur!@q||>}Mm9_g8a83}(p4J$cP;2U zxP097`O91z=M@FLi-y3wP>(ymgGwWh1!xXlho~n1zvVgp|90J5-s3-YZ+ega)V=BP z{O|W5|7R-yqn<2@*IIWj0LKVt zwY7eY0$Qwf=fbsX6ydD4*5UtcynOQq6{GeP1ojUkrF9-WYwcFW$PVZ~DLD-u3m7(e z@oIJUpN@|O3@o2GN2mYXZaoW2DkjWWpwoYkz5`1~dQSWqTo#%4X`RxJxWN7Yx@Olt z;^RMW9oN490muK_?f*AC-v5B(Kd*be{{hB-j(ffT;Wmx`kX{Uls{AkVwl*BTmHlsW zbC95Ir|f@=TLI9Ea2mP3EK8$_MHQ30NTEddht%B2KZWic?RkK@Ipg|+4R~_+5;hmM z&KS32ON))gtt01K@ZcDs!`L2+mNz@Gym{8#j1k)A$RWU+Hw)O&J)c?>9g~p1nFmP+ z2UlQvKw?TLuWZhmnjH}0;z`Lg@uz(1;#KOW!f4{p;E|I+|LUj0;Gtlc_%m^)R{uTw z!Mx82)4V4BMCN_EPE5zDxHbMirhWep%>TsyAN244!TkTb_Wx_1@BjIB<3H#J(m-=2t~5cTeplF6|v7 z?$I1a*V@|P4N_)tG^fc|F>whQC2M$ulQXb?a(Zs>@;NZ=Uv(7%^M2r|uYn_{EvjC> zd8?~Af9k7n$f!wkmQ<^!{dX(qGq7}Ym0th7`xg%zJ<&`5Lq?2=%==Uv`wmoflm36@ zuxg*-{ck+~KXz32{avw0fq;gVfu!Y|C`(tWiv#G{&#bTu+L#rlNn%c0RJku z8Z&559f(+HZgL$a-em7P#@QQZ95*$2H`im{UTQ6MPuv5uEAaI^`4vyh@Xdfy5x<dq?ht zfjhC(oQ1&*QUkfz2ac97wQp$_LL8jtb@}6xD~u2a#=)J0U|M$XF^kqygp0$_erD$$ zgT~BUwq}!f+N?l$sJEbS=$NVV?_RyZsuUOCoel%bDkslgv|OwemLa1jj z95SLZGOgcnOzybVTjl@5n)g2&`F}Y7AJM-5`KI#!Z{h#OM)Up8XX+IBKVU5Q{%58C zImS=5|7{LSZvRWTvC-v!2XDmb+hYFjSW8((F|0>?tXg>g?=Jt#U!$o`*UJdRjB8KF?rTOX=F+#$|%8eVXR*1}D!YlK`ZFuNas)ApCD2Y0&QQ(HJ~f8jD$ b?^FRVd;`5#c|6oRsI)wyfAzuZ;I;n;yxu;? literal 0 HcmV?d00001 diff --git a/data/pinball/flipper_radii.bin b/data/pinball/flipper_radii.bin new file mode 100644 index 0000000000000000000000000000000000000000..9b1322cf6e399a58510c351622adc2db9e072f0a GIT binary patch literal 24576 zcmeI4>3Z8X5Jh1-X&hU!C3%zk{twz&u*{tSNH1;7G{BE6H~=J5{0=XNuu?K@cPq{G z*nbke(RORQ%fFfa)OK@II@{lb30`xfzrz5**VjL|@d!6yN3)s!#Z5-w0ABo>=yz^3 zf>vlRosvvv{EeFqunXkrgs-lycz|1gU;PKqzPh};ECb8}gTwKrqS)k8TH<7KMwHL*miXO$<1(Oq z{(^zifOh^crs;>HSs=CZ?{=pc`7WQoN@@1tc(U`;ey43uYb!>c2ynY2Dzi@yFh3FC zb}#gJIz2ohPecSBj>qHa;oJRB+&l5JRSqPfyQ&eoDj$Dt&&5JPD+^PtRSP z5-&{f`K33T7i38E+*v$#y)4r4yh*lv1g8IgssG!l(D#4j@ASW4!22KgNBrLw==myVJDRsTZ!{uli(_@C`>{0~3B{Dpz~W{cHaBm`gv>a{VWAvA-0DM%5uM4Qc-G%;qk=H(0s= zoX@YXgUPe|E04hR|G(*f^GO=NH~;tf;`4)T`QQ8iT$>N|f6H|M=6~QF{{t7hqyK?Z z?LPP)2C&?n|ABLH-}xUog?pF(kyCBQ<$vVqn5#cE|2uy2{&&3UzxdztqW@g~@wncpBWJs#|B=&^UFUzt zPu~BIrw6J1xB9>5kLZ7ooBq}Rkr(}o|2w$opYwkgXZ_D-1B0Wp@$TvW|Ed4i_CN9U z;Zy!+d;9zkC%X=S{13e2f8;U$182QE|2rQ1k6h#q{zooy2md3NbPxXb-22~g@;c^! z$4Tz!f5)k|1OE4zp#djyQBY+Q*?LrALJC> zUH(T-+1=%TdQ{}1&)-ygg;|HJv(@jvj-`aj!!=zr1sg8vV}|M2!w z3jTLI_}_D}yYau{B6sV5$3^be|Bj2?jsG2{Z9C}yz*+9i{{c(5um0~~F6|WkcX3MR z?Ee9#?iv2a$7Ta$`hWVr=6`!WlD@ra8}h%yylWHuAGn13>i>YXwp0Ay!BW}J z{_kRzyZV2Cse9^wd~CKrrvIn^f0h5?d|&hbea!zbU-fSDKVaH;>GMBwN%sr>CwXK2 z2dC4MS+#rhzvtfnjVAw-(o7x1pgyn z@juHO>;Eu4or3=zU-3W58~u;dli1znf5*k{*8h%^yTShsQ+QXom->I;Z0_d&fJ<#h z{olc4cXqqv|1Q>S&tnFdx?jovV>-##AA#xr|Hl7$`^|USzG;5{t9{;i?E^{BJN-XH@U+@V}j|ddKkCM)P{l8(3?~DFtIqQJ7 z|Iwm;tnn(XT zp3{BJ{|@uE8_55j>j1ij(92K@INQDWKXS2q@qY)4-LwC@ShGD}BL07-jDpRdPo18)w%W_@;~xAfOd#Vvsm@M;D55W^FK__dN=+@%(WTxzvC~? z{|-xO-ugfAvs@sG{{xoVjfQ)=M0BvGd-Z=8H~$YXb1)6 z-R6JGRqx<`i^bmPe~T%5tKOUc0dwia`5!q~UexY6|0B-wZvOX}#cTZ^xD4Rxj^zJ{ eHM{5fPY&!{8rdy`m-n literal 0 HcmV?d00001 diff --git a/data/pinball/gastly_normal_angles.bin b/data/pinball/gastly_normal_angles.bin new file mode 100644 index 000000000000..7783c2fe84bb --- /dev/null +++ b/data/pinball/gastly_normal_angles.bin @@ -0,0 +1,8 @@ +xz{|}~tvwxyz|}~ stuvwyz{}~ + qrsuvwxz{|~ pqrstuvxy{|~ + nopqrstvwyz|~ + mmnopqrsuvxz|} + llmnopqrtuwy{} + jkklmnopqstvx{} iijkllmopqsuwz} + ghhiijklmnprtvy| ffgghiijkmnprux| + eeeffghhiklnpsv{ cdddeeffghikmpty bbccccddeefhilpv aaaaaabbbbcdefip```_``````````_`1^^^^^^]]]]\[ZYVO?/(%$#""!!!!! ]]\\\\[[ZZYWVSOI?6/+(&%$$##"""""\[[[ZZYYXWVTROKF?93/,*('&%%$$###ZZZYYXWWVTSQOLID?:62/-+)('&&%%$$YYXXWVVTTRQOMJGC?;741/-+*)(''&&&WWVVUTSRQOMKIFC?<9631/-,+*)(''VVUTTSRPONLJHEB?<:7520/-,++))(TTSRQPONLKIGDB?=:86420/.-,+*SSRQPONMKJHFDB?=;975310/.-,+RQPONMLJIGECB?=;9764310/.-PONMLKJHFECA?><:8653210/NMLKJIGFDCA?><:9764321LLKIHGFDCA?><;986543KJIHFEDBA?><;:8764GFECBA?>=;:9 \ No newline at end of file diff --git a/data/pinball/gengar_normal_angles.bin b/data/pinball/gengar_normal_angles.bin new file mode 100644 index 000000000000..1e622b09d9fa --- /dev/null +++ b/data/pinball/gengar_normal_angles.bin @@ -0,0 +1,19 @@ +xyz{|}~vwxyz{|}~tuvwxyz{|}~ rrstuvwyz{|}~ + pqrstuvwxz{|}~ + nopqrtuvwxy{|}~ + mnopqrstuwxyz|}~ + klmnopqstuvxyz{}~ + jklmnopqrsuvwyz{}~ + jjklmnoprstvwxz{}~ + ijjkklmopqrtuvxy{|~ + jiijjklmnoqrsuvxy{|~ + hiiijjklmopqstvwyz|~ fhhiiijjkmnoqrtuwxz|~ + ghhhiiijklmnpqsuvxz|~ + gghhhiiijklnoqrtvxz|} gggghhhiiijkmnprsuwy{} + fgggghhhiijklmoqsuwy{} + fffggghhhiijklnprtvx{} fffffgggghhiijkmoqsuxz} + eeeffffggghhiijlnpruwz} + eeeeefffggghhiikloqtvy| dddeeeefffgghhijkmpsvy| cddddeeeefffgghhijlnqux| +cccdddddeeeffgghhijmpsw{ ccccccddddeeeffghhiknrv{ bbccccccddddeeffgghilpuz +bbbbbbcccccdddeeffghjmsy aabbbbbbbcccccddeefghjpwaaaaaaaabbbbbcccddefghlu +`aaaaaaaaaaaabbbbccdefhp`````````````aaaaaabbceh__```_```_`__``````__`__)______________^^^^^]]\ZW?($#"!!! _^^^^^^^^^^^^]]]]\\[ZYWO?.(&$##"""!!!!!!! ^^^^^^^^]]]]]\\\[[ZYXWSJ?3*(&%$$##""""!!!!!!!!!!^^]]]]]]]]\\\\[[ZZYXWUOH?6.)('&%$$###""""""!!!!!]]]]]]]\\\\[[[ZZYYXWURLF?81+)('&%%$$####"""""""!]]\\\\\\[[[[ZZYYXXWVSOJE?93.*)('&&%%$$$####"""""\\\\\[[[[[ZZZYYXWWVTQMID?:50,*)('&&%%%$$$######"\\\[[[[[ZZZYYXXWWVUROLHD?;62.+)((''&&%%$$$$$####[[[[[ZZZYYYXXWWVUSQNJGC?;730,*)((''&&%%%$$$$$#[[[ZZZZYYYXXWWVUTROLIFC?<851.+*)((''&&&%%%$$$$ZZZZZYYYXXXWWVVTSPNKIFC?<952/-+))((''&&&%%%%$$ZZZYYYYXXXWWVVUSQOMJHEB?<9631.,*))(('''&&&%%%%ZYYYXXXWWWVVUTRPNLJGEB?=:742/-+*))(('''&&&%%YYYXXXWWWVVUTSQOMKIGDB?=:8530.,+*))(('''&&&&YYXXXWWWVVUTSRPNLJHFDB?=:8631/-+*))((('''&&&XXXWWWVVVUTRQONLJHFDB?=;96420.,+*))(((''''XXWWWVVVUTSQPNMKIGEDB?=;97531/-,+*))((('''YWWWVVVUTSRQONLJIGECA?=;975320.,+**))((((&WWVVVUTTSQPOMKJHGECA?=<:86421/-,+*)))(((UVVVUUTSRQONLKIHFECA?><:865310.-++*)))(*VVVUTSRQPOMLJIGFDCA?><:875320/-,+**))(UUTTSRPONMKJIGFDCA?><:976421/.-,+*))UTTSRQPOMLKJHGEDBA?><;9764320/-,+**)TSRQPONMLJIHGEDBA?><;9865321/.-,+*SRQPONLKJIHFEDBA?>=;:8754310/.,+QPONMLKJIGFECBA?>=;:8764321/.-PONMLJIHGFECBA?>=;:97653210/NMLKJIHGFDCBA?>=;:98654310LKJIHFEDCBA?>=<:987543IHGFEDCBA?>=<;9876GFEDCBA?>=<;98 \ No newline at end of file diff --git a/data/pinball/haunter_normal_angles.bin b/data/pinball/haunter_normal_angles.bin new file mode 100644 index 000000000000..5f9835543f2e --- /dev/null +++ b/data/pinball/haunter_normal_angles.bin @@ -0,0 +1,7 @@ +qknsy~ k rksxyz|}~  +mruvwyz{}~ ?rstvwxz{|~ ?jqrstuvxy{|~ + kopqrstvwyz|~ lmnopqrsuvxz|~ + jlmnopqrtuwy{} + jkklmnopqstvx{} jjjkklmopqsuwz} + ghiijjklmnprtvy| ighhhijjkmnprux| + ?gggghhijklnpsv{ ?iffffggghijkmpty feeeeefffgghjlpv ddddddddeeeffgjpcccccccccccccccc(cbbbaaaaaa``_^\W?'# eaaa````__^]\ZWO?.'$"!! f``___^^]]\[YWSJ?3*'%$#"!! i__^^^]]\[ZYWUOH?6.)'%$##"!! @^^]]\\[[ZYWVRLF?81+)'&%$##"!!!?g]]\\[[ZYXWVSOJE?93.*('&%$$##""b\\[[ZZYXWVTQMID?:50,)('&%%$###^[[ZYYXWVUROLHD?;62.+)('&%%$$!fZZYYXWVUSQNJGC?;730,*)('&&%$jZYYXWVVTROLIFC?<851.+))('&&%_YXXWWVTSPNKIFC?<952/-+)(('&&!`XWWVUSQOMJHEB?<9631.,*)(('iWWVUTRPNLJGEB?=:742/-+*)((ZYVUTSQOMKIGDB?=:8530.,+))#&@VTSRPNLJHFDB?=:8631/-+*)PXTRQONLJHFDB?=;96420.,+'.ASQPNMKIGEDB?=;97531/-,>EQONLJIGECB?=;975320.:NJOMLJHGECA?=<:8642151LHLKIHFECA?><:865373MCJIGFDCA?><:875<2AFGFDCA?><:9:>D?BAA?>>?< \ No newline at end of file diff --git a/data/pinball/meowth_jewel_normal_angles.bin b/data/pinball/meowth_jewel_normal_angles.bin new file mode 100644 index 000000000000..fb8de1ed3db7 --- /dev/null +++ b/data/pinball/meowth_jewel_normal_angles.bin @@ -0,0 +1,5 @@ +{|~vwyz|~suvxz|} +qrtuwy{} + opqstvx{} lmopqsuwz} + jklmnprtvy| hijkmnprux| + ghhiklnpsv{ eeffghikmpty ccddeefhilpv aabbbccdefip``````_````_1^^]]]]\[ZYVO?/(%$#""!!!!\\[[ZZYWVSOI?6/+(&%$$##"ZYYXWVTROKF?93/,*('&%%XWWVTSQOLID?:62/-+)('&WVTTRQOMJGC?;741/-+*)(TSRQOMKIFC?<9631/-,+RQONLJHEB?<:7420/.ONLKIGDB?=:86420MKJHFDB?=;9753JIGECB?=;976ECA?>< \ No newline at end of file diff --git a/data/pinball/meowth_normal_angles.bin b/data/pinball/meowth_normal_angles.bin new file mode 100644 index 0000000000000000000000000000000000000000..5b9cd82a2a9f80b2c4885e0c32924e2b02f40bca GIT binary patch literal 1920 zcmaja`#U0W6bA5pc6F6o7O_NbsZdgGvHQ@9Y%ZZlsFWi2NfMSn{k!k^PUx8#_WWW@ zpZ7gy7?aHHU8(%|_xa0L$$RC01>v?>DnC5I*C>nXw-;A}P$=Hri(aL!{!RXzKRds; z!Gd?M*2>lUn^Oe%0{Q^lqf)Cip9Hcw1TL-x0UuED8jbeDK<1bN=a>8-?x|j<)4v~3 z{gh0nkFzJIw4hMDf51H|HR?b1sUsfX3rg_c;I&$vUSC^X`}(|}NQ!|xKDlsLetO}a zxWVv>s{ZaD943-{L;m6h2fg`P__``sd5rHPkxZpC*^{#?;r9OVOE zv?6ts$(^3x6z(2hYD5oSU*9BK5Zl}1iR4ixo4*u_5AalPfNp4Ll>1l=5$s4{L;m`< z{8FRQzVSxcg5BNSO5!k?&Yc%Z&nk_M+EL!v*d+5i2#AsRK_Z>IDn6^VwFcZmxXEZV zN-o-=5hHu?gVd?;tkxT#MQm(tmiS0Cx)ZI0VzGGgtgJOaqZpP(;-l4rMTbxIO(eg+ zj>NM_Wws;Rn60fri>bA>wdH*z0nXqso8j#%fow6~j(;VG$ygbhQ3uPpheUAA8H51!x=sb_@48z^55tpo!LKKH1#ue*y9Sb{au zzy>gtuZI2vm*KsxVQXKHxwE5^kb1^7@s;4x;==5t+iADQeFyoYzyoZ)#%PH9Bmw4)*t1dd!NRuA%xxKm7EBXUsX` zuvrHXP~(}mSTN$S v4}HuTLp}F%J{-gsI6mVD;C%Fx7Z=z+_lyNZPX}Sa|1|x+fPQ=c4wC49(sWtN literal 0 HcmV?d00001 diff --git a/data/pinball/seel_normal_angles.bin b/data/pinball/seel_normal_angles.bin new file mode 100644 index 000000000000..7783c2fe84bb --- /dev/null +++ b/data/pinball/seel_normal_angles.bin @@ -0,0 +1,8 @@ +xz{|}~tvwxyz|}~ stuvwyz{}~ + qrsuvwxz{|~ pqrstuvxy{|~ + nopqrstvwyz|~ + mmnopqrsuvxz|} + llmnopqrtuwy{} + jkklmnopqstvx{} iijkllmopqsuwz} + ghhiijklmnprtvy| ffgghiijkmnprux| + eeeffghhiklnpsv{ cdddeeffghikmpty bbccccddeefhilpv aaaaaabbbbcdefip```_``````````_`1^^^^^^]]]]\[ZYVO?/(%$#""!!!!! ]]\\\\[[ZZYWVSOI?6/+(&%$$##"""""\[[[ZZYYXWVTROKF?93/,*('&%%$$###ZZZYYXWWVTSQOLID?:62/-+)('&&%%$$YYXXWVVTTRQOMJGC?;741/-+*)(''&&&WWVVUTSRQOMKIFC?<9631/-,+*)(''VVUTTSRPONLJHEB?<:7520/-,++))(TTSRQPONLKIGDB?=:86420/.-,+*SSRQPONMKJHFDB?=;975310/.-,+RQPONMLJIGECB?=;9764310/.-PONMLKJHFECA?><:8653210/NMLKJIGFDCA?><:9764321LLKIHGFDCA?><;986543KJIHFEDBA?><;:8764GFECBA?>=;:9 \ No newline at end of file diff --git a/data/pinball/tilt_down_deltas.bin b/data/pinball/tilt_down_deltas.bin new file mode 100644 index 0000000000000000000000000000000000000000..beb2d4eebf314a11a63ecab3c1218b5ff67e2c9b GIT binary patch literal 1024 zcmd^+Ay0Av07dVEu@Ro5P@aW^iK0X{4K&GUW79;@K+-_cK+-_b#HJ0c(loGXQ;Mc% z(eex$bk9wv-Xq)hBMjfY^=x;$N0LJYj+Aj(SaeWr%b)%2xWzE<0}>Nr-{59&El-_IKORYRv5`9ouWY2qKnwi2V%3Iv+L zn&n4xd})CXEs?6ht5$i|I*B%U&^EDlxz#?`I^Y`jX2Q-N4nxbH|*(-9o@5~ zM>h1tnqFAZ8_RlUQJ>7~o3czaoelLbDN+K&m zW8yqxhm2fc=pqA0^j)IoGF?~bxJuhKTCUS{gNB>b-J<3;Rd=YkOW8e2?h|=H(L)Lz d5qeDC6LOBpIw9kfz|#l**njX}`w#xu|1WoyYN-GK literal 0 HcmV?d00001 diff --git a/data/pinball/tilt_down_left_deltas.bin b/data/pinball/tilt_down_left_deltas.bin new file mode 100644 index 0000000000000000000000000000000000000000..70ebbcc6f7b20bf6a74aa8cabbf25422c5080cdb GIT binary patch literal 1024 zcmc(cO-mGD6ot=Oh*Fk8rA{BVNUL2rw8{vHY!zeeDs7QgG=_vWA(` zph#OfMXQX6$W4UPQu|n_Ih6*L7HGWp^!|(Ca^P8-M?r`60fz6f*9m@4UkgH;G>^gTHRkZ;-TA%(DOstc*pri(9OM zJFJR9tL9!i#)DSJBi6`TyTAr(XNyG{wJ!G9btdg5hpnH_EY8=KWZLfWvkh?G2D$8$ zrvVn~E=!eQP;pl37DMV|jjpjlU2Ih+FRP8cYGzUq4(TLQI?7RnIHm(kYY!*2lhZ2Y zoQk=id@c(F7LbEkti%M?;4RkS1&T0&4S0Y}=*MPUK?&M?8a>xyBSHwE(szPbi!v0T z7%TjD4kW*&C1vzmAM{;mP3es$^jzagc^dXKs1e=KBlRkwZuKbUuR|?rRaobBTunNp zi1z7>%5_RxRj>7`Q?AdF)oad9>yw2wZV|n*b9!pc8nR1DSch&{Or3UB7p+fWi>t=& v>##jml|4~~jjG(nwB6pT#6GIfzG}5CD%SvH*?%mn{=KrS`j0A_Rsa71Wu7bB literal 0 HcmV?d00001 diff --git a/data/pinball/tilt_down_right_deltas.bin b/data/pinball/tilt_down_right_deltas.bin new file mode 100644 index 0000000000000000000000000000000000000000..75987a55c1358ce74b31f9a7bac56390dbaa9f37 GIT binary patch literal 1024 zcmeH^!B5C>7{;FtR-qs&ESjGU};L)a85vWYV3kZi4n%7$7|4v3>Nr3 zDOCaGD&~?dP@@{^bc1VZqgh?t(lc81iZ%^$S0CxnB%PWI#JWQ(eNXG%u1vRTr*CV& zZ|bnGtJrm_aE)qRrAD7un@{VJ3-#28)ayL;J4b`g)_ZT!s5j`lQ}o*jnsbb#SufIr z7i+|cdh6wS>16eU#6z!Ei`S~bX}TOJ3;LMXDBr2t6EfSpLK$ABR4-9N=#Zru<~_l* zKQQTcjCp`z_c7!i2K2KHbh(*!H_+r-uDY5^U!=t46!h{;@MaaDI aR5a|L(YR-$nb0AHuK)Wl*#5N(y#GIqHFP5Y literal 0 HcmV?d00001 diff --git a/data/pinball/tilt_left_deltas.bin b/data/pinball/tilt_left_deltas.bin new file mode 100644 index 0000000000000000000000000000000000000000..d68143e1bc73f62f70d7c984c1035173a724f7d0 GIT binary patch literal 1024 zcmd^-(MO$e7{@>7q$LhXy`(oLg~z%{?3L+j8%=`*-x& z)32=WzW#@D9LsYe*QtDGa-Pe3A@`;HSLUdg=h|F1=DRg#m^Z4q6A(PGQrwc}hKF49 zhzc35XycL&E_lp2PdMW#r#$0?=N$8bL;Be#N12!GF~|->Y%{_Zc{UhjjRGr-QDU4W zUa`n)7I?!vZ<%9~qBZ3^;kRJrJs-9|pf0Dr&$(Xbvvzyj*R7(<{hj)>>({DpMrDf} x&GIzK)hJ(D&IWl?a@WgWXO3ExHRej1FQEdvnEURzzx$v1&+otb2i)iV{{tF-c^Ciy literal 0 HcmV?d00001 diff --git a/data/pinball/tilt_right_deltas.bin b/data/pinball/tilt_right_deltas.bin new file mode 100644 index 0000000000000000000000000000000000000000..af9472d05b4219aafcbd7e1c62b63897d9dbcc78 GIT binary patch literal 1024 zcmeH^O-BS!7==$CMlz8iX;DONW>JeoL?R+BYB8H4YLO8oN;3K`l^9}(S|lxIQzRlS zMvNATNYrK)NsA(e7*eUHGryzmbzJT}@B2Q-m2xX!1qEgLp;F(}=!-gi5Yju1%F?Vi zT9u()uXO5}ZavYf2f|9zr+Wr;%aE=a)+HlKF{&ivI%Pt~OzDtmC5UQ|8ErGGICF|I zuQh9d1x0;MT4TPC_v4UT`*gTpoBOu7f0O4lcwWeJ>pj2L9M$HjGFOH9 z%FS77-V$>co4?380?t$DTm{aT@0@uAE$2o)KglCYJ{bylp^!%cq$%Q#Vs0qmic&5p z=bQ@8sN#fbj;Q5;dJ=@#r-5CX*rA0j+KAJ^CSAnnVS_O1^s~w!D@0gkj3p*nBx>dM zniaF+zTfuyo_z`X4_$Zc`cuCq-7jUwrTbrd&aLO&dv4m!2Xj1`=hDfSXiUsv{*EG(jC8j6;knLr`& z64!{5;QX|b^2DN426rD9pfL(%sYMFLdM1UfOCExZC@JuB2g(=&*$iF{n({!3CEd~2 zk%3`jKlh(RRv_OXz$e5NNIQCEb$3tMvSrEt|Nqa;cXOydp1S(~l(THqyjC8^sNwm;2Fu9~6j@C&GiG0EHA<^NLlPe*|qNlzEYkcv6U2?y9uSzDbt$Rn=c eka}RL0t3TR8#dV!4h%LxMGT&DfSXiUsv{*EG(jCmfoE!X9I=A zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_nztqNKpj9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NS%G|m0G|+7AnoXt)!jX1%a$eo|NlQX-_4==c8!!Mv7#w2fdm;X!IKOF^fBt2amLn`JZCmdien{T;U`b+^M fQwUoO7Zbz1IUKh27h^<$iWody{an^LB{Ts5pfXNd literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_2.png b/data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_2.png new file mode 100644 index 0000000000000000000000000000000000000000..91c3cde759d5e99807c9f5d80756feb051146d9b GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!VDytB9fK>DfSXiUsv{*EG(ktTyLFzo&gGp zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGflQL`i|4J5a_L$Y$_r(3A&KEa{HE zjtmSN`?>!lvI6-A0X`wFK-$qOtGj#3mMu&E|Nnn(zMDh!@zmA-r=0zBb5GLQB+GBz zN&oLJDoNeGu>EOXa@7oFhhIQFj7i?^F8`OZe>w`}NP4DfSXiUsv{*EG(kt5^}#gT7W|0 zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplX+QBvUN4wNwlvKhP@H06O5OS+@4 zBLl<6e(pbstU$g&fKP}kkaqOS>h7MhWy_NP|Nozx@8(c_JazT|DQExO+>>-R$?{uw z(*OI5N>aBkY=4@UTs1@4;TKR3W0JSK%m1b9pN;}KlAbP(Ar*6y6ArMa&9gKXK2yNR e6v7t6#l&#Ig?+0y_m|f|MGT&DfSXiUsv{*EG(kt`pevOyMaRD zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplX+QBvUN4wNwlvKhP@H06O5OS+@4 zBLl<6e(pbstU$g&fKP}kkaqOS>h7MhWy_NP|Nozx@8(c_JazT|DQExO+>>-R$?{uw z(*OI5N>aBkY=4@UTs1@4;TKR3W0JSK%m1b9pN;}KlAbP(Ar*6y6ArMK&9~eveWrks eDTFPCi;3ah91h$1i!q`=MGT&DfSXiUsv{*EG(iH>>}AS_W^~( zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_nztqNKpj9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NS%G|m0G|+7AnoXt)!jX1%a$eo|NlQX-_4==c8!!Mv7#w2fdm;X!IKOF^fcsyMkLn`JZCoJFt@;n$A^>*0Q P0a*;5u6{1-oD!Mp@Jd|uOAor~um7wvS=Ntdf` zdL(b!Ki9uk@y7js^H=?JGuQub{rl)=fI)^BW`t437+3kVZ_mp%!6Z{mGs7%%%(K9v z;*I(*vCImqtg+4pn{2Tyd0lU{zQZni>~p{&M;vp)sm~kU{~708aLE687{;fC^k9lvK~8QdCD7a6488=G8g$AAV*(-&OfCUk47n|)Q1&d^ zRjx%4j0<)NN+MDMrqtAQOG9y()u{*5R>5HtHy&%}Z`kJ@S+U~SZC-n%j5Ye{c|T@G zVe$rM1(EHxT5Z=W-en<|EPS8FnX?-KMub-r?%oK3U9vabX5g4Cr9 zCjiCifFP3aDw~S{%O98ZGo9<#T_`eRirGQePAWLlbqN=i;llDHV2)2QD+WXg=KRDR z3gE&h!T{X;Thq7}wfp#T^zY+#D*?FbUrdTqq&+yjuSsfBYEt9;^ntW3>k@E1(Bb>L z{C%2Ji=H4Qe0|&CKR4xq9)2uve5plG7z2)_+{5X}m~K-5xKROGO#&Pb5p@vO-04>XKuY$s2U7l< zy|l%i0{ARh2Vo3|6!@mH5CBh}wqE0cIkvU}9AC|83{WcgE=IwNw*W|a+CG&FvOflt zdj#O;Qvs2JzPVXT;lS4rfzw~^$%Tcaga~lVWaPyu>TqFUJu!e%#MsWUORQz?ur z258#7semaq22h=_bS>3G@x3MmMpB}1-I)Mf6C+8Ct)G(yQea#Ol2|Lv%0FF`qiTwv zo>Fi%O^sA(R{q;=s&qM>BUN%ponhK|)3;Gk^Es0yY&)*PWKA(XLcoOf#fXdOs+a)IkaJuVT$8ns2Q@v1tlh7x?L74!$ z1_kgGsy~nmmDSa!3yeMLzyq71B!jPaObpcXG?0SLooyAYPnD++8M_Uwg0P28bHfu~ zJY5$D8)ms{ON4--BrS9afP#TkQrdBjjM9q)0MXnJ0LXfxmN_fz-dSv#Z){8YMTQc2 zj;;!pM$rbK+Htmdhw3Ggx=s1ofr1SHZfTx4IBb^7ZD!$YX*YVw~DfC`urcR8)pbROHw%9$C2mtzo$rAoy*D*1vvhiv_ zu|qjh8i$**$9htxdp(?)>~G?|l%;zzjU%?rz5i_@% literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards.pal b/graphics/blackjack/cards.pal new file mode 100644 index 000000000000..1b8c5270c12d --- /dev/null +++ b/graphics/blackjack/cards.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 106 156 +87 81 90 +195 222 231 +147 78 108 +255 123 120 +255 255 255 +246 186 201 +120 105 141 +108 186 237 +255 230 90 +205 189 106 +171 147 204 +87 102 147 +255 255 210 +225 207 228 +0 0 0 diff --git a/graphics/blackjack/cards/clubs/cards_clubs_10.png b/graphics/blackjack/cards/clubs/cards_clubs_10.png new file mode 100644 index 0000000000000000000000000000000000000000..bd75f3844855664ae3c0a6c0af6aff4ac601ed6d GIT binary patch literal 679 zcmV;Y0$BZtP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GNM zL_t(|oTZdOYU?l%hTR*y(Z&$y!UEHk5AzJcgoh51LJ?Zz5b?%LiWgml=mKx?PEms} z3ivK>M&mSgHeGZU#{T_jG#<_GEQ3}2%AWKpAX8;n#870)GzZgILqRu&gy4>)!&iDu zH-Ur(k1w4&R>ts!guxwM$1iQ6Y{@x9s2a=xmE=goi04fbgiyx7i-L-T5iv(f5eC<3 z-lYc6ptz1bq+Np6L8o#D9hfkyU}6X==ZS-qQ+iV>J`;$|=wv z+L`DtleLJabChq1*M9rgIzgD|FJb$K5r2+}xC?pYp6;&rPD?DFKH$)kKznrmED0Xq z&k?QecAVwEaY z+q^7tnx`UFYIdJxV=WKZb1VJmRc&7dkbdkwWdaG9d)h;qNCM`b?k1kuslA_z97DM{ zIc~CEp4>n=etP=f5aU}&m(k9|%?e}^A=nC|m?ZUsZBf;;C(^95EpDDjj$&JwI}z9x zr4TCZQj;xAlT0EL6!ruR$s}_fHFrX5qh$&ooehuPe_H{0B3XtUle9=feO1 N002ovPDHLkV1hnpB7Oh> literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/clubs/cards_clubs_2.png b/graphics/blackjack/cards/clubs/cards_clubs_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a23cf60d57eb881a3d482aecc557abac25c05301 GIT binary patch literal 678 zcmV;X0$KfuP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GKL zL_t(|oTZdOYU@A@hTR)fvk3&c@PO&chiM>~P<)6K9%2?bguNM*;zd^>bAh*br%1t= z3HUCRG;U*O^A^=6_|IpJM$+#rgGD@M4|WldnWCS?XP%k5!nazZI@C1_y(6C}*AzVq z6(J?WHKh`WWCXz6U?Dj+uCbDVRzOCGflzV`bXu!WJMWC7fM)|G3jm0g+n_L-Ff6D z(eV`1UE;Od{zaD%A-Z$FeHA2}q7pY@6{V-UE4}k8NXHL2bS&^0{vWas01j;;JU_eR zw-C9hB7~1`VsI?%*FQoW)`S4-83AWVf=R@<2PksZj8&oT48Zn9p7U60rDnS-@)hq> zu9eoiOHm=pf<3jVAD!9YTLMx)c9*n)3`{-kKsS{~u!blm11V?jkPGWoK6?AwChic;~erVhcekWK?%uY$3=qnL-^Uwopg;ltXNh z41>+&D6bdgl`-1&ey>1(0Z4wSH#Svit?t;pv*F(R56iCuWcQzoFGmHkcCjD|Y5)KL M07*qoM6N<$f{d6KlmGw# literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/clubs/cards_clubs_3.png b/graphics/blackjack/cards/clubs/cards_clubs_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b5d5c5b6a1f85e87327e5c4e1c9ba338a7612d GIT binary patch literal 666 zcmV;L0%iS)P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00F*9 zL_t(|oTZdKYQsPfg_Rp*whQmbf@j&pI24781E3tFYi zFKyBV6E`7!%;O&fQp^b)Dey|fF@!LV%`f2ty%B6ICnBCX1%`by5&ksN2=H)>`YrM7 zSD)4?!h}Edt5-(CF$!@N(#SL2objDrv3U4^y(fWcv|pBl0I+YAXzAV^EC1J0u&i(CKsXd24MBV_gR#a^JbM6SxWnqNvGB3yPzfF z1$%0A9^NeNP63_A=36(AfN7>4WFrZfX1W=9XUFDxE_w{b?BsaJ`TXQM%JJXR|AQFb z^r^KwC7fE=eFtXhbeU_Hxo+XTv*F(R54V2@NbY|ZKSbHJ9%!?A1poj507*qoM6N<$f;{9H A?*IS* literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/clubs/cards_clubs_4.png b/graphics/blackjack/cards/clubs/cards_clubs_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7b414f31c5d048d4871c010074cdd4b1b5fd4e84 GIT binary patch literal 664 zcmV;J0%!e+P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00F#7 zL_t(|oTZe(io!4uhU**b_EN?r2Tx*NU=RBg3Z+Eo zyX;IRYW1=Q=hXiFGD&CVPnN+$yk(=}As|y_JBV|hDP2w1I!3k8nuONcMku>2TM{a? z%`6gjJ7c25M3`KeG7$x5z%ihT1fn9K!^0#B+VENmm@1g@E@!Lc478MYp--}jUP0WY zZHwzM=^+xsh{P~nAn3F>B(SHzI}v*Cec#tN!g*TZO_(JjTsQ^#O`QmL?2SR(9fJHz zxVXiSv4Sw+j_u-;5q}7gxC`UJHC}I&5V{E(fXRS>BZ#1c=vM$`PMRvBpq&C(eDHf7V&|M%jLUpX^OVPv>gB1d zjNt)$ucaPN&COZ>smJmp6G%X+se?F?1f-fSd!E_8zV}7iP!2lBMJ|S&J5!EVyZ;Z- zeaY9gN&k{2xoU7N1p9>TLP8|i7L3?LbkP=x5Wlc3m_XddnzAi8NoNS;9CLA$*3)fr y!wSTeCzVb*7eLQt3ZI<~&)y$B-VTsGUl)Hs4YxkgMtq_G0000n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00F~E zL_t(|oTZdYYU4lngC(hI z&@5eB+^)$#gqVd8v-knQ*QY5#0|(uSG{hK(q4^?0gAV^`XwR2azelbOmIdFH9(oO<_Z<6-~cwS@|-8_TyUF3nJ;*ra=mG_ z`z(2gWWatkR*&G;_-26BWA|wj$iP_B06LKjj5Xa2GP6T-?~ApeoODi#TueLHvd2%m z{|(W<+grqUBfL#A5B)*wp?f0hazv+utc4&v+2g**S_r{MY+qz8!~?x~$Xb-@;mu>s zhb@ckT-VhKbS=2?rt89PS=balZZI&wEU?#_%Q$g002ovPDHLk FV1kuCAn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GBI zL_t(|oTZdKisL{Kg*7+W>cp&J0yT(@e3&&DV-_7khNbDihp-Y+UOJe_xG%85oMHr` zX@l;v^&^jECmT#9mYzOUm8<%xDBvN!6)*N7pfJ@ii@q#OUAsdqv87)UhJ>9`{#Xr6 zc!x#^e_Sz<&^49;R~lE5utn_loBG zCgg<3LVUXs$&=75KZTr@=m3^80xqC}QDSTWs**HgMW}-T*!<-CGRx+I*(|DZLFcKI zPV3!AwRMgU*lVlv2xjf}3g|p`A9?}_m}VM4P9y=-Om`!n*|ELvMb}WxHpfG@^Ud{? zn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00F#7 zL_t(|oTZdaYQr!Ph20x;1SJsY!Uoe-4pT!2q394P6yZe<5pTkzXwg-OF3?3!(SR@t z_%59vr%|%$qO-D}K8@s=c`gdLiu>ZOx(X;v9kV!=g|Q3gti)n%EeWwje30dKQ%4dO zTZcx7b~6*=^$86Ft~9RZ9I`?gZ~|zUki9YXxSxtZOPT_n49uA5HAOtO+lo)I4b1c& zE6`J7b-pG&$SHXUk;gv>q{s;zDDXn0A%rjt-7nz-?FcT-Mk1X!1%`Du68`3oaqpMm|$Co9V$Xe=*1RM{9wdUVhc@TBnR7~&OB!uvc;9> y;!1&7n(?NM0=Cg9ymdC*djIbF?*PT^@8So*0JVexsC{h!0000n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00F*9 zL_t(|oTZepYQr!PhMhO)X$b^6*kC&OVHz+d6hA})MQF%F#EZEU4Vgmp0v-AkF$kl8 z-=%jtCvmcL=q#&xFya zB4Ks~6Fri^fKHXpNvIGbQQ;g=O^6hNiJ4A=iHGQcN!_eFa>u813p%{s9;VsZ@n~|`mL2JbQG03-s zi!Hyk5rheQ^5q93?ieC*7v_O$y1L*OEz!6?z}AvLXS6?>1P8EfglOs6?5{%T5m|7D zE72Pg){C1E`UPr$#e{$ph@gZR)&O}*n#!V3TLnYP_v z^MJiJQV*+^dLw|;V|A7ZBw(zmg*cG}j5S>iJhMY{?~Ak{pLC9koJ~8|(H{Tp{vSmD zDQ|l{5=JJuHnF8H3*d000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00F~E zL_t(|oTZepio!q;hT|LDY$FI)BoM6fFegZmBM+f)EL->xrU~P*g_XE3aK$}^fhDYv zce$CJsL|#Mr%CeX+ug~`{7Djch__^tJp?2w_oHajL{*jERxwJtlHfaRgfhF_GhsBU zNSIy0M293Wpi`xD5=z8KlsE-cB(z$H4v(`al&EPf1Cz&jCo=Um^{H^Mqv;dCelB3yV2blZ9$?5U>`;Qkoo zTf)UIf3y*V348L(Pe$A^MB*+?1J`tQ!EaikaesiVC4tUpel-aWU|S2((6iZJh0r0g z;0{-!GbF5MHz9O0)Bv*)0Vfba3DK_s@{}}{MWM0^VEMt%X^5S(YB|l*Da}(FGp$zV zywsWp?7fzHShdg_0i+(QvrHfXLrpEji6mgC>8j_M?dyAAqz(C~b6n(X+_{$ac(wcg z5Z#x&?estxndHjgMhNx^0}b6U!M0$;kWfUwur1h7h&%BM+k%L>7Q(YFcoSNp;wcNV zMKmRf=e%D>z_*}=JQkT`naLDBI~$(8KY9E+K=S;%_yd9fwqcJ%RdxUX002ovPDHLk FV1nf2B1QlJ literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/clubs/cards_clubs_a.png b/graphics/blackjack/cards/clubs/cards_clubs_a.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c9366447f56619bc5782f337b3c3c5b71d339f GIT binary patch literal 698 zcmV;r0!96aP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00G`f zL_t(|oRyTnYU4l<#+5g?RTEaJYzW5{ewj2z#Xf|Ju&j=Ihz$twDQw}&Se>ho$4Fo? zD)KIwKe9NvIJm)h(d}2@Nq}L9`^<%IWF)ba>20@#~x4-^RqNNC4z)`3H^3r!fcHY zXw1%$w;IZ6t|y?Z=#RVsXoR`ApigX07*qoM6N<$f(hFyng9R* literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/clubs/cards_clubs_j.png b/graphics/blackjack/cards/clubs/cards_clubs_j.png new file mode 100644 index 0000000000000000000000000000000000000000..3c95b30edd80d0bfcda0db0c8b3f950b5f649c27 GIT binary patch literal 796 zcmV+%1LOROP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00KZs zL_t(|oL!W`YU3~vhSN9L@g>NRLj$3wJWLl#(1ISq3uTZY51~U4WAMR;Vk+>%I3R)p zewUq*RI=@y%&*TgW6k{DY~Wk`+C1&Q1#GHA{4cK0o64LJ-_2LB5G_%aj&JWVvT*W9 zRXVlqn25hGg|O}*gfXW~;B$pXArKRBqb*P+ISBb(;l?@%TqUP~mkJJ&;}wpn$ZzZS zsmgU<+H9ayF@}uMjO=r#F%n)PeZ)(Qna~)l`SbXe=tEFB%Ow%IWue!Sr_(|#?KX_6 z3v`JeUWhm6LTD!9M7m8mGz++rAIOJP(T~nMUe8OXeG`aMiz8ubkh-$Z^sse z_~1q+>OMVUgSpdom}$Bbq5>9{%hJ{>&3Ez*5ewexy0+BcZE$E=IQxqmyd~^{S{)1Z zOsd8a#|~&+l3*3wxCLC)Dml~)&aD`BZc-^J!2)hwv7T9w9Hb_tcVVsP9zcmelUlYE zW^y|>NDhKtJCR*Ci{OBwx1U|BsGH>#O+B^L)#rf#`gCK9oj$=q0A|zI`oZ0mCh)x~ za~Y^^cy{MSWx^p~(;Hn6eI}MIHat3KeIbkk)pM$`ZTfuc3(4Sl4z0?!&cOsDLFHR7 zllNgzWrK`Np2t%<&A}j1d=MpGA4KGp#rg-kkw#bI5%C0xXF#BWL^~1w3$=UGJ`%mBh4zT(8 ayZ8qi6TNQQ#Pfjw0000n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00J;c zL_t(|oL!Vbs^c&WhVyPP&Zampiw4T9dYQK=S>zC14912WB8wsv$Rdk}i6MuXf(b78 zE+Z-FqkRe`<@Xm!cJ!wx)LZ;2KI*qnMR|%ZaX%JiYv}q85>`B5Da-5M7)iLWAgi`N zZ-nl*JeKZ4?0`9z<}3sXLAex`FF7vgD-ph{s6VATk?^T%b>B~5vCHeQ%vR2{rTsde0RzY((;KORaR%Lk z&XspNw)9BwN*yf7dl_OnxG>SEd526aZJ$@ATLSZAn~$Uv(s-obIqwsMNH3p|{BNuB z^g>elIb(a^xX;*b2C{n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00K8j zL_t(|oL!W`YU3~vhSN9L$t6hOLjz$?eVFYfxS)sd!eV6TLukQ>5%{1(5FY5mv|xf4 z{4P5)3MK7;W9QeWnUSU6yB&OqAG?R+mw?^=wA{tV<8JR<|LQ)2h2@H|QrADrB82a8 zucJOZ32{Xhl~`Gi*rb2s>I;ena2r}uS6*+PAwtkO00)G z$1!2_Msu|7q4;R#=wqnF61dk6hl1Ux1kT72iF~I-q9no~f)YGF-vpzbhB?hTrNmnm zOELwEhp81}H9RMJ>^tNYNm9gwhZWJFdvP}*HJfA^HHQeHSp)hoYn9qpFd5NmAH7K! zzyubOc1jt6Q&<*?5=5|VE6|$(>yd@m!SKl;+A`S!ER>9f`2Pmh=EA~YqDg7n-sfP+ zvH&>bl-~aF3XBTeVV;p|VZcQ4)_LI;v3Z>{CLxx17#gBXyt)B&Z!P6*!zTBAHubF! z#C>FgDUZ4@P3b$}lt@NbdkOa4Ai#mA2=U_DU?wM3DNmYXSx5P4hTiDzOH6!(0yL)X ztp;9Jgz=Mb{KEMRxjRD6a$nDwJKy}`@pmP}1p-8VP{Qk3=Nmr=A+`|2--xr?LWo$2 ztJ*>dzDW+TMKui893N~8?Sr?cR_PQFH>h7u%g6EF+3?-_4`06yu>1bG_zxnWylGD- R2V(#L002ovPDHLkV1jE(Vb%Zu literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/diamonds/cards_diamonds_10.png b/graphics/blackjack/cards/diamonds/cards_diamonds_10.png new file mode 100644 index 0000000000000000000000000000000000000000..d509141611452c38bf419cd94d707f22e3d85034 GIT binary patch literal 654 zcmV;90&)F`P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00FW| zL_t(|oVAp{PQx$|#={$6FI~F$R4X2s$N&Qq$;g7G%6SbUp=6C!sUCQ#3M3f(P~0EW zre#E&viS2aXZw7gt4f{4b#(=2p(<^c0jAPE3_gs$1PXSV?UV+Zf3+5ckmh#|QA5z+b>BJUDMQvd(}07*qoM6N<$f)ODUDF6Tf literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/diamonds/cards_diamonds_2.png b/graphics/blackjack/cards/diamonds/cards_diamonds_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8b16119f646d2cb8374e0324ddb7cb97e60cabf7 GIT binary patch literal 647 zcmV;20(kw2P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00FB> zL_t(|oVAp(PQx$|hSN8|UdqtLR;_qoA_E;dk&G-@s*=|r5^~m9m2v|wRe=P9AByvx zX_GP{Zu9TY=gaTA6opvCO|jC85QQ}J(5jHG^}Ra>3TA*Q@4p&@LJJ-kX(vsD_rQq; z=o8`GFlqt-rj*nu@C1|qBN4+iNXjvQOgYkqW@MyWoDfoT5t8e`f-j}gE%Q)U-|`m% zFy;g#v*1El9pk6h;Y@^xC!)7H6ZR>kfLMo29KSRv^^P60O*mLwAFKO7#IZ34heA_5 zSR%4;tWiirw{0HNk*2C*A5gH{rq%@PS?KPX3K+;l`Cjdku#YDu%80_-M;)Wc#3q8+ z#28N^6Cz@#Y;Y}^&@Vz5CDLn<;DQw5@SN7l(%S}kSR1uQixgGrI%Qh#lV>upA3-|b zGr)dyiaQX2>}e3xk@oCqr&G`BaCsMghWX1SOZEKa^iPxgYkyF9pNWC*&dbF$*E%@~n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E#$ zL_t(|oVAp_Zi6ro$H^PiUb1BIDHa|&m7y6j6~-<_Lhu?zs?3UogonOV)JpB(hw9mP zNgy4o-h%w+$K7!s&N8vGyKDn16PeUY1C`0TwHE5Lp`Zuv8GF;3h_O#^+Zhs}hZzzu z_?`&w6M@e;I@Q*akKFq)60Nr*MH#&0C>$goDT)&3G$iE#ut+r$D^oZB@)yFREeRis z<*$T+5WXz93*iEO5v&0w%yV?%L+O~9z9A{)fhuMy*BCrc#e+-4ROzNhp(-9tB3PJ8 z6e7{>tEc!$RTQCjD42a!LIRE?boW)^31A}sC=O9Lh7%EaK;iwf3_&ol3tsF(2q(dW z2skM_JWC?rRS2z6laPekNg8Kt~*0v{r>d`5h zKm@p^PNa!6mzs7EXBOPGFVu!*=VD1=*||vk|9m8~mS(+f=_Stk2(%476T_CbVFpHe z;En2eU*<%_6-$5}$VZNAl7M-T6lIX?V&t7uyt6{yWD4;6U(l(z-Tlq_b`aU^b@2mT Wz57!-WPt<#0000n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E*& zL_t(|oVAp(PQ)+_hRYj}EG)OgB5DREI&cFM?Z`r;Q~MfJLe1Lfr1QW_A&_9mL*dxD zqdi81mo|UDChl*$Ri##OSzW*?RHf}Qz*O4z_2^GQf(_wNp1)X2LXY79{IsVl2{j&x zfa8kj5f8uwA|FLJb0+*0X4xa4=2IY)TU0{tH-Xx9pg8UEDcZ@0;7m#J;mTPeRw+IVOs* zZ%N3+aNRxRSGuN2V{cP%h*FT!xsH7GzK>i1@wh5Pg-M4d=@{b*BCh1euio0QU< zDuhbZDH~dAA>dglYe>_;f{$9M-BVs0muqXI-d$O9MHU&()DOn?)092aQT&Kh@KFHq zV=&Tz1QbuB;*NADPY1|73-PBeQif&avZb)BTqgd%KRCvz5WO$MfTIv$lwml?G|&{t zG=w7&5XTikf|g;xnLVv(On4Y3nj1bPlw9grI>?%1mijzX`28)ksXCwii}l|@Rp-Bp YZ`APobid_-rvLx|07*qoM6N<$g3wS9PXGV_ literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/diamonds/cards_diamonds_5.png b/graphics/blackjack/cards/diamonds/cards_diamonds_5.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1eb58288ec37a6380778843376e50ced3b8283 GIT binary patch literal 642 zcmV-|0)737P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E{+ zL_t(|oVAp(Zo?oDhMhMkELpN}3Nk~ddT54BwZ|?+vh3H0r3kM^mdwzXidv~1c&Hv6 zNo;qldK*6<$NA^ZS;iLekZoWQEaP$>ATq8SWArUhkiByWJ4=Z|q)YN4-l7GAR0O9w0A{5IVi98XEq@`fd^aat zFw5Nu1>S!dus6bbJmHOkM5x!0!uirBV*G}vl!xe;RF$n2uE*lZMq;dFtx>3oXBCMg zj3o+zX!q4iI8qgb?<@*xUzHGnBMI$eRX73?k$)72ARPULh}@&_{#km@60!4+?Y#FF zmI&stQ+BxKM8JtLDNy4O1#LNF^;=jA72nqKdMm{iEfTR(-3p0K6g=aW{IFb`jsWtb z71V(UBu_1i9jR`fwh($2?EPKn8Rjn+EQR^Y1>*nvBZe_&A{yGnULT?#vhQdZCc`7q z;1I-Cp8&2C)zP@nH0b_1FQ%s)Ic`vno^t4(r&|WfAw`;5##faB{Qee9%GR^LS^gbZ cw*FoG05(qhxnGU3Q2+n{07*qoM6N<$f`h>gbpQYW literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/diamonds/cards_diamonds_6.png b/graphics/blackjack/cards/diamonds/cards_diamonds_6.png new file mode 100644 index 0000000000000000000000000000000000000000..62b2ed1041f142b580602233d15f11e6b2d55fcd GIT binary patch literal 645 zcmV;00($+4P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00F5< zL_t(|oVAp(PQx$|hQk|RFEDiR2`e6$$UuiqBqIxvs^&Es3E69{O1XiTLLkB5hvIza zwrLp=x3vEK#lGC#pQ=)4aa~=(S*S|ed4Q>O-}|vY1_`#tsqDX6n~C62^X_JXOw{PN zz(Bw;6C1>d56ORki7oO~HR4W)!x@2o^DTikIO?6;Vw5gPXvqU$mMUjD4|DM@e<6@! zPGBw;o(KmieR+sSA|`qwc?X4X&-n;UZ7jt88(3+VTrumqxOTMOHxH4CeP`D_30?E( zm?*-&B_R{TUH6n9>6#{ukpy?wwZOnigyFtxP=G?zAI&lgtMo2Jok)25Y*SK&SR_=7 zl+wE@gi16i3tDR-V5^ihq-kKGk6NkqOI{n7duyX!-&k`)B{H08KN!35KG#e~sYlc_ zRRTyo1|t(lK&fd|Jdy5L(*g3#LOk_F+A!~2E-B1Amx=$M51CV6h)vn0;TIx|0!)Et zom?<+l40^1WY%#MyPy|Gp|~MTw>uEei5tS$s f{&i5*<>%rDj|BWdwv#n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E;( zL_t(|oVAp(PQx$|hSN8|mQa^2KGli`CNj{W6UoSer7C$1B2~^BD^fl1QWZ!r_@Ox8 zxouiT#7*_@FW1Z6{V57@6?eq~u0j-2&jVB;ZR?yp2MT%!;hyjJTBFb&T#$6z9)O6x z44h~PeIl$KMj#-BLrRJ_BLQUyBN1&*VF&z?h*Jt(j+%1_$VEu5L&L08BIcoP-sLYu zz?c&uH7i^Q12KL%@MpqDd?GpnnJ_OYMToV}#PkiM)En-YY5dOMd8!^g5mTdg7KNsI zGDKuys!>Qpw{D)(BTZGs-lJgFO$`KWS?C^`Dlm|V@}t@$VH=N3lo5sZ&pJktiB$|@ z6=OV#Oo)h^vcj`u0^Wqs3N;BNSTBXxy{5A=G+QrsORbjJB1M(jPH9}C)HCV1A6{D5 zGr;}m6mK8`xu;&xMw)X^J4ibV{xTOH!+dh7r7)jdBL06rD4g3f(efqk`pCr4vl-lQ z+Vumw0nirNQGK?9Bm#x(sIwc`FXS6`)X6U+Z;)1}D&=jZ@cUixZ^fn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E*& zL_t(|oVAp(Zi6rohRGY$Ub1BIDHa|&m7y6j6~-<_Lhu?zs_=@1#0`C^sFm8m57o2J zB7}}rZ^FMn+sFAoXPLN(yKDzHAu_4g0VLFxhEOxg}Z^4a=$D@P7{%st>jZ|YB?O)L0YAr6>^g)!0&&dO~tnNcek&D$hObL Y4}8x24&584SO5S307*qoM6N<$f=w0+9smFU literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/diamonds/cards_diamonds_9.png b/graphics/blackjack/cards/diamonds/cards_diamonds_9.png new file mode 100644 index 0000000000000000000000000000000000000000..698f25438b4487bd486cded6aa1113aad84b6595 GIT binary patch literal 642 zcmV-|0)737P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E{+ zL_t(|oVAp(Zo?oDhMhMkELpN}3Nk~ddT54BwZ|^CWZAD#OBJj}mV85BDr%*6;GueO zC~?xUDwFy7IL^m^6ot4Ncf|&-hA5<74^V|{TRXPrL4q!E$?I=gN5WZ@X|-P<5+#z5 z0Ec5FdPFAZV~Ih*W}-x#n6MM17>>wzipwE%Iq@kN>oZvN#j1f`E_ z0%Ni8LKq0)%Yr`>KG2R}4P?SR#}F85pNaV!l2RX1#k6UBXJ|fG4?Yodqq~-brg}7q z$iiHc5Q$;mJjE?dRfW-$VD?Q72{^Ja+&2|6kcsl6Iz-_ZPE3@6g!j)n1d)kdK(PxU zoJ1x>AgAnTE}4K=A+#b*LK0dph3H=5T$y;c+RJXM)s{-6Ql{;obZ>2}neI$)~v7ayYSrw8}jzJP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00Ejw zL_t(|oSl?GYQ!)MMbjHp0|hO-Ng&|s#H(D#hQMFsQrXSIhw7K*geHY9YBB?npXG1K zKf@rm@i}}93Y;#lUV`U(vpJy@PL6jR2f%!?KKL{AX z6l*7?_^Z%lFdz+%@AO&;!3@3{%?WO%3i!T zS6|l6`+Ic`y?+<6_5NK%c@p!JNdF_ouTCs|R(axhXZD{5lJl$ld!geB8edGCV&Q-!!-uJ>l`{ QH~;_u07*qoM6N<$f~ryu)Bpeg literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/diamonds/cards_diamonds_j.png b/graphics/blackjack/cards/diamonds/cards_diamonds_j.png new file mode 100644 index 0000000000000000000000000000000000000000..fe658e4a26206d0d4b8f3f861aa503f3fc2d0cae GIT binary patch literal 721 zcmV;?0xtcDP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00H$$ zL_t(|oLy8qiX<@%t+~O}_OdP*BlA2Rr#3#1(bmLycs+=w(axbG)94I{Qn(qCnH0{ z?e7zVTf?Dn>x@halx#X**%*nSRot6g<2M`QgY^y^qC%OvMm8V_SK-#Pd}M$U5;Y(L zEWMxvQSDY0`212MyXf1g5*XuKjU2My+4?e^QuT6N1ON?4*F+S=Uqq`d3NU6Olybqw zfC@Oia%B|Q8wPVqUXY+d-9bX?0IHT+fP}#`&;xUT=J>!aDv-1f0mv(08iEIA*8=$h zJ&VYJ38Z;p$MzOYSTY;TyEj1nMaKKC=5}vavJ@fN$yI$!=@mvHC^9yDj zf`YRzRY-d$F5zTYWr~%h3`Wxb+B!y_45eT(DH>UBF=^A3NR4n*UE`k-Yr|3X*?HC$ z&k5SB^IJZhj!>dVd@yFL&-n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00IL^ zL_t(|oMn_hit8{C#=SRqqvoklBY}tmIgOe)*9e4lJBF}RxLVj|%Y}CkrE;M|y>BEZ z#Muc!=F`vfN1Ach(Z>FCZ((E9nfPqMcP72#_b>=M`70}Si4nq4g}QtE2#v7ZfKkqk zxC0^|p%T)F`mpgaV%-C>xRS-{E4%;}o>izs@6c4|Jc=rWBxqVQ)fCue z_-eJlMGpi_^$}6RR2@OmD1)_P#LNpJy{u8JL5zM8khy54HX!HTvqOd|P!4cHzA%e( zT3j&*dO&PPtb{}H>kqbHIp z78AnSK_V%gl9H9!-y5tad+)K;Wb#k*vb*dqtqYHBd*qQrCB}0b1_+fnVh9@1dL3gT z=Qb{DuaE1%)K!VyIxi0&X*4fU{5lB6o4Cm|q>%jY$)?xYf7^Z?sC)ff{0C~wE5!M< RBPsv@002ovPDHLkV1fb9Me+au literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/diamonds/cards_diamonds_q.png b/graphics/blackjack/cards/diamonds/cards_diamonds_q.png new file mode 100644 index 0000000000000000000000000000000000000000..6cdd0238a9efa517f3fc520ca84128d13a804b79 GIT binary patch literal 728 zcmV;}0w?{6P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00I0- zL_t(|oL!VVj^i*4hCMe}x?-Uw0t~yD%dDDla*Q-_%K%1LsG2SZ$U!)j3ms~IJ+c#r zMFRi)%!eqt>u6_xx(~lI>iXf;{GsbZxSYd(gD{MG`$aObT(qz5b0J2BP`u-<5MTNv z7CrBXQ4y>Vi}(zDsY*^eELsV_;6G>iOH^ZwATu#seJiuCb<7O!F(bZKDz*;8{V@!x zm5{{YdI~|4T`S>u+Tc$bxe{hku5(gt#6-5q8daD}jN?qk!ke&2B?e(tQfEqQCT86f zCMhu$BBq!HmxV&WzcqnNrLx7Xykb(b%r50u)DYsBi3vH7Q;8HE<)ErjX;Nhkr_hAh z`y6F0F|r{2B+9atEUhj!q%L(3qc38C5KE;AJs<>HQ7c4B=G`cbua>#87 z-8m|=b;-Qf-U!EEPu(TdVXV>CGMDTlgj5U}!u=uckPi%2h*Ow_uOVl}_)CmoTJulu zs7^oIH?ELS&vmxN?vJU>wygoKP|)x~I30(g3 zj(Bdva%f65frPYFVYnFp=h4{8Fez)25zWX2huLE`OpNoHEhc)Tz5dduf0000< KMNUMnLSTZAJ3&YQ literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/hearts/cards_hearts_10.png b/graphics/blackjack/cards/hearts/cards_hearts_10.png new file mode 100644 index 0000000000000000000000000000000000000000..31dce19311b902cb154434d1c210b8a4b78ae6be GIT binary patch literal 645 zcmV;00($+4P)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00F5< zL_t(|oTZd8Z-X!ph3P-29jTeIWHMKdlo@)0xhOGn5*y}5Zv6Lq=W`OsR4F$g@%XS0 z-+L5=Sk!y*rWPd%sr{@@Wg+cwwL`SIQ1GGF0WRK8zdmXd2B*6 z7YOVc<^+sb@F3i1%r1`2ooEfdVWO)t;m))Km}`@Xb~}>rwL^pmcWw{vh7i$i{lO+- z=Mpg&=*0GCxV>VoEef;;FN#9L1eeKzo9_3YOiWwmjS-nx0f-d=A``-(Q&xB{nHYbB z&?Rb8CBe2*h{HGCm##{k%EMZhYxGl@I<@QeRlG1==8)P;kL-3wE+OL00000NkvXXu0mjf#T67s literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/hearts/cards_hearts_2.png b/graphics/blackjack/cards/hearts/cards_hearts_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7e64314ea1de37f60f5c52bbadfa51b78b4938eb GIT binary patch literal 636 zcmV-?0)zdDP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E#$ zL_t(|oTZdaZ^AGPhRZ*g!?c|nsc@cx#JQc-o>xJ8W~Ajj6v*G7KLWIzCe63JdE&V7 z>t-3u;w4+ySwLorVG`eYX1YF}yL*r@1Z;#lU4~eY&|^eFLet}!i5Sr^5ip3*wV|{^ zAS!Xds5uZz&Ov8`VWJIa_!i!9Yq zh_@r|T9d$cXi^d?B{WpbjJ;y=e{NNPq9`Ze-7n z)uS)khGNn={yIDD9C^h4xBGu2V$^SmT`$wnlhxJ9mmmW}7H@Q38f@6geGKJFy`DyD zjYg*dQLlP!BnNGjX*yW;tXA5lDyn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00Esz zL_t(|oTZdaZ-X!lhUq_8QfWPd1U*lw)HBQq=OI4Mr2)=EY4i7I$DxIuCe@cJ=D~g& zzb1;rCO)EFvI!B%bXY|nN3!jl%i1L{F<1aePp8}9QYP}59@?^lnTWxb2@w{oPqZBX z697y&7is|HRHFlz`!1CQ8M;Uoam>?!YQ!SQs3hy?lSL)(N_?`U=Y{ z>aHCljA&wG^WH zp>u39uT(aNG(Mo8Vz0EVFDaUc4E9;@eP~&^nE}3!`oa!GAl#`I-jU`p+j=C=j>U5> zJce{NIr?|WdU8G1cz62$B%GT);o8o79X+4ZeN1q(rC%#&5A5|4%8Zej2>>Q6{!$HE zF%LNFYYazR6AzSD`Yx4aEgd#t9Wk$NFJw?!1(gZA@O87r>+bKiUk4GrelGq1qKXs~ TSLqzQ00000NkvXXu0mjf<;wwC literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/hearts/cards_hearts_4.png b/graphics/blackjack/cards/hearts/cards_hearts_4.png new file mode 100644 index 0000000000000000000000000000000000000000..9d133ee3ca8e9eef6f283cdc14c65b5fd238f659 GIT binary patch literal 629 zcmV-*0*d{KP)&000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00Egv zL_t(|oTZe(Zi6rkhUptDskEL!0?tz^^$fG%JVe8}Z35?^w0ZqGc1mealj>W3J{)8F zCrQLpd?cIfDMTW3yNYv~NIjIZUIGQ{Tuan+wLV8-0M{1bp=$@2QJ5eS4jc)A$cO-l z1c0O*09DALy{jlk=RndeXD7LcvdV2Bv?#cSPI4VKyVr@A5wQ*;*6{{`)xw&95d$8C z8I?Ntv0jKq;Ty`EA`<2jQh>VEk!bc~5WWwH1j1aJqq!r2X!iD~NjMlH)eiqT?%<>-)J$-wD41zEe=#xbnO90gVhbR)0T7W83O8koXUW9)D@2~6CNmOrBZWBr zgmY>Ns#G3#dAh@WN~u!apYp-`uwb7x_oI=WpBdnO^e5gx1Y%DcK^tk7+4f`D*|C1i zg~yPuCKtXgTTkwcIo_TAKZ)7%w|G5}VTKlFO}l<&J2(_9xuFFzj9UnRg`ke1Ph|8< zMLjLiCgc~7z6nIn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E&% zL_t(|oTZdakAg4|hVdV4YqFjp0neM7c!r(8d5yw(wS}{!+P}Z^Q4u_C;+*W;r_(QOw(I|T~P18CYEZZ6~~bP%ouZThBz5rqN9jL&=UEOdZJ zn7|(-xDa9vfHLMNImf{xDYs}bu`P2)K2lYPhl3U$=j`DVO%t&QA{Oxmfv#arK#u`W z!uH1OLtjlqZSaH%wupqiPzo^jDiZasC*gaK2od&DpX>u6qTabv%fj9=F&F5?ju&_w zG4~n;x zp>=8tcB)UCJl$YFrR=ml{^r<3)L@^Lyhp7MVH7~#8xx`JM%u)tFAJWAn{UXZZ-RE*>kTvo&r8PDr?LnU zr-9~#uj+#59BzvnJW-A395^T9rNc|aM=GOxRysO8M3Q21 literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/hearts/cards_hearts_6.png b/graphics/blackjack/cards/hearts/cards_hearts_6.png new file mode 100644 index 0000000000000000000000000000000000000000..ad72d60f17599036fbeaa109081b25b6f90a871e GIT binary patch literal 633 zcmV-<0*3vGP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00Esz zL_t(|oTZdakAg4|hVdV4>t;Pef}S@u@hm%m^BRP+Sl}$F_V4d}6a-J3IG3iw!}O&y zFHxix@e!?(MW{%p?JSx&(pBXj)fAX$dnlOd@2yXXa2_;0bVUsVCVKFv9HBJs!I>q4w7O}&XPKlKk4JR!+nq(APC zVLM|EzRM;eH~5C}b{hzLr4nEsSs?O#M~R;UB1G70ezqe*M80p&6(CNd!;Oi0*%+J6ht?}ax;1!4`L)&!_PD1(!-#=RDzyD62%n9~U-s$45| z{-u3vx2#m3H)*`Vd5T$SRbJBCdm6B>OztDsCqD=v_fcMC0ucyznk$}2JN35gXlA?Y z*%xU;I_n<{7=ngEijm{y&M{3*oDpXB~%qsCd@zjt$cnF3frX#g_fz^_B?`OQAi2 zqhNH@=aKJp7u?`N4fKgn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00E#$ zL_t(|oTZdKZ-X!phRHvu9krQ3BAF{k${c!vxrmRsi4Aj+6aW3*heJrFO1TN2AI^vG zeMu7a5O2vUdkB^2+%4jiCc5iG=;pwL^8oL(J6>GKG0|56G;R8-hlz-32bu^Eo)frr z+%f?mg!4x}X#_ate2SFlYL5>@j8ek69g;-UYAZd|TKaI=txqh)r!0esWxPOO*RUjD zz<@hp2V)LlC}yHG_=X8~8wq=+5@4=HB+C6jiLV19MA&oL+8aVdxp!^HiGyWgnV=hM z&TxChTuV&Q8B!Dzg%A=ZChRz`KZO|g!W*L^u?A3U0#qcFL8Yv5t%VqVmC94h>5LOy zsg-KKX`R|FcdFY>o^DW2DR|XKh!HNnq9%Rtto0r$s7T9whPGe= zpo(_TTmyX~NA=MSI}pFHZ`ch!_Cn6$KGJC2RL4&1*kvs$e0H{a_WtVe@1T$@BP0000JP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00Ejw zL_t(|oTZdOkAg4|h4CM3YqFjp0neM7c!r(8d5M&>+QNBBwSRwSIu*gwCeFz|KH6vJ z4M`$a^^t6{Rf$CAc2So!ky`t^o(ly#LKCR*W_?bC^C0P=YkHVa7y$($9JnC#0Fl5S zD`EsF^Fa8rAfk0h(kYGsYxiYt>6BCy?4gzHu2?4+9C`M?{D)*Sa$ggoyfJI~|0h3B*#M8#`U$@rt_F zD9{2ou#f8BS>(d+DL%1lg2F_abC;+D4Zdr|@;M#p~>E)?WvaynZhJ0Il*9dQVv8 Q?*IS*07*qoM6N<$f^${~{{R30 literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/hearts/cards_hearts_9.png b/graphics/blackjack/cards/hearts/cards_hearts_9.png new file mode 100644 index 0000000000000000000000000000000000000000..b41f94afc1e364b6f9e2beadd011c1d90281571e GIT binary patch literal 634 zcmV-=0)_pFP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00Ev! zL_t(|oTZdMZ-X!p#pySw9jTc?g3Og8Wrm($E=tT?V#D0XiNAjDk3&hOO1&w5{IFkq z_sBB!P_Nlb@lYz$rC-&UXWH6$vrD1iXXu!kuRfMUgb11*hHiih3NxTUM1a7;0FVg$ zLBbdlF$2^k6S1y{=mU~;N)W*NU0r%QC0CVr=(YG5i@Q&>!%o*l#6$gqK-aJ)V8Vi5 z!cE2;;?yieYw!&dU6lxTrY*qSnnbkwiG+^>B1E`zdvbS#h<5K!mW6|3VlB{(9nWxo z#oSsH=nUBug+>S|lLR*}>vtjMz3|4UL~H=mh5(faWpGk9xYj~U-%6D^YPw*-wpyvv zC#`c=u~U88miZRvDQBnl_*D)u(ty1+av!bk<3#|ukK>n2AOh)5Tg4OUmfjvGn%SxO z?TfUbTy>8AU9s-mhET`cbI52Y;(yVvTRh*YlS4@CJDx@?} zPWY%@6vFTD0Vk>pnosG2cp0FU3G%r_cT_q#?UTzwrtmr0>N)!_k6#CsJ%28K07yI& Ui&BOAyZ`_I07*qoM6N<$f~iXvYybcN literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/hearts/cards_hearts_a.png b/graphics/blackjack/cards/hearts/cards_hearts_a.png new file mode 100644 index 0000000000000000000000000000000000000000..e138bca7fcb603d1017ea03293976e2147b8c663 GIT binary patch literal 677 zcmV;W0$TlvP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GHK zL_t(|oSl?SZ=^5`hUq_8AkvX5xlMh#UgGn8?{loQy1v zn2Y;Gz?cDX+)*S*3V?ed$BiCHkhe_#N@PicS9eZK)X%jLcxyZpA5^ep0nWoDm8y*t zD>AVjg@|D~5PnA_U^)`<9|V}75aU9mGEfrAf`xDoPu=RXc8r_#VB&HW2fsOY9%b&W zVFv|Ia|c_pwT82dqwibOqgdN{tpoPc8O#i59X&Xp07{VKg05wN2~T(ZZ#cIS^!S3G zfN8s>AD~zI3mjE3N~Nit*>UYCww}e+mZpf=0D9Vl_KMuodDec6tt}KaZXKh5Krm?` zcp$Zb^J~}Xo)}|z$tEd`pAbN?yjH4X(_eOYX}j0iY;ze0o$od|Ec4rlVVU1X_#-hL ziTHoS{ac9=Z(k}0+IiXJ?;KPPqzc*ffWUINg>~1dTTI*o?Y!t^Q9}+CgtNS2Rg~%_ zzUNhQMTzO8(tR|iT8Q|rMY6Et-^ynDI92st`*roS|2ovw@pJJ9&t(^{1Do>+00000 LNkvXXu0mjfv-2k+ literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/hearts/cards_hearts_j.png b/graphics/blackjack/cards/hearts/cards_hearts_j.png new file mode 100644 index 0000000000000000000000000000000000000000..e31317ce43d741fab6b451188cf15156024e8c1f GIT binary patch literal 788 zcmV+v1MB>WP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00KBk zL_t(|oL!W=ZsRZzMV&v`k%**@0Xwz8K&}am#bT=%425i`SX63-wC78*z^3s=-Sh9p=!6aq05M8yM9B@ZOEjl>}^nX^>6h$(c=NOxrRfP>v&#&)X7DsEY_m6 zPoI@KhqQP9F7C}0!jKI1&lf^VDYD61B8+FDH__+aL}Kzcawj^8dw0>1cvMQtrA0O} zK6w}xXhz+jmMP1l0qW<;OY%{O=~3W}>@9aJJiS}9bleN=cb+0~;X+#M?lsXuxl-SZ z*dCEc01MN8^7V}45%q$|f)1vx1NO%t6$KW~daoKCkUA-5#X>!zsA)&L4sf255Cpt% z2{eg0dWaE}nn_-(RwPq|3Di7OJ+crzP_)8a%efwV01*Xj#dL#mM0Ks2=z-816=l_p zQBZ(Rhx^V8?8f*LgFSluU7s5S=u^k0(B6Xr3CyN{s~dF`20{0t%%#D4**iQ>A`^;$ zmfo7W=`%6i(88lrK^MX*5ItM%{L<&HPdqdRz4Rh?o#U^Kh!nZ&W%61!qHK_jljrf2 zN^>xX=st-O51)kNm8L|H9bV((z^lDw;RR1Y$Fm9)%C2kFahHd6CxWY1dYg9r=Vims+rRq$b%52+&&7Yk<`xT} Spdu~+0000WdP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00J>d zL_t(|oLyAGZlf>|rGKynYjaMdre|anpDiZLJwil1Zi9_-Ozq+?X%D?`zjJ47vPv=t zfu5gd-k5n5g}94f#na|4L{UE5n|NCnE$-ZA<*--ihUs_0SB=W+mz%`CLMM|R}M_#2g_Q(|0VDy+C?8rMAOafB0nrnn0;&L)jsOW!18DF{L*Ol@Au?dgKw^v) zr>7lCqhzIhr5K4M;?gChMzI9+I@XYSF_dB?3UOkWdI9K04+&!FeF!ka+%_xO`kJeR z8G;!bAf{HVR65c;PUuM?1427W5+{WS-g9$mrlKdR?Jvj-uRNkx5!?j3%%~-aYTOhu z;A?5HsburG^W zt~tmji=&n*G~d~}>vCOYHypCe!}hS{9FNWxkKTW}|2v4{@pthL@X;0+=*F{n00000 LNkvXXu0mjfsDw%G literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/hearts/cards_hearts_q.png b/graphics/blackjack/cards/hearts/cards_hearts_q.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d6eb0bd49f686e2a60f1be86817920905a6752 GIT binary patch literal 782 zcmV+p1M&QcP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00J^e zL_t(|oL!W`ZXz)ZhUpt@m}oc`iS`_M)SR<1x`aBFumoMBStO;+Loc+a(+*$T)3 z#Gfzr@5E*{QxEIc>}C0|)NH;=ckAnQHji<<#Gge%I${v&_?^ZT6M4irZ|1PWGYLl| zfr*S+gdP4T5Fd#nqFV`(-5V3zOeAL^REYHMR*AEaVTlp9^Wx*{_i}PeUre-_cK3Hq zon5DNy`_X$2nRWC4lyFwO(BNdHM9@tb0MttVbcPlDMYt0O+b$!Yl*RM7d8jogdAKU zk|VDt94wyJOtjcgnHT`_NeB;~g@FYjXup{RElyqI8#!V_$nQ-D$pX3 zL(?GTLWdss)~WCcvA#40JrgM`h8n;CRW~Sk+X_tIV{OLK=yK}=kPoBLo3*@4ZO4rug~i*wUAS_E^jOAdh1ZFe~3sI zPCXRw2yW%E^w=18=UAHk9HrO4vkc5J!3X$GvOk|=0 zO$8I%T)gb493j%{Gz|1S5+iOWv)kp8eLPRLdY=84$A1Skd;Yul2l%iBqDmAv(EtDd M07*qoM6N<$fn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00Heu zL_t(|oTZepY8){ThSzV9QHq6JwK^7eTihB9DUC2V-CekBr^b-p3qgh8Uc!ahbjD!t zb>avM(Q~A5nFFEM$c#qjZm&t){w)fa#E0TcP67&1hojh6h0xtbcScie zw8liRuC~6%*Kw=^COYrVN9!7`trtY>t+SY@!(Z=RO?z;n(KGM8;60eI4pM>%q4iP- zpiiRrC4Nj*^pZ|l0Z0&3Mh8u*L&_kzTp5ValOSRe?;s4uF=6l;-W-VN0ZNlJVZs7_ z0cLD65qA%?$0yro!d|@MdbqzF`7ZJI^`BuFl=_TF(xd#f{-%_=c`Qd(ofE?Ylp_h$ zIb+wa!+__2-H>9=7*D6%VWMY(13;ui+`X+~&cyEAnDr9ZqRqsWS*xoG#JtUfl4|?3 zkn?uIguhVRm*=)^7gb7V`%!%ve%|65#wJw?_4UiPl@&m$RCliY`u$eoF|(fau+X;) z8bO{Q?5P9d3CNmSo>2s{rk$s??+<<9Hq=L*qua^j&h2rk-`oBF5RqQRA0e8z-cpG; z?PwD2EzNOcldv1m1bUS{feEyUPhPN@SbCVDTMk5ksv_BvNwQ+HK}pCYJVD_OpM5e( vu49GMr=`@Ar|{I-aO(ZD>E8j0)8EBE6D_a}>3F~+00000NkvXXu0mjfw46v! literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/spades/cards_spades_2.png b/graphics/blackjack/cards/spades/cards_spades_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9f43389625e4c89c34859cf8783c694162bd9471 GIT binary patch literal 700 zcmV;t0z>_YP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00H1h zL_t(|oTZe#N+dxL$HzCY+F;-&nqHR6CfE^#3#Ab>TVgw}$HZic0rE7oP_4%JHgNYqx2YO8K_4df2n55fc80M}QE7`J!)#y8(4 z!XLlVx%+j}OD*H?vp-$e8S{gX*pK{Wb#06}f5?03x;VN!$a`*36P#bYb{)k5e@l)r zIENf%O^#LwG3s1&jN5-_mqQwI)*qRR?*4|(&{r{2n4djwYFz@vOl=eLtDiTT!W6Ca!$Vsycm-vHXr=*}XCU>| z%Z?I|dP-|X7B?-;MaD4SnH*QAcPB?XqQ5%*Plz%7>s+eEix`%OQtg=Z;zJ>7@Fapr zj`;7#l#Y!2yxkqkQ7yxF&Wx4dBZlk63L;8T_4txEp<`!VlPE5R_nN9`^tuW i?H^3P4v_7CF8%^@A+bn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GuX zL_t(|oTZepYTQ5&hUGW#tP4S|(jLOy6(>W$rCAI~cMfNDY7FVU%@zxO2^U80Od#Ov zmLn`=pCg6K90{-zXaB2pq^mhjt5ILBxB02FAG3zTK06x5tWNflO8 zmI|bd79TRP({FX+Lnii&>X_OG2!}Q$99|>2cVbKcrAzi7;Q_w@7Z*Z|+lPF{CvS!D zXD{gY_n#x*W&C~lr|)}X&JoFkFMqACjWJ)I%E(>kK>q+`%nfRT^Xr$s$2{QgFfaye zYR+VR%Xk~fSM1~j}e!E313n_@&XBBGl6R& zh)>k9Re~9;DVSV6BltnbxMtpET307*qoM6N<$g4gparvLx| literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/spades/cards_spades_4.png b/graphics/blackjack/cards/spades/cards_spades_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7b41d7e99bf71fea3fd971e969cbf84a25930bbc GIT binary patch literal 693 zcmV;m0!safP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00G%a zL_t(|oTZe#N+dxL$HzCgYJ&kcnqHR840eQr3#AdfY?ZyqIuXpBq=N=u;sO~n5d=4D z78$sH4g*6MmVOQEqgQ7)xxh+hs`$-RbyfYlC}78a6bE|8piq;|z}8ivY%^`G*sZk~ z*m&OymGFsyCi?!E0Us3+DQ4n5#xTi*CSVj}R7~KL2p@n0*7?Bym@5VJ$!6_UuAW=<#A+I5{VzYrn9moJMy#+dVmvX`z)pu2;z=bi@V7jIpMdBERNPlI!j zvfN;x6+#R^aUiX>K8%G}O`TiJ(N}dQPTj(sR-ndpCX6=A$C)12Ga=%MSw272bv>&% zVEv)_-Q8cI5B)J$3X`+vWvwd!uGBW6yu7~Bm}b;UKRmScj8;%K2xl6Acmi@yz3eD0 zlJvBRn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GuX zL_t(|oTZe#O2j}Afa4oDYZ36O>=Ep)xCnx!EP{5YoaxdW*k3@VSnwq*Bz7VQUKb8o zaG%4%(t{(f;mppemuoDXYG?9gW_EryNuVdY$&T&`Br0ET$SO-zRU%d*w^c=kwe?;qAJ*cO6;e6+#GL@CH6ii%l~GtMIe z2~w4GU}B}e^P~e4Jz=6J{~(ZLlR&zL$6uoJ04e(Vhp<3@0J>2my5&9l*tc~g?BNIL z&E1icyL4}-?@iMfb4&;mHhrC58Dq{KQzumyLvs(Q3pH)gPCuH4;()#7s<%{Bjxr}h zErbYw3Wjd^t;0}=E-oIQ%RW&i?ku%=p5fpZ+31)Q~lrW|3P%|E8NVcDg YFA8e6-yVn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00G)b zL_t(|oTZe#Y8){TfY)!3QHq6JwK|S;TihB9DUC2V-6dSM+s2Uo)Tj{nC0v+IXAA~k zw;Vx`d5#n=bFk<&GNaMOd)K7!G-75yY5un;;7HyTXZlE>P>XRQ`>Ie~=WaU@I>|6b z3_?XZneYx(0z92$i0C$&fj@}Df($KUunf!)Q6*x7iU~hJGPIcASSba3W%P7aqOdx7 zsX&}`Ez~KFy*>m>&QhdPVd6;MKsb^q;V2DsuS7(E(xLrFc%U2LLY;}YyXQAPc$*1- z{z7_xcM&9)`0MI--}lCRA|%zc{JH*SjJbX&Ln5-FzlSoUnhwsdU;3W>fWPIM4$dKa z*^t2sAp)S1A?^-3%!Sx}bZ)&OT{W4wbZc`-rJgsLFxqS%mwMhTg}`&OeST`1W?3ae z=ii&p{f`^cA=D{SSX@1C8(jgUNV|3@zka{b3Sx4X3+*cKmmM c;`Dd%7eoxVHBZ2AV*mgE07*qoM6N<$g7*O~CjbBd literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/spades/cards_spades_7.png b/graphics/blackjack/cards/spades/cards_spades_7.png new file mode 100644 index 0000000000000000000000000000000000000000..396cd182153a30acc4a955a852189904e4b01ff4 GIT binary patch literal 700 zcmV;t0z>_YP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00H1h zL_t(|oTZepYTQ5&hUGWNYzP8hr9FhZD^3POO0yV}?k-%m+s2UI3t@`|zeEZncgA4w zb>awu%yXo08H3PkWM*d_>#j-RX`~%}nikRFeHJ&?op0aXGbU77GFs2KQz*wq}v#csjC3=tI*L+nzf*g3rbM96!0<|p2v7#}|A+|m284c*iE($s zF^;3pL_B?>bNl10mv0$=UHop_)|iikFcHh2o3F;0Pj_W6T^C1t17*(*vR#Oqr?#a$ z5UG^RO}J6{vZW38T&SeyQipQV2XX z+sB8dX_i%TxcJ_DZf`H?4E-Wi3iZX~w$T+ps?^!8{POKmQ<|BVenjxil2=eRh-TUW z^9AWDNCWa{P6AI=N@s>bFk+Kg5`yhVVVl*2|jG^2=;7?|O)$ z1`<#TWHrfx93+#B@Y0iGg)kGr*sLh1Dk+9_BOTKs2Ub?9<0@CnU?SF8FKgMtLuJFE i_K)`e4p1EaF8%@&o45f|ZJwV10000n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GiT zL_t(|oTZd8OYA@p$Ky9}_7wrI${xY)ii;q;QWoLa-IFt28o}Oewpj2>SV&&?c<{jM z!XW|Yb68k<5cX?0v$LnUYb=~*cP77NXJ_W0EQ1|8%ntO9L8i)KWSb&WP2=twF@O=K#wyiNg35hk$pO#m~m|uVMJ`yR=K0w~bns&}FU)z?>0e{Ce?VLkC<(2|g z2r&Q^17W@OVJgJ>*tz9`d{rgl%q`7X0cu($!f3PlH`mi@E(D&K)#LxFs^&!uH2#OV zX#ZT35B)4=3g!9Zs?r5O%(SVy{PN~n(=ih(_3&V;IgenPAVPq722xGE%qWkV)U-zS z(SG(t+E9)<$G6kt&TVL_zuWyUh>)HJx9zQMk{WE%OIM0qd{hHH5H)xTaK%U_g7~DD z1;QlCVM`296rz{jt5h)^1FT89 UW!s?6C;$Ke07*qoM6N<$g0Au^NdN!< literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/spades/cards_spades_9.png b/graphics/blackjack/cards/spades/cards_spades_9.png new file mode 100644 index 0000000000000000000000000000000000000000..de8ae590e747acc31d0ee01451b1aa51d923bce6 GIT binary patch literal 687 zcmV;g0#N;lP)XZ000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GlU zL_t(|oTZepO2j}AhI4P=tVO`9vPZDH;vxu^$8w>wG)9fL&VUC%aIBC5*VS8TXqp!2R} z%Hv9eHBJP;;)((9FhIbUb4`wc(m5uEw86l}M8Y-@0;My}n25O$K(BO`0W>YcDH)78 zjS@FRY~(gi+=NW~M#PT&gD_})!r(QW`6avqNR87!gav#9OgoN*Uq8|}j;xM^J^4hx zemHIUF8+P?QP;InXNZKFrf-XDrPTRz+6E#9>PJZ1P}9cP#b;gPIbiRp>J1i^PPxN? zW`Yesgn(afeHbyZJ~n1CM_&|?n3{!}W*|mIB$QOEmx&w|6DHh=S}k9TqL^eMP}xIu zQ9s?F5A8T)3i)igDr5!_GOfxcy}G@Tc+609JuK*ALL(R_2oWHjfLK$@GfJbzH7y}q8fD6OOvx)Y)}I}U^Q3_P{mLtjM%7` zxr1Sl!?9tagDhjcv{uB5$smW)H9SGxUA!@fn8#(*i{vTXS2pZxf3W*^fMox7@eNDB Vxrj@35fuOc002ovPDHLkV1gs3D98W+ literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/spades/cards_spades_a.png b/graphics/blackjack/cards/spades/cards_spades_a.png new file mode 100644 index 0000000000000000000000000000000000000000..7ddc2f44ebd684d5e90ea3862dea217ad903a0e7 GIT binary patch literal 677 zcmV;W0$TlvP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00GHK zL_t(|oRyS6isdj2#xplqrE%dZfvFbWU3QyS1bl}KEG`UtCl|rR2foV;gcN}}!|IO{ zCMgD1B<~UV7wNNPrR(ToKf0IkVnf%zuFZDv#f}hSPy_x#9P5T&36%0vi6?p^68b7c zN?GG%AioNcVtz0%c>p~-Hbf1wr%dX2%7VnmeNPV~Qg2z_#$5;+NeL8s1a^F|V9f%I z%c@GvCXN+^IJUyXvfhY#A$DNB6X6>ILU4$w5j!oMgtMR#nJO2oc&nI{LWwl1L*8_A z1-TNvI5_z3W<>HaddV_PwK!iuG0xR=Abw^KCxGcFkbnvp!H$I42_Qt}r}B=R4}zBy z2=H!h^#H$85;CipRO#-VIA+!f+e@Yh-iG7bcDsX>`ojA;>M^+}QNvj=4#=JNdn2SF zHEI94^K);9YUN7b@d>&@AhX|evEokQ#2Ni3~@CsFUjdMCpF z5nEf`{xl-J*=ovqPI+Ez8djMKorZSSpN0R~@eUZW6+ZLq_{HVYfk}mfNDLYV6_bvM z3eWMONlG+golWiB4`jq|1%eEA_&V8QA45mi*{AO1`gNf0{<-)E!1VNe6mR9D00000 LNkvXXu0mjfMu{Zz literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/spades/cards_spades_j.png b/graphics/blackjack/cards/spades/cards_spades_j.png new file mode 100644 index 0000000000000000000000000000000000000000..37617e985026d7db0a092dbc889f95e15b3504f3 GIT binary patch literal 772 zcmV+f1N;1mP)n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00JmU zL_t(|oMn{3isLX0hBI%l%EbpkpoOxxzDpN|Fl+ETxUl#T$Xm=|=diavfDR=GLEgm! zCI>^FVI|wcPG@y#`}d3VTe8x1@DSg+r{hCF*Pqg-ct3Q#8$z+*jqk@)a>M|ij5Vo9FoNs6uXvH=c&qij)L&ipEXI5>?T8S*b zWpsqp2tjbwRHjyWO<9H}pa}+R*CqZa=mXZSx5<-?xZNP9lXv#RX$=9H(?6ocMTxC3 zGTTZ_*LqE5yl2fJBP&}qg{f|XE>IzkQz4?>gt~Z@xG-Q@hcQ$l!QoK%WtsX~Wjvm1 z6{_2id~*wZyX!yNz9@M3f3xB1?ms=g9iaRAy7&t_$HDYB8SW(j0000n+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00JRN zL_t(|oL!VZit8{C#gg}s1W29+ibDjYZs;nE(UxTF9;J1 zKEwNFN|>2cu21FaO!kcGHA}U$sjJ5GHZb*!I-#3xtyj z24t*8cs4(y2=9$p0WWwmLMoA&O!)Qj+BCF(h*I8m8s$hkI+&9aRtRN>Up1_nsoK|? zs}Zo#4b=xHKj%{Bo<*(@I_DyuyFPPD z9>VM*1nx6x6NVrhlVgWk$%_(+lk+_U5@z)w8T(82cBTRKy11|;wnN5^AciAx6An+S{leWL6#Ck;7KfXk zNzV`W;Y5k=z{^NJ09>ZpA2X3$v9!ywc92L2=b)q!xBD#2uV=3FGRis*Sr-Ve=o~)SKvkm9cH2Do2&diQAxepLT(%8J vBaU@kj)$Yo%kyN@^X$JoejRA@{JHoC9!1EPaM!Zb00000NkvXXu0mjf)8kEV literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cards/spades/cards_spades_q.png b/graphics/blackjack/cards/spades/cards_spades_q.png new file mode 100644 index 0000000000000000000000000000000000000000..6e21310bdd5beea4179c20a20085a56c86dafbef GIT binary patch literal 763 zcmV3H=000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPn+Z z_PWVRl&An=?lgw9UlmGwH;m_m%006g_O+o+w00Cl4M?^{<47J7p00JLL zL_t(|oL!VZYAZ1i#+@6yaid~j!3$}9m!vVaL3fxmQwVa8G_Ugk^uVYX@Le1bE*AC- z@6$*{;wdcr>8JUl(d=eJzwFQEW&UNf*}m2v_PyI|W7N;s4J(BDu+pgq)Er7)|BYiNH(3zFOfhGHX$b6@=2Vg&k=&!4gSI0kaB*zJf*6Qt zM23o*Q?p{Un6brE9737a=H==>nvka@8|UOvMqVrk?RgNRF5(QKc&3UP-~y$XIH5}G zx{!V{1vUs%V7wgFRWt}e5HVK#Unv9;2m!ZK%DUcD4jNh%_$%e}feP4#R%b#Bkc$=V zeUV@`O-ZZ-?+b-VRTR|)^4iY){((2zvx%E%VwdX)IS t?|Hn>bIap-vgvvDUw(fbX!HEJ_z#;j$7$L3H=O_g002ovPDHLkV1jeES5g1~ literal 0 HcmV?d00001 diff --git a/graphics/blackjack/cursor.pal b/graphics/blackjack/cursor.pal new file mode 100644 index 000000000000..dacc6dc98b54 --- /dev/null +++ b/graphics/blackjack/cursor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +40 172 104 +168 56 0 +0 120 72 +154 148 226 +248 200 8 +136 112 208 +176 228 240 +248 192 152 +56 56 48 +80 72 120 +248 96 56 +112 88 168 +248 232 80 +248 252 248 +100 102 92 diff --git a/graphics/blackjack/cursor.png b/graphics/blackjack/cursor.png new file mode 100644 index 0000000000000000000000000000000000000000..f28e327c67220ea79e8d39c86c081bf4aa9a1c0d GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*q8HL#m#ScwddK)Mt zUg8>25}cn_Ql40p%HZzf0yIXUEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4& zeH|GXHuiJ>Nn{1`4FY^ZT!FO4nv4||3=9<>v!*=yae||x;KGI{AATH|VPRnq;8F1- z!J;5y#g7*OKmPnkNsHOA;m=c`9>yeZcNc~ZR#^`q=a#37V@SoEx04p~H5&-D2};Bz z&wMU=BFNtK;Nl578DczXH|rdKOYJy$GLxk!GfV3Pk0d8^6iaGD+@|8`bwB^zd#dyL zdzZkbKXG|?R1fKG)+pOsnK1q6iAQU*8dg4#HH>uK9{12=rcZK%+o zxLoJ+Fw^jcZjcZW0O%nXzM zcI&Ru_^5BTf8tBKInO3a?zgzio%-)+3AgB7_n04y47a!Q>xC!JePgg&ebxsLQ E0Eb&p(*OVf literal 0 HcmV?d00001 diff --git a/graphics/blackjack/digits_dealer.pal b/graphics/blackjack/digits_dealer.pal new file mode 100644 index 000000000000..581425e1fd5d --- /dev/null +++ b/graphics/blackjack/digits_dealer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +99 99 90 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/blackjack/digits_dealer.png b/graphics/blackjack/digits_dealer.png new file mode 100644 index 0000000000000000000000000000000000000000..d35107c596a1c0bdc58d234fe2ddc7fb91942818 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)g&9a5&NHwEQtTz3zOL*qnYo1Y^khGBE(QvT zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ipS0MfWKSOeI6p%p-$P(1@1gc|9@^*Lmzm)ycQ6MMG)5S5Q zVoq|x0X7NN#uf$vB|#sr8A%DHE({yuSSRqYGzRx@Fl-a|)xUC<>jcZjcZW0O%nXzM zcI&Ru_^5BTf8tBKInO3a?zgzio%-)+3AgB7_n04y47a!Q>xC!JePgg&ebxsLQ E0Eb&p(*OVf literal 0 HcmV?d00001 diff --git a/graphics/blackjack/digits_player.pal b/graphics/blackjack/digits_player.pal new file mode 100644 index 000000000000..581425e1fd5d --- /dev/null +++ b/graphics/blackjack/digits_player.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +99 99 90 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/blackjack/digits_player.png b/graphics/blackjack/digits_player.png new file mode 100644 index 0000000000000000000000000000000000000000..d35107c596a1c0bdc58d234fe2ddc7fb91942818 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)g&9a5&NHwEQtTz3zOL*qnYo1Y^khGBE(QvT zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ipS0MfWKSOeI6p%p-$P(1@1gc|9@^*Lmzm)ycQ6MMG)5S5Q zVoq|x0X7NN#uf$vB|#sr8A%DHE({yuSSRqYGzRx@Fl-a|)xUC<>jcZjcZW0O%nXzM zcI&Ru_^5BTf8tBKInO3a?zgzio%-)+3AgB7_n04y47a!Q>xC!JePgg&ebxsLQ E0Eb&p(*OVf literal 0 HcmV?d00001 diff --git a/graphics/blackjack/facedown.png b/graphics/blackjack/facedown.png new file mode 100644 index 0000000000000000000000000000000000000000..97c012e72df1d8b91f6e2d91c25d03064480e301 GIT binary patch literal 370 zcmeAS@N?(olHy`uVBq!ia0vp^3P9|@!VDxk7i7!@QtTz3zOL*q8HGg!xns7j(f|sH zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ipSFfx&;ek(RFm-D~6;{X5u-*%m>$n4G8_4fa>sIz;s zR!=??o;Laa|4R?gKLKjmKHb*|NHHdPySsSF@oYT?quKU;8|fnwyazUoTWG#Uyo_A`Mkce4*^OUo*&$C5yA3Pts>VYm~@O1Ta JS?83{1OQ8Vkl6qL literal 0 HcmV?d00001 diff --git a/graphics/blackjack/option_1.png b/graphics/blackjack/option_1.png new file mode 100644 index 0000000000000000000000000000000000000000..17b7ff92976d17e2ae2f92eadbed5b367bf05568 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^3P5bY!VDyvno?tc6nlxMuPggYW^Pd_^`tMx0ze`0 z64!{5;QX|b^2DN426rD9pfL(%sYMFLdM1UfOCAE1aFi7IxdUa4fouk^22FV&#ggvm z>&U>cv7h@-A}f$@5a1Ky3ZymGWUR1YV5snzHRaKd6C51{7dAZk@Z-P?3k!n)kBT1& z76lP2e!K|y@#jZMTFizGf1U#MFeZ7syD)UH%6b4fd7dtgAr*7pUbx74K!Jzl!ePca z4|gzb`fnqtU~J;#z4)*2pVzeO5T>Ln`Lnop6zp#gW4~m1{%W z1g1Cp=ZPfnt~O_W_g7CwN8L!C-+0yxTkYwVuOtOLGz!=me=^Qo@r_ZXsf@Y$g*3}V zF5U=@hmQ^~t`AG~i)+^|SMqZ$^-vdNza80}o4@ty89B?ko4+I;EbDJkzFGfen({%X grHr3SJO5zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)E0ES$ld-~rfuX`<)|5v-PH=P-T-fmB!;b?qEG!HHJSu)9 zSQJF8`0*m($Dbc5X)zl%{CNu0!dedo;jus4T}CC$_Q&Y7@G>#79vlX<1tIwl80zDeH~ZI_bCdu26+XK|yO z60gLm&@S8O_k>q^`o5j(;XCVi+S{+TS_>*OwODVhIv{5=wQ8x5=Z2>fBXc^pct8Dk b{wqswb*9WOsqK@2j%M(5^>bP0l+XkKt)h`K literal 0 HcmV?d00001 diff --git a/graphics/blackjack/popup.png b/graphics/blackjack/popup.png new file mode 100644 index 0000000000000000000000000000000000000000..ffcd49c79802c481edec79a55a818626c29b5edf GIT binary patch literal 931 zcmV;U16=%xP)Flzx^*nxAA(;mS*2Iv3?IqfH*3ZTLctYp7PZPrOO zshK$|i7rU3lWvz40Drno?U1At+JN(QpA7c2atF!(hF{sf7U?mvS5cj7$NTRQ1N)ZE!b=Ji$#jZ@E5OLe`mSYq#$1U+J z!X>!0@rsDumT&-oCzu;>Hm< z0j3lyfM^i_oX8n3MyfACpV|iteHMM{fAd}-H{t#2nqJ%mzjJ}5X2h^+>UO(Ov8MVA>stNkd!F!?_yB_{{+@_{2h#um002ovPDHLk FV1oS%glYf) literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/arrow.pal b/graphics/block_stacker/arrow.pal new file mode 100644 index 000000000000..a3df3b5eb5bd --- /dev/null +++ b/graphics/block_stacker/arrow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 128 128 +248 64 64 +96 88 96 +248 32 32 +248 96 96 +88 88 88 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/block_stacker/arrow.png b/graphics/block_stacker/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..eb304bcb4b4fbb525d07d8260413a35c15e63faf GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^0zmA*!VDxI2ESSgq}WS5eO=jKGKsVCi1wFo{{#w& zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ipSB8d$9}W%)5eYvO6n-Qm0EO`b=FJcDfGQZ1yxm>?FJ=F9 z6v)Z-ba4!+n3J4vfLnq!fydFpnZb#XagJicL5IMeHL__6tqq=xrxMJVHqV$crMLG$ zO|n8jgCS1>&x)iC3>}FMvgrbBI(iNd7|Ij{Gz0>CZL?(`e6v0(YW=3rppYUBNKbL#J4kUKqH{an^LB{Ts50`ypd literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/bgblock.pal b/graphics/block_stacker/bgblock.pal new file mode 100644 index 000000000000..e58d63e84dac --- /dev/null +++ b/graphics/block_stacker/bgblock.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +239 247 247 +206 231 231 +255 231 99 +239 206 82 +165 198 214 +247 148 90 +156 165 173 +123 165 222 +231 123 74 +140 148 156 +90 140 206 +115 132 148 +115 123 140 +99 115 123 +82 90 107 +66 66 74 diff --git a/graphics/block_stacker/blockbgtiles.bin b/graphics/block_stacker/blockbgtiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..f497481b03cf4b2705d2813b2eea4eb03be7fff5 GIT binary patch literal 1280 zcmbu9)l$Py6h&8QfFi}+9SQ_@m*Vd3?(SZo(7z@PZKs4@hJmcv4|mS2dv@{=(Bbt5 zbQ0>LN5UJQAMnNC0ZG!UH~1+te*y>;#z+vsgs69f5~dQaoc!GU2qF>1NEFe;sD3PQ zD)AaWfkZ?xl0-5os_*_L&i$#Rkxqs%nPibo4yhWPzKLA&$QMSYfI>{)aQBNSMiiM6 zO264A*Y~sUFQZ%-*@J6uIgZJeECrC+@Udnf1q1{!IiS(p}O z-m0O62A6N9jdnVO=~U)j8agq5@w@3kl;8OO+25=5>!Y6m1{q?Q5k?tfoC&4VBvVW? z!z^>mv%n%tEVIHYYp(w5Y_Q1|+w8E*9{U_{$Pve!aLO6yTyV)1*AA|v8*aIC`S(2V u$dfP@W&X?yuMS?MXUW37!`B2ciRL)y0n687JIR4 z5dtoaFr1qNhq-f93g1YlHk{YEIuyLOdGF19XJ^*ZSEWXAWY+RSD#0Ga(=JNY{%NV)AY zCa6t4djwEG%7|cG8j{IwOfWNSV8M?AV5l#9B54&7eDkeH$^@swQ>BJVsk&wZ3$g7Z zK;A?)OiW-z5++djp;9>+ut6+m7=fffD=Yog1ZsG?MFgkHz2`%i2Lu=^2)_DS1O%Hz zaH!bBAC;GX;RPPHNKM-y-{C=@1@=%HFEe<7hfPvtYhZ?2@L6Ch(>wHkx|>@EOdwI- zA{7z1T8Ie(4*`Khd6QJwk6Q2qT@UlO4DcZh=R(+j&=*N9+wif6Nx~imWxmr(4m zHVy1XtibG+&)zqIsA_CNa)VksUav=l+?Ru~Vf#io( zOK^G22CmYGfIWBuR|DaS!vca|e-q(;IItc-aFwu!!Ew0auy_Ky&M_f*&i3d(lPH4# zHLw;zF0(C;GHM_kqZjJ`?t2kOu(7wn1h8sLD$kK?WF#C)6$q#ltY&-GB65xKh7jmu zktK_$6g(Zes3O;%;AiX+fB8NZYcU|;F>zFpYfsSb5xy@baJk1g;n}yhdxY z6P|s0yGLYaBatK`K<>K)zP;TemJ{eJ9^bL<68QFZk62C+%)mUfjCG#cGuCb?OSv1@ ztQD-1haO+R^5~2&UX0L==eQNutQD-mlP9n_UrsPxgW&9l@6KN=BN&^I;0+sl_lTfN zhUd6@{?=Y|n>tU}*x=|9L5B>_QSZx1awFI0$%RqI=G#0)fam(z{*R~;)@pRl`92yw zMS$nBUY23qV6AL4dGE1NMRcJ!g3c1k)-KMF}-wUISgSj`oTo7{bJUs45Pt zRHPJRw!O`HuWqZ)iZY{EINw=DDeo0UFZhn&^rUmYoS=U|1X>Hh6njCeZ*jkxps)mV zE-XvR)1WXMtX-TF>E0M>SJT_Lwwd6EewOk0G!fkM(W+|FF@H8qdT$R~>AbS-%Ds9c z?&$&q(prdt6M8fm+ZU7jj#fULOmZs(`$Vu`RnMMPAaI`P+f{mBv#vdfC2&<`ECD64 zmjwh%Jx2sC)ik$cT2^K{WfJ{5I2(eK+qKTL-0{wYe3qU35((v@t-L}?RtUeuwUNDX zd7hbITZ4dF_z26amO#Ju1d`7nzvHsRcS9j4SiN$`Buh|41oK-CFGrWZy;VNC8t=X~p`NtEqd9HoFDbb$b!TT46YifT_ ze*wXY{DNQ+pB7IXfq6v09v=c<@W8@-YL$c@7q41ZwRrf#-O<|jgaILFbW89_2%g&m z&$K7)U7no*mb{g t1R^}_g&?d!V1N8LX*@yuYfQZk!T(P^a8=&Xv?c%m002ovPDHLkV1j1j1cFJqFo zyUYKj?4OPTIa57d978JRg!UceZ8i{KIdAjlnG6?0v=^hAi9-ydN2Rj2=YQ3d>61G) zub)_ZOLn66zh;?+?>&1yY;aGpJdz$88Z7!><95J2-6u1Wo`i>8{pu#+b@N|>oA0Bu z=jJW-N*7*yV(wzm#j@MoG9Lx3uvPd_ame|R@4KTj{RPscbZ78C{GvDqL@R7mXMdT) f^jX;b@cHN5Gs0Eg-&y~2JIEuRu6{1-oD!MHYaZfQtTz3zOL*qnZ(%`Spu>`-GD;k zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplY2;V3Eaa|g;81KA8-4Vv;miY49A z*O7r?V?XzwL{=c*AiyWY^#jBIf|`yWKYny{bgWphA|fK<|Ns9WO*lYeMp8LYiZRLC z-R1vM_D@HFoXwstjv*Cu?oM*#VpimF4L({c`y$S%nDMQn%Zb11FRfo_VCWVn=P-5^Yxs2wRI1l zsWm=d%X{aJrL%)g{#BVDdk@(8SeGA|@IdEyQ={~nmGNBcDfP17g>BcUc4)Yl@`1eR M>FVdQ&MBb@00a(+PXGV_ literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/gameover.png b/graphics/block_stacker/gameover.png new file mode 100644 index 0000000000000000000000000000000000000000..634d886fc5539ee7b140549deac6a6e72e85104b GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN4}o;$pHqOCBgk0)@m& zTq8x+} zQN|>1cbET5**_fxva3B^978JRyq)6M)nXvvs@#$7{gyd``}-tr367iJm8u0bf3rMe z^X;<@-L_lhOj+B^E9(`0ycUjgS^DqVDuyW4pipjxl?$C^v;%MVcHB^Fi+jCO%ASqa zUB9pJ|(w{tK z_k@B!ZhCYewDin>IVcljr_F`IaZX8#O2G(adw5v?E@mf3la%x850y z&PQcDHPs{!1*&P5D{|hRqW<#S<=FIsnJkJgT@3eCoS(eL)uk`znO@!3{|~v{eoj!_ T`F+V;P)vEc`njxgN@xNAj?U|s literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/highlight.pal b/graphics/block_stacker/highlight.pal new file mode 100644 index 000000000000..d74cb6bee04e --- /dev/null +++ b/graphics/block_stacker/highlight.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +240 0 255 +248 32 32 +248 64 64 +248 128 128 +248 184 184 +248 248 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/block_stacker/highlight.png b/graphics/block_stacker/highlight.png new file mode 100644 index 0000000000000000000000000000000000000000..41411d1590cced57040369d0b574e82ba55b39cd GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^0ze$V!VDxIwZ5w zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*AEQ;e<&#YaB%q1(C}l&jvqgMfOOynS{-xifwGKA-tI2{ zm$H943gonSx;TbZ%vsvIo43J0!1?FWc3uHtg^dnfJQLdfh9BIvW4F@Ny{D?Cy~!+k z#{7n(eZhjZS><1UCN$RxE>}Ly>eu2O5a6u4{8!Be$Ne3bCw^r#KcuX&V&S#uTDuzy z;*Y#Mam~Rsqp3+MYxS$o2ig8A`MICswmPH@RN@srpWp0-c;TFVdQ&MBb@0AL|_KL7v# literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/keepgoing.png b/graphics/block_stacker/keepgoing.png new file mode 100644 index 0000000000000000000000000000000000000000..dfe64e7840442497533fd36cc6d521dd9352375b GIT binary patch literal 593 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN4}o;$pgL3uN!q0ENU$ zTq8x+} zQN|>1cbET5**_fxvP(T(978JRyq)5>s@Z|3O}XRsvRlk1-S3WaM@)FPdq%CMP&LzD z$C=6dRgAmK(q7!QI~6=r3xX|E^7o-%YOdtD*LT0__kA}uhQMLB-dVH zo9!b5p4i3)Cx=J@&XpGw`o9)!75f{Z^g@!;@34B{}wOw+9Ni%1U+(o5KgT{-=sS{0R9C)#DTf_gy@8x*T_Rf?}>x{13zwq{7 zmHS`kdOVs^ZgP9i8tKoQjPh@riF4?%OlzGvgNygm4Xx`*8~aq7=1rWyd@p@QF@s56 zoz33w{O{-QV`!N5ygMTy^4TT6{r}{f4m=Rlnbf9WP?6HTB(ZYihNvYi3IV1Z&a0zopr0HvSp5dZ)H literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/lives.pal b/graphics/block_stacker/lives.pal new file mode 100644 index 000000000000..7fe7761b2e6d --- /dev/null +++ b/graphics/block_stacker/lives.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +240 0 255 +248 88 80 +216 64 48 +248 224 96 +248 192 0 +64 224 112 +48 184 72 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/block_stacker/lives.png b/graphics/block_stacker/lives.png new file mode 100644 index 0000000000000000000000000000000000000000..3fead39d720fd22fa46e78074d75932d4123efb4 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRm!VDxC`x5Md6nlxMuPggYCJAP7p=W*VwLl^9 z64!{5;QX|b^2DN426rD9pfL(%sYMFLdM1UfOCAE1aFi7IxdUa4fouk^22FV&#ggvm z>&U>cv7h@-A}f$@5a1Ky`hns9kBER94hBCSB>XtQ;P9ZpV21}t6ArL_YsodB6l0RN zyUYKj?4OPTIeDHgjv*CuY)|jzJ#4_!^6>upE7#cC)C>-=#$+&3d|ARV~Dqz^4~fwGKA-tI2{ zm$H943gqneba4!+nDchhY2L#M0<7XG?+kY^e0E~~C$gbTLxKIp{;3MjAD0&SE;;e3 zAi_{Vaf#wB;ZnzUqUXf6U0v(8o8$GvHc2amM~c7HvJ@H)c4xerc~y~bg$U8?~I4&(Te)-mi+&?Lw{L#CSE+)Z6~ru-tA(0)8|65S`B;4X|+?N6K=M@ zTAp^9JvQdXw?Nl_PtE!Fb?%%tb-h!{Yct0g$HnLp-h+b^czdin`?3Vdt5?~15kB+IV|X+7j#j`!G;{tl7j?J5e$J9h(gN3n?Q1OpV{4+eP(xT6GBQ# zH3wr`v(G;B^ZCqo9@T39Z{-1N-}+gd!H=YWM+MQYkyUg@1-@yMI58>^y>(Bgx=6xa47D0yWNg?{*LAxRiM*# z6bVm2iKdwevJ}`y!ungDmSmg#pPW&n5sj(HN;F+&6}Z5SP+mw2Su@Cj8?EFcv4)2u zu~t3=G{hAa{L8q%9XpH<+v-09_36tuH(&R}I{Z{VE_{}bDcD?VFW>+C^FMR`=ri!5 zzoC>mX)ET16EDC0;w!Pdlnq(YMilz+C=pyZ+J$G&zycq#4)15eLTJ_oT$}XoU>m(0uPcTkv+m{t=Q$oc#`RK_2%hGH>6-dc4*ip z*CP=WCK!8idiut8(*hUH7IQw{5We6E>deC@r*HIDGzy{sI-Gh@+q)L)q8&Bz)dNwrB5M%kqgqmeLWV6+a@oLa%82pVkQU&H)z zlmVW^d<@>n0hLBt>^VK-W90*ZF$_d_^HmQF?86Tcu#P9)$t%e-)y$Sn#-&#A9WF zaJSK}HNKflCcnG+_U-*1=OdUD5jd938S;;#S$l8({>8=l`NhRV94!{}u><3psIhS9 z0J`GE%?;R?@O@}4^h*~;RxLk58LZ}ir9NCt{+U{c`$^*C_4(oGi=RwV3tvyc0(4>& z`Di}uE%-YhTwMHRGC5yym{ZV+FujohSk3F7K@a`*h7Sd-3FyR#ItRD{@4t3_e*XSs z@)VpL!{gZ!Q>89MH+Ufj>+StlVQRqR)YwAmJn1K|JACtV63d?X ziho~qiV0M6W4C!}RCvJo)tYI)y8Jipy9Y)aq-VvSdyA{1k8Y1H;DghyHgi{gOl8CF z_z=eKL0F!KxO5=!_cwP`=&jm~hG~Hq3!{^4+&&OUd{9&v;M$b-yl$`}IOco$_n6Aq z?Y3ghwiqk4HOU`9AnPfVW$_NW(!XtCOO&x6_61&;AhY6E)}7|TLO&(FEGoD1SOFGL zGY|;nUVsJM40oyP%21hX2MNbM)S6?x+`0HL=uX!T6D!;iLHfRz&d=ZLK&<_YkGDha zqa{b@nG@eUdXjpkRt@w?hC7Ngy%wg(lOMhL8*} zrm)3Is#~k66MiH@fKwQkoY$^JplpHfdMmHgm~aQ_uR2j|sw=+k3aK@vn3Aqen;&o}4KmXty8hv7Ja zkVz#+Y|;vK$q&x!`&s!~M4gV`rYR(6p_8QiASN<$PtHY$AF;$|u540P0YX?OPz$p zNKuedFeHJ%7MY(i30F>N1p^2~Di|tA2u@X}0K9U4vA9&NqCE%!KpiYP+Cx4dXXd$ z00>MVp0)+yKP8Z@BoJpYqhpr!0}x)`s}Lu10*PSuW|06UvQTG6OduPl>3=NG%iw|% zK_sgLzzR}%Sa-w2;lO7pK8QwMfu{T*mJsipRl@vBs6aAv`LLt}a`WO9${=Jx+_?08 zUpf?K73v>J1*4Z!&U?v`GxPiD42}J4R2=a3@jjQ4TPheGXBc&-OQF#cV%%o$HLYMA zv0(>7HboijRcDjHMN<}%mY#ubRf-z6|AyxnaD-X7hvVy^+Hl+r$ zIct46e@7`89Uu@c^@l_UQhM-!i!Z*NO#T3^cvW131>lDeM|W6TV-H^N$MebWxg18o z4~iuY0{rm!=H})b0EnJk<$5d0;lHq0k?= zz5%HjX9KN2=o=6$9mt~e2YmwqM@1~6XfN~)h&=RQ3ANB4)Tw~X@cvQg59$V_MqF*d z)E|aSUBeV=2-Y8jpD#*sJ<=nC^@okpAIRCf=t`UZKv3AV>JNmYz-`kXh@hGt?D_*; zpc@dI{s561Pq3=~;GSvmp=Q+|$hAP%Fc$p*y0U17O@Dw0vewP8=?{dX1E)=YAhb|Z ztoj2)|FPCkZ2AM7g4Zf;TJ;Bc!KRj)Reu0}(2>`wKLBUz+XtKe;E83SOj-2@K5psQ zeT)7OL^_7q^@kW;CE4|dBDmk8KN!*9sy`Tu&vt)-@xZ1(7#AEn{UL3`jvxNl%J+-@ z@S_y{jnWyjcD>cQ-9mjGh5pLOe=t{tR1XG2oc};^=0L6-Ux+VTmFL^^=gk3zc)%*v1XisZY@*nuz%mb<9KQPk?Oa6noQ(N*Mdcw@mspLOw^|?PQ z)%*t`0&Jj~|IpzWaV_}|h7;EO2a1w7Z21p>WlmwhlKnE%LN14V0~x#{W~7mt>OtBiNyli0p&m@HxuEON=m@DEoSd9w{NOGYv#UYN+~oid-aLJ4 z8p`+^a6T9w4tnM`CodO%#eE1fuv0B&3;($@F5$uHskdrGq6;Q`|H`>?Oay6dPTv9p zu+KxJp^hIPJ6L`I0F9`(iZXoZ2Gox_j)ys@$&(H1=ND3a*y>wHM=qKYWF!LUfLuNR zFC4-?p+)Q_O+Jp*oEpNUfCG2^5?oU6aHYbX-#*A|5ScMhzf`FUP*Q@^w-2cw4v|*} zN*myV2;DwNJ0bNY&8VY)^Ae(ear+<#6CkLNAKZb=YJR!6eE@z4s7#+!+JHZU!8iFK z>BoiqPksto-j-G+Y@H7e0u`pf%V%H`0l`>9>6w<@u2$c z3D*qX)o)LH$xvJ4`e`v^F!JV+3*Gkj=V?AHv}PT|T6T|6D)G`N27!QFQi)@L%GG z+OfP4(O2#=!j$;o7@|MIgQ&s}1Vw+cm?bECA?F8P@Pq4KMj^ zf8h7%4K7X6_{4dLISKX}Gh zNNxJV8SY5C{(zfd)gMd*vFHy1_qA1jFnYqKKbRC_(I3ptwCN895Zd$yj38G10Z$2= z{y^Pgomlk;a7j!5cKw0td3lTeP+T6^^oN=R+`Ji9{eejW$t_s*hd!0*7`Y2J{h<+g zMe3qee~`nHSGYxgi1Y=+!2=3D#5<}FoeSh;_{lS>FRelI|`ooSNs^ve} We2*68n`k@$0000bu000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP5WSuV6A=@8pfQ|Fuxln!-ZnflctGm`tol00rA}&f@Ti;CHIFsO?Ke=A3 zjn>wJfZFPdWJ5=I_V{yU=1MpTqM4R8?eOIBG1K;CtMk^j^JK1RhxDnmw)r}@vH~5_ zmM__#Z?ygbtZ5fzyGXX0nIbK^IandpG}U~`lD5@aDVQusPe4&7L0PN5zN)NJ3YIpq zW{JA`>Mx%wRR|%I?S{>Bl0M94vsbxPuC;YU2|0WHWx0TjWsNMiTG9@MxSDwl+!&R% ziVAQx)(f{W-Bh=8szfRZ;YJs3^C|_qhm4WiykBi=v~FH(w80_@SPLiKNRijpfD(9n zC+>H?+5G)>qno9!(HNBwl~jHRsi2o^Ya;^@$;MjwbX|H8jhC>|_Ttc?v@rSgO)o+( z8dFFm4yJ(hxAtyz{fm=OH<#jF4bzY^5MYFSwp!g*P68~tGG%Q831ELay}Q5v+s_$n z3S0a$%U?K6_f~{8k`u97t-if=wv_6nazfQXg?F$)zF)8J?|<0sD)`rnzq@mE&_Ow` z@Tb*E+^ingu$t;0Fdq@l;w|j3@9&|l*Xvs_iIQ+i0tu;x&L9EWt>iTgF3u$B_q>y;MKYO#jTYdM#^)Jh!ACyFikRSYiGOPsR2j8JWN)UeNB!ufu z_@R>!b|C!V#>n30ftG|H{CeiWG#Ed4QwAKv_`#dKTJUdTc|+=&JR;?&U!yYgdf2B2MiMB2bhm3hNa~E zpt=n{NZ|aS1su}D36JoDh2=pmk@ADv7|2I3evksYe8vy9z_E|=0}Y;xAFRL#65$8z z);T|r=*#(m#0AO^1qNNbtzQ ziq2L9AD#n%=+A$G7hT<-32}j~a8udl0cbB*#!E;`vhjzX*G10{$#Od<60ShP zfge&!vIB{2W?zQ4&JW45V}QPK zet>BN@6{20Nc1+45a9Ic;s7AN@%)3udyer#L3}3Thnyt6 z7(Wz51;!7=BmM{cAkX}8=7&$*J_doPBLrgHi>4Lh1mb+Cs*Vtd@KH~W69~L!3r8UG zUt=8-Wm|A7rk_f}v+lyc#y2MKUaq)N1o(LGsRNQD1Op&2qTLrOC7*b0DiDn@4#_bk1!R>>jQzz z-+>2gtWRKEZs^jg{=Ga`UP8&XbzZx4Q|So=PL<#ifMKp4UU>q6U*q?F-=vzo7M?&H zKV(~00(p7mG8h9tRICn@h@LUgmvg}-^!(8H{6oZ$JwLdU@9sZv zEjxZFOn?8uunvwNzLC1<^AD6B++wPk)1c=EK8@VwBGc8LAD9xr4?aOL@B=F~)BFQn zaLx~;WXAYGA8Hq_aeg>d9=w1EKhzjN7(XbK5RdQ!5W_*sI6nj(;`|Vv^Z5OTFptCe zL8B`(5q_}f@AX|#@gCP?Bfcp>JsZ)NS z|3BY<;O)PeA5IQijz#66ITxSEBXZJOO|oVzc=z>-f?gNex2}Fs7Ng<+52#;|#Q%iW zFBE|tTE7sQympiN1;4vU>K6%h4zzwzF#m(=7sZknVo?1;wLI{m`bDB6p*yT!RI%$( zsD82GS2#)iA_k49eo;n}Tc~~!;|E;7h!_IbFW3c4TE8e_{DAIH($!%6K#j@yfg~_E zKVS}u@Pj?U4@DN5JDPt8Pic%Fbg(Z+_#sFh#Q7nZMvNcA^uq{01QH_rP@&Kp;Rj-= z7(cM!&FU9q!6`pT>S*}=Nz&mH@B_`uQGTEzA z`TioqQH$Q6gdK_}L+?-W#6P(|Sulf>?=M>XwmG5qCnI@(e18((80*#q+Z1y_RHpVV{a2J!vLhJH>%?@yKt zr5HaDV{(27O9zt}KiE_C3!H%9{LrW{qD1Q#MPTk2KfvFk^@}om`H%C1IaR-~fez98 z52448@PnyCOGWs>MX*3ZV^Eh{}YZiH{yJ9h6%*=>?NSy|ZtnWGFM9^T%c8xq+R4BE08l6V>!COEL& zY3buzu(jtHhwvpMCsv2332Rxo3>I^6FtJX!%P8hh#(qTK<64rqLvg#pDrx+} zQN|>1cbET5**_fxviUq+978JRybUqzI&2^?<=~FKoTrSpoc3O14^z0ZyFk8Y!e^$} z?2702MFzRP>wo;g;51)Gnb^t+LE?3ibH(mV5sQiPpa1@ENyj44~_+ZB52l4;P+LrB{yKq_Nl}(>> zZ!$34WMyJE6jFNv_3eadWDnlEa^jc1kX-d zvFN#)rd{*d4f~nyEbL^N)Y83fy@~B4SEjR^)h5pMF2QLP7g?-@SbL;r-MG~_pIgG* z{vV{Uo~&Y!&1HN4{{U-<1s5oSG)f7o8hdTh~S+ZD=m zd)t{Ul5p1)r?rxaB*+z4@cs!To>U@?8G1!}+qw%CFy#Z(?NlrOm>Zr4h!v z|DXJUa~#$OZ&ZQZd7!U#Zi0?Y$U@Guyov8Ro*l6HR6Ln){=siI;u+svaAER36nZ^; zmfT6D#^)`zvliMf(lp+a(Inf=bd1+G=k0;>Ah*x|-)v}q+2Oj+Z;OK)K~d`I>gTe~ HDWM4fd>00( literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/winner.png b/graphics/block_stacker/winner.png new file mode 100644 index 0000000000000000000000000000000000000000..b482213486b9a954f32fbb5e6ce48864ff884a3e GIT binary patch literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN4}o5={E~D|X8+01Anh zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NS%G|m0G|-o4-Ef*C@A~@f*Ut_Ce8RUqvJu1$B!TFKOQ6im0*Gw9g%l| zqKrx2?k@kAvVS@XWLtW=IEGZrc^l%`)nXvfqcAVGR4ze&kGGwGOBf6JZxqA7M@ z$>09_zlHt(v|4}nTJN(%hkfilKGHiK7#raX{hNq6*h zWMJ6X&;2Kn705RT@CkAK!0>;5-?Y5ctisPuQAC+l;Q z6lUiy$q_GH?x>w9;^-EzHkv40T#!;0!`!EK^RZYb|Af*m<$x+t{yDxAX=`GcJ1>FVdQ&MBb@0OJZ}i~s-t literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/yes.png b/graphics/block_stacker/yes.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3e6f642d146dab57d63ea766b55ef38fcfa3a5 GIT binary patch literal 426 zcmeAS@N?(olHy`uVBq!ia0vp^3P7B|!VDz)cyd<*DfSXiUsv{*OcIP*3^mbNPk}<> zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplY2;V3Eaa|g;81KA8-4Vv;miY49A z*O7r?V?XzwL{=c*AiyWY^#jBIj*gBWKYm=ea3LZh;>3d|ARV~Dqz^4~fwGKA-tI2{ zm$H943gn#gba4!+nDchBBVUt&fa`LWZ?^dnkWH!@L?73*VJq0y8IdbZ!)`R=M4DqWta56<#^q>y~fP zxunG5^I9_K^lS#L8Ee}wy6CECZ;R5e-^Z6;E93RhP(iHL;zxy*c&$Z?M$DIok5mh8 zw(A~9mCxH#qF;N#bjfwQtcU*fzvh=`K1&M=4Vo*jWFG07SNZ>JXlnGE_bJzw_DA1i n)y#h$yuxhPt=3Kb_aE|IxveYMRC8(qC=fhd{an^LB{Ts5nA)2| literal 0 HcmV?d00001 diff --git a/graphics/block_stacker/yesno.pal b/graphics/block_stacker/yesno.pal new file mode 100644 index 000000000000..a6d69dcdaa9b --- /dev/null +++ b/graphics/block_stacker/yesno.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +240 0 255 +136 136 136 +248 248 248 +208 208 208 +88 88 88 +156 165 159 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/derby/10p.png b/graphics/derby/10p.png new file mode 100644 index 0000000000000000000000000000000000000000..47844dfff97dee452dc2aad4ab7cd06ee0775bd2 GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv_7YEDSN508f(#OzD`UHCfkNUX zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0;x@)UpaRAuZ+DmfOW8ji z1#+f(x;TbZ%;}wYk@tWChl}Sc2j2t+p_}!~iV~zZ$m{m@&TIcT&t<(;iSUmj{#^|_ zeOkXJ@U%V9j_=@P@jdAKNZz z57(}{yhZo)jl+L??z6nK3Hx)*S-QU`z9Qw%A?4K{cKBaoTk(m*;i};0Q_2jca$iLk a?_-FK_0X*}+QFLy@{XsgpUXO@geCwBqkDt^ literal 0 HcmV?d00001 diff --git a/graphics/derby/arrow-1.png b/graphics/derby/arrow-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ad90d682d4cdc72385ac96ed95de6684245c3797 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!VDx|E`RzTNU@iA`ns~eWEK$AWIWQmdOlD{ zyu>x4Bsf2yn2+B^)IMe(pdSV<4Nst3gv9NU@|l z`Z_W&Z0zU$lgJ9>8wB`-xc)zp)u6!eBY@!t1H-**TS3b4g3GmQ-vAXbCV9KN{9nrc z=_run<>}%WQZXmB|28j!0ta&h~<8GP#C25B4kLb-2*G^nm&TJ6CUbybRb2rEhp00i_>zopr0KffI A(f|Me literal 0 HcmV?d00001 diff --git a/graphics/derby/arrow-2.png b/graphics/derby/arrow-2.png new file mode 100644 index 0000000000000000000000000000000000000000..45f8fb045bd19653ad498e1429941f4134b7a51c GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!VDx|E`RzTNU@iA`ns~eWEK$Al)cdO{Q^)( zyu>x4Bsf2yn2+B^)IMe(pdSV<4Nst3gv9NU@|l z`Z_W&Z0zU$lgJ9>8wB`-xc)zp)u6!eBY@!t1H-**TS3b4g3GmQ-vAXbCV9KNFm$lW zdH^}zo-U3d6?1a?5Arf7a4;t_r!wED_wfB9(p(!mD{1wKsoQv;IplaBX4E-sw1(wh z+t;+6%N|XsyK-`hKXc zJ!j81XZJU=_nSEjwYkFVm&1ubm{=rrs9Q_w5hYjOMhUC9P;p z8=`4TJ7N^Ev^R91BXK(4iOzJPE8XZ$4|>vz-t?g_{pe3T2`WE;7&*{ntyu=Ce4@?| zW(Y$W#_$?RB8d@f&c5Qe!}EMnhEEZEgKMfY4J`wx2Bqp)CL9dn2h-_ivZOm5M^F@3Xv zDlz}zD5a zJlA)4b$#o1!U5lEPwW@sb53q8F(|AF09H0gVSxPnMalB)}ko4xpuu z0Hs%WLr<+~prw8j09}&@1tltaO6xsP?9^lg0MyrZ>2yV@dVCVb-1CbZQ9gp18#Lht z9^hKd0A%XIo*`GM$%<2z0OUXiP%FAhAyT9Om}SWIoxnFz-0Ady-bCx7)qy>e93gpYPSj?mm zOi-$l%vqMMkrq1CKo6LKtBK=`5u|Db7s;WS;UEA=eqTg+syPgeiW#-Q#$W$ zTFrmyBzhML$<7^=lQ?9>CkHyO+|e#+WvV^kJlR!um%9j1WkrXk_fj7;4#fa=TAC%s zJ>50~+{SR#rc#GWIj7p{fIoLwY4>WDg1h`dfX;)Dw_`v_o>%Z33;<-+A_M{i33CtR zZyg}5ur2xT=wJY*3qo)%2b@odkN`!){^K}=5UdB##aGkQAQvGEfdCkVk^;dfw9;!3 z2DixIA>`^Q2?ans-M09t)ngVbkI0iuG zBig747zKVik+#u;*cffp(1R5CEFkj$ZN3aV=tQ`in6*O>(54xBkVLo(;gQA4wX8-O z_*R(*NrYRI09Ofsfzy2rj2e3IF*Lpn;U&P0))N}|R-*HgtNGH$7e{&E$4v?=v_nBj zfSaS;0TANLWXJ%WETNq{B*0CD656r{JQ`Dgo9;tsM}TluS383kmLWc@3MVbJ>i{>H z8s@c48hp#B9ZhurqH~pTrtLKN769#X00sAI9#d@N@|_#ikDx*80jy5tUc9=u6YEFc z00FVY|w+ zd5xR_fR}e(utKjd2FLdeuK_~Wr9k{#{6Z5=h1R#C;09^PG0ONTc%{QPat1F-A zJrDT$@b?Tq&(Ax)2XL}+f@B`}CZ9w;-~BvKH)mrF0svbB9MJ=>g6Pe6KhMM6FQNu* zg@d*Stv>+x*ZWC;=&-MaJD0Y((J(a88~%9Jts{H;^|Of4gjzTTFyo&NkQSn&Wx%DE zLgck@KU&@Y<0PT8v`U~R>`ey9YvJC^TUxPE6Bt1D>t)oy+x|p7Pm3FB0*4R@q(Qv6 zpM6F;+O#~bjSCulVg_jtm%hDmpD)DNKK$iOw^+WKP6Hl=KTV|5g=xUwrdw{;Uc`&; zq8;uFvWK(fzW(|dZNl?N_S7~2^!5c^(g0u>5EAzlt9S8*ehbI}X1FiNH(AL8M-ML! z&nQhp9*+Ps`+^*R!UVwcb%STL>rn`E%lTe2fF7$crSbT%DVvSf<&Oho(MY)|M#K<3tQlj&jp{@!Y7f-04^odgS8LhIYmH^q5#zB!~i;}J)rx2 zHN@Gav)F``b6k0yE;NpUO#5@JR{N<3?{Ja>5JDe-ac02qr}Er#fDRszb`5)A17I)a zZ7KxFSLPwO6GkFlXF}p}l!Pqkxa0RAc7UK**o7!ypqOATh()YQ*@4~N*!_R;CU)Fi zXAiq`&zbYynYrKh-fsdzIl}at!-+sxS|sg=3X%3iifFS!2Rb5&p%bxmrVCx^Mt6G9 zlV0>Djy}ZWQ1qprMSlk1H2r}LVlW8|VJO2G&Im>_iqVW=EaOO2{&*a6g5_#el9Zop z`YB8#l}V%pB%O37GsTOkOtbbsof(Rm%wo15bI2f*xjtl(%{=ClWBChMsI!R0ek@Ub zE=yU)a#paCRjg(WYgxy7<>#3dJpKmq{n)7cn<$`=A~v&yt!$&1?d-7WZ>+-mT%!D) z?DAnZd)Ujqp#2P0!;b&=@7>uLYyATetRH;-_Wg4yrHuWQiBb-5kV72ih@QU@f1Wh* zcTr9SM->&KT)2c*O zNklVl1bg*iz5igVErkOexpZOK?veuzOggJ@%ybs8 zR>FUKGeb%wZOV~16Dj(z_~@ONUy_){n05cnUL^MFx-8dP9S4g7_AH1Fa9X|xa3zBv zfV?i(Z)yX)vw(xSI1bQMJ|x5es^Wgw6hHtL-mnoAtWw1l=KLk= zR2=_!dJLdllzRe@*IKa=X7q>>P-B(k=K$-r21{YiK?XbWWYYprfx0xx5?34R=3>Be zxq{VY_ff!_eJBG2KxI~Gm7*o7f~tj;r(hAT=n@{{1;YWA0boh8nSSX2M;SPP;GzX2 zqJV!;QV6VQE(QUhXr~~>h6*LQG71tB70mzu@`;=guGLJMCu-wL}4cn=Yn~yfWHj(E>~v){^kH9$-n+daUl(uO!_mkWRsuWe8|Q z8&g|)0lO{WR003A3{!A`?*0IHJMzF&;F%BtrX67601*YA31JGJ1ulh{0%t-1m>TiK zSsZ)dCBAYw$75=mfsi)|yF2igaKjt&67G^K7z3$PyWPuAp> zCm;R}9_m2(H{fAu<%4ocnR)Hd0yOxHCLX#YbH)O!fp|Ruyq>TWFeM3k;-zhOgpayw zjoM+cRfyLgD_CCAi12zGaC`-;OPVoW|6<#L=fUufgxAyT9C~mb;CE@fo@VZ$9vlxU zcs&7PL)LpK`131^4VrkSuro-^L{Ie%iw)a&rk#SQQ|J7U&6_;4)fgyBc@i)UUbm@N{2o%r&GJ`Q>-ORABlY-k2fPEkU z;Q790Ydj#YDSn?sJiwp(I*#$+*52C?j0f)NsTWWZfOF@9VHgke_pj}<9p0m_@9*Wm z#(vL+o14GnUjB3dOuYTkWL3e-123w)s1lV_g?;JVD_7|D+YjqNRWM`TKR!Stxa36w zOI3)Z=m%^I+m!z!(3EekTLj0C3fK+7m7WoOb34g;NT&rxJzZTResK zLsS=UWTJo<({17a{T?V4e0010hEMhn;_g8tpnO;gA>apjfHn*OXyXCsRQP^fz+&?y z$>q=QaG`zwh&{E#Y3Q*GsuJF(;Y}JB)eS@n??`u|mzGy}hf5#m-GAqO;?vP;G|?&0 zx=ujCTvZi1+>zdC%!Vo}`!{{)7o>x$I{@i6yiv$6EFGYJn0DO&3Y8YhlZC-8R z8E9+!8wi_$GBF&$Q!rrb10V$e^rqkdoFjld2mm691D^D22socYq=v_6px0=~$U1H$ zXAgV_ODdt3cQAIO^fqz|5C;U156>RpAXutWSom{FJ1Qjw-k3-I!#1WzrC`}T?!52C zEG?lB0dS`@0QWuBwAVAunWaLcBE`TRT*P>P>TJ&&_)`dgdM3c}r}1;as9c&>q(E7~ z(Z~6-LFLjk_fyap1QTEqxQNS&{#zplE5I&Uab*}4eS?MN0sz|ksCG&!Sa63zUI1vK xpO}UNUi&_-42^jCd(A!;V|{^%J@q><{s*>3KN?N!ZIb{1002ovPDHLkV1i*BI{^Ry literal 0 HcmV?d00001 diff --git a/graphics/derby/clef.pal b/graphics/derby/clef.pal new file mode 100644 index 000000000000..8a0e3f6963f5 --- /dev/null +++ b/graphics/derby/clef.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 184 248 +4 4 4 +200 128 80 +72 72 72 +200 192 192 +112 40 8 +168 96 48 +240 236 236 +128 120 112 +224 128 120 +168 160 160 +152 88 80 +176 56 40 +232 88 72 +248 156 128 +248 196 160 diff --git a/graphics/derby/clef.png b/graphics/derby/clef.png new file mode 100644 index 0000000000000000000000000000000000000000..1ccb23ea4a7268292791dc804c834d3ee5ffc2c8 GIT binary patch literal 1129 zcmV-v1eW`WP)5k z(G^qOsjk3phR6vcJ%s3qx!x4MDKsZ?8Njk|P655S9tq@(Gr+J&02iK%4YZK!etJOl!K0o*I3 z_t7bFzg*vtA%FxJeoh0X?{KzI2WSHf0FE*dOsB?NZyQfa@{Fr)zp;kyv(g8~dUz5)^F84>%C0HZ+ymGB(sQ-H}X z3}XJD@PjeI4+s?4I6ojTeeZ%FDB$YN3w}roL;-mPJktmy2G$VR=?RgA=LEg$AC158>+g0)xoO>$l7z&1avwd6gM6?p^MXn zA(ro<_<(+(43m`qX`JU6f&BNwxbonRVh?vH?@9%h9kRrTa}Kxdp?P zOIB9UjOvVSZ$i`#h$UPZ?mdEIrdk~c2!m7_vidOb0}P1T`o#}a^}2E6Fy0T134Vaz z^uxvSC;edB6Z~NO_d^W)4L{tPMXnu=!aF?Ql)oKRhY(5_S;Jwf)0`atWUi zm^Y?>U=HJa(boE*>iDe87k0IN!0KOW9erBT`r#PM5?bT~h%xFPmdH3EsK4%)4I1Rz$00000NkvXXu0mjfKn3@* literal 0 HcmV?d00001 diff --git a/graphics/derby/condition.pal b/graphics/derby/condition.pal new file mode 100644 index 000000000000..d5395cf3686b --- /dev/null +++ b/graphics/derby/condition.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +173 255 231 +236 152 99 +184 184 184 +248 217 142 +216 216 216 +255 232 160 +112 24 160 +231 231 214 +249 215 102 +226 109 123 +160 160 160 +248 203 118 +244 184 82 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/derby/condition.png b/graphics/derby/condition.png new file mode 100644 index 0000000000000000000000000000000000000000..e0919255e5255338bca19e40ec199f6c2bc965d1 GIT binary patch literal 600 zcmeAS@N?(olHy`uVBq!ia0vp^4nQ2h!VDy%C+3v_DfSXiUsv{*%mU2(OpV|8!lvI6-A0X`wFYyUrgGb4G&jvYU4_T9K~IDlH z{5W0qWe3P*5U@E|!3M};O!9Vj`M;F?(@`M1#?!?yq+-t1OB=lpJBS?rIA4;+|3jg0Yo9peH`$8I}T9XvB)i-wkpZWcl&CbtvF9#O4=yTfix&L6; zKYz1#R^jaR_Tj==#^`q%gM z;Ec%KnQOMrU9*4T9>Zq`r<(Sjz9h7}S^mJjh5nKM#qZslpPn1|U4Pr;rH#qE?Y14= zaa+ea(!O9{>C?kS^~t=t0riDINKcH=zT9?=4coT%&wRRD?tb=+na-^H$1!vAMo z)dQ#R2TFmQx(@|fx(h2Gypr2-!M0#w^@B@%_3s}tuYG#1Z_f**1EA>fboFyt=akR{ E07U5kTL1t6 literal 0 HcmV?d00001 diff --git a/graphics/derby/condition/condition-1.png b/graphics/derby/condition/condition-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc05944c8ea6a2cb3333b234d123add1410c463 GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFUyRxz9~p(G3(5 zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Hu5154e={R_$BrF8ZuZ@{apV7s1qBidoed6 zTaSR025m@>dNwc9C+hU3J<}2=Ik3(#7QT_@_c&_mfo)kp`66d2fu#>s+!_BeFzmLC Us+@D_Uj@iNp00i_>zopr0Ouo)iU0rr literal 0 HcmV?d00001 diff --git a/graphics/derby/condition/condition-2.png b/graphics/derby/condition/condition-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a171fabd5889bf708c25cd531d9fd4debe26ba40 GIT binary patch literal 404 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFUz+SeaO^`2&T- zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>)QX%-^@tfv17-Nn|(KK-1z@uL4m}A=g+VGyq@+bw|c>X z1wT%gec1tW83b$&RI`$d$^;*(21{PI4^T%^)g2fwY8~{ai=GEE?_!0lQYM7xueIrP|lpyKm!%b imoNrO`4x#=;Adcn;f$W(RUPyJHYaZfQtTz3zOL*qnFUz+B*j>}fFcay zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplY2;V3Eaa|g;8gVcL9XvzaAmUKs7 zM+SzC{oH>NS%G|m0G|-owf~>LnUTC>$BrL2`)=I0@&Cnw0*M9BpI`fVJ?&9$^@0Tp zew;4*vIFEY2-qB~U;|_^CV9KN{9nrc=_ru1!_&nvq+(8Tf&}XkCO5{CNuG?3OpO~9 ztyVs2QD}6yV!+rNQtmW?r>SX~Skt5vOD0X)-91UHg+*&du2fFW9^siWPvRaudc>;O zn3j@fX0~l!n@`$Gpp$f(CpZY-Skl|8D;(gVIw6dMv*^g1vks0TMH9I^xSW`3_x*k# z^E&f{%H&I{RP|0PsCXQlmpQX~nc`%hsMDMFOmp;Dz;tdVXO8i5#mOHoDHcwD6 jU&0tDHYaZfQtTz3zOL*qnFUz+)UT&ZUkwxz zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Hu5154e={R_$BrF8ZuZ@{apV7s1qBido+0i*WHcPvVhEUdn|EUJc{s;cGUs=5oBZZ11`?3lITN!NF(dU|mV#zyAS z($W5hRW^sj#KcTv^i7y-X12}efRmOZ55ujEk|&Nj=>;`vB;2Vj==*BoGs!das?Y|} zp6X?(?`F1n8fEI9{=}sDV9v|~X2nu!C%0-f=8AeSI!g&GeW>Ej_?Lm9^Goc$4G&ds PfxO}A>gTe~DWM4ft67H} literal 0 HcmV?d00001 diff --git a/graphics/derby/condition/condition-5.png b/graphics/derby/condition/condition-5.png new file mode 100644 index 0000000000000000000000000000000000000000..0648e007d2dc7bd2c4017df4c05f166c02287e98 GIT binary patch literal 337 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFUz+*_y<*Z2=02 zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*R}tjznPJ|W5ZuNo% z3x1p~`?3S%G6>iltY8CVF(!GtyZm3u{^=-?Q|jsB7*a7OIYEN;2$LIQjfwz=^dsd) zhbsn*{3jJOGO`pkI=fl4X5>ocb0 z*x|7tzg&J!vMsMTXV8Z9sAuysfkI5@W^(2jFMp`ynCHQ~$YjnFjRipeh%3cib$C)L P3v!pItDnm{r-UW|ME7u8 literal 0 HcmV?d00001 diff --git a/graphics/derby/countdown/countdown-1.png b/graphics/derby/countdown/countdown-1.png new file mode 100644 index 0000000000000000000000000000000000000000..99ed9656d1dcbc13f864bf7038225ce34c40c30b GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN508LM-einwQTv0ENU$ zTq8aj( zH#{_ctVsAV!Qsb`1GoHVt_4anCV9KNEQq_jZvl|A*we)^q+-t5D~4Q5h61e*ORlYa zbGc&C2J;A3X>Ion<;Bb=UAI(BFBTG-*2+4am;clD&l9uMj-8QRl6Ebd&5D0#rn*37 z%Y=LCO-A{QlQ$gvZ2auQTS*25=C!;_<~CnFp^)W!K>Y!`RzZ|-L0s|jeU4X_I@K6A z`W}$WbohUg>)KI!g`(@TPh2k*+ZpIEllhnb8BI5+XYqPGv&f5>GV Ubqf`n33M)lr>mdKI;Vst0Gjob#sB~S literal 0 HcmV?d00001 diff --git a/graphics/derby/countdown/countdown-2.png b/graphics/derby/countdown/countdown-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9619f5925aef0a1792c750777f80d3bab0d4bc9f GIT binary patch literal 429 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN508LX6@@Jv(>t1BJv( zTq8aj( zH#{_ctVsAV!Qsb`1GoHVt_4anCV9KNFm$lWdH^{WJzX3_D&{07G&C2f1RQ8!4OrE% zch4SXz6P%offp`bP~v#fvv7e_Idh(pN5AjjkX<^TS-J`vimBA{&(lZwMUrVs~PR)+n&w+|RCbQ1)6 Oj=|H_&t;ucLK6VZ|DZ7d literal 0 HcmV?d00001 diff --git a/graphics/derby/countdown/countdown-3.png b/graphics/derby/countdown/countdown-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e65b518d6df8225879d715a956d65611b82ca8b5 GIT binary patch literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN508LX6@n6}kLzKq2uG z*NBqf{Irtt#G+INcOMs^F$!g=MGD4xCWWm_9s-qcloa^617(bXYzD6eO?e>2lJ4m1 z$iT3%pZiZDE0Avx;1lAy;Lnc>4H6Fy80;|M`0-=LhX)oX5(I#fKYsnVvBCf-_v1&y z4G)bUD-wQ8aQN}#z%BooYk|^?N#5=*3>~bp9zf0sPZ!6KiaE&%4b4R=0S6jb16DQc z-Lr?8@7C$lCj%M8*qH^o&A0^St&rHl^>6t>$A9IYMF0H%pPQk5gO~Ak1J|bQlb0^o zvqx%4!r}!B7MS>oFgR9zJvURpV0H}a(uo1A!G|-KDR^-5I60pT4Ok+@#pw9TB$%P7 zLF=r@2Iu0tXKo&lxNA9AhqXySf!9m;kx3APSAmEo!?RWY58Ro`ud;vXe&O_`upvnXLc-00Cl4M??UK1szBL00BQq zL_t(|ob8jnYQr!Tg|qd6JS3YJftTQCF*tBd$j{)xd6R;`Z(-=7ypMXU_INt3+Ddp%gsEpX>_n!fV0pf%6eRcuZ<32moA__>nXTW>@rm24rUHyn} znxf8tNB|K}C2YrJ0+Jm!Y8|=)J)3Y>Agf~mDh1f$TmgV9clEpn={KwbAQC{57~l{7 d?p3Q6`T)2H*epblLs$R+002ovPDHLkV1f)0+k5~3 literal 0 HcmV?d00001 diff --git a/graphics/derby/credit.pal b/graphics/derby/credit.pal new file mode 100644 index 000000000000..a58cf4c160b5 --- /dev/null +++ b/graphics/derby/credit.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +200 255 255 +40 0 80 +255 255 255 +200 64 248 +132 0 0 +255 123 115 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/derby/credit.png b/graphics/derby/credit.png new file mode 100644 index 0000000000000000000000000000000000000000..4886fe2cc57679843394f2dd8a91fb74248bb83f GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-k!VDy{RzH{nq}WS5eO=jKG7E?($*tM4*9#~l zUg8>25}cn_Ql40p%HZzf0yIXUEVW3%SkI)eb;(1J5hVqF?m!u1Ae+IfK~o+`v7|ft zIx;Y9?C1WI$O_~e1o(uwp7{S?gCXGm|Nkc(et^^x0*Q}a^#Ro|CV9KN{9nrc=_run z;_2cTQZXmA_aHBW0ta&;^FiJerc?iRYbvS9JuEhv(jjGU#cCtCxGB@UgV|zr_>32R q49jAagjL;QzW1x&n4CE8(fZgNL7sOByqWlo_y!ab zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u3qh>`+7cc6?hkj>!LpeYZeSkfJR z9T^xl_H+M9WCijK0(?STPyGL{!4UBO|Nj#XKUx?V{#O@+bl?W=yg5KK7#Neh-CYFSp}iM585B5N{$@-%VCz)U==?o?=^3u7N9R9(=veVGIbe~jrOu0e ztt<_DYg)M1vpiT69`cCm^y^+zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>+=8q6A}_GTsQ$zNCfb5c&83j#+c;o?(%;r`=_Ho&Js@- z$B>FSb0-Dz9ai9Ro_j~Z((%M!{+$xr0(W`lK0NH?QFnvo!ImRTA4)tHsd()tkygW?nx~Z=>iIo%2=IUuvQ1q^DC0 z)QXp_inuAU`ug?kc^f(|8_w@{pS9<4<-YR!7Jf-F8?Tm|oU*+A-bKBh@8`#w*3SWT m@-KfTZGZpq_o|CE@BhY46cYQe<%1|U$d8_`elF{r5}E)d-iAK_ literal 0 HcmV?d00001 diff --git a/graphics/derby/digits_2.png b/graphics/derby/digits_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4bce03c9b3a6dd18228d0f01a147662c01d1c244 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)g&9a5&NHwEQtTz3zOL*qnFYix^%P})r~-w= zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>+=8q6A}_GTsZOn|MMRe1t8^k!NqNieLw|_N#5=*3>~bp z9zafyr;B4q#hj^=F7h5w;BfIQP?kL4@@@V~xouf1GB5Ub&-$=OxZ_SzrqWiEhx#io zsjSqm*L|$YQOlM7c&b4DuV9Xu2LxX4UC1+U-Uqc+)$7iG)X;wzYgRwo|IIqKnU~hv zuNHVRDxVb|J}P6|NM-ay)~d-f8PP^ Ut6h1C)gWJZy85}Sb4q9e0J0f-!~g&Q literal 0 HcmV?d00001 diff --git a/graphics/derby/feebas_ow.png b/graphics/derby/feebas_ow.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd932bbccb7c0b203139ec3e798049d2dd4ab71 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv_7YEDSN508LJabTcUE(E0fod% zTq8>{y)3-?EnA&5)u+W7`{#h>Savwc6VXuV3qX%a(;TcIEGZrnLEKg>#%`H`}}Z0 z4#UPvilQA&?L3ywO%99S3o$i*W7_LzU8QZqx#=|9^3~cOLVZq5*uoTgAtG#->8(0> z|M%zF3tl_3C>RE$GOp@qeB)5+?58GtYoXkMH#-C?cfNkCv2f)B?btT^a%28$#cvM& z$UV)n$@S{LG-EqMy{EfNr*knsSDwCWqZ-f8f;TIJ%J_fJlX#Vryx7(K*p_$o*M)Wd zHTd&}cbJ%FE}j#xhb?$s{lv5xvp+mFdB23`N!`~8U4Nq4+TTrG7JabfMUh>l8vp}^}QtTz3zOL*qnFW}cJ?f*%_-j|6S33}n1rCi=x>r)zuK1{puWqUD@?AHvjz;IVP7irGh;7^$fmm3uTD!Pq}hExS&`6SHYaZfQtTz3zOL*qnFR!t6lHH)tOg2+ zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*J=Ns2XIvU|Nk7MkO**c!IN7+WsFJQ?k>|NW@=jkIUb%a zjv*Cu-u4;tF(_~_w~9B|FZf@-#OV>+xmg9y)8jOfP3ALNPAtuNBP)K$M5EHZ)xlt= s-v-B|<$oN%a|le7(pu8~$K^8@cd|C?p%1&d@V!Z literal 0 HcmV?d00001 diff --git a/graphics/derby/payout/payout-2.png b/graphics/derby/payout/payout-2.png new file mode 100644 index 0000000000000000000000000000000000000000..f7eb0e77f87d64ef78e778772040e81a8207ae26 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFR!t%wO{N{sIb# zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*J=Ns2XIvU|Nk7MkO**c!IN7+WsFJQ?k>|NW@=jkIewll zjv*Cu-u7bB>+{pPMKjFQ7$`Ng^r(Zh1gkSh^#8sxQ&1#X!_1vSgJR?dDEt;Ub zAhlKGx1WHY#;Wq?srNHIf8SuS`j`+ev+oeA%_X*lwR;;XK(6t0^>bP0l+XkKa~fDr literal 0 HcmV?d00001 diff --git a/graphics/derby/payout/payout-3.png b/graphics/derby/payout/payout-3.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a0f937731c33e9ea639334b76a89e86152ff23 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFR!t#rD*$c?uK~ zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuG9WM58$Zy|Nl8iArau@f+x3t${3Tp-Cd?l%+$67asoYF z978JRyzM(E$l%DrBFJboskX#K zuMczM7e?*lFnBNTr)_*j@uXXD`id{Rd?rfD&40*{aF9)JR?(|-AP0H6`njxgN@xNA D9-&wL literal 0 HcmV?d00001 diff --git a/graphics/derby/payout/payout-4.png b/graphics/derby/payout/payout-4.png new file mode 100644 index 0000000000000000000000000000000000000000..d08db2814e3335b8fe7d549cbe9ce8460e81fb68 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFR!tb$QEN4+4e6 zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>$LyR12`)F|9=irNCY^!;K?nZGR7otcb91sGqo*&oB&T3 z$B>FSZ~G4N9x&iwW)@B`+wfg}(-iZQyQdZjad0MYzVvd$@?2>^mz BRPF!( literal 0 HcmV?d00001 diff --git a/graphics/derby/payout/payout-5.png b/graphics/derby/payout/payout-5.png new file mode 100644 index 0000000000000000000000000000000000000000..17b44e9dfaf20a19d6b97772ffdf04d8dc19a09d GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFRz?_#Ol-Dgg?K zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*J=Ns2XIvU|Nk7MkO**c!IN7+WsFJQ?k>|NW@=jkIl-PT zjv*Cu-u539JmA2=WUJlqn&Fqe(X9M4_A__ZK45k;dGta5lAE^LWsjNBf?1WDPOGi) zIJzS#(xZEQqn5+(WeYVg{N1L#?d(goq>sy<{W$v2IL5A-T{OqaX9>tjp00i_>zopr E0EjeMHYaZfQtTz3zOL*qnFRz{SRWrT%>)XG zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*J=Ns2XIvU|Nk7MkO**c!IN7+WsFJQ?k>|NW@=jkIl-PT zjv*Cu-u7=4JP^R)bd~b}Z^D1Y&uf!^J<(f#fa!zDqvz36)&}M*3-p>Ln3daj%~01x z^O~ron*UGD03#bO=ja2=@5=3dKEc|>$n#9h{vVaR;t9rVix?+VHG!Pu>FVdQ&MBb@ E08~a+HYaZfQtTz3zOL*qnFRz?nLhlzF9#G7 zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuG9WM58$Zy|Nl8iArau@f+x3t${3Tp-Cd?l%+$67a`HS~ z978JRyzRfsdq9Ds^yOGbBJ$7kmu5{#n0E+iap3( zYU<6P%Y20UNvoJeTio&0TG9$mZuQJ<`Ro(!{a}7Ldv=Tc7v?R7hQ(hN$2olD{Ly55 g{9WZb|CqUp*gG8rzWTWTI0JI6r>mdKI;Vst0J`#IH2?qr literal 0 HcmV?d00001 diff --git a/graphics/derby/pokemon_ui/ui-1.png b/graphics/derby/pokemon_ui/ui-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6f0e45ccd962e673bc53c8e8bef84eef3e7bc370 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFRy|xV0{ww+0G{ zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*Z(K78Wb3Q1Tg$yV7PZ}D@ZwBaJhEv8=wNlByV?@|4Z3F z9R+e^JY5_^D&{07NU$E}m5>%**l?6lc=ECYkshGrB_0;XyZ3h=05TaoUHx3vIVCg! E0D~ty+W-In literal 0 HcmV?d00001 diff --git a/graphics/derby/pokemon_ui/ui-2.png b/graphics/derby/pokemon_ui/ui-2.png new file mode 100644 index 0000000000000000000000000000000000000000..966352cda9a456e95f67ad1465769b8179685a13 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFRy|nQev2Jb*&t zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplY2;V3Eaa|g;81KA8-4Vv;miY49A z*O7r?V?XzwL{=c*AiyWY_5X>i1_g#60SrGF817x$3Q~?2T&`XF2B?5B$=lt9p@UTx zHYaZfQtTz3zOL*qnFRy|wKR|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuK!PDH7GFr2w?cZz;N%{R*-VM;BxKSH$Vl9N#5=*3>~bp z9zc$=r;B4q#hl~>3D(1+64H++BosCzOkk3bZs`nnxX=}7V8g(0vWLY{?Be+~Aj3Uf L{an^LB{Ts53UEEt literal 0 HcmV?d00001 diff --git a/graphics/derby/pokemon_ui/ui-4.png b/graphics/derby/pokemon_ui/ui-4.png new file mode 100644 index 0000000000000000000000000000000000000000..3a70075e1cff7b3e819fc3ff690e7d273e0018ba GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFR!eIKRC*GZiQ# zUg8>25}cn_Ql40p%HZzf0yIXUEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4& zeH|GXHuiJ>Nn{1`4FY^ZT>qcQYEWSK5y0?+f#Ke@tsv!i!R6YuZ-5FIlf2zs7&=&G zJ%Ah~PZ!6KiaE&%60CHYaZfQtTz3zOL*qnFR!el%m2+uL6a{ zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>;Ds34GIiD0vLWUFxEaktF()}eg7vVhg!E$04HgTMCNK&3?qO;Q>uGw($Z(K{#nHNi*%V~7r>mdK II;Vst0Qq-1u>b%7 literal 0 HcmV?d00001 diff --git a/graphics/derby/pokemon_ui/ui-6.png b/graphics/derby/pokemon_ui/ui-6.png new file mode 100644 index 0000000000000000000000000000000000000000..7d68d69bc2d90876bc12c7ca369ce7b70e41233f GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFR!eStdF(W&(x8 zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>;Ds34GIiD0vLWUFxEaktF()}ef>oJOLRz^nLdL)_lZzwDkgJWIfnm=X7RNC5pj?o-p00i_>zopr E0M3Lq!2kdN literal 0 HcmV?d00001 diff --git a/graphics/derby/ponyta_ow.png b/graphics/derby/ponyta_ow.png new file mode 100644 index 0000000000000000000000000000000000000000..b2d0f57491db42318c354f1c23f41d212b8be2a9 GIT binary patch literal 741 zcmVYaz2pD@00Cl4M??UK1szBL00Id~ zL_t(|oZXbYZrd;vg}G?3U__5l!0BF~l;)z4xCuxQ(^C!jm9moUpp~+RthG20C^E>r zfZrfX(J`=qI#YzGl&By25gK~oJ>Wg0aX%e|{`18$#NB$vOSW@smNWj~HspD+RgNI? zLQB`8+yOwh%d9ZR>$UCpVFmgjB-XvZ>h2A1tUK=xde=CFLW8NTwHJrU8l)`wwy-Um z=8Oq6hrEE{c}x6x5!D4CH3~TFjR%1cOq|!B!*9npm7{V+B8e!0@xb#-DuX}gsU>(x zRZ!7t@_0U(z9&a$%syz)yIlVL>{7_Z1wTj#u7vM2m=PY>{UprTP79$XVb0B9+Y$H! zc)y}YOOT}jd0+n~x7N%Op1fYPDYi(PaCJ7&* zf!%nu7vsfsR83EzaSP1EhnK`SS>Z2o;9;4NRnwfKx(D71S2ZXU(5M&a4IJC{4Lx@C z)l&^8yRm>6E}E*}yocpy*=5by_}zDlnNQkx#_x;oz?pMGa4vtkiNe@cANGz=Zre#Z zo^7B&ccAwf17!ej*#?R-znP`eGlSJynkn_^)&@!nS}SwCy{ZkA5RNt9k7-6RUVPjf zq*jw)_;>}>M~;^yA;Hn@__AfV28eI!Ng%aUbTb8{M^1p~tMm6vei%%g{0J&ThsEO` X)@S!y?Bdkr00000NkvXXu0mjf2+8M#Q{P zLP|!Clm#W43Mp$EYT8YPPt{$u##__xGaRwW?=)OBzyH7gFYj+;VrD@~>EE4wD|O#0 AMF0Q* literal 0 HcmV?d00001 diff --git a/graphics/derby/race_bg.png b/graphics/derby/race_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..674a312ebfe2e654a8c609b92883a4d1541c67d7 GIT binary patch literal 607 zcmV-l0-*hgP)qNjxCxXpQE$tG&9;6snJ4F zz#6o3s4b!k!!TlpwB1qTtHc*GkJDT|2FG!Zr~nK6!uOccRx0FsUa*^`wq`yrhM&TE5Ms z)h;*&PM=cPST3y%H%O;VgZ}|5u3v8Vzr&@^{|p667spQK=yZS%(g&~>t=1MG{tA8u z=l9o-4zR1ZK{ffcIBR`@c1a7CY}x tW=Mnm--fu~Q)B)zx|_lP(BJ=6{{WzXDwPW4MqdB`002ovPDHLkV1n$89&-Qy literal 0 HcmV?d00001 diff --git a/graphics/derby/racetrack_bg.pal b/graphics/derby/racetrack_bg.pal new file mode 100644 index 000000000000..327821494621 --- /dev/null +++ b/graphics/derby/racetrack_bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +181 255 132 +165 214 198 +206 189 198 +115 198 165 +132 198 99 +148 148 165 +156 115 115 +41 173 115 +222 74 33 +57 140 49 +132 90 90 +82 82 107 +189 41 16 +57 82 0 +66 57 49 diff --git a/graphics/derby/rapidash_ow.png b/graphics/derby/rapidash_ow.png new file mode 100644 index 0000000000000000000000000000000000000000..5930c91c1aa2f45b0fef65cc0e15bef08147aac2 GIT binary patch literal 1060 zcmV+<1l#+GP)A@pynHF_4}HXl9%;@_N) zEF{c30stV?PUoGu1`dzT_BkJpvZ7E8aJ!opoToxr;5OV1ge$W5;c^|r zo>6bGf-|OtGJq4&x~`dDrmgAR0)B~{n3gSciYyT7lURS#<@CN9TNs z?xUmACc}v&@Nr_XX$hv94vsf5+WJ{OyzQ3y@%`fU>ix6uBg#&mN(6^(Xzvq=;C{wW zGX9u?-)5_WF(0)7GMB;cz7SbtL)g`^yy)$@l4G7uHVPv2JIEmejhO2Vx&aGRM+zm3 zB=84Py@A_;dh{3oAcV3;9OekeV}u6c3DJ7Zd`}LcX1gJWK_N0r`J}bs??gn*3b6#X zRv(xVUy1`&Et(7fsQO0yN{G!CEs)-hDx_7A7D$iwx)rdsvl|dfd_qelEJK_y*NaJ5 zc7(ky4kLFR(IkO>7+?^BVq$k4E=IOP@dCuMc5A_3JGUERR*6sSx6{MUsMY7f!aeA_>)1O<)FOl&)%a*_=*JrgMn zaCmnnIWGXntlGg)_OglO<92EtLmSFas2s9Pf-#grsULh|dTtB_q%)Tjk?Bg-P_%>! z#d&58Wlzk3np({G@o{4)9C#ednRW+lC|)q*6Ils4GwzVU)KsB@rGnWScW@X9lokyX zv({z}#jT3em;sKrNe`ZGEf+!qv5vNBZ>R1UcL0SEAOnI~SFcSwi07|7FJUB1a(#lk ztjz+8IZ8o>aesd$wLbBR*7~|ve@-rP`>Qd(f_Yw7@}LoL!hBFjjhvwIS~N(08Rj<+ eBiee2L;M9B2**<}{>ZHW0000Bf>oZ literal 0 HcmV?d00001 diff --git a/graphics/derby/rattata_ow.png b/graphics/derby/rattata_ow.png new file mode 100644 index 0000000000000000000000000000000000000000..6201ed5829f475f40c58cd2f6c2c6be50883ba45 GIT binary patch literal 443 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv_7YEDSN508LJVAnujSs(0}6?k zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NS%G|m0G|-ovuD@*2ZLv4i?>WMeCHLlM8fjwl&f2Syr3ybhC%o4-8*{p z=#nK%qLPvX1O&RKz3~C+WlZvRcVXyYmGuB}?t8j8hE&X1+P{&n$v~hj{~bf3iJDzI z|KnH22{FDtuMctQ9AJs*v0>Q5!1+*C#<97lWk!fX=1MibV|s6E%dh{DKM>FUeEGda z{4KwV`FAsJ2)lCR&f0b*v4)n$zif*hA1jMin0JGtCpAiG5lhr$G1Jr{W|PPB+^3vm zY-sz=S9(kGfanTu0KQ`UA^?)hRj_{kK=`x3k^< bV?Tp~Q|h6m3zLoly~^O}>gTe~DWM4fbQ-QB literal 0 HcmV?d00001 diff --git a/graphics/derby/selection.pal b/graphics/derby/selection.pal new file mode 100644 index 000000000000..fde1ad257503 --- /dev/null +++ b/graphics/derby/selection.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 74 57 +80 96 40 +152 208 72 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/derby/selection.png b/graphics/derby/selection.png new file mode 100644 index 0000000000000000000000000000000000000000..c09ea99751c16345b385097ff59682112182cc74 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!VDx|E`RzTNU@iA`ns~eWENu3R9?pSdOJ`^ zyu>x4Bsf2yn2+B^)IMe(pdSV<4Nst3gv9NU@|l z`Z_W&Z0zU$lgJ9>8wB`-xJG$d1|(?AxZnX&NCbGA_bv^nj4{dE-R1vM_D@HF99vHp z$B>FS$q5ITSr)P^7MdUsBE(=cg@tu$0}q>`szN{t!%59X)&ovm3AsH1j0+|xT~Tpk gtob&9=f!gahLAn%g}uJh*MTheboFyt=akR{06^D8r~m)} literal 0 HcmV?d00001 diff --git a/graphics/derby/species.png b/graphics/derby/species.png new file mode 100644 index 0000000000000000000000000000000000000000..8f99440a846d596ca7c7ebd0606c575abded4a83 GIT binary patch literal 520 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFW~46rwMzC<6+K zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*Z=>Y2XItO`~MuIkO;87SuY%@j4{dE-R1vM_D@HFY#mP* z$B>FSt&msrXTi+i*(OLzKdhX)OyS6Ai%!C`luM=M6MaGO~>BsV)j_l7UBI@#P&cq2eUz8 z*VjyL{&x?v_~y1g-e<~@S#`0oRAQ1R?}nD7w}ENB`{xT!kZ&;gd`P(C>4z&!7hX7A zZBW0#_{N<>Bf+2d+vjTwMT>opEfz2HE!KMHP_gOyrmwYP4PGJ43xfO;cK5G*ZsfiH zf4jn#W6V23BibzfeyiM2{WGS(?%uP7$9)_E_jy@9z1EkxAX)!M*RumFZD$*(PDquW zkbl5@qK@5G9_h~qxXcdla-5&>_Y8AuQNzWJKgHF*8uPDYSCx=dYOv)G@0VcH`SXu) XYlqVd%e(Wpg2LL<)z4*}Q$iB}`dqx* literal 0 HcmV?d00001 diff --git a/graphics/derby/species_name/name-feebas.png b/graphics/derby/species_name/name-feebas.png new file mode 100644 index 0000000000000000000000000000000000000000..e71e965bdff7810b30b5e493162010a5ebaf4b23 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFUxibid^Pod^^X zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuG9WM58$Zy|Nl8iArau@f+x3t${3Tp-Ch1KW&d;($Vu>Y zaSW-L^S1vW?*Ri2W<}u}HyOUkZwd%)40~nYA7SHYaZfQtTz3zOL*qnFUxiIhGYjOa}^y zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*J=Ns2XIvU|Nk7MkO**c!IN7+WsFJQ?k)@+tg;?JPL8LG zV@SoEw|y6R85B93KdNoWariF(iAzmfuaLn$XNhBN(%E%=f+v5jc%oQtuUYlcei;*Wihe3$-MVY`fhH4HbZ3UydIu4G%#M9z}|1j6ZI~=$ma;EXl el+)|ZUFQB;#P|DR-OHYaZfQtTz3zOL*qnFUxi6#w4bxC25}cn_Ql40p%HZzf0yIXUEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4& zeH|GXHuiJ>Nn{1`4FY^ZT&Mki9>7uY|NnE4LL$J)1y61Pl`$rHySp%Su*!M>Idz^c zjv*Cu-Ud4IH5l-$s&>4|E%U#A$%Qn-eGdGSO12*8I@TdSpYbHmx>u`S7S2fG+gNoV zCfPHjyjeWp{3pro6*B|be7O$-n4a>?iUkq}+r>mdKI;Vst0M{vN@Bjb+ literal 0 HcmV?d00001 diff --git a/graphics/derby/species_name/name-rattata.png b/graphics/derby/species_name/name-rattata.png new file mode 100644 index 0000000000000000000000000000000000000000..1621e4d95939fe33d6ff4b3cbf557e481a1af1c0 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qnFUxiMK%?>+yDxR zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*J=Ns2XIvU|Nk7MkO**c!IN7+WsFJQ?k@kAvVS@Xn6T6F`<*#0kSq5&UeNh)pcJnjv z^GbF2R4lrf%w$$It61&nX|)5q2N+&gFw1V8cdg-h-yXZhzFEP-2cEI;G{l}zczSx@ dkEe^pcQIbRB2aZyG3Fx3sh+NWF6*2UngC*=W9R?? literal 0 HcmV?d00001 diff --git a/graphics/flappybird/arcade-screen.bin b/graphics/flappybird/arcade-screen.bin new file mode 100644 index 0000000000000000000000000000000000000000..bf09e46100650548eaab0c7c24e45a111b1e666b GIT binary patch literal 1280 zcmZQjU{qit12U>GD6j${vjPj42C+$jEGo<@AoXk{=|Z-FZB+kg_>HEYA)bGjHCQx| ab2YJS79D0CkXi->Mhzx1AfpbX`~m>0&Rs14 literal 0 HcmV?d00001 diff --git a/graphics/flappybird/arcade-screen.pal b/graphics/flappybird/arcade-screen.pal new file mode 100644 index 000000000000..cf917c889655 --- /dev/null +++ b/graphics/flappybird/arcade-screen.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 231 115 +140 148 156 +99 115 123 +66 66 74 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/flappybird/arcade-screen.png b/graphics/flappybird/arcade-screen.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d0c58a17520359d5519600d509d3d8bd6ad3bc GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^7C_9w!VDziE-5wuDT4r?5ZArWi+iTbNiME-a`FO- z5d@PCZj%El^7nLc4B@z*d+s3b0Rs+ZhcFH08{8%v{^#+shO%7MpE8;Ak@2hTZ;mMN z$!z-(wW!gi`_jc9!8$5T*SB8oY8Bfd(s6!&lD&uJHnC^7E!00Uo>Y`u*6<|I5oEuo LtDnm{r-UW|21qzs literal 0 HcmV?d00001 diff --git a/graphics/flappybird/bottomleft.png b/graphics/flappybird/bottomleft.png new file mode 100644 index 0000000000000000000000000000000000000000..6e9061c7b3de704c9b5d85435f998e950f182dc0 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qSs0mg^c9aUz6KN$ zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Hu6v&s_e`0STwLwsJym)78&q Iol`;+0MqbT1ONa4 literal 0 HcmV?d00001 diff --git a/graphics/flappybird/butterfree-hitbox.pal b/graphics/flappybird/butterfree-hitbox.pal new file mode 100644 index 000000000000..c1e54ee9b8dd --- /dev/null +++ b/graphics/flappybird/butterfree-hitbox.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +161 0 0 +255 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/flappybird/butterfree-hitbox.png b/graphics/flappybird/butterfree-hitbox.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe9df3b6849a673293d77f4334f4002b05bbf46 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF!F{ENn ba)Lw*kT-#WQKmY#3S^q6tDnm{r-UW|aQ818 literal 0 HcmV?d00001 diff --git a/graphics/flappybird/butterfree.pal b/graphics/flappybird/butterfree.pal new file mode 100644 index 000000000000..372ba54ec183 --- /dev/null +++ b/graphics/flappybird/butterfree.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +128 0 128 +116 132 128 +144 32 16 +248 196 104 +72 74 100 +144 64 32 +248 128 72 +180 202 200 +52 54 72 +176 180 192 +48 12 4 +92 120 124 +248 120 80 +236 240 236 +124 172 148 +228 86 48 diff --git a/graphics/flappybird/butterfree.png b/graphics/flappybird/butterfree.png new file mode 100644 index 0000000000000000000000000000000000000000..b870573c1213d835309ac1aa631d878390daa15d GIT binary patch literal 1086 zcmV-E1i|}>P)b4VtbCEh-UckkIf)3>|@&p2bL14iZgM!p2l?e(69bCBM ziX?uDfWRU!0zu$RzsxP?Qi8j`*|&EswY}=FptlqluJ_s zK=#$dn8~=t+JJxzF+&4F$^Z$W9iPKlgLGSKBY21bK{loc4ZuO$P{fFJP(KhxSHuQ@ zw(0l%u>q#@8?HgdN&vha`NJ1(4J8>w+b(YT9(YFe-R|AVPNNyFD2Q z?+?QwFpk32xyB#L3=c{mstb)jkO!#{zC73YL+Rv1D7F4T`#(ikY5hShBkvr&KTrlT z5Q9IEKsdtW4-}y``-4@A)aVZ+5dZEE{p1f*O*Pg3uSZTo{=!0VZSlMRP|89!n%(~h zNE&M3clRS;ID**d6C_!4VE(!PDH$t+SQ2WU2lJ$opAg(c7`K&(-fTV2`$318LVE_cU3&Z!kKMV;V7b4a8 zgLM)Buh95|HJoB}!Uf&=!|@!11VZBvihz3{fw<8417*M07*qoM6N<$ Ef@t;Iy8r+H literal 0 HcmV?d00001 diff --git a/graphics/flappybird/damage.png b/graphics/flappybird/damage.png new file mode 100644 index 0000000000000000000000000000000000000000..aeccaa93d8cedd583c57bd091f3d7ddac83124f6 GIT binary patch literal 885 zcmV-*1B(2KP) z12iM6s2!64000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPCk}xgYWs>@Ba5r_aw%)+RCiPV0AFa zS^{I^Y5>Njbx6MenhVr9nQqiHs0K+EOqPz?}qAXk%1gJRVJ3P`eCt|phH zl|!KbBgA1`hBFKgN06=qCk3=PkG(Oo zVvq9-ijV8SDb9}rzwZ(d4V~a{gqNyAE8=ZWl#q(J$=ytKC}B81^7-Oh@oB-Gol#${ z!76fq`1Rrqf4X?*0VKs(0kEok_x-DzV((=ya>5W5fSu4G#BJ}bcz*Ch&@q$}=ooXl z!P|qIi@k#$MWagE?6#WNm+p;`j761oA{6(DwL zjB*WN<;eGUgm)c_BgdI*JCH@jg(#D0o(jQRx&dpPRz8SWcmka8a-aju0`S0v2x0(( z0Tog4v~wlSCM6FIB~Vi}-42u@g-O)TO~7dt@yY(hd5629_8g^7+@{w70h72LX*W?j z3@i8RM07qxVc+bKx8OXTmiv$;MhB~c{`D0*yB>mm6L%I_&cCzIJZTvX=s{o_P*(>u zngMG%mLG^Ijb>o0t+slsvS+KqLjfC+F|0!wpax-`lWDuAQ8$peC4i_|;9ZU;394x{ z0JsEjBQUE0dozI2|95NxW(3%O0`OObe-Etafq<>e&mIWqd$4~Fs6}WEb1$Ioq0K86 zhQ7TQSR;&$e@_XI1X#XLn~%v>0OS1fm9;kmHqPV>+8cJ*>c7`dXk~ICD=2Hr00000 LNkvXXu0mjfkGOXL literal 0 HcmV?d00001 diff --git a/graphics/flappybird/digits.png b/graphics/flappybird/digits.png new file mode 100644 index 0000000000000000000000000000000000000000..afb8bbc5606ac13b86f9fd154bb5494fdbb08d66 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)g&9a5&NHwEQtTz3zOL*qSr}OutO}O}C<2AV zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>yHZz9UUDjR;>8(;|EZzqM{-qA_B<31wJSwaRcQTlf2zs z{x45zZ#fHd3{RWCtNxYx{r^6Tm`SIMQct8l+V}YX+YsX#e*6D7?sG|2S;S{L RC|n0Q-P6_2Wt~$(697ycb_W0e literal 0 HcmV?d00001 diff --git a/graphics/flappybird/flap.pal b/graphics/flappybird/flap.pal new file mode 100644 index 000000000000..dc4e14c0df5f --- /dev/null +++ b/graphics/flappybird/flap.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +248 208 0 +136 136 136 +168 168 168 +248 248 248 +0 0 0 +120 120 120 +88 88 88 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/flappybird/flap.png b/graphics/flappybird/flap.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea410959dd31fac95e9517cd91cf2c7f2b6cd7d GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-k!VDy{RzH{nq}WS5eO=jKvM@4h>COn`_XY}y zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGflQL`i|4J5a_L$Y$_r(3A&KEa{HE zjtmSN`?>!lvI6-A0X`wFKQ1tIbabp(vEs*%A3(8+ii(Jc2p|I&_@I!)4U}U{@^*Lm zzm)ycQ6MMW)5S5QVos>9Azy<7$Kj(tE1EvCw(OX^<=^4xcmMr2h_i2Hxg{c%Q@CBe z=KidXltRAG9coUC&M|8$FLq=L6xb&o@;p0$)uZ%#wwu@QnHx%ZCjb94VF#l;qu6b> SJ+o~-MRN5ZU28pJbKdgtf%kAt6BS-fpwY8j_t$VFfbDX_|gmcPh0cijL00Cl4M@0Xn2lB-L00Iz6 zL_t(|oYj;)j>0eyg?$AiPOw*?p+!o=0U~a&H$Z5mbTmmHiTDagdxEW3X(Dj~%Qx6| z8!Ye4_$Rh8Br7T&k%M&F6JG_<#rJ?V~Q_3CeQk0DvGx7_~3&5Cm0j zf!LRwBN*cCUGYBWi`JIm1Gh>U76>6mVnRGhMq<@3n3=m z9R$7)lISVlnFJ)}&9Ur$+FeK`1q=d4lqWC=ZzkRA20nG&)mHRAxbz3t;a+Q*cm{I? z1cJPk5F-It2QBWJ4hFj89o=>fuW{bsyiNoJ)bg?MSfsHPN}?s*7!;wjNW_A}WdOj; zTpd(v%yA9u!M$s42-1|5&{9aa;7%xD09S|{K!jG*frQ{DWprs8FvYAph@0w0o;(5A z;I2{y$$o;)C_CnkyMLT%n`Uh65wx;8!mM7e*AF)!OKI&@OyG#737i09704}56C^rY e{hy$IMS?$y4aGiefh%PI0000(W9UrgEN&FFr*Cg z6(hz>!u%in?gpmJn6n5EkyujGbl|(b-(TTZc?au!y=tcZ)3g7(Vatv^UNuv1J>w4? iIdR6TX6mhH{DmtmH@s@5-g?I0dGO?gSIyL0&-gdAQx2j4 literal 0 HcmV?d00001 diff --git a/graphics/flappybird/flappy-fg.pal b/graphics/flappybird/flappy-fg.pal new file mode 100644 index 000000000000..d191141dc5d4 --- /dev/null +++ b/graphics/flappybird/flappy-fg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +140 247 115 +214 189 181 +198 173 140 +115 214 99 +173 156 140 +90 189 74 +165 132 107 +148 115 90 +57 165 57 +74 140 66 +123 107 90 +222 222 206 +115 82 57 +24 115 24 +8 90 8 diff --git a/graphics/flappybird/flappy-fg.png b/graphics/flappybird/flappy-fg.png new file mode 100644 index 0000000000000000000000000000000000000000..05e734f20ab6cc997a255a236f486d9d9b76aa62 GIT binary patch literal 852 zcmV-a1FQUrP)Z7;_j1S_mi1^_c(w00Cl4M@0Xn2lB-L00MYP zL_t(|oRw2CXxl&(y$nse9tiI>9zDfFrwoR}psh>joDvSKAry)^6KLtCgQCGj1P+Qx zmj?cz(#ZwkKubq&9V##y3a!B!&Rd5JR{xi+R4$=G5B~jsr{lkO{~^W@^E8g9^XWX@ zqFUp(`OOBwnASQjfCbyY*Gdijp^qnN5~NAB_BEE@6(UWOBuH52ky4!kNn*Ku4V{pwZ)s#0qr*9EY6k$l@#aCo-@;@t??Y;<)7LHa)hL4w=+ z%17p*)J9O78+RKRu>;9dNbkc`rmTNU_z5NJ&b7^}{pxa;G^ggl|^3|;=q zw#5-)q6TGdT;Smq!2WybT};%OT%1PM<~9Q9vFdvnn=y(e;ozuUX70?se&!|&yH0O* z&}<3U2xFF^`%}1V=e_sTV+wLkP2xeBk3IFS;X$+lxI6=RDZxSpQMSIemfd(x3cfVk z6dUFuKje*On~RV;f{U?v)8d@F+%X1IxLlfWSHTlCVEE=@=0*P4ke6z(fFBJw=3Z_y zF6HSjRFFv-Wp-Uv5Ns77GYwJ*%zIooPn)fg=pr$9tfAz#r7?Kmo*RKPsQORr6g2dG z2?NGK0!}>xN$^$+POFV<=8=jF09e)kf*r#l2_xt2o`Yk@sT+Y7;KSV!$`}hPOo-fu z)*g%C!*7TnvVfx{L>bI#fQ^LV!o{9F(U&IzJD-bM4WwM4!z5s<0^P3FK)AdsT{Aur zz5ddev2n+?Rs(YMI?8iYVDsFr@^zlqYGAsKYx~wpX%WjYt+g89Zv{D`ShlFufIKDE ef_jTO4gLVqt)#~qk!iF50000m%WW-Bc zBT9nv(@M${i&7cfeO!RXD3qlZDH!XS6t*sT2vovRQsCzflraXf8N3=a<$)ASx}&cn z1H;CC?mvmFK)ykMPl&6p=Z*JA17Y?*sx)Fqprr10>+pTDo(#bW$>CVmHe*Qi7Ma3k0v$>weMq2I}l*#9@OP&Wj@98 zRIG=S`7_T~sTZ$HmZ&*;WKI0efA6zOwqOI>NavVT z=;3$lL)S;y@7Jw`%6nEG{3LR=O#QI$m)`%)6ZUADxlS@ay4FMJd-tQlpw7el1dS6` z%uv=ms^V;MO694ZO5*HKDsL-qz2-5Ste~=1_BD*T>V1an S&)trJBFfX%&t;ucLK6Ve&FtU+ literal 0 HcmV?d00001 diff --git a/graphics/flappybird/hiscore.png b/graphics/flappybird/hiscore.png new file mode 100644 index 0000000000000000000000000000000000000000..a4437a811ab3b91658d22cef34c42a100fdd63b8 GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN4}IjLcjrC7hFefkNUX zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0}_0m@n7iKKGcp+o0F_UDw zF?+7m;`1^V%+?CeWL26oi}>E&*mn6!pFtYSd9l0+f;@uLA6A&z+4cQeW1Z(P)wIm? zlT<_FOTC4RYrU8go=9+H3KcRqER$h=ILj>IP>-3LyD;;yB~33Fe*c*5yrXo-LAeK} z&elbZtLCU>wEi*k&78k!n-=4`Lme&xzqGqf8)zgRDZKyxhu{KP$;P*9UANTUPq&+M z^Ze$;H!Y_Np0Jo}X<=Vo{_KF{4MxNF3X*^36h~Z3y}2!Qsi|_swu0sF|H~)Ue)?ha z>hiZc4Xbp%iB<9*I#4qGLPPLW^-o1SOH4W~1Qdh&8ozi*e@Hx5`F>HS`ukwVk_EMY z&MMxqx|7NOVOC<~PKVH3X~bp9zagLr;B4q#hl~>3Dy)wH%BI}77^YL(hnYaI5Y|!RTC&;-ps)$ z%<-$K@tYb$tztubV|TYf9qYn{EFv6SkHQb+GWzHE67sPqCm@~fUX8FT)>h$D~+Am%xEKtzp-QOe_ZO6b+yjaXTWoOh+ PkZV0%{an^LB{Ts5P8Do4 literal 0 HcmV?d00001 diff --git a/graphics/flappybird/score.png b/graphics/flappybird/score.png new file mode 100644 index 0000000000000000000000000000000000000000..138695345820eddf7775539309e57769a65e3955 GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qSs0luEP5+u7XyXF zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>yHZz9UUDjR;>8(;|EZzqM{-qA_B<31wJSwaRcQTlf2zs z{x4lFzshE?TAi>(qyJ1HI;}j-F6IQ)r$JEXpQ*+=tWMt+T{2=GiBc>_E zW`$;q!FqfzxEiW@Vq*?)9Z*}K&2UoC=pgGewgpT+<_vS+He459oWQ}rptVTWz4bsh O*fE~2elF{r5}E+G7*yN< literal 0 HcmV?d00001 diff --git a/graphics/flappybird/score2.png b/graphics/flappybird/score2.png new file mode 100644 index 0000000000000000000000000000000000000000..044185c01ccd59ec94c7aa7f3d3d71638af6704d GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^4nVBH!VDw>HYaZfQtTz3zOL*qSs0lu1r}aoIsp_C zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Hu0Jj?baZsASh3>Aj~_s>ii(PehzKA97xz4~lYO@Urx72NE*?f`B=xmp!{U4PxR?q)%>@;QZbrbRs@|Z8YUsP$uFM$ zeEI&o!R+6`T#vr+xUpW&mS51+cUE;u*TvQMR*xQQO2MA zZ{km+n`bYavtV=n)yF%mdpg_xP2$*hKSZ75$Q)soLo(0QOFRr69gY+}m?3Y#%v#FO zxr24%WXB_!58oH)ayDMy_gGAaiMQjL=>7J#eJO44%deWVWWDEQO4a19*}C;A8>8{@ z#%%ipHmz3-VTIgD>diARAG-fAN{H!pHYaZfQtTz3zOL*qndQY*Shd#G>H~$u zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>)z+ZJyYf+7gswud4bdt0+SAIlLM+@O!9Vj`M;F?(@`KN z#M8wwq+-t7zJr1d20VxNFwJZzR`b~PKQE?{UH&>xK<(nm&4~vTt~(iD=E!Y%BJxUL zK{c1C$R7V=oJVa#e*NQE_`ZN~2SW^l9)tJ~vMheXF06ECh)z4*} HQ$iB}T9Q*> literal 0 HcmV?d00001 diff --git a/graphics/flappybird/trail.pal b/graphics/flappybird/trail.pal new file mode 100644 index 000000000000..3891f7c7deb8 --- /dev/null +++ b/graphics/flappybird/trail.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +34 177 76 +8 200 96 +88 248 152 +168 248 200 +248 248 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/flappybird/trail.png b/graphics/flappybird/trail.png new file mode 100644 index 0000000000000000000000000000000000000000..6331df8769548deb45211fd643ab3faf7737ce70 GIT binary patch literal 694 zcmeAS@N?(olHy`uVBq!ia0vp^3JeU43@pqbR)3}|kYX?K^mS!_$t*7>uKD)9+-abY zc!_I7NpOBzNqJ&XDucU^3(y#aveY64V?C3?)+G;tN;pai{M>;u#y~cMSA(WJkYY)9 z^mSxl*x1kgCy^D%Hwf?vaaG#r!*L=Z;>U~?KTiDk@dKnBF9^K7Vh>OOW0JSK%m1b9 zpN<0Aw>(`OLn`K+4Uf({qQIkak~QEm^NzQ24PllCpZzP(@>G~%*fKrrRZU2ogmgMj zo7U1ROBjs#)>!@fyY26b>b4%mFwMkYWo(w&H)CHc-^`-SIPrKh%i%4{uC@4-i1>WC z7R!9mkR$2AasT+=>^&Tn9PBPu$}m=~TuZK5X1ZEi2h;r{*5+|vffWSHhhJPa}W za!C8ckxjxs)fC!H5CRcP#e!6u>5?e>sk)urmKQd3t5G8&546#CQ} z#I(*Z=1mcMzF_gM>=+KStA>X~uV{v?N%)&7ar|s=W!c(??UUyAg>_mp$1?h@S6H{b zqqz9RTW*_5-Oa(BfA+2~=1o7cQ^>&L{SVteS8Cqgwr>AY&ua6%`QnuytZ&L^oeugF z?XP|1V)Tg(^B!$m;1u-L)lhLwUwYR?-${bG_1$)?hV5;CtQV$Hq)$ literal 0 HcmV?d00001 diff --git a/graphics/gacha/arrows.png b/graphics/gacha/arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..816572740664220aa586fbdfc18bfcd4eac71ef2 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^96;Q_!VDyj95UqvQtTz3zOL*qnYoxu)s|VktOg2+ zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ipR}Bq~ALc&)|Nr;)_EuF@1u4f1e%Jh82UNhA2L?4(g@sE}4jfprWXYKWOLBlj0#Azxqt7Xa*9XKH*P5_>G&THr{#LTw#GQ;x6T(_kjhh%}Q^>p=fS?83{1OUpkOOF5m literal 0 HcmV?d00001 diff --git a/graphics/gacha/belossom.pal b/graphics/gacha/belossom.pal new file mode 100644 index 000000000000..7b0591a623ec --- /dev/null +++ b/graphics/gacha/belossom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +156 213 74 +115 172 49 +82 98 41 +230 230 106 +180 180 57 +131 131 24 +82 197 49 +57 139 0 +16 90 16 +246 106 0 +213 32 0 +131 0 0 +164 164 164 +16 16 16 diff --git a/graphics/gacha/belossom.png b/graphics/gacha/belossom.png new file mode 100644 index 0000000000000000000000000000000000000000..414322cf229e97216f0861f2ac4e2ea29a726c59 GIT binary patch literal 1350 zcmV-M1-bf(P)5LyuSY5>(B0D}Mkq@<(}5D>QdD(V0L00Cl4M??UK1szBL00e4D zL_t(|oYj?2YvV>3#x>u-qNcvs7)H67Vru!e2a(w9r7S*43x%?mwE`g}rz8*xzRIUw ztz2~5CcP}Uz0KrQNDrDpxZU<*8-0b!O6|IKn7*TbQOaI=tPY9&=$Y4=d4GCdMfvE3 zR7FuM#aC6S^9owd;6r+wt3I7IC|ASORHu1V&RelVhJ z$7;2MTT`qZ=DR&=_oUEW9i)aT#$8#Xhw))9Xx-T8b#ejqW30o4jed5D>Ok~#y(=E_ zqL=oq5Ch>Ii_}rGPMq=eb~0XHrbl>g-Z;+n)^R+0BrP@bOUD^|AdJ^`lo(DN$6cRI z9A_gfXlUO$t~Y!w*Ia^7v&7bQ*QPmg9Zx{n+6Zr5(H>eW;d)rW0jc6!A;e|`fBq85 z{?*b|Mxum6@~wn}f+~p3(7eDwsn6-w@>3fCF>)NjCXF@O+#Cm04LhxAYuSp5697IinQBor%J&Z> zw4m2B)}S65>QhLMmOuef@&iua?ls~nbywjhkk$ix0gAf-PSGi{@UH7 zHEO15-AG~LC47KE0s#a}yyGY{fG~Ey+q!FM`P4M+lZgXJY{ycNCGCOh0yAe55BNZr zBk@+-x?cS9_0|JEBn_gtk^?{=;R8J*1+Zu=Dn&)FvsANmgNBylm@2jCE^7xa%W^(GfmsO%L!vA@uMH z<2E*mBdW@%IKl-F5FeVZm*PYn_2hgp22bPUz36p?D323I4E{Av-2XIAAaBOc#>w}| zII%{PY@A%ltT2XF4F7b9i!?0a&81Pqh2)?qMD%Q&pn{Em0Jg0wD_r7~{Qv*}07*qo IM6N<$f)71rvj6}9 literal 0 HcmV?d00001 diff --git a/graphics/gacha/bg_basic.pal b/graphics/gacha/bg_basic.pal new file mode 100644 index 000000000000..da8779b1d2cf --- /dev/null +++ b/graphics/gacha/bg_basic.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 239 231 +255 222 206 +255 198 198 +255 181 181 +189 181 189 +247 148 148 +214 132 132 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/bg_great.pal b/graphics/gacha/bg_great.pal new file mode 100644 index 000000000000..58037e4193b9 --- /dev/null +++ b/graphics/gacha/bg_great.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +208 244 240 +168 236 240 +136 216 248 +72 192 248 +189 181 189 +48 180 248 +0 116 176 +255 99 57 +140 140 132 +8 104 240 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/bg_left.bin b/graphics/gacha/bg_left.bin new file mode 100644 index 0000000000000000000000000000000000000000..8ba77ad605d26ab79adccf20b7244c052bc83c8a GIT binary patch literal 1280 zcmb8s)l-yF0LI}5I0zzkpcoiycVP#1cXzj9cPmH;3L+|E>;LI4E;kM{d-nTXd>8LL zbI#16^UIN&RXLq7{m;uv=gRAFL6EOo7v+c4mZ<^-3U%+I!jRfBRisD{#d_+cw?6vn zr@sLP8kAfzSE9sVLzEh7nBhh!GtwxdjY%$$O*l3f@w%BT$?RMB{SG3=4kG=NU z?|_32IqZm|jz#<9PB`h5)6O{SobxWY=u))5?21ZPU31+HH{EjE9e1PsJ@-BE&?ApM z@zgWVz3?*HSE=^uzp6u3hK58000W^ zNkl~u)}CpWam1UabWh6%S4b|0(03vz?XLzXd_5Kz61s);ASC^ z9DC>p&t+gl9P2iRoP6~1)Rx%LGckJB%SE7}-BK{L1PECQv0pfE&ocqYxa@Y zNq4_bSADBqRY~HP>Mzyj&-pL^{H0nxvzD;le);+5RV;y3(jP8y5nvZ(iy;fZH7u%o zgGgZohaIK*-eabI4Dj9cTV)sPEP$V-4ZU|DF0AJl7C-#-X zu|vpivL(c%(ct4ubwdVMpL@MZoQc4l+Amk$DH?)iNbN<$*geAfPcGxNpr{8L2U4${|N<0j; z1&qn_jHgJctfMW}2rR@S|q9KV0XpK}3q`l?07~q`%njmx!`VaaD>fos%(WE$kws0X% zlGnj0;FwQ8AraZu1bX9=R~tL25Mjmi`D!RDlajN!0H`Q=ZGBS#9x}&%k7admEc`)| zBpKjeh6)JEW`j2b>a|r_(Dw z52B#&2R)esqG$owKs9)bmjhs3&<&c-wu))NzF)2&*L{?}akygjk$jY4T@>&Q25f5E zmynal>)6~!@=Qk#Vaz{+2f z_~$&&k&smnMkr@~20)GgP%tUH&H-|{0O6f3?A~5aUwZ3sofcV|%F3}Cj8uR_xB&3E zGAvu;1b~9k!QnCMT&pHiEp;AQg+8WYjk^en1q6Ky2qg;2&Y`VMQhaUXGa#-X-#A>K(weFhW-PQFCFwRHvnjwEWg z+8H&`MTP02*0T%YO8l6M<(OWw1?CK(jSdN8CBHTZY$Ty%lDGdxlxW|ov>t7Uc^9(o&tbuUucr`dz96mz%%c#;b#@?ycV2BHCspyaA)McBbq)0J}u>4NcJ&@*B?&;ux60dSQw> z&S^AA4$yC!PD8bCORJ2X5@3b^kdOgdH=BCD9A|tBeOvA8Lg!8FttZ*Dx|Ru9`2;JX0_mZ z%@Zq;-GKAJ1wzu^xSdUX7-ei82=hMV4L%=&zW0ND0q3O2Y z!kL3?*3#HKK;a*AZ8a$-+&;aVWdK`3Fi;BWzF`0~UKV4Vr1uF9w*&xX%COF_iU|Xr zh^aI&>0Jy>0NAk<%2Wi+7*NO7w)iuTp<|vqWM~dkQ4%jLAi;3GE+#Upkod&00N_Oh zf2N{oP1+r6)TK{3lx@j}8?H0~IQG;llOzY*p1~X%R@&kdnF07v&w0d&;|vhO1qL)> zKL%~{K0$5L7%2ANqn$@jaPo>Mcng5SureF)cI5ha0GNqw zWNq>7vIRUv#@6cz06+Mds#0WtHbS^u&?*UeelMj#GU8%MS*dInazK6C!+tDb)1*i{ zD0hfWf!^B<3YWP^HRWPMz5WanTaw*XJ5eUWObLQ*hUQ5V^Be4dVqEAuI2MN~PY1s* zZxC&6?A9+?VrV}`1*1@KXVWv4s3v+bM8ro3l!yAOO$KQ6hYJga^w5Y_a5ORZjG>{F zo#qTJg>$)R%Lg*JzO_l|W?fq?G56*pX2LZTgOwC^m{5Zz_ZIX9K2yutCySOH0P7Q2 z@b1m#csFx?oB|MbZTZ=^A3`IpWQW=8?(m_$0BCQL+1-3|sRm+;D_Pb`3x)xqE!QY7bm)$%Rt!uR50Tv2dRQ!bZ3V!>TDA;0_p`?a;;BauljabfAJ z>fNvM%P+8>tOXwd{PPmP-P0(p-okzctct%@tM^VHTD|=cgtfJEvA%~F@{uKd$9^gC z#p(0+Z;S8O&I0bQ8V3BjcoECEb`F3KG$yTyfqK#!2G*X4&b({PvN3X3ce9xCSGpd&hMl!TB%a zTz26kaTb8wf=B$nBUtd(eTXSz?Hks>q~`!@)pHtTfQ1HG6rjPKJ1#7E@q#rl=j(xX zA8P%Zs~`M&8u!nyT~EbTmy6wCxG#=Qm07L2=E{Kkxdq>ylg1of8BonESo`Mud2+7| zxV6d_tlc}~fxGzf?MjPqu-$uQ`rymft1eA%%jIuK|KEU1>-`nie*lGmGE7~G!^i*t N002ovPDHLkV1i8~cWnRw literal 0 HcmV?d00001 diff --git a/graphics/gacha/bg_master.pal b/graphics/gacha/bg_master.pal new file mode 100644 index 000000000000..e17328689940 --- /dev/null +++ b/graphics/gacha/bg_master.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +224 224 224 +224 216 224 +180 178 192 +152 152 184 +189 181 189 +136 128 168 +88 72 104 +255 99 57 +140 140 132 +56 48 104 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/bg_middle.bin b/graphics/gacha/bg_middle.bin new file mode 100644 index 0000000000000000000000000000000000000000..048217f6591769e24587248d6d060544731260e0 GIT binary patch literal 1280 zcmb8s)l-yF0LI}5I0zzkpkTXp7j}1dcemKx3KD{Xh>C!y|ERmT+&Ika+3$DpUA*(m zIWvduFGp@x<#faJKQAktE3eB1LB3u+lpj)CrV11&)VqfYLu$)Zks^H*>#Lvs1{i3N z!G;)WSaQi+i4wz&P^!#Gql`AjSmTU0A-QBOAz`9PCYxfaX{MWDrdej2lU(AOYo7TQ zSg710i!HI#GRq@%!U`*`vf3JJt+U<+8*Q>V+HbMdHrws6(=NO1vDZHPqx}H~9dg(a zM;&wA2`8O$I@+Ic);Z^0aM2}~U2)Yl*Q5OnH&wXhwma^+=e`FXdKB#+d*Z2Qo_pb? zS6+MLt#{GBQkD1rRTU~j-0LS)t5K^?U8oHo{HrEZXXWcPXbAOb|IsJ$zEP9Unl*H)7w`dBnzD>IhKXv-$w?FARLVIY7xWQlJt9R4@ literal 0 HcmV?d00001 diff --git a/graphics/gacha/bg_middle.png b/graphics/gacha/bg_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..e35a7f90fdfd25c67fd60b6f3e032eddd8ab326b GIT binary patch literal 2913 zcmV-n3!e0eP)58000W? zNklwUs?=!RVuQ+|*bcpR} zcjq(D@8?;GALoCZ|LG_G;om>b&z@N`SZ}}l{PTG%fmPD)FL4pz7Wu`HDd00Ks)tMa zidQdFDheMl^)kS>S8vQ#vCabcSz6IAd*Z_S>B8cN-~R3DRsQ>)1S`4NXBVI9&-d%% zsTU<+z*fEfEL06cG%URb_y^Y6Q_lhFnl!c@Rytu=Q?a4L;{OI*_v++;EKRU203cMc z5XIy@8(ah&;V&CB2NY9lWw1R8ADeMQh=LUQ!)ustYTJ#_%1VhnJJwQa_%X736m39} zsV$2#DC19|J zCxuHo;g6M;iWFOLN6O9_z$dyQvseUMr~B(qrxJL8jNM5PpIs11Imd<=3EJk{wVjG= zHFUjx31Ay1K7tNTfjG^8kbBR$XW!3VM*pAQn&8eEb^#L>N*gg^(sY z49vvZux2aHC?YVBNJWOMg?7yVr^xo8JrH7Q#L5_16F#Ag9gvWjP_WPT-*qAh7^RDU z#IB0eW-Lm>LXf^Liqg|HPG_oTlnr72mQq@qM8_o?IQvJ=D59(W6C(I?Ok!;oBn;RzaL1_D9IN#bJ<9?828UH!!7w?X=>en#M`8mBMX*XD1sv#ZDF%#A z07{pIPHh-kXdsHCusI5!yo4!9YY5N;qT8h7ffnP#IS=Rp5I)Ookiuedy3aRy$QhA^ z4VbdXiZ*EsKtqd3w|NXWkq^m;vh`2w^IQVkQ|fiv*AfFPNBg<{lKqNo`F z*G|@pY$nPQsV9hTBz%xsWkY4<6u>pe0ag;(c~lYs079jLgAGPumjSgp z0}vwsz(^t%4uDJ@mNL#1B&`pv9jRqy8Y5*`z1HJ$raYh%J}RQVkSNiL2PEYp3}4VN zSvMpdh7&2xB#+W&BB>T3K9L(I0O0@?TAKn25Chgs^~m++Qji43dv=UIHjZ}ruC)%( zw;mt`=PS8_T{#T0ruXES^9_!Kj+?35a4_BAm9pa|3fP{|Ee32FS6VbORC`Y%-!@SL z%jgrS2heuskuy*ZIHtDkgd~a#@cp{bf}~>;m*7dJHjwMZILHBd&OYL5se_lUGIi4w zkxtl${Rqpv&ZseaQZOJ@=%T}7HqZ_*koJ{8WThr!!0z}I&_FsQ5SDkT?ymDB_V<1J zr$puegl>k$r-?YGX_CGPL-u<*amcSzV0MEHn zM%&iD2_JL&rNo9yHsCtt0IM~EnwyVNs%4Yf$U76;B=Tu9m- z6rznM8T+;G+sc^Bk|?kneX;TYoV(=!s1Jfz3(NA@{jhPYV0F3OOL<;Ud&Cn8nk#fi zxvZcwMO?oiASCcza*gSUC3pIxUPYV^|UMXGzfRLrh z0F`QvTp0G!J}%fD{se&C^X5hZsfKQKJphw{1B|TQXGzWRP{?EsqZI>4Z+BF*%iAD9 z?yoNP$AzG~kplwuk9exh5w;_-xPV51WI;KU zCLKt@#SMNgvYjK*c7V7fgUMdDMRf*bWj8>P6ir90Yi=H&_EGgVAs%{4a17mtMGqJN zFf5_s)9^~c0k{elpeYGu7_gOU^uJFzBO3)y?u3r}0F=-aipOc%4IgK&5sMtqbVAq%05n)a z2J0QO#BfGKw|O|Vzm->rR#&#_A6R1IUZci642Im#tTBpwS;L zEUtm*jj~G!xF}6H`~qdTr8uRyd?14B>#LNl;=P9@z2wpM@tpbf-p zu4KNIieSuDLAt`-QrR5OBk?ksj6S#oR6~W^+$Jl^bY>(2c7bw^BfdERXv&S8Gh1puzk-o07% z>vF(X_*tkr07(N!j`@8llim7CeET+;uV=1LH(dbCocynPf7Suei@UC`qC7$3n5Vw8 zo6Z65%$xwKv+nB5*>`6SS1E6=(HDQPfS0Lo0$7;6;Z*oeT=Xl_Ju|bjvzJJ4hegOQ z-^YIKB)G&g*#}gZ`D*^oSNY`^*iTM^O921=0N~E47Z+||KLZxT-{s#(ii7!r{zjsr7w|EwCZ^1C&m+3)l#>I00ywI4eI=|>m{P4yF!2K!% zsyC;a@^?D77-0B%<^b2ShuMke-ijFp%zXCcRrlrB3)X;sy_J6#_Qyk_qi?U{y3r26 zUyofoa;Nz9R#eZ~;1>_LmrHQOhdg8n9%P2WYy+dKr|Y4U;Mz&x{OZ`*gZ%c9dj|Tx zs2Wth>aA)OCOH3PT$NQg37jb)m*63PI)Vgms}E3w7r$W}nCu*2asHeQJYZ@A?*-W4 z)~zZec=3X5V9wVAU45YSuT_0Ncb)jyRmE;FsxOYb+8+(LmrL-izT~UE|7Xp62^PPZ z>h!Ve#sW*QcsJMJ<5eIecJ=No>A$Lirnj@R-;n;xfcNVBN3Q<@gyZ``B;_q!00000 LNkvXXu0mjfmLYs% literal 0 HcmV?d00001 diff --git a/graphics/gacha/bg_mon.bin b/graphics/gacha/bg_mon.bin new file mode 100644 index 0000000000000000000000000000000000000000..269b1d24709d138dc74fe198559aad0459d9fce4 GIT binary patch literal 1280 VcmZQz7zLvtFd71*AuuvS000F500961 literal 0 HcmV?d00001 diff --git a/graphics/gacha/bg_mon.pal b/graphics/gacha/bg_mon.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/graphics/gacha/bg_mon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/gacha/bg_mon.png b/graphics/gacha/bg_mon.png new file mode 100644 index 0000000000000000000000000000000000000000..1556f972ad8f3f44a1b0ad612f1d74a8ec30a4ee GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^93afX3?$7I7w-U41_3@Hu0Wb35M?jJ4b;Hn>Eal| daXmRffe*;jU|@Vwo_iZ)kf*Dk%Q~loCIB-)4~PH& literal 0 HcmV?d00001 diff --git a/graphics/gacha/bg_right.bin b/graphics/gacha/bg_right.bin new file mode 100644 index 0000000000000000000000000000000000000000..8ba77ad605d26ab79adccf20b7244c052bc83c8a GIT binary patch literal 1280 zcmb8s)l-yF0LI}5I0zzkpcoiycVP#1cXzj9cPmH;3L+|E>;LI4E;kM{d-nTXd>8LL zbI#16^UIN&RXLq7{m;uv=gRAFL6EOo7v+c4mZ<^-3U%+I!jRfBRisD{#d_+cw?6vn zr@sLP8kAfzSE9sVLzEh7nBhh!GtwxdjY%$$O*l3f@w%BT$?RMB{SG3=4kG=NU z?|_32IqZm|jz#<9PB`h5)6O{SobxWY=u))5?21ZPU31+HH{EjE9e1PsJ@-BE&?ApM z@zgWVz3?*HSE=^uzp6u3hK58000W^ zNkl|EzE4$NM1nHZ8wU@rRy_)>>J8$km0B``1ni-kaZ z?9dUOiy=*%_%??*`RJw8me|lUHZH4tF=*(tl*_^nlG}oyv4hKg`+e0d|BAh9wn${V zyX#Z$_j_vb)67pZKmW}C`SYil$unyL>*Lp7emR3BuqyiVB`yNoqI@xA47i0wq3?GS zg%#~>D%F{1>SciMZ{M4&VVwo=v$Ukw>*B)t`NHCdKmO(RZT|V01WSe3XBVHEpP#Rb zr(TqR0UKfX$`6!=mY)OuhIRJTbAV8j z&unlJu#cZ?&;lUZyXlV9J>S=)T0%&nuU^AqQ+YS>>pODjT-%7H2N$X|rNabrjBQzo zWs84$nbrfcBhS#%asg;3tG-|NhGYe_Zs<+58mLH`qt#Qu4Kwl>P-=%K>&F7n-c@+e zf3K(b0jm`A0FcxEDd10ycvRJ*v=Lqc*m8g!&piq8BX+@#l+F->ENkLNa^xu;hL->a zIB}kJa1v}Pt5QEm)50ji#5uqtW;aYDY{s)JvzVQ78il;=$BO^7XX~&Ot zoKb|-2#P?xr=v7ci5kHYC0H_RiLnu5TAc@gNW%fTYN6!;Kas;B=uGVcv&Hrg-aDg2YR#*_6r=VE{u+x-x{7NpNfY9;pu-(}{|9Vkt$CtQpe6;)E4ZUM^164Jn4sFTQy4$MF_ukfwT4)S${Z=8ObcpCCtMJzl^X}I3L9j7)o8UdzEkf5P+1R7Oi9E5 z-KwOD04Ex`kPLd%x)HrDBuLY~TFIQVcoEadEO$t`5HH(Xg!F z6aY9j`;bMafCJ8cLLjoNnL;L44*dGSv!WDNO^2_>a;kz190OGHq3?84k%bKof}Pk! z4Ib@gS(XF-Wx$k6%Wgxo(s$NWWTynA-0@&WNF1ncHh`#Q+}%0w$$zy>dQr-Fs$!+= z1MqeXxXHHzqBxd_b}#m{MiYqA?jYt&gb#XrL=Mn$TaM4ceokp&=03c!+<)AN;K2>?-o3VIpN7*+=1R&3F-H!9B0}r)O&HTDzK(5tOqGTZ1asiks$1uFthTN+QcHLiq>NJj0E2{^p z+gDMd81RMxT%e37odMtjC3kIL7PwdqM_TH_vkHAor5bmmlmW|GVXbs=5L5a~Gp%?kC_ z)foWTlc?Qlt>5stXt#B4^>}()jAT0-&^k+C&H!3MdJtCfu~Fna2}@>q`zI?40792E z8lNGKX`*h1Qje!?L;N}2;YPsLND^+IF*MImI8cE6W_5!YFn~g~jr57xM#iRT7nP9f zzD2Zx;PwLmix_yb4M1K5=@T}*Ni%c-y?2yyheOu_7X0ss>Z8!?aIeqMhfpGAJ_e*)Knj^XHr`ayLQi2LyAr4_~60S4l*Bu~S#xS-mT4gvr?WQR( z-G$N!b)3Vfo9&|CG(1b_=&Xb5Oab+|di4_r_)$n2B6Npk2B5W5*TB_1>*6@enuMZP z#b1FCTWQg>*o|68t2vP;{8HysRDqZ z3uVY`rCnk-(Fg$Ok`f(sT{8-}T?QDdRM9`2J4!P7MB$0GOd0 z30q%GIlvp`zX(GHyvP9q2;*uYQmiDWN?HL4Lse{)v0P2cZ;t_CvKodF3YXY)#wgPo z${l=DqGPu~;W8Jg#=~Mm7`{eVTFdggYOOHBq41D2aK};B!2Aa5!D3wKH<1>5FhKO% z_9D^SrH$~4C8|C5H7e@I5FOETs4(Jj5*%kEPe+|_eu)7Z4d%jPL3WH7O(Qii_Y4r4 zQf@X5(NZ{;%dUKM{BVAm>|1(zl}kW1o~Q>1Zcatk%yOgiNEw*m#UcQA=)V9|^N>dH-ly=j!EE$m(cr|t zhhgzOTbsMLzP&edvL4NxUysCCm*q&2#Qb7Q0NkB?e7}~j%K_iu|7^_xXyhF=c_c{` z#na(Z>)}H(-%i{eZ@K`OIQgyibkYIPi>LFx>b%k_VQ4$M=^WtE#0j7_>8?(k{qD@+ zI+72U>8n3jz{^xP0nAR`b1M8GF8Wo57?dU_CohrU5sOe=i0Zd^7Xt zo8t02>?bF|C4hfk0eE!k#o2q<&wyF+*O{5erw`5Ee+I(b+&N!A#(|u%q#wAK5?`G@ z|Kz^-VeTy8$*f_(FXMyQjC1Dz_(Egs%;e+T$j|Rx06eWRpmu+(DZkTszyQP7tpnV# z&+UolK8gtjOx*hVwtM;Yjy0fP9~AGx{&-Hb|NUKDH`)RC_1K+#cS^oKirP6F{E`En z6cX(7A? N002ovPDHLkV1nGql(_%^ literal 0 HcmV?d00001 diff --git a/graphics/gacha/bg_ultra.pal b/graphics/gacha/bg_ultra.pal new file mode 100644 index 000000000000..b57a43f027d6 --- /dev/null +++ b/graphics/gacha/bg_ultra.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +240 224 192 +232 208 160 +204 164 92 +184 136 56 +189 181 189 +160 112 40 +136 100 64 +255 99 57 +140 140 132 +136 100 64 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/digital_text.pal b/graphics/gacha/digital_text.pal new file mode 100644 index 000000000000..30c3f4c9f6f6 --- /dev/null +++ b/graphics/gacha/digital_text.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 128 +240 148 148 +96 96 88 +248 216 200 +168 56 0 +248 96 56 +152 28 16 +184 180 184 +136 136 128 +60 60 52 +248 236 224 +208 132 128 +248 176 176 +248 250 248 +248 192 192 +192 68 24 diff --git a/graphics/gacha/digital_text.png b/graphics/gacha/digital_text.png new file mode 100644 index 0000000000000000000000000000000000000000..458098c32b7578aa9705631ed82c1973bf2bf456 GIT binary patch literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^4nW+%!VDxm*B3&K4+2M)MMd^n*~4b;n+Y$$ZRe=xh!NQQXJHrbk?1Ok)BN{-UfdMR@pa;#f{+7M i8unZA1pj@|u3%iPa9r}YyP6QtuMD29elF{r5}E*^OR^&X literal 0 HcmV?d00001 diff --git a/graphics/gacha/elekid.pal b/graphics/gacha/elekid.pal new file mode 100644 index 000000000000..01074c089962 --- /dev/null +++ b/graphics/gacha/elekid.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +88 188 232 +0 0 0 +248 242 40 +255 255 255 +157 150 34 +67 67 43 +173 35 63 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/gacha/elekid.png b/graphics/gacha/elekid.png new file mode 100644 index 0000000000000000000000000000000000000000..3f7bf6a14dfd381f46a1eac9596052981c6361b8 GIT binary patch literal 811 zcmeAS@N?(olHy`uVBq!ia0vp^3P9Yz!VDy5c$8@ZDfSXiUsv{*j8Yudij9*m)B}aY zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)Ys8)xK<1B68vpefq^!p(XzEaiqv4sVE3+%&=4V=YIPlzDgJ{K+{2 zP97CTdEzS5*Mv6iGTEvuwDN*Ln-F+>6|c2;`{Sn=N^xK`;PxLHCFP< zwjUFB?ESd$!;}0Po!C#F+f2gkLT0EgE&0I6DBPh}QxTY>R}+9tHj_Ey>>hcqO zy{2Ej`uEAt=@u2I>i;F$DfF7#eY#n;|Bz#A)8SVB|4(=C{CF_F{zLi?_MN-yE53>U zXW(4MY__{Tr>m(^ImAxkY~+d>f!s}w7C#OwS2#K6-@+6Xg`ywq?;ffizijUm6w-Ft ze#)xjx{uh4cYYKs-1_+Jt{u}p`ORGAu!hO!<5mv+9W4hIHGTS+ z#NsYo6&c4ZufKLp#HzDRpBNJla%Y9xZ?ZG6zU+KKZ5@NLmtE|Y1+M=xTjj18iAwF- zHYY|xoA2B|w)XGewfW?Kyx^A47M;R>vWDlkmdQbmDgChqIltb>|4!%Bs%7)YIcjpd zeaTX;Ecp#xw~V!_qXqxso;;YXCT+CXX0)78&qol`;+0Fq%#U;qFB literal 0 HcmV?d00001 diff --git a/graphics/gacha/hoppip.pal b/graphics/gacha/hoppip.pal new file mode 100644 index 000000000000..5784941176b5 --- /dev/null +++ b/graphics/gacha/hoppip.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 222 +255 255 255 +255 156 115 +255 98 82 +213 65 16 +164 16 0 +255 0 255 +131 230 57 +98 205 57 +65 164 32 +32 98 16 +255 0 255 +255 255 82 +246 197 0 +255 0 255 +16 16 16 diff --git a/graphics/gacha/hoppip.png b/graphics/gacha/hoppip.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc8ca74ca8c32ef39c344414a07adbab405df14 GIT binary patch literal 828 zcmV-C1H=4@P)R+uetyL00Cl4M@0Xn2lB-L00Ll1 zL_t(|ob8pdj^Z#7hCOc(OGiN(OF{PnYp7QzOpR8%u6Yaxnk&hsK~!KGlxmYSc@gem zq6OV<8sCJ(!CBp%bnR(Jkq95-nRxy`hLDdz>u_&}TIWdv@K$fhP^qv5eiTIsf^`Sh zp-KqsmMWnhAwYe#TX_Ut)Gj;LKp&PWMvy8MZEBFNRfxZUG5h_7dO*|Xl`#k?P2=an zgM6RHv@V9ZQGE0u!w>J;4a|FfELoNxO$#W~2L!sLUb`P=a)VdtY|s>yv3n%si+ETV za~X(l&3BjvUtjM=_lscM7L|7+9t50^qy-Cp1(y!I^3&bu#P3@`*en0R@w&Ht2UC8H z@xu*_rJUXX!we}g!!CiRM?S%8X14;DrpCeoGT={~&$um7Pvk7b+;j=JU1m&4i4#Dn zNB$)~rc=Fj3D8WfwoVJkRH$Mn2j0|Dg>iCA@!!-=MWwUG|G5i`URggXsQch3f0R2* zYWMA<9xx^?dQ0g0LAx2m*9U!c+b~lVr3)yndR=f_tSBgSQ}{GYZ(9HNaY5~I(QXo? zXa*!&)&#kGSFjve4E=f<3+cLQ@#GU2=rtTZ0DegO|h)AP%3 z13sj{Q1=KOzNmxaGZ?07tqwQfqx3tqxd9g8sj_hn6{yzB?}__pw2G46%brKp47SE| zZArIAY>W$-&W`Re1n)Z2ZUSLd(ffPB8U_6{OgEmt8Ri!#SehJ-BT>Kr0000R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Ht{NH|Kg@mp|Nrmp?X9Y+3Q~?2{I2=G4yb@J$=lt9p@UV{ z1IVfOba4!+n6q?JAlCr}9_QxUj$LsMU;dTPp1AX@6?` zkFjS}%Fj}NzHEBsCDt!r#A+70Ro{8|f8{IpdgiCe^6c|`<$d}^%1(eB?&<31vd$@? F2>@L>ah(7F literal 0 HcmV?d00001 diff --git a/graphics/gacha/knob.pal b/graphics/gacha/knob.pal new file mode 100644 index 000000000000..def3c1e96e74 --- /dev/null +++ b/graphics/gacha/knob.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 128 +240 148 148 +96 96 88 +255 213 123 +168 56 0 +248 96 56 +152 28 16 +184 180 184 +136 136 128 +60 60 52 +248 236 224 +208 132 128 +248 176 176 +248 250 248 +248 192 192 +192 68 24 diff --git a/graphics/gacha/knob.png b/graphics/gacha/knob.png new file mode 100644 index 0000000000000000000000000000000000000000..b9da33339104da191eb7a6617888f2c056bf5919 GIT binary patch literal 619 zcmV-x0+juUP)dwew77_ffIK`j`0U`&gn;<4u=x7;_`txxL>Tyb(U$-K00Cl4M??UK1szBL00ECl zL_t(|oaL3Vj>8}fK)duukfOrhoFXygH@cV(Sy(VDQdII~o$@bdXoFokoOGv??o@BJ z9yB%&b2$879IgH6em`gIw62R4z?76S10y#3b=BT75F%oB4YAopfD8?>*WeNLe75@v zgi7pdC~>QVOca6>W4IHzaH0|-0fm4)aj>UKxJ&yEU5OC)1g(imWw*5ItS-exuKzfe z@)yyezCo`od};DOif{Ol5#u8L23|iOIdKP|owiMy0AL+#N@WLNKPICIkbWdX)k#14^55Q%Q9b)H>dp@h z6x_mclecZ=Cf@;pSZZ;J*!)ndDWUeWolGd<(@zrJru4U}#>;nj_5&S&s#$;TMP= zoPzMkq0v#1q50u}5HIIg*~J+4gQki1Nz9LKIR44`@d>&xI^e7pS|0!a002ovPDHLk FV1l?N2($nI literal 0 HcmV?d00001 diff --git a/graphics/gacha/lottery.pal b/graphics/gacha/lottery.pal new file mode 100644 index 000000000000..30c3f4c9f6f6 --- /dev/null +++ b/graphics/gacha/lottery.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 128 +240 148 148 +96 96 88 +248 216 200 +168 56 0 +248 96 56 +152 28 16 +184 180 184 +136 136 128 +60 60 52 +248 236 224 +208 132 128 +248 176 176 +248 250 248 +248 192 192 +192 68 24 diff --git a/graphics/gacha/lottery_japan.png b/graphics/gacha/lottery_japan.png new file mode 100644 index 0000000000000000000000000000000000000000..c9d3859d77b7bf2729b4c59b51ff796ce2e31baa GIT binary patch literal 645 zcmV;00($+4P)22l!000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPdwew77_ffIK`j`0U`&gn;<4u=x7;_`txxL>TbMEPDU|00Cl4M??UK1szBL00F5< zL_t(|ob8i6Z^AGThFLv&jFP>jQvX~RU|{J&7?21{@+$FMF=mXMC1aGEy6_?Szw~TF z35c{(*K$J?`yStWKHrT-5Bql}0Q?=WPGm9GLxA-|84Lvx9@yhdh#OE~Zj6~9<982; z+fW|xX7gb87^5D=5oV&VY)U3~(*FbvH6#>Tjlug37krVqIAlPUT(-+kX3nUiPJ zQkGJNQdZh7*L?U=2h`L>L?ux}6cTk|bxwrum4_-PB1s|YrXs51>=DyKEy!X)*c|MQ&X#EtL@t7a1H2!1q!Ov zK^@k<_EfP71FZ#EkEksO*&e>O7RYUq9w1qF40Q0tKsK4oqE7S0DhDK-L(4#WDg#nu z4z<MdUfyeCWMkMc$LYfC?*YQ8r>=>1cL%|D?u!N92FH!VY~pzQ+dN`;97n!@ fKe!+Eus_-t9khjnoDN;Y00000NkvXXu0mjf1g#K& literal 0 HcmV?d00001 diff --git a/graphics/gacha/menu2_basic.pal b/graphics/gacha/menu2_basic.pal new file mode 100644 index 000000000000..55390857e762 --- /dev/null +++ b/graphics/gacha/menu2_basic.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 181 189 +255 239 231 +255 222 206 +255 198 198 +255 181 181 +255 255 255 +247 148 148 +214 132 132 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/menu2_great.pal b/graphics/gacha/menu2_great.pal new file mode 100644 index 000000000000..fdcf143a916d --- /dev/null +++ b/graphics/gacha/menu2_great.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 181 189 +208 244 240 +168 236 240 +136 216 248 +72 192 248 +255 255 255 +48 180 248 +0 116 176 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/menu2_master.pal b/graphics/gacha/menu2_master.pal new file mode 100644 index 000000000000..0321fbe91379 --- /dev/null +++ b/graphics/gacha/menu2_master.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 181 189 +224 224 224 +224 216 224 +180 178 192 +152 152 184 +255 255 255 +136 128 168 +88 72 104 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/menu2_ultra.pal b/graphics/gacha/menu2_ultra.pal new file mode 100644 index 000000000000..2374be2c3429 --- /dev/null +++ b/graphics/gacha/menu2_ultra.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 181 189 +240 224 192 +232 208 160 +204 164 92 +184 136 56 +255 255 255 +160 112 40 +136 100 64 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/menu_1.png b/graphics/gacha/menu_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fab2c6f05a7da2dadf4463c4840235e2c38f26be GIT binary patch literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN508Tp~tHXD_>~2MURo zxJHx&=ckpFCl;kLxcj&OjZr8|EmAPnGbwCc@(`$mqolyk9VlZAWHWd*XvzaAmUKs7 zM+SzC{oH>NS%G|m0G|-oy<7MGfB*ddy>tJM9s9p^>;M1%zfYNRt)=CEvSm+C%YP@Q zV@?vu$x&-98Rkd`SXvq$PIqDh>Savwc6Zrpd-YN!kaNJ(#WAE}&fCd`e9ZE~I4 zXP#$0AMJTwp}68@@3rU^4>n5d)6O_qZZbpcNW%f)2Kz@KmMaB&+EVF$hR+>L4INIboFyt=akR{09{0) AuK)l5 literal 0 HcmV?d00001 diff --git a/graphics/gacha/menu_2.png b/graphics/gacha/menu_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8297572910f90639691a365185e7e8ff301d132c GIT binary patch literal 555 zcmV+`0@VG9P)W4(wg3PB z_mq^@goOWNIgE^i|3X5>LKtIXTCF(%oEQ)}IWfa$LIwZ;00Cl4M??UK1szBL00B=) zL_t(|ob8q|YQ!)QMb+dYxkB2U!eO$F+BJdHLV=XqxY*mIbh?miqeEpRFIduiSvH2S z1bu9_@bk=|@P4^p+~G0@#3MFG(JaRitk0(^i$>NEqK4*=&R!(em0 ztp~yy76HHJq0jZQA;Ny(20U~%524r##hSXM3|!ms(FuL2(A&5jr=G-(7PZ`dpqzcJ z2e4n$%_}~CCM7<9CS~Yghz^#2aRft}0d4s<2vL@tHQMpTH}pV1{ZaQvqUYWr50)<0 zzv{jVDZDub*he7+o16fBu?~80oY`N literal 0 HcmV?d00001 diff --git a/graphics/gacha/menu_basic.pal b/graphics/gacha/menu_basic.pal new file mode 100644 index 000000000000..55390857e762 --- /dev/null +++ b/graphics/gacha/menu_basic.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 181 189 +255 239 231 +255 222 206 +255 198 198 +255 181 181 +255 255 255 +247 148 148 +214 132 132 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/menu_great.pal b/graphics/gacha/menu_great.pal new file mode 100644 index 000000000000..fdcf143a916d --- /dev/null +++ b/graphics/gacha/menu_great.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 181 189 +208 244 240 +168 236 240 +136 216 248 +72 192 248 +255 255 255 +48 180 248 +0 116 176 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/menu_master.pal b/graphics/gacha/menu_master.pal new file mode 100644 index 000000000000..0321fbe91379 --- /dev/null +++ b/graphics/gacha/menu_master.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 181 189 +224 224 224 +224 216 224 +180 178 192 +152 152 184 +255 255 255 +136 128 168 +88 72 104 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/menu_ultra.pal b/graphics/gacha/menu_ultra.pal new file mode 100644 index 000000000000..2374be2c3429 --- /dev/null +++ b/graphics/gacha/menu_ultra.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +189 181 189 +240 224 192 +232 208 160 +204 164 92 +184 136 56 +255 255 255 +160 112 40 +136 100 64 +255 99 57 +140 140 132 +255 66 66 +198 66 24 +99 99 90 +173 57 0 +156 24 16 +57 57 49 diff --git a/graphics/gacha/numbers.pal b/graphics/gacha/numbers.pal new file mode 100644 index 000000000000..f00c2b089651 --- /dev/null +++ b/graphics/gacha/numbers.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +40 40 40 +248 55 76 +255 255 255 +75 75 75 +37 37 37 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/gacha/numbers.png b/graphics/gacha/numbers.png new file mode 100644 index 0000000000000000000000000000000000000000..ee32a79de538c9f7c7d07e6bfa835d2e528b0e78 GIT binary patch literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)g&9a5&NHwEQtTz3zOL*q8KqfOttGBJdIJ;^ zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Ht{NH|Kg@mp|Nrmp?X9Y+3Q~?2{I2=G4yb@J$=lt9p@UV{ z1IVfOba4!+n6q?JAlCr}9_QxUj$LsMU;dTPp1AX@6?` zkFjS}%Fj}NzHEBsCDt!r#A+70Ro{8|f8{IpdgiCe^6c|`<$d}^%1(eB?&<31vd$@? F2>@L>ah(7F literal 0 HcmV?d00001 diff --git a/graphics/gacha/phanpy.pal b/graphics/gacha/phanpy.pal new file mode 100644 index 000000000000..57ca810fad73 --- /dev/null +++ b/graphics/gacha/phanpy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +172 213 238 +156 189 238 +98 148 197 +82 82 148 +255 0 255 +255 172 139 +246 106 82 +189 57 49 +131 0 0 +255 0 255 +255 0 255 +213 213 213 +139 139 139 +16 16 16 diff --git a/graphics/gacha/phanpy.png b/graphics/gacha/phanpy.png new file mode 100644 index 0000000000000000000000000000000000000000..30f268a7310577c16d39ab69cd3cabf0183c98b6 GIT binary patch literal 1132 zcmV-y1e5!TP)5B^D_Vd00Cl4M?}qS(4$2F00WRo zL_t(|oRyW&j@vd6#?3b{vC(BO1myVATRbLKn~TthIvX}cAnk<@u?Gje3PH5J^sp$f z>Lo~nqOIS~kO*W?>Pm!#x(@rT4kf~5w>7-dTYz;aVJ^d` zuNnyu+W>rnAZ;|jW_>2`L?qP+ApVX@#IMfahQQ|dsXKGh67U^2@Zl#a;mzNFXadPy z@^g4?b9)MBk}~-P0TcT5XX+D@3O*u;oa#C^$vpwKFH|5~^;COoBmhNwWxXNLsA1*C zFE4<~&*ATSPlr@70LHm@nNnV<-T0kFgHPKDELe-c6fINdtUIl zzW)~c8S5+l`2K>RKVHrWJD?xd`&k!229Z;r8aDB2@JA?^`(p-%5~ks@1OcIF1QGfN zfq<+(6QMg0csO)`X_R4gT07`lLSXCvybCr;Tt`R6m-p@gcYNzO` zRTV%bTi0d|e@Q<b)Jrq_JKlRV>d#0j>Lb zMWY&CDh_BknKpwC?01SNDJexfjr#R*6(%2N-Tpv>{O3EkqioRf)SdXNyeSFDAAd`! zbM~c7%5dWJkOl)i0lJ5Jef?RUmjOJMrt4i<`pm-DA64ib1tcMa@lFv@Jz(BU@`u-o zX+MEH&K4+2M)MMwDmuV1nOl>@^*J&=wOxg0J5t*T^vIy=DZDY>^f|~Bcj+C z^ND?Nu-;E+&N>IpANH>5_W2j@)<>S+^mxj;6SbYEEF^s0H?c4m92dOUvAQPtj9_m^ zzNo_LFEU?C%8Hc?FUvfRp0HDPr|~IEMUNm4mh>})z3h!)K?-J1WL&R{ZaDO{NS@^q z%R=Uul?w4zjV^_`XT`QoW^(!YWcvg&?W`vW8h01jh1qG?i#Ryi#mHWi+0S<6najJR z$Q4Hpp4qO-bIk0m>fMj?l_d(N=J#ku{1cd`^Gc!*m|rF9)~`^Wbx2-$m2sK)>8yVV&u$Cl)$e#La}VU@o_n9z{|7YQ)v~R! zoqKnVN6+rJ{EIvK`ESch9sJV1F5$;v#|?iTY9#)2R&3b*_uyi?YoFS!7G13OUvVz8 d9AR8Td|*qrcHPU1(}7XK;OXk;vd$@?2>_|e_8tHL literal 0 HcmV?d00001 diff --git a/graphics/gacha/press_a.pal b/graphics/gacha/press_a.pal new file mode 100644 index 000000000000..d371a217e8bc --- /dev/null +++ b/graphics/gacha/press_a.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 255 128 +240 148 148 +96 96 88 +208 244 240 +168 56 0 +248 96 56 +152 28 16 +184 180 184 +136 136 128 +60 60 52 +248 216 200 +208 132 128 +248 176 176 +248 250 248 +248 192 192 +192 68 24 diff --git a/graphics/gacha/teddiursa.pal b/graphics/gacha/teddiursa.pal new file mode 100644 index 000000000000..11192e2c047e --- /dev/null +++ b/graphics/gacha/teddiursa.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 205 172 +255 255 255 +222 197 115 +197 164 82 +164 131 57 +123 98 24 +90 65 0 +255 246 164 +255 213 123 +213 172 82 +255 0 255 +255 0 255 +222 222 222 +180 180 189 +106 106 123 +16 16 16 diff --git a/graphics/gacha/teddiursa.png b/graphics/gacha/teddiursa.png new file mode 100644 index 0000000000000000000000000000000000000000..20a205117487c8f346343f89fed0c06922f691dc GIT binary patch literal 1240 zcmV;}1Sk86P)2L6CLF4`Z#G9VS8Adl>-?IITSegO0FehvYhWILGVrMa zWI4sNfXj3i%SZq=*C3DanKB*GFf)b$H6Sr7ulgm7O(%>&asu|NA_aJ=fQ7+^VL|H; zl}A}Pa(I4LYh;TJ!%(kPztkPo(LBA2CX9uK+CWP+2z87M=8p01ma+-lV06zPhmjk2 z5+v~}-nDIKx+=3Lu@{ThuVIwQd5`~) z167@Ck8(_<0A2RZ;O}D7%{3qYs&67b|oOP=>NoTcQ+f`lM*8_47O{) zC1J}fQ~w7bgPCEH_E;pG-Wf-WeV7gozfqRZw1@F1rMjt#pJV^{`aO zwQx&(X3I-K1WLFhf$~`k7iCJ5)d7oCMO^*f8X1OpB9Q0jy;%5FNvLv*3(p|6 zUaHc&q1vI06r!k1r8Bu}5<|?gv<4h=de@n_gRn}22-leLmxCmdzziMu_Sgldh-BuL z7mTp;*Hrb*@}gS=J=Ftrm*~hJf!83VM{G6PiPDQzyg~u>Q4Li&i0Rz&_wz!7hIN;* z*{A#j_*ua>T}Kb0#=RLvK)R!!>9f8BkYOkfh)p9Pmzo z&oGa%-Zi5cFrX{Fi^T$=hvig-ShpM#|V z`O-(@H*le<*~3GrP)jShvJN8uo_|>+K6e!Ie~yCh(~e@4;_+)o!4Hq)I{u8?gJ_@} zWg6e30Bo2h(ov%SI*KnHMNJ_o(o08)ZY~^U5a7ops2!yPE&vw3b`&csHvaz9QE=0Z zt-;mzBWLWjwixo|&2hck{qhmdD9=A(z5q6L-#(P7&;MjaA#9uV`%mRduL|tsC>8zP zm$Nj4>SAx6$_Y}yTYYbqz?0AMqO3BGlqb6X*W2nO2z>1PkFEY!H84~FT&5hyEb{OS z;E=Dv5IOG?PKaSS^b`nL6&E_FB=9dL5twK?nES^70000lt7hLPXI35Mv%@P&(+ocIC# zyaf@4YUSe*@Q{ih#$Ty8$E*4CxFkoc%DkL;#Z-AiG22>?WvvW>xNK&);ezgr72q41{kPY$$>+P!I-t|5r3W&CJz-ThZ9$%jIf;%XJf8cUCa;j2eFAO(3oJ z4ti+W-iW#zxFZ#(oVis)ofFzu{UK-l$MwR$np6XoP3GL!tlx_L=a!_hdR`kk@_Ozo yufv1S6$9R&w-ArWfPur^^ed~)_aV<3&gb8>3vUZAKc|hzt~e7#av&1PAAAQG6$HNk literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_03.bin b/graphics/pachinko/LevelCollision/Level_03.bin new file mode 100644 index 0000000000000000000000000000000000000000..ed54e8b19311f9552e9c1b7e47264047750d8f82 GIT binary patch literal 704 zcmbtQK@Pwm2xDEcePW5H{r`&tl>l-eW{sexEr>)V4n&;M5y^fFf|@6maE#SAU!e9U zg}2Y*Qr5x?lACoNHE$1}GkCl7U9roDw{x*wKk%?iW8Z(_1}vri)Z`0ZNpc#zs@CC^ I*CGD#A6f+ivj6}9 literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_04.bin b/graphics/pachinko/LevelCollision/Level_04.bin new file mode 100644 index 0000000000000000000000000000000000000000..90a6140ddae84c6ea5df586f549cfe1ef27a6d60 GIT binary patch literal 704 zcmb75i+gf66lpxx@@?W*t=PPDd`f=euOhGxL3NnOSeSn4FGWbf2HFqoN^q$EPzX d3qd~gblm;Ln>UNIz&2Xp7TJ+sL%v)2q2K=u2tfb< literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_05.bin b/graphics/pachinko/LevelCollision/Level_05.bin new file mode 100644 index 0000000000000000000000000000000000000000..01949c59279a7acdefbb910c1da67c37e3ea3ad8 GIT binary patch literal 704 zcmZQzAP5+lPysWl4pd1n4@ChH@(e&VC>YrQg8F69bjvUyYX_N&4$$RM>;@`EmnWou rpyh$?M@Ce4KN}M}6BB~KFrPscWW5rI0I?wQFjeS*1CxgZGG+1ric|xp literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_06.bin b/graphics/pachinko/LevelCollision/Level_06.bin new file mode 100644 index 0000000000000000000000000000000000000000..768467ba3298d3218c6c3f9bda3bf90046a92bf0 GIT binary patch literal 704 zcmb7<3krZh2t>`G&JYAa5On_&=9ipWsFiZpo--QJXAF!nq5`2+(C~v3bA7m1&%DMI zKb!iA=UfH3XkB|9Mx_Q$dkAB?)DR+4a>lFoCznqU k4esVSqBe-qR=m^8pAK1(7EO9{o?S56i)tS~2VEWf0*_1uPXGV_ literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_07.bin b/graphics/pachinko/LevelCollision/Level_07.bin new file mode 100644 index 0000000000000000000000000000000000000000..f3f780a2214b0590428b179d76aebb1e3d464f5b GIT binary patch literal 704 zcmb_Yiwb}+2sDHGi9rwq{r?x{18L`?G3pqKyE}Cw>SAKVj1DBN0zr>2A|N}F%8=i! z-b80VGe*G2!)9@y+nW8y8j6SRP=>ggBd>i;Dw9mHx9-)u>+xu2yVa?Rq0;`}@V_7W^Oow5h;#ZjElS;clQJ^1@Z# Wx4h$Y+ds72`EUW}c8LC1l;AIbX#{)# literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_09.bin b/graphics/pachinko/LevelCollision/Level_09.bin new file mode 100644 index 0000000000000000000000000000000000000000..26bedc5353f62410a1e27847c52c8b609d9a73a3 GIT binary patch literal 704 zcmbVIK?;B{42u!;4T7+f;QwFfS{bzQptY23B}>v4c#VlU=FG^TSLwqC9Ar#Z`D!8j zsNLV)EQXT*;NlSF-B3KL_$_~qEmiy9NzZXt`3u*WkNu$m2eA3stXYfUBC}gronIva F{{rE$1Ze;O literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_10.bin b/graphics/pachinko/LevelCollision/Level_10.bin new file mode 100644 index 0000000000000000000000000000000000000000..6487b278a687a421ec2ff05544156af75360a7e8 GIT binary patch literal 704 zcmb7Uj#Hf`#K6c0SJte6Uq)nKn#E8hXG8GcY6WY9kigh!L(`MNL|!cW(QdIt4TgB5z>Y@~Wn!d$=2^(N zU2;b_kGKv+w@UqCF0kq|aq;zyx*;q9A4^8@{oujtlveF#>UU7w0sjDbj|~z4 literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_12.bin b/graphics/pachinko/LevelCollision/Level_12.bin new file mode 100644 index 0000000000000000000000000000000000000000..a3431655a82b235ed4fc41dbb114cc3735f570cf GIT binary patch literal 704 zcmaiu%?blC2!ySLmM(=o7xr4{`#)hvqwJ`M9r9!HIg^N7>ZVoq>Zs69rQw>3Dn?E_ zvC_ZED@(@aH0`*2uX6f-2E21s91tGf7)So*JbutPT6Rnu_(z@1GEzjX(5>OIjP3uZ76RSF4?83Q$+`cbv}EHfZ_ZAKxMb%K!iX literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_13.bin b/graphics/pachinko/LevelCollision/Level_13.bin new file mode 100644 index 0000000000000000000000000000000000000000..5cd6e51e214c2162abe414f6190e7ff7133c0046 GIT binary patch literal 704 zcmbV};R=8-2!!o|dWK+sgWmrMQ>UR8jCRQ8_`KU-L_;meTC*cVJ*9ymZy?0tbJWoP z9*A~A^K`ppHlK4$Ip1QHT>w|%O2q96U)-W~o8bLoUPTlBZnU-dH|!7AzHmDE1KoPa RXNvq4PQqUNf%NtVzX3831it_P literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_14.bin b/graphics/pachinko/LevelCollision/Level_14.bin new file mode 100644 index 0000000000000000000000000000000000000000..6a2393ad425ac11d860b8f42a20515fc0ffa6ead GIT binary patch literal 704 zcmb7>VG6(?2!)-4y2M~G7F*ADgtz`jJGscr ZWbwxhboqBM_xsPk;N4?b^pR3t;2-RM23Y_A literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_16.bin b/graphics/pachinko/LevelCollision/Level_16.bin new file mode 100644 index 0000000000000000000000000000000000000000..77ae6d88ee816da44d0d0d4fdc26d1057b42eb0a GIT binary patch literal 704 zcmb7jV+D{>YT+Zr8(Dl?AP)B G{=t6%PYO8z literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_17.bin b/graphics/pachinko/LevelCollision/Level_17.bin new file mode 100644 index 0000000000000000000000000000000000000000..0336dc7552dd500b5e9ef947e501ce65a10f6fe6 GIT binary patch literal 704 zcmb7AfenB#2t!Qt1``hO{|klIWinCYvM@%WB^CKRljbw$i45YG8dQxf{TXoGqs1hG z=c*&_W%J8W;DJ$wSuyVt&JUrIKiGpMh;I6*Um6m>IdR-Y*On%no0-ZcO<=@Xf7W;W nb$?7^b!G+stA8Kh4e6HMzKCAjFr}$Xesd48`A4={S>&4kfXd4<$ps$1)c<Ac z^b-g9l9OD*>~LCE)nwat4`XR-f{b=Nx3&b!$AxtCpdNSe`m0Ys<-p8x;= literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelCollision/Level_23.bin b/graphics/pachinko/LevelCollision/Level_23.bin new file mode 100644 index 0000000000000000000000000000000000000000..05a4fd25ffc3defa88d41c984237d56c589b3971 GIT binary patch literal 704 zcmbu5-3ov(2!+j{D1u&Kw?Xg!gdJU@ovmLo$m!?NIgv+el&xh2LyxH74PRA*e~Oc8 zsb9s@An{akS6KrTRQka(WFzTi+M&tKX2vl|e=0BnX~1ZA2rEwNE1u?`@U;Hfe&~Jw iKIjYm@xI~P{W|Ua`kANwWD)0?cb=vcyIV;5e|!VKC0xpt4|`B0`M6u7j(QrnApJ!eNfZ^viyD`>Ed3S2j_2ESouKT0AE#aV zt3L1530`e~P5SG3@15waqK22N)%J1eZ|wVgI&)&{Cl?V zkoPyflbdu|-oGb&H@9T;aGN`p@1>8sdGEcPe=kXje(o{g#(f5PVEN#wncZY06?w=b z9=q{`r##a>O~$&nQ7X$gY5D&jVwe%0Gs+8IYM&*ieU;7GuG=U2#(Y literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_02.bin b/graphics/pachinko/LevelTilemaps/Level_02.bin new file mode 100644 index 0000000000000000000000000000000000000000..870dbb782acf9e2c1160f892e92743f02d5e7de8 GIT binary patch literal 1280 zcma*k2~!g>7>Dr(2vAWDi(~5zA~M^00FDRZ2`ZN;H+XX>B7zEt0&+OwL7|1OOp+zr zZK$2@f40eF`pcU)3pwPHhaf*g3dj|O1UNtu2RTGBC6uC`G7b}@oFf@?l%Vt>!W`o` zCpgI|PHTUL3M#XT>%(%7vs7`8YVFTcgOgQ~UhPpwz4liq6sbNUce^BCHTsk4!(7$= z+MZWJ#f<*ByJq|A+TYk$->qy{cd&g}`v&RFfBm)1$<12iKRzVv{*^R4nqAbGzP|CM zjv19Ob9c1;O?`gj{gsl^zpDHl?&{p*K24U75tlXX#6@iH`#z$DR@!Kn>EJP)mQS#= zPdn_0gzu5Pk-{HbcE_c_5XsGyy7)) z7-q!tn{0W#yI;=#>kt=PVpEJV##`PouJfJ=&nMWHy+^sgMe7ElT&7mu!M41G4@~lr zDW+vU@tH54cTd{LEpBU{Zszts!z^=rWu9+*w|p}Xc&L54nIrpOV38$$u*?dpta<(? S*+ltYtn-^c{N*1T+V28Xb#%=D literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_03.bin b/graphics/pachinko/LevelTilemaps/Level_03.bin new file mode 100644 index 0000000000000000000000000000000000000000..880390f7073c22da22a0c33d71153fe3b2be4d3e GIT binary patch literal 1280 zcmbu<1y9330EXe0QP^-8gbjDdumlM1I^5me-5rAeY})HOX_g7}OL|S4=kB|vDTH7k z6p1h&3CAEAF%dx|QA86%EO97DJPDXdB*|xzG0Wb9l@wA*Bb^K~h0h|JoPeTwt2{?8 zdE`?dd?7{H0*cEkb5u|%d=*AX@#T&=)Y1K{J@fQds)es{c>f*rzE=3UKYOe2^-k}( z1Ff}d)UU64i=^&9`2PR(4WhrczPC57byuG${aa`iX``JE5AVN!4|aO#qhHPdgA4`h zO?J~TBaF%!W1I<{59Iw%GQ~7A%reKk&imMb_(GNaFR;iG%dD`^tb-s}%nuYgvWkczI#yJ;Ua>X?_I^Rhb m-NJjjvdRCCTkg2$fk&Qr=Edn>2_%YtoUy^}!bz4sCzlmyX{K>X#b*BrM#%*n!^ ztX+@&X7-z18G;BV1dY%D3L{tx$3X;5|VNlPp^@c$dhLO%A!_Nj{$f+_vQ7^&F*?NxqzL&5cK7Q124IXZ@X-cTpkvO3B+< zfj?g*`RZq0t!_1cUEd}78jJd$`9j^Rp7_@{c&Fy|@AKTuH@?60!y6C8zsG;AT)$D@ z-2J!xf2Cfkfkv84ytQXHzIY3*w9!t7P$yk1{hR$yZ(Rh zlOcxr#R#J&-paEYGxmRsaVD5#ifLv{ys?6N9+Z85(C)?A_G*?n=2>7-YKdhF{*fo~ zeIZ2@i}6W&RQMHES!10Ip-r~fw&0CgzMgw)>!W^tcGzW)eSUMm;hVg%7b+{};{S2P dAC5WUlr#SF?}b0dj&%NlORl))hFk6={~!EiZsY&} literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_05.bin b/graphics/pachinko/LevelTilemaps/Level_05.bin new file mode 100644 index 0000000000000000000000000000000000000000..4eb73821284208b58acdcd81631ae5f04344a613 GIT binary patch literal 1280 zcmbW%g-^pk7>D7PQP^-8gcWzlAVGt>4tIBVcZcAAHtm&cp|Gu8e@S~u^L*c3uPp>& zAsC4e9|^@GS+NmDI1xk=MKm#}M=WvJi6_Bl60s}ZflLy~q>xG)>B47_NtU5#URG*k zlS3|f!sk~Wh#ZQa(jQX(EDoPYlJWK(_6i-_pi&&0!6Z{mGsCRTYww-6v$p?p%(K8EODwaZ^ZuUSDr>B>!KTO-+g^PUC6xa8rgqq6 zk9`i59CF05&ezjGqfq~iwE3TK${FWeaLJXU zZL;s%_uHLJAcj~T;2|!8;)(Tm@$rxZ9`TqbB$9-FC6j`mRGvmuI)07MAV4NrWRpWK zd5X`cfM-!j_<&a9IWH)rNb$v#5R6I|uh*!iM)9xkdW5f3Rqnb6vGW0H75~QM?{neg z>l9ya<4cu?GRmn?kvvOfCm&FJgN>J+jWp4GYbNe|hDYyT&XL}Obkaq4h?jSIJ`x|^ zyW!bbjhvHztNhFP#-2#4&bQF2)J8iUCSOJsFKzuAok%^&_s~lp@95VwzmGe#h0lCpRp~3=TzNU|wenz`EcL###yUUP(6q@G+Ya8EqFW^2&knonvCmHq pICSvV6y2hr_W$_B5x@DvF(;gIX7YcDMmm4aKQ6fBifjHW{stKjY{CEl literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_07.bin b/graphics/pachinko/LevelTilemaps/Level_07.bin new file mode 100644 index 0000000000000000000000000000000000000000..049fac645c333b068ce2022778de4119dab2c257 GIT binary patch literal 1280 zcmbW%1y9339ER}+7%&`$thhtA;RJWvaCdiicL@HmX|EewNrADxNqg7icmKQVrQnA@ z0T>AUB|-Qbf-w?8C}D&XK_pQqS2Qu0h$ZgVBw&)g8Hq%aNG63;(u7YZgG{fYdPyE5 zi)?bp6+VxAEMCR!l`%>w6TX~agVpJa#8bUn(Dtloy+noZm9qDxzC@Mq)lToKs*a`C z`(9rXzQ*VJsy7>aoxj`rwtux^{{O4rNRvo2EwujA+i}oI7u|At=%r8NU29PHU$193 zI*k1cFeqn;VMa9m?=zr$zfr~*XM#zlnAY|29%tFJZ4u{hhFRvAXMshQbp6lsSZ0M) z)>s$WU{m956j10<+cl1jVoJpOEw80P+&L=EA9~ZfdmNd?(XjH?h^dZrgvp@9hYTUpQOFJ^kzN*d{8kSTo@+2r^X)9c0_ zx#W>gf%JtGQS4JJFZL*-T>1(^wNmNLdok)~DR!?@DSegU{i&~0Eq#sBmncr;SznjF zR_Rq8seQ8MZ~ta}mlto%>e}@V%{6o8S-(#9@A9gS?Q6m}(Ja$KD{V?|RkpsQxlb3} z^w3M6k$wgkRC;?&_gR;t+cCs2BSuCUW8CJgvkRk|iT)>;WQu8Km}So9g-TR>b!$!d zc@|h?iDgz;{pUR^+q+m}oeehGlG$cQ>D^CkAMdiqJ_j5cIpUZTg|DZ9#@|!8kHt=+ z|5MI5=YmVFxK{XfI_UiM?qkCn|BoAPx#OM(9(m&V&%fYHgn#9YcRu*!i*MHypOK^7??(XjH4#7V*?G?6l%gP3Olgp*a?|<)g%fJtR z0+0yQNf7>$0VBbL5K0)~L=cJci6R;kF~sU79+T|NSV$m|B$7!XRroa0$?z(wx5zUx z$s(H^;d9Bu>Qx+GnNdQi@MRbz)fbB?o>nVbZ=pi?O1uB9g{!X;zWUGJB7Dua_taZ` zu5@!fU-f3`=l;I-|F5qV{hiO(zk|}hktUI5T4;6i`ZwsrMi<@m$mykzeqX)OW*lIU zAvwd0FzVu++sC>6melt@#yAs9GQ~7AE?&RA>Svi_o&^?JVp-$!#fgs9v9qG?S6F3@ zbv8sc+0ys|3MmpZlpf{wo#Xj7JM6N@zMKONInww#>S@5!s?1crzhh1~<&1MKxYYPI m+Uda4Dtr0= literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_10.bin b/graphics/pachinko/LevelTilemaps/Level_10.bin new file mode 100644 index 0000000000000000000000000000000000000000..190ef0171864528d4918f3d3dd772025e8ec78b8 GIT binary patch literal 1280 zcmbV|X;afs6owyblp-Kd)CNHXM40-)83YkU7Ey|9u81Ow3%H;Hf{L=rhzgx)r+=Bd zw8?EIv>Efx+#l90pX)$Zo982+_{@UPB1?S9;XAoSm!e|$$I|~Y xD}3b}-&y5H4u6Nc^k;bASnTg7Ypk=uCR=Rt%i(tjBFX<|mp}aFAA9U8{s7)7bZY55J;#BNH0pW#KWr_;|=8vUyAnx#S_9dbf;{CJ zC6rP|x#TOTq$({bK4@lCQ$sD!C0|E9p|oW4BBPNe$v5LQ8c<4}BkE2*$P3B0#PIGM z?Ihw~O8!*>K9;h_@%@96Z@niUFuX?S|NiY>?or6Kf7M^{`sCc4a8xyZ{cUpnnh!hf zQ03@U@ea%WZ|IcjqMNr4Ue9&r2u@cbMCoUMK~qBvGh*@f96dLd(_X|E^}XXgqo&3f z=Yz%T8HsX4P5EN~6HGG2G&9UH=i=jYoOyzuXMsgNvcxhgNqL>)e6O;`I-mF~wZW#v z7h7i}z63!jN8g-sw)nzVw%IYY%O3j{FY4`d@H!?(_qKhp{sX>o$PwQ;=7)ptp_je{ jyyct!kDvVFHz%BO#yNj1{(^KQ_)D(1=7wAD_$&E;zRPN^ literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_12.bin b/graphics/pachinko/LevelTilemaps/Level_12.bin new file mode 100644 index 0000000000000000000000000000000000000000..93209c94600c8f6d40f9f62170208201712d1810 GIT binary patch literal 1280 zcmb8v_cI+)6u|K>7Eei{ds;+`d44cM5WV-7AbJ-hqW2n%ZiewM+k3CI#d|z^W_Iu0 z-Ost_+}T+OAdnz5f?tUc0<}{#G z>C^c_hF_t)ThEb67TM%T|CL-keue2pjsgm$|3;`Le7?+~&c@8Rs=IdYrdaxtCvVnp zr`_rqZ@F_+<@DdBFMZ)3w0qs(^YDguOJ8R3@z28O!-ILxxxVs=n(E)I-`B_=uX;B! z*!RHc%Vqt>`l@2pyRq-a9+>-IO^u9N>ZrGQV@==JW?E>ajdndc=%nkt-qqsj<_ACZ z=%JTBi_f!sJ)&AMS5>RCn2Y{@(a!*b3^B}z#rv+>d?NfPV~jJwBvVW~ysAOH?`=H8 zZ)TZeUdA8(I=odD$$qR^JS^~!MV46BV}(`LY`%g@s-*JZeJtu80W5942vf&OHKak+=?(XjH?gam{>D}l?yRsDeB)!__z4zLr5P*e1 ztOWTegFQvm`@+QuaW($^Z$JBUYQ`Pxc9<0&?wVHGc6kLHR{~zsNU(I zlP$D9p$dHm@Mi~907yXYh&IFT8G0lvj|G8rKvD%05v&=Ei z0*frMZ0Oaeea976S!10InN7A#`m*mYxy=r{?6I%pfJ2TnzLq-beZIL1?{(4tF(;gI t#yJ;UYJ4kgv>SNOb>;tY#WgqFa>qRnJbL^SW+MDEFTC=`J0E;X{{@=fYC-@2 literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_14.bin b/graphics/pachinko/LevelTilemaps/Level_14.bin new file mode 100644 index 0000000000000000000000000000000000000000..30d92e1dde27b94ff6ad75fb12b6cc3a0b44c47a GIT binary patch literal 1280 zcmbW1hc_HS9LGO6oDf}{-g!!dc!=n|_f8NkdPziy{?z>0rrhrB9?u>7eLMTxnf=Us z=R5B$1Q19N4uW4%2!W1JoP_a#a3c6fBvHsKniyh*`0*7mZSdgwbW7X=B@Qh{CDNwSYNwurHyvM z7m3@bt@$_5sMJI=EjHeF{vCAEMK?V{z4X!lR^Hj^9AJv2)c7s}Lp zp1uS&*kp@sc7%4>W8dWESJu;hxt9C?%^wc<%OOV`+j!4uTTk9ni~q+7|2XB0b1t~# V%H*%{N0PtcmOJiw;F14|e*%FvY(@Y8 literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_15.bin b/graphics/pachinko/LevelTilemaps/Level_15.bin new file mode 100644 index 0000000000000000000000000000000000000000..278c9dc0ceb071bcc9077a0463a6b02795969a65 GIT binary patch literal 1280 zcmbW1`A^h99K}B@)m;t+7Q+@$5V^9ekN{B*LFI54xlcvzTaf$q03m?jpG{}R*=?JK zY_>0*PG9nQ@7wvIkcN+R3?AI0hxiOX0W!!Wi)k5FOCCY;d2+7`2wHpylR}Cp z<|)r8k$fr7DN9Oai=02f>o$G% z;;B86C-`@~m-;|E9WLIh)9yuy(ak4%EcMbyzk^q;_HM!2-Dn^d7+{bgOT&yX>fr57 z-g`0s7~_2A3ln^0(#7j_G4K~@bw9O8?4*o5zw4qi-xE(S79{U_{$Pve!IQUMw_=s8+?{cjF#}9t; ci{G4b#vjh(`~}HK@RwY1&0lV~<)7s50NYV()c^nh literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_16.bin b/graphics/pachinko/LevelTilemaps/Level_16.bin new file mode 100644 index 0000000000000000000000000000000000000000..47cc5d6be7eac95e93676020ab4186fc8fd38358 GIT binary patch literal 1280 zcma*niBA(j6vy$eP@pJ>Alf3Q9GVt25h4Pj+=qw)A_#bbf{KEIT*?^`OvWbwBCb?uq@`#epMJ`c5Aw?7;pUad`$`#7e<{G7rj}fPw z>r_xl71heuP|J;sqJ7+{QAa%uG%A0STO=}y^-|*=&C0is7fC9AS6yW+qu^W;zmIcY z`BvBKF0?b=I~Vj1ly7sq{dJf&-v)hL`F4*t+K8*}j$|g>$0D-65edXd9aGER(|aqd zPx`6^eTVAbtgm}8tJ#k1sfd3}mr6H1^!mKstE?^Y?%Z@X$PmLkVZ_N(MtSD*`lRg1 z>t|g}j|Zbe(dUdY?qq@&Oon)~mIzx*cO(73WQu8CF~cl#t~a|j@5?@W>xqBO8{YDc z_k3X9^=8+)Pq}*gHdPn+$R`$AQu)jmk5ACVZSFWS7(FjFzOu|WzO&+Fl^^`{`G<7! zD5b;4(*GLk{9=Pmw%GRhKKdC*`OvZR|FOew{; z&6>%+vpcsv=e+0SPT&9u%5W$zqJt!yBq=JWq>5?|ahM~>bCep=)N-t->Ph>22AAWU z;3TJL;I!f!IYU!P(!A@(Xr_f$&MN*K=V|lhsjrOwH?zFNXs1K*og^L2)CEyIF8qrp zQDt3}&%0by{H1``9y~<~XGigTx8i#OUNicvsV2M@&F?C{H{f-CU4`~L4-&wF$QT`*A#`99@e@=K@0vH4!6pDUrc-jn*Ta!u(vHy8-`aL>fW zO>Qx$egWAr6=caV#4sbiMj7LFgf}PUym`%<#L1>|sd4Ub*VhD-+>7Ol_y0aqJm4XZ zc+8UsZ*$tL;WerMDbJW@hUdIsHo_a%hKb(4Ip$g5C9jlT^CrUE+Y*2O-?GRO%e?dT zo)uQ}c*$xNHxvIK_{bXTZ19QAJl?W0%IDRd|NpVYXTGq_4qy4k_kjOFDH8rCzxd4` KcKOSm;`agBB5Ab% literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_18.bin b/graphics/pachinko/LevelTilemaps/Level_18.bin new file mode 100644 index 0000000000000000000000000000000000000000..df5d540f4965eae944f7f056746502643e8ce849 GIT binary patch literal 1280 zcmb8vhf@TB6cXvCyl4N|BDV0R;YRZ+AIzce&hz z{AQASxqRNf-DCm@cu2&{6PG06@%r$S%u`ZGVoG=!SCkLxJxVE~oC@hHd4(2NB3|^Ur$PGH_`Frp*SS7dVf8^8rEk)`hUyS| z4sqY^-$>sqy?Y1M-R^_Zx7>Tt!MqO*wIAc%==GJ)^@{n87@t<1j7r^gUf=4CK2EQ8 z-zw)fe2(e#HB@EnK~=(c(k1hjZh9;}vZ9(j`b0y7dB=M`=ow&;p%^~W$$Ay?hyBBh zFsf&aaXy;7`Q*j9i`x8q61ABB6Q7yj3t#!hcayiS8q)sR(>DmN!D2BC%^cuXM;_)Y`%?lI;3*CQv2WL4?FC#$36!(-%B6;(mP#g h`v1ovM;!B)6HYnf{J~!kPlUhZifjIH!!38x{|72%YY6}V literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_19.bin b/graphics/pachinko/LevelTilemaps/Level_19.bin new file mode 100644 index 0000000000000000000000000000000000000000..425b656604bdded0ecb12b2a9c0ec16baf06e729 GIT binary patch literal 1280 zcmbW1i7y>d6o)^IdbQNn)=;YUJQ9>t(Naq7`_|G@t);DA14ZBZkaJn|_}d?7{n!%~o!HJ($U_)21|QpMl)yw2OaP<)l(@8WOs zQt{OR{>(bHPB}9sac50`Tk$mk{=z!9&bbhLvAE?dG6u7Ly!kZiuKjC&Z(e$vGW}~+ z|C)F2e-t2{DC@}glCS5DQUi^=b@6hKK0nhnm~Ww#HrnYB>ZFTqgV&_4qWigCvBlTw z>!FuEp?(G!^yF{)I~m#k5W|e{o)3&N=Hj)Vp4f5KQRkfbKk|ujCiu)GUtGN75h{LV zifLw;RrbP@1m}8y=7KN5rX2sxN@tQitd#&{Ot+K{Xe({?>{5AL{ nnt7*qua#f?Ki1h`lP$LS#}2z!{2t**^7|Zc$bXJF=0x$A@GWsy literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_20.bin b/graphics/pachinko/LevelTilemaps/Level_20.bin new file mode 100644 index 0000000000000000000000000000000000000000..5abbe8416bf9618c10f69a9df136c086038f616e GIT binary patch literal 1280 zcmbu8XHVQf6h#ltC|E zN)=xw_(wd73hcw9J^JzGimwoSV9uO*?q7P4qf+r!?{aSb6FIl%UE2Hlzn!mA{te#j z*FV<%*HN$3KqE~S-n>_KaVu@K)4>m+PP*uRE$?V^^w3M6P(K3<`go`J^o>(6_FrFf z<5c@U#4sa_GR8O)K3-<+92;vgFVAn1DW;j>C$r3%c=@I56zGxpU(B<>B1=lktXO!X zn|-v(8tZJZDYV5lI~Km08frx!H+GTk|2MnrvCjdA99j5gTKKMbyT~o>&oL*Qa>h9q XTyo{({}7BM|CeiSxaA*r{8#)FBHwNn literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_21.bin b/graphics/pachinko/LevelTilemaps/Level_21.bin new file mode 100644 index 0000000000000000000000000000000000000000..93ff98558f5900f87ee35248421fdc43325d0673 GIT binary patch literal 1280 zcmbW0i8CBQ9ECqjSU2lfL0lnfs3Is5K_n8^kxSgSxQR1CA_x^kw#wH2%es4ZXJLh1w5pX zB8quLiQ-EsqdX=Ve1WJ@!DA|^Qv4ID(PL7Omo*w_RD2Ujnui-zq0Z9lSl@0mkKey! z4K*viMetsHcR28A-v9V#ihnNn`}mh0WNY>FR<}BNem~aL(EI`3r3Ldx_FJKmeTasTpc`MqpLP3G@$ zxE&w($S0veJ~L$Uf&7u(2kw8E5k?tfoCzjPKKA@mOf$nQbIkK4jJL01tjd0YMV44* zMQN2aTVC$0rJko^4AnXtd}Wg@p>1~94ddHrr$aGzGvogD_{MkkIpB~VVf-83(ye&A inJ)gHpB(XvV@^2bH)ke)PAroAA1=7$ioaa*Pw}_z5p=x( literal 0 HcmV?d00001 diff --git a/graphics/pachinko/LevelTilemaps/Level_22.bin b/graphics/pachinko/LevelTilemaps/Level_22.bin new file mode 100644 index 0000000000000000000000000000000000000000..f98aba222dafcaa541dd916c8182965a6a9bb994 GIT binary patch literal 1280 zcmb`G1y3A77=|BUfx|U$NO8&H5}cOe?$Y8d4#jDKQY=^@f$*1^o!Nu#-9Zn+zR7%J z&nGjp;Dt9nX!yP$KfE=6Yy=QU5W$2HN*Kl$P6Uxe5&fcKh!lJ*cH)R9fkZx#B>7}g zNcBjHw+kO>q?19W^|_ef8?;iH%m$(Q1sYRA7yiP88@AmoLZ+8|hki|s|F8L^%EF(aW94?c~74pcZ0Qs(RjSz(t`KpAF$(Iu5 zI%SkoK_yj+zd={$a)6H~Bax=iI=F5kI|uIlGo5C^Z5` zf~1F+3fxK>2_N3Q^Z#@2`P)?e;;$LYReHH~XJ!2t{sCP|-SqGT3#~OO}`&mFYt!9ykk*miDehB{rtxFtgy-lKAKu%oliF3P6wT)gI4;r z)c=_;Y_Q1|U-@S9y*%QvO-D$-4)C2HY_r2Id+hVm<`2k3!XI+PFMjifWBw}sA5=GN A-2eap literal 0 HcmV?d00001 diff --git a/graphics/pachinko/arrow.pal b/graphics/pachinko/arrow.pal new file mode 100644 index 000000000000..8a11a121c776 --- /dev/null +++ b/graphics/pachinko/arrow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +40 216 136 +144 32 0 +248 112 112 +96 104 96 +88 80 64 +248 56 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pachinko/arrow.png b/graphics/pachinko/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..87ed3bb92993b21d8d188ed7ea615eb847f16606 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFpo}q)&EVCbDG#Jr(j9#r z85lP9bN@+X1@a97d_r6`ZgfmgVE9o`kdToO5#aE{0;B;C`1;|h15lbV$=luK|5El( zM}Zt~PZ!6KiaE&%4h(LNj*J}6o}Loc&H*l-Cj$je2!t{pLBj0YAYlL7mGo|dl^UES61gg2f>K@@QHR5M?Q}uM*(606!N$%ci+*L zg9`+_fZuuDAbt*xqH)~;1i=DpSwSb zwSCTSY6Zb?6i1U-6O;rCh{yFw?ARC>1$Sa=1)~6N#mfoj^}3Q^eK>~T7=UjSWCVbO z+@=K_sV~5hG3SE{hh z(JCNNJE@A+ysQh8cZq`62c$!!jYs{rsD2=REVyoh7Sp#>}fu#>T(ltnzQ0RmlR*c5yY ztpq+qv4e{@z*NCQ#eWJR@E{Q&Izsn9{v_h^v3^sfIB|q5C02)zMpq)J;3u+ z0p@083EYR1B?6vIA|>I`txY&SK0Srma(b^={MvCI;CV&?+Ry|d1sufj1^)glSHL5` zJFfreKtUnk?wIox1-A8}Z!txe2q?y}j=|?|iblZ(hZyAV-vR}v_tq37gs}zq2Nya9 z>ZoF{vjZ_W$mK5hLleY|0^K!GE{TE_Q(54s0F~jDgE`f{M<6@C^kHb2k~!3Z-XF$6 zfagKB8ti@!=2YLP0grcfep&?t2_UN_0bovz?-2sfL+!`%PNhwl}j96Z{_;A3GZ07Zi!8U?zU-qklY#=3J2;JpgqVbCuPo^2oC<7E?~79q(R@O~B0D-9lP$Epf=tN;~U;3NeEHyq?gT($IabD2I=IxnM1q!;qZ zWIpfC*gmB}(0!Q#I&^>%pXAMxZ4IF2r?L5hG7+u=f?jpdFVTa-w!Z6iVNF2>@EfVH z*%yEgsRH21o4lT_n}1pX#2K5P6HDq97Z zW1;|ApQa=v?HktUZK|NV3RtN0r!HVFD_75J`{gF}5A1DA|3<($DXjqT7!*MYxRA05{X9Ce-n zct9v4U=XZX=Sqs_q{@OoN45JAKFoOvxN3N`QK7b`R}2D8L3oBaCA1Tg9uX-ZNza-| zh;oxMc~Yv{4oq!DfoOOwjKS~Fw1{o3EW-SFQ80^&o00am^^g(`*?rl7} z(sc>hWx}%^n6(U`M}Uw3UVT)trmv&}f3Q_m_E$Socc)_#4_RoDlJu&WDhq(U$@ept zy0v=DcGz^uj{_~c`NkjtaW2iUG}9Tq@d8@^t$ewpO zT0rQv7z&gbn@QP#6qGCgf?tshukXP}Rf<03V&)kM4!-f=Y$G7bBUPO3yC7Y7q$X#^ z)4%WeetFCD+DyM8;W-*!Cjcow0=Zv<>8HjmjMzj`nVuDKQAM1ocQgyYYX>JAUf?61 zw7n@bCT%DYVJ!tPy{nO60eGDPAX05ngB(qfO_ooQG;Bw@>WG?fR<3+O8_hj=s=lyLcP7L1H88J wTS+LV&$cXp;_#Q(tVck_0F;Dp)1S`%2j8ZGF@hi+?EnA(07*qoM6N<$g1lDaHvj+t literal 0 HcmV?d00001 diff --git a/graphics/pachinko/collisionmap.bin b/graphics/pachinko/collisionmap.bin new file mode 100644 index 0000000000000000000000000000000000000000..416a26cf1e92ecf33fb35b9e51bc925d31c6990d GIT binary patch literal 704 zcmb7lt7hLPXI35Mv%@P&(+ocIC# zyaf@4YUSe*@Q{ih#$Ty8$E*4CxFkoc%DkL;#Z-AiG22>?WvvW>xNK&);ezgr72q+X%|x?Wyr+H|C0bd09o60sv!UX00Cl4M@0Xn2lB-L00U`B zL_t(|oTZh|OB+!T$M>>G$+h795!m1%C&9CEz%_-%%bpg`J$R9gI<6KEAz;WsiU^B% zlLajW3DjWi(sTa==~V&-5BVGVoq4;O`jgTjdA#@LGxOfen@k+%Z*iBM*Cl)da0i1| z2{&?c^%1_L@4NjxgbbcPKkPeh-^n4*Tm@!%?g$_fJptT-s7t`@Ke>cEu%;FW`%i)i z^W_O3aw?AiH!332+hOHAasfjOPOdM z`$YbB^XpYw03c>i)k-sItK>=`G_k(+&Lk$Ix(;Wp&N77y;e~gQb z$6Oz`^}o%JL!RSd^>G#{Iq0DBv#!xgxYRbVm#(5UJ$y>Z)g?>sr8 za?LDBp~jHr5RJr7ctAQUqHrR8C6W~0A|ga{-qqBe7*;?FV$_pF$U~o#k4GvhqyR1e zYbc9&=q_$k1JIMw(yD&Pk~A{|=Zi9x_hf3~&Z#a0uZdr zgW;BmyfE!O0I2j`$?h!O=z(w8tPDgY$Z*fbyyu~tM|fE#9ct&DCEL;>K(Y3f-MznpE2 zw?2}zwmY__Z3BssN#k+6Kk|x27w#5IKwOAkR4k*1wP$MO5sq_hn}q_ampV0`a3!!} zo0N8)u%vR|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Ht{NH|Kg@mp1Hn0`|NkvP%JG5}vz^>P1&m4F?k@kAvVS@X z|a=7_hhHpuSHJ3@0Bkx@ZY`9qxsZx?VuXQ z3d>swf#)-FoP59D&40S3r}lKn%6)44JUyIsoc2cNr`OzZRaQtTz3zOL*qnFJZcbj|i=T>=V; zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ipSB)DTQw$mY2RK9oIJ`4tNXSU|{{Pc~6$f72c+oLqLP0^r ziWMtBX23wyM4xCNn=#4T-R1vM_D@HF9Dh$2$B>FS$q51?DG3Q7K}HDzL4}2B0)--l zX&k&}W@#MW>od|4-n}qLNMQIRA>rgKDG`x=&Lp8@&ekkL=PQ?192F?N7_F>sY|yOY a@QNYevEU@>H4f|`J3U?fT-G@yGywpoP+C#| literal 0 HcmV?d00001 diff --git a/graphics/pachinko/multiplier.pal b/graphics/pachinko/multiplier.pal new file mode 100644 index 000000000000..07e41edefa61 --- /dev/null +++ b/graphics/pachinko/multiplier.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +136 152 144 +168 168 168 +152 152 152 +96 104 96 +112 112 120 +224 48 96 +104 8 184 +144 16 152 +255 255 255 +184 32 128 +255 75 122 +216 216 216 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pachinko/multiplier.png b/graphics/pachinko/multiplier.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ed5a1d50ebd4e933e3ed908a6bfdfa28771964 GIT binary patch literal 773 zcmeAS@N?(olHy`uVBq!ia0vp^3P7B|!VDz)cyd<*DfSXiUsv{*OakJ9@&frqA)P#~0831ecB1Hp|Os`mAia86p}Kzami7?Fi$t zOJ`VoLs(aRN>CJIDOO4Qv?iBvQ5sKZ%@U)GZq*I?BB?qd645r1C-{`PHahiZZ~4w+ z{w4D0hHa&3rx!TLdQD8!57fs6&-m>sqWzc5?pn0ZhbBk_IHeEO;f$y8&X^xxsiaIVo zdG;j5q|MvSGL?H{+@T^bA^Vd)&*!qw+oxJn>(y}edrNz$)BKF=xz^cl;-qrsZ$H0# z=>o-V+21$ibWYhn?R(6n8u8BE89TxrF4|c7F6!~EU%&mTXTQ$eQz{qn*W<@luZFwl zTkh{}vAcN9s{Gmvd$Wi&;;(Y01;o&t;ucLK6VoC{>F9 literal 0 HcmV?d00001 diff --git a/graphics/pachinko/newlevel.pal b/graphics/pachinko/newlevel.pal new file mode 100644 index 000000000000..ea265aa5ac4d --- /dev/null +++ b/graphics/pachinko/newlevel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +40 216 136 +88 80 64 +96 104 96 +144 16 152 +224 48 96 +48 8 16 +255 75 122 +208 208 232 +104 8 184 +248 248 248 +184 32 128 +248 152 136 +248 200 64 +248 248 56 +0 0 0 +0 0 0 diff --git a/graphics/pachinko/newlevel.png b/graphics/pachinko/newlevel.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6dd1e75f2c6ed48363b065951473e5fa9f4a09 GIT binary patch literal 906 zcmV;519kj~P)4Sqv2b000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPR+6&{_9@<%_+j$ey@M=E*im2 z5*afzu!%8%(E$GGf`l(i+H{R5N?0nW&07(!9_Z6G;=aTeW`YlQbP>j~X_-vdahVXV z8M1DQa?KR@0#cY~Qe@U<)xCwyvI?-1Vx(JO*H%NzTZo`r44x1&5)$BJLR(H&#TJ1t zB*;{ zgh~+s2BG3|jv64JF`F{M%ENi6;n0BbI3^(p@F)e3`4k==QrHQVq&frWS&amTb`q3~ z?TpQ;aO{qRE5Um^3(bmcBB^=r*kU2r?s|e6z+-_x9klBS8UiN1L#Br-L5+qd_)&%p zIL;$M4S3R-hqnLGpk0Nv2=8C+)n^jUy{xlu^X%*XKmHFNcPqF_G0NSk-ok%KsPBJh zi#_634Z9Z9=5G;hBKl&F7}jiyV01|rK@WYosME#1s5yO$Jww(_QSX@oUqA};Op4sO zycs&!ByRvaDOS1#c3rb^yoCt5#r6pyCm{tsCbZ?`P2mvyM3M^QSwoUL zlI0FYPs+@fcr2=Kufz07*qoM6N<$f{v|%F8}}l literal 0 HcmV?d00001 diff --git a/graphics/pachinko/pachinkobg1.bin b/graphics/pachinko/pachinkobg1.bin new file mode 100644 index 0000000000000000000000000000000000000000..73c13bb4af00cb457f9b2384c40936ca1ab5f45c GIT binary patch literal 1280 zcmbW#`A-u;6u|MXb)oe@q=GGqihz=GC2H^hK@@Be@diXi0Tl$ixi5iupiSEJUuI{f zJF`wUO+()g^LCQYn|bpJ2MBQxhmrzOO2`Ql;Sh&8!codNMmgeloC>0xpt4|`B0`M6u7j(QrnApJ!eNfZ^viyD`>Ed3S2j_2ESouKT0AE#aV zt3L1530`e~P5SG3@15waqK22N)%J1eZ|wVgI&)&{Cl?V zkoPyflbdu|-oGb&H@9T;aGN`p@1>8sdGEcPe=kXje(o{g#(f5PVEN#wncZY06?w=b z9=q{`r##a>O~$&nQ7X$gY5D&jVwe%0Gs+8IYM&*ieU;7GuG=U2#(Y literal 0 HcmV?d00001 diff --git a/graphics/pachinko/speed.pal b/graphics/pachinko/speed.pal new file mode 100644 index 000000000000..427c01818538 --- /dev/null +++ b/graphics/pachinko/speed.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +192 168 192 +247 255 242 +64 120 88 +88 80 64 +123 123 123 +148 230 65 +205 255 115 +248 248 56 +248 200 64 +255 156 82 +238 49 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pachinko/speed.png b/graphics/pachinko/speed.png new file mode 100644 index 0000000000000000000000000000000000000000..9b6a6863b4d09dd925a2e3c2a366735345d07b46 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^4nSPM!VDy1Y_mZe_7YEDSN4}o0^;fxHZP*3fkNUX zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0SqsIIP_^33t<|KcA%EPkAD_&+D;ogqj+ zGT@x$`~=8nO!9Vj`M;F?(@`Ls-_yl0q+-t7NoNI{3w^NH%`)Mt{PXCK-9Scm;V@q*xKsmtr)?2NnE8G2b} z{AGBP%D}GBrOMFZJt4&C*1yODM^rM}*%G=o#+HRQe6v$+S;3%r>-M)|tqC_CZ)^U= zv{Ws3@zy`-(`qfASHAn=$mC|%abP>Y5W^AGCjNVy&b2SnxMSzjIFsKv;niUghDSmN z+4CdcI!8{+lXq))a#%v3MuO2HM(M``-RPPXt6shO(#UwUUEkqbBcp@rx z`gdP$=etn*g7IoQAH;;4?+$NX7w;!8b>O8l_l}wj29V;2Gt!eD%B&Fx*!>X{Zl11w JF6*2UngB5GxSs$3 literal 0 HcmV?d00001 diff --git a/graphics/pachinko/spider.pal b/graphics/pachinko/spider.pal new file mode 100644 index 000000000000..acb58dcca2c7 --- /dev/null +++ b/graphics/pachinko/spider.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 95 255 +189 189 189 +247 255 242 +123 123 123 +82 123 41 +49 82 16 +148 230 65 +16 16 16 +98 189 32 +205 255 115 +148 123 49 +255 255 90 +180 164 49 +148 49 0 +255 156 82 +238 49 0 diff --git a/graphics/pachinko/spider.png b/graphics/pachinko/spider.png new file mode 100644 index 0000000000000000000000000000000000000000..c4c7496060eddb4d32be7e86f4991651948b584a GIT binary patch literal 2111 zcmV-F2*CG=P)3YjF&Iyk5|tlpg)e)?VdEC6N|7zowa-Glxr3{m)1gq{~!04=l8@4^2~ z_h1Rw@A*{(p7L(i8Gu;%yK9~w(oCaLJ#N-`t4gr~fFd!?@qiWkm3ka6OZfnPBmzAO zw$FeFqs@wn;XpO##%T)bC&6)|@qz*8i6w>Y z4op5Wr=l$_V6ue$wU-?eCk&+ox>|x~6u+9B9KS_Czhwaws*0)?V*ozgs^BW&5wgFg zH;Y2`iz=3zUjm?jSjNw$4IpsIh5iDp^6O6~BBiz#DNKI5$H#%z+V0|^UHRN+CmOaQq>s`T zK2+2BNvQZFer|B{UH~O zTrl3NjY97Jp8)^1qFlN_QO1_Eq6{OJjG_!Nkg?b(iu!v7Vku0v#01NhqR0$jp`2#s z6?t|c;16kP9uN#tl)wcXU2CDDl;UPFQIwl#IYE-t_E1qufv}>~I?oe{DeOrOgk>P= zUUxrH+jb8wXIN)FP7Ore+lNOa0Inrawt+wxV85$94Uj;Two(Hr)yP10H9*(@?hDI6 zD)+FnacrvnIV2Jjhfkd+908@ho;&Xr#z#B9W&jte8u1ZV_ zqP7o|I0KNbZKHyKKb*cse%Ast`~xY-_7P|QX&c~l4u(--fMVkSo(5o_V4SrffOmK* z5&_Y>>;ki=A`uWR9eOMD@BUkn2uLR2&5A@ow3T@7@APHE2#75r|D=?RLSoH<_XI97 zkm3afQjE_xkRrXkYUooI&FekHK*r+4K(Ym6DK(HxN4ZciEJMk56uU-}RV6Vs61v9* zt0Z`-CN&bh5c|6U`bAnJX`YFNE`gMHQUl>CiJl3UK&VEN3I^4izt?0*hP@Gsgc-%QKKS= zwn51?5?e4JPVgaDNnp2d$v2cO7;2f~Xaj|kEf}?Z99#=VhZV&UjJqAO19B9jD2`w} z>ZF2U6vY(`@K{efN}?!^VDveRSkX!p#Sx4as~&E*Q507&Oq_MHLPZ%64Cx96D9V6f zgad*h&J_&)qY{66008&}35HVyp@;?Q@aR24v$Utw~8R`L=ONsF`rvCjsyV1I84kW3jo8A p$-q_-B()Jg43m%TBFH&{@fZ1X@vCn60xJLj002ovPDHLkV1mhPo{Rth literal 0 HcmV?d00001 diff --git a/graphics/pachinko/title.pal b/graphics/pachinko/title.pal new file mode 100644 index 000000000000..726879284286 --- /dev/null +++ b/graphics/pachinko/title.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +110 64 122 +118 155 8 +60 75 37 +255 0 5 +132 246 27 +213 207 213 +167 160 167 +225 173 6 +20 7 25 +35 43 25 +103 117 5 +255 243 9 +112 106 112 +108 194 16 +243 236 243 +78 32 90 diff --git a/graphics/pachinko/title.png b/graphics/pachinko/title.png new file mode 100644 index 0000000000000000000000000000000000000000..2132718f6edfcee9f8a03394520df73afc8590b3 GIT binary patch literal 1188 zcmV;V1Y7%wP)hYy2gf-T3{}(Kbm`S*4zj_}Q|Uht=%Mt`OWf+RPE-6= zl0{ttT_w`{S5Q1HR+Ndy90Smtl&_q~~wFJM@*mcrUPowt7ACg!-S{I(-#l|aLk7;#0S)YpAJ9dVS*?yaKzKr8gM`D@F9Q} z*N>q-K@N-obT|D%;Q9n1TD;ZLI+SLL33Ppd=n)^Bn0ik)c$c&PSyOo*QHSqIL`RJm9Jykx)h(=79hQ z=|@_ekFF@FN>~Az9N=rN1_twOv!~@$`k#ArDU)V+V)i!hpAxfAa)4|p0@l7Iv-3i3 z$AqAp7?U2LOwLoDzag_LB3ESg&4Iz~=0H72h*~KgjH%O!DD0?4dTFE}ok=UewllD8 zcFitaGzSWlRhl??$naEr{%!V<&B3-wV;8{#bR=_Vr>6PbY?w6y90M>Fyk#EM)#LWaA9o)a<66)+FPfk6WMvSY&|(@c!4 zbp=EjkuLNW>TzIF*@ywuR=`4&*w;jjozn0%(Q2I2C36380ZqGzp~MsnRaKql(|*s2qdjIjB&rqHkM27mG&=lh7`<`t%*PY0000|Agn2*MqCxb#Sk?KK`Np;WfFpH1X+?RlE&x? z3Gp-_mEqz-TLi+eAbp2ikt!%fgfRx~A=|7^hwkP7-puapNhcYSE@-$tX6OCp&3kX& z%)Tg^ZgDrdz0o^>*tuJY*v6Uapqu1roMwdPX0K0a6sJ*!Hp3K5%d$uSY4#crI}w*a zoL(~`c7Cb{D81$kW!)NJqsA2=w!t&C4sX#F6_}`N_&|x8#*`y6rD3Z;Ss9afluS&i zcT@xA$gh@V&IU25hmJB0ROHGyQVC>}R{`Q+AeF8=uhJ54umH9}-t!RF*eVgHXUzO% z%A=#^cX=^@;Q@frj+)8K9CGd*ux}SOtpU-mD&^B;^`ih3X|;3F=V6RjiT_Uc>^T>| z{EXKUXsU4Y3k3=u(>5L}V?z)4*}ZK%gwB{~eM~!bpji8andq2%d(co2?G^yW&nsX= zdjcE?Fr;*_a;DE`U|adwY%)$Ok?%tOOvV!#2^rgrY~Up^lyWWQXH) z9|rBvp%b7dfUGAd4p1tIl<^yk99{?j-K!$Rv&Wi>$i-BmAmO83Rx{u%fE}(*NmHh* zL-#@9?Hs}9H2@*y0K69939ZO30RWqind1_WXk&Dg!jz??jLyJoW8+4jifRn6x25%aYnVWKS zy7$lLIMCqjt z%H>F9UzFi|)`8gS?HKwxm~|V`1n?HhskV^~6W!#pv|*AERUa=CBg;uJEx0S5P5`Q` zX_TX+MpZ!YKtt%0sM6`@;X(^no(Afw+%x4(HCwI-h498RdJKeAkiyu&$hcfN}9#l z%ieVT;66Os(67L!kCN~?$hi(Q{qW&=TMqvt{rK0KM?Z z5n+O7i6MDl=8eJg5Wsw>AMRuH1g068*D(otEhD;;P(R$`OS2%r9Dw(MK^XwJRMiiV z7Up-e2mp@smpjG-?NC1)V%`Vl1Tz=JjJ~;)^*YN{{qP%HS~4dOj9Fw@*EecV=V4Vp z9P?YT0P_|LwG%(XPnRb3gE%VTlL##c@JhnX_4=Wsfi$hRSOuP*BQpKgq<(11lr4A; zpd|p<4J=lxA24NJ_U{tFS3l|QLDwW$Re&bt0<;HJuhyZRxtyZYfe@&BwJ{sI0swE2}Xt?~c> N002ovPDHLkV1kRWf@S~! literal 0 HcmV?d00001 diff --git a/graphics/pinball/ball_pokeball.png b/graphics/pinball/ball_pokeball.png new file mode 100644 index 0000000000000000000000000000000000000000..273f981b8219c6f2c2b33f88a14235a358e818e7 GIT binary patch literal 696 zcmeAS@N?(olHy`uVBq!ia0vp^0zllr!VDxo?EWGMq}WS5eO=jKGII&a@b6pq`6^II zyu>x4Bsf2yn2+B^)IMe(pdSV<4Nst3gv9NU@|l z`Z_W&Z0zU$lgJ9>8wB`-xH7b~{5NFy-&6hn|9>YZr)&uZ4h{~dpmSUIeg|pA0J9bM zbOQw$lf2zs{x4&g!Jy^1@?BMamk;nL}`f3xWUAf>g{m_g=C!0k_i#l4k&Sl@< z?@|4E(!Oxp?wgxu*gDU&Nq%|NcwVgLyoZN#A2>P`zZaY)%*yiZh~AG`wk0ngIogz5 z-E6fw-PCSndWrv|NXzfxHXQqp8Y`_ho_mwAKl>(QoAjMX8x_8aj-*d25?Mis{u8(> zn*P61^pbn-VQZ0p=zwPMjj63+W{(Qj-9K>IYT`!rP3a#$ybttm|M%vl)0A(96<>As z_|KdF&+PpCo11^jPioKBd~fUO^?UDD zPEubzNxj-%Znk>=+3h-(iSusj9ui#pqp?ipN29^k1Rv)9kB6=+^4XmKqh(}&f3N?v z%Qoj<9h6wjo+#2^Taj}#Irm=I@mpD|=gpB-e|);;&ek^{3sxMz-dk1RdUEma*44}W z=bexK?)}|%J_!B&JH2Jk8oy2NucoE&pO*Ugfm?Q}VPj#t`%9^BM{We)`mX)^EB~{G VJBeHGwR?e5f~TvW%Q~loCIH!HHiG~F literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_collision_map_diglett.bin b/graphics/pinball/bg_collision_map_diglett.bin new file mode 100644 index 0000000000000000000000000000000000000000..6c8fdf22829922904b8c36547df4e4597f01b8a0 GIT binary patch literal 960 zcmZQzfB+v~KYu6_D;2=R6o^%VkqHejqbfs_1#*X$JPW!9SW(^2hAz*JD$l`*Vgf4{ zH>x}X0}n642tIyvSs@$=Vj dT=H+;zI*@Y@4x@JT zk|UlxefIpz*KgmEgix3-UcP$$|x0Q?UMKPEyOPqi?d14g(R>^ zQ72j~l>u}v0HD&Y>RkXpt=`bP0QD5_SKZ+u+*NnrGRZyamPzVX*sIRVQn#J-TLN@Rb<4LnDevK#7+4*w4nS8!juI`VgZ*r6u L8u@qb|M|QCvYW&2zz9cbn?MpY`@ zQfb+_0ApI`DkU}hI>XEm1#q*-$u41~ge9cX-LOpnH%N)qia0^6aSc9Goa7uyS#u$}=$V@FI-h<42bT z@;NvkJbd){!^cmbF*QS!KY9A>`IoQXzGKl07JBjW)$1QWfBnWK|K{zx_kaHW`;SYW d0pdcO(zKKR4*?MSp&Tp}A$crXMuk8j007ixb0Gi# literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_collision_map_meowth_entrance.bin b/graphics/pinball/bg_collision_map_meowth_entrance.bin new file mode 100644 index 0000000000000000000000000000000000000000..28b8daa11fe7eb41ebdc2952b61a1852b4891fb9 GIT binary patch literal 960 zcmZQzAOIMd&;T>41~ge9mmcy$a7(b+FCd6;1QvNAVOB0Y`URQz_~FtFEEoo`a&aT1 z8Q9R}ku?L=ad4uTfT|g64i7KF2sF(QdpI~BJbd){!^cmbQEWzX#FMAbo`3oJ?K_eX u3iHLwSFeBk{Pi0}5Q+2V?YsAX{{H)qB!t3*IS@q41~ge9cX-LOpnH%N)qia0^6aSc9Goa7uyS#u$}=$V@FI-h<42bT z@;NvkJbd){!^cmbF*QS!KY9A>`IoQXzGKl07JBjW)$1QWfBnWK|K{zx_kaHW`;SYW P0pdcO(t}t2|1bvtLE!&} literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_collision_map_seel_entrance.bin b/graphics/pinball/bg_collision_map_seel_entrance.bin new file mode 100644 index 0000000000000000000000000000000000000000..aecbdfccc13c3454ce00a8703da59d38b8bf3766 GIT binary patch literal 960 zcmZQzAOIMd&;T>41~ge9mmcy$a7(b+FCd6;1QvNAVOB0Y`URQz_~FtFEEoo`a&aT1 z8Q9R}ku?L=ad4uTfT|g64i7KF2sF(QdpI~BJbd){!^cmbQEWzX#FMAbo`3oJ?K_eX s3iHLwSFeBk{Pi0}5Q+2V?YsAX{{H)qB!tR@xDZtgnKx+V{||Ej0AKR}TL1t6 literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_collision_masks_diglett.png b/graphics/pinball/bg_collision_masks_diglett.png new file mode 100644 index 0000000000000000000000000000000000000000..c017f1ba20d9d0f42d2cce9848a51d91f1131afe GIT binary patch literal 246 zcmV!IHUxZ;?hiMl;RRDBw&zr7=QBP`OwJ|Yyi4F0s$a^!Uz}>P`Lt)+eGJn zf$Sf&?M7X1SVG^AMJ89#rOL`D9rUOjx?jVKAxFqUEJCs;AKVA`0Y78GW6@*jIhQ?IJZb;E w@9iBG^~R1Sj!uqt)>Wk(Xxojxe}jAlCu6`6i8*ATtN;K207*qoM6N<$g5?@usQ>@~ literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_collision_masks_gengar.png b/graphics/pinball/bg_collision_masks_gengar.png new file mode 100644 index 0000000000000000000000000000000000000000..6d8fe2b0815733fd588ecb980781ab7d382d22da GIT binary patch literal 258 zcmV+d0sa1oP)LX^y#`Vau2vp#v_IGCo+lo0zaX_Wly#cq=89u$ik2vp#v_IGCo+lo0zaX_Wly#cq=89u$ikDT4r?5LX6<|3Kz{hW|t&o(+qm zfEqXpJR*x381$4un6YB1eHl=Yy~NYkmHjE3G@pPKOXy=appayVYeb22er|4RUI~M9 zQEFmIYKlU6W=V#EyQgnJcq5-UP?4agi(?4K_2dKwCP#&Y1wD)m9vw`I8n;e?OknVI L^>bP0l+XkK-Mm7m literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_tilemap_cover.bin b/graphics/pinball/bg_tilemap_cover.bin new file mode 100644 index 0000000000000000000000000000000000000000..9618f128c37cc9336151924eb5b207f1d853c691 GIT binary patch literal 1344 zcmZP+V1z;j0pcJ`JvvRCZU(r0qxw-pU^M)Q3jx$nL-2^xJ(~UyA%@Bt4L{;S05#MA D-vlcC literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_tilemap_diglett.bin b/graphics/pinball/bg_tilemap_diglett.bin new file mode 100644 index 0000000000000000000000000000000000000000..a4325d8ed5cad061e628f6a5f3cffdd1cf7f6b4b GIT binary patch literal 2048 zcmeH`*-pYh6o$W+5qEIk5=~H1A)pd>pTS+0!23UlovA0~SPsT3E~Lry@0rfO%xNd0 z#|>9uJSKR{9rrw_xt@!N89iFA!8J`M;~alosJTm820P}Iv%na4t5G-ot32@>$bzCI zwZ{|F|A-e}gNC5zdydo|k4^tdZtYL5uMhv=KkO@7llJe>HFi)5?H-j`vZvppZFF#- zgLHxFx8}kJpN9W7JM4Zd5Hx(@^T@Tw8}9}?PErk6XG0d}aFZ zB+g?L=h^UAe6OmDs%|Np-jmA9yH)p|bKg0)s*=o*v}>3VOvW{$VY%FllFG~l_q~jB z$*u_|xvFc5u1QVE<;K+;iyvc@3tVK1X>M_c>)ha`jc(g`T2pelQH{mo2N|-bPI&nQ zd)Ui9_H%$fwsVTpoUyqf4aVa88JMp(Y+)fwHwD>k>9HLSIJLU*~xeID3&UCKSfGM2~UOD(@YJ-0vP z5s!JoQ=YMcl{hb)3#GC6dX=lpaWJP@J?8~4dBtnqcnHT_MmhDd_!2d#Q4Jo0;XNPt z$R|GYC3UI>8fl_reior}KdMu)iqxWJ^;ix=sNc{-Gc6QROkHgMZq=$rg(^_K^3wF@ zkxv1I)KE*euVz7(E_JF}RjO1)n*ItZsiK-rx)#Lw=l9>S4z;UIt%~YzrHytv{?j?r zi%k9QK6r=2+JB#fx#;}Er;Cp==f8NQUm4Y(E7q@%&OdjCCH>*|pSyd8rTM4-|FV1d E7aFa?vH$=8 literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_tilemap_meowth.bin b/graphics/pinball/bg_tilemap_meowth.bin new file mode 100644 index 0000000000000000000000000000000000000000..bbe3bc643b8890592422c314eda1d682a29f28e0 GIT binary patch literal 2048 zcmeH|$qIxp5JXEYx45Ab+(!TZHwPJ*WFVb*^AegsUtaG;MjSYC()SLI1hvyP?05%k z=O*$CR=nu9m5az{LHdfFMc%nR&8O$rV+d|=U@z{kLks1NpxCk#y4P%wpg<``C|NLJ zBl4FjQdFoNRVdc1n0nc-s$5mv$!u$KLJt1=AahPPGMfm%{KwDY%nf6Ek&pAU?=Rku N^k>?tG5$09`2ZdMR;vI2 literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_tilemap_seel.bin b/graphics/pinball/bg_tilemap_seel.bin new file mode 100644 index 0000000000000000000000000000000000000000..5caf15ccfd454dcdf0073627ee3261f48a21cb79 GIT binary patch literal 2048 zcmeH`+YW*-5JaaiqJRkEH5!$R=nJ6#|8-K)L?Q)(i7%RFUrJ`r?9fe-;DmEyB}^%( z)mDTUM_d~#W~5LH9uVTvazY+z+0v8VqAhzHO1{xaum3oI&z&N{ZuxJyQ6#v)vh@!H zSaYS|3ryiRcJMjpOr_=s0xmoRtb2t4Jh}?!k9~mbFouK4n~Mn@j+@og3Uyf)>`Dil zmeTdhE*AXZy>gfpy~(_dEx&_>niwEMbr%d~o%qiQa#Y`f-jOc~w#=X}U*<18^yilo S^yPm(|1b0Fw(fuTy##K0k!nT& literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_tiles_diglett.png b/graphics/pinball/bg_tiles_diglett.png new file mode 100644 index 0000000000000000000000000000000000000000..5b473842e00155c08744f5482e2899656e45d35b GIT binary patch literal 3133 zcmbVO2UJt{8c*0mL4_RA7QKen5zJ(nuptO25tJZNtP*Z65GA8YfDn--O95M3QDjtH zAt0+RKtxce)G9;J3Wy9rL6jju1Oe#{BCqeAzSr}5&mI5&y}$4Kef!)a9^0H3Ypv8m zAP|dPU8pAb-s0j+@ylapr(s!5zRNBl0->#^xR8kSOalZ$Wr$5@h!`|C z3drN&m@J+jgcEc4FdBidvK8~0-~mVk_(1_|t~GkNyb=wtS=MN8Ga7-$cZ34jE)oIc zDcME`B?mw<3vFuyScxgH0uCf%0%A@OS4a_Cqv!Ne;I-m49u3SvL)L^PSiVHQt@dN>QBAHCa6G(Ux2@4~z!Z5CgDaLYzMxQlMAt5MW^F?eP z7f@(q`tgEA)@az&Pd;$?3u?K-`8dH5!;6`GJP}7w_%sJ(feSc(upnrToCV^cAczBT zMM4-$T)^@Jc_N-LkoR9yFMR$t0ywrb+5*R4+QQ*1PzXg%A+Q_s0r^X`kRHZ|@H-$O zFIWIVP9dj*G07PYqAZs+7 zH8U)Mge92JNhFGyIR#E1!Hhy6e1g(=EVh5xpP?pLB7sgcp_rOdOii!^(|E*aEg+kxUhwAvcl#&!V~&-eig(9=Bj|g1Qpe7jRqBIg;?nM*X(~Bflq2f z10h)H|48>In2_f$3S|l)`v5pve_Kv?*m%664?p>V|4$d^zWu3ZKf~ccpja-9Ab7Jd z#2_v_xdiZtTCJxWia@B9xl--vjJTAvrzfjrI#i1;19jT_+1b8i7Z;^Wb!Kfy(*eW1 zH;%9_IC!W06B6Z}n_ubknIhFx-Q{0#JICzP%0xHq{gM`jlEFGd#BS&*GZ)798Z@j)mQCVf-{yX^lnY=^=o&%uQl9Hd~7f*IO(*UY(?M zPLnb?9&hq|!U$cToESF|P`2cV zG|F!+3cbr?dreQK0nMm;tL&PWRuxI>`yV8#WYN zdY?9>^e#YKUW9GjMGx7^0DFDV(OZrvn;gt(7B}x7x$MXNjNjWIWkl&} z_kQI;!NqvC8d3UH(?`|OHO-B57rVP~9x&^psZw9^cjBg|0*YWrK`bGj81KL=(3*y{T(Uiy4u zl2+d>GWQH4<<`K(SEt@J46OetQuTxHY2_D>mZK<0S!r;>Ox`J}1OBZBJ9=4X`jO#e z+Yd3)AM`hDcj8x?q81-_^DU0wa_$kh$H$A(OFip%?&p)>w)!up@7W^ihIgv%IQz6C zSvz4SBOWz80(R3F-f9}2mpdmd+&$lxcKYW?1JMR6mL+AKzk3@4A>)?Z`+m!V*sDqD z2QZJ(7jF)(U2;xdU^()|IfuxAQfZ)=Zntq(V}r5|*z)pB;tKuaHY%j);jQW@X-e&s z${OXV;L-49PrWsOq8|%tJG)oe2kMC*no=vaF8zUfw5{pa;eo8_t%fVU9KFwc_e?sJ z=@K#f`r?_|ne4j*g_@Sf3}-w;DotrEHx9Jsp!wsGR>h9hl})`{*;?@)L`|n*NT>c;yo(qUi|1 zZr%o-E%IHIZsF~oZiDCw-P2o@xtz2tmP?$$N>N{iQgqsPa{3w+X2fLrLt{#UPZmPy z#p=@Sr*Ezs3F>+soK_tkCdggd8LT$+WL@r#qEq9z!`1uns)g=N0~R!Qu}$A}Z(NDQ zt)#E{A^TWITeUo7uIYcauhupXL@SYIyOtW`$ z7Q=e4Je(x7EauF7%<6r!TBj;OUA{STU&c%eqCw9pm93Z98v63Fj+Jz9>YEJy&(okL z((JA2VMNJ5&|RF#>x&&$d8i)Fs`2sNlfgFDWyT(vP>t0xiE3NgUOjH41mp8tk)2PS zO22#jv-Cr=D`X9PBP+GL%Y`p)cv_9MzR|;1y{TRlZF8lKIrY(Cy#(`7^C#auEGai? zPwna2)`+mGJ;rOS)=taiQ=ZvL;P<`PaXeIERS)s)%fayLwyWHVf(vJ+Cugn?o*dI* zEozak#wFM_T$vg5ZQJ?EeI_dM{zJ3&;ey&bDmN2RKN<8Zz3 z>b2_~Y3W*}+J+WmBX@S0mmh2z-wCNVzCo5$amtrJ`zW@*e4cxG_R%*$eyZHOJm+AO zPW`6xml!dLsO}qfSH9w2NO!!Nk9o$?@~UjMtOzkEa&NN8+}MTUdzE&Z=a)2>GeEa6 zA6;r)xpr)Vlcdh^NTZ?o<2tfUQjI6W-9Lmo|4K~ynB2EYxt}xCCdOAp z-b!sPXy*x&l5#ewJ|8l)uT8DL5;Qd#b=5{mGxRyRaTXy#HKEBKvJ}Nnx~tPRYN3N~ F%pYT=DK-EA literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_tiles_gengar.pal b/graphics/pinball/bg_tiles_gengar.pal new file mode 100644 index 000000000000..2e652162f5e7 --- /dev/null +++ b/graphics/pinball/bg_tiles_gengar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +16 64 64 +96 140 112 +96 96 120 +128 184 136 +32 88 88 +160 136 112 +192 192 168 +64 72 104 +144 144 136 +32 100 96 +128 104 104 +208 208 192 +40 64 72 +88 72 80 +56 108 88 +40 76 64 diff --git a/graphics/pinball/bg_tiles_gengar.png b/graphics/pinball/bg_tiles_gengar.png new file mode 100644 index 0000000000000000000000000000000000000000..23579262cba8611cda4ea8096d6d51afc53e479c GIT binary patch literal 3739 zcmV;M4rK9(P)hqX9mXVCZLP^i1YXsgxa85%&;ENCPlsT=4_e}<-uwv1? z#bLp2X;#Igmx`f}=#s-=(5?7lqurd$fQSyW4c*OU1}}SA2s8bC@9Ezpgg(z$8a?TI zzwh7g`<@K58)8@^lZEA|&#JLAal0oMt{b=*UEwq4x+fFd$_!K37?#PIU5s5}zc<>6 z>xwP}blt8igdhRI#NJJWp%F0C+b$M6Yy0mbAOT%p;91BJKmaIRH{3~l2%r_1SpjHw zciu-}^?={U(j)@{0w~jUcPHH)sGtxq4S;Pk*H6^x{R*v+4~77NIQ3<4|? zfP0PbbRG`#EXF5mU}1U29ocal*k6zjeb#ml83YKHByc8a!q|y0He2^z=Xp$@tl@Vz z&*gDPMiD~jgn|d2$MYm$CrJ|clCjiEy23b}-<#z!rw^|IBuSp<H32eXbN-*-lL7OA6V(7F zy?6>G2`V_^! zjsWpQCa<6B4*?3df0x#zlN2YHMZ6drr>FNKCvrHfrnt}T;i15SbP7Na5K*9l zeWlnTP19z)7%;)6Bb_lqIajL^1mRjAS!9W>`|qxzKuh>)P5W+xrzl&kRT!n!x>pURBzGJ3CLw?U@@ckvl4#ntdd^U;I$a zRS2?}lL=&Ykbm+M`u^i=SvL?vCTj>}=EUHG2lM$H zw=5p~tV}?>A4A9CP-g3MZ3sBj0xacK^arTYx#UAWh~v`2dM^Bi++W9EaWCSB<_t?! zChLf*G?;b3hgnwoSkHY*jA&KW+lBx^_wp&t)d*0f;qxhiE?Y-%qOiK#?;t>YV9qrx z>q{k-6N19$rH}R8$%TsGs)iP55kHul7*_jFBo*Wzh7=9t^U}w~TyH`d1_W<3f+IqU zJI6E!0f!_Nh;2JYJdn>z9~X0~Fpxc3^TGyQx|eKV!3*sdkZt(_ol!;w5=Ml}XNN&S35f$fny#s#HENeXQqdkE~X!CW3)NK=~KGKfK4Gii@~;@$D5| zbDWYJP)lN?>$khLkE`K5vX!s1=EWtxQGP?bG4i~x1*&0YP{$&+KY$<}7hTI-{U;M- z&Ovl0d~XEakWMTOSG3*Q$L}D>#;6tc{Plk8=l%KI-e}o2)sRnqG8J!hqJ!L+xQEt< z5FjpwSbbw_Ia@4N^Z6~f=ms?eyz$xhpDnf`CyR~J$BJZx__B!ral!5V`C_?P&RX-; z?B&L58#Scj4M#$S(#Mop)cvd>fEE8b+t`4F)_m4lhPQ9Rs8jO>w26&6>+DY{cGeL{ zzP|zRi^X!a0u?DPeZEbBVW~w4(aTHTO5gibFOvh-+IWx)RcCcoH z-5rZj4VbOc`Ep~qb=z9D6oMQoAQlkC=+I$ATDkv~M$ohYdtouE0jsNLTeB?^@KPlN zs&G!Rpv)-Ahyrfx6CbT3AWqOVV78pSoo&5rrId_{Gn^b*Ae|c^m>T8EP)zm8e?wzW z#~e{cbs`KG^R27d;{5i_%Wrg#_mzAI%H@dGr<}tE0jHG-6h&hf9Tf#;ltES0348x? z|E)cHYrlNGFI+VQA4KCaT7e+w6M{UJ5vh)i4AEnVTqi$I!}IVTSK<7Z@cfrBaFbp# znRKOdFa;71nhPKp1+;UMHx4@0kFX^PT;k#m;*9D9PVd|H;*vT;YI~{c1t&~_#OtGp z1cFg}M2rm2004F+nje&((Hj(OsQw3&B$=S?1t%P!nS|}Tu8so_)|IqhU{=WwI!=ZK zCthm4P$uYF#0i2*iSG-e%z=pd19W92Kfuj7^#*I%p&s!~iUaCBiB65u|2og>8lWO= zO4X-9l)74&bT2E0QTnrFq57zKg7y)Ej`NU?Pq`Y8i4RKTM(NMSk<$@8!H6d)_tj(Y zJ=cpq(s7`(*C_qjK+vZnc)}x|pxoyUnsG#*skXh$qw_L?4L3OQ;ZJ&t;CTuF_(356 zBJc#&0qp+9IF7k5EXy(lotF`8bPtbMKM1f#`o`-kb}sorBZ}m)!=30M7~tVkpZ1?- zKV|}ZcjU_*5n;c}rXfSZbw5Qku0un&ydhY@Ra2y^aSrsQ1w$MD0!3oF5 zl6K^j_0_&jr(K&iV0v6oU)ZK>66O&YaoEwZF|D#OpiIZd(xid^ zt}pbt+P)#XxurEZxywISQOViF)FV&V?f0LvX6&Pz2JxkASQ;Txfp$Z z6zc07F-F(1G;o;xQAoZoV}RlT2>R|LWRp9x9#JBK4!ZrIi*)cr-!oaDu4Cyv%l9n* z(G7fmqxu6n9t@4}Y2PBE5Q-MDkY|m+tdD`p<0kX0@;diS0(cDHA3Lf;z!6@s_pl{q zJ{wu1A{p2SA5z~Wdz#gC_1hl8_e1Ir)Dh)fSsf1U2fnuaQ~sEnkE^uwn%4;kd{6J3 z#_EXbyeCH3A9)N(`KZjuJ)G?!UevJGuY(s5fr=k+d|1c9;2rBlk}ulqQg>RwQPsY>H<+39r9WInH|l~LA#q2o-m+Q-p=-W#A79O`~B z3(wPQG$9>5oT~VdU^*?c*`N@i02z1FDYb#c<5+YuPD>vyMR50q$T$?c*uF z$QI-dIt2O-Q0al7k|5JH8|XSPP}!w?OkeEi@f-UE=%L;(V6n8&K&F@WnhjL54yz%@ z$+t2283`}prW{2zSML|X@EkVKBINUQ%?qjyAh%I{v~Q^f&~NyU-Ysx?zhK++JPnc{ ztCveU4$eyp(G7ViKF#$Lah~U|(&j6y#vlY~dL4D@;pC-`-=djCK+$V9h-fHouh}5Y z)qS;(Wd2GmcTUgAn@$1a9T4<#?e9_=_WfMe0YX~D6#|IHlNrrAB;-}&rP_TN<44pn z!f$h>YAFKC*CtM{*My^ezG}?GXrMYk@U2pzP(sGFuJ_aGaygz?>z58Ow5C8&;=fv3 zeqBObPm*wL13N7cC>Q3h?8YJ_veG~*tqW{QxbnjJb#n=+ZMBA>nyGEmjDzbn7dR?x z3NPGW!%q_4i2=f3oHt#d?xUbl!mrmXK#qJT8fo6JOIwxqQs8L>Dn9GWQbj@Y1uHK9 z6OnkHHbKzyg|g?@8q=ByfUkP7Ot-7rs3a7bO3xRjzE-Fl4exnc>Wy((B9KKkriHy7 zb!Q>JQjJEH2TE9Z{x6-4+OuhKYa00Cl4M??UK1szBL00HGm zL_t(|oQ0G2G;5HYiui!0P&fy`Mbf~^Z zN%;W+R0wSf5c!c$bX1IS(Z<+?&&IdyFbuZwzW3c5+`-u54MSX(MIoTpRaME80U?A6 zhnn8EYx-63Lf}~jEX>YlAs8U=bM&<-9tb!qgc{lTx)R`2w)4)00B-h#5QTv3n(so; zNNQ{7cULwHtq;w4+LgLDK6IawG9dIh(wMC zg}N;Fps|=ZDrf*l(mAS4!+E)vq72DNIRv1c0XJYN1?z7Uf%l>dVJQT> z722_)1k)g+XpcRWD}<;sfdSN*^)dsqQ*i(cl`Djg_W^Kw~wA@F%4Kx5X6tUa5c;+)$DLimhV!nRCgD|Z(Smc?34({7V&Pg^D1 zscn#n?A=z*BNLEV-{buI%+xs%Bp`iZP3N%=({y@f>XK)tWvTR`ngsmJr)QQ43`lc? zd+{vkf5Jro0pEYerVsP{^2}8JXK>qdBH-dJr*(By`*#@LJKE-`zF<2gbyK7S2pBE- n`t&$9ejIfi$4JB8x7hyy!IGB(e-S;Y00000NkvXXu0mjfid87! literal 0 HcmV?d00001 diff --git a/graphics/pinball/bg_tiles_seel.png b/graphics/pinball/bg_tiles_seel.png new file mode 100644 index 0000000000000000000000000000000000000000..445df918c17febd4fb0fcff90ae58f42b9d3a785 GIT binary patch literal 957 zcmV;u148_XP)4XwVb%1VxbpG{@=; zAGRZy@Nls^+8qvM5}r=vrtd!Y8mC>u$*DibNAV`$5n1&c={M>g=7v*D{v1~%lCc(c zs>|GPO4F|4sAFX;g`(`H39FKAGMm6lnipq6CRG}d8We-v@784C%-N;sKM#P$t ztjivxOw=_C(T&JdD7sabQD=R9!_Ah7vPPr18=3md&~Hnu?J+(RN4Av5>q^5JGqx?w zQcotTNS+XdKtonRYAm-+J&k)H<$Bi_tK>F`KgqVgkL#>3TQ}t3DGkw_@iRn#4tpv^> z0rkp94_}VWI>7X%p;n#nLKa`*hOOz#(lr=?=}kC1?(k;I;@qc8F>?61N5gx?E+Kv4 zRqz;kVl_D|M6GfLQ6%CaHsFS!c4B~YS{G4PCbqhF{9l+j1SH~QSd~vF#nG1bpy6^! zoWp)bTXjUR;LYp0Q%(DGV(5cc_oZ@x1=g5`#+df|oS26hylQPKJ4c&>=|SBRkQsb` zk1vJqT`^BzSk5hmFzV6|=xqqz+`XLyOTWII(&O7{;U&OlBHen?2RhX4j_yciMLSj1LNKMDL%fR7OaGI55g$?&ZOldqdh*yaC}<&<6%D^58lF9 fg1auDyk`6lD5cAm+PrC100000NkvXXu0mjfFGsoA literal 0 HcmV?d00001 diff --git a/graphics/pinball/dugtrio_animation.png b/graphics/pinball/dugtrio_animation.png new file mode 100644 index 0000000000000000000000000000000000000000..cf8508df3e181316df7d5fa36fb5bdf992bd18ee GIT binary patch literal 1247 zcmV<51R(o~P)+CLFS}l zq*@?qAOPm(wDv(U|7u$Q&BXu!0000000000004b=N@)N900Cl4M@0Xn2lB-L00aX` zL_t(|ob8xFZrd;rMU86FwbBbTK7j)|)&V?`vTuwWKnAr9KtsGhF5z6DK(<|U(aUv) zLy-M@XR~)VF6Q$~IlroLe97~wuD!48MG{Qi0QlNu0p|eD zd`-d<=Xaf%*F67ZRunOqdd>@9nvn#H3t!U0_1t)i^J(F$d2O1}+JP6IRTsDi(|Et* zh2tKKYr?|4NqgXh2NYtc8EN5RF*7mL7>fgwOreVkHTpIchvqLfn?i-cp|3F-U(E3v z%Xzg0*gObf+``S~UI?o-+*}LcvxVh)(>_Sy@fO;gDMWzCR9WzToijDwc2B=@CJG() z&nZ*b)aZT41P{}u><}`Mz@fGenNZ+O!Prx#C{XCCr%XE(Dh_R&?e@<*aJ;D?;NNW! zLZ~wqT0BEM{TOO2?gv^DI5gnU4nd$$$DBFjBZeB{%mqF;H1olsl8+cFl#}ssDjeVd zhlP%S)~7`L<`p0K=AB4g(VG{k5g2?Vr>1AOZJ$yzFwiAFGBC`C04DJffr)%XU=$w_ zn8ZhTR`C&mNqj_L1Ro5H-~*pM^8s2QJ~A-;q7^XoqVry;e(aw!FaZbTW7-Sj(Au;Y z-sQGSdxzBkQa_;J12&xy&_ES1_@Ys` zQ#jxws(#>mU+VgC;4hE2+FwB6!2W_22H-mL;rHJyE|dM`n|GGZJn#YdNrUC0aS(B! zoMS)G5k~=oQJ^DcK9B{%fsUB@2-G@DM;rwVCO$%&L8nhVD1RXy6d&A?{4abQj28h$ z34xEoUr6v?3!0BzC-^|YuX^n-w)B_b>4)~027yujLcpBPU)+22mxFOCKAusjRXGgt8y_kZd81fC>*@h1I+`wy2>$NnRwjt%QLrOy3FOr86WDC7$bfbKsc-nsw4)OhHkpji5) zMfM-jfpY&rkm>#dA366QVVt!8fTI79I0!znzepSeACtfILYVpw<|E^f`H23K_?U3W zd_;dqd?bHKe7rM%fdYqJar(1mi361W0;Rt|=`T?F3q*fOk63at9~>(A2%#^@$8W1S+qsC}+Y0~y002ov JPDHLkV1gvJLAw9| literal 0 HcmV?d00001 diff --git a/graphics/pinball/flipper.png b/graphics/pinball/flipper.png new file mode 100644 index 0000000000000000000000000000000000000000..a020c144d6c86e7e657379cc7245dd229780eab6 GIT binary patch literal 440 zcmeAS@N?(olHy`uVBq!ia0vp^3P7B|!VDz)cyd<*DfSXiUsv{*%v^%93Op(Q&jN+S zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>wkv-#cSXH|Nq}Idn-sSA<+D1-Ep8A#w2fdm;X!IKOF^f z?s&R5hE&XXJH=7xumXo`=^lp;^$9TxIKS_Y7Ucc3``x0+E3M@Yt@xkp)gR{~ePrfN z#v3y$oeK)PQ|$S4URf_#@%=$WiQgj!Kch#{T^xxMCtnRedHkbG)$58Gj*lw6)eBTr zzj%45{0)EgPod+gypJHCDsP@}jIgil8F_|xvM#1yGF*)2@AY2h$(#CO5!2TvK}%0~ zS^fNUcm75rt{EI>=X0u`P|NalmNR~?pPQNYweGdywl{_IoT?9A*;aLYVO?xe?|RTkj$g{wWB=|7G0xllgsY-DSCap>rB*nX~oTK>_3G>gTe~DWM4f3`CoS literal 0 HcmV?d00001 diff --git a/graphics/pinball/flipper_left_masks_minigame.png b/graphics/pinball/flipper_left_masks_minigame.png new file mode 100644 index 0000000000000000000000000000000000000000..c248cb452180745df06495db6de7eda199fd23b7 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^3P7B|2qYLnB7IGPRIjItV~E7msTU6NHXHD?K5V!6 zazjvJY0kBtX@L?4-Q{)I?WecMt=gvWF?PbF`R!u-`yRV=PVnM#OhTf(4ol5fG?ppj z|0B7@Y~s`K3tR1MjUVwH6ZqM1bobYSx6g0xcpP-K`u^d^J7yO$I>$B{JFVdQ&MBb@0EU`RfB*mh literal 0 HcmV?d00001 diff --git a/graphics/pinball/flipper_right_masks_minigame.png b/graphics/pinball/flipper_right_masks_minigame.png new file mode 100644 index 0000000000000000000000000000000000000000..d17ba0f5f3d9066839dfc3c727d71edf4d425ddb GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^3P7B|2qYLnB7IGPRIjItV~E7msTVf#9##-&eb}xM zW5l%hPR8_$HeK!>FO|6V$tPWM>FPZa&iK6|YvUL3b}m*Um4JkRg$`{jTs&GLCnhLt zi^=AkC$=Z{U&5_A)eCcLz6u|f^c0yYU*ME`QL^Sw#-8-zV}CPz|8?!&cC^`zdzmeJ wwp3%4;NnR(*{@oEntQJ=o+fh zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplY2;V3Eaa|g;81KA8-4Vv;miY49A z*O7r?V?XzwL{=c*AiyWYm7(STwYBH=PTAU%+#(<#5M&rt?3Mlh|NndU?rqf+xEEvz zG5`s<$Om2lav77n-Ch1KW&d;($Ug7s;uumf=j|lJ{M!Zst+mnalYTO*b}l;M6;(Ft z>ZJ=?g>;v%PGo%>;cQvzo0#E0TkMO}mWIFD)l)KD88?Zu7Bwq$`Y+%8ecwqHu?;6z zNEj%(pJ#CLGMi+e#=^d!d2&79fAxKO4>FXP9QW|Tw2FdvC4{(#z zl8pXPkhk_~m%Ua_*bRl3COz4+LqiiyU$ZlwnEbSA+ezUd7S4{9tJkc(bLfPhqR-40 z@yguL8viC`z5}~vv$Skbee}M+qtsrT zch{k!?W+o}_jARlTC6{<`%F!*I4%6gGv;?|Uhyyle0z0g=kDrciITE8FJFeguh-qe zb$eod;?2K`Yfd+J_HeIVp1JD<&&#R_3(X`_mLy#Ka?Ww_jyI2!Q>qLsT`o#rdF~Xs zat5>S>EAEh8b7OB{JCDEW1eg`>r8F^^RBW7%(I^!e!A@F3HR#TNuLWmr+2I6{NS1` z^xXV<^qS~ByfqgDr%)3%c1Gn-@9foPvs?DB`+NRhpygWIf00Cl4M@0Xn2lB-L00xyw zL_t(|ob8&;Zq!H+$K9S6n09+t3MaQ6!IgG9AdaEi53t(t1Hekdd9_lqZ$Pd~PBS^J zI7Ryeke8#XZO`;qJVG1*Z5J?_Fu$oP_gDR0ahCmnwvPTUjRD*OayGvs&*yi-_LU1c zzInd7%!ql%UOT~57KpTc( z69+N|F8W~@2^B;zN$6n)!W1A0IRU-NF^FK2z!00wCJxLo`aYgQR;bQg#prl3hAs*vr8P`cxGo6AndmoKO#p*G&Vs37E>$;-0Hgp`yCJxgFaGK*z)vD)^5y$K zAWU?3X#^5#7S0@g~+!>b_R;pT=j*=td6-vk~AWdeYwRBlwUy^6%(Qn0^op1qNZ zzP-MRB`L)}FR!n+jJ~_R`h$l_GA(y>yWPqc@KS$(q4aWqAvoLpYetAZ+1*kq*Pa8d zUwyjY-S6P<{U;a+NdrJU*Z^~~BhAvG{^8-jPxrSN$k}^2PJ%j{fpNBMV4Ni} z0UyU)3kNX!QrsbMO9Nn4Dg#IcNq!U)V8tNg#>I<+Gk}Hw?rdh3;=u|hMyI66I|rz^ z2egX-toe#C7s%n|n4}OHBq%JP$T+vIqN*|`mc|d`j3%v$4qb zX88R%hzw3a1mM#Gop1_p2yg_<)#rFUaR5@U>nh_caz4Pim-Fo8G4(?}V}PQ;kFok!5kR0gg3GV-$eJAi@CyRM6!)<3a9eg%Rp4%FG`T-*N`oYa&wF&iu za~&ksf3SgzSpUI}QO5cY7O>LM{=+c__8%hpp|B$a{RgM|mr4p>Kja<|^dFq+f39T3 zy#7OGmnb4ykOy}2z*`QaT8H|}hG&n-Dk63$wU~xw$MIG-y08msld=5h- zqkyU1*nYr$8tXrh!@%%p2%BYcSxRJ0?3{F5aDD>F^W_jftA#b+lbhk;?wv5qcR@U$ z@qW%qZ>-6DBu$}-_FR%qI6$c?7l4g7euWu?Xb}KfnD3Ws1j^rIjodW?-5ORN=~b{E z000*SBv-DpauWg#96+$;SE?#20wo~|w4^JQ=&EvvR8}}(q--=CB}(+6K$%odr#mQG zaGXV!ecqXqP8mQ&iu(wdhAzBBwY^s6Zq3}W#r91zmiAFzgcWO&51=kUp^Shtop8Sc zKo8oW?*~kw$cU2#xvW5<^hP2LTEImRPwAI!W8{M=?s$eZUKZ!39_aoOfy>A_NK8cm zktm^f`{iaFCnE-x5Z&eyOF>w9;oySX&H^N5@$_xvq&4R#R8t|LK*s>M2dYt56!hJ* ztDv^8L0FkaZ_SHew@+(o&fDWyk}6koHLJnqqBH}v5mkft%~Qb}5B-Ahg3jT)*4$Xj zC;Q!QzuVU{Hz(3yO+^R05!m54w8uq(dRH3R{fF<~fB0WK{}AmzxDASLeg0u{;`xV*Q_nwKq~{+j zK&0m%l6}1;fsq7;9U}>hBruY|m;fU%?Ajg^7;FJRfkD0BUjzaJ7P{>sCNMnx5D^%j zeh39d(hteLhb4iL1cn_W35+B#lE9b%6d3G82gBD7fxz(fLntu(=N~w?t^x&yuOA`; r!_yCez)1QbS+Zowk|j%)>?gA?qqyN;d%YB#00000NkvXXu0mjfRi9f# literal 0 HcmV?d00001 diff --git a/graphics/pinball/haunter_animation.png b/graphics/pinball/haunter_animation.png new file mode 100644 index 0000000000000000000000000000000000000000..c50b2e8d6be7fac35bf70ce4018890affa9efb24 GIT binary patch literal 1790 zcmV&eo;g z|NsBi*4ExJF>`ZswHO#{0000000000000000071#n!o@600Cl4M@0Xn2lB-L00tsS zL_t(|ob8&wkJ~mB$5nX|yphrY2Tw;*NepK>$qJ$<6Qvg*a~cDkTi~v1FTeraF7zTa z|AgbqPXcA|0HK5wB4k8OgG}ZvN5FuY8&%-1b5<#!B5xYTaXHuP;d^a}Aq4^9UCUq#grD$b z#-J)QkVVswNV`L(Ul=dvAjPV=$6Bw*aOF!v#|dGC^Lev^H(ujMS`;1{LT`=c3?N*! z9rO8S<&CrfOAwlM4BmLN(Z9vy!t?I&^G}o37JJ16@6=deOYJ82$|8L$H+nutob~_C?$n7bWpJn$|gUI z89=G8@Dtvx3Bzh(Icw(P7_TwW_^{H3gmBE=w3WPTnizcWG$rWprvPNu+QZ_5#shk< zy}V5z-WDGWKNvURPJFQZu-2b$(xHQ0nrnVIMhBK3j?jS@hs}B}!^NSMo#9mSo-|~q z46ZMyf7mcOWf(MQP*Vdx>_ewbzno_S@bL?G^jq=p}qWTDDBM_x@JUj3l?;XLLhraK!j z$OHc20r_DjLsO_#A>b)cC57gPU(6{!hGz02VN@}m_s=yy=x8Q%4rQZ6fbpMJ2pHG` zySMi&Zgr^`RB4&$@dNUKbu_ySM9LXq1~5oyqj}yc5CJ5bA2c3Z*l2D=>pg(j^TVYh zn#T#QOKSPSb47ELA3T>@{NQ#p_~EDwKOB>tKOB*N=%;FL80HUy2L1mu@WZaae_;OL zHRlh#M+2sZ#{9tvF?D19;DVTdFNx)cdf6Wzc={2>R9JrCxdPzr@qriUMWR4SA$qAs({})95K8>lQ=^#m3{H8BeC)Bi3PT2G76w`+bnn6EXN4KeX_x%*pZAn4^+AZOy;^v896U?`e zOhqRaG0hPkIE`SERFn}xIwyCP`x&7xi_}cKb$IaB(LG@0ou54YTud3U$7%}nONpSy zu+D4s@PM(sJywgXaWGc`4JFS%r-bIoB(YEMzZfv{(ke|LRQO(D$L?lGzb^oQsfw>t zyD~{4z5b=iAS-hg))^GGz00-0bSxT|xzwS{Lum~H<4Me$>jBqoVKjd<1vDgWHqCz~ z6;-yYPiCU;`VSbU1esy(BIEQ8>uNi27#%R&@2@-Fw$Ra7V`8Ky7MXM!ybU@^O(Z_( zt8_Z%mT6*e8}`@jgFFDVJ7I~7qXs`a761OJJxpYcK7`OyFUMiWlC)Kl5Gh|WK0xuQCBeFY~ zznV_on=Dem^zq>J%dhy^matvx4w7KGr`aiE|6;1wtk(;l_jg}8Xmn#%+WDLMX@9Q9 zNq5h#D7h*BuIi)YcdvcR_j}7#u$JF@_y709{59=6|K_gg^kZJsKQj^Ja8Fl1mvv4F FO#tJ!buj<{ literal 0 HcmV?d00001 diff --git a/graphics/pinball/meowth_animation.png b/graphics/pinball/meowth_animation.png new file mode 100644 index 0000000000000000000000000000000000000000..c09c86f6f2562f323ce94580a3939e1bff8dc30d GIT binary patch literal 1365 zcmV-b1*-aqP)*Er5bm5Y=H}-A|NqnA5s?4@00Cl4M??UK1szBL00enS zL_t(|oaL6!i`zyN$7dzT#g~qxy$pp&qcsGt+gKXWCJL;HrIT-NF_@l83)}yoORg;o zz6Tn59Lu@9?80VytJT6fw_1B?Zr$BWbL=5>eQ)|kKP;~)C586X0UN)s=e;-c-bc?S z>w^{fItoCAb3iu3yF7yKaZHv#X!=0OafI zW!&{z5oxEH9rRqdy<7ri+$QZgCz>0AqzquvQCUt12_`H_1QlU~!ubi&dk%$e2wi^% zx4id^5aClQL83DrL{ErLsYfa0aLo@z?=3xSk(&!(_*G& zly(DiPQdfc$|YUkA${Jif;O_b&s)#3Y!y>|^5Alnm8ef1tL=R08}@&-{t+h>BinriMkFr`oflVZ2mfyukQ4ouPQHDE~lg6KlX6);K&;(iItj%q(U;hfjNpwJT6h=^5SSGYh=X7cBQ7Vk zAcbiX*Qf=MzMUgjM5P!*R#qMrC>U$D4v7%68vB*YnA7_ijdJJ;9SZol(ZL+yI zy=iMrt8;V1Xj2$lVt>nA^B7zA54@gT3quQg+gu5JNO8xyKw*kI?v%$9LRC>7Se2l~ zCM01@`%kM2xN!*PG>)MXu=_#;wIJd?7BP;5sOsi(0Q5*$)d-zp6+NrZ{OX{Tjg~_p zU|QTzbR0Iici0UR9_0?qaOh|}{uriyo<=iaa<)Ahe*%6~CZTXdw}&9zow7>1Gh|Fn zl&ZaH`aK+-xuU9KBgEAr z!9k9VG@F+xS`$qvm-E7mBvB z=C_rQeNsWYuLJM=DBu+bJTJgcvzo$O| X8RrBoEz)fN00000NkvXXu0mjfML%o> literal 0 HcmV?d00001 diff --git a/graphics/pinball/meowth_jewel_animation.png b/graphics/pinball/meowth_jewel_animation.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7ba32207aec21c9ee7fe3de18a83c3cabef6dd GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^0zllr!VDxo?EWGMq}WS5eO=jKGINPYDH^?;T@Dly zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuKyYSpIgfC|NoT#*BItxgH%7?>h%Bre-H~Bkh$8V2oz^b z@^*Lmzm)ycQ6T4|r;B4q#hkqpPV+Sx2)KH?T)TFNJ%A@qb!~O!4t2Y4yxevTy!-QS zOS(ELsl3X0R%Cp}HrPo`?C3ieZ2`%t8ZG&|r8n7jXjnEZSkyAp=D_{wPp=$!Ui9vz zq+Us8A&aw{kdc4Lj1cn^tXq?Wjb`lYP;p3MY*BYi>~CgMyxyPSW#6>(Zg=P5r-v*| zngjmwE_~f0y7T4~BbL)F=XTh=ZhU)*@kV5G~ z*E#Y{EBC!Hu!u0tPx|_34|8>g{?h)WD>b)^LLMi4=15Pdu)6ZiEBVT@&)aex8ZVzc b!?2st*1%-?Z-zznpb+wO^>bP0l+XkK4V$Tv literal 0 HcmV?d00001 diff --git a/graphics/pinball/meowth_jewel_multipliers.pal b/graphics/pinball/meowth_jewel_multipliers.pal new file mode 100644 index 000000000000..083320e2b54b --- /dev/null +++ b/graphics/pinball/meowth_jewel_multipliers.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +66 66 66 +214 173 66 +255 239 49 +255 255 255 +255 156 198 +255 206 231 +222 57 24 +247 148 74 +66 107 239 +165 181 247 +74 148 115 +140 222 173 +200 216 248 +0 0 0 +0 0 0 diff --git a/graphics/pinball/meowth_jewel_multipliers.png b/graphics/pinball/meowth_jewel_multipliers.png new file mode 100644 index 0000000000000000000000000000000000000000..87b903e0fdfe5d1125988d9f6359270bee1dfb07 GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<6!VDx?zobtBQtTz3zOL*qnYjcN)PKBCx&Ras zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Hu0Yz!$?4i!r~mH_{{z9CWB<=Rzh^1&eTtV;_WPwFM_$;QgPI&=e zSv>YKFtaDTJa^+0Mgvf$^VME$iObz;pE;kBFq_w5=@8|b6m{9nJ>`g{Z1IZ|fz#*B z=9B$(Aw_c2^##d(T_5HZRaQtTz3zOL*qnYlz6#H@F(n*tOP zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@Hu0Yz!$?4i!r~mH_{{z9CWB<=Rzh^1&eTtV;_WPwFTMF(!GtyD)UH%6b4fTAnVBAr*6y6LuT`g4f(C>vqI6Y&wt> qz@>J8d(pZESA|IhjB(=eEg}q$KXHFOdi?e(kWrqlelF{r5}E+$_EsSP literal 0 HcmV?d00001 diff --git a/graphics/pinball/seel_animation.png b/graphics/pinball/seel_animation.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6fa92d354f8b87dad7e11ddfaecf683ab72098 GIT binary patch literal 1398 zcmV-+1&R8JP)Y67_vXjW%-T4#O_jKQN^H+}XWq`v`^H`M{z_~+ z$x^MSwnLVg?@CCyqwS&vY}+n;iQA?N{nl-p-3!~{BZM^0k(w^TAEF<^Z@c-rr}Lkv ziX;|9m|^83dU{+C_tUO*>MrrMEaD@{B0l`Gkl@#a*4wY7U+o$&Y1H8iz_=U%g!~XS zJiLi75JVQ!ki@vGSbP8nE7bN&7ImoaIoE~KCB87vKSaz&5(~lJuL&MP@eqeYIG_^5 zB0+>1xJwdru(OX=XH|GPW8srnsD|m~N~&RcJ)^Stc+||{L$!8Y7FXAQ)rCT>-itb< zQHNkXY76rJdbcED6P-TwS0I_UV!@W0v&W(#=OQd9?Hs#U1YKshO)3gg`|=BJEY|Ul zBAfSeNuzcadCt6jz1RwB!WrHLwRy}rYOdo##4>{ZhJUQ9e|h7haj5P6<-!`6bBQDt zuI+^FtJnI$nqF=81}(p~&2FzdXjMY9pcqtL?so4K#m2zol`0wb+eMKN_V70fN;D21 zZ?)Rl;SYF~{^XVCQEGLpK3kl=0Ec0*5^5r9-93aL|%j4gV-<0D=I)`k1@#5Y4 z+1ts@4v!Gf=$*`_v*|B=r4-**wol&8X46+4Zj&(T@6M)qA2|<^6gEkrDe9RjZ>6OE1arIa;suTW90wd>aM(9(7*#lMTObZt7sNpT zmqAoG=tY(u4pauE9$Op^xGYj^-qJYSPL&o$yr`v%TgRZ+1Lyn_KKBI23!8(9DpAZnNsrDy|pB^{&gC3^g!j4B3SS zrm~9)7;P607;6_-j>@0VKVD9RwTtIS5B?unyC8w$=)l;;y+c+e;~irc_nwSj{C0fw z1O+{h#>UN)_tT$mZ92PXe@Tqp*>QH!V8(v+>|%F@mecXMuHV0U`7jp(R)xR2aFPWBRgOYxQq0FQQC4GFdZvcV6=e6Ho$xej3EjJm=52C zy@7#wO?#hk!S9Cz3@A1Wb_+mY{$vy^59lXKz-6R^0;0Br=xWG4D6=tKEPHTrQZK#U zP6BLZWz%Y%Z~!CNT?srbaI+=9SG4NV=0GEt?Cb3LTseI*preDSZ6(-w*df+Gq_%zG z{DW^N{o@7~J2-B*MO%gA#`5^L4FyzaC_pEat)ke%6N))qprPD<@GZZA^v*^@p&^4k zWlk53;Sdew?r>7p_eeY%j}IYTk0i_lP%g3wTu_Xg@{L4N<#7z*gqg(O3Hd&-8Q zPZt1eD4&CJr;CSVC=9#c(}iUJ01pRE;fmm~j>{i^0XwY#2fIsXH~;_u07*qoM6N<$ Ef*UlD*#H0l literal 0 HcmV?d00001 diff --git a/graphics/pinball/seel_multipliers.png b/graphics/pinball/seel_multipliers.png new file mode 100644 index 0000000000000000000000000000000000000000..b39871436ba0d5ce0cd618c1a8e1c4452484a5e6 GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoR!VDzYlu|i?6nlxMuPggYW-f6d(VK^&Cj*7V zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)D?>wrgM-6`6%IdM82tG0ZXDYIp@?FeZ7syD)UH%6b4fA3a?hLn`LfPB7#t{pXUczchAE|Gq%*wJmx`{&GlRy%LLr9GoUgyj^GGWJqXka)WKxvXZRaQtTz3zOL*qnb<}3RrIRNM1Vr# zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplY2;V3Eaa|g;81KA8-4Vv;miY49A z*O7r?V?XzwL{=c*AiyWY^*_V^A1@64|NjqCNCY@yoPH9hj4{dE-R1vM_D@HF94${5 z$B>FS$q51pKoG(r?LB^S?YNzIdZ1QyV Kb6Mw<&;$SuV>^HV literal 0 HcmV?d00001 diff --git a/graphics/pinball/timer_digits.png b/graphics/pinball/timer_digits.png new file mode 100644 index 0000000000000000000000000000000000000000..4c03bd9cb8b4ded632d1a764736b40c1da2d36a0 GIT binary patch literal 384 zcmeAS@N?(olHy`uVBq!ia0vp^96-E*g&9a5*kQB)NU@iA`ns~eWMXGz*Xy`j#RC)) zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuKyYS1DUHXvT8I!!-UH&g+|8x|{S>oy9 z7*a83YEUlUQ3Z~}(ibX(4*z}s?Z=GbC%oG~E;ihBt<2#GtAMHCGCiXe{r?zy9>#=s zW|du9W@dClHgrKO-%5st%=i2eDVN`$v*oK=yC*?{Vfn$maT9DWPWkROQ~cQ$eoe*O z0`+tMCq64(-YsZ(h||Jz@8|OQ-<7foSHHaf{OrF^8lP-V725xty}|6!*MD!n|4ita o@&4)csa30`mUHy(ul>aQe4S(ILbGo_fbM1RboFyt=akR{0DS4AkN^Mx literal 0 HcmV?d00001 diff --git a/graphics/rogue_voltorbflip/Raw/gameboard.png b/graphics/rogue_voltorbflip/Raw/gameboard.png new file mode 100644 index 0000000000000000000000000000000000000000..fa361e4f69fd286c5091757be61a546473784c0f GIT binary patch literal 1454 zcmV;f1yTBmP)bD z6(1at=xVtD000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yP*I zxw#@&q)dmDjtYsA@)`=5wSDWk+yg)6JUQfl;&^nr*uUGES*$0Bj8~8m_rm2kBBgW>zuN}TgGht+V!#s& zAdVyedKy~-f8bBAb$~ct0H_rMgNWFAwGHr301N}KTnt3%-I2kYrnWjPY;B#mYFD@- zuFFN6rs17;x!z;|qw~xKz03s%2M1*U#(sK1pAo=6Mi>M` z<(KIR83EED#GBen+J-Ha1)MIh3PXDYX={|}2Uvq}l`55FWdO+gmjJB)M}Z)K_5a1W z8~~PN0rr%E7y$N&K6cUPZ34hE0ubhE5#a44X`BU((h$c5&l&^xX-DMyx(>c^1K_w|0RZzLw!;xTLpFlkGQeA<->m_NbsGSSSx~bDIG+V|S^%6FN;3P&p&|fl zQR-zlFh7?7;8LE3*@Yu_-hqJ$`?#PoK-D0eIBj9RpiCN`{mJ!v+Q0oe*UNSRW&o#> z05db0B&UJ^#s)wl2QbS*@N`=MKTZmOZ@K`O+h;Sd_XjqB=t@bZ2!M`{9l+c^Gs>7G zQOULdVgdl)3V^wd0NNz+_5i30zOQlt0_=Zn3BZ2nIl!fJK^BCq0BDj0dhUW)+50P< z0>D%LAk+nbQbi2J+5u#L2e$yPCJB2Q0+1kt0^kznX_x_|X^7*3r|ow{6u_AF0sf>u z&}mnUrU1aq7Tnpx=#|pKk7I@`5HCo;NvI@~E=swyy8z-Yke{?_GHrMFW3KldKnJkP z0MV5t92M*ipaVbvcrFX@VUozEA&v{4%K{i93xEZ>EWih)g}Y*gED(PdfK#`QsF8LT zK->lLLD(b>?|sSjsRQT$b{QaQP?B{39l*UW@In^g^CXc?LmU^pkOeSC768WuvH+iz z7Ve4}vOxS<08ZVwppkYLfHq@Qn+JddQdOG=fNa&F%k$`z936(!)aw8`fDWJo_-_E* zu1UI5ny!wZe-Wis5EDSLcbM)MplgKayZ{{wFaZ>Mhv|L+x<-i33(&Cu7l7M4O!o`W zH9~Y=fQ|*20E)fCbiV*yBShx~=vaU&2Hf6Zx?g~<5u)<~bS%IGAf5%%{eXB$CS8?f`|v zOI#yLg7ec#$`gxH8QgtbfW|14r4}g|>zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)>;I$wfnds%H9VCuKiyE(uoPyaSW-L^LCOi*C7Le*25kLa|<4tnTTIFGM`)J!KMYQ-{(27 z>=s>hAz6B=!#$RRt*oN=(`M-FzdW

5ICSsmvqQ|^#s^%uuGEV011{Xfr51KW3U%mfg nuZHyB*4)hvn>Z>@%wMHl6>O0pvbUS3j3^ HP6zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)Ys-HS0I4Dlw7k(<4^+vRhZm91s3+wZQC7xsN(X~4AlD33rftEaH|G>f(^`#x*4iCj+o z`+bp=&3Y&9g|p}It6n*?t>Uo!8c+A)yf68CQWjplxZY)dwT*#QLu^f*o>b8;uOhFD zvbU}Zc3Lmk(7h#knT^Sx+*{S3mhFiDtX6Nhf6>ghq9;0}Z~uGuzyFEx$@t%~A5&(@ ctG<_f&)B?JsOW{Dbr{Hxp00i_>zopr0L=D&00000 literal 0 HcmV?d00001 diff --git a/graphics/rogue_voltorbflip/gameboard.bin b/graphics/rogue_voltorbflip/gameboard.bin new file mode 100644 index 0000000000000000000000000000000000000000..c9c88b9e7e3bdf7bb51cbc6843bc36932281f2ca GIT binary patch literal 1280 zcmbu9=S~7a6otQq0Y+REd+)-66|wh%Sg@dC#rpnF;jkAXVM9sSo17n;IhpU?IWqtj zz9!0FvBpxyhB8(B0t5*WRJByohE`$PvFV_bE&^5l2;D?fgdSIWUF~zV-{=5?3=w9S z5k?tf+~W`GkPh0lbb?8=9cGGYw`M&4S;Id^lo(Ov5XUL0bd+G8gyCOcktLQ{@%V*5 z$tp>eVvSTu<^MVxY#RP8w%Kv3y8m55dXK1%>8S1KxOPe^9qn^K!tft*#4#tFdiEDi zFMpad(kjC_8N)Ao7qxo-GXI6kf9djH8O?G{R^4#Ro#C(T7fvsKj(c+Ifk!fizmC6d ze)2q#Z-T#^BFWOfKJ&tB6a2OE^Ts>*7WfN%P-ubwlP|to;Q!&5LS25jp^|e+i_Bce t<=pC>pWIN%xuivAF652#M+Sf$+E7n+c@!cxEUw_P5M3w*m literal 0 HcmV?d00001 diff --git a/graphics/rogue_voltorbflip/gameboard.png b/graphics/rogue_voltorbflip/gameboard.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce6b5314037f95b96d1f22079813ac27444e9a8 GIT binary patch literal 1178 zcmV;L1ZDe)P)bD z6(2C8Fa}xx000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPb7lLMg3#0F>4tlwuf!i(?fo>j)K0r~xFVMkji!NS^P8o}C-U@3I1W3rLrE?I# zPY}T99z*buL5m8a%|%8P_UEA}iSi{0{KvKrqr-rURt-QI1!Qy>u(0zlS`QwIA`inj7))4?0P4GV5gr80OZ*W&R1%309}B1> zMyJC7F)xJ@iB!0#xsqiAXfpjcAQbQfU-(X*4Up0S=p5LN`MiV)V@fpxCzB7O?m&c} z=-7inRaG~Wi5CGAgAvn19t&A&OOz^IfTCt*RfanDU?7PcfCNCTOKn_#2T)SSb#^`& zd?GRF0@eT&0#}jm0JyO;V4`le0NQ@b63&Sp00>eh2Ld@@0LujkT*cY~cm@U}C|H8v zQ8qXSLlWyH-bo_dM~Y)9kY+*>Kdmwg*de>g+A^Yau!lTRbs4MS@Mb@t*$Z=OBo1|K zG{P1>AsL4+gml zc+h9U@AK&Im=$eOR`6=Z3ZsPyAv7UeUtjkDYrpWH0MHh%^EFW)Ky(lg7iO@potUHS ze)v29ClRADbGY_%uEMiI&?*XTIeVkm!M@J3+4qqP_aSi}yuvwf&#-za9|Gujqr3;e zPGJC+pnMFV~Q~*Nsv62_vMb;*CKY(Y@0Qih7s|xi-Yd2Q1uL?K^?zaIu#4dSMntI~8rSbc}(7Ka48Ky3IkXf*+h*c0P1X`O#?)g$sS3V>MrBeSK031kvatN#K9Bc!Y=$1JEIFJe*f}|Rt{#XF+JyNEg zc<*RH)tzNbVw@6fQYjdq6`Z_VWfq`+Q>oI_6ITG1j+| zs2i&ajkf;5%hOt4N5M-xyE{E?p1qjX`aB9=R8sZ|CmjX#w9>nFaKchqzan1?b-g-R;`~Q0qGb=$8+r8xC&`fY(8V8}As=u>dhW s5^#GgV0tWokLF{V!Z07*qoM6N<$f-ar%zW@LL literal 0 HcmV?d00001 diff --git a/graphics/rogue_voltorbflip/sprites.png b/graphics/rogue_voltorbflip/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..0a28ca5f213c7df38eeff19ce24a26b2d6df83e4 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^3P9Yz!VDy5c$8@ZDfSXiUsv|$Tq45yibCEwFM&eh zC9V-A!TD(=<%vb94DLQIKw}ijQi~Lf^-Ky|mplY2;V3Eaa|g;81KA8-4Vv;miY49A z*O7r?V?XzwL{=c*AiyWY_5acTKrm&>nxLSl|IecSZ^>G_cI~xm*Zwa7>BIzUa!Ypt zMH!R4-CY}{vLmQ@&NCF zvlox$c=4IJZ-2@0bHe28h^{UF_VnCSoLnSqoziimY6IV!-~Hi}8|4mcl1nSvV7bfJ g{Y3kmn8QwA*sg4IGD|g_WCIEzPgg&ebxsLQ0M**B?f?J) literal 0 HcmV?d00001 diff --git a/graphics/snake/berry.pal b/graphics/snake/berry.pal new file mode 100644 index 000000000000..6cc91d730cf9 --- /dev/null +++ b/graphics/snake/berry.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +230 255 255 +66 66 66 +239 239 239 +156 156 230 +115 115 189 +255 255 255 +140 247 214 +99 214 173 +255 214 58 +247 173 58 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/snake/berry1.png b/graphics/snake/berry1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed8728590546928966f7bb5afa29cc5797403ef GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!VDx|E`RzTNU@iA`ns~eWR?-J5Q_h~g$XDm zUg8>25}cn_Ql40p%HZzf0yIXUEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4& zeH|GXHuiJ>Nn{1`4FY^ZT%Y~_@8sn4{{8zobDk9!@BRP(f6w=8$=BBYzh?D)trbW& zDk!q~{tqa^nB?v5@_#A&r=viQji-xaNX4Aw1PLJp2Cw!mr;IR1$Buvniv%M&LOqV& zG-NnqVAf{PGS_zjPjZKd^MdYfja6lB7Xto>F*AfjafHqOGLsKvji;-h%Q~loCIG1x BStbAg literal 0 HcmV?d00001 diff --git a/graphics/snake/berry2.png b/graphics/snake/berry2.png new file mode 100644 index 0000000000000000000000000000000000000000..3bd9836bb91d71421b2f7c721ad89be05cb1614d GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!VDx|E`RzTNU@iA`ns~eWR?*zm-OFU=n51P zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuFwAecXD!i|Ni})InRoV_x}I?zvuh4 z6%^Tg{|6LdO!9Vj`M;F?(@`MD#?!?yq+(8Tf`pI)gI9Z(Q%0DhV@JS(B%z3oP>;Q9 z3>eOMcsCmyIdy4ak4cA!b3)}#ja6lB7Xto>F*67q<(8VJS9%R(ji;-h%Q~loCIEP} BS#$sZ literal 0 HcmV?d00001 diff --git a/graphics/snake/berry3.png b/graphics/snake/berry3.png new file mode 100644 index 0000000000000000000000000000000000000000..be4a85aaff5df7b9a5e48b78ec3ef7e16c89b459 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!VDx|E`RzTNU@iA`ns~eWR?*zGfb9!@ee2@ zUg8>25}cn_Ql40p%HZzf0yIXUEVW3%SkI)eb;(1Z5{{ArKX;&vF_6vR)u1U4q*&4& zeH|GXHuiJ>Nn{1`4FY^ZT%Y~_@8sn4{{8zobDk9!@BRP(f6w=8$=BBYzh?D)trbW& zDk!q~4srrxlDE6d|E27ojsiJ0o-U3d6?2jkB!mvd$@?2>>Ds BT6+Kh literal 0 HcmV?d00001 diff --git a/graphics/snake/bg.pal b/graphics/snake/bg.pal new file mode 100644 index 000000000000..ec4e1bc96090 --- /dev/null +++ b/graphics/snake/bg.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 255 +255 247 140 +222 222 222 +214 214 156 +222 198 107 +173 165 173 +140 148 156 +148 148 115 +148 132 140 +123 115 123 +123 107 115 +99 115 123 +107 99 107 +90 82 90 +66 66 74 +66 57 57 diff --git a/graphics/snake/digits.pal b/graphics/snake/digits.pal new file mode 100644 index 000000000000..581425e1fd5d --- /dev/null +++ b/graphics/snake/digits.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 0 +99 99 90 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/snake/digits.png b/graphics/snake/digits.png new file mode 100644 index 0000000000000000000000000000000000000000..a15ade978860e4b9c012d9399e144670929b183e GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^96-E)g&9a5&NHwEQtTz3zOL*qnPtVf`HS*Wt^zNd`E_n!4!ckJ-=MI!H2C^Bv8Z_mB6id3J zuOkD)#(wTUiL5}rL4Z$)E0F&GpCLIp3dkS^WC?0{0@X1ldAqwXbg;^L068I^E{-7; zbCMGdut~5sv@j@h9bD3&$rk3$!tgpY!9}s4OOWxvw?!{ocg*B$Rk&7barUs98_NO7 zuqi*pXWu_jBJcP4L{I#jm#s?wlM1;-@4CnQU}OmH;;?yEx@G*0~Z@u6qZj2|anT=4kupvL3JkMM&)$=luK|5El(M}h1rPZ!6KiaBqmICixd2)HUYWqZG6j^MuD=J3r)??U$**M)C{ zXGoh^ehazzZc0zH&;R1iYa_TP%s?QE(SSz%06>Gzl3yOVHSG;v|$q_#M;7(Al zd^7Wl%PoRc^H^ne7PTc_G|=I@bLeS|UL&_9qc>*_o4RE4lN28Q_w)DF+t?OV&zCas zKe(pa;0{A^(u&@hy{qhVeLnqDstjJ!rIOzjJ5lAE_|e2hq4s^uX$Jxf-GjP3t<0x* zo{IHwGJodzD)r)Z$r3e3kF1H``R{#J$rfy2o4k`-aiz<#D{gZCuAh(Py|~I{Rb;1z zX--G5a@6+D{jW?7WfbR}{bIHYaZfQtTz3zOL*qnPtVR|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuKyYSuUoe+Ei2bAEHmR#RnT4D90qa)8N$@7xI^SS)S{ss$v? zt<%_cdmJogJ-ny0are~^ZI1T@E*PX*K3Mzh(1pDR4m7qhmMO%GnYTaSwH9F(FqeoB zuvpHs-~s!VS1o_ey8qml#lLUw3&k}H?==^D@otqn=CtN(0E?g0hISLRM2oKv)>X~; bx3FD*ana82Tvp5ULH_h~^>bP0l+XkK9CVRN literal 0 HcmV?d00001 diff --git a/graphics/snake/onix-body-2.png b/graphics/snake/onix-body-2.png new file mode 100644 index 0000000000000000000000000000000000000000..701653991d9b62963091728287ae940b6ac2c161 GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^0zmA*!VDxI2ESSgq}WS5eO=jKGRq1oF_5 zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2>-7|3SuYS5GiQY`6? zzK#qG8~eHcB(ehe1_3@HuKyYS1DW@(UR^nRwt<0xr;Ce(gv8!0TWX4mnyah7y?b~2 z`0*ewFL!tMhK2@hH8mxf#mj*j7?Zr+T^Kr8Wj%nLCQlc~kcv6U2@-o6o-bgSkv7rt zu@XnpoEI-%STKtuzqBZRc0$sfjjiv~r@nc8ZVN8;^~udQc4v|3(_R_QaFdBgJ?$LB zsv^OJ4>Ky6jufzXg-$7-V^KWe;Nr#0pPvz2z>!?Z8=xD|;`o6hpp*NAmE%ml2@C=T kTwGi{Gwy$Ea1_;HC=8B?UA~+DJkT`^p00i_>zopr07hJN(f|Me literal 0 HcmV?d00001 diff --git a/graphics/snake/onix-body-3.png b/graphics/snake/onix-body-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ae0ba5b3f870815aff804acf03366679480043 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^0zmA*!VDxI2ESSgq}WS5eO=jKGRq1wNd|uvs|5;) zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*Z&Ovfy{eXudbXu+rYrU)5S$XLSpZhEj2|&&DGW4-o3kh z{CJR;m%F=rLqmhMnwpZ#;^jaMj7i?^F8`OZe>w`}lzF;1hE&W+PLSBr@VsXM!wkjC z7YmOFs$9qc0!9(*i;PST3!P6XOl)SCcyezqgI1AXfclW{s9lk2^`)ej#%I#D2@ zk-#kUvGV)5=R6*~{S(;&eoHd4P3z;6pTNU>I5GKgAK!#r9U+Hi)_^tgDG3Fv+zhw& WhN_CKWK9LSfWgz%&t;ucLK6V6QEs^a literal 0 HcmV?d00001 diff --git a/graphics/snake/onix-body-4.png b/graphics/snake/onix-body-4.png new file mode 100644 index 0000000000000000000000000000000000000000..da0657b4f7680c7b4d04f647e626aa24843b4a03 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^0zmA*!VDxI2ESSgq}WS5eO=jKGRq3GSlS(&Xbcn* zFL8}13C>R|DNig)WpMX#0UD!FmRh7>tY=c#y5u2H2}enRpF2-~Y1_lP6E-n%h5_`97sVORIuCD&}?%nO< z$Ai4Q+}+(98XC0K)RbfvF9&L1O!9Vj`M;F?(@`L2qo<2wNX4A16Abwd8SuC^A31Pg z;nXUoY4emP9q&54!Gf7PXz4%2M}BLqQaUW$)z2O1*OX?KKIA=b-`bkr*5CcNW@lA@ zU;AU316Rk)sILs49&yfXYv@$go>1jf8nX9+*A7PKXJ;PzsBV1vPFqYf{#@*d$(CD` zzCOG9=h=z(ulFt#-FVdQ&MBb@0GlzHlK=n! literal 0 HcmV?d00001 diff --git a/graphics/snake/onix-body.png b/graphics/snake/onix-body.png new file mode 100644 index 0000000000000000000000000000000000000000..18eaa8aca6fb627895886967ed21d60ff15ee9a8 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0zmA*!VDxI2ESSgq}WS5eO=jKGRq1uswfsE&j1RE zm$*ih1m~xflqVLYGPwJ=0F6;7OD$3`)-x$=UGfm9grlUu&mAaZ3}iESHE7BMDVB6c zUq=Rpjs4tz5?O(Kg8-ip*Z&Ovfy{eXudbXu+rYrU)5S$XLSpZhEj2|&&DGW4-o3kh z{CJR;m%F=rLqmhMnwpZ#;^jaMj7i?^F8`OZe>w`}^n1EEhE&W+PLR0O@O%MJi{hP& z{~2A3S52ROy+QJrn5?XVqN3{3PoJ0*RL_bnWO8V$sQh_mrUF~CySqk2%f>xL&s;WG zE?U^gl)$!l0YmLxr_cho4-7NXw!HYkpT;rOnW@q7#*W2{ZCaqP$(F$)UAe=+fbS#FX$+pOelF{r5}E)jT6&oP literal 0 HcmV?d00001 diff --git a/graphics/snake/onix-head.png b/graphics/snake/onix-head.png new file mode 100644 index 0000000000000000000000000000000000000000..efe6f9935b044f71a193948e826639e130ec6e25 GIT binary patch literal 1039 zcmV+q1n~QbP)00Cl4M@0Xn2lB-L00T2g zL_t(|oXwR#Xxl&(#&uvaN0uEYC4a~f5bh8#hl-&Tk|HpHEX61oO0Z3^@MdBR!W|4j z$OuY@2!l{D9=eovE2R+VRLEiwg%Av0L`j#DMbN=s)pvKYJ7j1&H0dq(`26nf-Ot}U z3BnzZ#dt=Wvmh7GsV$KO(!rx5%|dcPF3>DwACdYA1R2A@t^vQ*OhqA9ML-^wWt=?~ zkVS||loJ89-#77#cgKQI&wWxpu>kd2r@RhP zoRxU51I+?yR!%Yw#G@)NIs0^vL6o{?*Q8RWg|{dkWLreBfmp)DjwAQro<(As1g@HK zu#B<0C@eoeBl*vzMIq6A;Ji+@V0qdqY8KsR#c*842bD|?40%SI^GVlhybdIacYq-t zx1r$=IgN2JzNFH6=nX#ty>1s4!xI(>gY z4OIU&)uS=(FaKQihtOZ6NY@*a3jtmGs=7bCf*xc_h0)+RP#F|vmsL=Be@!_<0iCNc zppEE%=&#*baKli-atut!#0VFP<`N6UX0yP^X*Ma*EEIl+=Le((+qMa*P}7B2Zi2_w zf`AYOq&?63@$ecRGNft2OQ{P+Tm{P5fZb6vDOm?}OLhNT<$upY^$z>$&!ajE=6vSF zW_;$v5>7M40?{<<43uYJms{*IPZW?6hGAg5!};XRE+>YwAk{Q&{CHH)!749&k!&4P zuN>OM&e8T7y6qm_Qg2Lk4k)pEzo1g_JZrGuEhnACLGqZ-)x1(+87*06MN1Z8A0Fi3 z<~Dt#76<_gK~h0(;xN1dp-4yoZJBHh-gG>#CoI=g$ttsU5~+XK zQQ}hNAK&}0$5K4sc#`IP=EQd8><-K5=JO0xvW*Rof`Sj&lYklsW3Uh;)$=CflfVvU z#H8-w$5)zmAY=-gZ$l4ONnoB)1Wz{FbK8BNfujClM~NwV(l0%#5=jMR^?U#T002ov JPDHLkV1j34!ukLJ literal 0 HcmV?d00001 diff --git a/graphics/snake/onix.pal b/graphics/snake/onix.pal new file mode 100644 index 000000000000..155aac8f1caf --- /dev/null +++ b/graphics/snake/onix.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +222 213 213 +169 155 155 +48 48 48 +73 68 68 +24 24 24 +189 180 180 +124 114 114 +131 123 123 +246 238 238 +219 199 199 +82 74 74 +71 71 71 +128 128 128 +43 38 38 diff --git a/graphics/snake/snake-bg.bin b/graphics/snake/snake-bg.bin new file mode 100644 index 0000000000000000000000000000000000000000..25dd9c9b8c82db6951cfc26495574a5af8da0355 GIT binary patch literal 1280 zcmds%Sr3CC5QINOtZl8m@B8lm|Am!R9^}Pfnl>q$eb}(WFv9_gs70t48JZYFLWh(t zy~ga5N&f&XE96ochKv|9Y0N1z<}3=vyuv54!jcthHjTMu$DTuhad^A?F#eL!;lue$ zMu#_|Cq%!`Z}o)e_xVHh|C|4z`hEYcpWpQV)BN^4e|7(KdX)Ef;>?9>EpOawwVi+P Rl>QewD}NxBMlC{B=r?DAD6Ieh literal 0 HcmV?d00001 diff --git a/graphics/snake/snake-bg.png b/graphics/snake/snake-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..fb88f9083280574dd5e10f0b2a38fe93948b8419 GIT binary patch literal 870 zcmV-s1DX7ZP)ot^pSo1cXLmWyF|Bs@HKAuxx~V9FB{JJuzUEr{IiQVeJuC%eUR`3iteuCnXlBe0;r zRu>$1>>3^*TrdG24D6P#0C4a{mYf^5$zfaYb8GcfAVdVEAXqNM!1g2L1puNS9)h4B zLExhm0K_|?!2>~L%v~n|Nc7d_MnKj`0`7=!PkZwabrO)`_3e39 zWXP)3rT4{`a`5k{9Qf9$5{M-dp(P29TC0@vphY-9iIaimX5JHO%dh-_0m+N~dA8ERmy zRM}2->;m?Oq%d1yrJ%7nPzpYIB>EX!j)&(##FcMMEj5uGlWeUuY^|jh@KQ)gfD`21 zBKcF93+|`^5RDw~jWKy{j5m#mQsKXvjdS6s0SOB3)peQ@U8m>YPfkuwPftIoG@Xod z;kbbzVz|#`&GWBkXJ=PeSD%OPI2U$D4U7b@(_u{~Z{9)P{+K?`1-}0e1pIiI11o+H w;n~Yv*j@e`!Px(@S{2KnJbXLM&tvz00di75taS7NKmY&$07*qoM6N<$f+542F8}}l literal 0 HcmV?d00001 diff --git a/graphics/snake/start.png b/graphics/snake/start.png new file mode 100644 index 0000000000000000000000000000000000000000..3a9d4ccc1585b065b5719bbaa892789e421f4e96 GIT binary patch literal 489 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0J3?w7mbKU|e_7YEDSN508vSOT!%aj~bfkNUX zt`Q}{`DrEPiAAXl?mjL+V-(6#ixiCYObT0`oV;Rxq?SY#1Ur?4BujKU+~&L(xcxoDp)(o2>ABOt zez~xuHrt?ZOWl^1%@^5>&UR_q|4}((_52UVPE!_NHz5xpkNLt|&ZQkv_*UEtB_2>(a8|&q4`2|gVXH}0Z4yVMdqA1Qmh# z!ZWfX4LknIUzBKjeB*DmzkB8TAc5uS8d_85)i!y_{QM>VPp*z(F^|tubP0l+XkK(j3Dc literal 0 HcmV?d00001 diff --git a/graphics/snake/text.pal b/graphics/snake/text.pal new file mode 100644 index 000000000000..899ca40a629d --- /dev/null +++ b/graphics/snake/text.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +240 0 255 +144 40 200 +248 248 240 +140 146 152 +248 200 232 +208 72 248 +224 124 72 +248 248 135 +248 224 96 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/include/config/game_corner_expansion.h b/include/config/game_corner_expansion.h new file mode 100644 index 000000000000..897207941421 --- /dev/null +++ b/include/config/game_corner_expansion.h @@ -0,0 +1,37 @@ +#ifndef GUARD_GAME_CORNER_EXPANSION_H +#define GUARD_GAME_CORNER_EXPANSION_H + +#define GAME_CORNER_VAR_ID_CHECK VAR_ROUTE114_STATE +#define GAME_CORNER_VAR_WINNINGS VAR_UNUSED_0x40FF + +#define FLAPPY_VAR_HIGH_SCORE VAR_ROUTE113_STATE + +#define BLACKJACK_FLAG_INSURANCE FLAG_UNUSED_0x020 +#define BLACKJACK_FLAG_RESET FLAG_UNUSED_0x021 +#define BLACKJACK_FLAG_BLACKJACK FLAG_UNUSED_0x022 +#define BLACKJACK_VAR_PLAYER VAR_UNUSED_0x40F7 +#define BLACKJACK_VAR_DEALER VAR_UNUSED_0x40F8 +#define BLACKJACK_VAR_BET VAR_UNUSED_0x40F9 +#define BLACKJACK_VAR_OPTIONS VAR_UNUSED_0x40FA +#define BLACKJACK_VAR_OPTION1_TILE VAR_UNUSED_0x40FB +#define BLACKJACK_VAR_OPTION2_TILE VAR_UNUSED_0x40FC +#define BLACKJACK_VAR_OPTION3_TILE VAR_UNUSED_0x40FD + +#define DERBY_FLAG_NICKNAME FLAG_UNUSED_0x023 +#define DERBY_FLAG_RESET FLAG_UNUSED_0x024 +#define DERBY_VAR_RACER_NAME_1 VAR_ROUTE105_STATE +#define DERBY_VAR_RACER_NAME_2 VAR_ROUTE106_STATE +#define DERBY_VAR_RACER_NAME_3 VAR_ROUTE107_STATE +#define DERBY_VAR_RACER_NAME_4 VAR_ROUTE108_STATE +#define DERBY_VAR_RACER_NAME_5 VAR_ROUTE109_STATE +#define DERBY_VAR_RACER_NAME_6 VAR_ROUTE111_STATE +#define DERBY_VAR_RACER_1 VAR_ROUTE122_STATE +#define DERBY_VAR_RACER_2 VAR_ROUTE123_STATE +#define DERBY_VAR_RACER_3 VAR_ROUTE124_STATE +#define DERBY_VAR_RACER_4 VAR_ROUTE125_STATE +#define DERBY_VAR_RACER_5 VAR_ROUTE126_STATE +#define DERBY_VAR_RACER_6 VAR_ROUTE127_STATE + +#define FLIP_VAR_LEVEL VAR_UNUSED_0x40FE + +#endif // GUARD_GAME_CORNER_EXPANSION_H diff --git a/include/constants/global.h b/include/constants/global.h index 8ca3861709ca..2d15791a44a3 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -9,6 +9,7 @@ #include "config/pokemon.h" #include "config/overworld.h" #include "config/dexnav.h" +#include "config/game_corner_expansion.h" #include "config/summary_screen.h" #include "config/ai.h" diff --git a/include/constants/songs.h b/include/constants/songs.h index 104a4b3606c7..618d9c388bac 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -490,7 +490,17 @@ #define MUS_RG_TRAINER_TOWER 556 // MUS_RG_T_TOWER #define MUS_RG_SLOW_PALLET 557 // MUS_RG_SLOWMASARA #define MUS_RG_TEACHY_TV_MENU 558 // MUS_RG_TVNOIZE -#define END_MUS MUS_RG_TEACHY_TV_MENU +#define MUS_HGSS_CASINO 559 +#define MUS_CASINO_PLUS_1 560 +#define MUS_CASINO_PLUS_2 561 +#define MUS_CASINO_PLUS_3 562 +#define MUS_CASINO_PLUS_4 563 +#define MUS_CASINO_PLUS_5 564 +#define MUS_CASINO_PLUS_6 565 +#define MUS_CASINO_PLUS_7 566 +#define MUS_CASINO_PLUS_8 567 +#define MUS_CASINO_PLUS_9 568 +#define END_MUS MUS_CASINO_PLUS_9 // These PH_* constants are phoneme sounds used by the "bard" NPC (see src/bard_music.c and src/mauville_old_man.c). // Each comes in a triplet of PH_*_BLEND, PH_*_HELD, and PH_*_SOLO, and the name of each triplet incorporates the English phonetic sound it represents. diff --git a/include/derby.h b/include/derby.h new file mode 100644 index 000000000000..a508949dc216 --- /dev/null +++ b/include/derby.h @@ -0,0 +1,8 @@ +#ifndef GUARD_BLACKJACK_H +#define GUARD_BLACKJACK_H + +void StartDerby(void); +static void DerbyMainCallback(void); +void GetNewDerby(void); + +#endif // GUARD_BLACKJACK_H diff --git a/include/flappybird.h b/include/flappybird.h new file mode 100644 index 000000000000..b92547778a8c --- /dev/null +++ b/include/flappybird.h @@ -0,0 +1,7 @@ +#ifndef GUARD_FLAPPYBIRD_H +#define GUARD_FLAPPYBIRD_H + +void StartFlappyBird(void); +static void FlappyBirdMainCallback(void); + +#endif // GUARD_FLAPPYBIRD_H diff --git a/include/game_corner_blackjack.h b/include/game_corner_blackjack.h new file mode 100644 index 000000000000..b991249995ae --- /dev/null +++ b/include/game_corner_blackjack.h @@ -0,0 +1,12 @@ +#ifndef GUARD_BLACKJACK_H +#define GUARD_BLACKJACK_H + +void StartBlackJack(void); +static void BJMainCallback(void); +void ResetAllPicSprites(void); +void MainCB2_ReturnToField(void); +void ResetAllBgsCoordinatesAndBgCntRegs(void); +static void LoadCasinoSpriteGfx(void); +static void InitCasinoSprites(void); + +#endif // GUARD_BLACKJACK_H diff --git a/include/game_corner_block_stacker.h b/include/game_corner_block_stacker.h new file mode 100644 index 000000000000..2e0573ac5826 --- /dev/null +++ b/include/game_corner_block_stacker.h @@ -0,0 +1,7 @@ +#ifndef GUARD_BLOCKSTACKER_H +#define GUARD_BLOCKSTACKER_H + +void StartBlockStacker(void); +static void BlockStackerMainCallback(void); + +#endif // GUARD_BLOCKSTACKER_H diff --git a/include/game_corner_gacha.h b/include/game_corner_gacha.h new file mode 100644 index 000000000000..894b984266f1 --- /dev/null +++ b/include/game_corner_gacha.h @@ -0,0 +1,7 @@ +#ifndef GUARD_BLACKJACK_H +#define GUARD_BLACKJACK_H + +void StartGacha(void); +static void GachaMainCallback(void); + +#endif // GUARD_BLACKJACK_H diff --git a/include/pachinko.h b/include/pachinko.h new file mode 100644 index 000000000000..d46b2c1d170a --- /dev/null +++ b/include/pachinko.h @@ -0,0 +1,4 @@ +#ifndef GUARD_PACHINKO_H +#define GUARD_PACHINKO_H + +#endif // GUARD_PACHINKO_H diff --git a/include/pinball.h b/include/pinball.h new file mode 100644 index 000000000000..17f5b0ba5b48 --- /dev/null +++ b/include/pinball.h @@ -0,0 +1,4 @@ +#ifndef GUARD_PINBALL_H +#define GUARD_PINBALL_H + +#endif // GUARD_PINBALL_H diff --git a/include/rogue_voltorbflip.h b/include/rogue_voltorbflip.h new file mode 100644 index 000000000000..b68144bf3c44 --- /dev/null +++ b/include/rogue_voltorbflip.h @@ -0,0 +1,6 @@ +#ifndef GUARD_ROGUE_VOLTORB_FLIP_H +#define GUARD_ROGUE_VOLTORB_FLIP_H + +void CB2_ShowVoltorbFlip(void); + +#endif // GUARD_DIPLOMA_H diff --git a/include/snake.h b/include/snake.h new file mode 100644 index 000000000000..19c1001979c3 --- /dev/null +++ b/include/snake.h @@ -0,0 +1,7 @@ +#ifndef GUARD_SNAKE_H +#define GUARD_SNAKE_H + +void StartSnake(void); +static void SnakeMainCallback(void); + +#endif // GUARD_SNAKE_H diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc index 0e4980667c6b..7b937165686c 100644 --- a/sound/direct_sound_data.inc +++ b/sound/direct_sound_data.inc @@ -6391,3 +6391,23 @@ DirectSoundWaveData_sd90_classical_whistle:: .align 2 DirectSoundWaveData_sd90_enhanced_delay_shaku:: .incbin "sound/direct_sound_samples/sd90_enhanced_delay_shaku.bin" + + .align 2 +DirectSoundWaveData_pinball_7_clav:: + .incbin "sound/direct_sound_samples/pinball_7_clav.bin" + + .align 2 +DirectSoundWaveData_pinball_11_vibraphone:: + .incbin "sound/direct_sound_samples/pinball_11_vibraphone.bin" + + .align 2 +DirectSoundWaveData_pinball_12_marimba:: + .incbin "sound/direct_sound_samples/pinball_12_marimba.bin" + + .align 2 +DirectSoundWaveData_pinball_16_drawbar_organ:: + .incbin "sound/direct_sound_samples/pinball_16_drawbar_organ.bin" + + .align 2 +DirectSoundWaveData_pinball_52_clarinet:: + .incbin "sound/direct_sound_samples/pinball_52_clarinet.bin" diff --git a/sound/direct_sound_samples/pinball_11_vibraphone.aif b/sound/direct_sound_samples/pinball_11_vibraphone.aif new file mode 100644 index 0000000000000000000000000000000000000000..c174cc4f8e32f5c7cf3e233504a2693d183c9e60 GIT binary patch literal 2040 zcmXAnS92N(0))vqCxOTeLmosDL9(@$)0TH@?b>x+-GAJt-LrjOTegs}0>(;+%#br; zK){gWsp|TntNVNEhkp6ykKZsDa(DmL%a_mI{PvJBJPh`M1Td5*^l#mV{-C#SUq63f zq5roB=MSg6Sx?+qa_a-tn6}PNcpOPT)nN;SgY1wh+-SuJWRbEQqpT$ALLNU=OVS8_ zr02lx^=u2D8x5zPRc+A4x_g~5LUA<4y(Z6GTiw;A;2pWx)=KUe`JRS8B!{N}ZbrDk zYp~RHlrLKg$1wqG#VcO3aVvJDAR_S8xw(b|s$dLlDVn}()EduQKKzsz+iKG}j!WBprBruJsePBHVXCV;EiD~1Cv!A;!z0yT;#dEL?B86K_Q z9~EUhxv<6C1D&EWL5^W&K9u`S+;w2W;Myl6z~tEP&lqGL=j&CWvY37>AUH_X5OFNO z8v4u$N81k+Pf%(yR7pr75|%}J^_;`PbgaB`{@V{4lFFVmtUM+g)x0qpm{lQworeEz zPpYlpA&nzeqRU;!Bg=58WC{l#L)|Q%J=R5G{gHV->9b#C} zD-WoYTded>HqmI`9(@jW@$>nDz5U!}kf`iNN5R1ty=_?Tve} zvoE1yyV~dww2%Q*S$Aw=LU%Yt;wN9OEA?i*#n6~d8nx30Nmu>pxRvnxBZa$0vBy+f zjB=f8+b)_g)-J?dO-Hl4tK-v~My*&!nFhTE(77HNxR~L5 zQ3@Xi619iZ4R|1^QyIKo9e*}mjjGp&XX#S4RGbRbMzsR+x{a*)ayh7ljzXz&En8V| zLA?TiJRThtvs{i!=O>|Ltpqn`LY-Ejg}h!B4YOE}vfod>=PLPZb1nhYDy{XgOUYQR zuqYflzRVYM`6^bT0#s_}u3br8;V}2Pvp^(M%)?E>hFT*9x4jMp5l2{{snfGtxRObC z2qLXqZglQA#Z&@r-H!&(!}(Goj}SIhQkCBI7}}uW@Yq%?bQ&*YQ+b5CDN`u*KA%}a z!BLj2#Oe2BE(60|s#va&S-f8J28m2ww4x_hiCi|B8ImQ6O{LZ2GYQC4!m1HIzfR=g zSYb$!O2ul(y94rR6w;~^4qc}6$wXnmkcc-m(5?p%QYn;q={9(s$;MOpF;gU#D($;2 zt$@Oyjw;u|NG6?(7v~J&=7#2BzLrC05hvw~%SakdM5}Yg#)e4$z*QVJojlH8Uf*Wm zNW4B}iTF~`v1^y}nGDJxb8`{PC8EjdlFb)w>b7^S3O<8F?&YqoQg9-csACv>p+xWX zSmj&}n}EVsH>q?Y5^t@UeEz1{?S-T~E*sxZ-rOeBiR*L=!{l@2CXdG~5pvnYb}D?E Lgd<@XSz`VN8l>&P literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/pinball_12_marimba.aif b/sound/direct_sound_samples/pinball_12_marimba.aif new file mode 100644 index 0000000000000000000000000000000000000000..3521fe4aabfb84c9a46356682e4b0920f0d6e732 GIT binary patch literal 2422 zcmXX{TZkLy86Ax@_t9u1jjpTJuGZeg-c3ThPBF3D)U{LF38Xenn}=Rr3Wd@@pGpd) zEq?7o>9Z;Hq0kmXpd{GEEeXWIt}pen*z4?i*L%@rw30@*x!*7S#_oV%esMV8Ip_Pn ze=c19?t2JA{o-5iT)1%l@_X=({mc zm$!budEY1$ep$c%$tT{utIvi^A^h;n;NHj0jfYEDetlWbj_*8LyY$hOAFLMku70{R zo>}Tk zYY+X#+|rqI#l5GhGt%bXtWDd}?q~Ph<40(klWtsp;-&c4FC86i52m8Ibm3HyFNWJ2 z_Uv47VTpeH`NnW!&#VgVwT)*Fp5V*Nc}{SjtjR*9a`N0O#+Eph^zt`eO-x6vyI+j+ z0!i@dog0s)0d?ZyYGPmPwVj1`&(Gy)YkOT6ipANZ>F2lqyW5eNV-j))Qi)X%;b&ToIsDAyem08}~ zeJo)d%@$QX(;Qpv@m8F#q*pD&;L zG=@gwCtt4jU97sYoJU+ob-3j>mK&v1|GAXRmS^WP-P7zH+Cj;Q4q4MJyZ~yFD*7WSGQ~%6K437Z%D14fndqV?e9F@>uVv! z5WA(kx)EJ-E<7ooCwfy0dPSob3=6{_OiZfl_VF#NuuOsxp#vN96b)Rp-xY_lgJ7s<>Z%zK981$InM{!kLuYg8WE6&OgtKIz%Y)uP50Ef$ZB6q+ zG>J15hGTdNqj{dEsT6{w2pY#xN1rH~Zu^PIvkg_#eH2Y5fX0oII6+VpfuRTr&@`Q} z<;g^IQBY#(vZ}j*7lxtddPpKkaao2)p+L%{(W?Qz?pKXo$|VOxt#S$JBKlptcLA z5JV&}3?~_qAldW_&O{V>mSuacoMt&T%`!C2urz^&uBDr%13ZSV$*K$jf*?W?iDZ(Z*)+$e8HSC~ zRMIy!O|xCs(RFz;o~VWahL9+M;gDlC!(}pAj?3~ajv_E{mTTIkE|15GqNuuQIbIkg za4II{IcQdnOS5Du5rA<+*R|<%G#U=4Q$^NH3(O}mAm#adKA+9jltJk^yKghGsG>k&1xR1mnthIOs`$R5ZhKBH$z`mdobzg?vHC<}x&a zgsx**rlC$pgF$~dn#fblus!fZ&>%7gw?v^-D&}|?M`*QU!GHp(G?d0;S=J24k5Gb2 zXL5O=R4kWD1tG`9`y9YJ>dHidaUBdslc}u6S)nA53W885mn-E;F~`701)lF(fb4a; zz1{$5CsPglCkYnv%w>fF(85}hXykj~UYid4-NVDd2yh_P2~dn;xJ)i5fKI5NV_^qi zdM!hlj0XMQOHL^7cnC%?X&?l~N~Kg1c$$dIJC;5j4|<2)ULTU0K>S{mBA`hCEtjh^ zm2x4Ueo1OVqEb&h>~aJWHSvl-D8qUbiEPpj8@8RMQKA z6okgm+HAE_$a8cGOhHcasNd^$#a>T>s5A>!6#5C(|4&*HG7QYA@4)sA2Zv&(D<1YG zX*|{KAc4V<2&GcBTC2@eE5$5F;Rv(|Vj6VCR;SbH##yPRAEl@?Tzhfx+4^jyl+VQF zJzG;o{cfk-YPLHdbtvn01e=t}6-$7eo2%D>l!?=KbY(aY+Xu~q7C?K_NVWU~!Dg~T z5sJ^vH|Az4LWaU$kWQs;r`2k<+M?L&gHkub$k;K5l8~nd%6H zHV>N3R!cnWjTFmEU`#qERAy%9=NB5W{cM`VBG1&u1F_RQ*guF(^`xl=;Ztm`P>PX_ zMx$OU2^@nbLR*uEhn<6ieSo&x-QHM<-7_3~NM`DQoP+OX4v=u2$3hP~&A5JB>`8I> z2u5YHg$krJ*O;%@$^{scWaJsj3!zZI+3JY>kz#lVPH{YxuQwLJ(kz6Zrc=@X09VJ< AoB#j- literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/pinball_16_drawbar_organ.aif b/sound/direct_sound_samples/pinball_16_drawbar_organ.aif new file mode 100644 index 0000000000000000000000000000000000000000..13577c70436bc43e3de3d6a260f3cee278bf721c GIT binary patch literal 52002 zcmeHw>2sD>mY+a?*u*A~KxhR4LJPux&0_bK?s$@!nsjydpO&x5hfJ!{nIxX-Ot;f* zV~p81HyE)PvwES~SF@P4$vMBX-sgRVUpZ4XU*b=;%Pw12_c`~R-*(>p<*)y~sp&}P z&;I?p@BaLke@}njw5VxHQ`6yFO*4Nw_v-KHuj!B9{N_LWg8tq^`KzX;mzU4oZW;X9 z-)!rjJGXQ7@+lV%>^gR%WqJ4F7uUbM(cJg;-~Hy-KOcN`=8wPqFaNaf+U$W18`my= za(>^R{;>12Tho@W9v&STTDyAns=no|&##<5xc~6!t54>%uUNa`&8=HD4lkR2^W>gC zZQpzLe#_Fn-uCJDFMPUZ?~(I&niqBT4Xha&SvNMawrlQ#ONT$%vFGH~R||UAu77LG zmQADm3!Z-c=TAQRHw|~qy!*w0k3QOS^2U@!-CZ3s9)5Xr|L((QuD@*USl-p$Kd^RW z-MY11Gw*$|@52vwpS(F`$;$Ox-v05{jceLpT|K_*gO3iL{kEl}x2tW+oiC2;+H?5) zy{WBj?aO-l`Z|{^?&z5R>fYrq|MFnkg0|L|cdp)@+O_Eyzx?Gd)--+or~md3aX1(D z{qg;s$8k98hKC2&tfIr2_w4GaL;DV&y83js9nMha^jjzQeDLAEFYeD+*4yWYb9ZXn z^1fB8hy8Gl?EIJyXJO9}AI`>g{qvvE;cTbFdD6;<^HL7yo5wR3cXsy;tQsC28yoDI z_3-SW?b~;qxZ1R+e`M3Px3_H^UQUOzf5-N{bU1BY-R&(8zC5;n&*3vS=y1Badin;| zj^@L;F=a6w&O3BCgG-vOjML#9ICp<$dvEumsdPBIcYk`}9{n17yO%C%TiUgB?$hgE zU3u8NVA0%{cdy->+WE#$|Mu^Gy4tSIoRu5-+FaPH*JjNSoy^)enf-@OUwP`+W~g)8 ztrK)@^kkOIxOdU7P46mPo6)u1a~@u#li7Rn+N*_hZ8mSFlj);tb9AR)o4GHqeSUB+ zT^l}`uKty)ht|;#*gg9JU7PK@Pw=&&lc8%f)YWqD3|*VOCvG;;$m|`IXz!j+&)sdN zOER!#czA5x=%5}2E=e54v#-)o=ofSxN6{@uL6=02V*FZpN$>^XDEN}#3%c=QUVGPa z`Zw*8@KNkJaZ`^%zo1V()Jqay(B1Ffmk+k@qw+#uklz#gg5q#K*|C>?-3xn%)^FajnaT@&K}YoqTGq1+ zhqHH|m6w%N)araedQYUh(BX7GBdq4F}i4)=u13ms0=k`?p?{b<_;`hu?7 z7Zl~CkuQj9ixu7tL->MlGM)MbtzOl?eBN`dEnIkUG8>2W3)*}39u;1k%#poXc z=s$@XlV52(MEpwgXS7aVX}&D{N=v!b%R=uvKSX?4xOS#2m!Qse5#5LwDz0!?*M)nYC|3cOGee^GDhS#Bg8L$F#m>#0psJ?bG z@kFD*p!(v8riW;3Osg+l8}DDFz;N~5c}$*YIvMU?j{CJ4;{JsnqJ#28FI<5q8lMqA zMEpbNC))ZKuD*OS+P~bG!Ucx<7hIdyJVev|A>vxAmxNk5ueH>zprY_4k)xnXVsCPK zh^Uq0io&fNE(w1@)U6b)99xK}9Ra zZ}Q>K(XHSM;#N*83fEe@B!lho1)*EHefG%iJxA((K@aP;a_`A2?T2%7x|Umhr909_wt z{mYzzjT?s+KfS;c!0}spGE!SwskZ17%}uU6(bI07+|4J0Cf81et_`)0)a1$&EfW9= zFJBux(dEh5LnQr6-vGCAc5Tq)^0nFe4w_tQ<#yyR$R~g}8LchlL&Oun_K%NTdNRLz zMc0C9&%eEPe*EaEZ@!z|v21b6^GDBTcaLrT$&WVmzPh;UcmLz}2e0W9q@7&N9np4Q zJGqV2?%&jtC_kX)wk~e>>z)KRwbZOgE#WGgo@8(Lsg_8)A5RcY0!=No`_j}(yT4mL zAex2vj!-SJJ3?+WikdI(Y6|YWKU^rqTyA(GyhpfPOy6{R*y0baFeX zlk4O{tFsUdit;|kpvWCR9S+YzaX9E#>~MTg)F%klg*$%kQ_GCYOIA;W+8c>bx=HexUpHN>GK$&QCfHw zlG5T&5K0TzUFvb^1KPTku1)PM#7_{H7XE-RC1L>3(t;^bdt4f!t+en5#3S@KUU$*s zqI2O{sA)f;Vy0r|@fxu~5(i?^ARZ zlChB6eI1w`O`uESPmr|xj3yk2FNiKl{U)yV3(`W%tqR=}D=*8}DAXdY3VlI#I58+{ zhr5)YAbX!vd0E>%_u-`@_5=YpD7lhs)oy%)#%M5fbc$@`5Na8SVWU zO#sef?Jdtj)WlKY#kG+qXco7({snP+YiI(M4Mr2%TOJC|!c82WAT)8(xlnE45t?z9 zxHepPzke2zso8NSx+!!XJT>QbKc3_{G7D|thY0A3fN}|U^3O<`+Dn2vNhhaMvqB2M zo$N^#+{r#8G_?Tbawo@6GCxGrtdzBuD+-zw%!d26f5_({vykCVn1x#CAtKy~I=S6P z&ea3uDxZ-KifI<2j=$dFNSljt%ZO#X(ijxmX8^Ipps08YJw%ST*q}(|7K1Y&1wkyi z+yXNWd2E7dwfE9Vc9f^x=&1Y9XNi?bn& z3$q#bf*S|M~2#DU13B zsn=fB-_tSY>6Md*_84N^@;gt)XTs*krgI(j-r?&SG^e>&){Os|=CoiYXm@)PF z)2A<|wYGQnujpPh^f6@|JG%$4{pLg(M|KBI!pSHLsETw|sS z7AHfy{OUQ+``_;4`R9okPksJ^DPEf-BL>A@h1i$GRtxp;D6 z9@NSrxC-sh6G?0>mw{&jvKHlK(@=Ua_?{^IoWCGO7K80ezz9fU8tW!G`|B5EGX#e&%MBTP}V|85PNWh5++C@EU#YeTIEOKDjV!p_2=)jdkkUXE3a&@Ut<* zcuFgzW5e!<+BVg8LKDj6Wz&C{+(7-|f z$D`IVW8TYPqCsfUoCA)p-V}z=gvAjIdaE$zGP%%0aX{yfH90*Z{QAky5m7DAd^jbRptv=*TJ zfG;{ztcNo$6qgPrS~SAqQ1$hWbS*IG`a%n$ zE{sFxlQ9(v3oZKkFw@D&D8D7`I+3CDM2pY@)CKw%R-ph~WPXd_ZI%;Q-^D7FEVM8d zCjkI5@FqC{J<+N{Nd<-h08^nf^bi?iZd9K$=0Q}1AV&x-2yzTfv>~oiYlpm|$n4LW z6Fv&NBur?5#Q{;lyzt{$gc3O%Z*Ou1LNh`u7<1B`077HNoOod+w16fGN`!|fHRlXM zQ*&Owm8*S-k{~C2K~O6N2(9H-pw^;47eS6gXdsC(*7+ACq&dk6io;Q$NYqL`;i@1< zNn%i33bh)(s3b8SB9)y8P^4p>sFetWwl9cZ>0JVhu$-XrR<0^lVnGf|l|)WJIxa(A z`H4p1b@I=^MXD`yGM|bH#X)F38R)nw$g4cj&Jg1vqH7~kCDw7doIoBTqR*MdF+mRZ zFQMbAkbit_7@o&W2SE;m7Ij%1`e6zdr>{v_oWux!ETSz|v`JH22rGQ_XK9juKnx}- zQ6ZfiMt_qgsgS_ocol8&3|AEr#7U@-Kp5e&St-CXYHDp3q9@3R3Zp^M?hA{Po}l_4 zP|Xv>*Tm(1rpIxB-gH|m_fxTwRu@oQu4q%;mJPUBNKnw_R%ihciI4ztzt^TnrkXQ%?U26U0WJuA*h>XS>7)MkgfgXj4`)H(5e2Aqwyy%7h4L}$wxrP77etD-<6K@? zFv}fo!)SsC30z9dQXGuX@&xIW$U*{0i5*t7YvZt@XhPE$WW9eN=v)$u z!y`0$f0h!5kU-j7dRZLUk4beU2{(tOW|Mj?mV*G|J+5tu>9Tv05&yIK{#W zo0_-iP0`QDXG0Qg881vQYk3~g$%T3tH{}`;6=2MX)nd^WgcXU^Dm1cIYgt;YdK@t3 z*3{ZVWEgZ+TCKCtM4epaAp(m7IRRd2eu%hV;lmMOsLVo8v@!H#((0s|g`9xfTyPbN zv;tC4-FZ#FBC1)Uxa!IMwA>cbY7>UyGg79Qq}3)McG4WWtt5XGGBks7lkVh%-zp@t z_>An@s3PAKZ8{5)9w*Rw?q6brR&-v4p$4|Z0N@2C_qde-fED>5|AY)>VW^RRc5QNj zp&mCQQP#h(5VE0J=og}BgZ^I71lHfPIl(H5iu;V}GikL5a;#hNH~CJDv|7f(1*LkJ z#zJ|Mxs{_Yh}(U@@v3Nxijt&Bs3-wz%bN^Xo7BTDt!6?inp!~jgNvSqA$#?9k9e*e!qKD*J}v2s;^+tj-kPkegxJLJuibh0-Ls~aww^U3!>c-)uOI*9{XgzLb*p&^{U5xw?I-`{$6JS%eD}r9|MlDV zJ~{iCSe4Pip0*h;9^JWd`Rgygx=ecI-r@D50}G#BJotb9_xtzg*MA6nhN zZ05alNA`bu>Cvnu?Q>r}xc|6$e&@=ygPqOS$M^3!`qf{TkG;Khbn&B8+yCc3{{GOF zXbv2L(u;j8PX4(!}@gzP8_JA3<9^!NAobS`NA_R{f#hfiF2zMyaQz_J;4 z&+gx`WB=#3r!MXt7#dl>e#82aRUOlBe{taBod?d`n!2cG&G7p5V+Q=41XwvZGP-WCi}+Zj@fWWc+x+&Awr*Gh@q5yfO+vNn zFrn4B_^@-03nYx5#!^hic#lr2kg9TrnLQKq1G?tWjWw*at6?C6l2P%yQ8G5IX0+X0 zM^^n!s+y)%5;)Kt-%yP+yobA{8mS1At$Id02yB|Lb?GNv`(h-o6ETJivOHBkqf%VwT@!qaA8u!dgpXyV;KTX5 zYO@Un-1TJQHPV^YO`Z^Zc&m`@Be|s%x1N_G0uI(R+hX!e%{IIB$QhvIrh028_ZfvY06L+hw6kjy(|ldDo$ap~Hbt{dP>0gK z;W}~`7SMM0r;!Uw&~}^AYz(o7$e<4HFx@_4co?(+0w}8sOZ{o8JZ$hG5(F8SWDw%R<&_tML#R<$ZW-+^(Oahmr zluT7o9|JbP!SI`GzzJ;j5rNx;pkQu$p{wp=<3GqOVPMKDjxy$%hsCI#WWd~zc?K-y3wZvp~Y6LFSGzItl z8s@I{1B!md#qTEZ1}o#5Lr9Hyl(#k)E+eTf@LwtS%`WMYqT?4Uz3FSds)s4FLXA-k zI2a8abO&R$(pT{weV^%Y)CkOyW;htxTccL`j4A&B@jK>tFn2)0$oN{$LID%9e_SOb zdNSx-0&OqsBVpTv@<_$r&@-FZ8xBT@Ysfz0#@7-y75fN(KrVh4yr)j*f+xt8M-4qe zN!nd0l)~#6y zeRpZqt6{*ANMW5Eqbu&{bS-0glJzqp*pxF}_#ui!3X_ni&InU8WSv4$srVg6V3~zf zLc(^M6uLm|zKP#cY)QlR5%ty-m&GOCz*|HOtgmzo&X5{$C&%Sh6?-*t9eAZhgoREn zSSqS9j<-0Z5b(O?44A$~?5^h4lX44I20lhAx0bu$pAm8fIMam#Z^Y!uLQjk9Xh?(= zPc-@$L)!`WR%TPPI;i@>769|!FsI!xUnN-`49c-Z8U+Ua@fs_=ifhE5CRTdpt1|IG zQ9u?l;MJFBq1?adECjxa3(WNpk?RPZGF{A{*3d&#IwT_ACcYp~MH1?cx|Qst$t15T z_1I&i=!(VLuu=~qEI|`g3;=dY9-{mOX;aIykXbq-_@^$(>!4gt6)-e`!#OYuf#kJI zQs2i|E5hP(3&Xf8C29@hQf|wJ1vY8ACxxC~Ss6qw)J-l?G{Il#@}9utX*Owph}2t? z+-W&7%AgjTnf0DPExo$R7|%%`pW|v{!3{=lX1)hA9z4{ zy3IZSe=zWXT5`m$3Ba?;b>|0zxQc(uxX2$&)({UyzU~H|!6YFPZ&KEI)D<_SriRhi z6slbnWV&q^#`n~Bsj^P(BVtZPQ%VDF)PhO~82YY?8b-Pc9_ze6XQWlLS48m9P~SCy zp1D>sCD*++JB|y1c_vIu1{O!IJ3_$RrW%Ik^ppw)&Dn9#30ZQ4X2*@d?VZ6h14UFa z#h9zpv&L`9$!MSPng^o@0jrz6q7I3wv>PZ$Z9oqZT69U6v==g#V`$6=AW3n|RKrQb zaJ)SjInBwMbG{_poHLGy2P0ZgWvXMmB}<*^>Hx>v+X=@mX8-J9Hu#xqV&hs5dN2y` zjAQg%>md*ku{aEjP-7w98Zk+Po=h?Zr9TIFrfeVCN63I>32BlsNVyuOdymFKq9drh z@K~2JdNMYzVR4?l;sz|eCp1(em?k$C3O@(32#Tx0^dexcuuIrXm%PmE#MFR6J{cHm zvK%u*MgZo;F5w|yrrPCBJxBHw(GlVZkWdZcLD6S8zf~1DP%4cA^8%h}%VnK9O)iCM z*98u!Ep;ZBzm_3jY}Jz}4Y%s4-~%nFenuP@$AOC=LvbExK@k^cSV&E*pz(bSvm!qt z>$|RzWc)KSx3`PmIRp&$5zUS(aym7_$Q~j`UL`NV$-k1iAfd%;9-=Y?Oqz3p;|Wbv zAEVFyVtlV{K^133&XpWRToT7wEo8)bP_ydsC5c!;h0vg^a37;~E219bTI(4A6s6&C ze3)HhauGtyES(NQ`*>SlyIX1HR8MBoI#p!KL&S&U1}s-(O4zN-PE?@^5ZdhB9`M9t zohS7~)Rn%{rnL}7rV5)iMvqfVA+1AFkF|21kY?5Z3wWwC`}0`msQ_8Ki?G{_kXPa^ls@M?R|x@g zaIq}BY4#UifJl`Xo=20b9_a~KoE!q?_7T()wxW>{7@9+t)d?JL5k?*qr_BmxxN^Ep z4n{mdoNNoGPjV=65~5-*PQt)MZfY5WR?T6~q4bk52ctJD+V1BNFdCS&-7g%Sj6utE zTYvPgV9*MlNmiWbwj?-zMvz0=a7GeqQ)W;X>W)S@N{k^4d2ojt%DDX!SO8Kgb0G>}DBSyb#J zlSUI5bLGODq&OV5K0)V_S&K-bk0~+3ilGUW>^SfJ4OYyZ3&oe#gn)5v(MWM*m`LX$ zF&(Bq(e%Z7EDnqh2G}0(gpfi0Njw_TZb1G;rVFRtFd15~ zI1*uGQPEOh>XCoi$+?eFGF>VmU=kJ0LJQ`%8lHtzWv)vKssnS?ArbBV3G*=$J_(h% z=AmgIGBvd>?kkrRm?pHCg;ZMYV5 zRylFy#k`)OH{bs8+ZzX$&A4~|&-?cM`TX4}t!)ctJ->PW_@_t4FWr9LGIw68c;S<{~1`TFzY$HvcH zd-!sCOUv};X4=Hi*D;gQe`mJ$^>;Mix^V8wvjqch{q)CUiyoXidU*Wu^99Sh7B$~J zdwAC_CKqQfUewys+}tvMY5%~=&UsA_Z{NQEY}%Z8vzuSNd^LSO(F#lFHhuT)w~w1z zW>MDt{+wu$C>f$*7?s49X$HQwMSEC&7S`J&Nmk>U3uKn-nXK6+2YyFPai#Qn$FLu~bC>n^Etzuj{Dm7$OGke6Z+|v2>+N=lcGRSs z4HiU^_@entuO{PU4h|JNC#)dyJ{vO)q+C(K$vEE5rhJE2<86?Z!nB%M`v4%m+ENge z1)fi|4;B-bXIqO#@SIhB8^GKGUe(Ury(V=-t||qQ!69WSFt%_@A@*g(p0Vu5LB#4F z7pyAL_p-WSIekI$RAgD6C2B-x&L_j2C{O+Rj^_9;5dPQ^CBSpFGq089 zsWRMBSCYiH)~$ts4&;_ul!}w7!%|dMm8fOQU_^MAIjsmwZS?8PLK&$jrLkMVG6}g# zN<5iVT9`Kl5DLP9#j5#VX#k9l@U&MGP*qHuK40xuL}nPPC6civ4M^)O0j4mA_fgSgBQzwR5<{&%vp-;|3tUK z#%{YLauiBsS+}B{xdZXgvP!ptqX5VXo=;|dxc}?X<@N>fY-`;LG!?icyw7IBkgJ-9 z$VgD5a2yE1D^2k$`JRXohZ9C*>zuo_#LAWe09ekd@hci~CFR8hCuxH7*%k?4RZ>_( zuF$X~3I|)~EC8Ui_8FUHQh5uxf(lv?=tfuylH$nDEI}4+n;4n=q<`U%E2=FJ5}2?x zpG<5M3zdau^dw|a$gQH4D`#6W5kPQavOH~a8CfJ@YfSylQc!IPh)8qMA@s!#iX0O+ zKGCX@>^12tR+UtkEScWwD9v zIV1v0=Ts?A`d3<2!r%}j&uD4|9P%d_O8M`}S)AYrf~8vXi>#B2HrMswo-N`uAJPPE zr)Bzpz=68{xkv!ZK{V3IN$`pW{^~Wc>H;#$EY;k};hH2lo30bkZCR3qM(tif^Eq;6 z?{gy`kPHA8awV`CVXW2sJhv$66QuE+#n7+WXjo`zvFJi>iDGMW2own%@}ZvzQ1$qw zC}hk+)Va9FuRc5MG#~Rf$wMIGXC44vPn3sZ%O$?ax8`uOBZww7;ilGRAq&eF-O}M?a$ZXp;XYH+K z=W}v}Uz_h|DRh6Z@t*Fx_lO?d9~^MAHMKa8O1L^nDp>f4z(B3;HHH-GKFMXX zg3pLe0~2Dbd>+aOi||pG&WW#&J2^&IjHOW5aPb+Haiu;B)qF;hJg?H>P*oI09Aha$ z-d9@t;58B7Js(b8RRz7$mJW?Jx9sF%3q`C}BS^up`0%sw&&^vXH~}o{k~Aw$K{x}PCh`#JsuEtV+{i=3og4-L&53sO8T*4lgBE%dtG>J!){rQBqGL(~D5v2?NIikd z0uK?(l(fK*SGLfb2-sqNYU6L{Gs-991*S43rs`WEw;Bt%a(%fxM2X6ZStz3kMTEGp z6l_Rh>9B4l6n%M#PgYW)-5Dzbv&j0?HcYcnp&U>RsDN?_pQM4=A~|*W5&b74?@JV0 z<-kl-mI_WPt4bzHu84;S%L(%rl-VqPh}e^4ZY@d22@1!oeI_wyuZhmg^blohpS{xl z5J@aQw&eQaQ&Zyz&lelGLsn6=a+w50Ua7&_NzMj=EGV4GDYo9z+#uokvKmx(lP4dW zN{2(S6^q*;#Zg-VDbAT5_I#zWmHjYEUsu z1N`N)IkDXJmCc%wxRGdW*{N>VT~HA8U6P83a8cj$TYWI_8?C=^zVcv*I)toM74U2t z_2-$ql?YA0?&<}{TJ@s4a2o+ee@rea@%6RpLTeLwD@zvja3b)I#b+=lGO~!Z>Y1^u z7@!gU?bqFE0bh4M91$o&9l`*;niCt{ZRKhRlla!LR_W;P?&o3yGSS)uo=M)3FBT|c zSJAFlq?;tm)4nUR^F0NaJBHG&-&AH{QhFc3=1zIk=ojIO2 zTCPwiioS~N&Z+}{9e7rq{nuE3E|ZG|weT0D$YSo#IR}cR;1nTXjRh8R&^^(3-jIUF zgJGKlwjjmE4ySTYob#8l4)O=V=Gm>qha*8PiL0PEHS0%Z&#z9nR9;-Z8RD}aB$Bt< zf<3>w;YP?m70Js?XPB#q);vZ2N+~jD9>E{tPJt@vN*qTzAt9ntT%%I!d&u_NRnF6qP5_@E4Fbs28{=_^!OG+ zU)8dv&EeGSAivq>2Q+PBJEZ~;1M1oUiKqGU#zrA z5vP1O;ssZ(LLyFGYZ3aYNK+6w0V@>E^k@)T;ET{&V25iRwy(q&GcZy|YtiWJFUx*Z zmS<9VN(^)4)p$^0af+x$h0v-l9G(56f6>`rAT(a~sZCO4GY4|r=sv85(Yyc4Pv#-mBbW?0>X%-TRMWiPiI*%SVcP=TZQCv6$tXPB* z#@a>^KYRA8Z9#flJp`z`0-niYfkTzY*{KVAoRNy#*c0Rfa{-=-qmP}R0zcOa2)1@# z4Z~RWBZedoYC-0n`|iy^?E|wb+7kSn7eX11XeO~SX9FA49n z;eokuYxxsYK@+@*6C;l3l;Eg{S%}s)`i=#qxU7joCT>zbD#hh=xyE{Uhij|EXi(%r zYfYT2DuGTZq~Hi8AT+_BpqPbZAqOu(=6jNoD{xQPQK7RCR2KRK`JmY77nCeYU~weQ zQ?m1A1G0NfBErV`Em5?I5VAIrz_fn6rqEronf$BC^r(qC61yXPK~{Kmgr;P6-hfOe z1Aa@UMAL-IwNac!K`8dIeeW#vYoCR5`H}F#NDPZ7nc?{8fkNI9E@w0 z>TYuln;r*)vwLGrkK@Y;v+sWLWGMG9fE36MS}dH`_zH?^5J-U&!^r6;+dgaM1kP_c zmYbAHMNAeInCNk7`>8GxH?T!IId=^!O`NK4g~id_ARhn{hu*lNt!QeE(DGW#?ls~; zE&R1qR!~K;EF4k~gU~{R5;e8iYoef>jD-N@B)XFG$5r;IDM8T4LVpiKk~(8WTCKi& zDBAQ*#=?1(J@O?fq)F&joa*yXtQtkzL=RD(g*=c@B9y$9lf$8zxrjN@Ex8ra-1fL= z$Ir7+xvHeUW>v|>e}PpcOMm#PlI8z@Rmu0QDmnAIRV7XT0;@`jRK!VyT)Cb(XVRL$ zAtGs#n^~d&bs3&F+XNGeWXc2|sm7_EIRp*{n|h!|2@|TZMkyI|n4vkWcqV9C?UHqp zrnDow52Njj_o!6$H8n0vrUF|}0oRpWQOFr;vqdBtLD?w}h}3wy*xC}*9VgJDOQ545 zb_xs4Qq;HQibBAgoHV6s*Ny^sk0j8ta1*O(sm4VJy63FY;O^Tv_>wf*Z08oL*nC|_ z>!BtI8CPAkYw$V}z^sLmS-#+7b4y9;?jpMwdwaP{Fhyn=x~jwja6x?wMeD&WCGYLU z3S)W;5ptC!&5?>oOf_d0Gn`DJs}12jDmtVYO>>Kwx~p9*;Hq7U{x(X6`lqr>kQt2_ zU!?OOCXRvj2+*TcXSp_XGU7-D&<;7K#KZv!)8^8wX}C7hY;&kndKzU6aiASfqnwP` zM|@QYT^m9<8fdo7*ex?F#xfVzc|L+JsMUTFQ4u7WVxxOH4{jBR$`l^}UPBJiDAE?W zRWSZeKcl35ar=mVMvzPyY^qkhSly!fZV%CbxDIw2ttixNTSfVy#%?|wUnhVR0CT;& zFvuq}W2q9nu5LXo$)a7r)B=GCM&MqE~L~%0W3_5!K*WCHrAlP zL@lzwIc@ zfW;nnx+I4BILQm#l)fO_!OFE3t4i)pZEb5`*3;M5xx^(?RpJ55e)8H;T~(4YddM1} z89ltm1=`&rex)J|LQZ^fI3k&1Z;g}}((cMb#HbH@Yb4B7hB93{D(*BE9m;}Q$k*=u5X=7+Fe|m8r(GSFb$3HfNQK5h^=!j znR1jPg>({M1z&*gH4Y7lET~1aljW7N^r&XNfX-+U(y3sfXY{BxpbqiyU1djludOPP zW!E)XE0r84UDazABg+<1l?1G4(#dg-QyHJ34n|?_BqXBtj%Z38bVizQUFE*1lY`bmf|)nQXzd&D1*<~X%UlwgsJFyRLzPf!l!G@*pDG9DWt)rHdpwYpdix*364 z;*Bgc3Athk2|Yo~eFHX?EZ1tkQhlFIkQpCP1vbs#AcO%1n@T4qnnPg9*5+#Xw>&|N zDK~5c=FEsnc#*Cu2};H_hsIZVLOi4G3=_(VsJwy#*QUtN^VPHw|HUVhN(-(HNA&Q? zSS-4P3%V_U>MrS-CFDxNi;{$dPR5x#f1DeCf*cgg0W^X4C_81BL=aQgy&H9>IwM(4 zE5cN1_i;%Uazec5jGkdfI*YIz6f_Z*`2b8HQ5B|gpTasLY;Dmm2qY$C0GXXqdRNCn zbBl*Cwf+}WLp(@iw%JFN`}U4M7RXDCE24{J*$*PKX{RMeE?DpiDb&m`u2Q4op1>3U zR;EsQ;f~*IMvxlWJ+W0{*pV)=wyb-XK{3D25?vGt@!sJg^aZ*+)ujof&YNnx)-uNDZvcfcy}N z<`tcs2|ZK4f=-U3C>35O=t-iS?6R0)9BGTHuMw#cY79L@iYbG?V|`7XHW!eBB~m1l zCrgc}#waUe@&HdmHZ|~WKuIE7qUsQBb&A%2KJJWzO%XSxJm1rZk80#rgm zkOG$GvUZP8MneWLC3=vF6&Qqcs*kZmqADR**e0eadfLCxEX2fvLJH|K5@StvVX=9y z7Hy~MJEa=~UH33C;( zo_;~uTO$g!QVkqZBcbjLluHduKrNgp$cQCoX76*u$A~Y8d0xyyFdNvQn0ZarkbnV? zFR0bNY=c<>+oH)WmR0!9F5=m+!W!A!BWF(a~SOe3@J zlM4$zv=+FsPPz-vLAP}R=q_L-jI?}i{ zX4{3HnM-L_+Uexd+Ov9P`?M$D-n;(gsqr&cp0##%wHM%-uPPBZKFKc~em2QeyqyM~ z0e%kqNKys)gCRJgtt#pF=m`6QAiwnVBB+AslAtDX3+hR6b`-VNOW7mH<1NF_369TQ z1?(eyNw_9XAepLyXNJv(WD2Q>*yF+vhPvuNi+Afi3oSnxf8FBQ6X+!I;$0~$Z8 zyLGIi2ZPEY9t@F8vFNbANkShC35%nCR5uBz&B(kpv1E~RHIRdDY@fAU3XFs)U=ouH zvp5?4O)QRtfZ+=ofWX1xXsNcyY7WbF67Y;W^|Ak&!Fsl zgkDuvm2lx@1D5hz0V_(3o@d87=4z7*V8uEtPPwW??IW<$fEPA>w-}8C3t@4cOfK+t z2LQmVmPn=mp`{jd$n7I4Pfc*Vs)Fi@>q3O76-6ew%92IEtjJjftEE0hXkUm7)z3)s zBXpsy?kbHvf(=eCTy9e;K+RfpgV1!3i>xYPfS!fTf-fS3HeVJ{e%^PPz1#DhU{M3b z#Tc|)mZT>$PqR!es4-?Aadadk-i7ioYK$A-xj&C3i<4n-6abKplx({QcLFrROBS*5 zr(9K1@7mxq(lp9?tJZAc`~=1tNnpvEOqF~`^(8TxZu^x;0N>9cOBTa3VNW!n^B(T> z8VD`R2`uM|Vg>80gf5o})P0CdP5>v3EmbU4A*xeA0fp=2s~Yf9}dNOOLOVk>l>a0Op9 zU?gdGD~D6!i@uNptz2G1p+J#DT?xKeCC%v}q68MvS`Z#9EBQD?pC=c!2FT&4w`MYO zf{cnVJn!J5CXS?Bbo1@O_@20nx~K@-M>JqC<+;id7faB0rCs?2VWtDW<)}y)Yaqu= z*G7<65AJ~=2ZC$B0=qrWemBmY(6$|H+LXi%-Px=TP8wz3rs;RuEJUESiT z-LE#afLTLWK~1f$DhW6qRhHvLIAqwka@ThU3PSI;=3F6*MyhOKAIWj9KKfTWIZ^Ej zM1(CA)oodPIJU>dgan~F!QoVBP+Qwr4eE)IPR?F2)d>bgo`taMN03F!x;51ab#hi+ zFbfe^fdpm&&#kPTIo}GaTsvKBIhbDiB?&Pq0yu`SkXe_JEsb8yvU%1Q84^0vk;>R`3rg-njmbSf~*0a zL5fq@jAS3Qv?@_v1Y|Wd!9&36OPV#>33;Vhg3Mo#*o=6MxJF&sPRrUPSA|+QINRd$ zH3SUEqBLc}%Qe?d88urUKx>RhUuvN^sKuwsnRinA!1VC`)xyqfD|y+1!eSZEnS zf~ph;Jg9#`YOL{1*=dg$gam2BjTT>;Z7 z7=7C((0K=2j3zDuk@<-(1_0OsbRD0_3Cz6b4^bMSL0zDe!)HWUdNA*0A*4kCarL!i zegj(&kEU>?>_Vz}q9@JbU|_a*n{*VG=bA1F$LL8Qa=gjh?&Ayk^t@?8t)gVy$=u>J z3x%{gYHbi&&I^aQkC0nF3LluYTM><{2mjPj54)nR`UTZfwAIc+(XjABF^m0`J=3wO z#5W;9(FPt=!s1j~EnEeY#F8;+fyfXLYkA?cXzz3JN{gaxkF;{~5Md>svwcWK;@DqS zwE1o|V{vHNj|yga7V`C;D!~U2T4R%zq>hHZAX3Y+)(<1J7GANx>K9~DKqe>f5U`4r z*x*Xj`kCt}9wJhqgd(4%)w*@g1UZpJ?b|$hU%MvMBl+7YhVyDot zz@jV`SYUH*+XX>DjQ|DPe3CdA4s~_zIbS>X%dh_PPmcTdpa1%gFTecTSO0`Ra{#zUyclchI{Eg#O-e5Latu{OPve_&aBhRayj@)WW^;)eeRx4Gp zR%HuEmbwbhi!JJ#}j}r zzt`=uT6vyRl%^~-L{TUevYBi;R}g9qMKxK>HjB;X^!kI5a4ZrE_#8Ig&}p|@vfQYb zg?#qS+40fwSw?86M!Vf+F_|oOPaqmgB$LyzkjH6Mno?74%dL8~SV+G)I@sIW+t1c` zhu7=0@T$@3nF_~e<`x#_lOZSHs#WSOMQKT*kk6-2U++BM+&&Ub-td&yqAIGz?F~hz z=NDI3Qc0gt5=x@1s+~r)Boqso{q6Nf>$?R$kcb8Bot9#Dc>=-2?9%mH*HdA0y^s?c z3fFE_ip4@9bF}sN{{799j&FJ<;^LLA#qAG-W9Y-TmZzP~LN+hTO1oCd=CZlW>5Hci zA3QyhT=8VwXW=-TFBA^PlM73$*Ow9=rJO00>vB^prcck_oSp1%Z~nA>BH4rSh|g}a zxTd19cp^D7H$OKWvUh7GL2O91N-lkTd~|rYzxVneQ|Vg0UXR0Ob$TL+#LUcWG7$;7 z&8jTb8&VVgd4=@Z(f;1v%h&0OYWH{@76Zpy-S7*~%r4B&Plp_EaALiU53Y<3ZhspN z?pQQ>LqU&)Q#gyu7lebmwz{&E^y7nrIzR_kD&_Tqi^u%-j;xrS?BLc?VN0V}C^x%& zSFV-IrBd#A`|-W+pB~BXXe?k=8co#-#~hwXt=+k^Ht+9N%heWdHgy|frBW`YUp;wn z_u+2I;PJbSvRG{!9q_ZGv#IO1Zl>anZd2jR4lCbo)WmAJ0LT1j{g>0KYUEngQbpn{ zPV}=A^Qq-jGVFvZbbFi@wcTjc>op;B_+t0PQMyzvLcNx1@L{LR;c)q;V)0}m8jHjt zK`#`PRF|5qX0uw(=hAPEQS}{UYP{3yb6R;$ufB!pu)`?R>T6cYg`c;1IoV zh$pGDOGypxG6EMhy=RPP?nnbY+#(Cj~0GJd|8CU{_jgm=u08 zDOkgkucYCfjke*1hc`Tf)8o^}EmR*Kw{VDf+{)(~-nl~z!XeUo3k|Q*qK60#?_dj! zTXcvMFm8`WIc|mb8@B|f;D(2B%CUZM<^ebbO$y;0PC?^V>BT9e`tmSt4V`9HC>4uY zz$y3c{dCmw#1kRAD#HNvKrfwLzH#UC>$6^^Tr4*_22K`*VzHPzd$Dov?vF1k=3pcU zZK%cDy}m$XdU55}?VF2XbE7OmD^=w>{Nz$Teem=8!$(``mJJ${8Bn3k<@QcRlh;<) zK1;aI&JFGeePUR*uQ69&M%k=ES+n1>Hehk1ZdNY@*3Vez0%0zO_|x`2=A zxL|`8!@Ns$y&8jgYKos+h2V;$)M~EzzQQ7DqLIWdIYRscBUPiAZR3G(75=m z!8|X6c{;B}XoZwq4_X13$LJZI7r-o1Nm6o*Spa9oFmEg+H$q-JDrV7Na*UE8W`QUf zniNND&=N{UU>-X-9UoI(i%Sj-+BWdozJ~Wvy!K+ln-E@0RTa|k0+?j?IYgzSOnq&-8RYutG##DW}szL<;TzznDF*`%NwpWg#I7I>N zssy7PO$vmM15{NpVUjVk^w}+Fc;-eC!91d>2txjJcjNv8#A_3v5p^1pYIZoiQ?dD# z8#k7xU2>^VmO$cDkpqEH0+UR(5h4`a@S}y+1$az!qT;AFIO#9TLzoM zV(h9a*OkT7y-O!hVe2YyQB+hvgogx><)!}8GwCM-2xcxNhUiZ@Ko-`VD54zqtb&u2?_9AiJX{dP;ROOHEdhcoC4(xiGFa>0{ zXV5bL5#wWK;xe*}=!OpSh^H|c6ZeD3?v<%~de?&p0d>^y%mq(_IN<_l%lhabCN34J zurUNqI5KhZA?jUkJnG)$OD%ZjwiL?Fu!&1$QO*6_TL5YvY0yapk5PbzDcrL|jKe*w+F<(V$WnY7NBtj6Mor4I$ zH08BDXoXD;CQ_ly6oPq3TlNt%O;xE#rAL1*+}q1$rjWY#7FA_XX6mYWEi%*Edcz|= z5EbPqJByO+1)UVg{lfQ+iQGR%KB-y8e9#g9h>Ymf(4Z`@p+^&6yGvjaIhRf15TSjr(^_Q_tU z>u}jr31z12pd5x1bE(yp`KZ&-QB78-jc-de2mzLJ2RoZTzera*5Q{2E{_L( zmE`aPmH1pBIe579bp7dz0`HGU z{WccDBj<80WUd!+ny1|mNeFNI@%;zy8^Rl*Ts-D>h7=~OZ*CJ?+Z#e*p8gmV5H1Wo zsJ^MWJh+{qOp2SP7eA(*Y3}T=jnw(kvOCpipw>;wb3k#t{g32Y&k$zC@ogtjTnm!h{Gb z1HRaoz?7lK*48EkBq=sXl0x&xF4OQPKXr`aC^+-p8v&&vu@*+4GTRvD>EnVT6q*8*+&P|YMvSSz@(1g#*gvuD==J3RWP53|OGm=oj30$fGcd)ubZyQ9ZMGwEBA zqFs+{3}~A^bk_m}-w|uov$NxIV@Cw@Mzd>yLwH8)hv8idvfk4l!ovb5o)`V}41zFZ zxs1}YPqth(2<8nFN`?;Fx0T$0)bU`LhvM4INW@DjjFM@|3A&XBdr>|5CRK*fngEgM zt{&!9VY%$8dPH6ABHFE|=*fDlgI;|X9K(w3(2X-pc45U9?K^r<6q%Y8xCE` zk|SNQg%tvDXVGdrgMCnPnn;DyJY+c;1~2u;^eov}{ISUvlyS+SKmgml(CmyLZ0XVT zJ2e(5MWe8fU8Tc!RP5A2Du+HM}vBj-Hh%JZ>-88NH#3UNa3J9KtCRwPO1LAw0)eS8P$; z=_|HmUVx{;UQ+peb-jUP_k0KsJwXE(mZ-`A^N277%To9e5R@MSID@0d1m>~28?bS9 zH4h71Ro8=!GrD4np0z;g-onBHe#b}OwV*Rs_ac!rPxIT@i{zOTPF4nRCS^P%V}vko zR9$ZXJFDSL3VRO(Jwe0v9m&jPE4JEZJPY%X2*H?EY$r?I)8Dd~LCk_Y9YtSKp{hK2 zQvlst@^loTXGoRDycWG>!5SWoL5)LDzRHq&&s~e54G)xfEKK3RMQ_8y?zjGU55>n? z!()$toYz_`t(uMBPJn#(*~kh)9KD9^17bPe(Cz51jDb z%fh@ts>%qf@1uC_0Bw0d!-KdF_JL?-icJbC2;lT0VP|Mk(5FC11XL3QqM$9)1@Aar zv9&Y`c>!Kh={9RZxg_LHw%707|LH{W!;5bYwb?S*-QGYXxwHl^sm!>Wg-o&5 zxhzzQnU@=P|NC&S?oQ4pAmb)+HV>@5#ur!b{NYY2*eRaoDs3a*fd}veXw-+#zW?@r zn+029aV}t%Bn6&CbNeH+%b$Po$F-PAI86&JgAuZPrLriNPq!a@``x3HZggQGYF8xL o=z?d>LWyg)zWCGUbMD63Nv_Trjcs^vO00^xz4hKZ8O$IsgCw literal 0 HcmV?d00001 diff --git a/sound/direct_sound_samples/pinball_7_clav.aif b/sound/direct_sound_samples/pinball_7_clav.aif new file mode 100644 index 0000000000000000000000000000000000000000..1e1065777af25938b7240e226ef41d2d7e6074ee GIT binary patch literal 30716 zcmce<^>^H9o-S6*3{q8znJs3pEwJJa3M zXlgS^7R!PXR;fV6%*^+F-|x3dlBf41o14TxS^817>Ulm7z0=ojUL_Fzm+-|))6)~z zu7bZ4Loe)ZmzM6}CGtsJdcodIg}SnAMQmZ$@r z?Zcu5f5f`}jHGu{L~#YtZ{q7)qFV95;4fBQe)f3i=l?^~kha3_55F`STyg_3>3$eRqe|!ztC6JzcqBD&Rt}? z?OSypGlOK8d3P@$ni%UUmFE&^w>hp&Z%7E-GCxz`h%yf=C6_NHS66<&IoB{VJ2VuK zkyj6_7Ms`Z50gy?YI*N)O|!g?OR;Eg2LmR8K_X4FWpfgHE?8gn6Is(IUw`q`a_QXo zjn2BziblDgOr!;2Q)q!2=(^f6S`rbYz2=v`?VLNDRe+zY-6iyK-PflsOEv%e!=3e1 z|MiPg{br9T`ivd4QOxXTD$%pC!SYdQC0CF#>x?U5myy5~rAs2Dbiz%Ozcp|^dgqhX zC2e$SYHFf-+3V6L%>=7W{L1UtDh2dC&vNV5{9NffH%HoWA-y*y}IwN*>1c@~V^nhmRXggC^e6cl0c9tjk8vnk< z@KSxm?G+Ndn_?|BYbd(hb*Xp%_+P(&=BO@zU&I-=H}V2rf=9Qb^|3l-mI9a0k|3FbJtx4I&oHLC9$lJx!t zUZuXN&ZKbZ>49a{caBUGqu%4EdFa%2fxZ9c^v@WZ-+!?cu(oRD^19aU8ksq;{YV{* zPRO!U6TOjLNz*kg$1E!^qH=OgY|C$LF=qnmfte5AZ8zQj^}<~{+2NwGM+UBnR?Wnf+{=!xlDE3q zV#iYG6<@*>6Zd7zjv|WLNOALbydHO5Q8MlJiY;;7T#o+U``0f<9^akw?lE-tiiMTa zgH2@y&(1NojM;9DMVea~3U$Iv@mmZ|v%HEynaf4PMTU*IZ|1#^N2(A1dF^ObzI`Wa zsd>Bon$#MdbHoTeS!VdSqo_X43+ZSPo!4d(u`VS2HoLoHCvgxL{rv9+-e&!S<-ue6 z`jX*gX>;}4C3V^P%%P;qEK_b5E+)v+izI-)t#b?)LrpN~LQ+4o&t?@fN# z9F2UX*4$!$wVK>*zuY&~NFZvN<)mzEAz79gXF7R%I@-Qnp(|tZ*+=fJRMKE`t9tvc z+?=js{NUSK<$bO>-r#mO&9o|#HmfYnjz1tINpA?!;^o8KV;R}r#i?Zk{B~Vj?Q!fB z$!9;VxhY(w{fo`Ceq^~%BG+A+5O-PP>=f7K^hSu&Vy^5?*8iwYm8;~4xMrvNFu2dP z8EKj6q3U<}a?-;s?Sq(JyIZDdS%XwE~a2RKvxm#jqP!&&k)~A zabDCuCD+jgY6sqF3T;2QzrpsILoP~p|3HN#K}fr_iC1Dh`&^)&;`dV@2y8?tNf?et zzLRaoDwlX^_KafG(e&zJjviu#F(P^_>!V(8<8BS4bUQ6 z{D7CFqA|T(nkJef)2>(l6^H-bcRxJdp%d91&69ORj@QTvMA=$T!qgCNYz;Sf{mcL@ zpd;z2DJz|jWfJWsv8hgW^}TNH-tV5?UNO^4YTG9TVt!V|b^9|1^o4NM{zwJ6JS?R$ z8SZdwpYF7T2-I|upPUNOdFMVj*X_9d^}^zgp`y9*N?VMX2t*xZi;KFMjykI=N))LQ zl89&X?;RxER%)n@+vbU^Zhbi$1f!RH-02Gip}S-_}_JgK;xTBIoZOl9E-TdOPk){G+kv7cbA_ny-IamywpJF2E1%d+6F#hY?g3c z#f7RiS|u~;_b*cS7DGxQS zT|wtaMK#Oab5Oc`;M|O^row_=n$#W)#Y{r?x%LlhYrN0zK7K;4yf!*o4Uo0zw{Jz8lPr)nC zB@#CEGmS%1)7_TlV=#0_w6T)7$1Igsrma?oAZTUgrmno-oJjt5>-Iq{qe)y{E32pk zFl5|Y-xHTtoulxQMfIC?4s&*EU%%$zNyWLKok1r1gOQqs|J>CV{&ea07z|yc^i)@* za)zV(#ss6Uk&9qR?$$B<%j)l(=_Y2qCqVVkDX;jBz8fSD(jZ0EV`Gwq|qIf7Czw!Mh#C2M~rxPA46}(ClE4 z9(Zi=kuOsPBzvwU*lABY?FIlt?3@(9kUpNvH~YbN~0dsj|i=r%n&a-)Bit!8Wh7$PS&<8?J{)k=zEL7>*qoS9k#Lpl1P^T5^p z?(|2^;lP(V?QP~Cm*WRrvqLkD)a)^*jGB!tB`b-OY&%1#rfl2g+H!_~tqN?WQU;e_ z+tYpJ-I=P)t?2eX?KivoN>NA8#lEVH&jDa4dMBG<-VkS)FZPm;iplmKVLd(SGZ|v4 zpj};DeEH*sH?#AU&!eWtOS?a0s2x-9Rt&qcj3me9aA&#K6g(F+e{_Qj`Ut9hF$MJ-la(NIwd=QIApJ%*J~O04I3 zB+t@neNM^oB+m0c7;7*0EA@-kN5|i9I)W{e@66W9#0*Zvq0;B7Xg77%$X#=EzetuD zON;#0*cvUlRPmBuBRgN)H6n~2YPYne$MYL|q^7CKsdlM=8?uEr%kAgJTx`{@!S+Lu zp}a*_8Kj$kkT0afDsfzPzG-N%jvBVC9qcS@-r92WE=)|1NQA{^qS8lqPxW#c+bhmT zS&yYr&?D2yUIr+7alp&W&=nOEBh$(Bs~46Rs%H=8+<~c{kx5!vkib+jB7xz?n#%3O z!HN^IEdw#kzL?rTv?WteQHq^Y-udZpH-dcHN>z{aguuB*r2UUqsw!UbP z8_3?1_&e7ECQ3Xfw`>A3sV(ww(s_R8R()S0u`Nhy+| zazelgJP5D&v)ZbNs3@JLnHhHWcCjGZxsa%p{MXiMmu5q+efZ#>DcpR%t4W%P=}n2W zf-=-rB5~|&e4VrSr5t`;N^B$?Fx?KJq<%n2IHbKjeThKa4yt#z?&(!k-L(yD>V9LXd>r{8}0+%nsC;d%!+Ots2` zWD*>v=FlP~(0R3aR1xK8yq1?fWzG}M$>Cw@7Qn-F^0Gwx&-cM$+IQ{ZWWUK{jy`9F ztW*;R9H!4lhssVJrfvg%m}U|lDmY9pL{1LV8tgD7g2Qy(XWs^g=@2+f`RFk9fx|R5 zEEx0qIrw4Px2ytQFyhX&*XFf7m9xKQ=9KcLqtP4%6`#0?AdL5NHB>*kRfyAbPe$ zT3Xg9eWUYo&w>7T-#xe2lzkxNj@z2JK@ZW54%3d=VlEwH1S;S0bH`EoJjMvffDzQ5 zzcwK}eERwFc97p6pW>JBD=RM!*`y4pYDgz+ox?hbdwNj{ISI&W#RJ#0YNuY^>`}o)L6(m%QE0!WjWeMB0-x zu*1}YAEqhnFxAdy8Sj2@4IZZRo_)Iho=gA_(>x zv<44TYxO(lz+oDhx5snXVS1Voz{3@R7qwT)*HAavqKHm%&0j0nQTztR?hNVK8g}CFRyC%8;BUpAn z$oVV{f*!fPY%xI9C<4A*kX%ze-ZhdYsUGPTO`EGP9PZinfvI$LfGAq0I&1?9p<+3= zw8cCwmc?f>4LLP?!AWrk-Nv+VOnkMgwoSG7gOv}BB;Bv2Bi zv2-jzvM?CwQUZyYV{o^Gn?gUqsN-pSr!v2&7YV-n!`&4bm5|{`rn`#**0?^A*taK{ zoM0rx{Htytz7buPz5SqYVzd*NtP|Q4kgR#70fx{XWdO8%=J3BlS1d{c> z)eI!-K!{>IR4dL%)<$AMvL*z8WG!#{!#AHlvs`Y2l6CNmWbN;Ivv~|j)`%J4lC=#n zgBz1?0A}#Rowan|_3_C8zzibKPf6AVW}r8$h7dEzD5As+l&s(G$C*K7dU6_~J$+2Fc%=`)nW7441yHhP<)*KEfSAFp zgIZ=2kgR2uP%Ai*tdm6zKr1l4E?Eb|K(g-c2U-D?tV`ppixePPL#^NkpcV8t@~U*r zwPv|n&p0hvBWB>}1Clj;>wBOTAj!JE6=?dI?I_vAkq$$|A}7oem^f z+sHsG0L%bt1^y=%FZmMC3UJ99G6VHG2iFRKWbIV(IuJAX1Zf3GvOZx3Ofg~xP%9vN z_)4GKQwOvH7t{(cW^nx?)CwRoxGOs?SwpP=O4c|t09t{(l1TBW z9F(k~R)Cm6=CoFz^VpGOjcWz3N!CUvS-*9f8CWi#(F&T3g`}?6#!=7&jPLB5J=WjA2;L7Ag>iPQF3}t zDJ_GT!6e(p+&&@$W&pJU#0-)^E70_IU3~{?1sF3pr4^iE278ITRuBQq0BHq9vP(ay zzm|DP{vu+2ytD(fg7&F*D~F&~z;!u186MOMFlIok6$=3~IM90lGcX}$a1Cb$>V?Hu zC5eesT7g|USfoH&0nA=X1?kUr8wW{@1?zdzbu=HJmTSsx$Y0$M@y#5*&!#Uchf z>Hy53l6qZdi`+9u52VGJk&Mu9i@lRo-J(c6C1}bPP9n` zoRA}|EOoRFyIDv3Ci^3av8=JUJV>`ZDqcDq6_7sXkcUe!S&l^p9N_ z;B$&SERC7soE#BxHWos6Q{JOyW<%+LV$DZW0qK-QW;Rq`>KKeCRU5`V<=V=8$l1}{ zGs6%i1r27uV{3eb`I_!8`8BRg>);y)ka}M;Jo!fZ$4_nElGOb+B)Eaj<7@ zt($7E7sX3kJk;mgMJ*q-2G}oNvHr|bb2AL^8%uVWwa4*Tx9yyw>^)vb#OhEx*7Xmq zhpAl0NMpBjudRsL_QNwn?J=X3j zogSqx91#tPuM&LHl9uz2cm8agzVa)PWIr78Mhwn4fuD(mP3xYyICG}AqN}4U+p(fo z9qRY2s%^P)AR%k@3F#%*&V}~>X-W6fziIAb`f37 zw>lYdZl`{TISlC?K7~pzQV4y_{;tdW^PhihuWfp(`%0Ok$a*iZ<}opRRI_P!CoH@$ z(q2|h$&%crh&r(%OfpJ*9H}S4KCBX7o{g_A|9%@_{>;!|pcrDl#p<&G%r_kZn|i3W z3E0$Bv+h>N57mI8G^ZHY)Clusr!oIT4KN`!pn&=FK4sPeZ0cAE0ov3&7r=aEQx`BF zv#Eg^@Kg~n!HWzJWiapsWCOcssT2&9mjkh$H0b| zKM2(Ti22Z_hH3z^sVSHm05E^73t~Q01Kc`!0rR060Bq_LH2~Vw=_F7C>;Uuq^5K!m z^k@R80e3yXrjC1nO`YbF5$3ay8ZdVsQv;f)$fi!4kxdOTKW|gNKsGhP{Ja|QacS$m z`8Kerp&HN%FyG@rHnqx*+0-28kg{T4XO)%aXj!ey)FYePRi4B!e?g@|HZ@QK zsF)f6Z0gf$0J5pIyBa^MbG8WB)DeXa+0+2@ahuu>)PU+*+@^+@57Yo?Q|Ew9jr@UA zHuW9x#&Y5=t4v-6Y-;2W0Gk?910d!%OKNH{%s1|??_z2I!2FFfHg&+xpiq1O^Bezj zcOPz3Bh2rqDL-RVH`f8ohyH*H`U4D14L~+E^aqelZG$#7rUn3iKoyGMY5=mSm*Nof z3;sYR0Q`Xu0p>sWHBbY{P8Yy@F|ert=HoUs?hoLYpDjA)W**0&KcM0w%rE!@d7B#f z13(Sfmjjy`{Bi@#-vO9k3v6nL`ElKRjsa}y3y~)Un;QB9Wyi>-M*cuk8?dR78ent) ze*j@V^ao=8>GwYxt^NzlpK|~;Aj1k7+L2A2_Xn646Mnnh(~kKA1)Cc9122&pfNW|p zW>a4-Zz{7`Q!1(nssRY|p&DSxB7Z=5#-{GOg!==O_-4Ew$9(?L5y1R9x9rdhF#q3I z19Ha&H30Vq5auH_0Qdt)4ZtuTr~&)b-|p-qHK4CL?E`86D|$DRW!^;oK;lsm#ny}Y z1IKYyz@a+h4=nE9%L2@Q2g7`%2Jqf2;ZnZ|SZ_5S5bMOEf*Nod^Bqr)7JxsHn3$Ov zPvzBsqQPPX_ft#_0GNN`54e-S9~kX`n2-4bcH|G#6(fHDSO`^A=nvd6V`@O=$Nd3K z-XEBlJ_r1Ppgpuz2K)h_2J9HENDYuzAb;RxTBH^sHDCz$2VQR8-bDVuuvAoRAt`+{ z_e2kmpe6D%dBv zT)mC5>ZS1gCDI;45x-6>%N=rcZnn*tJ*M!Q6xZ9!7@L+S`h~>@%UkiWD<54rC(7_s z>eR8lmNm?<#=bg=&NZ3Z8)?#@MVg@TRD_h*L5WGO@Tb!O)4p|e{`UH^sQku;Z_Ox`a2U> z88nK47FK)R%yw#p{?NHh&Zy2+*Izg=?;5HqKaIF-D2?7#@hEfG4tBx zOXGC5ReKb)n0)1|X1P;mTPt;jC5o{N7UPq}>i&W98cn%6NHP?QXr(Hf<#^rlTdn`x zrJ>15wy%8I@3A`U#5lFhB3sr|_66*UYyD~0=TG*>Ci~jz$zlR!H|U7CEC)oDYyUfw zwP&WkeI~|A?OKm~L6dm5h@7sOk0)GW@44a8isLW8`hh>vHr7&AcF4DHM72RzGUg8G z^xJgK#9(VBS>g|P)tMLBP>5rfkdq-A7o^Hh2EQ$R8R^nn$!QO%G(JV*4Qg2zvr^v2b&+eqLEfn)$uZXO^RfRx+qPgj<; z(dnt_iJE1f3#Sif%mgSIKr;cR-26CwI1eR*Wnd-%`cNN_WeJcS-23X3i1*F_c+x9KDzkdnn14_AJ^nrQ{&<7|P)B*YcQ*KZ) zfGM{V`q2H$20$Oa`2m>;m}Ed-%2Mwhudm12dkT`lfgYF%dwKehG6DJkQf@#p`1C%I z3`S>g$pFy@m~z9+gd{K%_N@j$A2_&~08?(SnF$y3lEE&B7vPcsO1XJK%Izq9A=u;r z@d7d~83LK*<2o2O5kQz?2&i&9u$PkPJ@f!xSbNY};kXOi%?k)0kv{n+aIFAa5q%^Z~{TkeL7^14thPz)bL& z0DS;vLJ>3*fMfvT1?ERffId(PW&+oV#|wa&fapW5NXP@9EI=~gc}!H|>}cOLqS(7^ zcRo5?SlW=qCf>L*72@X@(xlB`l6Onx)X&*J9FlE0IjM^2622tsO(ZqjpBxjsJKQM^ zD0NHv`$u>79Ny;HU%erh5G19)PX3$r{H`W}nCT)n`p5`epJ zpg3@(U)QOguPBeQoj;kLF3xZ(d4!-^t{tk;5|yu<&SzqCSqZhs!5}|xJRm7Fya;c& zuBWLcp0aN#m1|qi4)@Ei&3sVqO4E7Op*UB2u_ccCq zn^f9X*OQA{wsi~kM}~QG?#7j$R=Hj3szF{6OE+A^l|FF&u*}_N2|ShYM8e-iph=j1 z15-z?CXFe?^fk)E(ER%Tf;u_&w|`s1-`Mn?E3M#i%c@%FTjqb;(#>GP)BDW}{ zbYVC`p3k}IlbMO5q;-${K(n)B^Pl_KUrz|P=2X<$8eVBhtw0!CpVQAT+Z)~u`?DJ0cREo~eL`LT9o(?$#l0!hDy zMQN>&bA%Ls&TEhcDl)~?c-rVq>>qjd*_}6kS!_7|=5Slud#-vYTO)q8x4ZAMhZ9~A zaOFictr16An2IE>XfO4N(l*ztsFjyUCIt~*@>omMF?=_#UoW%&;rXM@RMYgp`5{Nh7MLUZ zon#y5rB1Za*DvW8m+*NB3kWkOLe3nAn=A@u<6#d)adY5&{J|INYr4qA3*#56*8MI+ z!a}e)M4LY6j-tJFfM3JqbL`r+1*EwT@<;rBwu$BQG>!Ckdw#n*KNs!wg1P~MVJWP1F5=?VXsorKbf5@V4%{>4BI(+3u6NT+@0RV;fxA{2OTzlz6 zb3Y59z>UW>_d-k@Xzt+tJ_Dfm{rwUE=n!z@{ikE%IDn30_xECsdhhtvIu;Yh@9(_k zj@)$E5qnLPrl)t}m&D~W70d&uLyr2dE3S;8=`}Z7)=t)c*yT4Cj;{X2rtpWhLCR5%qI@3a z#-saNDFSXh$me+-vJ^XV7Xs+%d|m?$0q9{6+~21(cL1Q6=8n1X1puXd8?d5$9@5X{9};M18)4pyEEYa z25vmm+@Tw9i`+HAd>(Y;eYPlY<3T=;S6h6c2DH2w&Ns zYuDGFuB^ESXFurcVrSSfbz0-Ey5twqAr=rm?SBIAvD{fP{} zeV~y=4-zew=Zm*IWLAF{zb+ng63wiLn{%Oa{P@Z3m7=SYl^rg5HW1x6>J!vp&Ydt2 zO@f-478zIIS!3MV_4(M`Vos{WBGP+u#vH%#GDwhrepfkjrG2Q3R+~<5Z*5x)0Rzz% zwC(3Oo^lm87pvSz69WQY+rVhK_RqKO$%fm`*H=}l#r8%2zSEsb z2O<`Wn$Mf)s*`7he!uT1w~zzr1iOfo3e&la5Tmza`gr-f?+g_+Z}wiP_Dbyc{Tm*5 zuDdM<2SMS5q4ttuc&=L#y7ZO=WdE>pT~#5TnNF^+ezHAZH$6Q#0M7Nb|M0nfsqNy8 zAIbiqQd-7ina4_LF#Cs}>p<;?4nHWRUCTTCSoZI!TKN2QDQy*$(sJNj2c(hgvl;%L$Ka6d_?B5tFrJbn#;9TEi zqf*+HyxI@Wb;LGO$l*7wAhmxYGn!O@QkrKMWdBaoeifemgXcQR{sD*I#Ra7_JIwy& z&vlUfJ1M1M**{Q9>pM;125|Tx+c;H918f79(g54YpX=f?4*xR; z%KlvhrL@HbC}o5IfgTJN$)G8p!^=-Ua}rG`tM} z&UI8ugXcOZrL{w~Ki>w(tNo`Pe!P@+x($G3{|XL2uJ*%H8dUpd-v4;CO7)vHjBOOM zf1s4seNsxp)qW8RsQorOY6HMh8p!_T+W@GPR$7;v&*G&t{9I2#w!!uhUswCjl+u1A z`>sZ7Benq?{(u9X>pwwl0O0UH!X5s1Dht`a45s#j>>p73YYS>WIM->X+W^qv z$FhHT8vx7xLA5{M2JlLr!#2PU2dMpm_pvs>lI5}f)&_9+Q5!(SWW($qRQt8IFk&0U zh;3kP0F?cMZ2(b31=;|RZS0Xi_HP=t0ifDnj%WX18{oJCv;hJP*ak?8)#8L~ta)$< zvW?Y4#5P>~^OGq1hqH}t9&>xy^#FvrF|~gwulAE`5Zj3FEFG^NJ)3_N3{Q-V%&=Z# z8;eB1HiDNjO@t%*wvFx$#+`J2pX7bOHr8!VwQK8-S65s^v+obI^HPG8I&&1NF{ zvfm$io^=`;h1tdkfus$`EbJgnC8H_+uIOsobF{AAUU{%IpOn6J^WsDqxl-@X?r<2= zv9!eYZTg!?)Yz2a%41ym9$UpvGUB!p-RPU`Z{^bZhsSIC>$jhoh_hG5E*CXQ53{=t zMSQR^ri|s@u9}@@G(l~juqsuFIxE-r5TcFrR&V_bTcZ1@I^Nqslkg9hzLvTdR$)K@ppRI99om^@4 zo5NAVC-;(v=0IY7;Z@pEW8P#s5b!~9tt2b*`Mig@=ecl@WfhZPg%5ZM z13ho(UjF&d`l`B{gEwkDQrjKhn%e-q1oPe=7C)4M#ys*8U}GM}53$DlrAvvm<==0; zz#H?Fl>-a#5?~a;c&JkJfX2M69yR6*Q3TlwsSS%C0x#k7XXeZ2F5c|;F)smc%zHsG zA%uzvHn-3Vq6nxl54;3OPC#ScZ3c~b;3dE)!fA2>q6pAS$T#MJmw=O#lPCgc%$tZ- zJ5El{!NxqF0~+&lAd0|_jR?-8VgiUFoX?XJP)q>iBwtLxq6iY$m}JrImtl>0#j|`AfeYe?T-cb0#e@&p$V-6n!y9KC^MPip zF`q9c?Ar*ZiwOlO1b7Lkn1DCtaW4Ti=20;LMiEXG6S^@kp%6brjd|cD;Ej2VoWRDs z&awlF36-Fjpc6S$M$AjVqX zMiGj6bQ-8CV(~*zRRoQBj|r1PYR9gP!^V8Rn1Fc+RuDf#jd>`AG)0r3F~4!rn0E+) zmjL63I60|9@k6YbfV_lqB!$2z0;noNFTs7vOF&WxtSaL1L)4f@#RODUJk^+AQlnx* z9jq$iQpgO}m_JihEW{5BQV6Ijg2p@`C!nebq!3t408s=ZUQ9rZ`FvFo^Ahq>2=Wqg zSQLS95=FREh##V=B5cg(tBS}=0F8Mlh2T*H%u8Ur_W_6^x20mTms#ROamDO43x?C9Mrj3Q*2b7!iG$EcW4h#$hL zA}S{2qX-Egg@E|sn-}Qs){gv2&#%OehA13@Di|M0*W8v#RL+C8#7z6V#25V z2YVoX2&#%)pZEo;Dso+^5$^k=9VMO}?z@mSCB??BEK!V#t5yH&+|&fgSGubyr|xNuxt2cQ-92>8kz3vW6+s)b3|G0?ijO^ z_I8e=FJz9g)}pci$@E09Oyp=p!J^KFf&O|@hPbPnzq7gKBC;=z^iJhSJY7N)V7SLR zi1E#rUNs>XYLc}`wW5sx<*>*Vro@sZWkcQl2Buq;e*E~}Q=5=?VYqgJM)3qmI~l*T zx`D@EH7!`gfyz=!U!vH(OnYTw!~+y>j@U(hzn&)bQ6lS4zWv&lEjxdsZ?K#k5BT=N zK6@#>$>%$I;!*fVqFoGI?`|Tc4td;UhkUC%z_^(kpisma)9Sx{`hwQp_LFPf6Wp|4 zedu2adIgo~#O@*?RwYk?i$J7{g>|e0={_xDsamS(kz9e#`m6ia zk@nf^-3`G#lS&s%B=|XZay#p<8m{duPH?gz$69zN>kAX5QEAp45yeE_@xEc6?vGC% zDpOsvBV%255K>*HhaD6LYgx}I195*Jwdiu^K%t@YoLhtL1>x!HV_sh5`Y$ndSF34E1z+ zf4{!C5b?b;d$G?Kj=EAh=?;OSG5OUb@x(yGaC>n|x@=y^KJn;f=BoOfowCge>l-?% zE@k(PpFV!>oqT(60=FJ^KoQWq3ap2rq4CUcQvN)5&%5V&1g(eR42S$ulvcgPZ2o{n z*_wYi2dsxTu0!hq#Qk9ra0e6tn`$oAchhTG5wG_}bk_y&mI1wcPy{pq@BZVGR^Z*= z0^a>QH%40FLJd{~R5`YUedE=2rx$91q9Gb60%F!f-n;*S0g8bCj(0D?#Q;zQgwa2d zD}@$nUW@w|7HaZwe;jWudG8)9)F3ecdG}zU=J{)40EqrEvFKkIiUDe`0ml6=fFhtV zV+RX0So9C`?q9bau!WkFxIbK|k)QVN-*17_0BE5`T!Z5NC*D1<9*0_V zFL?KO+#gH>z_>rQP_u*;0Ws@=nx6*PgmHgct4;=rfIV=b1{DD(kQjh1)S&1e#M|gL z?%jihniIUm;c&5z(Miu+^HzkCt!tn~o# z7F(zR(*P*?2N!D0MzBy*$pi~EkqDdyz!z$ucMq)xYt1`Y+`k|OVAcbUxA|#+o#a76 z^oze6I4uTX(*UQvdxW=m^bao7fFdA>`=f=LkAN5e@b)gmTeMKaMsa`W-NWc#9&b+< z0fBdaHtwG|0Ac`|24I(+iTi_T0L;5bML+{A0^)K1XrTz$gRBQTZapw=h%yX>w-j5C zsGfnQ0gn960|~GmYOiFMm|uB~57#sg354d^H_Hc2Byx;zak^6cOHvl;cEWkTRZnby z)`MSt-~|`GmXMsi*!u=iPFUAlzp@|fXoR7e{%bvcP9(>R*_>`!7gx;utYTg*v{Dp= zTDnX6FlAKd_Q)RZi0Ga3&Goz^%bl&qpnPsi)_4EBO~j>Vg>mVt1X(XC&ib)UOR9)eFmmvVz{v+LnV3Lf#n)QY0Ew*>P?VW zYPCg*TrLbetMV0w;E+tDUaqJb8mg$>y!ZVBCpGA1r=~i)T0;bij<*^l*~;roIU7NG z%w<|=O$4rn@ybHcQ}{rH>xQJeKD)(0-zNql z3}c2yJD25%f_y?O8FSGV;FCW79^--@~SOIn)2m=Z_8vuW2~dR+!qbU--b^)XF?P_TWpufzH4#ph4_o)50g zjs&7nS5hP00j|B34k$Jsm}wuW4H^1K+h?)lU^YPw;kCZ>Z! z=mV!_-gQUNX9eSIDXi&Mh^?X2dtsbyF<5Zj>#@{37F&bRR}5VD(;axAgZ~Be#X-}p zFwS<`b$4R1wLTbI`|SQUO1;AlJg$S|&$D3{l`mj|TaB3pxbLLa;cfdFsfIfVj z?Ud^dQ}0;Q4V;=->K%=SF@YJb^r``#u1D{{TaVKEYt)tw(bG&4EWcYr|5onow`*O9MPvb%I5@S!r{uk$)c3jvTZOweYvqqt(dwn-o|Fp!oKjUGXKSK zJ$=C(i>$L$wX#~imArpfzMLsKE(&sbYI`oXFtb+W;qKzHtfbi+@_nD@gxcqo3#qcd9Hq1=08Dxy)1d?A(wzcYWbGqe6f7+k3bWBVP)ssC^ zXEMG;9B%qM`_9^LNsX*gCaXLm4QK5}fh>TMtzQwN%Z zr>5t=5Gt;~ySQYZ zD_~rHtLz3t#1IQ5>^c)@Db`o> zD~Oq+jW6^bD<@u6MP(E(i0sioW!29WEr0szi-*RU<_p)))kW8i_O}y>q&RF0E>Pn= zH#&ypK~BC2a{MG+v!gkAuRw&yk;^5rFO)5`3dj@b&%W z5>38)2Kwf}jYboxuzLnk7;~dRc)S7Yo1^eJbfe)!D(sts@c7y8Sw8y)yJujD2J4#x z6h?wCK9QOid{OodxY5V>L@HdOL2fh%k0TU@6R8k|OWHv9>?Ayn4$wRb12>xEg59$n z&^s5A|`XAp%8ZgkSbNn+izADc*3o`lDt8=ap>C3^EH zj3!cl_Z^%_1xqx@jrI~j_6-WYU?LR?zHlNHpfD7CVR$@Um`KI4Z_tg#x@YkOLSdAB z!%!Gx-|+A_a-(5*JU0!xXJ8@~gvXH^jh1L&-yEPY6nw!%>Y45t$iBgeR3BKPfqiof zg~3EB=$qqibiQw{M}2c0K9P!+Xdnu|LT>cW7+Y{66)e$!1N3Zo9JDW+jL-w2HU1P(>=>? z(}C_8zDY*V>EtKfGq6pE+-OYjy#umu@4$&vutbBo(FQn?ini%a z`sR5Q#+GQT51!CrcpP-kVBh={3S;5%!ZzIznn=Y__+#NVc7PW8=GZnJ1>dFvf-gW} zxJ?JLZ*Ym`N4M#^XW;>Qrf;5KqCtIgv`q)QXK0%aEztlJ21_((n+|l(@&_o|rUOef z5Akg}tZxpxXTXil_syXjeJVT-w&}1X8n8_Vvu~h#2K(lP>>JpogM#m(6LineHXZ7o zVcT?A_Ko|Q;6cHS#+PU~|5qqX{QnDu!J6lP7=`CgqcH6?6rTKl5ruzQLLnj)R{npE z!uJ3BDE#IL3akHnP&kZG_~Pp*T#2D@>?{gj`wT<26_(1;>+~R8T`O2BPl4H&(;Y74 zyFwU-voEj$p6_twBj{+U91Oyp3WecIv{a7yu7%l`lR-G(yB3aNv{a7!u2Rt9%7?-lPnODIC=4!@ z7Y5-P;OxtprE)xi4s~Gs82)k#pM5zC!-b{t*LC1igK&k3SXcoMV6!iv!-X%E;~g%z zR1QO7aH$+l#CE}B_++UZgu<3F-xUvqq1hK$0Y@D!SOJH}FkC8!I`ElL*hvMv8FsiZ z9T_9&b~OivDp_CLI2}29tt}>`+|44lyu}NFARG*ZK^TS;v1s-Mb-2JpEUJKGgK)@qJ&B-;_$GW14iAN$ z@?90l0u0B%e`;(Hj*kt(5etKGN)QSg1EDZj0oUQ7us{oppv$mOn2wOIfJYCCiZi2d z_60`J;UFA{po2j;5s09}P#8W4H+^~#&c#yg7;N{843*8YiV)p$U$&4IY6MBiNYmg@ zH3`g&9Iei;-&gsCgQJ(a#R9$~vlS$GE_U!quNE9n!7faTyt7PKvg{`txltE6k}Q=^ zjSL188m;Y_>g!!)j@H|CzFW%nkg`gO+cVHmCR^}7SQ48Bm7&>mU2dOzcubGF6YdPJ zR{T~+DO<~aWxapznZwKIn7vXx5^#`xI}}5#oHLlvMZedH*2cn3@^pDHMlnX+u2hPw zW9Evl%Pt;MQzq);KYhKJtL}W`YRxd;Ksj*6wuss6csyEpRS{W;PwH1$EnEP+6J6}0Sd)v~fw#(B?V>8dHIF6GALZl_n{ zGG%k7ax;}d>@VU9vvP@g^SA%@w5|Qdn{PHWbK*PZb&Fab6%jdxC5^qkwMAM1>I^2k z${W#0_p`KPg_hAMsY(_rs+fD9|N5(V?ZE7%p%x#@z2@3Kc4g8Gg3G-|pq%TgkW&Sb zgin`Uh^AdUCxx0z%PYkxVtswr(TmSMe^pdD0UD+H5Km`*MENdn|bS0%jlK1n$Ws_SA{lTEum#fp#5^= zupDl_S{HpgaPw6bmlLqf*Eh#!CAxokc<)uZ_v(d-K6q%q05xs!7|CK1KpsW-#}iUwJ{fZ+K~6YUqKFk-P@+_@#|jUcNsC z@$fMcq<0rKU-6nYj8?(NNZ{tH6GW>Z#ACT{Wc9j&e_7MUqE+}~Bw7sOdwzZz;_=)! zdW;0=-QY121o5C{W>^5xD%3I)YftIjsAUE>U+oa$f!>X*-oj%f__7;ZdC6beX!8|8 zJf8c;^lq5@K6Pos$4Ic6Hdui#)U@Hs3%IoRv1pa75^TPnw9NR0l@}DP0=e&#%~#Me z3!}}~{H1+%7sHP3{Zn*iHZ<)bMJO3C7xU^3;U-Qdur)%0MS{21s-~&hbOB-#z z=A%`prVUo$|DvXiN2}0dBmm;U<}1{@2`Kjs9wUKzH(t}ma^I&~W~inO9wW)Gyx^O! zcZ<;qJhFPx3Vh))5`6Quu9?}jVzu%?~QeV8X=>Vmk4N?9j_E}-&o6R7c3mXmf3pj z{vz>^gXg|!N-G2AzG;G9>3h9$;VbJi&HDP|wH5c!><9fF+%#Bu$sC1I?mPGWf#)gA zeP__VuI#KlU3BQ*9Q^r(l2U(~=7?GiW%8yb zw|!wfYmso>jTwqo)#Cqb)`vsys@J?KKj$vgQJ$_zrI}GJ&Ax(@- z7$~8#7Bo(6X_{3;WlCeItiveL10-RyWm7ZfirvTF9qszp4}Rxj_W$jb^KE`=CYsrZ zc$t0TQt&*_rj?Oo^0G8h&M8<-ru?$BIclYhpSw7d4(}cuy9d>2eL)*{G9OMkaPO^xyCzw^!!}e z8Yk>#Z|~Wh73Ztb^K%p;dVY=>jb*p>T3TJsMXLKn#XNj|ZtR*;Q+~Jm8GL?@LZ)HQ z&xOGAbK;t;Ae~8B!_4EH410c#$OiA@)cmJn;jM2Y`RC_u7oMLZtCk%m(nsj|xpXXS zr)6^n^!%J9K#H(fPuoYzFTME3Rs8umeiA%CXLAH8G4%Z0B5eTl!^91~sO1%WevT}T z%hB_5tr4AQ5IjG(@adDmU;JJ3pbkAhXEeg+=MwPwIltn)+3wOd^!!}F8nd2xe(uA` zi01!9&(BRaP@BQ?bKBtgIolD#6wW_CH*%aMte6fwSwqPhD;H{<&r*C6PuIn1?D@IL z-b-!h`MIZ_EvqAy@`sFu{rvNDUY`d%KL^6}Y%3h*Vepv&=1}hy-Taqd>Z`R2p)V3@}OcKyKfb9k5@?fSvz=TMj)JU_>g z%}LQP4|sm=57_f_`7r%KBAF6~%;5PsKX`r)4D;|o)9+-%WS7d}7d zhFiXf@!`+UjTB+SJRnRDn||o|xgTlz6;}TLTU%%M(qtHh@u`eW9NJEbdJBYYzWeLm{vZLWM+#NXvJcvtV1z(N>}^wz{tSzMtoP_R@cGabMT{`&Cnv zf8VW8KL@TK^>a6`8`tl}6G?pF`X$}Uj2?BA>j%oeBtB67{ZWTpfspb)f^na6{n)Ma zQ2xpF3l|4w=Z-o8=E1^&lz$v`sGsv-p521z=j^CMuAl$(TZzf_yL%xsK(3#11svB8 ziO(qip?=PRc`&9Az&t_XgZD>|I^g;lS3oKMs-H_Abpp!2B|aU~vs+mYKmBY>-}~vO z`nhIR^>b%~qYf$mu3Pc?IivjB!a?+N^?Y{Kz&x&75$_MieWd&=*Uxt=-uol^IrIJ) z0Hl|no92X8TygxFgKaep!KmCyS)cZrOpJVw>kSl2hRIrU>V@!`%H9hKF1m)jz{Yd#A_uijTq5L!P$x#Pffde_}2v=b2>MeZw zmEM=Wk}Cl354nCu`L7D)pIkqBe@^yzf83`Zy+2HRBX{n@`vb0D--kvHTt7{G;QBG~ zZAIV;Y>_LlAAb5dt^hv$B0%`S75IKbxB?4H?OW>`Lx@W9mu>G&o|>IKR@hjU#J61Cc|7%>#MeRM`v=Yw!I%I5 literal 0 HcmV?d00001 diff --git a/sound/song_table.inc b/sound/song_table.inc index c551a656b9d4..a5379c40ab5b 100644 --- a/sound/song_table.inc +++ b/sound/song_table.inc @@ -560,6 +560,16 @@ gSongTable:: song mus_rg_trainer_tower, 0, 0 song mus_rg_slow_pallet, 0, 0 song mus_rg_teachy_tv_menu, 0, 0 + song mus_hgss_casino, 0, 0 + song mus_casino_plus_1, 0, 0 + song mus_casino_plus_2, 0, 0 + song mus_casino_plus_3, 0, 0 + song mus_casino_plus_4, 0, 0 + song mus_casino_plus_5, 0, 0 + song mus_casino_plus_6, 0, 0 + song mus_casino_plus_7, 0, 0 + song mus_casino_plus_8, 0, 0 + song mus_casino_plus_9, 0, 0 song ph_trap_blend, 2, 2 song ph_trap_held, 2, 2 song ph_trap_solo, 2, 2 diff --git a/sound/songs/midi/midi.cfg b/sound/songs/midi/midi.cfg index 5802904b4130..cb66057bb907 100644 --- a/sound/songs/midi/midi.cfg +++ b/sound/songs/midi/midi.cfg @@ -208,6 +208,16 @@ mus_vs_rival.mid: -E -R50 -G124 -V080 -P1 mus_vs_trainer.mid: -E -R50 -G119 -V080 -P1 mus_vs_wild.mid: -E -R50 -G117 -V080 -P1 mus_weather_groudon.mid: -E -R50 -G090 -V050 +mus_hgss_casino.mid: -E -R50 -G161 -V086 +mus_casino_plus_1.mid: -E -R50 -G191 -V090 +mus_casino_plus_2.mid: -E -R50 -G162 -V096 +mus_casino_plus_3.mid: -E -R50 -G132 -V090 +mus_casino_plus_4.mid: -E -R50 -G148 -V090 +mus_casino_plus_5.mid: -E -R50 -G165 -V090 +mus_casino_plus_6.mid: -E -R50 -G133 -V090 +mus_casino_plus_7.mid: -E -R50 -G150 -V079 +mus_casino_plus_8.mid: -E -R50 -G166 -V076 +mus_casino_plus_9.mid: -E -R50 -G163 -V090 ph_choice_blend.mid: -E -G130 -P4 ph_choice_held.mid: -E -G130 -P4 ph_choice_solo.mid: -E -G130 -P4 diff --git a/sound/songs/midi/mus_casino_plus_1.mid b/sound/songs/midi/mus_casino_plus_1.mid new file mode 100644 index 0000000000000000000000000000000000000000..72e12c066b583166567c5d59beb6a762f9479df3 GIT binary patch literal 4942 zcmbVPX>(KA5$z}G={?H}6UYQ`C`JrkWC|~M!wZ(5g;q;85|UgZXllw+LxG102HPae zm*6L%r1&OTyrlRSWUqXKI7{VUD8Ixxeeadz1u`VAQkAURx4Ta-r~9tt9(+wiUVJpI zv69<*NOWd~4*VL?fm=^+tUubM1J9|ojYm7{_wV`hkGD4NKiHwSH&{l4%!#A-NWT*r zT^}j^S0U~GNa_6%_Qdm%(tjIfY5o1u-M2S4ceYy?|9**Oy^u9xPakbR*xW%R%+R+_ z?|rqg^)>zDIUgH1HkTeh{&xN8_PrzL|NI4?ci>#VxwXFi;K<>>5Z;2v<2q;3!5xmaADZam+EoyJ>5s42{`-VT>F8LY2_W|-$7YgypFcs_sd1{e@w!47eW()RNJAxk) z_+eHE^*VvVGiNyKWkCqRi6ky3sUEp=wi2K~IYMXES+t%gdgkgU< zdc^R3D7^y1dOcFOx<7LfetGJ#LcSa$*ISL=jZrOMAZN7YjSJrXtTIaYtze(Vmuq&O zG-zOIPa?6>ecPE)n8jZ*JT?!Wy|1hy{dy-GtSpfCg+*Pz+_7%G>(HG396>jyxx1E`)2fl= zH}K64a?o};XsIc!YDIP2P2*0y(oZfsg)@tECvb~i_hmcO#YZpuEPDtpoQ6TIr63Ef zu_VC(14^dhfDQ*fg|f6WB&;J!P#A-;9E`=ITkOGLWr#d>4hM1SfI>I7QiH}_NFyuL zs)-G~;hiuVU6UHTV01>~%#_hMKW#Sr*Nw)&jM=z4YcwY2JTU5M%+9-DSZ`Q2%tmy< zXrzK(IN@q!7hTZZ2k!&>W2hJb>KQ767|;yL#OGLuV5rDwWfUz$F(jfG;Cs$B0iz%qv~Y8N1vLUgVO>(4lB{_1k_6fSqx^LKGE(~YnIRsiyGATga$2~R>B1+<`q z2DxA**n*XI282={3{W`_LRrpHJ(CmgCczG!Fyg7NuC*&;fZXL(RKZ*al;NprYy%25 zPG)r!&{KeZRY709waJ!;Dp#okG3nqS*E4JFCJ45gAck0W02bO>;;mKKKgTs|HB-RRs`S^DUKuwy-a%x z67wQ5M(ATI@r1FW1Ttu+yPw=30RkB`iNFW;U+1--N=2*HJn5D0>smx)1>q_Bx$@g?n9>t00;%~YEoAO|-y z639VA8F&wogO1p`6**i+91oKN|BLpuKlvZYfl8Jnh?^h>I68N-l-dO0rmg zHq{~sA6kz<5=;OtIHC*uK;Q}H2ube$CqZba9ybU=13_$X zuTG&R*-IS+;c02d?t*6UD1tz>#L!Lo69mDny@PZ&j zariN2m>{}94p4meLj++$Kf3KO4;~_jL*$^kAGSDOiz|s`XG?Wg$y`lZ; zwlxZh=)rYel)jbhMqP?=evBdlP&I&NbvffeJzI2P4JwUb_whL)uzy6Y1|d*kL=3gG zGY&Gsu)|*910Q?DUI0dmw~{$drfNJATKlqIbh@iioNyrz-o^|j@ei+?jVCikV`a{4 z4Bapq-k{m|YEi?zId}?s90&T)Dz`i=poSxA8iYWP5j71W=yvH1his>6B`0vN$5{gG zNYMvap6XJx+2v!EC4qvOQI2MY+?Q38fFUm(f-HqOxlPEv-K93%c|bCFdr?ri6d9uV zJ@C#!VH{qXDl{tD40q`$Tt(>9aJvbav-KGaOV|Op9sul^f{mTvRk+xRkh#@e48!PX zg*TG07zlhH8;Qs?7QkzO%0N{>f@SFL1m0Ps9(EPUqcl?l&R%G_2rDiEM*`jI5C5SMA=7=N&viYOp7{LYW&@VLH&201NgD%Ki=-g+uI242%&#K?zHJ0W=Os@js% zN#2r&%4uGHqnA-80Zc?67T|si)gC7do?I?=*9&VJY&EB1;04}Ql`x$u7nFbCO1zf8 Ipo3BR4|^(s@&Et; literal 0 HcmV?d00001 diff --git a/sound/songs/midi/mus_casino_plus_2.mid b/sound/songs/midi/mus_casino_plus_2.mid new file mode 100644 index 0000000000000000000000000000000000000000..ecb3caa92689cae27a08f5d13b0d706491658c90 GIT binary patch literal 23405 zcmd^HU2|Mjc0D()LNgQ-wJOD!8iKop&4|I4`!;qMV{EHsV=%_!55Q##2f9084*?7o zMTS(7&}zNqP10K)^ACWxd7I=d|Ki?$n_t1Kwf8yq?0dRfmcM{W9$cWSbI-><`(y3B z*VXUd`tSqi+#~pxWySB_`ut<(u3vNCw=(Cx-}AG#J|DdQajVmDe_G_T%se~d{u@8G zvcECUj=KMmXFtcYhJW|@)`ic$|i| zJwpZ|MH~)sgI*N4xHi`1dXTefMa0d3~Q7HOlvUZgda#!41ahuN!-FRu}Hcn&Wr4_gR@-Sb2#^s}zF!s5ZTsg$}6Bu)|=Qdu(n41`L zc9`+K;`*?Sv7?3Z7A8M|7ck-0Nephk=Qhq_a2q>)1&dwBLRh4DqCZ;Uu}3Ez2WIO_ z4o6>f8?QJH?90)IP5FITS&n|QDPzLw#S=L0v)n}xU5wwP`gp9Xd@eAUe@d_^J0(RDNqcsjFJ{h_Zf;7cdCB+{Om}bLn5& z7})xcB{#YvXT-TMC@Vg}jXjN*p*Caa?gmyL&tc}*<)y>l&0TgIujARlV{ZH|CVO?b zh)EjjPxC}L`m6ZeA6^OXB3AGW8A&(`<5wnzedEU}lZ6^L}dKRMUC z{#!Tx5~4nj)9-hAapZ5qor)AkD|pW;$-;*?pR9*{_T0w#>WuQf=tt*RSWC}KCAtjx z{QeM>Pqi9Cyd-B|a)aVL^vKUC>jj}-#@uFa$$ECaK8&JYe0*njv zxkh=U+p68wQ|GF^Y{YeBo^%~pVUGE8TB8^n_BYZyudjnK#oA#g5BBgh-g(+}iklaz zb@-0I183Hhx$U{r^^5D5TmhTgJUn!e+hvj4Vb_=Wye6CTW*k@Sb?x=TE;s9B)P66Y zK4j9LSm)Gl;cdi8w9BI>GB^qM{Uh1++gz zp3X$yQO6L+F!t!(U>`7WbtZ9qUu4fcYN*LVB-k*nPn<{ea_VR}hj)$X?@dIC>*-i3 zj_%RSSDe|S?)Q*4qG=Ip(rMC3+?KTvtq@bQ^+VqM;|}0hT}g4Nl1|QD6k*gJhroe_E2;e7R6^U#?fsNO#9KmyLK)IC={#F;xf{Ld5$%?BN!&(GFd9t20Z1GaH zwbTnX%e8KU-c9bXi*-KlaveK&ZOv+5&%o=|&llv2xqu+MD{jR3!oH&saUA#CF^)%_ zg!jzyo*I~4JLf*FEYkHWP}wowy#uGheISBuy$t!8eH6Gi9}Vc?JL2tcHtm{yJfApc zaEirpZ@zr>Aj?o#s3;PIQuy*G9ySd;x$i}ag6*sWYgSCCpCKX{E zge*C?-f6~h#ieGtzkK~5?ujxFcW7mfpkN$G5B_5i{DHk&(Q|d&VmIZ-U#mVTqREQ$ z$10>F=fj@hbE5yC!;I)q{D=4sBDF*R5S&@`QE{x=f=4A&-Vr2N`L^17z{xSlT2!U} zaP&$-OlCWH2;=-QzEx(rDx1su;w(?`aMJsK52w1 z*e}LE4Z>>>*}wY~LH3GEMC4IqAG2DN=8cbZV&GC|8pmjm(7DyQ$FUi}O+RD?A_Lw*2!;cRp+aVhXsG$Kv z7*M{+9SWio<%HrADau^NfbfotNgYcKRoYBQ(S_7$j0|F#85u#chlpzH8A4{V0xM&2 z)|s+UhqCD08{h4+4tU`7JRXt|;Mo7DTijb}6m=FVtTQ~sA z=U1TAOugS2_OU4{*c!)3x&RnjDiU)WZ(y9?6k&XY!rH@L+1}@5bD^-t;-L4sNL$=y z8|y7Mdp7Fxxp*2}E=$s4Y>a-Go27j*R9^gn(^Vsaf-IhFgtWYkVqsnap@|~Q;XM?M zi;qySLuB840m69vF|CcWaQx=5zy5;je>Zo{ZM=zjA3N*Dh(_Bl;GGXp#EUg7tnJ*! z3)t5S!<>atc}IV4l*dk7F5h155GKq1^?4J|SIv73jA@1U#wa3gAHzBERP~u-So7F$fHAJXMe=>QP&}88#EZj`!^B-#_(cqUQHneBm~c@BAAiJc;JFOG zGE``aMardAZV z$EAzLzkxA_{!N9ve8O#C#kw~n*Bo_6(4s92*tm+#;}=LE`(YukeYZKrFD5F^u~PcS z4VFt!xe*uA13`25=|ZZ(S%ETo0ZrIE0@YtX0yXB&5i>&fLUxV;D1#x0LKO%!)K+o< zUnZNLCZXa4)Jv}s3m|fqbLe`&p$TexeL_6_5yg)v%{GkO>j%wr*ANRQh{h%bJ7aMD zkgGEX4`ND;j-rHtBBi47K|I@+hW!AyiuanMRch>{yMeoah(g)F(l|~M#KPR>*oh$X ztauOd{S7qqhFWRjMS{D%eFw$K)_;S$hhh{lH^4Q)b#wK$eZImUO2xxK+IdGGUne1{b{2|G|?B=_)o zi*Eeu6>lZ7R}DQ>a$pozL?!gl02EyJY371Q!a0dw^qiwriF@G&_>v-YTwwwNLguso z-?cLuvl1=20n{PZNG3Es0>Q+R?>rhyivU=y@h^|-VGt*^6^p}Q9+uG9_cb6&`a4xj z^%rR76!&j?8JHg#U{xj!#&a8>W)(5Gf%0b~ITO~dp9O$qLsQt0T0iw{)yb2^=EU;` z7tw$@4??HVlq0AKv;}q`7flDWIevS!fieT@V7VFJ@MEbBd2#aj5X>FMbFF#2)5Vw! z+AuHLptUXBGz5q}*>p$JP}Kw#5+j6af>?mjYNn%s9sqNhYpR-HLbimz4KYk&^J6$joahDQy30)+7wxG^A- z@%iIKBH?F?I>hl*fM9QnH?HOZH77y>V$yVDnMenSNS|p=h@4L%8wG`8tc1#X(C;%$ zn%3z+aR3P29V-`M;hC)KeZGT>hBa=09+(RNa9HVA}K(rfQdv=ZVccg z1tx36+XkGd$My&KA%RI|K!~Vl5`n3THBh24rjFbC0gM=cG676h#r4&}iOmEoFbPJz z#?YGvumqS?bs&v16FE@Nf)W~mV6`N-$;I_XU@}b%@GFFfQf~@s+B&Wn~HutC?RMu zisaF3dKEhZlK@66K*7$K#x21y)IkZg&?-y}F?C>~NVX16rXX3SB@vuVT%Z6GAJB0ueRCE29hN-x5y|y3UsDKIEXPaBnVUO>5r|1E|XT26W9q=uDMfRa^!5HBQ& ztud5PxEP0?=StI!FgEmyHOorUI88Cym_KJ2fv>8JhAzqbuEzK{!rNN6TMkj=pdfYs z8rpn@04`vv9LR;>qx{6owEMClNR6l}OHfrGm7&J65V;5B+>N{W_qG?xrVzSsh ztNeX;{PLMbi9?bHX6mE)_)!RQ&uU9h8{#tZJVk9!1NOcHzs(I`Ucgs9B%a~tfk0o3 zx4FNV4u3xhl}C*oG+h4d_vrWla{+gO@tLXF`%`5T5-@apx)Wdrp9Gm z72XI7f^<;KHQOW`$bzQ8zzs<=p5@Xdyvr(JJRQWbLrJf=aV;2wq$^Z@Q`*ye(3FI~ z_qTj5trW{*ulZg>Be%7p@N%~Ayu5Ov8`$kn~Lgv`l z1u)iE1jtnwtyMO^jGJSf3F@KK{SL{_Kzb2- z0Rwq9AEavgxp&TL6G5u+{UbmBZfXjF)!ww68t#fDO|!n(zep1w(-o9SwjlD8v?76Vku=^ zuh!}`YfBqi*2exxu$=1G7B$_?F51$aWQ=qz#p_OQO-rbdJ>J3|PeOL^ z5WYAS$gHs&tMv`6fi5RP&+Ilcw9s}$#)>T=?8lE~HCL3y4Rpu@R=Jf|z`@ftARwg}haKB`EP2kC2fK?>q_T*2NlUE(AyeOtLr^_OPq;Gh zX=q+Eik%3o6Q97z8X%FYSo+S`aqHyTH6bOLk z2~=G1(X+`IB0%0|GzIOua)KA<-F+;HEG-L}q5?Gh=VmE=LOo-mOAo zZEO(bUtjVDSqCL`qMuM*W3=~PmqgXSA_6PQ1{HZ#I_IpN3)4}Fs^p4Z0VM>^1ddIg zaomF>u=Xn&VI;0=iKX!7pWFeMVE;@!@BAbPtX+wF2-INfWRj66qDM@GX2-8s5D)8Q&x8)KfEe=slEB(W`rmoEy|7|u+ICj3(%mM1XchWA;k)k_4O?V@%tdKG93-gE3yXB zsUd7dPAc6trW3IyC3##zXnoiO)~+Y8u6jbN=CY`j@l&5b%weamc=!a?enMbXKET}( zSQVTc265=#zO1<~0_#ua%bL3;u%?)eSKl+l)c{0NfHDD0L}x7WFK(by?Ekuj$8WnK zu-4+tY7!BVR`gN=D`2_*mW!zcid^IdiR+C7)*4xrxqd}vkIX!q%3Gi)ZM6&Q+X^fAtn&Op8%8p69m?I zPhee0DsK4>1XiSHH3F+tb<@8OBtL*B^_!-EjQwXeN_;yG_y#s+&4-tv0 zfzYadfJcd`(k|Hrku^^UtSncqF>Kv0fwh|uSO<4OV2x0AcLY{`enfP4KLl11Vi#ta zm9K}-BCw*GfV9^$k^xxyQm-a5HO;^zcdpgYVWuj0lu36Wu?`G0_krWbBe3cr>jYN) zFpc!bT@Y9&ig1R|+9rWjf=?u_W`WQ;jlkMSNUND8v?fvN2O+THbWKZIl?{19D^G_% z6^bCR3H-R(}1^b&^RCoX=9BRanGaEajhG-mvLL{*Ifhfpx;5+!-SaA8n zBe1rGz-maV;d63)T90bxeG*vd6sG;LRcX+P%YGHOB{rc+KGmjBy>UI0z^cvc>3=dNUpYz|(6v9^Whj0DYcX5k-%z6sZ056@40!lt|iCVi$pdHbCGok_Z_#<0geaXnJTWBbwxpqgqlDg_7Y^L1WaA z3nx)kz^OQNP#{1TGo&~E7irTh3UraQ*>qi?>jK&K4-{yjp7TC9Lt3)kG$@e30USwu zckbtT=ic{*?#jDcLWmUpO-%gVUAgl!A?Cgk`!7rgu|JvgZr<3wE%p;fuD$=k*3H{5 zEZw=Wy(K=MpaA|iIr{my+!xPM&Z6Af&F%MZ{Pdj{uHF9N)=#50eIx#Kw-?aXPzgCh68~^PuPbS45 z#UG}AE*|8Y>gV~Y_+)BNe3G%nZ>Qc6zneNEKArkde2Tw+KXpABG=C|Al|3) zSbIra`*_~|A=e(9uV%-do57lI4NhMb_vbELzjqoB%!wKJo%r`}cBT7&m99f=T0h#+ zCXaJD@oPcL{B`PYLK{g9&cK0rIB*8~=EZYd&fb5Ge(=}aKPYL9xpIO_$39b1Z(92@ zeTjd5W$e>^A_T<`D_6vq%VIw@@s<^okgR+|+^<~P?v{|8JZx6PG?V66?47WB<(QH| z!Yb!BV=}&_GbVziz1(0HPS?(N?#)6$O{9a`-ATV{XS++HWHK1myzF2WifZRJwOrD# zA^Y?8Znq{x*zhtzg$^O1m5bN4GdiKdZ>UrWl~ia;5AxEjj+Q()si`sF4oWES1y2NY zT7x<1;f_iu3xp+U*`%{ufn>$Ag2lb8!%wM$WRXVuL z4BE`eA^8Z(ccB;cS~~xO?qy-iS}Yl$9q*RKS(YpU8=;^gmT-Ybd7%L(AjxHd*yINQ zvjzp|H=rs!1S$(V^BD=OLJU|+ZnzsCfvXI1c8N|BgWoY+iGD+3>sGHJtT?{Nf~at= z?=>b4z*(o~K|Y2xy@?Ipj`ZtIOJi=mSBLDuxJ&oj4NGIM(`ySWhQB28J>7R&7I3)H zbFh{dE3yvUK?;FW@Xrbw5{2vZiAW^Ru~z+hD;3mZ_-lwuy}CWAF<9u<75FHtQ78Id zOZk(xH+r5uLG)pbdnM03!Mu>(Lg$Jl`GeSVKxoVbG3Dqz>VVK{AT)9eap!>0BAFPW zwLxeLP~w8n*dkmp9e8&W;DJoH9Rr>VLSrj&L1;=Y>ARZHJdlJ3LUU;hgyw+Ilruv@ z^F|5H1)(XoI$H9O4Ls)CVT9(w0~dsLN_sd#Xzs{{?NZVK=sXabH%!*91e^m>Ln|Dd z0;xd`u}&bSO+F)AB;zGVI-1yOAhv6Wc>%{xaI8%;A~=mPLvVzy zBXuj772sJRA~+S?O(HE$a^D2lg6|U0M8D)1uwCetY|$?}CFc0pXR3?3w&<1dam^|9 zYWP`~%d%^ryxhSOh_4p~7{Lnad&m04MhA>A?Z1xltQ9l8qPS>S-(SOLuNNN%r?;2r z7oBwg*#IF(fL(ZhyBC5zZxkY?))(ZK76G7 zMp{2-Ny%;p43WB3jgO6Q4cpw3KJuxatPdS#|BQ`!=9qENh-bz-d9Zjo+C^jM z)6tHs%YE_nMmzT3M~rqPD93&}+PQ}^6i)_+pCLF8n7K_K26!tXIO~LU54Q}j@rFcj zrt&#g%?ek~Z_fnYjtJHu=QVJ+us1ocb=M%L=C-zJx4e@Jyj>+*Z+3=qb&=ClLm#ri zBJ|O28~Si-GPKLtY*wFAL18$^XY~*7aI~pFfyWSDRsJ5m!SPbIY4+ zzPjy8^~xy894=Dk+-z9F^LdQ4<&9Onp22z&>pl!SP>%Vvw6&&{pMdh)h%c=TXJL3* zuN}o2=hR&&PHDqA7;b6BxuM~F(+V%c@Em5&^2T*(kk93t--E3!=wNUk`j-Jk$f=tT zJ1K+2XZYI$nG4GZa8?IcmiZqIunar1IzY7^3$TO$^EyD49eq+yGft9_x_V6OJgIP% zqzsoLiP1Y<27eJwy;xDfUxZUHVh}HjX-e~67s=2vs)mXfNntJlw(_iY*Ge^&+xYiG8a}6Ag>J=U=?e;Hi!pU zg&kfIFhI2)3$TI!c^|+4RrFDSDl;lTwKf`{4a4)G6b5L+@H{9bGHmJ0GQg(ReOv~L zH!Y}cR8=;ScvVY6(T1rk8;Pl`;q!Snsw^9csVp0bx{;46%SK`<%SJL%SvC?=S<^^N zW!Xs7TGUA5m1QGQid7?_;do^aZzPH{#;eOfO?BgenhG;eQ{i}^ros%=R9FQnFJ=N< zT7{<2j92+Q)5Yagu&T*I`7XM+ID&jy7f*E;C2w+o0ZBe5b!+)lXu!an7%-r}Xj!$T zu_d*91P*o>rC)ZKnEct#&xtRV#h1^La1|G<;zq927IOTM?{;p<7lyLi^IBWIH1wx~ zQUgNV*kxP+?Z`KVF`?lVPcA4!kON8KGTxN!cJSIs$c9I4wc&f$tdi3TYfv~Ur{2K^ zr53DmLsek)?sdMWj9Z;T9O*IFI%7iS9YyLfo|%gvK6-Lyj*D7h=2^S2zqV#v7E49F();h z6HY5C!G4qzj(yZr+fg}*ghq41L57|!Y0o&!P}!1DIpK86oN$EU?OyF|RsKld2{3?U zpeMi*{(s2YkiAE-l@(OL zRGeH+^9t#iT#NTK#vPS_-Axvg^&$;EQQF3Fs@Iw$Z- zD#Hyp7znRgIYH@mNw!HCnTA zI7R#M(KR#QH_8UzHZ&;!)xB-p^r&d_%^YrbCYV(Mj1`ChYXdhu>iY@`SSCY9LViyH z(Q9n2L!ZUHBr6zUD~+2TEhn+n@$p@Sm>jW1#+nYV;`;;Gb{bwA{?(XWcX;D76}F%c zerklR`>hcF3v{u5n)I0^#B<&5GEN5-@@7u`+JkgnT*&! GBmM(r9NjPg literal 0 HcmV?d00001 diff --git a/sound/songs/midi/mus_casino_plus_4.mid b/sound/songs/midi/mus_casino_plus_4.mid new file mode 100644 index 0000000000000000000000000000000000000000..dd85beb4681dbdb67b037b9bbdd8bb92fd1f5646 GIT binary patch literal 2227 zcmb7FZBrUo6h12}AU08xPNr$nj`@&I+dyRNPKZgf5m|ggWd$S%LPVv}CcZ>%?MvF( z3*(o5+GRiYKj8EaX!}R{Pv~>^UeYw}bSBI&_nvd^dCqgr-Ft~ylQ**mU3YmBZO9PT{ZKBn_H zPf^|_<-$+tL&~+(i~12Sk$%zGJU+z6+NtmD|5u&gbzUd%Zb^THs9RF|ln=txUG3`w z%R)c;#jm>@2>x<|I-%#(4Jwt_$2#b~6Pctl9+0VL@SVZu<{rNGwY3!e7OM5^e&@;D z3CmH~&EHe)Cqz!k+-hp1dRj8T^6(cXRJ#QK>daD0qmNhtz7?EZg|BRGd%6)|D-?2z z@Ri}Km`g34*szx{>a7H^8*R;C4*OD5KgHy2)#cMmPszQ$9ih83`cV z$9f;@1WHc;;Q{OiKtQd)`3PO;ieshrZHrcsmT&TNw33mZYVYv|4&{E$71^D{<{U%-exLy;cjL&r2u zlWxjDKPlBViOzLKEJdno8YVc6F%$cgaU^_?4~3mP6!z4SuuU0He=F=6;F%}l%|`N_tGXq-eBtTiL6MZrp~F#GND|CRf(1!%1;7s_!Qx}!N`fUx za8(klNP@k_Ym(qoNwEIr#Mb|3Vr7|#N%@aN@hw6*0Hq}%>y3#mNkR*fP(~7(lM|cy z(J?27(QF=%-&Oy`h|@)!?TT3?tN(hO|EVLVuiRV;!?0ARy3ABJkN2{Q$Gx@?fsmC2 z%0driiN6$&r1IpwxK(e(=_e^bAGfvK4^o5VRTZLAitd6&Pl`VA^kNw}*QFetc=6IL zsYsK+E4?L3skT;@(xR>PnAGI!8DHlVxGru;-O@^B-t(}hmm+V;3qgaS-&Vg}LyOf~ z1}tv7%a&+)t;Sofg3X|7O{?}A&QuBmY?I`VgR(z481I*8?Y2XBJ+t>uwrVQgF=GSed11$Ti`ZgJZVFHLAo030&AzZ~SI?%}R+#lE7MC+?K4 zLeR*Wo*KY2^aT|Extztx8*)xYCSL zbC8#c^>p#{)$8&<_k7K3p4Pyy8XLHsuorIxkP>Rg8(SD|$cw>_Q@9<2%|8}V*fGST SjU9YMBB=2mzR*?bj?rIH6=eVb literal 0 HcmV?d00001 diff --git a/sound/songs/midi/mus_casino_plus_5.mid b/sound/songs/midi/mus_casino_plus_5.mid new file mode 100644 index 0000000000000000000000000000000000000000..62da26ce3d459b8b8dc0f21738c44dd07194d3e4 GIT binary patch literal 2227 zcmb7F+fo}x5bZ^aBt&csPPyXPN#O^lVqt4R=3>Y3!s^1sAhEh2gak4I6d*Pi0|~h} zsU4|!$M<{od|BH(Il{)=t?nQESDoKSc^%*TCH)bgc2Vt8J_=HMrK<}p z^WEqdzjnsw|K%370xziTSIQU1TIjwNnxbHhy-!r39#@1Yrd54>s;`e1291m3@>BxFc9cutxPg*uhKofwYei zA3!a3=q27W4jcE75Y`VGVI&LzU~#FVO4AC`ChU~4W~GSr+gW|p%3^AEMrV7Si9N6~ zbk&~I8+mIElbuDM)-3h@&0912>}iAF3+qR>tLV-fe4jOq^GQ9+FQDH_Qm6y@#E$7_ zhGXdHC$3sCqBoGN5VFagdIB;c0$IJ-wJyMc!^VSW_H^f zNi-P{v1gm$gne~f!dP~ITWZc{m@n(@s=@6RV@g|{ZvXg}@uIi5L@}(Pn=od+gS#&rk3rT`mNiZ)7E&=$7Bv_aPt|VBL z1Xm=%vLx7PydnucmjtVqC$|1S6D!F?Ov-yC3hxlg0w^g7nU^M(mV_20p?OJYPEKs* zM>{rk4bA58_+9s2jA42^%=W~rjJ1C~&i~Yrv)7Ip$1qIQE@znPWbj^=@wl%pgdk)k zfwIs+N%NQDsZ^ev8!@Ym2>m1l=+mZ_{XuGwysG?tDMb;`=t$9LZnRJW&P^#tr*5Qp zM=H`3@QUwnxh0On^r&t6}Y|GDF<-*B}WhE?0Z?F8LO&4-jgGg8~aa0BiT><9&$L$LYBA`E*7 U@o;SyACVAhe1I?X8nre03&+7>^Z)<= literal 0 HcmV?d00001 diff --git a/sound/songs/midi/mus_casino_plus_6.mid b/sound/songs/midi/mus_casino_plus_6.mid new file mode 100644 index 0000000000000000000000000000000000000000..c957af59dc1fd2172210eb9d4d20f0e4d4e7c943 GIT binary patch literal 8809 zcmeHNQBxb&6+XKl3CSREh!e*NjzcgK2oNA)j8Ikr84w^sv=T(f#vU9zV^VMkiQShb zRf?q6Z<Bzb5$W6yZB_ulWGd+yoq z+;i?(ma?}uiO7lnit^8;?A|Ykx-<0ff%EWn@L=ipq>=B;HJq6HgspsU0$c#JZ0zoCZ`}Rp7WQ)Z{I^ee@fIGR-oAV5=GNXO zk2jwG{%an0KXLpYFk`N{Sv?C8YwCZ{$~s_c{Ck*ga{lYz;^#8|xc=}u{l#?$|99w* zu1)&0>rMKTtBbyL{gS@)#OW(nmcDk~qpv-2hcT#Y^YzQdGm26PEGWEaOWH z%lM>aLb|X_NLt317MAhZEHjc7mKm{GW>gP=O^;h9q>n;#(=yg;GT9Fgs6}!f!*@kk z$VV?0BSf{R?r&Ji7e7~wqA!v=UG|w4o0J&rGUGNvuz;{ir^NMP_YT7se?#KhG0$#E z;dxjacxPq)Q>spZ(Ic?#h>4rrpCZMwaABUPvhWERqf<(C`hDIXTYG$enjBbPEi4e* zbF#Ad2~`vC!!xAyL#Fk|z<%0Kkn7-(qG0FRG3?Zjuv5N+20Qg**eTz^BkaUGIF_Aw z2gkB=^%!7N@# zJ+;d@GJGo*H7%!W0~OJq_7*Qwm!u>g1nycC{UO~8+MTx?m8n?MBtA;rN2utm#WIkk z?HCXSdgg%8eMzDsbumt=Z z)|jIa$mio5$8Uq+9-&Wa)OHNJg3}KxXp;um!M7ABz4F_;mr{*uo zeK>?(*H|yu?5PgXByGl_NR>7t(`HY0616(>cEmbBp_^J+#JhR=f!xl zFsdwIKTkg3z1WZSUTFUcd2zr|WghS5=?DG#-?-kflr`_A&nJ)-j{JiwGh`?#8 zw4DwS3zUw2O6M{71e!WvKYqxEC_X!nGEv}W_8?PvH= z{)iv#`~W{%v-#2Xv;1ffc51i$s4}x@Pl~z^#47PK8Ap=}UVAE_o6C3V1dlaF;Fqd2POQL15z+|JseiB+4!2vkeCY?q)k=Mh|>h zq_jBm5N!lzy9euw)YE56J$)-3n8%zOgdW~+6nb!4;n|jVRkFKEHMP#ETuUKK%6^JM z_aWiHH-!~4?ux!k)#Q2zoik4lrEVpQTFzleLmy z!o{W87*45`a5I%Lf9i?QqPivFAixvz-6jaMK~6a5PcN>zm1T&YiJlcJQfc23~*Zqbg93G9+A zO*KkZX9RA|CvaWE0=FVdLT6=Zsk2?KJ1B5w>8f8~*WD($4WysQ%7o|6xhOPvDOWa&ZnyJq*}?YEHRe*f78d< zgah*2kcTLny@oknV7sW85h$#3t+NQEpX;|m$|W%C)H!+r(X z3hG+;zq1$&NzbLGCN$s2zJ~!yW?Y>$cW{{%+{cx^&v~Z)N)?MoDvgyow$OC(Z_5D^c3l#hsAeL)5Q>b@vb+J=k z52d-c*wo%?0%l#w2RJb)tXP%UEn)H*jIHK_xRNP_RqA4OY^L|(>d5sKzUs9@b^vvo z3qs{B`Fg@`DZgLJpEk`sgKezl1CZ&2Y}0hodOX!l{f|)H z)c+??y`eu6W^g127e!67nu2@g;D%T8O!cTSq@TxoJ%dX?%Xeyn?p&%ZTqW~0;Ddx( z%iKd=zHtxqX)R{RRm<+QAt!%LPREI3Zh?Sp2Clh?Q>nJHbK6EEM{xyx*`3pvci!kX zm$kb9mHRO_u+fCMu3B#QeNdvMm^0UEEeGfgYYwj^>BMswuV9|5mf6|i^`w5CnA2_P zXVHuI0=x3W~Wa#~CMzPsVC%E1Xi=QWnGH#2T&qK`3=OO0g+0+l@`Ts1$ zh-?bsg)32t`JDlgC8$=IsD4RaPMn1(HCN)RWQ?yizNwqvsK>2rF5U(_zFlJ-U_~hKwV(*xWQ^-0 zqTTH%k3&ubI3%A1Tr7})9{t|#sElKL2>Tkh#yY7!grlBA=&*iS$TBZ6R6^K-41}$; z*?-Kp_ZJXW`+1JMv_ST>{hK?><@u3AOiYd^J1}=Zte1|8zi;3cKC7>D68YIz{6`P` Iw+=!2FLZZZGynhq literal 0 HcmV?d00001 diff --git a/sound/songs/midi/mus_casino_plus_7.mid b/sound/songs/midi/mus_casino_plus_7.mid new file mode 100644 index 0000000000000000000000000000000000000000..628a3ed0506074c1574100b81b68636d75dd2abd GIT binary patch literal 4227 zcmZ9P>uwv@6@|~ta7apNZKbYV1E~uF%?}BX)R9H0Br`M*i4jA`lwc)l5g;hg7B<=- zj%~znf&8P$Jb-4#58~Sc^!6-$4fk8;%qVVu5W_i_efC*DLb*J?Lc5pMCTE(WB1J&Q9mS z^KYL%e9-yx_nj~P^z`ZXo!d!r*!kPT@1A}A56rvM zX#GDs=H)|UUOouT%ceCiTVI)%>m75klbVZuYF;t-in&+Jy=r}FUNQHYvDb{fX6!ZV zU$0y9hOsw{yv!hO`X9|(#@;gama(_3-W%oOij4J+r^0YNfuljrj5lR{|~IW7|(*m#B3}Mm>)CNotXKVJmA?cA^(sUt)*-M;ShxH5NxEz-DxDz`Bh6vX_|{KR9#d_f2^3&&|c` zeseKnecwdb))`mwUHg-An3!^$2CJb7R%6pB$4O8Qdm;Zd)+~oz%}3Sy#`&%>`C+$J z4mX3+_C9j^tZAR)N50!*ycb|2WZbYPE{EIf??(Uo-mBklU@yd8+pV+7FIL=NHs3Xa zuYzK3qvhPh#qq4MJT@VR1o>_n7AF?R7wV znAyg1#`A90Sl%@;P6YX3&lLAEE`Y-}`EYs9nBs0XX5Q3J6-TT;GL2%IMa!x4$8c%v zWtBghK{2&DC&0cg5^5b_IX{YVrZLS&OMd?V&hmhTtc#h~z6hL5zLR2i7Gp0cQ?MF!gJL`nS1IR@@K3?k*bz9T;095d z3*7z2w%U`1taIbc*SIx`Bm6t!{yPNkz~L5y7xSs^8I=8BMh@Q-@H*ih$KVC-t3G!) z1q0pxl=a8VE3OCFNm5gs&6>+I`3vbrkPv@3w}F4WCqZ!vPJS$8f9TgG;zLl~OXsZ> z$MEJDe2#m;d4lb&ZnNw=BCel9{ygdG+y-+7|K*n>YcWq__!i-h!M7maO2n7AI7tKc z5o_^Ic6yGa+=F-UgJX(0v4wZ|?ztJ@OTDh*T^4)ZS@9}@Z;C4k)vM!rwYZxEU@2aD zP7vRUcTq8g4^!}jzb?kRJ-7(wj$hj~=RD7~Zk#bkUXaxC&&3iS{T+z?B&~TTo~*;4 zc41Sk3%p+``2crpat(g1Iqq6wXtOomO)>7q;+c}47zM#vdg~yLK80Y++_>13G+)`{>W#8dj$H)~Z-J=+B?|#?ai}(dg@r1beabhao_KC;P zYOW<8mP2^Q`S}(;ADA}hznlGz*SZcXu&D3T^!L?z$IW_u?0h*&TjCY`clm>T z?!f<Ti{aCWhmwiyqw8DsB5?A<6w?3-|guM@I&)#d*LJ5{YB zAC(_9f0Z*4?~Od^t>uT{mryqk@vomRCs1<`9Uf?mDfM3@s!VSSNWm)J8oBXQn6J&M_>|^1NZ^P`R+_Mn&4?x z1BXi;H|*ozWxVWlu*GlgD||g3@F0y>)M9K?FQiq8Fmd(Cs5YzF6_VD~ohyltARJKopw(=^O)qeCP7o!T&`30Qqf9^dA-Z(&7Ks;OO#YrpQPIwqZHpu^D;9i|a*b*H#z*IjIF`cpJm^-%NDoe160 zUg=(p)=G!vzftZHo0jy~`$WFaoc=0a{=Bh^H!*XlfJ6cg1+bZda#O{%&(pgxbW zFP)vI!k|fvsnwRcm(sA1kJfH5->&>YUs*@fLmku8*XW%rMBn3*MpQKq`wmCeNQbp9 za(Iu>>m#^@Mv8aR;c5?dt;V%hd*VynJRULpRjpM25`mTGsTKUjbK#4AF@D0+>u_A0 z&ZOyHCr+i4RxxS1_$S=&3>`c}U;DCQ1Lu?a1>Ipx4B-Jf?)w;YyzGM?H5;6?*6aJ+ ze1LAMW+?V(F!la8z2b5;>9xoi! zJFX7d^ylc1%OUu${;$$u>ck;;NZ^^*GuJ28eDPzPrC9p@$)BI%uXI>`y*CaIbx-w^ zj-QGl__Ry<*J36eg5S#9|64~KoSiC9Yo7Z2R6n(+{*`)xAH>7eI`+iH-AjCw=RUuc zcgkgtTm8YHd|xX*gKu~4t4>k}(Seaw>;h_Gu>8!`JVSj`E~tjLi#hA9|OpQvc<70(OJVTMnmz;_v#DNFPk);3oCY?eqEqmcG~T-gLaRhF%Qp zY$7ZI;t%K5o1tI+yU5*zJ^+7R5Aczzd-@1-W7K5DXHdVR)4ulw0D1Yl1!k{ds5revZj`^$na^`6b_Fzy9c}dQHAX$TjS7 iKl&Y;v|OJ=o@rcImV=Ll!Oi+UvdIVIAI!VonEwKeKF1jV literal 0 HcmV?d00001 diff --git a/sound/songs/midi/mus_casino_plus_8.mid b/sound/songs/midi/mus_casino_plus_8.mid new file mode 100644 index 0000000000000000000000000000000000000000..3fbad995e52b646c4d7aac55b329e6f3cf335a74 GIT binary patch literal 25793 zcmeI4OP3VKmB%9onU*~Aq56!EVL(vXHi(C4b@337rXSVayafXoB#;s6l6e>z5E>a{ zuym##UU}EmUd?jWvk~&jyRp6Ux5!Md{3)2N5(u}_3DMsKfZb^-nGm8&yYNef@gcopHIlM ze+r)MHGk1(t9bUh8@oF`b@w;suOrg;HJ%UV&yRodi<{c`H|9FGYT&37Fum(H0MeX<*qX8v3~`s({t^AE=UiNAm6?;rX5h<{&yzq+Zh z)i7qnw9XmnTghpRe5B8^kqI;Z(|RTE_fz`uTj#k#AAV<7=ySdvF}Bn1JpIlG^e%pA zT0F}xj+yxjLB9+1sga^^BFhx$a?6X z^LYjSy7^R@ojKxVHlqD4zY*)KbkA`Uo(sI|9LUV^{s{S{r)P}pOFB7e+Naz;>|~s* zX_z&?SC5il&gLolvOjHP{)n|Vk-r;T3EFl&VvRl8;zt8ldbVY=M+P4a-0am}%0Aq` z)Of>q`0AQFX3Su~TaoV)W8&`i5j%f0C$|~2e$-{R{ zvc78O%01^a*{_d9jj}tdZ*4Hi_vpW&KJsYbV8~|--BK{`P{3adjj+wiz9TQ?DHvM` z#zu?{WnfzGBXfIZ!+y{_(IwY_hSkH4Ou}*K(ZyclOm=bSIl23t8+=L8a3%hX!<+#=xbJ!4S#9T z5sjKZfcB$tic%e|Gk@4wANk!*Q*OQk`ZLaJ;9OictplLw0njowaE2soACS=GZ8~@U z{OA68B;)^cTYWaC3ypv#(#z>ZLjOr={+?ZPJXeaedG6;gFG0V=dSl_G7w-Yzo}Ti^ zn2_&~XK7cBOm|#UIi){hA0`}PgFYh53}l&~0?9Eg<$;dKX$3riKtooPIO` zERM^XjA2|Z58RK z^V)Wu&y9<87;(r1mVHQ+fCzC=#GPr!Hn%*iB_ zg;lr?UD|*^=1hNi(3<^&$olGLHCuC=t@6nn*@J^9AA2!Y_wtuRe^&Kv!*n&hi++4Q zA@ZAa&juT~9m(wV+(b1GGS3sB#mAS0Cc7R2sO49Y1@*G@%DB#KyR z?t{R_<0eHZ+W1*52xbtR-{(+g&%c=@0=G9=b(z}$-p_N0o#ZLADM0x>eVK>k6qG+iKVG%bJs7JXX5(x^Hmq2Dk zIaQEg4mQ{-o}H&A<7I6g*`E~g3n~c) zkc$C^07Max==Vf`;b}TqhG0~I---jD1@u+tm{-r{La^)TT;A3JIavdHUh6?y=j=h( z`g%(MU1uG4RK@||d7vB0HcZE&|A1W#*r^T%pcWMY&(kb`oyez#zQy32VB8w8E_OIq z=J}v{Pyv=Lg?sR04XnjE(K{m;rkJ?NbZ`y;R|7j{K|R}bN&963;O8V*cjJ=xWj%I? zfvu&oP7Hh#z;*^&*1N9<}`GWLwge2eFPfNoS$aSVR*xi&+W(^0nxp)DKg16kC&Rvm!ezF z?njLs^gsPsXzQ&GLO;8<-}?kLvH9W)G~L;7=b|FdbfwT_&n;rx!Aeh1%r%pvEdNZavXad~mNHgaIkWvrL6*ijjqt=gT- zI(cQgmvy+FT6&2+`V#Cxwgq`x9qg7ZnaVEtpGgaI7v~k3_n6!2AA5{m=-#USF(0~N z^-uO6eQO_a`X{{X!6E&3^yfG_xP#mUXKs$*fqjtu5gn8OXo$RCoX*U|**5f%04Ci^ z43F+fY8{6b`Ap3_9AkdYZvx(FzGkFLA8Xn9vAB7dv18Rd0McOP&7G!o3_3mt z8W9>hyMmx5{*n)XBoE~L0=uU{n+7V@XRx|x+pK=u=aG!>(#2rBw5cxIzE&55_JF?X zqV!iEZ;^Ra7u|Emug_D3e8U_1?RX>KV0H2MeIsjja;6XY-|`6?)Jcv9StnOdcsYmb zIh%em9cTBZi?WUy1-S|~W?Q;t56@@P!raAqH7Bz8+*TLaXS>>BfD=r7|K(f+z1CEv7D*7$f&Cgb=JtaahHjU?V0($ZP@` z3rT(8*sp=Pp@cL^LIz`Qw^LyHrYKhXnA;S|a0op~;-2)3u>~J!M z)=S2CmwK~Et1>gx*ahq!Wnk_)AQ84UV{3C4t&^tDkBhhh!bD)gEkkS@=G!tP=G($2 zxgN~5gG#o_N}j#}oX!>@vH*#u2$>-irC*@VazwsB05f&2K{i=vl<)YO$glYFwW@iv>t8WW&7SxX9l zkW|BAaWi=4Lwd)n=8jZmHng=e1Fkg58JpS)!*xwoy4;wi0DRhClXuQMgz{2|bU8US z*T87D{cxU}Q>gmk5A*z-GjBu4WQ0(4CdY)&{~Vr=#1sXr4o}HvxIxB30{4^IOCaOC>TFazF6cUn4x<_h$A^=<%N_m z?aGVFn>LmAerZQHhM^;AV{FX)D8?9idVP9(w$_A4hn@804q`25X|%()re$u^U#?=; znlMcg%f*=T0?%B6SzZ=mXXMum|2l`m$6jgFn#uq<>0Jx-@(@Gt61x$E0xH85+7n4@ zRb3iX?1OZBd2p?%TtxQ8snzAR^3y)9XguJ-4$U`wo>?br_NXP0fM z={h>L1i9n32DU@j5!e>=(R-Udlq{2OCY3RzspiM4qsvAv)_AyV-dVj#F*MH51&h%9 za!Q=242lzgW2B5-#BG%Ww;Kihct1eEL0ON&uXjp@6D56B;W_y9vxhH#4yfAa5#u@_ zlDDJSt{s|{q)wd<^T`FE0t&HFlfK?q>%rNwPRF=))RyC0h1%iW1Ca%@#rY6NRt=WS z&H9vg*$kDT<=2JJ5`o@&3GKoT)qC#^MI zx}2a2;#KuFcVMhjQ2+{xr`!ZVpR%IhEaxM}%1A|loDq#!LR9=$VmC!87H`=-VJ-yFDyU?c)Jdl)f1D<3FrIUSy%wJ<%I>3s9kwsK}CH4si68` zOz=($3k36|xIl|Wm%_Vc3JbzydrfUJ)lnLKiA`Rnl1ej5Hp3Cx+ZAUx{AH;`@0xLQ z(Y&0KXTgq_tiYg>UDJSKC|e&C8Q5o~6&4v(RR_te3dW&>6);b9P?GzVBCaikfd$NC zpPy@yK{Y$TS?d=Xc;6t*fGzL|G(cNiOFA?;M4m9^*aS}I+|3%S(FF267YwFjnyy(DWg9mNlffO7_;eq?T!oq`(vVT5OrSKrie#=WiFKO{X zteYYU5L<9S1yZLNLDS2U@$D`?xXW8qRca5UQsnGMM`2CI zOH_lP*%IuB+fFZ27w2)paKmFX8F^otQ(Nm#!aq43tPh8+E31PXS#KXI_w#hkjK z;+{IUddW)y>8Cl0+#N^voQo@$Io|d4&%`Zc%!+A-?s^Z}dMVr^M3A+uAv}u%p7o7o zctuBY-fO~Vk$!=1n;3L!r9W%poebpgZ7D{Oi@BvP48VqfwkDFIOKQ?u}F$IU*uN~JVqCB|3!Y~ z;F~T&81Xnq0jvFPRDf+-^sva6UJ97Up7e_mo<8N3+f;97d+FPfK7rWQ!s|us2L-0x zui$j0`-1cSB8m|f%q{0UOxcC=>-p~&BYb1U2=b)_^~dnf#R$uP1)*PzkO$5EVg%lg>wgTveu4Gn{1`&N7y%Gi^n(cfVg#T4 zeCA>V!IM@_Z0MBC~!m0uP*jMgb_Z1kQXz_M-lWQp6}$z#}4`* zM6j=&Z|<}_;+41^JLajT`i%(yB7r2&y#tc z%=7xslbJ_vz5U5YUDw^ue}lpFt+&7UwCn!yxq2+W*1B-R?Tie!#Pr znA{O2_fl>%*#2qP#W6ecwa+*A4}R6{zX##hCIcZRji)a?)9tPDdzIf0F=;r%gjZ$4 zyRSj`1RuJ9^iFm=-B(9m?`E$KJE1yzXQR9M1|$0YPrBU;H2gh;&m*=Yr<4dCy6JCT z>GmFj_+$J&@nW}k9=4l^R=3Z0(CfMzZ=fD;OomGP_y_v;?D)&w%{Lh&?WZTMGYDo$ zdmqeN?)xTv-?Y9r?6<0(j7J7NW$=3!Ow=y&b^WHb9c*9dR^_|icR<@A&um=QX6Kmd zEJWnR^yKAk?^S-k%5PJV9o2;%y-2zvtlSWN@R^T-%y-WCP}fv(KD(YenZnV@mG40x z;s(W6Khvi^NSaY$gok$$FfNxoBMM&>;)8DsWH#6T9 zv(5y~tT!?1&B>ZL-@7$9Q?X)b**cS#$H2zHz`9-g=+n0!_`XkWm?o(<$Lsw^U+ivO z#@#Hjx37<^cDt9E!{rI4bS?c(_QtdL9)4KcXlk@MmY(knzCQ9?`eU@f1Yun6kethb z=BSh6!y0wom<&=d5D%sUMC)$7K{V=*bhKe&*2bI|K_>J|lie|Il;be7wN5s}^bw+z z4v4><%OiqIXJB!`H0N)z>!_8RTn#oCPQg^9?1H$Z|3{cD8O*BMQ}zNbJh;v6#iK?pM4?(59tb=Ncd-RKdz z=50LoFi|GqZ5>2J^WZ%bv-cv}O`V*#PjN}YY-l%1wvuh*&;L^=v1j@@u?c9PbA?8d zlz&&y-G;!1AQhO8Y8f+&8r2Q56q?Cqi9iIKap}karsv)ZT2gu&EC4@JPn+DAM10(jMwahgc==9t}-8KVr95>2Vw)G!Psz_;X zMI;JmS^p?Ek1(M1tPpN_aQ34g8Z5VU$Y6V=AhbAmMOh~O9TTs07|VyIpYah{xLAYA zv8gHq;vrfw!1rQ5o$x+V(LTmOqjhrfvS9YZn%59j0w^1q0KQ9sN zBi3~|zU||fl9>!n1pOD4mj5Tws*XXZ@$_y(49Y#bEWgw0CfZK${x*r^#AVt3$}6^P z_Z6&8#_2@|rqW5@DNFlJi&`ZxXdjJaFIzA`3ckQi5e=r|7wUznGNt~Wd+V?&LrRa_ zK6*K6l`dIM5o?kIR_9yVS3=Up#gC2ECzZCNhS)g645EbuJ0F`lc+spBSv1lT_$0Ep z^VZ<_DX9)wyyJSr={p#_Y8cENx(yte&|dTA~-k(yXD2NU8L7o%$?=8RsUOgfr!eusX%o1qq3SYBt0O ze1Jn4I1?JC$?caUMAUVS<02j;AWc2KCN$_D#1A=Erg2!x|Nz~NwFiG%XV>xS0s&D5^ zFe`{Vs41zsW$C?`ceKG7qWo5=yf1XCLDEo{p0*8_$xGedMvj-Ns%~^`-aNtE!R-gu z-KReHhu6RN6#HN1>799C!L!f*$nfm%0N0nK4*=f#c*vn2>Eu3| zm%!finLhLD_3cZN;(a-_8%&>lq1$8AMn#zD6^ymM{f4xUbXf>^JNn7{je0J535Q+u z_tVTT-=uHf{z>w!3MiES%xQKG-oLy!^JTDYZkb2M7(SC^(7yQTxa3nl+dJc@tJA@!O)_pI1cHbmy@<&l8K_J_R=`$E2*^QH+}a3OKQ57RhpWJ!gbNW z>92on6EGTUXa~}Rk(oY>bo$d@qqT3=+j!e=x~4i^c^_7HLwk=lWO{jZXPWB$R6FTQ z`(Et~G=%}U2RhEaKs|@1p2|r&r)2E`@WE0ksHLhYOC@L+6FiAp7zU&BdrUvQFQ#gf z$Zc>b)`sUW(Vm-Xe|9~Y7~g`a)=te$62_|HnGWXe-$Em#&1M+uATN{iw=nshzKVR< zs8oLOzS3^`CaqhP6n5mKCMe6#+U4X_0rVT!$r5+^?x(h7&8`mqxgt4#C$+1}^akRh zTsc>>LYj*mBqdZHCVE94t0>U0rVB5<9m?tNa~QC_8+-r4?W0fDU2y`u+8?uUy*RPp zdVr3m1;g$|qRK_vyH{l4L(iGbCSNU6*}ulZmwriolh`$1Eu#7rD|1`X_vWj0)sIQ+ z2Qc6?hO(GZc1hO9_cB}raTA<2tZT;{BarXeoLSw^jjiOXiwd#g=OfB2|3F0D*#q|E zsZ;3Gk9ycn1J^-|cbvT1?c3sfK&p78j!sg?e{;f8#~z-W>_N&5Z0)ZyDTI(|l+Zks z(44~YT>qk15^{$v9duM3X47xHEY#}iRL1k=#Uv0-dnaC~ASBf-43cL7Qmj3bixPWsYSmMkxi}G^!E~@-c)I^Hdu8Bn95~ z!&&J`33FN>AcX&A{Y;?l&D})Qi%b6JJi8OF4cR-9C-NDK2S0NAf#=0K=A4p+;yI_3 z@}GynbSQ;6WE&O?Em(0Gri+YD3Jk^^qCji4cbUU&0=3o4tLZ$DI1;;Ydn=$dE3kZ?b}87|1!&fv5Hzo&yq~??F#t zn9f-Y!&J-q_Q+VASv0N;=`KFqiJ z6|_4AgnSXkkudgM3dV@gte-mrI?nFf=w=R}#oHWm7o%{PSg7E+>|z)*pv}nw2H20G z0|N~3J00}^xoWaK=|#gJq*dgQDz(WagHLoY9F!Vn;WD4g$leJI zPsC+lLgeT5M19>gNE3o{~{bMO0<5#JA-i}6@u)Sa2iLXuThk}5k056 z`f9iL1iznv;SRwPu9OJskuqy1OcJ-6XqQi;w!MPE-44kS=Qre%?jzh&-Cn%EeqsJnO)%z*{5_u z+CBS&YIW?8+?2kILmiuKNUS+uKoy^Nvlmvn8?>8o2Ib~cW}VIU4ZeaicTYh}-{T-T z6~GY;p40!_`}$6^Gkhz-&B#xcGk__axL!SAd`9<$D>g34`doIeA*Z_UW3H|%foIHx zF`{?YmNCK?^hs&S^V#2Ud>H)_xfuH6fQ0Z4KHj=Ev1BBFOPkEEYtXnRSybe~J3XX% zO~yhhns=)F@4AkkbQ(Orscjg;yYzoo`hU^g;Q8#8^W9C_%NTU*$s5vc|I+i_t?QG2 z^M}FD`235v2lwfWctekF_c|>ISGRs?y;ZZmf41BE5H0%6HJCTWl(2QYr67FHm+2{T>=V73)2e_|PS(vTa zmmhRD(CozVZLCAJf_8Fnn=uY~_MnepO~+tSXRL>_H<=UeaN0A!;6fQ25;uu4KNfrz zwgtP4B+g7PJ!@n9a9u2CL|#>K8~n)g*C(?XD8_9DK zTQVP8VEowJ1t;0X6&Tn;)x{+kvj9p;g2?L>@zjK9C_Rm1$8NTDEu(Gh-XFHvwFe}?98if%zZmu_t&4eX>pS1d| zwEhoFYR;-7cutEPR8435y)8v&w+Abw)h?XKa%IFJdz6F zdsVDFi3YkVswPf*B?+W&0%tINm82eL``i0%5~kW?pDZ6I05u=aT7Q1kzWX_oc+4ck zptF{!i-2h(gS#hYRy5lktG<>4#v#4OfwiSh-PP? z*sMMwsu`1p3&%7|a`K0EaBu=Q*Kk5>sKgo*{k-ulJfHI|A3to+=wqDrRrf8cz$NrK zsf=RFGtm3b*ShU9OooFJlHqE`vL=f|c|PT^j4l*Ky7X(>t@wloLQCE&&Ev0id(ZLv zIp~`+H4SPs&}n5&5vS_UXwSM%RNZ_}ttn!YCK&T4qFrdLEvN}V2x0a=*uQwo6{Tl0 zOupmhg#!ogsb<)YmthofF6YoTcGzI_Ds5^_L7Ut$j1wl*C=0e~clLB5h8so^TgZfE zqWc{YTkwH6$-kP6X8-oL<_wQAiMKi6fiv6vE8Yt;1P?GFjX+!ylY;`1f_Fh~A*?oP zt=)JVt%Q!_3&|$v8N!^}L}BCzZeYqt`pgV}Fh;&lR8LAIM|Fepjq>r`piItO`p&tY z-fs(P5Ue9~>Fdtc9zq2F^Thu&jc`~agOCqTU;3S$9rox5fvi!gMFqx4s81SJYZMye z!XzTQ<{6}6m1cL*rVWH?p-y1lw}CXH09kC?eKEWl$$V;9V_A$CUB6~8r&*2Z5yKw1 zqspj@rV^c#G6kM)&eIbMI{+3z*fyY25D3ibfk~icU7CJth?EAc*!C_Uk}96y#I$T( z2AO1D{8zsFF90H`XL}0);YC`wgt0`3w9*5S#@`Ymp^@Up%NEcktt5Zc8efwb zhBdy%-zV_zvY#wF1(GxP=myIFsDcq{p2NmZ2}0oV|@e#2%zI z%CPbr?`18~psGFu)+pPGfDq+ZKwC{4!@z1>y0Du^TI%k4kX4Jogs}Vg!yqlmfgHOB zNQ(?&Mp*-!FbXCUF3BmG6k0?kO#{}e1WcLGVgzPfla+yOBV}o+7DYO8b9*sDgAQ6I zbV}wct_ZncgH{Q|G=w$~bSDAN88cdh&Q$9fB-cpx%pD>&#yX!=T8849Z?5E6X(&yO zBF$N+x|Cu`|N0P{3RTcq5*lZU4?tir7S|(?+nD0FHE?6X1cRw5s3t{Q6C|d$JbdSR z_abdc5$HEx!RMOpt1QT%7|FSSlyh<++ScJxdQ@Yk{4NL3R=z*b;cNTj1MB zBe7?mG^iLvv#b+elHIM8dD4td4cSJLS=#fgQj>L(4AX|74%uJ10|;jRhybT~K*k#~ zOMO|TF(#tg)54{}cJln|*A)_p+U=jHvPI)%nIXMOQZh-34-bGn<7IFrrON^YvSqQK zlOUSym_xJl&S>{7^sRu$v4*-Pg(H!qN%xFeTq3C*PvZ>vy{1mJgl-#zXLXn06P9gqI&rei!!qbVDeRGl5+ByqFYT>=tDOMn5P ztj_&pb*X`ZW+F5mx@`nq=BR`~S>GIK1G>h@`rOk<7POLlmUKyzPO%-ak}er9Ns&Y} zWvN)k(xgfxpzri;WyzHWz3MRiDK~%dg;Pt9j3t12dPGwtDvFOEj%kqbqM*882UPT= zKj$%)sQ4AusCfnQle5Q%-OW|oVra!IIglx*UvR{$)(F8rK5!8d3> z`%AuYn$icJW19ZJ&&m+Yln0_^mhZ7`m(zTM_QGHNhQL3z@NQk2tW7PIs&kz^27TH_ zdF_(w@s&P&&fhV*^ZXpJMpz9zz41Y2nnZW<70IrrtEh5oYP%f9*g?mG-Br8R(?c_SDb-W#&-IOG|}JmvpWm??)4G%gxb*5p7! zKA3>_&AU7@7B&ym9~c@*7mprPG-5ttAe#$$lL54__w-~{{YG;0?Dz4k+vfi%1fk%= zDtx%`n)Jc9wL*Zp5oICod?Mw?u}zKwX?WOnP|=R&5Bv4EI#(i+(#TKL_KT9L!OeBAMV3>lKADDB+TT;>%%p5q)LO>>x9eVK@=5fj zgkEEC$@9iriaV)tQ>~iEx+FQh;w31VLl5d!-7wPqu8nkeR$`f=X%DO6obQ~m#RIs} z*fg=gLY)J)#Hf5oHx3vHSmMCia74t~S7n)FZf-1XNc7SHVizO;WPr@j{>Y9y zG=Kw$CA}}1P@W?qd(Q8C_OaAZm@n1Dw{oAIh0#Ps24P>lRUu!t|8#JMt@D6uf6as( zdxy5IJwS(vS-TXuY=BPNMSE2eO*+9$lSz0Rl@NzLlSFjvyi1!u*;bk|PA=JeV<#{? z-$xFD5h>+sH}gi5rI5Kx>M=_M>CBgC>PZvVjw0c~zB@3V6Fy44rsPmIcfsbNUXw;! zT|CvbnFb5$I4Lt!C=%Vl*c6b^Y@pj!gcI4btTmw}bqV zShvYJJJcmb#$UJ!YgXAVcBe;%5ruW67Od9r_-?&QqU4qwq zj+8+oT5E?3!6Mqb4z5ooHX3>mFmcLukuBPJpM5zW57D<8U~E$&u%627zq?>YWVsj{ zti=U+z8T_y+)fAv#P*>CTUNg5RzeD9l1^7Y+bm8iyHPm7`05o|TUjZ&Jv@T=+fu2c zGNjgBX+Q~W^?j-Rq?-=98kdC3V|W3fZAvSDoY z3gPHNrIVCtD$w0GK4qh}$$98NCFhYM?dh;KF3~cUYpR7M5}y!JUjRgga!q5Ef|Y9; zX->liOL(3iOuDA9poCM8>7Z&dXy51y!Nwx5t!PRAOVRJ5I;M}MOp~ccvI9ifv{z9! zA-b}gCSg#5ju>bPy^@8ijO9Db=xG315HNIh1c^mOY3+Rp1}USr5!sz48A>S z8QoKDk`EPwvgcus_@E?StIOg9R4vT-cLuugR%apFGE7VJdG4-D4$d+WL#168omrHH zuzdpDE4e!@^^`IXAs2_XFnG&6e5?H3v1R$YMU~ep7lK+OXB~ajT;=uHNmtD{MA4g6 zu4%X+e^-@eQXQ%zN1IaEAdO%+_6ok{X?Cmy3gU#hWs?RvSFVY$nsauMrwc2u$Jq=s zBCfM8f?bx;Nq7nN(OwQYgH*=gKk1oXOGQ*@Xc zu99MGdSql#E>AB;!_8QzNmmyFQ$4SDn8HmG05k~1OVY$+E&N1u3*aA3%GE}A4$Sq{ zj~W3a{0;9);j65Em=j9z%GSm|TdK7;CAG%0F*0e^xn0{`U3pE{bbtelSb+8LA_8Xr8 zg;K<+XIsIMYF_ynrXsl47xK&M(XDr){B^p4m&R*bY4UA&V{ME#`T6oo{Sx47-ZBQ4 zVL(k3(1I3n_G{*Rhh;tOQjYC_g`;ju!#~}ns4r{h<&_-2&v(qT>uWFYSL?K>s6;RB zuQRAjFkb90WpS)szDTVKi$ThL-N4*(nLpD-;k+G}t^Iwj(-h0%m@s9`vUFsI!%4h(WPP%U{Ic+bq!}wtcBVdO_H&7jf!}}n4a6Cot|A)jmXbe2kCjL z5*g|>F%GOgW@3FiH_*@`|F%|xk=9nmdsVd|e+O%KI(Sm^K=v*z6!=!|52MjY-p@XP zUu+}iq*9aRRZWF%(p2YPDSnW=oStUR3S<_YJzGf-EIP1UEH-2 z=bC~-wso2Yxw?e)S>u}6aL#kuJ5xxXqw+#@=FW;Vxo&Z?DDz{k&{5e*Xp+^)U1hBh zQsfX$=Ih!TosXp!4oFPLOUL(6Q0Zvms!p$j+$af=K16rYE!H!8E>o<&=gqGaNN>MH^qW7 zX_%Emc1?d(%BDZ*0uVDoj|a?`gxswR8`ADYe@+_#l8WHyn(|Uo1{8?WFtOsiB8-Jo z_Gz85)z(Z3bK9{LnB^t%zfX{a*>ubw3z?_1jUxN93~;VM6B;vDlqq>9cj0bo*&UGy zQnQonPdQPV0OY(IdgSl`E~l`Y%A2k&|I$EQ<%*VQ5j?}y&jS(MoCA>n;`+j51}LUk zIeQ%doQ5UE3>h$iK{AlaU~LhgbGMkmSKKFK{DcytD~dr8oJ^Q_X)mIGGGSR800ooJ zgQ`%RDHHF~iUIdi3mQZhP`;Ojr^=Q8t#w{sZ##6S!L;vJE=e9pI^N`0(ls*sNLO~|k7ID9Byh>Xj z!rxK{sobV*%Die&3&on8pA%U}YS1qgq?O zRDg?oEZ28d!h9F*rYNEj9ymBj@=${a>owMWx-G8>Uf)g8zQ{72&-T8jfS#04doJN)iDEk02FS2~o29C~+H7~!2j z_q5ru&B4;?;+jlbssxhBmP!tnasotARzg+cMG}+_3L%M(4MAAD7kO{Su3pP%>Mi53 zzQ4kIo2#I*HAO_tJq~H7$&H?S{!t-%YBJg3fBL1`OX5&;@3N`UWu%IRr-vJ4NlS2I^qJ|}Q0$;@d7maUdDJb=$JkW?I#GVh~zy;kblM=8E2MNk?ggx(U3a9)akT)l^W2fK#(M@|?R^)}LE@ z)MJumAM~r5Oxe*XqL$lzVgT<}HJOZ0??Pj~CX>y9cV34{$Ds0O9DI*4vpnN{s^28M z>a9=|DmBqR-5g($-5a%?a{o=?3H;A(vUBm9P|h!1S}A`_*9k0#s>)QspXPqtK<>_| z4qRb1#NIb!UFX?@?x@csXZ0Q2pPRd4sy6gqU6m=`r?c!V5enwP99czF_v*B*2+t=o zN|zkufgCc|hLh&T*)N@5sMI0&%(`&Ngq%4CWaB1Uz|qNlb```zrc)8!48y51&V zH&tPY*T45wnYQ|_@~Pr@2?F>mSNf9Ttms(k#n^Xty)QB5stdlaDpS1f7cE4ei_+w! zX?;Ua4kpZ%KFQaGw$GtiJ<^0=lG4gHlKW%U3UIA3HzRkb%w6Q~CzEy!m!n&T;!`YF zze2}5sLG@(3Q>pVI$;8J;#VZDtR#tKRW*Qex7Q54Rsdj<@k&)DyJlF|1Q^REXJacX zx|pr+{KspD+Fn$EetrcJ|MKy}@d}~_o9tTzJ<2V?{t8T{HTBiRB#|{ihmziEsxqa( zklL-tt*TOr%1@YxggsCkRH@15AA$@*mtgA%RzOS3BNdXMSp!cNfaH6&*f-SQv%94V zgs)50nuMbqVaUCvf0%A{B7#r?QmF>byofF#Rc-utxI z{R6+Z5?Dz(rYn(;(N#{8%6E{9ETapmSyX^Yl%eNNe^w|#HqH!lJq6)p1y+TUAZQA! zrJmKVFJhiqs}t1qCgBCA4kZwl;vr^88mM!* z#NHwsJqQSTbA_5%-Vt}SzRddd$Q&BmZj;9VuRuVuS=XPsM5?_Qu_D)wTwJ3Px{}SR zkWv=1D8d2N36fXKigPdPR<>7TZ9eCCh2WN=zBL0jXg0TvaBWS5tZE zph`_!H$nxbKKK^Kw@#)PXp(|V z!@GfBf-02pXul-_S@faFB#!kaOHbX)aSwdr+yTMFq0(4>i?%h1qfrBGmX+>aR*-4b zQ*dcnnQpBdq}pocB-S@;1$W#|k~NOW zZQN6U2}LGz3#UB8GHSCXvY_?&ZaW$hw#@rk63yIuK4EwF^{eY!LgEVbGDB04Nn`1r z)vLxGU(=Y|WJ5+x;iXddr_PAj$)BEd2TD9wj42nOmf}ka*P4ABeC=s<3#;heDtiK? zNHktZkTkzP)KkiEv?<7>^fVTD`Xs?k0S(Z#eTPIBPodb_Xs-3qTvULmE!d>=({Zge zByEhPDAW6~IFrryV-{JWO$J(IlXrESK00SB%4GAE_-Gnu^F?DQ$W*FiQGBVVIFs=} zw97TBn)_*Zs#mj!zXBqx7?bdreHRKnJ;r!xFV6`{Gy18TFY^^I&@gxahM7Oi2-O{esSd` zc*p9!so3O7sRyM5Tzigu``|xog=0j6mP|b0@5~8k6nPrD{v*{91hjMGnB& x(Xr)sx6*ECy1O;32QybqCf-2ly}K1IpUmCs{pS87Qi17}|MrnqP5NfF`+qCJ$shm# literal 0 HcmV?d00001 diff --git a/sound/songs/midi/mus_hgss_casino.mid b/sound/songs/midi/mus_hgss_casino.mid new file mode 100644 index 0000000000000000000000000000000000000000..ee506b1e412cbe3ba1387b35ebb9c2f8abdec8d0 GIT binary patch literal 18016 zcmeHPTXPi08SPnJ7PL5tD{-ovs>Haga;=Jz5yDtNHrC2QVx#pUbU{L3R|p0ha3HZM zDt@w2kW1oC8`dT5zu+PY@sx}bpVxOm{QGt>Ru&v&|e zb}N$?&KYCc@h37pmB~*(HfDIl{JZV*FLt*4$2{I08S}X12a})v`h$-T@9z1mulLQ~ zg9kdypCaDFUoBa=x4YN;SuSP#0v8 zd-rhf9`4=4y%k(v!SxkfU%~YiTwlq4XjX9VA?AFDdk=B%A?`iIy@!zTaFcs?vu~NZ z7C9eA(Q`v-dInKE~h2`1=@tKYP;L$M^@(_W|xbz`X~! z_W<`EWV_7++*`%he`D&Mm)dUb#q)co_^-hj{Qp8uu615A_3o2dnWr1q`MK+Ye(owpw|ZVR^+T62 z$3^p1UmoHws1hT(RNoC;-HOML)D%;fXforBZ1jC1{ z;R7&y2*wR1=c(r}CzMRjg}|xY@*u~sW zhH`EuudgKAkUW+l3AP1 zR;f?xQ`Tp_oA3z?093P1Z*~XxzmA7QZ8esawy7M*fy_{j_(iA#Y%6ns{^1N8+6~r5$I&+7JVF~GnAZb1apCgxVGRZjZ3{n*cZxBJ$h9S*yJDsY2sUr z=v{%{NRQYD1s#J{lcrHFJ!zBkhsZqw+nB~k`+EMA!p9N#u>`#-J7{}Omar9+h0hHO zF^kkk%AWJ&bJwZIM)IUp0j^T=oPI1ZCsTFPa&&UN4+KgrEIPOwhFxXt__2Q=3vGTD zcF7$0zmp}fD==43y=}ah<5kWzg1Lemk$DhTnTIx7xwlI2quQ0bfgE!4SDl|z@v^qZ zzO=dTWrFcpNXtn+TgJC|EX-M(E61$AgLtSe$Q#-{f|w#EPABhMrQT13DVBmqpyN9& zrbNUO(D68Dd`+x_Dd{?If+q<%iYJlCYbs~^ctSZro~T_GPZ(qR-r45-=W0I9-nW7$ zmdQuJ6|(LKY~I)T)4~(Vuvj8;#Et+@d~R6z&aTb!!q>UrMO^1nkHj+Mx{q54_8n0y z0j4M(+x(2{JIId^S8RT;217a_bxcmE62QbePD4+afNuHG0I24n0Oxc4C06NRcwE6 z?mCtLp$zIPJ}0&u08h|*c0Mq32jGA9efmFGUN25s9f&c4S)xP7blX&)8g&rH;Gi^C({4fBhJ#V43-P4h#b<=O z2yX#@F*mU+a&hta@|?d&Ex4Si=h@rP0|&3Qqkmu<_uY(J8%dpQ%w<}1%yhfoKD9k4 zuC)+s0>ef#;_r`0ex;$$+ zzrC*ODC8?-i!ZuoynM0Sav!$@uXj;DSyKr%F}GMd;dV4W??S#s)g#wjKaIFHf{k2@ zMc7)7mX4e?c&hPRomhq1H<0Y<1lQO7>@+!#_ z;Vyr;6yuAt!POP|hqFbwo?U}DJaY1^965S$GE{z`{{Z|WIEgt^^+6p%AF1u4dty%1 zxbiK;R-U(Wsw|ne!(lIvi@xgXmYn5UBeXM#qnpMUzE^(l<$yD-A7Ap(#`q@WqenHy z*R3JE&wc(h#&>9Y@x{JQ!-)XI4Z|ERiBKNvp9&1?u0B#gU5}{7DP+trtr zEGGkYHxuRNLvCFgp9~DUl=J4hdAMaHGUa3da6fddBY8UDbSdQG69Vp3CR2ea!X3v% zNYL^h*l$Emx5BxC_ z)bp}PXY+4BgL?i$Gy$LvE1qW&cDx|cj3R@Mx9Ngr&UBIU2t4Z=9d&f*;Mew>XAbu% z+?j-~w_|MQ{=~-nhmB~FKGsk75bhhv-iQU&Fq^o>5BCwBD_jq+?cW}Hkb}yeu>*3R z+qnH0trX?7;A$K1DJJ{9mWFL%>Dy?|>3`-lzt1boAtQKV%`t~8P7 z^CUQ%Q2h|EK&H&+_Z67C%GE+$WG@l>jJ3WXN8DN;K9Ie{)LI|hvg!GRlrZ-GY<|RR zeeC^l-OMtU7-PRtAONLJU3ks!9Wq98b_LR*wkyvi4A}D!(V0XCvSf`pf?Pl?5mKCQ z+}VVUTh6WTolk7Ov|(Sejq4W1fI5c0c~VZA#ulG5wmWSHUlRHRIpci!9ADxb`lj$@ zvpjKU6|BGYYTf5blX{o>@U?>QpH*yxFVHP)>w+)M&M5}8=GVm+=ti9s$8pwS&nT#m)76~|3Erh~24nph zgJPjVBGPjH~eS`5H3ULPY=z6}xP>(aH zp(M^g)>GjzmW%r2TIOs0k*texHlkSZGvO^?_8IBxTu<_SEpUZaU{5OOvbnEDb zcMR(JG-YZ7@3#qD z;wXp5L322cnL}F$sZ({PU~Y{bppJM`ekyo9b$G|@Op)IlQTI&lqfI+zCyOoOuH%w2 zJ7$mD&$wUjJVT$!GvT&Q70=r6#LrjwynHEP2XxEa7%fKdkKr5olw8zY+Y^vu!;CyCj@&xrZ^RO?Jt@3)!(s7JGj{6OA z3*p$z4fvWlKtCsRp&cdI!I&0sEUvAsabEZZe#S8#^g+yU4A(>-$ZXJu@#s$Kf@46* z9ox<%Zl|Hgh}Gk5#9LdM`sZ}YKT}p0`UbBB(l;{4c)`ZO>Vc((_Y20@JWyTixP&h- z-sXea5sn}Ad7(Z41i%NG8#oHJb&$*t%yp{_d$cZGel*VO^@49F5zA(J!8bl%PU9K+ z<8)91oWteIl=aC}5FhUs$QZ|X+BI%{=H)tB>VY=l z{UY%e+)%&Rafy5>1^L49pn!gSImj3KfOC&-kT0XKhjqAL>(Jtf`iHVzygZ&Emb8bq z!k&a)n9Ju2bBg1M9}Y9Ao6DD2x451$-s4NzjxVS26tUx2%BNkdY3&cme3^z_!~4*0 zVAtUwUrLyF8e>cGypk_vJ169MybI$rigD^oTk|$why~2+N$3K~JlBhSLC(-GK3|65 z-=2QM9^~jgx@`biAmu$?uA25C;I~ik1`J7pWR~?a?Y%oUJTufp?fkCBEY~}F`r4g8=)9G zfoEUGv#;UVSJV`WF+a^DOo0dwS2F)k@cfVQ=ZEq9=6e~hl1qaU<}dEVbFGkJbbfr9 zW&!kP0Y~|wk4+6V8#>ASMYCM`Ftc2~3SF=pt!*<}z*sB8Ebz@6hF;n(+9YgQ9yya) zu3T=H6o4HIBSp1C8KFU_qnJW~BFrEpWyl%5+TM&xNLkI;vI5NzebM%{#Gxx8f)oN_ zlzSdxF!z`pHM*uzB>+kj=-LhwZ~DkZBwZL>Ihkr@aYlF4fx3* zucE3@1>3fm7e^s~1oFQ%6w1bkG?Hxzxx8>Rl^1-w%u^QYN7_+_9U&$2)CGAFP{BlA zcz+--z8>l%_5?a;jl&*~J>xbm%=3_nIhqnvCiP8N_uenChw}`5+`49lTJ1c*!Q)yp zF^$5t6L{uKt58eO%QbUeYDaPgaG%JT)5Kli7X3{;X+kvxPhxte@+Mpzi(WfsClFgl zS$v!j%V1pKqo|7UzBQ6ch2uRH!`!iNq+NTg_VOVkJ>JW=l!+8OO_?a4yZN%(mt2t_ zB%mJrc36T=POuKe7E%=K3Y>2heM8Dk3Z`$UnxzTY!(5*TC=KSQ=RZ@tqEBdVIDQ1< z@fIq7&_HBOoO5rkW_S{TxiYJ{ixJ;i^|X$Dk~ddj=je&n)g1JqT+p-C+!=XR@KkK& z4<~Sk5w=d8Ye5Z0tGV|gU@|c}5`9Dlmh|10LWv*w0}Fh!6}@VTGA0;@$mSO0yz93B zsw4YMbrf3`JpHiC%H^XMnOAu33T0;4185KQjC?Fdx-l-!2Ro*1{pYP5kx@YIii|96 z@^i;jgMH`aYGuY$$3H>up^rz!56dGMH-0sXekM)+~${cOhS~b#e~lu5CIl z$Zd|@NBfuiu9)S)EA5~{;1c`E0gyYFQE%Pg6cl47()Z&OCqY cdm9`7~(1<)+RDF6Tf literal 0 HcmV?d00001 diff --git a/sound/voice_groups.inc b/sound/voice_groups.inc index 8ee57619b610..6b028bd0da4c 100644 --- a/sound/voice_groups.inc +++ b/sound/voice_groups.inc @@ -190,3 +190,4 @@ .include "sound/voicegroups/voicegroup188.inc" .include "sound/voicegroups/voicegroup189.inc" .include "sound/voicegroups/voicegroup190.inc" +.include "sound/voicegroups/voicegroup191.inc" diff --git a/sound/voicegroups/voicegroup191.inc b/sound/voicegroups/voicegroup191.inc new file mode 100644 index 000000000000..dda8a55a0602 --- /dev/null +++ b/sound/voicegroups/voicegroup191.inc @@ -0,0 +1,131 @@ + .align 2 +voicegroup191:: + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_directsound 60, 0, DirectSoundWaveData_steinway_b_piano, 255, 165, 103, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 128, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_pinball_7_clav, 255, 241, 0, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_glockenspiel, 255, 165, 51, 242 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_pinball_11_vibraphone, 255, 241, 0, 232 + voice_directsound 60, 0, DirectSoundWaveData_pinball_12_marimba, 255, 241, 0, 210 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_xylophone, 255, 235, 0, 204 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_tubular_bell, 255, 165, 90, 216 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_pinball_16_drawbar_organ, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 51, 0, 203, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 165, 128, 204 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_overdrive_guitar, 128, 0, 255, 214 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_high, 128, 0, 255, 206 + voice_directsound 60, 0, DirectSoundWaveData_sd90_special_scream_drive, 255, 0, 255, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fingered_bass, 255, 253, 0, 149 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_fretless_bass, 255, 253, 0, 188 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_slap_bass, 255, 235, 128, 99 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_synth_bass, 255, 252, 0, 115 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_pizzicato_strings, 255, 216, 0, 165 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_timpani, 255, 165, 154, 153 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_pinball_52_clarinet, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_pinball_52_clarinet, 255, 0, 255, 127 + voice_directsound 60, 0, DirectSoundWaveData_pinball_52_clarinet, 255, 0, 255, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup008, KeySplitTable4 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup009, KeySplitTable5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_distortion_guitar_low, 255, 0, 255, 209 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_oboe, 43, 188, 103, 165 + voice_directsound 60, 0, DirectSoundWaveData_unused_sd90_oboe, 43, 165, 103, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_whistle, 255, 0, 255, 127 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 + voice_square_1_alt 60, 0, 0, 0, 0, 1, 4, 0 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 2 + voice_square_1_alt 60, 0, 0, 1, 0, 2, 6, 1 + voice_square_2_alt 60, 0, 3, 0, 1, 4, 1 + voice_square_2_alt 60, 0, 3, 0, 3, 3, 1 + voice_square_2_alt 60, 0, 1, 2, 1, 5, 1 + voice_square_1_alt 60, 0, 0, 1, 2, 1, 5, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_5, 0, 7, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_2_alt 60, 0, 2, 0, 2, 6, 3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 7, 0 + voice_noise_alt 60, 0, 0, 0, 1, 9, 1 + diff --git a/src/block_stacker.c b/src/block_stacker.c new file mode 100644 index 000000000000..4adb87e24c43 --- /dev/null +++ b/src/block_stacker.c @@ -0,0 +1,2379 @@ +#include "game_corner_block_stacker.h" +#include "global.h" +#include "malloc.h" +#include "battle.h" +#include "bg.h" +#include "coins.h" +#include "data.h" +#include "daycare.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "field_message_box.h" +#include "international_string_util.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "naming_screen.h" +#include "new_game.h" +#include "overworld.h" +#include "palette.h" +#include "palette_util.h" +#include "pokemon.h" +#include "pokedex.h" +#include "random.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trade.h" +#include "trainer_pokemon_sprites.h" +#include "tv.h" +#include "window.h" +#include "constants/coins.h" +#include "constants/flags.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/vars.h" +#include "scanline_effect.h" +#include "pokemon_storage_system.h" +#include "string_util.h" +#include "field_specials.h" + +enum { + STACKER_HIGHLIGHT, + STACKER_HIGHLIGHT_END, + STACKER_GO_DELAY, + STACKER_GO, + STACKER_LEVEL_SETUP, + STACKER_INPUT, + STACKER_CHECK_POS, + STACKER_ROW_DELAY, + STACKER_KEEP_GOING, + STACKER_POST_DELAY, + STACKER_WIN, + STACKER_GAME_OVER, + STACKER_START_EXIT, + STACKER_EXIT, +}; + +enum { + HighlightSpriteId_1a, + HighlightSpriteId_2a, + HighlightSpriteId_3a, + HighlightSpriteId_4a, + HighlightSpriteId_5a, + HighlightSpriteId_6a, + HighlightSpriteId_7a, + HighlightSpriteId_1b, + HighlightSpriteId_2b, + HighlightSpriteId_3b, + HighlightSpriteId_4b, + HighlightSpriteId_5b, + HighlightSpriteId_6b, + HighlightSpriteId_7b, +}; + +enum { + SPR_CREDIT_DIG_1, + SPR_CREDIT_DIG_10, + SPR_CREDIT_DIG_100, + SPR_CREDIT_DIG_1000, +}; + +#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 +#define SPR_HIGHLIGHT HighlightSpriteId_1a + +#define MAX_SPRITES_HIGHLIGHT 14 +#define MAX_SPRITES_CREDIT 4 + +struct BlockStacker { + u8 state; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 RhydonSpriteId; + u8 CommandsSpriteId; + u8 ToggleButtons; + u8 CurrentRow; // 1-8 + u8 Row1Block1Position; // 1-7 + u8 Row1Block2Position; + u8 Row1Block3Position; + u8 Row2Block1Position; + u8 Row2Block2Position; + u8 Row2Block3Position; + u8 Row3Block1Position; + u8 Row3Block2Position; + u8 Row4Block1Position; + u8 Row4Block2Position; + u8 Row5BlockPosition; + u8 Row6BlockPosition; + u8 Row7BlockPosition; + u8 Row8BlockPosition; + u8 BlocksLeft; // 0-3 + u8 Row1Block1SpriteId; + u8 Row1Block2SpriteId; + u8 Row1Block3SpriteId; + u8 Row2Block1SpriteId; + u8 Row2Block2SpriteId; + u8 Row2Block3SpriteId; + u8 Row3Block1SpriteId; + u8 Row3Block2SpriteId; + u8 Row4Block1SpriteId; + u8 Row4Block2SpriteId; + u8 Row5Block1SpriteId; + u8 Row6Block1SpriteId; + u8 Row7Block1SpriteId; + u8 Row8Block1SpriteId; + u8 HighlightSpriteIds[MAX_SPRITES_HIGHLIGHT]; + u8 DestroyedHighlights; + u8 HighlightNum; + u8 HighlightRow; + u8 TitleSpriteId; + u16 GoDelay; + u8 StartSpriteId; + u8 ArrowSpriteId; + u8 xSpeed; + u8 xSpeedDelay; + u8 xDirection; + u8 exitToggle; + u8 LastLives; + u8 x1SpriteId; + u8 x2SpriteId; + u8 x3SpriteId; + u8 x1Active; + u8 x2Active; + u8 x3Active; + u8 GameOverSpriteId; + u32 Winnings; + u8 KeepGoingSpriteId; + u8 YesSpriteId; + u8 NoSpriteId; + u8 YesNo; + u8 WinnerSpriteId; + u8 Win; + u8 LivesSpriteId; + u8 Rhydon2SpriteId; + u8 RhydonBlockSpriteId; +}; + +static EWRAM_DATA struct BlockStacker *sBlockStacker = NULL; +static EWRAM_DATA u8 sTextWindowId = 0; + +static void FadeToBlockStackerScreen(u8 taskId); +static void InitBlockStackerScreen(void); +static void BlockStackerVBlankCallback(void); + +// Backgound + +static const u32 BlockStacker_BG_Img[] = INCBIN_U32("graphics/block_stacker/blockbgtiles.4bpp.lz"); +static const u8 BlockStacker_Tilemap[] = INCBIN_U8("graphics/block_stacker/blockbgtiles.bin.lz"); +static const u16 BlockStacker_BG_Pal[] = INCBIN_U16("graphics/block_stacker/bgblock.gbapal"); + +// Rhydon +static const u32 RhydonGFX[] = INCBIN_U32("graphics/block_stacker/rhydon.4bpp.lz"); +static const u32 Rhydon2GFX[] = INCBIN_U32("graphics/block_stacker/rhydon2.4bpp.lz"); +static const u16 RhydonPAL[] = INCBIN_U16("graphics/block_stacker/rhydon.gbapal"); + +static const u32 RhydonBlockGFX[] = INCBIN_U32("graphics/block_stacker/rhydonblock.4bpp.lz"); +static const u16 RhydonBlockPAL[] = INCBIN_U16("graphics/block_stacker/rhydonblock.gbapal"); + +// Highlight +static const u32 HighlightGFX[] = INCBIN_U32("graphics/block_stacker/highlight.4bpp.lz"); +static const u16 HighlightPAL[] = INCBIN_U16("graphics/block_stacker/highlight.gbapal"); + +// Title +static const u32 TitleGFX[] = INCBIN_U32("graphics/block_stacker/title.4bpp.lz"); +static const u16 TitlePAL[] = INCBIN_U16("graphics/block_stacker/title.gbapal"); + +// Start +static const u32 StartGFX[] = INCBIN_U32("graphics/block_stacker/start.4bpp.lz"); + +// Commands +static const u32 CommandsGFX[] = INCBIN_U32("graphics/block_stacker/commands.4bpp.lz"); +static const u16 CommandsPAL[] = INCBIN_U16("graphics/block_stacker/commands.gbapal"); + +// Arrow Icon +static const u32 ArrowGFX[] = INCBIN_U32("graphics/block_stacker/arrow.4bpp.lz"); +static const u16 ArrowPAL[] = INCBIN_U16("graphics/block_stacker/arrow.gbapal"); + +// Blocks +static const u32 BlockGFX[] = INCBIN_U32("graphics/block_stacker/blocks.4bpp.lz"); +static const u16 BlockPAL[] = INCBIN_U16("graphics/block_stacker/blocks.gbapal"); + +// X +static const u32 XGFX[] = INCBIN_U32("graphics/block_stacker/x.4bpp.lz"); +static const u16 XPAL[] = INCBIN_U16("graphics/block_stacker/x.gbapal"); + +// Game Over +static const u32 GameOverGFX[] = INCBIN_U32("graphics/block_stacker/gameover.4bpp.lz"); + +// Keep Going +static const u32 KeepGoingGFX[] = INCBIN_U32("graphics/block_stacker/keepgoing.4bpp.lz"); + +// Yes / No +static const u32 YesGFX[] = INCBIN_U32("graphics/block_stacker/yes.4bpp.lz"); +static const u32 NoGFX[] = INCBIN_U32("graphics/block_stacker/no.4bpp.lz"); +static const u16 YesNoPAL[] = INCBIN_U16("graphics/block_stacker/yesno.gbapal"); + +// Winner +static const u32 WinnerGFX[] = INCBIN_U32("graphics/block_stacker/winner.4bpp.lz"); + +// Lives +static const u32 LivesGFX[] = INCBIN_U32("graphics/block_stacker/lives.4bpp.lz"); +static const u16 LivesPAL[] = INCBIN_U16("graphics/block_stacker/lives.gbapal"); + +#define BLOCKSTACKER_BG 1 +#define BLOCKSTACKER_TEXT_MENUS 2 + +static const struct BgTemplate sBlockStackerBGtemplates[] = { + { + .bg = BLOCKSTACKER_BG, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = BLOCKSTACKER_TEXT_MENUS, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sBlockStackerWinTemplates[] = { + { + .bg = BLOCKSTACKER_TEXT_MENUS, + .tilemapLeft = 16, + .tilemapTop = 9, + .width = 14, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x194, + }, + DUMMY_WIN_TEMPLATE, +}; + +#define RHYDON_GFXTAG 1 +#define HIGHLIGHT_GFXTAG 2 +#define TITLE_GFXTAG 3 +#define START_GFXTAG 4 +#define COMMANDS_GFXTAG 5 +#define ARROW_GFXTAG 6 +#define BLOCK_GFXTAG 7 +#define X_GFXTAG 8 +#define GAMEOVER_GFXTAG 9 +#define KEEPGOING_GFXTAG 10 +#define YES_GFXTAG 11 +#define NO_GFXTAG 12 +#define WINNER_GFXTAG 13 +#define LIVES_GFXTAG 14 +#define RHYDON2_GFXTAG 15 +#define RHYDONBLOCK_GFXTAG 16 + +#define RHYDON_PALTAG 1 +#define HIGHLIGHT_PALTAG 2 +#define TITLE_PALTAG 3 +#define COMMANDS_PALTAG 4 +#define ARROW_PALTAG 5 +#define BLOCK_PALTAG 6 +#define X_PALTAG 7 +#define YESNO_PALTAG 8 +#define LIVES_PALTAG 9 +#define RHYDONBLOCK_PALTAG 10 + +static const struct SpritePalette sSpritePalettes[] = +{ + { .data = RhydonPAL, .tag = RHYDON_PALTAG }, + { .data = HighlightPAL, .tag = HIGHLIGHT_PALTAG }, + { .data = TitlePAL, .tag = TITLE_PALTAG }, + { .data = CommandsPAL, .tag = COMMANDS_PALTAG }, + { .data = ArrowPAL, .tag = ARROW_PALTAG }, + { .data = BlockPAL, .tag = BLOCK_PALTAG }, + { .data = XPAL, .tag = X_PALTAG }, + { .data = YesNoPAL, .tag = YESNO_PALTAG }, + { .data = LivesPAL, .tag = LIVES_PALTAG }, + { .data = RhydonBlockPAL, .tag = RHYDONBLOCK_PALTAG }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheet_RhydonBlock = +{ + .data = RhydonBlockGFX, + .size = 0x200, + .tag = RHYDONBLOCK_GFXTAG, +}; + +static const struct OamData sOamData_RhydonBlock = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_RhydonBlock = +{ + .tileTag = RHYDONBLOCK_GFXTAG, + .paletteTag = RHYDONBLOCK_PALTAG, + .oam = &sOamData_RhydonBlock, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Lives = +{ + .data = LivesGFX, + .size = 0xC0, + .tag = LIVES_GFXTAG, +}; + +static const struct OamData sOamData_Lives = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Lives = +{ + .tileTag = LIVES_GFXTAG, + .paletteTag = LIVES_PALTAG, + .oam = &sOamData_Lives, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Yes = +{ + .data = YesGFX, + .size = 0x600, + .tag = YES_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_No = +{ + .data = NoGFX, + .size = 0x600, + .tag = NO_GFXTAG, +}; + +static const struct OamData sOamData_YesNo = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Yes = +{ + .tileTag = YES_GFXTAG, + .paletteTag = YESNO_PALTAG, + .oam = &sOamData_YesNo, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_No = +{ + .tileTag = NO_GFXTAG, + .paletteTag = YESNO_PALTAG, + .oam = &sOamData_YesNo, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_X = +{ + .data = XGFX, + .size = 0x80, + .tag = X_GFXTAG, +}; + +static const struct OamData sOamData_X = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_X = +{ + .tileTag = X_GFXTAG, + .paletteTag = X_PALTAG, + .oam = &sOamData_X, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Block = +{ + .data = BlockGFX, + .size = 0x100, + .tag = BLOCK_GFXTAG, +}; + +static const struct OamData sOamData_Block = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Block = +{ + .tileTag = BLOCK_GFXTAG, + .paletteTag = BLOCK_PALTAG, + .oam = &sOamData_Block, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Arrow = +{ + .data = ArrowGFX, + .size = 0x200, + .tag = ARROW_GFXTAG, +}; + +static const struct OamData sOamData_Arrow = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sArrowAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 60), + ANIMCMD_FRAME(4, 10), + ANIMCMD_FRAME(8, 10), + ANIMCMD_FRAME(12, 10), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sArrowAnimCmds[] = { + sArrowAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Arrow = +{ + .tileTag = ARROW_GFXTAG, + .paletteTag = ARROW_PALTAG, + .oam = &sOamData_Arrow, + .anims = sArrowAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Commands = +{ + .data = CommandsGFX, + .size = 0x400, + .tag = COMMANDS_GFXTAG, +}; + +static const struct OamData sOamData_Commands = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Commands = +{ + .tileTag = COMMANDS_GFXTAG, + .paletteTag = COMMANDS_PALTAG, + .oam = &sOamData_Commands, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Winner = +{ + .data = WinnerGFX, + .size = 0x800, + .tag = WINNER_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_KeepGoing = +{ + .data = KeepGoingGFX, + .size = 0x800, + .tag = KEEPGOING_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_GameOver = +{ + .data = GameOverGFX, + .size = 0x800, + .tag = GAMEOVER_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Start = +{ + .data = StartGFX, + .size = 0x800, + .tag = START_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Title = +{ + .data = TitleGFX, + .size = 0x800, + .tag = TITLE_GFXTAG, +}; + +static const struct OamData sOamData_Winner = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_KeepGoing = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_GameOver = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Start = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sTitleAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(32, 10), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sTitleAnimCmds[] = { + sTitleAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Winner = +{ + .tileTag = WINNER_GFXTAG, + .paletteTag = TITLE_PALTAG, + .oam = &sOamData_Winner, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_KeepGoing = +{ + .tileTag = KEEPGOING_GFXTAG, + .paletteTag = TITLE_PALTAG, + .oam = &sOamData_KeepGoing, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_GameOver = +{ + .tileTag = GAMEOVER_GFXTAG, + .paletteTag = TITLE_PALTAG, + .oam = &sOamData_GameOver, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Start = +{ + .tileTag = START_GFXTAG, + .paletteTag = TITLE_PALTAG, + .oam = &sOamData_Start, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_Title = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Title = +{ + .tileTag = TITLE_GFXTAG, + .paletteTag = TITLE_PALTAG, + .oam = &sOamData_Title, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Highlight = +{ + .data = HighlightGFX, + .size = 0x280, + .tag = HIGHLIGHT_GFXTAG, +}; + +static const struct OamData sOamData_Highlight = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sHighlightAnimCmd_0[] = +{ + ANIMCMD_FRAME(16, 10), + ANIMCMD_FRAME(12, 10), + ANIMCMD_FRAME(8, 10), + ANIMCMD_FRAME(4, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_END +}; + +static const union AnimCmd sHighlightAnimCmd_1[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +static const union AnimCmd sHighlightAnimCmd_2[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_END +}; + +static const union AnimCmd *const sHighlightAnimCmds[] = { + sHighlightAnimCmd_0, // Light Up + sHighlightAnimCmd_1, // Still + sHighlightAnimCmd_2, // Light Down +}; + +static const struct SpriteTemplate sSpriteTemplate_Highlight = +{ + .tileTag = HIGHLIGHT_GFXTAG, + .paletteTag = HIGHLIGHT_PALTAG, + .oam = &sOamData_Highlight, + .anims = sHighlightAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Rhydon2 = +{ + .data = Rhydon2GFX, + .size = 0x3800, + .tag = RHYDON2_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Rhydon = +{ + .data = RhydonGFX, + .size = 0x4000, + .tag = RHYDON_GFXTAG, +}; + +static const struct OamData sOamData_Rhydon2 = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Rhydon = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sRhydon2AnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(64, 10), + ANIMCMD_FRAME(128, 10), + ANIMCMD_FRAME(192, 10), + ANIMCMD_FRAME(256, 10), + ANIMCMD_FRAME(320, 10), + ANIMCMD_FRAME(384, 10), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sRhydon2AnimCmds[] = { + sRhydon2AnimCmd_0, // Looping animation +}; + +static const union AnimCmd sRhydonAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(64, 10), + ANIMCMD_FRAME(128, 10), + ANIMCMD_FRAME(192, 10), + ANIMCMD_FRAME(256, 10), + ANIMCMD_FRAME(320, 10), + ANIMCMD_FRAME(384, 10), + ANIMCMD_FRAME(448, 10), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sRhydonAnimCmds[] = { + sRhydonAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Rhydon2 = +{ + .tileTag = RHYDON2_GFXTAG, + .paletteTag = RHYDON_PALTAG, + .oam = &sOamData_Rhydon2, + .anims = sRhydon2AnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Rhydon = +{ + .tileTag = RHYDON_GFXTAG, + .paletteTag = RHYDON_PALTAG, + .oam = &sOamData_Rhydon, + .anims = sRhydonAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void StartBlockStacker(void) +{ + u8 taskId = 0; + sBlockStacker = AllocZeroed(sizeof(struct BlockStacker)); + taskId = CreateTask(FadeToBlockStackerScreen, 0); +} + +static void FadeToBlockStackerScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + SetMainCallback2(InitBlockStackerScreen); + DestroyTask(taskId); + } + break; + } +} + +static void BlockStackerVBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void BlockStackerMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void CreateHighlight(u8 num, u8 row) +{ + if ((sBlockStacker->HighlightSpriteIds[num] == 0) && (sBlockStacker->HighlightRow != 8)) + { + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Highlight); + if (num < 7) + { + sBlockStacker->HighlightSpriteIds[num] = CreateSprite(&sSpriteTemplate_Highlight, 32 + (16 * num), 136 - (16 * row), 1); + } + else + { + sBlockStacker->HighlightSpriteIds[num] = CreateSprite(&sSpriteTemplate_Highlight, ((32 + (16 * num)) - (16 * 7)), 136 - (16 * row), 1); + } + gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum = 0; // Light Up + } + else if ((gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum == 0) && (gSprites[sBlockStacker->HighlightSpriteIds[num]].animCmdIndex == 0)) + { + gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum = 2; // Light Down + + if ((sBlockStacker->HighlightNum != 6) && (sBlockStacker->HighlightNum != 13) && (sBlockStacker->HighlightRow != 8)) + { + sBlockStacker->HighlightNum++; // 0-6 + } + else if ((sBlockStacker->HighlightNum == 6) && (sBlockStacker->HighlightRow != 8)) + { + sBlockStacker->HighlightNum ++; // 0-13 + sBlockStacker->HighlightRow++; // 0-7 + } + else if ((sBlockStacker->HighlightNum == 13) && (sBlockStacker->HighlightRow != 8)) + { + sBlockStacker->HighlightNum = 0; // 0-13 + sBlockStacker->HighlightRow++; // 0-7 + } + } +} + +static void DestroyHighlights(void) +{ + int i; + + for (i = 0; i < MAX_SPRITES_HIGHLIGHT; i++) { + if ((gSprites[sBlockStacker->HighlightSpriteIds[i]].animNum == 2) && (gSprites[sBlockStacker->HighlightSpriteIds[i]].animCmdIndex > 3)) + { + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->HighlightSpriteIds[i]]); + sBlockStacker->HighlightSpriteIds[i] = 0; + sBlockStacker->DestroyedHighlights++; + } + } +} + +static void SwapFromBlock(void) +{ + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Rhydon2SpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->RhydonBlockSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon); + + sBlockStacker->RhydonSpriteId = CreateSprite(&sSpriteTemplate_Rhydon, 183, 112, 0); +} + +static void SwapToBlock(void) +{ + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->RhydonSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon2); + + sBlockStacker->Rhydon2SpriteId = CreateSprite(&sSpriteTemplate_Rhydon2, 183, 112, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_RhydonBlock); + + sBlockStacker->RhydonBlockSpriteId = CreateSprite(&sSpriteTemplate_RhydonBlock, 177, 122, 0); +} + +static void CreateRhydon(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon); + + sBlockStacker->RhydonSpriteId = CreateSprite(&sSpriteTemplate_Rhydon, 183, 112, 0); +} + +static void CreateArrow(void) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Arrow); + + sBlockStacker->ArrowSpriteId = CreateSprite(&sSpriteTemplate_Arrow, 14, 137, 0); +} + +static void CreateCommands(void) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Commands); + + sBlockStacker->CommandsSpriteId = CreateSprite(&sSpriteTemplate_Commands, 196, 50, 0); +} + +static void CreateX1(s16 x, s16 y) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_X); + + sBlockStacker->x1SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); +} + +static void CreateX2(s16 x, s16 y) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_X); + + sBlockStacker->x2SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); +} + +static void CreateX3(s16 x, s16 y) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_X); + + sBlockStacker->x3SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); +} + +static void CreateYesNo(void) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Yes); + + sBlockStacker->YesSpriteId = CreateSprite(&sSpriteTemplate_Yes, 50, 110, 0); + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_No); + + sBlockStacker->NoSpriteId = CreateSprite(&sSpriteTemplate_No, 104, 110, 0); + gSprites[sBlockStacker->NoSpriteId].oam.tileNum += 32; + + sBlockStacker->YesNo = 0; // Yes +} + +static void UpdateLives(void) +{ + if ((sBlockStacker->BlocksLeft == 2) && (sBlockStacker->LastLives == 3)) + { + gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 2; + } + else if ((sBlockStacker->BlocksLeft == 1) && (sBlockStacker->LastLives == 3)) + { + gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 4; + } + else if ((sBlockStacker->BlocksLeft == 1) && (sBlockStacker->LastLives == 2)) + { + gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 2; + } +} + +static void CreateLives(void) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Lives); + + sBlockStacker->LivesSpriteId = CreateSprite(&sSpriteTemplate_Lives, 204, 24, 0); + gSprites[sBlockStacker->LivesSpriteId].oam.tileNum += 4; +} + +static void CreateKeepGoing(void) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_KeepGoing); + + sBlockStacker->KeepGoingSpriteId = CreateSprite(&sSpriteTemplate_KeepGoing, 80, 80, 0); +} + +static void CreateGameOver(void) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); + + sBlockStacker->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 80, 80, 0); +} + +static void CreateStart(void) +{ + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Start); + + sBlockStacker->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 80, 80, 0); +} + +static void DestroyKeepGoing(void) +{ + gSprites[sBlockStacker->KeepGoingSpriteId].invisible = TRUE; + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->KeepGoingSpriteId]); +} + +static void DestroyStart(void) +{ + gSprites[sBlockStacker->StartSpriteId].invisible = TRUE; + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->StartSpriteId]); +} + +static void DestroyLives(void) +{ + gSprites[sBlockStacker->LivesSpriteId].invisible = TRUE; + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->LivesSpriteId]); +} + +static void CreateWinner(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Winner); + + sBlockStacker->WinnerSpriteId = CreateSprite(&sSpriteTemplate_Winner, 80, 80, 0); +} + +static void CreateTitle(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Title); + + sBlockStacker->TitleSpriteId = CreateSprite(&sSpriteTemplate_Title, 80, 80, 0); +} + +static void DestroyTitle(void) +{ + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->TitleSpriteId]); +} + +static void CreateLevel_1(void) +{ + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row1Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96, 136, 1); + sBlockStacker->Row1Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 136, 1); + sBlockStacker->Row1Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 136, 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row1Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32, 136, 1); + sBlockStacker->Row1Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 136, 1); + sBlockStacker->Row1Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 136, 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 10; + sBlockStacker->xSpeedDelay = 0; +} + +static void CreateLevel_2(void) +{ + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (sBlockStacker->BlocksLeft == 3) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + else if (sBlockStacker->BlocksLeft == 2) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + else if (sBlockStacker->BlocksLeft == 1) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 9; + sBlockStacker->xSpeedDelay = 0; +} + +static void CreateLevel_3(void) +{ + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (sBlockStacker->BlocksLeft == 2) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row3Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row3Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + else if (sBlockStacker->BlocksLeft == 1) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 8; + sBlockStacker->xSpeedDelay = 0; +} + +static void CreateLevel_4(void) +{ + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (sBlockStacker->BlocksLeft == 2) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row4Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row4Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + else if (sBlockStacker->BlocksLeft == 1) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 7; + sBlockStacker->xSpeedDelay = 0; +} + +static void CreateLevel_5(void) +{ + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row5Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row5Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 5; + sBlockStacker->xSpeedDelay = 0; +} + +static void CreateLevel_6(void) +{ + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row6Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row6Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 4; + sBlockStacker->xSpeedDelay = 0; +} + +static void CreateLevel_7(void) +{ + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row7Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row7Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 3; + sBlockStacker->xSpeedDelay = 0; +} + +static void CreateLevel_8(void) +{ + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row8Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row8Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 2; + sBlockStacker->xSpeedDelay = 0; +} + +static void UpdateBlockPosition(void) +{ + if (sBlockStacker->xSpeedDelay == 0) + { + sBlockStacker->xSpeedDelay = sBlockStacker->xSpeed; + + // Per Level and Lives + + if ((sBlockStacker->CurrentRow == 1) && (sBlockStacker->BlocksLeft == 3)) // Level 1, 3 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row1Block3SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row1Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row1Block3SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row1Block1SpriteId].x = (gSprites[sBlockStacker->Row1Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row1Block2SpriteId].x = (gSprites[sBlockStacker->Row1Block2SpriteId].x + 16); + gSprites[sBlockStacker->Row1Block3SpriteId].x = (gSprites[sBlockStacker->Row1Block3SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row1Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row1Block1SpriteId].x = (gSprites[sBlockStacker->Row1Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row1Block2SpriteId].x = (gSprites[sBlockStacker->Row1Block2SpriteId].x - 16); + gSprites[sBlockStacker->Row1Block3SpriteId].x = (gSprites[sBlockStacker->Row1Block3SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 3)) // Level 2, 3 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block3SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block3SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x + 16); + gSprites[sBlockStacker->Row2Block3SpriteId].x = (gSprites[sBlockStacker->Row2Block3SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x - 16); + gSprites[sBlockStacker->Row2Block3SpriteId].x = (gSprites[sBlockStacker->Row2Block3SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 2)) // Level 2, 2 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block2SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block2SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 1)) // Level 2, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 2)) // Level 3, 2 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block2SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block2SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row3Block2SpriteId].x = (gSprites[sBlockStacker->Row3Block2SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row3Block2SpriteId].x = (gSprites[sBlockStacker->Row3Block2SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 1)) // Level 3, 1 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 2)) // Level 4, 2 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block2SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block2SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row4Block2SpriteId].x = (gSprites[sBlockStacker->Row4Block2SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row4Block2SpriteId].x = (gSprites[sBlockStacker->Row4Block2SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 1)) // Level 4, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 5) && (sBlockStacker->BlocksLeft == 1)) // Level 5, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row5Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row5Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row5Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row5Block1SpriteId].x = (gSprites[sBlockStacker->Row5Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row5Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row5Block1SpriteId].x = (gSprites[sBlockStacker->Row5Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 6) && (sBlockStacker->BlocksLeft == 1)) // Level 6, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row6Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row6Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row6Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row6Block1SpriteId].x = (gSprites[sBlockStacker->Row6Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row6Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row6Block1SpriteId].x = (gSprites[sBlockStacker->Row6Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 7) && (sBlockStacker->BlocksLeft == 1)) // Level 7, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row7Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row7Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row7Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row7Block1SpriteId].x = (gSprites[sBlockStacker->Row7Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row7Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row7Block1SpriteId].x = (gSprites[sBlockStacker->Row7Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 8) && (sBlockStacker->BlocksLeft == 1)) // Level 8, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row8Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row8Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row8Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row8Block1SpriteId].x = (gSprites[sBlockStacker->Row8Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row8Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row8Block1SpriteId].x = (gSprites[sBlockStacker->Row8Block1SpriteId].x - 16); + } + } + } + sBlockStacker->xSpeedDelay--; +} + +static void AButton(void) +{ + PlaySE(SE_M_STRENGTH); + //SwapFromBlock(); + sBlockStacker->ToggleButtons = 0; + + if ((sBlockStacker->CurrentRow == 1) && (sBlockStacker->BlocksLeft == 3)) // Level 1, 3 Lives + { + gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row1Block2SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row1Block3SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 3)) // Level 2, 3 Lives + { + gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row2Block2SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row2Block3SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 2)) // Level 2, 2 Lives + { + gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row2Block2SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 1)) // Level 2, 1 Live + { + gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 2)) // Level 3, 2 Lives + { + gSprites[sBlockStacker->Row3Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row3Block2SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 1)) // Level 3, 1 Live + { + gSprites[sBlockStacker->Row3Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 2)) // Level 4, 2 Lives + { + gSprites[sBlockStacker->Row4Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row4Block2SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 1)) // Level 4, 1 Live + { + gSprites[sBlockStacker->Row4Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 5) && (sBlockStacker->BlocksLeft == 1)) // Level 5, 1 Live + { + gSprites[sBlockStacker->Row5Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 6) && (sBlockStacker->BlocksLeft == 1)) // Level 6, 1 Live + { + gSprites[sBlockStacker->Row6Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 7) && (sBlockStacker->BlocksLeft == 1)) // Level 7, 1 Live + { + gSprites[sBlockStacker->Row7Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 8) && (sBlockStacker->BlocksLeft == 1)) // Level 8, 1 Live + { + gSprites[sBlockStacker->Row8Block1SpriteId].oam.tileNum += 4; + } + sBlockStacker->state = STACKER_CHECK_POS; +} + +static void CheckLevel_2(void) +{ + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row2Block1SpriteId].x; + curX2 = gSprites[sBlockStacker->Row2Block2SpriteId].x; + curX3 = gSprites[sBlockStacker->Row2Block3SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row1Block1SpriteId].x; + preX2 = gSprites[sBlockStacker->Row1Block2SpriteId].x; + preX3 = gSprites[sBlockStacker->Row1Block3SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1) && (curX1 != preX2) && (curX1 != preX3)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row2Block1SpriteId].x, gSprites[sBlockStacker->Row2Block1SpriteId].y); + gSprites[sBlockStacker->Row2Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row2Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block1SpriteId]); + } + if (Lives > 1) + { + if ((curX2 != preX1) && (curX2 != preX2) && (curX2 != preX3)) // Block 2 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x2Active = 1; + CreateX2(gSprites[sBlockStacker->Row2Block2SpriteId].x, gSprites[sBlockStacker->Row2Block2SpriteId].y); + gSprites[sBlockStacker->Row2Block2SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row2Block2SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block2SpriteId]); + } + } + if (Lives > 2) + { + if ((curX3 != preX1) && (curX3 != preX2) && (curX3 != preX3)) // Block 3 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x3Active = 1; + CreateX3(gSprites[sBlockStacker->Row2Block3SpriteId].x, gSprites[sBlockStacker->Row2Block3SpriteId].y); + gSprites[sBlockStacker->Row2Block3SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row2Block3SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block3SpriteId]); + } + } +} + +static void CheckLevel_3(void) +{ + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row3Block1SpriteId].x; + curX2 = gSprites[sBlockStacker->Row3Block2SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row2Block1SpriteId].x; + preX2 = gSprites[sBlockStacker->Row2Block2SpriteId].x; + preX3 = gSprites[sBlockStacker->Row2Block3SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1) && (curX1 != preX2) && (curX1 != preX3)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row3Block1SpriteId].x, gSprites[sBlockStacker->Row3Block1SpriteId].y); + gSprites[sBlockStacker->Row3Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row3Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row3Block1SpriteId]); + } + if (Lives > 1) + { + if ((curX2 != preX1) && (curX2 != preX2) && (curX2 != preX3)) // Block 2 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x2Active = 1; + CreateX2(gSprites[sBlockStacker->Row3Block2SpriteId].x, gSprites[sBlockStacker->Row3Block2SpriteId].y); + gSprites[sBlockStacker->Row3Block2SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row3Block2SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row3Block2SpriteId]); + } + } +} + +static void CheckLevel_4(void) +{ + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row4Block1SpriteId].x; + curX2 = gSprites[sBlockStacker->Row4Block2SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row3Block1SpriteId].x; + preX2 = gSprites[sBlockStacker->Row3Block2SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1) && (curX1 != preX2)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row4Block1SpriteId].x, gSprites[sBlockStacker->Row4Block1SpriteId].y); + gSprites[sBlockStacker->Row4Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row4Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row4Block1SpriteId]); + } + if (Lives > 1) + { + if ((curX2 != preX1) && (curX2 != preX2)) // Block 2 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x2Active = 1; + CreateX2(gSprites[sBlockStacker->Row4Block2SpriteId].x, gSprites[sBlockStacker->Row4Block2SpriteId].y); + gSprites[sBlockStacker->Row4Block2SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row4Block2SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row4Block2SpriteId]); + } + } +} + +static void CheckLevel_5(void) +{ + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row5Block1SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row4Block1SpriteId].x; + preX2 = gSprites[sBlockStacker->Row4Block2SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1) && (curX1 != preX2)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row5Block1SpriteId].x, gSprites[sBlockStacker->Row5Block1SpriteId].y); + gSprites[sBlockStacker->Row5Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row5Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row5Block1SpriteId]); + } +} + +static void CheckLevel_6(void) +{ + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row6Block1SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row5Block1SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row6Block1SpriteId].x, gSprites[sBlockStacker->Row6Block1SpriteId].y); + gSprites[sBlockStacker->Row6Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row6Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row6Block1SpriteId]); + } +} + +static void CheckLevel_7(void) +{ + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row7Block1SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row6Block1SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row7Block1SpriteId].x, gSprites[sBlockStacker->Row7Block1SpriteId].y); + gSprites[sBlockStacker->Row7Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row7Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row7Block1SpriteId]); + } +} + +static void CheckLevel_8(void) +{ + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row8Block1SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row7Block1SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row8Block1SpriteId].x, gSprites[sBlockStacker->Row8Block1SpriteId].y); + gSprites[sBlockStacker->Row8Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row8Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row8Block1SpriteId]); + } +} + +static void HandleInput(void) +{ + if (sBlockStacker->ToggleButtons == 1) + { + if (JOY_NEW(A_BUTTON)) + { + AButton(); + } + else if (JOY_NEW(B_BUTTON)) + { + if (sBlockStacker->exitToggle == 0) { + PlaySE(SE_SELECT); + sBlockStacker->state = STACKER_START_EXIT; + } + } + } +} + +static void HandleInput2(void) +{ + if (JOY_NEW(A_BUTTON)) + { + if (sBlockStacker->YesNo == 0) // Yes + { + PlaySE(SE_POKENAV_ON); + gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; + gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; + DestroyKeepGoing(); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); + sBlockStacker->GoDelay = 30; + sBlockStacker->state = STACKER_POST_DELAY; + return; + } + else + { + PlaySE(SE_POKENAV_OFF); + sBlockStacker->YesNo = 1; + gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; + gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; + DestroyKeepGoing(); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); + sBlockStacker->GoDelay = 30; + sBlockStacker->state = STACKER_POST_DELAY; + return; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_POKENAV_OFF); + gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; + gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; + DestroyKeepGoing(); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); + sBlockStacker->GoDelay = 30; + sBlockStacker->state = STACKER_POST_DELAY; + return; + } + else if (JOY_NEW(DPAD_RIGHT)) + { + if (sBlockStacker->YesNo == 0) + { + PlaySE(SE_SELECT); + sBlockStacker->YesNo = 1; // No + gSprites[sBlockStacker->YesSpriteId].oam.tileNum += 32; + gSprites[sBlockStacker->NoSpriteId].oam.tileNum -= 32; + } + return; + } + else if (JOY_NEW(DPAD_LEFT)) + { + if (sBlockStacker->YesNo == 1) + { + PlaySE(SE_SELECT); + sBlockStacker->YesNo = 0; // Yes + gSprites[sBlockStacker->YesSpriteId].oam.tileNum -= 32; + gSprites[sBlockStacker->NoSpriteId].oam.tileNum += 32; + } + return; + } +} + +static void ExitBlockStacker(void) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + FREE_AND_SET_NULL(sBlockStacker); + } +} + +static void StartExitBlockStacker(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sBlockStacker->state = STACKER_EXIT; +} + +static void BlockStackerMain(u8 taskId) +{ + switch (sBlockStacker->state) + { + case STACKER_HIGHLIGHT: + CreateHighlight(sBlockStacker->HighlightNum, sBlockStacker->HighlightRow); + DestroyHighlights(); + if (sBlockStacker->DestroyedHighlights > 55) + { + sBlockStacker->state = STACKER_HIGHLIGHT_END; + } + break; + case STACKER_HIGHLIGHT_END: + sBlockStacker->GoDelay = 50; + sBlockStacker->state = STACKER_GO_DELAY; + break; + case STACKER_GO_DELAY: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + DestroyTitle(); + sBlockStacker->GoDelay = 100; + sBlockStacker->state = STACKER_GO; + } + break; + case STACKER_GO: + if (sBlockStacker->GoDelay == 100) + { + PlaySE(SE_POKENAV_ON); + CreateStart(); + } + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + PlaySE(SE_EGG_HATCH); + DestroyStart(); + CreateCommands(); + CreateArrow(); + CreateLives(); + //SwapToBlock(); + sBlockStacker->state = STACKER_LEVEL_SETUP; + } + break; + case STACKER_LEVEL_SETUP: + gSprites[sBlockStacker->ArrowSpriteId].y = 153 - (16 * sBlockStacker->CurrentRow); + + if (sBlockStacker->CurrentRow == 1) + { + CreateLevel_1(); + } + else if (sBlockStacker->CurrentRow == 2) + { + CreateLevel_2(); + } + else if (sBlockStacker->CurrentRow == 3) + { + if (sBlockStacker->BlocksLeft > 2) + { + sBlockStacker->BlocksLeft = 2; + } + CreateLevel_3(); + } + else if (sBlockStacker->CurrentRow == 4) + { + CreateLevel_4(); + } + else if (sBlockStacker->CurrentRow == 5) + { + if (sBlockStacker->BlocksLeft > 1) + { + sBlockStacker->BlocksLeft = 1; + } + CreateLevel_5(); + } + else if (sBlockStacker->CurrentRow == 6) + { + CreateLevel_6(); + } + else if (sBlockStacker->CurrentRow == 7) + { + CreateLevel_7(); + PlayBGM(MUS_RG_TRAINER_TOWER); + } + else if (sBlockStacker->CurrentRow == 8) + { + CreateLevel_8(); + PlayBGM(MUS_RG_SEVII_ROUTE); + } + UpdateLives(); + sBlockStacker->ToggleButtons = 1; + sBlockStacker->state = STACKER_INPUT; + break; + case STACKER_INPUT: + UpdateBlockPosition(); + HandleInput(); + break; + case STACKER_CHECK_POS: + if (sBlockStacker->CurrentRow == 2) + { + CheckLevel_2(); + } + else if (sBlockStacker->CurrentRow == 3) + { + CheckLevel_3(); + } + else if (sBlockStacker->CurrentRow == 4) + { + CheckLevel_4(); + } + else if (sBlockStacker->CurrentRow == 5) + { + CheckLevel_5(); + } + else if (sBlockStacker->CurrentRow == 6) + { + CheckLevel_6(); + } + else if (sBlockStacker->CurrentRow == 7) + { + CheckLevel_7(); + } + else if (sBlockStacker->CurrentRow == 8) + { + CheckLevel_8(); + } + + sBlockStacker->GoDelay = 30; + sBlockStacker->state = STACKER_ROW_DELAY; + break; + case STACKER_ROW_DELAY: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 15 && ((sBlockStacker->x1Active != 0) || (sBlockStacker->x2Active != 0) || (sBlockStacker->x3Active != 0))) + { + PlaySE(SE_FAILURE); + } + if (sBlockStacker->GoDelay == 0) + { + if (sBlockStacker->x1Active != 0) + { + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x1SpriteId]); + sBlockStacker->x1Active = 0; + } + if (sBlockStacker->x2Active != 0) + { + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x2SpriteId]); + sBlockStacker->x2Active = 0; + } + if (sBlockStacker->x3Active != 0) + { + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x3SpriteId]); + sBlockStacker->x3Active = 0; + } + if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow != 6) && (sBlockStacker->CurrentRow != 7) && (sBlockStacker->CurrentRow != 8)) + { + //sBlockStacker->ToggleButtons = 1; + sBlockStacker->CurrentRow++; + PlaySE(SE_EGG_HATCH); + //SwapToBlock(); + sBlockStacker->state = STACKER_LEVEL_SETUP; + } + else if (sBlockStacker->BlocksLeft == 0) + { + sBlockStacker->GoDelay = 140; + PlayFanfare(MUS_TOO_BAD); + CreateGameOver(); + DestroyLives(); + sBlockStacker->state = STACKER_GAME_OVER; + } + else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 6)) + { + sBlockStacker->Winnings = 50; + sBlockStacker->CurrentRow++; + CreateKeepGoing(); + CreateYesNo(); + PlayFanfare(MUS_LEVEL_UP); + sBlockStacker->state = STACKER_KEEP_GOING; + } + else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 7)) + { + sBlockStacker->Winnings = 250; + sBlockStacker->CurrentRow++; + CreateKeepGoing(); + CreateYesNo(); + PlayFanfare(MUS_LEVEL_UP); + sBlockStacker->state = STACKER_KEEP_GOING; + } + else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 8)) + { + sBlockStacker->Winnings = 1000; + sBlockStacker->CurrentRow++; + PlayFanfare(MUS_OBTAIN_BADGE); + sBlockStacker->GoDelay = 330; + CreateWinner(); + sBlockStacker->state = STACKER_WIN; + } + } + break; + case STACKER_KEEP_GOING: + HandleInput2(); + break; + case STACKER_POST_DELAY: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + if (sBlockStacker->YesNo == 1) // No + { + VarSet(GAME_CORNER_VAR_WINNINGS, sBlockStacker->Winnings); + sBlockStacker->state = STACKER_START_EXIT; + } + else + { + PlaySE(SE_EGG_HATCH); + //SwapToBlock(); + sBlockStacker->state = STACKER_LEVEL_SETUP; + } + } + break; + case STACKER_WIN: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + VarSet(GAME_CORNER_VAR_WINNINGS, sBlockStacker->Winnings); + sBlockStacker->state = STACKER_START_EXIT; + } + break; + case STACKER_GAME_OVER: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + sBlockStacker->state = STACKER_START_EXIT; + } + break; + case STACKER_START_EXIT: + StartExitBlockStacker(); + break; + case STACKER_EXIT: + ExitBlockStacker(); + break; + } +} + +static void InitBlockStackerScreen(void) +{ + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + ResetTempTileDataBuffers(); + InitBgsFromTemplates(0, sBlockStackerBGtemplates, ARRAY_COUNT(sBlockStackerBGtemplates)); + SetBgTilemapBuffer(BLOCKSTACKER_BG, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(BLOCKSTACKER_BG, BlockStacker_BG_Img, 0x1140, 0, 0); + CopyToBgTilemapBuffer(BLOCKSTACKER_BG, BlockStacker_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(BlockStacker_BG_Pal, 0, sizeof(BlockStacker_BG_Pal)); + ResetSpriteData(); + FreeAllSpritePalettes(); + LoadSpritePalettes(sSpritePalettes); + + CreateRhydon(); + CreateTitle(); + sBlockStacker->HighlightNum = 0; // 0-13 + sBlockStacker->HighlightRow = 0; // 0-7 + sBlockStacker->DestroyedHighlights = 0; + sBlockStacker->ToggleButtons = 0; + sBlockStacker->CurrentRow = 1; + sBlockStacker->BlocksLeft = 3; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + CopyBgTilemapBufferToVram(BLOCKSTACKER_BG); + //CopyBgTilemapBufferToVram(BLOCKSTACKER_TEXT_MENUS); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); + ShowBg(BLOCKSTACKER_BG); + //ShowBg(BLOCKSTACKER_TEXT_MENUS); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(BlockStackerVBlankCallback); + SetMainCallback2(BlockStackerMainCallback); + PlaySE(SE_MUGSHOT); + CreateTask(BlockStackerMain, 1); +} diff --git a/src/debug.c b/src/debug.c index 4443e004d826..b32abd4621cd 100644 --- a/src/debug.c +++ b/src/debug.c @@ -4034,6 +4034,16 @@ static void DebugAction_Sound_MUS_SelectId(u8 taskId) X(MUS_RG_TRAINER_TOWER) \ X(MUS_RG_SLOW_PALLET) \ X(MUS_RG_TEACHY_TV_MENU) \ + X(MUS_HGSS_CASINO) \ + X(MUS_CASINO_PLUS_1) \ + X(MUS_CASINO_PLUS_2) \ + X(MUS_CASINO_PLUS_3) \ + X(MUS_CASINO_PLUS_4) \ + X(MUS_CASINO_PLUS_5) \ + X(MUS_CASINO_PLUS_6) \ + X(MUS_CASINO_PLUS_7) \ + X(MUS_CASINO_PLUS_8) \ + X(MUS_CASINO_PLUS_9) \ X(PH_TRAP_BLEND) \ X(PH_TRAP_HELD) \ X(PH_TRAP_SOLO) \ diff --git a/src/derby.c b/src/derby.c new file mode 100644 index 000000000000..62c2b6c95a61 --- /dev/null +++ b/src/derby.c @@ -0,0 +1,5266 @@ +//#include "game_corner_blackjack.h" +#include "derby.h" +#include "global.h" +#include "malloc.h" +#include "battle.h" +#include "bg.h" +#include "coins.h" +#include "data.h" +#include "daycare.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "field_message_box.h" +#include "international_string_util.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "naming_screen.h" +#include "new_game.h" +#include "overworld.h" +#include "palette.h" +#include "palette_util.h" +#include "pokemon.h" +#include "pokedex.h" +#include "random.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trade.h" +#include "trainer_pokemon_sprites.h" +#include "tv.h" +#include "window.h" +#include "constants/coins.h" +#include "constants/flags.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/vars.h" +#include "scanline_effect.h" +#include "pokemon_storage_system.h" +#include "string_util.h" +#include "field_specials.h" + +enum +{ + DERBY_STATE_INIT, + DERBY_STATE_PROCESS_INPUT, + DERBY_STATE_BET_2_START, + DERBY_STATE_BET_2, + DERBY_STATE_RACE_DELAY, + DERBY_STATE_START_FADE, + DERBY_STATE_FADEIN, + DERBY_STATE_DELAY_2, + DERBY_STATE_COUNTDOWN, + DERBY_STATE_RACE_START, + DERBY_STATE_RACE_MID, + DERBY_STATE_FINAL_DELAY, + DERBY_STATE_START_EXIT, + DERBY_STATE_EXIT, +}; + +enum { + SPR_CREDIT_DIG_1, + SPR_CREDIT_DIG_10, + SPR_CREDIT_DIG_100, + SPR_CREDIT_DIG_1000, +}; + +enum { + SPR_BET_DIG_1, + SPR_BET_DIG_10, + SPR_BET_DIG_100, + SPR_BET_DIG_1000, +}; + +enum { + SPR_POT_DIG_1, + SPR_POT_DIG_10, + SPR_POT_DIG_100, + SPR_POT_DIG_1000, +}; + +#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 +#define SPR_BET_DIGITS SPR_BET_DIG_1 +#define SPR_POTENTIAL_DIGITS SPR_POT_DIG_1 + +#define MAX_SPRITES_CREDIT 4 +#define MAX_SPRITES_BET 4 +#define MAX_SPRITES_POTENTIAL 4 + +struct Derby { + u8 state; + u8 Species_1; + u8 Shiny_1; + u8 Condition_1; + u8 Species_2; + u8 Shiny_2; + u8 Condition_2; + u8 Species_3; + u8 Shiny_3; + u8 Condition_3; + u8 Species_4; + u8 Shiny_4; + u8 Condition_4; + u8 Species_5; + u8 Shiny_5; + u8 Condition_5; + u8 Species_6; + u8 Shiny_6; + u8 Condition_6; + u8 SpeciesSpriteId_1; + u8 SpeciesSpriteId_2; + u8 SpeciesSpriteId_3; + u8 SpeciesSpriteId_4; + u8 SpeciesSpriteId_5; + u8 SpeciesSpriteId_6; + u8 MenuPosition; // 0-5 + u8 exitToggle; + u8 SpeciesNameSpriteId; + u8 ConditionSpriteId; + u8 PayoutSpriteId; + float Racer1sSpeed; + float Racer2sSpeed; + float Racer3sSpeed; + float Racer4sSpeed; + float Racer5sSpeed; + float Racer6sSpeed; + float Racer1rSpeed; + float Racer2rSpeed; + float Racer3rSpeed; + float Racer4rSpeed; + float Racer5rSpeed; + float Racer6rSpeed; + u8 Racer1SpeedPay; + u8 Racer2SpeedPay; + u8 Racer3SpeedPay; + u8 Racer4SpeedPay; + u8 Racer5SpeedPay; + u8 Racer6SpeedPay; + u8 uiSpriteId; + u8 Arrow1SpriteId; + u8 Arrow2SpriteId; + u8 CreditIconSpriteId; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 BetSpriteIds[MAX_SPRITES_BET]; + u8 PotentialSpriteIds[MAX_SPRITES_POTENTIAL]; + u8 Menu; + u8 RacerSelected; + u8 Swap1; + u8 P10SpriteId; + u32 Bet; + u32 PotentialWin; + u32 delay; + u8 RacerSprite1; + u8 RacerSprite2; + u8 RacerSprite3; + u8 RacerSprite4; + u8 RacerSprite5; + u8 RacerSprite6; + u8 CursorSpriteId; + u8 Timer; + u8 Swap2; + s16 CountdownX; + s16 CountdownY; + u8 CountdownSpriteId; + u32 frames; + u8 place1; + u8 place2; + u8 place3; + u8 place4; + u8 place5; + u8 place6; + u8 ClefSpriteId; +}; + +static EWRAM_DATA struct Derby *sDerby = NULL; +static EWRAM_DATA u8 sTextWindowId = 0; + +static void FadeToDerbyScreen(u8 taskId); +static void InitDerbyScreen(void); +static void DerbyVBlankCallback(void); + +static const u8 sTestText[] = _("TEST"); + +// BG Images/Tilemaps + +// Betting Slip +static const u32 Derby_BG_Bet_Img[] = INCBIN_U32("graphics/derby/betslip_bg.4bpp.lz"); +static const u8 Derby_BG_Bet_Tilemap[] = INCBIN_U8("graphics/derby/betslip_bg.bin.lz"); +static const u16 Derby_BG_Bet_Pal[] = INCBIN_U16("graphics/derby/bet_bg.gbapal"); + +// Betting Slip 2 +static const u32 Derby_BG_Bet_Img_2[] = INCBIN_U32("graphics/derby/betslip_bg_2.4bpp.lz"); +static const u8 Derby_BG_Bet_Tilemap_2[] = INCBIN_U8("graphics/derby/betslip_bg_2.bin.lz"); +static const u16 Derby_BG_Bet_Pal_2[] = INCBIN_U16("graphics/derby/bet_bg_2.gbapal"); + +// Racetrack +static const u32 Derby_Race_Img[] = INCBIN_U32("graphics/derby/race_bg.4bpp.lz"); +static const u8 Derby_Race_Tilemap[] = INCBIN_U8("graphics/derby/race_bg.bin.lz"); +static const u16 Derby_Race_Pal[] = INCBIN_U16("graphics/derby/racetrack_bg.gbapal"); + +// Betting Menu Pokemon Sprites and Palettes + +static const u32 PonytaGFX[] = INCBIN_U32("graphics/pokemon/ponyta/anim_front.4bpp.lz"); +static const u16 PonytaNormalPAL[] = INCBIN_U16("graphics/pokemon/ponyta/normal.gbapal"); +static const u16 PonytaShinyPAL[] = INCBIN_U16("graphics/pokemon/ponyta/shiny.gbapal"); + +static const u32 RapidashGFX[] = INCBIN_U32("graphics/pokemon/rapidash/anim_front.4bpp.lz"); +static const u16 RapidashNormalPAL[] = INCBIN_U16("graphics/pokemon/rapidash/normal.gbapal"); +static const u16 RapidashShinyPAL[] = INCBIN_U16("graphics/pokemon/rapidash/shiny.gbapal"); + +static const u32 RattataGFX[] = INCBIN_U32("graphics/pokemon/rattata/anim_front.4bpp.lz"); +static const u16 RattataNormalPAL[] = INCBIN_U16("graphics/pokemon/rattata/normal.gbapal"); +static const u16 RattataShinyPAL[] = INCBIN_U16("graphics/pokemon/rattata/shiny.gbapal"); + +static const u32 FeebasGFX[] = INCBIN_U32("graphics/pokemon/feebas/anim_front.4bpp.lz"); +static const u16 FeebasNormalPAL[] = INCBIN_U16("graphics/pokemon/feebas/normal.gbapal"); +static const u16 FeebasShinyPAL[] = INCBIN_U16("graphics/pokemon/feebas/shiny.gbapal"); + +// Betting Menu Text + +// Pokemon Names + +static const u32 Name_PonytaGFX[] = INCBIN_U32("graphics/derby/species_name/name-ponyta.4bpp.lz"); +static const u32 Name_RapidashGFX[] = INCBIN_U32("graphics/derby/species_name/name-rapidash.4bpp.lz"); +static const u32 Name_RattataGFX[] = INCBIN_U32("graphics/derby/species_name/name-rattata.4bpp.lz"); +static const u32 Name_FeebasGFX[] = INCBIN_U32("graphics/derby/species_name/name-feebas.4bpp.lz"); + +static const u16 TextPAL[] = INCBIN_U16("graphics/derby/bet_text.gbapal"); + +// Conditions + +static const u32 Condition_1_GFX[] = INCBIN_U32("graphics/derby/condition/condition-1.4bpp.lz"); +static const u32 Condition_2_GFX[] = INCBIN_U32("graphics/derby/condition/condition-2.4bpp.lz"); +static const u32 Condition_3_GFX[] = INCBIN_U32("graphics/derby/condition/condition-3.4bpp.lz"); +static const u32 Condition_4_GFX[] = INCBIN_U32("graphics/derby/condition/condition-4.4bpp.lz"); +static const u32 Condition_5_GFX[] = INCBIN_U32("graphics/derby/condition/condition-5.4bpp.lz"); + +static const u16 ConditionPAL[] = INCBIN_U16("graphics/derby/condition.gbapal"); + +// Payout + +static const u32 Payout_1_GFX[] = INCBIN_U32("graphics/derby/payout/payout-1.4bpp.lz"); +static const u32 Payout_2_GFX[] = INCBIN_U32("graphics/derby/payout/payout-2.4bpp.lz"); +static const u32 Payout_3_GFX[] = INCBIN_U32("graphics/derby/payout/payout-3.4bpp.lz"); +static const u32 Payout_4_GFX[] = INCBIN_U32("graphics/derby/payout/payout-4.4bpp.lz"); +static const u32 Payout_5_GFX[] = INCBIN_U32("graphics/derby/payout/payout-5.4bpp.lz"); +static const u32 Payout_6_GFX[] = INCBIN_U32("graphics/derby/payout/payout-6.4bpp.lz"); +static const u32 Payout_7_GFX[] = INCBIN_U32("graphics/derby/payout/payout-7.4bpp.lz"); + +// UI + +static const u32 UI_1_GFX[] = INCBIN_U32("graphics/derby/pokemon_ui/ui-1.4bpp.lz"); +static const u32 UI_2_GFX[] = INCBIN_U32("graphics/derby/pokemon_ui/ui-2.4bpp.lz"); +static const u32 UI_3_GFX[] = INCBIN_U32("graphics/derby/pokemon_ui/ui-3.4bpp.lz"); +static const u32 UI_4_GFX[] = INCBIN_U32("graphics/derby/pokemon_ui/ui-4.4bpp.lz"); +static const u32 UI_5_GFX[] = INCBIN_U32("graphics/derby/pokemon_ui/ui-5.4bpp.lz"); +static const u32 UI_6_GFX[] = INCBIN_U32("graphics/derby/pokemon_ui/ui-6.4bpp.lz"); + +static const u16 BetMenuUIPAL[] = INCBIN_U16("graphics/derby/betmenu_interface.gbapal"); + +// Arrows + +static const u32 Arrow_1_GFX[] = INCBIN_U32("graphics/derby/arrow-1.4bpp.lz"); +static const u32 Arrow_2_GFX[] = INCBIN_U32("graphics/derby/arrow-2.4bpp.lz"); + +// Credit Icon + +static const u32 Credit_Icon_GFX[] = INCBIN_U32("graphics/derby/credit.4bpp.lz"); +static const u32 Credit_Red_Icon_GFX[] = INCBIN_U32("graphics/derby/creditred.4bpp.lz"); +static const u16 Credit_Icon_PAL[] = INCBIN_U16("graphics/derby/credit.gbapal"); + +// Numbers + +static const u32 Digits_Gfx[] = INCBIN_U32("graphics/derby/digits.4bpp.lz"); +static const u32 Digits_2_Gfx[] = INCBIN_U32("graphics/derby/digits_2.4bpp.lz"); +static const u16 Digits_Pal[] = INCBIN_U16("graphics/derby/digits.gbapal"); + +// P 10 + +static const u32 P10_GFX[] = INCBIN_U32("graphics/derby/10p.4bpp.lz"); + +// Pokemon OW Sprites + +static const u32 Feebas_OW_GFX[] = INCBIN_U32("graphics/derby/feebas_ow.4bpp.lz"); +static const u32 Ponyta_OW_GFX[] = INCBIN_U32("graphics/derby/ponyta_ow.4bpp.lz"); +static const u32 Rattata_OW_GFX[] = INCBIN_U32("graphics/derby/rattata_ow.4bpp.lz"); +static const u32 Rapidash_OW_GFX[] = INCBIN_U32("graphics/derby/rapidash_ow.4bpp.lz"); + +// Cursor + +static const u32 Cursor_GFX[] = INCBIN_U32("graphics/derby/selection.4bpp.lz"); +static const u16 Cursor_PAL[] = INCBIN_U16("graphics/derby/selection.gbapal"); + +// Countdown + +static const u32 Countdown_3_GFX[] = INCBIN_U32("graphics/derby/countdown/countdown-3.4bpp.lz"); +static const u32 Countdown_2_GFX[] = INCBIN_U32("graphics/derby/countdown/countdown-2.4bpp.lz"); +static const u32 Countdown_1_GFX[] = INCBIN_U32("graphics/derby/countdown/countdown-1.4bpp.lz"); +static const u32 Go_GFX[] = INCBIN_U32("graphics/derby/countdown/go.4bpp.lz"); + +static const u16 Countdown_PAL[] = INCBIN_U16("graphics/derby/countdown/countdown.gbapal"); + +// Clefairy + +static const u32 Clef_GFX[] = INCBIN_U32("graphics/derby/clef.4bpp.lz"); +static const u16 Clef_PAL[] = INCBIN_U16("graphics/derby/clef.gbapal"); + +#define DERBY_BG_BASE 1 +#define DERBY_MENUS 0 + +static const struct BgTemplate sDerbyBGtemplates[] = { + { + .bg = DERBY_BG_BASE, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = DERBY_MENUS, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sDerbyWinTemplates[] = { + { + .bg = DERBY_MENUS, + .tilemapLeft = 6, + .tilemapTop = 5, + .width = 9, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x194, + }, + DUMMY_WIN_TEMPLATE, +}; + +#define GFX_BG_BETTING 1 +#define GFX_BG_RACETRACK 2 +#define GFX_PONYTA 3 +#define GFX_RAPIDASH 4 +#define GFX_RATTATA 5 +#define GFX_FEEBAS 6 +#define GFX_NAME_PONYTA 7 +#define GFX_NAME_RATTATA 8 +#define GFX_NAME_RAPIDASH 9 +#define GFX_NAME_FEEBAS 10 +#define GFX_CONDITION_1 11 +#define GFX_CONDITION_2 12 +#define GFX_CONDITION_3 13 +#define GFX_CONDITION_4 14 +#define GFX_CONDITION_5 15 +#define GFX_PAYOUT_1 16 +#define GFX_PAYOUT_2 17 +#define GFX_PAYOUT_3 18 +#define GFX_PAYOUT_4 19 +#define GFX_PAYOUT_5 20 +#define GFX_PAYOUT_6 21 +#define GFX_PAYOUT_7 22 +#define GFX_UI_1 23 +#define GFX_UI_2 24 +#define GFX_UI_3 25 +#define GFX_UI_4 26 +#define GFX_UI_5 27 +#define GFX_UI_6 28 +#define GFX_ARROW_1 29 +#define GFX_ARROW_2 30 +#define GFX_CREDIT_ICON 31 +#define GFX_CREDIT_DIGITS 32 +#define GFX_BET_DIGITS 33 +#define GFX_CREDIT_ICON_RED 34 +#define GFX_POTENTIAL_DIGITS 35 +#define GFX_P10 36 +#define GFX_PONYTA_OW 37 +#define GFX_RATTATA_OW 38 +#define GFX_RAPIDASH_OW 39 +#define GFX_FEEBAS_OW 40 +#define GFX_CURSOR 41 +#define GFX_COUNTDOWN_3 42 +#define GFX_COUNTDOWN_2 43 +#define GFX_COUNTDOWN_1 44 +#define GFX_GO 45 +#define GFX_CLEFAIRY 46 + +#define PAL_BG_BETTING 1 +#define PAL_BG_RACETRACK 2 +#define PAL_PONYTA 3 +#define PAL_PONYTA_SHINY 4 +#define PAL_RAPIDASH 5 +#define PAL_RAPIDASH_SHINY 6 +#define PAL_RATTATA 7 +#define PAL_RATTATA_SHINY 8 +#define PAL_FEEBAS 9 +#define PAL_FEEBAS_SHINY 10 +#define PAL_BET_MENU_TEXT 11 +#define PAL_CONDITION 12 +#define PAL_UI 13 +#define PAL_CREDIT_ICON 14 +#define PAL_DIGITS 15 +#define PAL_CURSOR 16 +#define PAL_COUNTDOWN 17 +#define PAL_CLEFAIRY 18 + +static const struct SpritePalette sSpritePalettes[] = +{ + { .data = Derby_BG_Bet_Pal, .tag = PAL_BG_BETTING }, + { .data = PonytaNormalPAL, .tag = PAL_PONYTA }, + { .data = PonytaShinyPAL, .tag = PAL_PONYTA_SHINY }, + { .data = RapidashNormalPAL, .tag = PAL_RAPIDASH }, + { .data = RapidashShinyPAL, .tag = PAL_RAPIDASH_SHINY }, + { .data = RattataNormalPAL, .tag = PAL_RATTATA }, + { .data = RattataShinyPAL, .tag = PAL_RATTATA_SHINY }, + { .data = FeebasNormalPAL, .tag = PAL_FEEBAS }, + { .data = FeebasShinyPAL, .tag = PAL_FEEBAS_SHINY }, + { .data = TextPAL, .tag = PAL_BET_MENU_TEXT }, + { .data = ConditionPAL, .tag = PAL_CONDITION }, + { .data = BetMenuUIPAL, .tag = PAL_UI }, + { .data = Credit_Icon_PAL, .tag = PAL_CREDIT_ICON }, + { .data = Digits_Pal, .tag = PAL_DIGITS }, + { .data = Cursor_PAL, .tag = PAL_CURSOR }, + { .data = Countdown_PAL, .tag = PAL_COUNTDOWN }, + {} +}; + +static const struct SpritePalette sSpritePalettes2[] = +{ + { .data = Clef_PAL, .tag = PAL_CLEFAIRY }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Clefairy = +{ + .data = Clef_GFX, + .size = 0x1000, + .tag = GFX_CLEFAIRY, +}; + +static const struct OamData sOamData_Clefairy = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sClefAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(32, 20), + ANIMCMD_FRAME(64, 20), + ANIMCMD_FRAME(96, 20), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sClefAnimCmds[] = { + sClefAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Clefairy = +{ + .tileTag = GFX_CLEFAIRY, + .paletteTag = PAL_CLEFAIRY, + .oam = &sOamData_Clefairy, + .anims = sClefAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Countdown_3 = +{ + .data = Countdown_3_GFX, + .size = 0x800, + .tag = GFX_COUNTDOWN_3, +}; + +static const struct OamData sOamData_Countdown = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Countdown_3 = +{ + .tileTag = GFX_COUNTDOWN_3, + .paletteTag = PAL_COUNTDOWN, + .oam = &sOamData_Countdown, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Countdown_2 = +{ + .data = Countdown_2_GFX, + .size = 0x800, + .tag = GFX_COUNTDOWN_2, +}; + +static const struct SpriteTemplate sSpriteTemplate_Countdown_2 = +{ + .tileTag = GFX_COUNTDOWN_2, + .paletteTag = PAL_COUNTDOWN, + .oam = &sOamData_Countdown, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Countdown_1 = +{ + .data = Countdown_1_GFX, + .size = 0x800, + .tag = GFX_COUNTDOWN_1, +}; + +static const struct SpriteTemplate sSpriteTemplate_Countdown_1 = +{ + .tileTag = GFX_COUNTDOWN_1, + .paletteTag = PAL_COUNTDOWN, + .oam = &sOamData_Countdown, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Go = +{ + .data = Go_GFX, + .size = 0x800, + .tag = GFX_GO, +}; + +static const struct SpriteTemplate sSpriteTemplate_Go = +{ + .tileTag = GFX_GO, + .paletteTag = PAL_COUNTDOWN, + .oam = &sOamData_Countdown, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Ponyta_OW = +{ + .data = Ponyta_OW_GFX, + .size = 0x600, + .tag = GFX_PONYTA_OW, +}; + +static const struct OamData sOamData_Horse_OW = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sHorseAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_END +}; + +static const union AnimCmd sHorseAnimCmd_1[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sHorseAnimCmds[] = { + sHorseAnimCmd_0, + sHorseAnimCmd_1, +}; + +static const struct SpriteTemplate sSpriteTemplate_Ponyta_OW_Normal = +{ + .tileTag = GFX_PONYTA_OW, + .paletteTag = PAL_PONYTA, + .oam = &sOamData_Horse_OW, + .anims = sHorseAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Ponyta_OW_Shiny = +{ + .tileTag = GFX_PONYTA_OW, + .paletteTag = PAL_PONYTA_SHINY, + .oam = &sOamData_Horse_OW, + .anims = sHorseAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Rapidash_OW = +{ + .data = Rapidash_OW_GFX, + .size = 0x600, + .tag = GFX_RAPIDASH_OW, +}; + +static const struct SpriteTemplate sSpriteTemplate_Rapidash_OW_Normal = +{ + .tileTag = GFX_RAPIDASH_OW, + .paletteTag = PAL_RAPIDASH, + .oam = &sOamData_Horse_OW, + .anims = sHorseAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Rapidash_OW_Shiny = +{ + .tileTag = GFX_RAPIDASH_OW, + .paletteTag = PAL_RAPIDASH_SHINY, + .oam = &sOamData_Horse_OW, + .anims = sHorseAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Rattata_OW = +{ + .data = Rattata_OW_GFX, + .size = 0x200, + .tag = GFX_RATTATA_OW, +}; + +static const struct OamData sOamData_RatFish_OW = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sRattataAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_END +}; + +static const union AnimCmd sRattataAnimCmd_1[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sRattataAnimCmds[] = { + sRattataAnimCmd_0, + sRattataAnimCmd_1, +}; + +static const struct SpriteTemplate sSpriteTemplate_Rattata_OW_Normal = +{ + .tileTag = GFX_RATTATA_OW, + .paletteTag = PAL_RATTATA, + .oam = &sOamData_RatFish_OW, + .anims = sRattataAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Rattata_OW_Shiny = +{ + .tileTag = GFX_RATTATA_OW, + .paletteTag = PAL_RATTATA_SHINY, + .oam = &sOamData_RatFish_OW, + .anims = sRattataAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Feebas_OW = +{ + .data = Feebas_OW_GFX, + .size = 0x200, + .tag = GFX_FEEBAS_OW, +}; + +static const union AnimCmd sFeebasAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(8, 20), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sFeebasAnimCmds[] = { + sFeebasAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Feebas_OW_Normal = +{ + .tileTag = GFX_FEEBAS_OW, + .paletteTag = PAL_FEEBAS, + .oam = &sOamData_RatFish_OW, + .anims = sFeebasAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Feebas_OW_Shiny = +{ + .tileTag = GFX_FEEBAS_OW, + .paletteTag = PAL_FEEBAS_SHINY, + .oam = &sOamData_RatFish_OW, + .anims = sFeebasAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheets_CreditsInterface[] = +{ + { + .data = Digits_Gfx, + .size = 0x280, + .tag = GFX_CREDIT_DIGITS + }, + {} +}; + +static const struct OamData sOam_CreditDigit = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2, +}; + +static const struct SpriteTemplate sSpriteTemplate_CreditDigit = +{ + .tileTag = GFX_CREDIT_DIGITS, + .paletteTag = PAL_DIGITS, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct CompressedSpriteSheet sSpriteSheets_BetInterface[] = +{ + { + .data = Digits_2_Gfx, + .size = 0x280, + .tag = GFX_BET_DIGITS + }, + {} +}; + +static const struct SpriteTemplate sSpriteTemplate_BetDigit = +{ + .tileTag = GFX_BET_DIGITS, + .paletteTag = PAL_DIGITS, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct CompressedSpriteSheet sSpriteSheets_PotentialInterface[] = +{ + { + .data = Digits_2_Gfx, + .size = 0x280, + .tag = GFX_POTENTIAL_DIGITS + }, + {} +}; + +static const struct SpriteTemplate sSpriteTemplate_PotentialDigit = +{ + .tileTag = GFX_POTENTIAL_DIGITS, + .paletteTag = PAL_DIGITS, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct CompressedSpriteSheet sSpriteSheet_P10 = +{ + .data = P10_GFX, + .size = 0x200, + .tag = GFX_P10, +}; + +static const struct OamData sOamData_P10 = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sP10AnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(8, 20), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sP10AnimCmds[] = { + sP10AnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_P10 = +{ + .tileTag = GFX_P10, + .paletteTag = PAL_DIGITS, + .oam = &sOamData_P10, + .anims = sP10AnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Credit_Icon = +{ + .data = Credit_Icon_GFX, + .size = 0x80, + .tag = GFX_CREDIT_ICON, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Credit_Icon_Red = +{ + .data = Credit_Red_Icon_GFX, + .size = 0x80, + .tag = GFX_CREDIT_ICON_RED, +}; + +static const struct OamData sOamData_Credit_Icon = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Credit_Icon = +{ + .tileTag = GFX_CREDIT_ICON, + .paletteTag = PAL_CREDIT_ICON, + .oam = &sOamData_Credit_Icon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Credit_Icon_Red = +{ + .tileTag = GFX_CREDIT_ICON_RED, + .paletteTag = PAL_CREDIT_ICON, + .oam = &sOamData_Credit_Icon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Name_Ponyta = +{ + .data = Name_PonytaGFX, + .size = 0x400, + .tag = GFX_NAME_PONYTA, +}; + +static const struct OamData sOamData_Menu_Data = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Name_Ponyta = +{ + .tileTag = GFX_NAME_PONYTA, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Name_Rapidash = +{ + .data = Name_RapidashGFX, + .size = 0x400, + .tag = GFX_NAME_RATTATA, +}; + +static const struct SpriteTemplate sSpriteTemplate_Name_Rapidash = +{ + .tileTag = GFX_NAME_RAPIDASH, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Name_Rattata = +{ + .data = Name_RattataGFX, + .size = 0x400, + .tag = GFX_NAME_RATTATA, +}; + +static const struct SpriteTemplate sSpriteTemplate_Name_Rattata = +{ + .tileTag = GFX_NAME_RATTATA, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Name_Feebas = +{ + .data = Name_FeebasGFX, + .size = 0x400, + .tag = GFX_NAME_FEEBAS, +}; + +static const struct SpriteTemplate sSpriteTemplate_Name_Feebas = +{ + .tileTag = GFX_NAME_FEEBAS, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Payout_1 = +{ + .data = Payout_1_GFX, + .size = 0x400, + .tag = GFX_PAYOUT_1, +}; + +static const struct SpriteTemplate sSpriteTemplate_Payout_1 = +{ + .tileTag = GFX_PAYOUT_1, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Payout_2 = +{ + .data = Payout_2_GFX, + .size = 0x400, + .tag = GFX_PAYOUT_2, +}; + +static const struct SpriteTemplate sSpriteTemplate_Payout_2 = +{ + .tileTag = GFX_PAYOUT_2, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Payout_3 = +{ + .data = Payout_3_GFX, + .size = 0x400, + .tag = GFX_PAYOUT_3, +}; + +static const struct SpriteTemplate sSpriteTemplate_Payout_3 = +{ + .tileTag = GFX_PAYOUT_3, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Payout_4 = +{ + .data = Payout_4_GFX, + .size = 0x400, + .tag = GFX_PAYOUT_4, +}; + +static const struct SpriteTemplate sSpriteTemplate_Payout_4 = +{ + .tileTag = GFX_PAYOUT_4, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Payout_5 = +{ + .data = Payout_5_GFX, + .size = 0x400, + .tag = GFX_PAYOUT_5, +}; + +static const struct SpriteTemplate sSpriteTemplate_Payout_5 = +{ + .tileTag = GFX_PAYOUT_5, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Payout_6 = +{ + .data = Payout_6_GFX, + .size = 0x400, + .tag = GFX_PAYOUT_6, +}; + +static const struct SpriteTemplate sSpriteTemplate_Payout_6 = +{ + .tileTag = GFX_PAYOUT_6, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Payout_7 = +{ + .data = Payout_7_GFX, + .size = 0x400, + .tag = GFX_PAYOUT_7, +}; + +static const struct SpriteTemplate sSpriteTemplate_Payout_7 = +{ + .tileTag = GFX_PAYOUT_7, + .paletteTag = PAL_BET_MENU_TEXT, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_UI_1 = +{ + .data = UI_1_GFX, + .size = 0x400, + .tag = GFX_UI_1, +}; + +static const struct SpriteTemplate sSpriteTemplate_UI_1 = +{ + .tileTag = GFX_UI_1, + .paletteTag = PAL_UI, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_UI_2 = +{ + .data = UI_2_GFX, + .size = 0x400, + .tag = GFX_UI_2, +}; + +static const struct SpriteTemplate sSpriteTemplate_UI_2 = +{ + .tileTag = GFX_UI_2, + .paletteTag = PAL_UI, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_UI_3 = +{ + .data = UI_3_GFX, + .size = 0x400, + .tag = GFX_UI_3, +}; + +static const struct SpriteTemplate sSpriteTemplate_UI_3 = +{ + .tileTag = GFX_UI_3, + .paletteTag = PAL_UI, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_UI_4 = +{ + .data = UI_4_GFX, + .size = 0x400, + .tag = GFX_UI_4, +}; + +static const struct SpriteTemplate sSpriteTemplate_UI_4 = +{ + .tileTag = GFX_UI_4, + .paletteTag = PAL_UI, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_UI_5 = +{ + .data = UI_5_GFX, + .size = 0x400, + .tag = GFX_UI_5, +}; + +static const struct SpriteTemplate sSpriteTemplate_UI_5 = +{ + .tileTag = GFX_UI_5, + .paletteTag = PAL_UI, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_UI_6 = +{ + .data = UI_6_GFX, + .size = 0x400, + .tag = GFX_UI_6, +}; + +static const struct SpriteTemplate sSpriteTemplate_UI_6 = +{ + .tileTag = GFX_UI_6, + .paletteTag = PAL_UI, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Arrow_1 = +{ + .data = Arrow_1_GFX, + .size = 0x100, + .tag = GFX_ARROW_1, +}; + +static const struct OamData sOamData_Arrows = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sArrowAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sArrowAnimCmds[] = { + sArrowAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Arrow_1 = +{ + .tileTag = GFX_ARROW_1, + .paletteTag = PAL_UI, + .oam = &sOamData_Arrows, + .anims = sArrowAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Arrow_2 = +{ + .data = Arrow_2_GFX, + .size = 0x100, + .tag = GFX_ARROW_2, +}; + +static const struct SpriteTemplate sSpriteTemplate_Arrow_2 = +{ + .tileTag = GFX_ARROW_2, + .paletteTag = PAL_UI, + .oam = &sOamData_Arrows, + .anims = sArrowAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cursor = +{ + .data = Cursor_GFX, + .size = 0x100, + .tag = GFX_CURSOR, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cursor = +{ + .tileTag = GFX_CURSOR, + .paletteTag = PAL_CURSOR, + .oam = &sOamData_Arrows, + .anims = sArrowAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Condition_1 = +{ + .data = Condition_1_GFX, + .size = 0x400, + .tag = GFX_CONDITION_1, +}; + +static const struct SpriteTemplate sSpriteTemplate_Condition_1 = +{ + .tileTag = GFX_CONDITION_1, + .paletteTag = PAL_CONDITION, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Condition_2 = +{ + .data = Condition_2_GFX, + .size = 0x400, + .tag = GFX_CONDITION_2, +}; + +static const struct SpriteTemplate sSpriteTemplate_Condition_2 = +{ + .tileTag = GFX_CONDITION_2, + .paletteTag = PAL_CONDITION, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Condition_3 = +{ + .data = Condition_3_GFX, + .size = 0x400, + .tag = GFX_CONDITION_3, +}; + +static const struct SpriteTemplate sSpriteTemplate_Condition_3 = +{ + .tileTag = GFX_CONDITION_3, + .paletteTag = PAL_CONDITION, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Condition_4 = +{ + .data = Condition_4_GFX, + .size = 0x400, + .tag = GFX_CONDITION_4, +}; + +static const struct SpriteTemplate sSpriteTemplate_Condition_4 = +{ + .tileTag = GFX_CONDITION_4, + .paletteTag = PAL_CONDITION, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Condition_5 = +{ + .data = Condition_5_GFX, + .size = 0x400, + .tag = GFX_CONDITION_5, +}; + +static const struct SpriteTemplate sSpriteTemplate_Condition_5 = +{ + .tileTag = GFX_CONDITION_5, + .paletteTag = PAL_CONDITION, + .oam = &sOamData_Menu_Data, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Ponyta = +{ + .data = PonytaGFX, + .size = 0x800, + .tag = GFX_PONYTA, +}; + +static const struct OamData sOamData_Pokemon = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_PonytaNormal = +{ + .tileTag = GFX_PONYTA, + .paletteTag = PAL_PONYTA, + .oam = &sOamData_Pokemon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_PonytaShiny = +{ + .tileTag = GFX_PONYTA, + .paletteTag = PAL_PONYTA_SHINY, + .oam = &sOamData_Pokemon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Rapidash = +{ + .data = RapidashGFX, + .size = 0x800, + .tag = GFX_RAPIDASH, +}; + +static const struct SpriteTemplate sSpriteTemplate_RapidashNormal = +{ + .tileTag = GFX_RAPIDASH, + .paletteTag = PAL_RAPIDASH, + .oam = &sOamData_Pokemon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_RapidashShiny = +{ + .tileTag = GFX_RAPIDASH, + .paletteTag = PAL_RAPIDASH_SHINY, + .oam = &sOamData_Pokemon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Rattata = +{ + .data = RattataGFX, + .size = 0x800, + .tag = GFX_RATTATA, +}; + +static const struct SpriteTemplate sSpriteTemplate_RattataNormal = +{ + .tileTag = GFX_RATTATA, + .paletteTag = PAL_RATTATA, + .oam = &sOamData_Pokemon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_RattataShiny = +{ + .tileTag = GFX_RATTATA, + .paletteTag = PAL_RATTATA_SHINY, + .oam = &sOamData_Pokemon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Feebas = +{ + .data = FeebasGFX, + .size = 0x800, + .tag = GFX_FEEBAS, +}; + +static const struct SpriteTemplate sSpriteTemplate_FeebasNormal = +{ + .tileTag = GFX_FEEBAS, + .paletteTag = PAL_FEEBAS, + .oam = &sOamData_Pokemon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_FeebasShiny = +{ + .tileTag = GFX_FEEBAS, + .paletteTag = PAL_FEEBAS_SHINY, + .oam = &sOamData_Pokemon, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void StartDerby(void) +{ + u8 taskId = 0; + sDerby = AllocZeroed(sizeof(struct Derby)); + taskId = CreateTask(FadeToDerbyScreen, 0); +} + +typedef struct { + int SpeciesId; // 0-4 Ponyta, 5 Rattata, 6 Rapidash, 7 Feebas + u8 StartSpeed; + u8 RaceSpeed; +} RaceSpeeds; + +static const RaceSpeeds RaceSpeedsValues[] = { + {0, 4, 5}, // Ponyta 1 + {1, 3, 5}, // Ponyta 2 + {2, 5, 4}, // Ponyta 3 + {3, 5, 5}, // Ponyta 4 + {4, 3, 6}, // Ponyta 5 + {5, 5, 4}, // Rattata + {6, 4, 7}, // Rapidash + {7, 0, 0}, // Feebas +}; + +typedef struct { + int ID; + u8 NameString[16]; +} RattataNames; + +static const RattataNames RattataNamesValues[] = { + {0, _("REUBEN")}, + {1, _("SPEEDSTER")}, + {2, _("SQUEAKY")}, + {3, _("DASH")}, + {4, _("SCURRIER")}, + {5, _("CHASE")}, + {6, _("BRIAN")}, + {7, _("TAILSPIN")}, + {8, _("WHISKERS")}, + {9, _("RUSH")}, + {10, _("ZOOMER")}, + {11, _("ZOOMIE")}, + {12, _("JOEY'S RATTATA")}, + {13, _("RATNADO")}, + {14, _("RATICATOR")}, + {15, _("RATTY")}, + {16, _("NYOINK")}, + {17, _("RATSUPREME")}, + {18, _("REMY")}, + {19, _("RATRON")}, + {20, _("EL RATTO")}, + {21, _("TURBO")}, + {22, _("RATTHEW")}, + {23, _("RATTEUS")}, + {24, _("RATTINA")}, + {25, _("RATABELLA")}, + {26, _("RATTONIO")}, + {27, _("RATFORD")}, + {28, _("WISCONSIN")}, + {29, _("STEVE")}, + {30, _("RATALIE")}, + {31, _("RATALIA")}, + {32, _("RATALINA")}, + {33, _("RATIGAIL")}, + {34, _("RATASHA")}, + {35, _("MR. DIRTY")}, + {36, _("RATILDA")}, + {37, _("RATRICIA")}, + {38, _("RATRICK")}, + {39, _("RATISON")}, + {40, _("RATATHAN")}, + {41, _("RATOPHER")}, + {42, _("RATSON")}, + {43, _("CHEESER")}, + {44, _("SQUIRBY")}, + {45, _("BUCKY")}, + {46, _("CHOMPY")}, + {47, _("SCABBY")}, + {48, _("HAMELIN")}, + {49, _("CHUBBS")}, + {50, _("CHEDDAR")}, + {51, _("PIP")}, + {52, _("SQUEAKER")}, +}; + +typedef struct { + int ID; + u8 NameString[16]; +} PonytaNames; + +static const PonytaNames PonytaNamesValues[] = { + {0, _("AIR BISCUIT")}, + {1, _("MR. WINKY")}, + {2, _("FLAMEFURY")}, + {3, _("TROT")}, + {4, _("BURNOUT")}, + {5, _("STRIDER")}, + {6, _("RUBY")}, + {7, _("STUD MUFFIN")}, + {8, _("FIERYDASH")}, + {9, _("MOON ROCKS")}, + {10, _("WILDFIRE")}, + {11, _("FIRESPIN")}, + {12, _("CHAMP")}, + {13, _("POMPOM")}, + {14, _("PIPPIN")}, + {15, _("DANDELION")}, + {16, _("CINNAMON")}, + {17, _("STARDUST")}, + {18, _("HOT STREAK")}, + {19, _("COLT")}, + {20, _("HOPE")}, + {21, _("LUCKY")}, + {22, _("JACKPOT")}, + {23, _("BIGBUCKS")}, + {24, _("CHACHING")}, + {25, _("PONY SOPRANO")}, + {26, _("HOTBET")}, + {27, _("TAPONE")}, + {28, _("LIL SPEEDY")}, + {29, _("LEONIE")}, + {30, _("RISKITALL")}, + {31, _("FASTFIRE")}, + {32, _("LUCKYDASH")}, + {33, _("HOT GLUE")}, + {34, _("FLICKER")}, + {35, _("BREADWINNER")}, + {36, _("LUCKY CHARM")}, + {37, _("GOLDEN RUN")}, + {38, _("SCARLET")}, + {39, _("DYNAMITE")}, + {40, _("SUNSET")}, + {41, _("ON THE DOT")}, + {42, _("FASTFORTUNE")}, + {43, _("STEADYSTRIDE")}, + {44, _("MARSCAPONE")}, + {45, _("HONSE")}, + {46, _("HERO")}, + {47, _("GOLDEN HOPE")}, + {48, _("RAPIDASH")}, + {49, _("FLASHFIRE")}, + {50, _("CROWN JEWEL")}, + {51, _("WHINNEY")}, + {52, _("MAJESTY")}, +}; + +typedef struct { + int ID; + u8 NameString[16]; +} RapidashNames; + +static const RapidashNames RapidashNamesValues[] = { + {0, _("SCORCHER")}, + {1, _("RED COMET")}, + {2, _("RAGINGFIRE")}, + {3, _("ON-A-ROLLA")}, + {4, _("TRILLIONAIRE")}, + {5, _("HOT PURSUIT")}, + {6, _("BURNING GLORY")}, + {7, _("APOLLO")}, + {8, _("BIG HONSE")}, + {9, _("GREASE FIRE")}, + {10, _("WILD BLAZE")}, + {11, _("RED FORTUNE")}, + {12, _("CRIMSON")}, + {13, _("VICTORY")}, + {14, _("PONYTA")}, + {15, _("FIREBALL")}, + {16, _("BLAST BURN")}, + {17, _("FLAMEY")}, + {18, _("SPARKLE")}, + {19, _("DAPIRASH")}, + {20, _("BURNTOUT")}, + {21, _("MISFIRE")}, + {22, _("HUFFN'PUFF")}, + {23, _("HEATCRASH")}, + {24, _("FITYFIFTY")}, + {25, _("COMET")}, + {26, _("SUNSHINE")}, + {27, _("GOLDENGALLOP")}, + {28, _("GOLDMINE")}, + {29, _("PEGASUS")}, + {30, _("X SPEED")}, + {31, _("WISH")}, + {32, _("BIG JAMES")}, + {33, _("VELVET CROWN")}, + {34, _("LUCKY STRIKE")}, + {35, _("RED BULLET")}, + {36, _("BLAZING STAR")}, + {37, _("HOOF")}, + {38, _("BURNING SKY")}, + {39, _("IRON WILL")}, + {40, _("EMBER DAWN")}, + {41, _("NOBLE VICTORY")}, + {42, _("GOLDRUSH")}, + {43, _("BEEF")}, + {44, _("BOJACK")}, + {45, _("SCARLET WIND")}, + {46, _("BOSS")}, + {47, _("BUTTER")}, + {48, _("PORKCHOP")}, + {49, _("HOT PANTS")}, + {50, _("POT ROAST")}, + {51, _("PAPRIKA")}, + {52, _("EPONA")}, +}; + +typedef struct { + int ID; + u8 NameString[16]; +} FeebasNames; + +static const FeebasNames FeebasNamesValues[] = { + {0, _("FISK")}, + {1, _("BINGLE")}, + {2, _("EEL MCNEAL")}, + {3, _("BASSINGA")}, + {4, _("BEEFAS")}, + {5, _("SKIPPER")}, + {6, _("BONES")}, + {7, _("KELPSTER")}, + {8, _("LOOPDELOOP")}, + {9, _("FINN")}, + {10, _("TROUT TROUBLE")}, + {11, _("THROTTLE")}, + {12, _("STINKY")}, + {13, _("MANOWAR")}, + {14, _("NEPTUNE")}, + {15, _("MIRAKLE B.")}, + {16, _("FISH")}, + {17, _("FREDDI FISH")}, + {18, _("SWIMMY MCFLOP")}, + {19, _("SOGGY")}, + {20, _("WIGGLY")}, + {21, _("GUPPY")}, + {22, _("WATERLOG")}, + {23, _("FLOUNDER")}, + {24, _("THE DRIP")}, + {25, _("WIGGLES")}, + {26, _("BOOGERFISH")}, + {27, _("THE BLOB")}, + {28, _("DRIPDROP")}, + {29, _("FEEBUS")}, + {30, _("BIG HOSS")}, + {31, _("SPLISHY")}, + {32, _("BLOOP")}, + {33, _("FLOPSTER")}, + {34, _("WET TOWEL")}, + {35, _("DISASTER")}, + {36, _("MR. FIASCO")}, + {37, _("SPLOOSH")}, + {38, _("SKIDOOSH")}, + {39, _("BELLYFLOP BOB")}, + {40, _("GURGLES")}, + {41, _("WIBBLE")}, + {42, _("NOTSOFAST")}, + {43, _("BLOOPMCSPLASH")}, + {44, _("WET SHAME")}, + {45, _("NOODLE")}, + {46, _("MEATLOAF")}, + {47, _("THEBIGSPLASH")}, + {48, _("CANNONBALL")}, + {49, _("GLUBGLUB")}, + {50, _("FLOPSTAR")}, + {51, _("PUDDLEHOPPER")}, + {52, _("DR. FUME")}, +}; + +#define MAX_NAMES 53 + +static void GetRacerSpeeds(u8 num, u8 racer) +{ + u8 sSpeed; + u8 rSpeed; + u8 condition; + int i; + + for (i = 0; i < 8; i++) { + if (RaceSpeedsValues[i].SpeciesId == num) { + sSpeed = RaceSpeedsValues[i].StartSpeed; + rSpeed = RaceSpeedsValues[i].RaceSpeed; + } + } + + if (racer == 0) + { + sDerby->Racer1sSpeed = sSpeed * (1 + (sDerby->Condition_1 / 10.0f)); + sDerby->Racer1rSpeed = rSpeed * (1 + (sDerby->Condition_1 / 10.0f)); + condition = sDerby->Condition_1 + 1; + if (sDerby->Species_1 != 7) // If it's not Feebas + { + if ((num == 6) && (condition >= 4)) // Highest + { + sDerby->Racer1SpeedPay = 1; // x1.1 + } + else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) + { + sDerby->Racer1SpeedPay = 2; // x1.2 + } + else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) + { + sDerby->Racer1SpeedPay = 3; // x1.3 + } + else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) + { + sDerby->Racer1SpeedPay = 4; // x1.5 + } + else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) + { + sDerby->Racer1SpeedPay = 5; // x2.0 + } + else if ((num == 5) && (condition == 1)) // Lowest + { + sDerby->Racer1SpeedPay = 6; // x5.0 + } + } + else // Feebas (never wins) + { + sDerby->Racer1SpeedPay = 7; // Jackpot + } + } + else if (racer == 1) + { + sDerby->Racer2sSpeed = sSpeed * (1 + (sDerby->Condition_2 / 10.0f)); + sDerby->Racer2rSpeed = rSpeed * (1 + (sDerby->Condition_2 / 10.0f)); + condition = sDerby->Condition_2 + 1; + if (sDerby->Species_2 != 7) // If it's not Feebas + { + if ((num == 6) && (condition >= 4)) // Highest + { + sDerby->Racer2SpeedPay = 1; // x1.1 + } + else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) + { + sDerby->Racer2SpeedPay = 2; // x1.2 + } + else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) + { + sDerby->Racer2SpeedPay = 3; // x1.3 + } + else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) + { + sDerby->Racer2SpeedPay = 4; // x1.5 + } + else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) + { + sDerby->Racer2SpeedPay = 5; // x2.0 + } + else if ((num == 5) && (condition == 1)) // Lowest + { + sDerby->Racer2SpeedPay = 6; // x5.0 + } + } + else // Feebas (never wins) + { + sDerby->Racer2SpeedPay = 7; // Jackpot + } + } + else if (racer == 2) + { + sDerby->Racer3sSpeed = sSpeed * (1 + (sDerby->Condition_3 / 10.0f)); + sDerby->Racer3rSpeed = rSpeed * (1 + (sDerby->Condition_3 / 10.0f)); + condition = sDerby->Condition_3 + 1; + if (sDerby->Species_3 != 7) // If it's not Feebas + { + if ((num == 6) && (condition >= 4)) // Highest + { + sDerby->Racer3SpeedPay = 1; // x1.1 + } + else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) + { + sDerby->Racer3SpeedPay = 2; // x1.2 + } + else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) + { + sDerby->Racer3SpeedPay = 3; // x1.3 + } + else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) + { + sDerby->Racer3SpeedPay = 4; // x1.5 + } + else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) + { + sDerby->Racer3SpeedPay = 5; // x2.0 + } + else if ((num == 5) && (condition == 1)) // Lowest + { + sDerby->Racer3SpeedPay = 6; // x5.0 + } + } + else // Feebas (never wins) + { + sDerby->Racer3SpeedPay = 7; // Jackpot + } + } + else if (racer == 3) + { + sDerby->Racer4sSpeed = sSpeed * (1 + (sDerby->Condition_4 / 10.0f)); + sDerby->Racer4rSpeed = rSpeed * (1 + (sDerby->Condition_4 / 10.0f)); + condition = sDerby->Condition_4 + 1; + if (sDerby->Species_4 != 7) // If it's not Feebas + { + if ((num == 6) && (condition >= 4)) // Highest + { + sDerby->Racer4SpeedPay = 1; // x1.1 + } + else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) + { + sDerby->Racer4SpeedPay = 2; // x1.2 + } + else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) + { + sDerby->Racer4SpeedPay = 3; // x1.3 + } + else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) + { + sDerby->Racer4SpeedPay = 4; // x1.5 + } + else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) + { + sDerby->Racer4SpeedPay = 5; // x2.0 + } + else if ((num == 5) && (condition == 1)) // Lowest + { + sDerby->Racer4SpeedPay = 6; // x5.0 + } + } + else // Feebas (never wins) + { + sDerby->Racer4SpeedPay = 7; // Jackpot + } + } + else if (racer == 4) + { + sDerby->Racer5sSpeed = sSpeed * (1 + (sDerby->Condition_5 / 10.0f)); + sDerby->Racer5rSpeed = rSpeed * (1 + (sDerby->Condition_5 / 10.0f)); + condition = sDerby->Condition_5 + 1; + if (sDerby->Species_5 != 7) // If it's not Feebas + { + if ((num == 6) && (condition >= 4)) // Highest + { + sDerby->Racer5SpeedPay = 1; // x1.1 + } + else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) + { + sDerby->Racer5SpeedPay = 2; // x1.2 + } + else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) + { + sDerby->Racer5SpeedPay = 3; // x1.3 + } + else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) + { + sDerby->Racer5SpeedPay = 4; // x1.5 + } + else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) + { + sDerby->Racer5SpeedPay = 5; // x2.0 + } + else if ((num == 5) && (condition == 1)) // Lowest + { + sDerby->Racer5SpeedPay = 6; // x5.0 + } + } + else // Feebas (never wins) + { + sDerby->Racer5SpeedPay = 7; // Jackpot + } + } + else if (racer == 5) + { + sDerby->Racer6sSpeed = sSpeed * (1 + (sDerby->Condition_6 / 10.0f)); + sDerby->Racer6rSpeed = rSpeed * (1 + (sDerby->Condition_6 / 10.0f)); + condition = sDerby->Condition_6 + 1; + if (sDerby->Species_6 != 7) // If it's not Feebas + { + if ((num == 6) && (condition >= 4)) // Highest + { + sDerby->Racer6SpeedPay = 1; // x1.1 + } + else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) + { + sDerby->Racer6SpeedPay = 2; // x1.2 + } + else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) + { + sDerby->Racer6SpeedPay = 3; // x1.3 + } + else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) + { + sDerby->Racer6SpeedPay = 4; // x1.5 + } + else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) + { + sDerby->Racer6SpeedPay = 5; // x2.0 + } + else if ((num == 5) && (condition == 1)) // Lowest + { + sDerby->Racer6SpeedPay = 6; // x5.0 + } + } + else // Feebas (never wins) + { + sDerby->Racer6SpeedPay = 7; // Jackpot + } + } +} + +void GetNewDerby(void) +{ + u8 num100_1; + u8 num10_1; + u8 num1_1; + u8 num100_2; + u8 num10_2; + u8 num1_2; + u8 num100_3; + u8 num10_3; + u8 num1_3; + u8 num100_4; + u8 num10_4; + u8 num1_4; + u8 num100_5; + u8 num10_5; + u8 num1_5; + u8 num100_6; + u8 num10_6; + u8 num1_6; + u32 odds; + u8 odd_one; + u32 sOdds; + + int i; + int j; + int temp; + u8 conditions[6]; + int condition4Index; + int condition3Index; + int condition2Index; + + odds = (Random() % 100); // Feebas: 0-99 + if (odds != 99) // No Feebas + { + odds = (Random() % 300); // Ponyta/Rapidash/Rattata 0-2 + if (odds < 100) // All Ponyta + { + num100_1 = (Random() % 5); // Ponyta 0-4 + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_1 = 1; + } + else + { + num10_1 = 0; + } + num1_1 = (Random() % 5); // 0-4 + + num100_2 = (Random() % 5); // Ponyta 0-4 + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_2 = 1; + } + else + { + num10_2 = 0; + } + num1_2 = (Random() % 5); // 0-4 + + num100_3 = (Random() % 5); // Ponyta 0-4 + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_3 = 1; + } + else + { + num10_3 = 0; + } + num1_3 = (Random() % 5); // 0-4 + + num100_4 = (Random() % 5); // Ponyta 0-4 + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_4 = 1; + } + else + { + num10_4 = 0; + } + num1_4 = (Random() % 5); // 0-4 + + num100_5 = (Random() % 5); // Ponyta 0-4 + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_5 = 1; + } + else + { + num10_5 = 0; + } + num1_5 = (Random() % 5); // 0-4 + + num100_6 = (Random() % 5); // Ponyta 0-4 + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_6 = 1; + } + else + { + num10_6 = 0; + } + num1_6 = (Random() % 5); // 0-4 + } + else if ((odds >= 100) && (odds < 200)) // Rattata + { + odd_one = (Random() % 6); // 0-7; Pick the extra mon + if (odd_one != 0) + { + num100_1 = (Random() % 5); // Ponyta 0-4 + } + else // Rat! + { + num100_1 = 5; // Rattata + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_1 = 1; + } + else + { + num10_1 = 0; + } + num1_1 = (Random() % 5); // 0-4 + + + if (odd_one != 1) + { + num100_2 = (Random() % 5); // Ponyta 0-4 + } + else // Rat! + { + num100_2 = 5; // Rattata + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_2 = 1; + } + else + { + num10_2 = 0; + } + num1_2 = (Random() % 5); // 0-4 + + + if (odd_one != 2) + { + num100_3 = (Random() % 5); // Ponyta 0-4 + } + else // Rat! + { + num100_3 = 5; // Rattata + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_3 = 1; + } + else + { + num10_3 = 0; + } + num1_3 = (Random() % 5); // 0-4 + + + if (odd_one != 3) + { + num100_4 = (Random() % 5); // Ponyta 0-4 + } + else // Rat! + { + num100_4 = 5; // Rattata + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_4 = 1; + } + else + { + num10_4 = 0; + } + num1_4 = (Random() % 5); // 0-4 + + + if (odd_one != 4) + { + num100_5 = (Random() % 5); // Ponyta 0-4 + } + else // Rat! + { + num100_5 = 5; // Rattata + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_5 = 1; + } + else + { + num10_5 = 0; + } + num1_5 = (Random() % 5); // 0-4 + + + if (odd_one != 5) + { + num100_6 = (Random() % 5); // Ponyta 0-4 + } + else // Rat! + { + num100_6 = 5; // Rattata + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_6 = 1; + } + else + { + num10_6 = 0; + } + num1_6 = (Random() % 5); // 0-4 + } + else // Rapidash + { + odd_one = (Random() % 6); // 0-7; Pick the extra mon + if (odd_one != 0) + { + num100_1 = (Random() % 5); // Ponyta 0-4 + } + else // Horse! + { + num100_1 = 6; // Rapidash + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_1 = 1; + } + else + { + num10_1 = 0; + } + num1_1 = (Random() % 5); // 0-4 + + + if (odd_one != 1) + { + num100_2 = (Random() % 5); // Ponyta 0-4 + } + else // Horse! + { + num100_2 = 6; // Rapidash + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_2 = 1; + } + else + { + num10_2 = 0; + } + num1_2 = (Random() % 5); // 0-4 + + + if (odd_one != 2) + { + num100_3 = (Random() % 5); // Ponyta 0-4 + } + else // Horse! + { + num100_3 = 6; // Rapidash + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_3 = 1; + } + else + { + num10_3 = 0; + } + num1_3 = (Random() % 5); // 0-4 + + + if (odd_one != 3) + { + num100_4 = (Random() % 5); // Ponyta 0-4 + } + else // Horse! + { + num100_4 = 6; // Rapidash + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_4 = 1; + } + else + { + num10_4 = 0; + } + num1_4 = (Random() % 5); // 0-4 + + + if (odd_one != 4) + { + num100_5 = (Random() % 5); // Ponyta 0-4 + } + else // Horse! + { + num100_5 = 6; // Rapidash + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_5 = 1; + } + else + { + num10_5 = 0; + } + num1_5 = (Random() % 5); // 0-4 + + + if (odd_one != 5) + { + num100_6 = (Random() % 5); // Ponyta 0-4 + } + else // Horse! + { + num100_6 = 6; // Rapidash + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_6 = 1; + } + else + { + num10_6 = 0; + } + num1_6 = (Random() % 5); // 0-4 + } + } + else // Feebas + { + odd_one = (Random() % 6); // 0-7; Pick the extra mon + if (odd_one != 0) + { + num100_1 = (Random() % 5); // Ponyta 0-4 + } + else // Fish! + { + num100_1 = 7; // Feebas + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_1 = 1; + } + else + { + num10_1 = 0; + } + num1_1 = (Random() % 5); // 0-4 + + + if (odd_one != 1) + { + num100_2 = (Random() % 5); // Ponyta 0-4 + } + else // Fish! + { + num100_2 = 7; // Feebas + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_2 = 1; + } + else + { + num10_2 = 0; + } + num1_2 = (Random() % 5); // 0-4 + + + if (odd_one != 2) + { + num100_3 = (Random() % 5); // Ponyta 0-4 + } + else // Fish! + { + num100_3 = 7; // Feebas + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_3 = 1; + } + else + { + num10_3 = 0; + } + num1_3 = (Random() % 5); // 0-4 + + + if (odd_one != 3) + { + num100_4 = (Random() % 5); // Ponyta 0-4 + } + else // Fish! + { + num100_4 = 7; // Feebas + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_4 = 1; + } + else + { + num10_4 = 0; + } + num1_4 = (Random() % 5); // 0-4 + + + if (odd_one != 4) + { + num100_5 = (Random() % 5); // Ponyta 0-4 + } + else // Fish! + { + num100_5 = 7; // Feebas + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_5 = 1; + } + else + { + num10_5 = 0; + } + num1_5 = (Random() % 5); // 0-4 + + + if (odd_one != 5) + { + num100_6 = (Random() % 5); // Ponyta 0-4 + } + else // Fish! + { + num100_6 = 7; // Feebas + } + sOdds = (Random() % 8192); + if (sOdds == 777) // Shiny + { + num10_6 = 1; + } + else + { + num10_6 = 0; + } + num1_6 = (Random() % 5); // 0-4 + } + + for (i = 0; i < 6; i++) { + conditions[i] = Random() % 2; + } + + condition4Index = Random() % 6; + conditions[condition4Index] = 4; + + do { + condition3Index = Random() % 6; + } while (condition3Index == condition4Index); + conditions[condition3Index] = 3; + + do { + condition2Index = Random() % 6; + } while (condition2Index == condition4Index || condition2Index == condition3Index); + conditions[condition2Index] = 2; + + num1_1 = conditions[0]; + num1_2 = conditions[1]; + num1_3 = conditions[2]; + num1_4 = conditions[3]; + num1_5 = conditions[4]; + num1_6 = conditions[5]; + + VarSet(DERBY_VAR_RACER_1, (num100_1 * 100) + (num10_1 * 10) + num1_1); + VarSet(DERBY_VAR_RACER_2, (num100_2 * 100) + (num10_2 * 10) + num1_2); + VarSet(DERBY_VAR_RACER_3, (num100_3 * 100) + (num10_3 * 10) + num1_3); + VarSet(DERBY_VAR_RACER_4, (num100_4 * 100) + (num10_4 * 10) + num1_4); + VarSet(DERBY_VAR_RACER_5, (num100_5 * 100) + (num10_5 * 10) + num1_5); + VarSet(DERBY_VAR_RACER_6, (num100_6 * 100) + (num10_6 * 10) + num1_6); + + FlagSet(DERBY_FLAG_RESET); +} + +void InitiateRacers(void) +{ + u32 number; + + // Species 1 + number = VarGet(DERBY_VAR_RACER_1); + sDerby->Species_1 = number / 100; // Hundreds place + sDerby->Shiny_1 = (number / 10) % 10; // Tens place + sDerby->Condition_1 = number % 10; // Ones place + + // Species 2 + number = VarGet(DERBY_VAR_RACER_2); + sDerby->Species_2 = number / 100; // Hundreds place + sDerby->Shiny_2 = (number / 10) % 10; // Tens place + sDerby->Condition_2 = number % 10; // Ones place + + // Species 3 + number = VarGet(DERBY_VAR_RACER_3); + sDerby->Species_3 = number / 100; // Hundreds place + sDerby->Shiny_3 = (number / 10) % 10; // Tens place + sDerby->Condition_3 = number % 10; // Ones place + + // Species 4 + number = VarGet(DERBY_VAR_RACER_4); + sDerby->Species_4 = number / 100; // Hundreds place + sDerby->Shiny_4 = (number / 10) % 10; // Tens place + sDerby->Condition_4 = number % 10; // Ones place + + // Species 5 + number = VarGet(DERBY_VAR_RACER_5); + sDerby->Species_5 = number / 100; // Hundreds place + sDerby->Shiny_5 = (number / 10) % 10; // Tens place + sDerby->Condition_5 = number % 10; // Ones place + + // Species 6 + number = VarGet(DERBY_VAR_RACER_6); + sDerby->Species_6 = number / 100; // Hundreds place + sDerby->Shiny_6 = (number / 10) % 10; // Tens place + sDerby->Condition_6 = number % 10; // Ones place +} + +static void CreatePokemonSprites(void) +{ + s16 x; + s16 y; + struct SpriteSheet s; + + x = 64; + y = 96; + + if (sDerby->Species_1 < 5) // Ponyta + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); + + if (sDerby->Shiny_1 == 0) // Normal + { + sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + } + } + else if (sDerby->Species_1 == 5) // Rattata + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); + + if (sDerby->Shiny_1 == 0) // Normal + { + sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + } + } + else if (sDerby->Species_1 == 6) // Rapidash + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); + + if (sDerby->Shiny_1 == 0) // Normal + { + sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + } + } + else // Feebas + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); + + if (sDerby->Shiny_1 == 0) // Normal + { + sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + } + } + + if (sDerby->Species_2 < 5) // Ponyta + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); + + if (sDerby->Shiny_2 == 0) // Normal + { + sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + } + } + else if (sDerby->Species_2 == 5) // Rattata + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); + + if (sDerby->Shiny_2 == 0) // Normal + { + sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + } + } + else if (sDerby->Species_2 == 6) // Rapidash + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); + + if (sDerby->Shiny_2 == 0) // Normal + { + sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_2].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + } + } + else // Feebas + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); + + if (sDerby->Shiny_1 == 0) // Normal + { + sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + } + } + + if (sDerby->Species_3 < 5) // Ponyta + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); + + if (sDerby->Shiny_3 == 0) // Normal + { + sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + } + } + else if (sDerby->Species_3 == 5) // Rattata + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); + + if (sDerby->Shiny_3 == 0) // Normal + { + sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + } + } + else if (sDerby->Species_3 == 6) // Rapidash + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); + + if (sDerby->Shiny_3 == 0) // Normal + { + sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_3].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + } + } + else // Feebas + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); + + if (sDerby->Shiny_3 == 0) // Normal + { + sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + } + } + + if (sDerby->Species_4 < 5) // Ponyta + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); + + if (sDerby->Shiny_4 == 0) // Normal + { + sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + } + } + else if (sDerby->Species_4 == 5) // Rattata + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); + + if (sDerby->Shiny_4 == 0) // Normal + { + sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + } + } + else if (sDerby->Species_4 == 6) // Rapidash + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); + + if (sDerby->Shiny_4 == 0) // Normal + { + sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_4].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + } + } + else // Feebas + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); + + if (sDerby->Shiny_4 == 0) // Normal + { + sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + } + } + + if (sDerby->Species_5 < 5) // Ponyta + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); + + if (sDerby->Shiny_5 == 0) // Normal + { + sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + } + } + else if (sDerby->Species_5 == 5) // Rattata + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); + + if (sDerby->Shiny_5 == 0) // Normal + { + sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + } + } + else if (sDerby->Species_5 == 6) // Rapidash + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); + + if (sDerby->Shiny_5 == 0) // Normal + { + sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_5].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + } + } + else // Feebas + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); + + if (sDerby->Shiny_5 == 0) // Normal + { + sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + } + } + + if (sDerby->Species_6 < 5) // Ponyta + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); + + if (sDerby->Shiny_6 == 0) // Normal + { + sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + } + else if (sDerby->Species_6 == 5) // Rattata + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); + + if (sDerby->Shiny_6 == 0) // Normal + { + sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + } + else if (sDerby->Species_6 == 6) // Rapidash + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); + + if (sDerby->Shiny_6 == 0) // Normal + { + sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_6].invisible = FALSE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + } + else // Feebas + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); + + if (sDerby->Shiny_6 == 0) // Normal + { + sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + else // Shiny + { + sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + } +} + +static void FadeToDerbyScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + SetMainCallback2(InitDerbyScreen); + DestroyTask(taskId); + } + break; + } +} + +static void UpdatePokemonSprites(void) +{ + if (sDerby->MenuPosition == 0) + { + gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + else if (sDerby->MenuPosition == 1) + { + gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_2].invisible = FALSE; + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + else if (sDerby->MenuPosition == 2) + { + gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_3].invisible = FALSE; + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + else if (sDerby->MenuPosition == 3) + { + gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_4].invisible = FALSE; + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + else if (sDerby->MenuPosition == 4) + { + gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_5].invisible = FALSE; + gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; + } + else if (sDerby->MenuPosition == 5) + { + gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; + gSprites[sDerby->SpeciesSpriteId_6].invisible = FALSE; + } +} + +static void CreateMenuData(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Ponyta); + + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Ponyta, 164, 60, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_1); + + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_1, 164, 93, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_1); + + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_1, 164, 124, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_UI_1); + + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_1, 64, 64, 0); +} + +static void UpdatePokemonSpeciesNames(void) +{ + u8 species = 0; + struct SpriteSheet s; + + if (sDerby->MenuPosition == 0) + { + species = sDerby->Species_1; + } + else if (sDerby->MenuPosition == 1) + { + species = sDerby->Species_2; + } + else if (sDerby->MenuPosition == 2) + { + species = sDerby->Species_3; + } + else if (sDerby->MenuPosition == 3) + { + species = sDerby->Species_4; + } + else if (sDerby->MenuPosition == 4) + { + species = sDerby->Species_5; + } + else if (sDerby->MenuPosition == 5) + { + species = sDerby->Species_6; + } + + DestroySpriteAndFreeResources(&gSprites[sDerby->SpeciesNameSpriteId]); + LoadSpritePalettes(sSpritePalettes); + + if (species < 5) // Ponyta + { + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Ponyta); + + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Ponyta, 164, 60, 0); + } + else if (species == 5) // Rattata + { + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Rattata); + + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Rattata, 164, 60, 0); + } + else if (species == 6) // Rapidash + { + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Rapidash); + + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Rapidash, 164, 60, 0); + } + else // Feebas + { + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Feebas); + + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Feebas, 164, 60, 0); + } +} + +static void UpdateCondition(void) +{ + u8 stars = 0; + struct SpriteSheet s; + + if (sDerby->MenuPosition == 0) + { + stars = sDerby->Condition_1; + } + else if (sDerby->MenuPosition == 1) + { + stars = sDerby->Condition_2; + } + else if (sDerby->MenuPosition == 2) + { + stars = sDerby->Condition_3; + } + else if (sDerby->MenuPosition == 3) + { + stars = sDerby->Condition_4; + } + else if (sDerby->MenuPosition == 4) + { + stars = sDerby->Condition_5; + } + else if (sDerby->MenuPosition == 5) + { + stars = sDerby->Condition_6; + } + + DestroySpriteAndFreeResources(&gSprites[sDerby->ConditionSpriteId]); + LoadSpritePalettes(sSpritePalettes); + + if (stars == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_1); + + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_1, 164, 93, 0); + } + else if (stars == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_2); + + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_2, 164, 93, 0); + } + else if (stars == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_3); + + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_3, 164, 93, 0); + } + else if (stars == 3) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_4); + + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_4, 164, 93, 0); + } + else if (stars == 4) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_5); + + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_5, 164, 93, 0); + } +} + +static void UpdatePayout(void) +{ + u8 multi = 0; + s16 y; + struct SpriteSheet s; + + y = 124; + + if (sDerby->MenuPosition == 0) + { + multi = sDerby->Racer1SpeedPay - 1; + } + else if (sDerby->MenuPosition == 1) + { + multi = sDerby->Racer2SpeedPay - 1; + } + else if (sDerby->MenuPosition == 2) + { + multi = sDerby->Racer3SpeedPay - 1; + } + else if (sDerby->MenuPosition == 3) + { + multi = sDerby->Racer4SpeedPay - 1; + } + else if (sDerby->MenuPosition == 4) + { + multi = sDerby->Racer5SpeedPay - 1; + } + else if (sDerby->MenuPosition == 5) + { + multi = sDerby->Racer6SpeedPay - 1; + } + + DestroySpriteAndFreeResources(&gSprites[sDerby->PayoutSpriteId]); + LoadSpritePalettes(sSpritePalettes); + + if (multi == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_1); + + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_1, 164, y, 0); + } + else if (multi == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_2); + + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_2, 164, y, 0); + } + else if (multi == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_3); + + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_3, 164, y, 0); + } + else if (multi == 3) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_4); + + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_4, 164, y, 0); + } + else if (multi == 4) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_5); + + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_5, 164, y, 0); + } + else if (multi == 5) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_6); + + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_6, 164, y, 0); + } + else if (multi == 6) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_7); + + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_7, 164, y, 0); + } + +} + +static void UpdateUI(void) +{ + struct SpriteSheet s; + + DestroySpriteAndFreeResources(&gSprites[sDerby->uiSpriteId]); + LoadSpritePalettes(sSpritePalettes); + + if (sDerby->MenuPosition == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_1); + + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_1, 64, 64, 0); + } + else if (sDerby->MenuPosition == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_2); + + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_2, 64, 64, 0); + } + else if (sDerby->MenuPosition == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_3); + + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_3, 64, 64, 0); + } + else if (sDerby->MenuPosition == 3) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_4); + + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_4, 64, 64, 0); + } + else if (sDerby->MenuPosition == 4) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_5); + + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_5, 64, 64, 0); + } + else if (sDerby->MenuPosition == 5) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_6); + + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_6, 64, 64, 0); + } +} + +static void CreateP10(void) +{ + struct SpriteSheet s; + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_P10); + + sDerby->P10SpriteId = CreateSprite(&sSpriteTemplate_P10, 172, 80, 0); +} + +static void CreateCreditIcon(void) +{ + struct SpriteSheet s; + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Credit_Icon); + + sDerby->CreditIconSpriteId = CreateSprite(&sSpriteTemplate_Credit_Icon, 28, 126, 0); +} + +static void CreateCreditIconRed(void) +{ + struct SpriteSheet s; + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Credit_Icon_Red); + + sDerby->CreditIconSpriteId = CreateSprite(&sSpriteTemplate_Credit_Icon_Red, 28, 126, 0); +} + +static void CreateArrows(void) +{ + s16 x; + s16 y; + struct SpriteSheet s; + + x = 32; + y = 88; + + LoadCompressedSpriteSheet(&sSpriteSheet_Arrow_1); + + sDerby->Arrow1SpriteId = CreateSprite(&sSpriteTemplate_Arrow_1, x, y, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_Arrow_2); + + sDerby->Arrow2SpriteId = CreateSprite(&sSpriteTemplate_Arrow_2, x + 64, y, 0); +} + +static void ShowName(const u8 *str) +{ + const u8 color[3] = { 0, 1, 2 }; + + //FillWindowPixelBuffer(DERBY_MENUS, 0xFF); + AddTextPrinterParameterized3(DERBY_MENUS, 0, 2, 0, color, 0, str); + PutWindowTilemap(DERBY_MENUS); + CopyWindowToVram(DERBY_MENUS, 3); +} + +static void UpdateNicknames(void) +{ + int i; + + //ClearStdWindowAndFrame(DERBY_MENUS, TRUE); + //RemoveWindow(DERBY_MENUS); + + InitWindows(sDerbyWinTemplates); + DeactivateAllTextPrinters(); + LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); + + if (sDerby->MenuPosition == 0) + { + if (sDerby->Species_1 < 5) // Ponyta + { + for (i = 0; i < MAX_NAMES; i++) { + if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_1))) { + ShowName(PonytaNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_1 == 5) // Rattata + { + for (i = 0; i < MAX_NAMES; i++) { + if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_1))) { + ShowName(RattataNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_1 == 6) // Rapidash + { + for (i = 0; i < MAX_NAMES; i++) { + if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_1))) { + ShowName(RapidashNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_1 == 7) // Feebas + { + for (i = 0; i < MAX_NAMES; i++) { + if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_1))) { + ShowName(FeebasNamesValues[i].NameString); + } + } + } + } + else if (sDerby->MenuPosition == 1) + { + if (sDerby->Species_2 < 5) // Ponyta + { + for (i = 0; i < MAX_NAMES; i++) { + if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_2))) { + ShowName(PonytaNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_2 == 5) // Rattata + { + for (i = 0; i < MAX_NAMES; i++) { + if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_2))) { + ShowName(RattataNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_2 == 6) // Rapidash + { + for (i = 0; i < MAX_NAMES; i++) { + if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_2))) { + ShowName(RapidashNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_2 == 7) // Feebas + { + for (i = 0; i < MAX_NAMES; i++) { + if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_2))) { + ShowName(FeebasNamesValues[i].NameString); + } + } + } + } + else if (sDerby->MenuPosition == 2) + { + if (sDerby->Species_3 < 5) // Ponyta + { + for (i = 0; i < MAX_NAMES; i++) { + if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_3))) { + ShowName(PonytaNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_3 == 5) // Rattata + { + for (i = 0; i < MAX_NAMES; i++) { + if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_3))) { + ShowName(RattataNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_3 == 6) // Rapidash + { + for (i = 0; i < MAX_NAMES; i++) { + if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_3))) { + ShowName(RapidashNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_3 == 7) // Feebas + { + for (i = 0; i < MAX_NAMES; i++) { + if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_3))) { + ShowName(FeebasNamesValues[i].NameString); + } + } + } + } + else if (sDerby->MenuPosition == 3) + { + if (sDerby->Species_4 < 5) // Ponyta + { + for (i = 0; i < MAX_NAMES; i++) { + if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_4))) { + ShowName(PonytaNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_4 == 5) // Rattata + { + for (i = 0; i < MAX_NAMES; i++) { + if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_4))) { + ShowName(RattataNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_4 == 6) // Rapidash + { + for (i = 0; i < MAX_NAMES; i++) { + if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_4))) { + ShowName(RapidashNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_4 == 7) // Feebas + { + for (i = 0; i < MAX_NAMES; i++) { + if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_4))) { + ShowName(FeebasNamesValues[i].NameString); + } + } + } + } + else if (sDerby->MenuPosition == 4) + { + if (sDerby->Species_5 < 5) // Ponyta + { + for (i = 0; i < MAX_NAMES; i++) { + if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_5))) { + ShowName(PonytaNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_5 == 5) // Rattata + { + for (i = 0; i < MAX_NAMES; i++) { + if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_5))) { + ShowName(RattataNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_5 == 6) // Rapidash + { + for (i = 0; i < MAX_NAMES; i++) { + if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_5))) { + ShowName(RapidashNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_5 == 7) // Feebas + { + for (i = 0; i < MAX_NAMES; i++) { + if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_5))) { + ShowName(FeebasNamesValues[i].NameString); + } + } + } + } + else if (sDerby->MenuPosition == 5) + { + if (sDerby->Species_6 < 5) // Ponyta + { + for (i = 0; i < MAX_NAMES; i++) { + if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_6))) { + ShowName(PonytaNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_6 == 5) // Rattata + { + for (i = 0; i < MAX_NAMES; i++) { + if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_6))) { + ShowName(RattataNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_6 == 6) // Rapidash + { + for (i = 0; i < MAX_NAMES; i++) { + if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_6))) { + ShowName(RapidashNamesValues[i].NameString); + } + } + } + else if (sDerby->Species_6 == 7) // Feebas + { + for (i = 0; i < MAX_NAMES; i++) { + if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_6))) { + ShowName(FeebasNamesValues[i].NameString); + } + } + } + } + +} + +u8 GetUniquePonytaName(u8 currentSpecies, u8 previousNames[]) { + u8 newName; + + // Only apply uniqueness check for Ponyta (species < 5) + if (currentSpecies < 5) { + do { + newName = Random() % MAX_NAMES; // Generate a random nickname index + } while (previousNames[newName] != 0); // Check if this name has already been taken + + // Mark this name as taken + previousNames[newName] = 1; + } else { + // For non-Ponyta species, no need to check for uniqueness + newName = Random() % MAX_NAMES; + } + + return newName; +} + +static void SetNicknames(void) +{ + u8 previousNames[MAX_NAMES] = {0}; // Array to track taken nicknames (0 = available, 1 = taken) + u8 name1; + u8 name2; + u8 name3; + u8 name4; + u8 name5; + u8 name6; + + // Get the nickname for each racer and ensure uniqueness for Ponyta + name1 = GetUniquePonytaName(sDerby->Species_1, previousNames); + name2 = GetUniquePonytaName(sDerby->Species_2, previousNames); + name3 = GetUniquePonytaName(sDerby->Species_3, previousNames); + name4 = GetUniquePonytaName(sDerby->Species_4, previousNames); + name5 = GetUniquePonytaName(sDerby->Species_5, previousNames); + name6 = GetUniquePonytaName(sDerby->Species_6, previousNames); + + // Assign the unique names to the VARs + VarSet(DERBY_VAR_RACER_NAME_1, name1); + VarSet(DERBY_VAR_RACER_NAME_2, name2); + VarSet(DERBY_VAR_RACER_NAME_3, name3); + VarSet(DERBY_VAR_RACER_NAME_4, name4); + VarSet(DERBY_VAR_RACER_NAME_5, name5); + VarSet(DERBY_VAR_RACER_NAME_6, name6); + + FlagSet(DERBY_FLAG_NICKNAME); +} + +static void UpdatePokemonData(void) +{ + UpdatePokemonSprites(); + UpdatePokemonSpeciesNames(); + UpdateCondition(); + UpdatePayout(); + UpdateUI(); + if (FlagGet(DERBY_FLAG_NICKNAME)) + { + SetNicknames(); + } + UpdateNicknames(); + +} + +static void SetBetDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place + + for (i = 0; i < 4; i++) // Always show 4 digits + { + u8 digit = num / d; + + // Show the digit (all digits are visible) + //gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].invisible = TRUE; + + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } + + // Set the tileNum based on the current digit + gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].oam.tileNum = + gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].oam.priority = 0; + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreateBetSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_BetInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_BetInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sDerby->BetSpriteIds[i + SPR_BET_DIGITS] = CreateSprite(&sSpriteTemplate_BetDigit, i * 5 + 148, 103, 2); + gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].oam.priority = 0; + gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].invisible = TRUE; + } +} + +static void SetPotentialDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place + + for (i = 0; i < 4; i++) // Always show 4 digits + { + u8 digit = num / d; + + // Show the digit (all digits are visible) + //gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].invisible = TRUE; + + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } + + // Set the tileNum based on the current digit + gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].oam.tileNum = + gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].oam.priority = 0; + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreatePotentialSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PotentialInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_PotentialInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS] = CreateSprite(&sSpriteTemplate_PotentialDigit, i * 6 + 186, 125, 2); + gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].oam.priority = 0; + gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].invisible = TRUE; + } +} + +static void SetCreditDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place + + for (i = 0; i < 4; i++) // Always show 4 digits + { + u8 digit = num / d; + + // Show the digit (all digits are visible) + gSprites[sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; + + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } + + // Set the tileNum based on the current digit + gSprites[sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.tileNum = + gSprites[sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreateCreditSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 8 + 50, 136, 2); + gSprites[sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } +} + +static void DerbyVBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void DerbyMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void StartExitDerby(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sDerby->state = DERBY_STATE_EXIT; +} + +static void ExitDerby(void) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + FREE_AND_SET_NULL(sDerby); + } +} + +static void ShiftData(u8 direction) +{ + // 1 = Right, 0 = Left + + if (direction == 1) // Right + { + PlaySE(SE_SELECT); + if (sDerby->MenuPosition > 4) + { + sDerby->MenuPosition = 0; + } + else + { + sDerby->MenuPosition++; + } + } + else if (direction == 0) // Left + { + PlaySE(SE_SELECT); + if (sDerby->MenuPosition < 1) + { + sDerby->MenuPosition = 5; + } + else + { + sDerby->MenuPosition--; + } + } + UpdatePokemonData(); +} + +static void HandleInput(void) +{ + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sDerby->state = DERBY_STATE_BET_2_START; + } + else if (JOY_NEW(B_BUTTON)) + { + if (sDerby->exitToggle == 0) { + PlaySE(SE_SELECT); + sDerby->state = DERBY_STATE_START_EXIT; + } + } + else if (JOY_NEW(DPAD_RIGHT)) + { + ShiftData(1); + } + else if (JOY_NEW(DPAD_LEFT)) + { + ShiftData(0); + } +} + +static void UpdateBetBG(void) +{ + if (sDerby->Menu == 0) + { + InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); + SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img_2, 0x1940, 0, 0); + CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap_2, 0, 0); + ResetPaletteFade(); + LoadPalette(Derby_BG_Bet_Pal_2, 0, sizeof(Derby_BG_Bet_Pal_2)); // Load the second palette + CopyBgTilemapBufferToVram(DERBY_BG_BASE); + return; + } + else if (sDerby->Menu == 1) + { + InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); + SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img, 0x1940, 0, 0); + CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Derby_BG_Bet_Pal, 0, sizeof(Derby_BG_Bet_Pal)); // Load the second palette + CopyBgTilemapBufferToVram(DERBY_BG_BASE); + return; + } +} + +static void HideBetSprites(void) +{ + if (sDerby->Menu == 0) + { + DestroySpriteAndFreeResources(&gSprites[sDerby->CreditIconSpriteId]); + CreateCreditIconRed(); + CreateP10(); + + gSprites[sDerby->SpeciesNameSpriteId].invisible = TRUE; + gSprites[sDerby->ConditionSpriteId].invisible = TRUE; + gSprites[sDerby->PayoutSpriteId].invisible = TRUE; + gSprites[sDerby->Arrow1SpriteId].invisible = TRUE; + gSprites[sDerby->Arrow2SpriteId].invisible = TRUE; + gSprites[sDerby->uiSpriteId].invisible = TRUE; + + gSprites[sDerby->PotentialSpriteIds[0]].invisible = FALSE; + gSprites[sDerby->PotentialSpriteIds[1]].invisible = FALSE; + gSprites[sDerby->PotentialSpriteIds[2]].invisible = FALSE; + gSprites[sDerby->PotentialSpriteIds[3]].invisible = FALSE; + gSprites[sDerby->BetSpriteIds[0]].invisible = FALSE; + gSprites[sDerby->BetSpriteIds[1]].invisible = FALSE; + gSprites[sDerby->BetSpriteIds[2]].invisible = FALSE; + gSprites[sDerby->BetSpriteIds[3]].invisible = FALSE; + } + else if (sDerby->Menu == 1) + { + DestroySpriteAndFreeResources(&gSprites[sDerby->P10SpriteId]); + DestroySpriteAndFreeResources(&gSprites[sDerby->CreditIconSpriteId]); + CreateCreditIcon(); + + gSprites[sDerby->PotentialSpriteIds[0]].invisible = TRUE; + gSprites[sDerby->PotentialSpriteIds[1]].invisible = TRUE; + gSprites[sDerby->PotentialSpriteIds[2]].invisible = TRUE; + gSprites[sDerby->PotentialSpriteIds[3]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[0]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[1]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[2]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[3]].invisible = TRUE; + + gSprites[sDerby->SpeciesNameSpriteId].invisible = FALSE; + gSprites[sDerby->ConditionSpriteId].invisible = FALSE; + gSprites[sDerby->PayoutSpriteId].invisible = FALSE; + gSprites[sDerby->Arrow1SpriteId].invisible = FALSE; + gSprites[sDerby->Arrow2SpriteId].invisible = FALSE; + gSprites[sDerby->uiSpriteId].invisible = FALSE; + } +} + +static void AddBet(void) +{ + u8 PayoutId = 0; + + if (sDerby->MenuPosition == 0) + { + PayoutId = sDerby->Racer1SpeedPay; + } + else if (sDerby->MenuPosition == 1) + { + PayoutId = sDerby->Racer2SpeedPay; + } + else if (sDerby->MenuPosition == 2) + { + PayoutId = sDerby->Racer3SpeedPay; + } + else if (sDerby->MenuPosition == 3) + { + PayoutId = sDerby->Racer4SpeedPay; + } + else if (sDerby->MenuPosition == 4) + { + PayoutId = sDerby->Racer5SpeedPay; + } + else if (sDerby->MenuPosition == 5) + { + PayoutId = sDerby->Racer6SpeedPay; + } + + if ((sDerby->Bet + 10) <= GetCoins()) + { + PlaySE(SE_BALL_TRAY_BALL); + sDerby->Bet = (sDerby->Bet + 10); + SetBetDigits(sDerby->Bet); + + if (PayoutId == 1) + { + sDerby->PotentialWin = (sDerby->Bet * 1.1); + } + else if (PayoutId == 2) + { + sDerby->PotentialWin = (sDerby->Bet * 1.2); + } + else if (PayoutId == 3) + { + sDerby->PotentialWin = (sDerby->Bet * 1.3); + } + else if (PayoutId == 4) + { + sDerby->PotentialWin = (sDerby->Bet * 1.5); + } + else if (PayoutId == 5) + { + sDerby->PotentialWin = (sDerby->Bet * 2); + } + else if (PayoutId == 6) + { + sDerby->PotentialWin = (sDerby->Bet * 3); + } + else if (PayoutId == 7) + { + sDerby->PotentialWin = 9999; + } + + if (sDerby->PotentialWin > 9999) + { + sDerby->PotentialWin = 9999; + } + SetPotentialDigits(sDerby->PotentialWin); + } + else + { + PlaySE(SE_FAILURE); + } +} + +static void SubBet(void) +{ + u8 PayoutId = 0; + + if (sDerby->MenuPosition == 0) + { + PayoutId = sDerby->Racer1SpeedPay; + } + else if (sDerby->MenuPosition == 1) + { + PayoutId = sDerby->Racer2SpeedPay; + } + else if (sDerby->MenuPosition == 2) + { + PayoutId = sDerby->Racer3SpeedPay; + } + else if (sDerby->MenuPosition == 3) + { + PayoutId = sDerby->Racer4SpeedPay; + } + else if (sDerby->MenuPosition == 4) + { + PayoutId = sDerby->Racer5SpeedPay; + } + else if (sDerby->MenuPosition == 5) + { + PayoutId = sDerby->Racer6SpeedPay; + } + + if (sDerby->Bet > 0) + { + PlaySE(SE_BALL_TRAY_BALL); + sDerby->Bet = (sDerby->Bet - 10); + SetBetDigits(sDerby->Bet); + + if (PayoutId == 1) + { + sDerby->PotentialWin = (sDerby->Bet * 1.1); + } + else if (PayoutId == 2) + { + sDerby->PotentialWin = (sDerby->Bet * 1.2); + } + else if (PayoutId == 3) + { + sDerby->PotentialWin = (sDerby->Bet * 1.3); + } + else if (PayoutId == 4) + { + sDerby->PotentialWin = (sDerby->Bet * 1.5); + } + else if (PayoutId == 5) + { + sDerby->PotentialWin = (sDerby->Bet * 2); + } + else if (PayoutId == 6) + { + sDerby->PotentialWin = (sDerby->Bet * 3); + } + else if (PayoutId == 7) + { + if (sDerby->Bet > 0) + { + sDerby->PotentialWin = 9999; + } + else + { + sDerby->PotentialWin = 0; + } + } + + SetPotentialDigits(sDerby->PotentialWin); + } + else + { + PlaySE(SE_FAILURE); + } +} + +static void AdjustByRandom(void) +{ + int i; + u8 chance; + + for (i = 1; i <= 6; i++) { + + chance = Random() % 55; + + if (chance < 50) { + + float randomAdjustment = (Random() % 251) / 100.0f; + + if (Random() % 2 == 0) { + // Add the random value + switch (i) { + case 1: sDerby->Racer1rSpeed += randomAdjustment; break; + case 2: sDerby->Racer2rSpeed += randomAdjustment; break; + case 3: sDerby->Racer3rSpeed += randomAdjustment; break; + case 4: sDerby->Racer4rSpeed += randomAdjustment; break; + case 5: sDerby->Racer5rSpeed += randomAdjustment; break; + case 6: sDerby->Racer6rSpeed += randomAdjustment; break; + } + } else { + // Subtract the random value + switch (i) { + case 1: sDerby->Racer1rSpeed -= randomAdjustment; break; + case 2: sDerby->Racer2rSpeed -= randomAdjustment; break; + case 3: sDerby->Racer3rSpeed -= randomAdjustment; break; + case 4: sDerby->Racer4rSpeed -= randomAdjustment; break; + case 5: sDerby->Racer5rSpeed -= randomAdjustment; break; + case 6: sDerby->Racer6rSpeed -= randomAdjustment; break; + } + } + } + } + + for (i = 1; i <= 6; i++) { + + chance = Random() % 65; + + if (chance < 50) { + + float randomAdjustment = (Random() % 51) / 100.0f; + + if (Random() % 2 == 0) { + // Add the random value + switch (i) { + case 1: sDerby->Racer1sSpeed += randomAdjustment; break; + case 2: sDerby->Racer2sSpeed += randomAdjustment; break; + case 3: sDerby->Racer3sSpeed += randomAdjustment; break; + case 4: sDerby->Racer4sSpeed += randomAdjustment; break; + case 5: sDerby->Racer5sSpeed += randomAdjustment; break; + case 6: sDerby->Racer6sSpeed += randomAdjustment; break; + } + } else { + // Subtract the random value + switch (i) { + case 1: sDerby->Racer1sSpeed -= randomAdjustment; break; + case 2: sDerby->Racer2sSpeed -= randomAdjustment; break; + case 3: sDerby->Racer3sSpeed -= randomAdjustment; break; + case 4: sDerby->Racer4sSpeed -= randomAdjustment; break; + case 5: sDerby->Racer5sSpeed -= randomAdjustment; break; + case 6: sDerby->Racer6sSpeed -= randomAdjustment; break; + } + } + } + } +} + +static void HandleInput2(void) +{ + if (JOY_NEW(A_BUTTON)) + { + if (sDerby->Bet > 0) + { + PlaySE(SE_SHOP); + DestroySpriteAndFreeResources(&gSprites[sDerby->P10SpriteId]); + PlayBGM(MUS_NONE); + SetCoins((GetCoins() - sDerby->Bet)); + SetCreditDigits(GetCoins()); + sDerby->delay = 30; + AdjustByRandom(); + sDerby->state = DERBY_STATE_RACE_DELAY; + } + else + { + PlaySE(SE_FAILURE); + } + } + else if (JOY_NEW(B_BUTTON)) + { + if (sDerby->exitToggle == 0) { + PlaySE(SE_SELECT); + sDerby->Bet = 0; + sDerby->PotentialWin = 0; + SetBetDigits(0); + SetPotentialDigits(0); + HideBetSprites(); + UpdateBetBG(); + sDerby->Menu = 0; + sDerby->state = DERBY_STATE_PROCESS_INPUT; + } + } + else if (JOY_NEW(DPAD_UP)) + { + AddBet(); + } + else if (JOY_NEW(DPAD_DOWN)) + { + SubBet(); + } +} + +static void CreateRacers(void) +{ + u8 horseY; + u8 ratfishY; + u8 horseAdd; + u8 ratfishAdd; + u8 position; + struct SpriteSheet s; + + horseY = 48; + ratfishY = 56; + horseAdd = 16; + ratfishAdd = 16; + position = 11; + LoadSpritePalettes(sSpritePalettes); + + if (sDerby->Species_1 < 5) // Ponyta + { + if (sDerby->Shiny_1 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_1 == 5) // Rattata + { + if (sDerby->Shiny_1 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); + } + } + else if (sDerby->Species_1 == 6) // Rapidash + { + if (sDerby->Shiny_1 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_1 == 7) // Feebas + { + if (sDerby->Shiny_1 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); + } + } + + horseY = horseY + horseAdd; + ratfishY = ratfishY + ratfishAdd; + position = position - 2; + + if (sDerby->Species_2 < 5) // Ponyta + { + if (sDerby->Shiny_2 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_2 == 5) // Rattata + { + if (sDerby->Shiny_2 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); + } + } + else if (sDerby->Species_2 == 6) // Rapidash + { + if (sDerby->Shiny_2 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_2 == 7) // Feebas + { + if (sDerby->Shiny_2 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); + } + } + + horseY = horseY + horseAdd; + ratfishY = ratfishY + ratfishAdd; + position = position - 2; + + if (sDerby->Species_3 < 5) // Ponyta + { + if (sDerby->Shiny_3 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_3 == 5) // Rattata + { + if (sDerby->Shiny_3 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); + } + } + else if (sDerby->Species_3 == 6) // Rapidash + { + if (sDerby->Shiny_3 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_3 == 7) // Feebas + { + if (sDerby->Shiny_3 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); + } + } + + horseY = horseY + horseAdd; + ratfishY = ratfishY + ratfishAdd; + position = position - 2; + + if (sDerby->Species_4 < 5) // Ponyta + { + if (sDerby->Shiny_4 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_4 == 5) // Rattata + { + if (sDerby->Shiny_4 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); + } + } + else if (sDerby->Species_4 == 6) // Rapidash + { + if (sDerby->Shiny_4 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_4 == 7) // Feebas + { + if (sDerby->Shiny_4 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); + } + } + + horseY = horseY + horseAdd; + ratfishY = ratfishY + ratfishAdd; + position = position - 2; + + if (sDerby->Species_5 < 5) // Ponyta + { + if (sDerby->Shiny_5 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_5 == 5) // Rattata + { + if (sDerby->Shiny_5 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); + } + } + else if (sDerby->Species_5 == 6) // Rapidash + { + if (sDerby->Shiny_5 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_5 == 7) // Feebas + { + if (sDerby->Shiny_5 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); + } + } + + horseY = horseY + horseAdd; + ratfishY = ratfishY + ratfishAdd; + position = position - 2; + + if (sDerby->Species_6 < 5) // Ponyta + { + if (sDerby->Shiny_6 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + + sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_6 == 5) // Rattata + { + if (sDerby->Shiny_6 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + + sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); + } + } + else if (sDerby->Species_6 == 6) // Rapidash + { + if (sDerby->Shiny_6 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + + sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); + } + } + else if (sDerby->Species_6 == 7) // Feebas + { + if (sDerby->Shiny_6 == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); + } + } +} + +static void CreateCursor(void) +{ + u8 y = 0; + u8 position = 0; + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + + if (sDerby->RacerSelected == 1) + { + position = 10; + y = 40; + } + else if (sDerby->RacerSelected == 2) + { + position = 8; + y = 40 + 16; + } + else if (sDerby->RacerSelected == 3) + { + position = 6; + y = 40 + 16 + 16; + } + else if (sDerby->RacerSelected == 4) + { + position = 4; + y = 40 + 16 + 16 + 16; + } + else if (sDerby->RacerSelected == 5) + { + position = 2; + y = 40 + 16 + 16 + 16 + 16; + } + else if (sDerby->RacerSelected == 6) + { + position = 0; + y = 40 + 16 + 16 + 16 + 16 + 16; + } + + LoadCompressedSpriteSheet(&sSpriteSheet_Cursor); + + sDerby->CursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, 224, y, position); +} + +static void InitRacetrack(void) +{ + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + ResetTempTileDataBuffers(); + InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); + SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_Race_Img, 0x1940, 0, 0); + CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_Race_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Derby_Race_Pal, 0, sizeof(Derby_Race_Pal)); + ResetSpriteData(); + FreeAllSpritePalettes(); + LoadSpritePalettes(sSpritePalettes); + + CreateRacers(); + CreateCursor(); + + CopyBgTilemapBufferToVram(DERBY_BG_BASE); + CopyBgTilemapBufferToVram(DERBY_MENUS); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); + ShowBg(DERBY_BG_BASE); + ShowBg(DERBY_MENUS); +} + +int ScaleSpeedToInt(float speed) { + float originalMin = 0.0f; + float originalMax = 13.2f; + float newMin = 1.0f; + float newMax = 7.0f; + + float scaledValue = (speed - originalMin) / (originalMax - originalMin) * (newMax - newMin) + newMin; + + int roundedValue = (int)(scaledValue + 0.5f); + + return roundedValue; +} + +void AssignRacerPlacements(void) { + struct Racer { + int xValue; + int index; + }; + + struct Racer racers[6] = { + {gSprites[sDerby->RacerSprite1].x, 1}, + {gSprites[sDerby->RacerSprite2].x, 2}, + {gSprites[sDerby->RacerSprite3].x, 3}, + {gSprites[sDerby->RacerSprite4].x, 4}, + {gSprites[sDerby->RacerSprite5].x, 5}, + {gSprites[sDerby->RacerSprite6].x, 6} + }; + + int i; + int j; + struct Racer temp; + u8 places[6] = {0, 0, 0, 0, 0, 0}; + + for (i = 0; i < 5; i++) { + for (j = i + 1; j < 6; j++) { + if (racers[i].xValue > racers[j].xValue) { + temp = racers[i]; + racers[i] = racers[j]; + racers[j] = temp; + } + } + } + + for (i = 0; i < 6; i++) { + if (i > 0 && racers[i].xValue == racers[i - 1].xValue) { + places[racers[i].index - 1] = places[racers[i - 1].index - 1]; + } else { + places[racers[i].index - 1] = i == 0 ? 2 : (i == 1 ? 1 : 0); + } + } + + sDerby->place1 = places[0]; + sDerby->place2 = places[1]; + sDerby->place3 = places[2]; + sDerby->place4 = places[3]; + sDerby->place5 = places[4]; + sDerby->place6 = places[5]; +} + +static void DerbyMain(u8 taskId) +{ + s16 finalX; + struct SpriteSheet s; + + finalX = 16; + + switch (sDerby->state) + { + case DERBY_STATE_INIT: + if (!gPaletteFade.active) { + sDerby->state = DERBY_STATE_PROCESS_INPUT; + } + break; + case DERBY_STATE_PROCESS_INPUT: + HandleInput(); + break; + case DERBY_STATE_BET_2_START: + UpdateBetBG(); + HideBetSprites(); + sDerby->Menu = 1; + sDerby->RacerSelected = sDerby->MenuPosition + 1; + sDerby->state = DERBY_STATE_BET_2; + break; + case DERBY_STATE_BET_2: + HandleInput2(); + break; + case DERBY_STATE_RACE_DELAY: + if (sDerby->delay != 0) + { + sDerby->delay--; + } + else + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sDerby->state = DERBY_STATE_START_FADE; + } + break; + case DERBY_STATE_START_FADE: + if (!gPaletteFade.active) + { + PlayBGM(MUS_RG_CYCLING); + InitRacetrack(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sDerby->state = DERBY_STATE_FADEIN; + } + break; + case DERBY_STATE_FADEIN: + if (!gPaletteFade.active) + { + sDerby->delay = 30; + sDerby->state = DERBY_STATE_DELAY_2; + } + break; + case DERBY_STATE_DELAY_2: + if (sDerby->delay != 0) + { + sDerby->delay--; + } + else + { + sDerby->delay = 60; + sDerby->Timer = 3; + sDerby->Swap1 = 1; + sDerby->Swap2 = 0; + sDerby->CountdownX = 120; + sDerby->CountdownY = 76; + PlaySE(SE_CONTEST_PLACE); // 3 + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_3); + + sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_3, sDerby->CountdownX, sDerby->CountdownY, 0); + + sDerby->state = DERBY_STATE_COUNTDOWN; + } + break; + case DERBY_STATE_COUNTDOWN: + if ((sDerby->Timer > 0) && (sDerby->Swap1 == 1) && (sDerby->Swap2 == 0)) + { + if (sDerby->delay > 0) + { + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + sDerby->Timer--; // 2 + sDerby->Swap2 = 1; + } + } + else if ((sDerby->Timer > 0) && (sDerby->Swap1 > 0) && (sDerby->Swap2 > 0)) + { + PlaySE(SE_CONTEST_PLACE); // 2 + + DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_2); + + sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_2, sDerby->CountdownX, sDerby->CountdownY, 0); + + sDerby->delay = 60; + sDerby->Swap1 = 0; + sDerby->Swap2 = 0; + } + else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 0) && (sDerby->Swap2 == 0)) + { + if (sDerby->delay > 0) + { + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + sDerby->Timer--; // 1 + sDerby->Swap2 = 1; + } + } + else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 0) && (sDerby->Swap2 == 1)) + { + PlaySE(SE_CONTEST_PLACE); // 1 + + DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_1); + + sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_1, sDerby->CountdownX, sDerby->CountdownY, 0); + + sDerby->delay = 60; + sDerby->Swap1 = 2; + sDerby->Swap2 = 0; + } + else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 2) && (sDerby->Swap2 == 0)) + { + if (sDerby->delay > 0) + { + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + sDerby->Timer--; // 1 + sDerby->Swap2 = 3; + } + } + else if (sDerby->Timer == 0) + { + if ((sDerby->Swap2 == 3) && (sDerby->delay == 0)) + { + PlaySE(SE_EXP_MAX); + + DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Go); + + sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Go, sDerby->CountdownX, sDerby->CountdownY, 0); + + sDerby->Swap2 = 4; + sDerby->delay = 60; + + } + else if (sDerby->delay > 0) + { + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); + if (sDerby->Species_1 != 7) + { + gSprites[sDerby->RacerSprite1].animNum = 1; + } + if (sDerby->Species_2 != 7) + { + gSprites[sDerby->RacerSprite2].animNum = 1; + } + if (sDerby->Species_3 != 7) + { + gSprites[sDerby->RacerSprite3].animNum = 1; + } + if (sDerby->Species_4 != 7) + { + gSprites[sDerby->RacerSprite4].animNum = 1; + } + if (sDerby->Species_5 != 7) + { + gSprites[sDerby->RacerSprite5].animNum = 1; + } + if (sDerby->Species_6 != 7) + { + gSprites[sDerby->RacerSprite6].animNum = 1; + } + sDerby->frames = 3; + sDerby->delay = 15; + sDerby->state = DERBY_STATE_RACE_START; + } + } + break; + case DERBY_STATE_RACE_START: + if (sDerby->frames == 0) + { + if (sDerby->Species_1 != 7) + { + gSprites[sDerby->RacerSprite1].x = gSprites[sDerby->RacerSprite1].x - (sDerby->Racer1sSpeed / 2); + } + if (sDerby->Species_2 != 7) + { + gSprites[sDerby->RacerSprite2].x = gSprites[sDerby->RacerSprite2].x - (sDerby->Racer2sSpeed / 2); + } + if (sDerby->Species_3 != 7) + { + gSprites[sDerby->RacerSprite3].x = gSprites[sDerby->RacerSprite3].x - (sDerby->Racer3sSpeed / 2); + } + if (sDerby->Species_4 != 7) + { + gSprites[sDerby->RacerSprite4].x = gSprites[sDerby->RacerSprite4].x - (sDerby->Racer4sSpeed / 2); + } + if (sDerby->Species_5 != 7) + { + gSprites[sDerby->RacerSprite5].x = gSprites[sDerby->RacerSprite5].x - (sDerby->Racer5sSpeed / 2); + } + if (sDerby->Species_6 != 7) + { + gSprites[sDerby->RacerSprite6].x = gSprites[sDerby->RacerSprite6].x - (sDerby->Racer6sSpeed / 2); + } + + if (sDerby->RacerSelected == 1) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite1].x; + } + else if (sDerby->RacerSelected == 2) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite2].x; + } + else if (sDerby->RacerSelected == 3) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite3].x; + } + else if (sDerby->RacerSelected == 4) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite4].x; + } + else if (sDerby->RacerSelected == 5) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite5].x; + } + else if (sDerby->RacerSelected == 6) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite6].x; + } + + sDerby->frames = 3; + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + sDerby->state = DERBY_STATE_RACE_MID; + } + sDerby->frames--; + break; + case DERBY_STATE_RACE_MID: + if ((gSprites[sDerby->RacerSprite1].x > 16) && + (gSprites[sDerby->RacerSprite2].x > 16) && + (gSprites[sDerby->RacerSprite3].x > 16) && + (gSprites[sDerby->RacerSprite4].x > 16) && + (gSprites[sDerby->RacerSprite5].x > 16) && + (gSprites[sDerby->RacerSprite6].x > 16)) + { + if (sDerby->frames == 0) + { + if (sDerby->Species_1 != 7) + { + gSprites[sDerby->RacerSprite1].x = gSprites[sDerby->RacerSprite1].x - (sDerby->Racer1rSpeed / 2); + } + if (sDerby->Species_2 != 7) + { + gSprites[sDerby->RacerSprite2].x = gSprites[sDerby->RacerSprite2].x - (sDerby->Racer2rSpeed / 2); + } + if (sDerby->Species_3 != 7) + { + gSprites[sDerby->RacerSprite3].x = gSprites[sDerby->RacerSprite3].x - (sDerby->Racer3rSpeed / 2); + } + if (sDerby->Species_4 != 7) + { + gSprites[sDerby->RacerSprite4].x = gSprites[sDerby->RacerSprite4].x - (sDerby->Racer4rSpeed / 2); + } + if (sDerby->Species_5 != 7) + { + gSprites[sDerby->RacerSprite5].x = gSprites[sDerby->RacerSprite5].x - (sDerby->Racer5rSpeed / 2); + } + if (sDerby->Species_6 != 7) + { + gSprites[sDerby->RacerSprite6].x = gSprites[sDerby->RacerSprite6].x - (sDerby->Racer6rSpeed / 2); + } + + if (sDerby->RacerSelected == 1) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite1].x; + } + else if (sDerby->RacerSelected == 2) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite2].x; + } + else if (sDerby->RacerSelected == 3) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite3].x; + } + else if (sDerby->RacerSelected == 4) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite4].x; + } + else if (sDerby->RacerSelected == 5) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite5].x; + } + else if (sDerby->RacerSelected == 6) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite6].x; + } + + sDerby->frames = 3; + } + sDerby->frames--; + } + else + { + PlayBGM(MUS_NONE); + AssignRacerPlacements(); + if (sDerby->RacerSelected == 1) + { + if (sDerby->place1 == 2) // Win + { + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + } + else if (sDerby->place1 == 1) // Second + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose + } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + } + else if (sDerby->RacerSelected == 2) + { + if (sDerby->place2 == 2) // Win + { + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + } + else if (sDerby->place2 == 1) // Second + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose + } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + } + else if (sDerby->RacerSelected == 3) + { + if (sDerby->place3 == 2) // Win + { + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + } + else if (sDerby->place3 == 1) // Second + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose + } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + } + else if (sDerby->RacerSelected == 4) + { + if (sDerby->place4 == 2) // Win + { + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + } + else if (sDerby->place4 == 1) // Second + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose + } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + } + else if (sDerby->RacerSelected == 5) + { + if (sDerby->place5 == 2) // Win + { + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + } + else if (sDerby->place5 == 1) // Second + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose + } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + } + else if (sDerby->RacerSelected == 6) + { + if (sDerby->place6 == 2) // Win + { + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + } + else if (sDerby->place6 == 1) // Second + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose + } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + } + PlaySE(SE_APPLAUSE); + + LoadSpritePalettes(sSpritePalettes2); + LoadCompressedSpriteSheet(&sSpriteSheet_Clefairy); + + sDerby->ClefSpriteId = CreateSprite(&sSpriteTemplate_Clefairy, sDerby->CountdownX, sDerby->CountdownY, 0); + FlagClear(DERBY_FLAG_RESET); + FlagClear(DERBY_FLAG_NICKNAME); + sDerby->delay = 120; + sDerby->state = DERBY_STATE_FINAL_DELAY; + } + break; + case DERBY_STATE_FINAL_DELAY: + if (sDerby->delay == 0) + { + sDerby->state = DERBY_STATE_START_EXIT; + } + else + { + sDerby->delay--; + } + break; + case DERBY_STATE_START_EXIT: + StartExitDerby(); + break; + case DERBY_STATE_EXIT: + ExitDerby(); + break; + } +} + +static void InitDerbyScreen(void) +{ + int i; + + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + ResetTempTileDataBuffers(); + InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); + SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img, 0x1940, 0, 0); + CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Derby_BG_Bet_Pal, 0, sizeof(Derby_BG_Bet_Pal)); + ResetSpriteData(); + FreeAllSpritePalettes(); + + if (FlagGet(DERBY_FLAG_RESET) == 0) + { + GetNewDerby(); + } + InitiateRacers(); + for (i = 0; i < 6; i++) { + if (i == 0) + { + GetRacerSpeeds(sDerby->Species_1, i); + } + else if (i == 1) + { + GetRacerSpeeds(sDerby->Species_2, i); + } + else if (i == 2) + { + GetRacerSpeeds(sDerby->Species_3, i); + } + else if (i == 3) + { + GetRacerSpeeds(sDerby->Species_4, i); + } + else if (i == 4) + { + GetRacerSpeeds(sDerby->Species_5, i); + } + else if (i == 5) + { + GetRacerSpeeds(sDerby->Species_6, i); + } + } + + LoadSpritePalettes(sSpritePalettes); + CreatePokemonSprites(); + CreateMenuData(); + CreateArrows(); + CreateCreditIcon(); + CreateCreditSprites(); + SetCreditDigits(GetCoins()); + CreateBetSprites(); + SetBetDigits(0); + CreatePotentialSprites(); + SetPotentialDigits(0); + + UpdatePokemonData(); + + CopyBgTilemapBufferToVram(DERBY_BG_BASE); + CopyBgTilemapBufferToVram(DERBY_MENUS); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); + ShowBg(DERBY_BG_BASE); + ShowBg(DERBY_MENUS); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(DerbyVBlankCallback); + SetMainCallback2(DerbyMainCallback); + CreateTask(DerbyMain, 1); +} + diff --git a/src/field_specials.c b/src/field_specials.c index 30b121acd012..9b51cbd3623e 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -71,6 +71,7 @@ #include "palette.h" #include "battle_util.h" #include "naming_screen.h" +#include "rogue_voltorbflip.h" #define TAG_ITEM_ICON 5500 @@ -164,6 +165,13 @@ void Special_ShowDiploma(void) LockPlayerFieldControls(); } +void Special_ViewVoltorbFlip(void) +{ + gMain.savedCallback = CB2_ReturnToField; + SetMainCallback2(CB2_ShowVoltorbFlip); + LockPlayerFieldControls(); +} + void Special_ViewWallClock(void) { gMain.savedCallback = CB2_ReturnToField; diff --git a/src/flappybird.c b/src/flappybird.c new file mode 100644 index 000000000000..a773631fced6 --- /dev/null +++ b/src/flappybird.c @@ -0,0 +1,1846 @@ +#include "flappybird.h" +#include "global.h" +#include "malloc.h" +#include "battle.h" +#include "bg.h" +#include "coins.h" +#include "data.h" +#include "daycare.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "field_message_box.h" +#include "international_string_util.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "naming_screen.h" +#include "new_game.h" +#include "overworld.h" +#include "palette.h" +#include "palette_util.h" +#include "pokemon.h" +#include "pokedex.h" +#include "random.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trade.h" +#include "trig.h" +#include "trainer_pokemon_sprites.h" +#include "tv.h" +#include "window.h" +#include "constants/coins.h" +#include "constants/flags.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/vars.h" +#include "scanline_effect.h" +#include "pokemon_storage_system.h" +#include "string_util.h" +#include "field_specials.h" + +enum { + FLAPPY_INIT, + + FLAPPY_INPUT, + FLAPPY_STOP, + FLAPPY_ROTATION, + FLAPPY_GAMEOVER, + FLAPPY_HISCORE, + FLAPPY_START_EXIT, + FLAPPY_EXIT, +}; + +enum { + SPR_HISCORE_DIG_1, + SPR_HISCORE_DIG_10, + SPR_HISCORE_DIG_100, + SPR_HISCORE_DIG_1000, +}; + +enum { + SPR_CREDIT_DIG_1, + SPR_CREDIT_DIG_10, + SPR_CREDIT_DIG_100, + SPR_CREDIT_DIG_1000, +}; + +#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 +#define SPR_HISCORE_DIGITS SPR_HISCORE_DIG_1 + +#define MAX_SPRITES_CREDIT 4 +#define MAX_SPRITES_HISCORE 4 + +struct FlappyBird { + u8 state; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 ButterfreeSpriteId; + u8 ButterfreeHitboxSpriteId; + u16 scroll_fg_x_int; + u16 scroll_bg_x_int; + u16 scroll_fg_x_frac; + u16 scroll_bg_x_frac; + u16 pos_y; // Bird's vertical position + s16 speed_y; // Bird's vertical speed (falling speed) + u8 flap_strength; // Strength of the flap (negative speed change when flap occurs) + u32 delay; + u16 bg2ScrollX; //0 -256 + u8 Obstacle1Id; + u8 Obstacle2Id; + u16 MAX_Y; + u16 MIN_Y; + u8 TrailSpriteId; + s16 TrailoffsetX, TrailoffsetY; + u16 timerDelay; + u8 isFlapping; + u8 SFX; + u8 timer; + u8 BorderSpriteId; + u8 DamageSpriteId; + u8 RotateToggle; + s16 DamageSpriteRotation; + u8 yUpdate; + s16 DamageSpriteY; + u8 jumping; + s16 jumpHeight; + s16 jumpSpeed; + s16 fallSpeed; + s16 originalY; + s16 velocity; + u8 BorderSprite2Id; + u8 StartSpriteId; + u8 GameOverSpriteId; + u8 OneSpriteId; + u8 TwoSpriteId; + u8 ThreeSpriteId; + u8 HiScoreSpriteId; + u32 Points; + u8 FlapSpriteId; + u8 ScoreSpriteId; + u8 Score2SpriteId; + u8 ScoreSpriteIds[MAX_SPRITES_HISCORE]; +}; + +static EWRAM_DATA struct FlappyBird *sFlappy = NULL; +static EWRAM_DATA u8 sTextWindowId = 0; + +#define MAX_Y_POSITION 10 // The highest point the bird can reach (lower is higher on the screen) +#define MIN_Y_POSITION 140 // The ground level (Y position of the ground) + +#define GRAVITY 1 // Slower gravity (lower value = slower fall) +#define FLAP_STRENGTH -6 // Negative value to make the bird go up + +static void FadeToFlappyBirdScreen(u8 taskId); +static void InitFlappyBirdScreen(void); +static void FlappyBirdVBlankCallback(void); + +// Backgound + +static const u32 FlappyBird_BG_Img[] = INCBIN_U32("graphics/flappybird/flappy-bg.4bpp.lz"); +static const u8 FlappyBird_BG_Tilemap[] = INCBIN_U8("graphics/flappybird/flappy-bg.bin.lz"); +static const u16 FlappyBird_BG_Pal[] = INCBIN_U16("graphics/flappybird/flappy-bg.gbapal"); + +// Foreground + +static const u32 FlappyBird_FG_Img[] = INCBIN_U32("graphics/flappybird/flappy-fg.4bpp.lz"); +static const u8 FlappyBird_FG_Tilemap[] = INCBIN_U8("graphics/flappybird/flappy-fg.bin.lz"); +static const u16 FlappyBird_FG_Pal[] = INCBIN_U16("graphics/flappybird/flappy-fg.gbapal"); + +// Arcade BG Element + +static const u32 Arcade_FG_Img[] = INCBIN_U32("graphics/flappybird/arcade-screen.4bpp.lz"); +static const u8 Arcade_FG_Tilemap[] = INCBIN_U8("graphics/flappybird/arcade-screen.bin.lz"); +static const u16 Arcade_FG_Pal[] = INCBIN_U16("graphics/flappybird/arcade-screen.gbapal"); + +// Butterfree +static const u32 ButterfreeGFX[] = INCBIN_U32("graphics/flappybird/butterfree.4bpp.lz"); +static const u16 ButterfreePAL[] = INCBIN_U16("graphics/flappybird/butterfree.gbapal"); + +// Hitbox +static const u32 ButterfreeHitboxGFX[] = INCBIN_U32("graphics/flappybird/butterfree-hitbox.4bpp.lz"); +static const u16 ButterfreeHitboxPAL[] = INCBIN_U16("graphics/flappybird/butterfree-hitbox.gbapal"); + +// Trail +static const u32 TrailGFX[] = INCBIN_U32("graphics/flappybird/trail.4bpp.lz"); +static const u16 TrailPAL[] = INCBIN_U16("graphics/flappybird/trail.gbapal"); + +// Cover + +static const u32 TopLeftGFX[] = INCBIN_U32("graphics/flappybird/topleft.4bpp.lz"); +static const u32 BottomLeftGFX[] = INCBIN_U32("graphics/flappybird/bottomleft.4bpp.lz"); + +// Damage + +static const u32 DamageGFX[] = INCBIN_U32("graphics/flappybird/damage.4bpp.lz"); + +// Text + +static const u32 StartGFX[] = INCBIN_U32("graphics/flappybird/start.4bpp.lz"); +static const u32 GameOverGFX[] = INCBIN_U32("graphics/flappybird/gameover.4bpp.lz"); +static const u32 HiScoreGFX[] = INCBIN_U32("graphics/flappybird/hiscore.4bpp.lz"); +static const u32 OneGFX[] = INCBIN_U32("graphics/flappybird/one.4bpp.lz"); +static const u32 TwoGFX[] = INCBIN_U32("graphics/flappybird/two.4bpp.lz"); +static const u32 ThreeGFX[] = INCBIN_U32("graphics/flappybird/three.4bpp.lz"); +static const u32 FlapGFX[] = INCBIN_U32("graphics/flappybird/flap.4bpp.lz"); +static const u32 ScoreGFX[] = INCBIN_U32("graphics/flappybird/score.4bpp.lz"); +static const u32 Score2GFX[] = INCBIN_U32("graphics/flappybird/score2.4bpp.lz"); +static const u32 DigitsGFX[] = INCBIN_U32("graphics/flappybird/digits.4bpp.lz"); + +static const u16 TextPAL[] = INCBIN_U16("graphics/flappybird/text.gbapal"); +static const u16 FlapPAL[] = INCBIN_U16("graphics/flappybird/flap.gbapal"); + +#define FlappyBird_BG 3 +#define FlappyBird_FG 2 +#define Arcade_BG 1 +#define FlappyBird_TEXT_MENUS 0 + +static const struct BgTemplate sFlappyBGtemplates[] = { + { + .bg = FlappyBird_BG, + .charBaseIndex = 3, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = FlappyBird_FG, + .charBaseIndex = 2, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = Arcade_BG, + .charBaseIndex = 1, + .mapBaseIndex = 27, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = FlappyBird_TEXT_MENUS, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sFlappyWinTemplates[] = { + { + .bg = FlappyBird_TEXT_MENUS, + .tilemapLeft = 16, + .tilemapTop = 9, + .width = 14, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x194, + }, + DUMMY_WIN_TEMPLATE, +}; + +#define BUTTERFREE_GFXTAG 1 +#define BUTTERFREE_HITBOX_GFXTAG 2 +#define TRAIL_GFXTAG 3 +#define BORDER_GFXTAG 4 +#define DAMAGE_GFXTAG 5 +#define BORDER_2_GFXTAG 6 +#define START_GFXTAG 7 +#define GAMEOVER_GFXTAG 8 +#define THREE_GFXTAG 9 +#define TWO_GFXTAG 10 +#define ONE_GFXTAG 11 +#define HISCORE_GFXTAG 12 +#define FLAP_GFXTAG 13 +#define SCORE_GFXTAG 14 +#define SCORE2_GFXTAG 15 +#define CREDIT_DIGITS_GFXTAG 16 + +#define BUTTERFREE_PALTAG 1 +#define BUTTERFREE_HITBOX_PALTAG 2 +#define TRAIL_PALTAG 3 +#define BORDER_PALTAG 4 +#define TEXT_PALTAG 5 +#define FLAP_PALTAG 6 + +static const struct SpritePalette sSpritePalettes[] = +{ + { .data = ButterfreePAL, .tag = BUTTERFREE_PALTAG }, + { .data = ButterfreeHitboxPAL, .tag = BUTTERFREE_HITBOX_PALTAG }, + { .data = TrailPAL, .tag = TRAIL_PALTAG }, + { .data = Arcade_FG_Pal, .tag = BORDER_PALTAG }, + { .data = TextPAL, .tag = TEXT_PALTAG }, + { .data = FlapPAL, .tag = FLAP_PALTAG }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheets_CreditsInterface[] = +{ + { + .data = DigitsGFX, + .size = 0x280, + .tag = CREDIT_DIGITS_GFXTAG + }, + {} +}; + +static const struct OamData sOam_CreditDigit = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2, +}; + +static const struct SpriteTemplate sSpriteTemplate_CreditDigit = +{ + .tileTag = CREDIT_DIGITS_GFXTAG, + .paletteTag = FLAP_PALTAG, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Score = +{ + .data = ScoreGFX, + .size = 0x400, + .tag = SCORE_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Score2 = +{ + .data = Score2GFX, + .size = 0x400, + .tag = SCORE2_GFXTAG, +}; + +static const struct OamData sOamData_Score = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Score = +{ + .tileTag = SCORE_GFXTAG, + .paletteTag = FLAP_PALTAG, + .oam = &sOamData_Score, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Score2 = +{ + .tileTag = SCORE2_GFXTAG, + .paletteTag = FLAP_PALTAG, + .oam = &sOamData_Score, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Flap = +{ + .data = FlapGFX, + .size = 0x100, + .tag = FLAP_GFXTAG, +}; + +static const struct OamData sOamData_Flap = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Flap = +{ + .tileTag = FLAP_GFXTAG, + .paletteTag = FLAP_PALTAG, + .oam = &sOamData_Flap, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_One = +{ + .data = OneGFX, + .size = 0x800, + .tag = ONE_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Two = +{ + .data = TwoGFX, + .size = 0x800, + .tag = TWO_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Three = +{ + .data = ThreeGFX, + .size = 0x800, + .tag = THREE_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_HiScore = +{ + .data = HiScoreGFX, + .size = 0x800, + .tag = HISCORE_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Start = +{ + .data = StartGFX, + .size = 0x800, + .tag = START_GFXTAG, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_GameOver = +{ + .data = GameOverGFX, + .size = 0x800, + .tag = GAMEOVER_GFXTAG, +}; + +static const struct OamData sOamData_Text = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sTitleAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(32, 10), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sTitleAnimCmds[] = { + sTitleAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_One = +{ + .tileTag = ONE_GFXTAG, + .paletteTag = TEXT_PALTAG, + .oam = &sOamData_Text, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Two = +{ + .tileTag = TWO_GFXTAG, + .paletteTag = TEXT_PALTAG, + .oam = &sOamData_Text, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Three = +{ + .tileTag = THREE_GFXTAG, + .paletteTag = TEXT_PALTAG, + .oam = &sOamData_Text, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_HiScore = +{ + .tileTag = HISCORE_GFXTAG, + .paletteTag = TEXT_PALTAG, + .oam = &sOamData_Text, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Start = +{ + .tileTag = START_GFXTAG, + .paletteTag = TEXT_PALTAG, + .oam = &sOamData_Text, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_GameOver = +{ + .tileTag = GAMEOVER_GFXTAG, + .paletteTag = TEXT_PALTAG, + .oam = &sOamData_Text, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Damage = +{ + .data = DamageGFX, + .size = 0x1000, + .tag = DAMAGE_GFXTAG, +}; + +static const struct OamData sOamData_Damage = +{ + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sDamageAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sDamageAnimCmd_1[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(64, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sDamageAnimCmds[] = { + sDamageAnimCmd_0, + sDamageAnimCmd_1, +}; + +static const struct SpriteTemplate sSpriteTemplate_Damage = +{ + .tileTag = DAMAGE_GFXTAG, + .paletteTag = BUTTERFREE_PALTAG, + .oam = &sOamData_Damage, + .anims = sDamageAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Border = +{ + .data = TopLeftGFX, + .size = 0x400, + .tag = BORDER_GFXTAG, +}; + +static const struct OamData sOamData_Border = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Border = +{ + .tileTag = BORDER_GFXTAG, + .paletteTag = BORDER_PALTAG, + .oam = &sOamData_Border, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Border_2 = +{ + .data = BottomLeftGFX, + .size = 0x400, + .tag = BORDER_2_GFXTAG, +}; + +static const struct SpriteTemplate sSpriteTemplate_Border_2 = +{ + .tileTag = BORDER_2_GFXTAG, + .paletteTag = BORDER_PALTAG, + .oam = &sOamData_Border, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Trail = +{ + .data = TrailGFX, + .size = 0x1000, + .tag = TRAIL_GFXTAG, +}; + +static const struct OamData sOamData_Trail = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sTrailAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_FRAME(80, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(112, 5), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sTrailAnimCmds[] = { + sTrailAnimCmd_0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Trail = +{ + .tileTag = TRAIL_GFXTAG, + .paletteTag = TRAIL_PALTAG, + .oam = &sOamData_Trail, + .anims = sTrailAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Butterfree = +{ + .data = ButterfreeGFX, + .size = 0x1800, + .tag = BUTTERFREE_GFXTAG, +}; + +static const struct OamData sOamData_Butterfree = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sButterfreeAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sButterfreeAnimCmd_1[] = +{ + ANIMCMD_FRAME(64, 10), + ANIMCMD_FRAME(128, 10), + ANIMCMD_FRAME(64, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_END +}; + +static const union AnimCmd *const sButterfreeAnimCmds[] = { + sButterfreeAnimCmd_0, + sButterfreeAnimCmd_1, +}; + +static const struct SpriteTemplate sSpriteTemplate_Butterfree = +{ + .tileTag = BUTTERFREE_GFXTAG, + .paletteTag = BUTTERFREE_PALTAG, + .oam = &sOamData_Butterfree, + .anims = sButterfreeAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Butterfree_Hitbox = +{ + .data = ButterfreeHitboxGFX, + .size = 0x80, + .tag = BUTTERFREE_HITBOX_GFXTAG, +}; + +static const struct OamData sOamData_Butterfree_Hitbox = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Butterfree_Hitbox = +{ + .tileTag = BUTTERFREE_HITBOX_GFXTAG, + .paletteTag = BUTTERFREE_HITBOX_PALTAG, + .oam = &sOamData_Butterfree_Hitbox, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void StartFlappyBird(void) +{ + u8 taskId = 0; + sFlappy = AllocZeroed(sizeof(struct FlappyBird)); + taskId = CreateTask(FadeToFlappyBirdScreen, 0); +} + +static void FadeToFlappyBirdScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + SetMainCallback2(InitFlappyBirdScreen); + DestroyTask(taskId); + } + break; + } +} + +static void FlappyBirdVBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void FlappyBirdMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void ExitFlappyBird(void) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + FREE_AND_SET_NULL(sFlappy); + } +} + +static void StartExitFlappyBird(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sFlappy->state = FLAPPY_EXIT; +} + +static void ScrollX(void) +{ + // Increment the foreground scroll by 1 pixel per frame (normal speed) + sFlappy->scroll_fg_x_frac += 256 * (3 / 2); // 256/256 = 1 pixel per frame (normal speed) + + // Slow down the background scrolling even further (0.0625 pixels per frame) + sFlappy->scroll_bg_x_frac += 16; // 16/256 = 0.0625 pixels per frame (very slow) + + // Once the fractional part exceeds 256, increment the integer part and reset the fractional part + if (sFlappy->scroll_fg_x_frac >= 256) { + sFlappy->scroll_fg_x_frac -= 256; // Reset fractional part for foreground + sFlappy->scroll_fg_x_int++; // Increment integer part for foreground + } + + if (sFlappy->scroll_bg_x_frac >= 256) { + sFlappy->scroll_bg_x_frac -= 256; // Reset fractional part for background + sFlappy->scroll_bg_x_int++; // Increment integer part for background + } + + // Apply the scrolling to the backgrounds (BG2 and BG3) + SetGpuReg(REG_OFFSET_BG2HOFS, sFlappy->scroll_fg_x_int); // Set foreground scroll (BG2) + SetGpuReg(REG_OFFSET_BG3HOFS, sFlappy->scroll_bg_x_int); // Set background scroll (BG3) + + // Wrap around the scroll once it exceeds 256 (screen width) + if (sFlappy->scroll_fg_x_int >= 256) { + sFlappy->scroll_fg_x_int = 0; // Reset if over 256 (horizontal screen width) + } + if (sFlappy->scroll_bg_x_int >= 256) { + sFlappy->scroll_bg_x_int = 0; // Reset if over 256 (horizontal screen width) + } +} + +static void SetCreditDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place + + for (i = 0; i < 4; i++) // Always show 4 digits + { + u8 digit = num / d; + + // Show the digit (all digits are visible) + gSprites[sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; + + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } + + // Set the tileNum based on the current digit + gSprites[sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.tileNum = + gSprites[sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreateCreditSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 6 + 72, 144, 0); + gSprites[sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } +} + +static void SetScoreDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place + + for (i = 0; i < 4; i++) // Always show 4 digits + { + u8 digit = num / d; + + // Show the digit (all digits are visible) + gSprites[sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS]].invisible = FALSE; + + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } + + // Set the tileNum based on the current digit + gSprites[sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS]].oam.tileNum = + gSprites[sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS]].oam.priority = 0; + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreateHiScoreSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 6 + 152, 144, 0); + gSprites[sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS]].oam.priority = 0; + } +} + +static void CreateScore(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Score); + + sFlappy->ScoreSpriteId = CreateSprite(&sSpriteTemplate_Score, 80, 138, 0); +} + +static void CreateScore2(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Score2); + + sFlappy->Score2SpriteId = CreateSprite(&sSpriteTemplate_Score2, 160, 138, 0); +} + +static void CreateFlap(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Flap); + + sFlappy->FlapSpriteId = CreateSprite(&sSpriteTemplate_Flap, 204, 20, 0); +} + +static void CreateOne(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_One); + + sFlappy->OneSpriteId = CreateSprite(&sSpriteTemplate_One, 120, 80, 0); +} + +static void CreateTwo(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Two); + + sFlappy->TwoSpriteId = CreateSprite(&sSpriteTemplate_Two, 120, 80, 0); +} + +static void CreateThree(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Three); + + sFlappy->ThreeSpriteId = CreateSprite(&sSpriteTemplate_Three, 120, 80, 0); +} + +static void CreateStart(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Start); + + sFlappy->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 120, 80, 0); +} + +static void CreateHiScore(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_HiScore); + + sFlappy->HiScoreSpriteId = CreateSprite(&sSpriteTemplate_HiScore, 120, 80, 0); +} + +static void CreateGameOver(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); + + sFlappy->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 120, 80, 0); +} + +static void CreateHitbox(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Butterfree_Hitbox); + + sFlappy->ButterfreeHitboxSpriteId = CreateSprite(&sSpriteTemplate_Butterfree_Hitbox, 40, 64, 0); +} + +static void CreateBorder(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Border); + + sFlappy->BorderSpriteId = CreateSprite(&sSpriteTemplate_Border, 32, 16, 0); +} + +static void CreateBorder2(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Border_2); + + sFlappy->BorderSprite2Id = CreateSprite(&sSpriteTemplate_Border_2, 32, 16 + 128, 0); +} + +static void CreateButterfree(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Butterfree); + + sFlappy->ButterfreeSpriteId = CreateSprite(&sSpriteTemplate_Butterfree, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5, gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6, 1); +} + +static void CreateDamage(void) +{ + struct SpriteSheet s; + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Damage); + + sFlappy->DamageSpriteId = CreateSprite(&sSpriteTemplate_Damage, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5, gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6, 1); +} + +static void CreateTrail(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Trail); + + sFlappy->TrailSpriteId = CreateSprite(&sSpriteTemplate_Trail, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 16, gSprites[sFlappy->ButterfreeHitboxSpriteId].y, 3); +} + +static void SpriteCB_FlappyDamage(struct Sprite *sprite) +{ + s16 sine; + s16 cosine; + s16 rotation; + struct ObjAffineSrcData affine; + struct OamMatrix matrix; + + sFlappy->DamageSpriteRotation += 8; + + sFlappy->DamageSpriteRotation %= 360; + + rotation = sFlappy->DamageSpriteRotation; + + sine = Sin2(rotation); + cosine = Cos2(rotation); + + affine.xScale = 256; + affine.yScale = 256; + affine.rotation = rotation * 256; + + ObjAffineSet(&affine, &matrix, 1, 2); + + SetOamMatrix(0, matrix.a, matrix.b, matrix.c, matrix.d); + + sprite->oam.x = sprite->x; + sprite->oam.y = sprite->y; +} + +static void ApplyGravity(void) +{ + sFlappy->speed_y += GRAVITY; + + sFlappy->pos_y += sFlappy->speed_y; + + if (sFlappy->pos_y > sFlappy->MIN_Y) { + sFlappy->speed_y = 0; + PlayBGM(MUS_NONE); + PlaySE(SE_SUPER_EFFECTIVE); + DestroySpriteAndFreeResources(&gSprites[sFlappy->TrailSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sFlappy->ButterfreeSpriteId]); + CreateDamage(); + sFlappy->timerDelay = 15; + sFlappy->yUpdate = 4; + sFlappy->state = FLAPPY_STOP; + } + + if (sFlappy->pos_y < sFlappy->MAX_Y) { + sFlappy->speed_y = 0; + PlayBGM(MUS_NONE); + PlaySE(SE_SUPER_EFFECTIVE); + DestroySpriteAndFreeResources(&gSprites[sFlappy->TrailSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sFlappy->ButterfreeSpriteId]); + CreateDamage(); + sFlappy->timerDelay = 15; + sFlappy->yUpdate = 4; + sFlappy->state = FLAPPY_STOP; + } + + if (sFlappy->speed_y > 4) { + sFlappy->speed_y = 4; + } +} + +static void Flap(void) +{ + PlaySE(SE_M_WING_ATTACK); + if (gSprites[sFlappy->ButterfreeSpriteId].animNum == 0) { + gSprites[sFlappy->ButterfreeSpriteId].animNum = 1; + } + else { + gSprites[sFlappy->ButterfreeSpriteId].animCmdIndex = 0; + gSprites[sFlappy->ButterfreeSpriteId].animPaused = FALSE; + } + sFlappy->speed_y = FLAP_STRENGTH; +} + +void ChangeObstacle1() { + u16* bg2Tilemap = (u16*)0x0600E000; + + u16 tileGroups[5][20][4] = { + // Group 1 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + }, + // Group 2 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + }, + // Group 3 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + }, + // Group 4 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + }, + // Group 5 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + } + }; + + int groupIndex = sFlappy->Obstacle1Id - 1; + + int startX = 12; + int startY = 0; + int y; + int x; + u16 tilemapIndex; + + for (y = 0; y < 20; ++y) { + for (x = 0; x < 4; ++x) { + tilemapIndex = (y + startY) * 32 + (x + startX); + + bg2Tilemap[tilemapIndex] = tileGroups[groupIndex][y][x]; + } + } +} + +void ChangeObstacle2() { + u16* bg2Tilemap = (u16*)0x0600E000; + + u16 tileGroups[5][20][4] = { + // Group 1 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + }, + // Group 2 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + }, + // Group 3 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + }, + // Group 4 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + }, + // Group 5 + { + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x5, 0x6, 0x7}, + {0x8, 0x9, 0xA, 0xB}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0x0, 0x0, 0x0, 0x0}, + {0xC, 0xD, 0xE, 0xF}, + {0x1, 0x10, 0x11, 0x12}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4}, + {0x1, 0x2, 0x3, 0x4} + } + }; + + int groupIndex = sFlappy->Obstacle2Id - 1; + + int startX = 28; + int startY = 0; + int y; + int x; + u16 tilemapIndex; + + for (y = 0; y < 20; ++y) { + for (x = 0; x < 4; ++x) { + tilemapIndex = (y + startY) * 32 + (x + startX); + + bg2Tilemap[tilemapIndex] = tileGroups[groupIndex][y][x]; + } + } +} + +#define SMOOTHING_FACTOR 4 +#define INITIAL_SHOVE 10 + +void UpdateTrailSprite(s16 butterfreeX, s16 butterfreeY) { + sFlappy->TrailoffsetX = butterfreeX - 16; + + if (sFlappy->speed_y < 0 && sFlappy->isFlapping != 1) { + sFlappy->TrailoffsetY = butterfreeY + INITIAL_SHOVE; + sFlappy->isFlapping = 1; + } + + if (sFlappy->speed_y > 0) { + sFlappy->TrailoffsetY = sFlappy->TrailoffsetY + ((butterfreeY - 8) - sFlappy->TrailoffsetY) / SMOOTHING_FACTOR; + sFlappy->isFlapping = 0; + } else { + sFlappy->TrailoffsetY = sFlappy->TrailoffsetY + ((butterfreeY - 8) - sFlappy->TrailoffsetY) / SMOOTHING_FACTOR; + } + + gSprites[sFlappy->TrailSpriteId].x = sFlappy->TrailoffsetX; + gSprites[sFlappy->TrailSpriteId].y = sFlappy->TrailoffsetY; +} + +static void SoundEffect(u8 sfx) +{ + switch (sfx) + { + case 0: + PlaySE(SE_NOTE_C); + sFlappy->SFX++; + break; + case 1: + PlaySE(SE_NOTE_D); + sFlappy->SFX++; + break; + case 2: + PlaySE(SE_NOTE_E); + sFlappy->SFX++; + break; + case 3: + PlaySE(SE_NOTE_F); + sFlappy->SFX++; + break; + case 4: + PlaySE(SE_NOTE_G); + sFlappy->SFX++; + break; + case 5: + PlaySE(SE_NOTE_A); + sFlappy->SFX++; + break; + case 6: + PlaySE(SE_NOTE_B); + sFlappy->SFX++; + break; + case 7: + PlaySE(SE_NOTE_C_HIGH); + sFlappy->SFX = 0; + break; + } +} + +static void FlappyBirdMain(u8 taskId) +{ + + switch (sFlappy->state) + { + case FLAPPY_INIT: + if ((sFlappy->timer == 5) && (sFlappy->timerDelay == 75)) // Butterfree + { + PlayCry_Normal(SPECIES_BUTTERFREE, 0); + gSprites[sFlappy->ButterfreeSpriteId].animNum = 1; + sFlappy->timerDelay--; + } + if ((sFlappy->timer == 4) && (sFlappy->timerDelay == 60)) // 3 + { + CreateThree(); + PlaySE(SE_CONTEST_PLACE); + sFlappy->timerDelay--; + } + else if ((sFlappy->timer == 3) && (sFlappy->timerDelay == 60)) // 2 + { + DestroySpriteAndFreeResources(&gSprites[sFlappy->ThreeSpriteId]); + CreateTwo(); + PlaySE(SE_CONTEST_PLACE); + sFlappy->timerDelay--; + } + else if ((sFlappy->timer == 2) && (sFlappy->timerDelay == 60)) // 1 + { + DestroySpriteAndFreeResources(&gSprites[sFlappy->TwoSpriteId]); + CreateOne(); + PlaySE(SE_CONTEST_PLACE); + sFlappy->timerDelay--; + } + else if ((sFlappy->timer == 1) && (sFlappy->timerDelay == 60)) // Go + { + DestroySpriteAndFreeResources(&gSprites[sFlappy->OneSpriteId]); + CreateStart(); + PlaySE(SE_POKENAV_ON); + sFlappy->timerDelay--; + } + else if ((sFlappy->timer > 0) && (sFlappy->timerDelay > 0)) + { + sFlappy->timerDelay--; + } + else if ((sFlappy->timer > 1) && (sFlappy->timerDelay == 0)) + { + sFlappy->timer--; + sFlappy->timerDelay = 60; + } + else if ((sFlappy->timer == 1) && (sFlappy->timerDelay == 0)) + { + sFlappy->timer--; + } + else if ((sFlappy->timer == 0) && (sFlappy->timerDelay == 0)) + { + DestroySpriteAndFreeResources(&gSprites[sFlappy->StartSpriteId]); + gSprites[sFlappy->TrailSpriteId].invisible = FALSE; + PlayBGM(MUS_RG_CELADON); + sFlappy->state = FLAPPY_INPUT; + } + break; + case FLAPPY_INPUT: + + ScrollX(); + sFlappy->bg2ScrollX = sFlappy->scroll_fg_x_int; + + if (sFlappy->bg2ScrollX == 126) // Change Obstacle 1 + { + sFlappy->Obstacle1Id = (Random() % 5) + 1; + ChangeObstacle1(); + } + + if (sFlappy->bg2ScrollX == 252) // Change Obstacle 2 + { + sFlappy->Obstacle2Id = (Random() % 5) + 1; + ChangeObstacle2(); + } + + if ((sFlappy->bg2ScrollX > 48) && (sFlappy->bg2ScrollX < 97)) // Within Collision Range + { + if (sFlappy->Obstacle1Id == 1) + { + sFlappy->MAX_Y = 26; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle1Id == 2) + { + sFlappy->MAX_Y = 34; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle1Id == 3) + { + sFlappy->MAX_Y = 42; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle1Id == 4) + { + sFlappy->MAX_Y = 50; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle1Id == 5) + { + sFlappy->MAX_Y = 58; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else + { + sFlappy->MAX_Y = MAX_Y_POSITION; + sFlappy->MIN_Y = MIN_Y_POSITION; + } + } + else if ((sFlappy->bg2ScrollX > 176) && (sFlappy->bg2ScrollX < 224)) // Within Collision Range 2 + { + if (sFlappy->Obstacle2Id == 1) + { + sFlappy->MAX_Y = 26; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle2Id == 2) + { + sFlappy->MAX_Y = 34; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle2Id == 3) + { + sFlappy->MAX_Y = 42; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle2Id == 4) + { + sFlappy->MAX_Y = 50; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle2Id == 5) + { + sFlappy->MAX_Y = 58; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else + { + sFlappy->MAX_Y = MAX_Y_POSITION; + sFlappy->MIN_Y = MIN_Y_POSITION; + } + } + else + { + sFlappy->MAX_Y = MAX_Y_POSITION; + sFlappy->MIN_Y = MIN_Y_POSITION; + } + + if (gMain.newKeys & A_BUTTON) { + Flap(); + } + + if ((sFlappy->bg2ScrollX == 225) || ((sFlappy->bg2ScrollX == 98) && (sFlappy->Obstacle1Id != 0))) // Point + { + SoundEffect(sFlappy->SFX); + if (VarGet(GAME_CORNER_VAR_WINNINGS) < 9998) { + VarSet(GAME_CORNER_VAR_WINNINGS, VarGet(GAME_CORNER_VAR_WINNINGS) + 2); } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 9999); + } + if (sFlappy->Points < 9999) { + sFlappy->Points++; } + SetCreditDigits(sFlappy->Points); + } + + gSprites[sFlappy->ButterfreeHitboxSpriteId].y = sFlappy->pos_y; + gSprites[sFlappy->ButterfreeSpriteId].x = gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5; + gSprites[sFlappy->ButterfreeSpriteId].y = gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6; + + if (sFlappy->delay == 0) { + UpdateTrailSprite(gSprites[sFlappy->ButterfreeHitboxSpriteId].x, gSprites[sFlappy->ButterfreeHitboxSpriteId].y); + ApplyGravity(); + sFlappy->delay = 1; + } + else { + sFlappy->delay--; + } + + break; + case FLAPPY_STOP: + if (sFlappy->timerDelay > 0) + { + if (sFlappy->yUpdate == 4) + { + gSprites[sFlappy->DamageSpriteId].y -= 1; + sFlappy->yUpdate = 2; + } + else if (sFlappy->yUpdate == 2) + { + gSprites[sFlappy->DamageSpriteId].y += sFlappy->yUpdate; + sFlappy->yUpdate = 12; + } + else if (sFlappy->yUpdate == 12) + { + gSprites[sFlappy->DamageSpriteId].y -= 2; + sFlappy->yUpdate = 2; + } + sFlappy->timerDelay--; + } + else if ((sFlappy->timerDelay == 0) && (sFlappy->RotateToggle == 0)) + { + gSprites[sFlappy->DamageSpriteId].animNum = 1; + gSprites[sFlappy->DamageSpriteId].animCmdIndex = 0; + sFlappy->RotateToggle = 1; + } + else if ((sFlappy->timerDelay == 0) && (sFlappy->RotateToggle == 1)) + { + sFlappy->DamageSpriteY = gSprites[sFlappy->DamageSpriteId].y; + gSprites[sFlappy->DamageSpriteId].callback = SpriteCB_FlappyDamage; + AnimateSprites(); + PlaySE(SE_FAINT); + sFlappy->state = FLAPPY_ROTATION; + } + break; + case FLAPPY_ROTATION: + if ((sFlappy->jumping != 1) && (sFlappy->jumpHeight == 0)) { + sFlappy->jumping = 1; + sFlappy->jumpHeight = 20; + + sFlappy->jumpSpeed = 0; + sFlappy->fallSpeed = 0; + + sFlappy->velocity = 0; + + sFlappy->originalY = sFlappy->DamageSpriteY; + } + + if (sFlappy->jumping == 1) { + sFlappy->velocity += 64; + + sFlappy->DamageSpriteY -= sFlappy->velocity / 256; + + if (sFlappy->DamageSpriteY < 0) { + sFlappy->DamageSpriteY = 0; + sFlappy->jumping = 0; + sFlappy->velocity = 0; + } + + if (sFlappy->DamageSpriteY <= (sFlappy->originalY - sFlappy->jumpHeight) && sFlappy->DamageSpriteY > 0) { + sFlappy->jumping = 0; + sFlappy->velocity = 0; + } + } + + else { + sFlappy->fallSpeed += 128; + + sFlappy->DamageSpriteY += sFlappy->fallSpeed / 256; + + if (sFlappy->DamageSpriteY > DISPLAY_HEIGHT + 15) { + sFlappy->DamageSpriteY = DISPLAY_HEIGHT + 16; + DestroySpriteAndFreeResources(&gSprites[sFlappy->DamageSpriteId]); + sFlappy->timerDelay = 140; + PlayFanfare(MUS_TOO_BAD); + CreateGameOver(); + sFlappy->state = FLAPPY_GAMEOVER; + } + } + + gSprites[sFlappy->DamageSpriteId].y = sFlappy->DamageSpriteY; + + break; + + case FLAPPY_GAMEOVER: + gSprites[sFlappy->GameOverSpriteId].x = 120; + gSprites[sFlappy->GameOverSpriteId].y = 80; + if (sFlappy->timerDelay == 0) + { + if (sFlappy->Points > VarGet(FLAPPY_VAR_HIGH_SCORE)) + { + PlayFanfare(MUS_LEVEL_UP); + VarSet(FLAPPY_VAR_HIGH_SCORE, sFlappy->Points); + sFlappy->timerDelay = 100; + DestroySpriteAndFreeResources(&gSprites[sFlappy->GameOverSpriteId]); + CreateHiScore(); + sFlappy->state = FLAPPY_HISCORE; + } + else + { + StartExitFlappyBird(); + } + } + else + { + sFlappy->timerDelay--; + } + break; + case FLAPPY_HISCORE: + if (sFlappy->timerDelay == 0) + { + StartExitFlappyBird(); + } + else + { + sFlappy->timerDelay--; + } + break; + case FLAPPY_EXIT: + ExitFlappyBird(); + break; + } +} + +static void InitFlappyBirdScreen(void) +{ + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + ResetTempTileDataBuffers(); + + InitBgsFromTemplates(0, sFlappyBGtemplates, ARRAY_COUNT(sFlappyBGtemplates)); + + SetBgTilemapBuffer(FlappyBird_BG, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(FlappyBird_FG, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(Arcade_BG, AllocZeroed(BG_SCREEN_SIZE)); + //SetBgTilemapBuffer(FlappyBird_TEXT_MENUS, AllocZeroed(BG_SCREEN_SIZE)); + + ResetPaletteFade(); + + DecompressAndLoadBgGfxUsingHeap(Arcade_BG, Arcade_FG_Img, 0x600, 0, 0); + CopyToBgTilemapBuffer(Arcade_BG, Arcade_FG_Tilemap, 0, 0); + LoadPalette(Arcade_FG_Pal, 0x20, sizeof(Arcade_FG_Pal)); + CopyBgTilemapBufferToVram(Arcade_BG); + + DecompressAndLoadBgGfxUsingHeap(FlappyBird_FG, FlappyBird_FG_Img, 0x600, 0, 0); + CopyToBgTilemapBuffer(FlappyBird_FG, FlappyBird_FG_Tilemap, 0, 0); + LoadPalette(FlappyBird_FG_Pal, 0, sizeof(FlappyBird_FG_Pal)); + CopyBgTilemapBufferToVram(FlappyBird_FG); + + DecompressAndLoadBgGfxUsingHeap(FlappyBird_BG, FlappyBird_BG_Img, 0x1000, 0, 0); + CopyToBgTilemapBuffer(FlappyBird_BG, FlappyBird_BG_Tilemap, 0, 0); + LoadPalette(FlappyBird_BG_Pal, 0x10, sizeof(FlappyBird_BG_Pal)); + CopyBgTilemapBufferToVram(FlappyBird_BG); + + // Sprite Stuff + ResetSpriteData(); + FreeAllSpritePalettes(); + LoadSpritePalettes(sSpritePalettes); + CreateHitbox(); + CreateBorder(); + CreateBorder2(); + CreateFlap(); + CreateCreditSprites(); + SetCreditDigits(0); + CreateHiScoreSprites(); + SetScoreDigits(VarGet(FLAPPY_VAR_HIGH_SCORE)); + CreateScore(); + CreateScore2(); + CreateButterfree(); + CreateTrail(); + gSprites[sFlappy->TrailSpriteId].invisible = TRUE; + + sFlappy->pos_y = 80; + sFlappy->speed_y = 0; + sFlappy->flap_strength = FLAP_STRENGTH; + sFlappy->MIN_Y = 140; + sFlappy->MAX_Y = 10; + sFlappy->Obstacle2Id = 0; + sFlappy->Obstacle2Id = 1; + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + sFlappy->timer = 5; + sFlappy->timerDelay = 75; + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON); + SetGpuReg(REG_OFFSET_BG2CNT, 0x1800); // Set BG2 in Mode 2 + SetGpuReg(REG_OFFSET_BG3CNT, 0x1800); // Set BG3 in Mode 2 + + ShowBg(FlappyBird_BG); + ShowBg(FlappyBird_FG); + ShowBg(Arcade_BG); + //ShowBg(FlappyBird_TEXT_MENUS); // If menus should appear over the game, this can be shown + + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(FlappyBirdVBlankCallback); + SetMainCallback2(FlappyBirdMainCallback); + CreateTask(FlappyBirdMain, 1); +} diff --git a/src/game_corner_blackjack.c b/src/game_corner_blackjack.c new file mode 100644 index 000000000000..1e914f319cf9 --- /dev/null +++ b/src/game_corner_blackjack.c @@ -0,0 +1,3361 @@ +#include "game_corner_blackjack.h" +#include "global.h" +#include "malloc.h" +#include "bg.h" +#include "coins.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "field_message_box.h" +#include "international_string_util.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "palette_util.h" +#include "random.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "tv.h" +#include "window.h" +#include "constants/coins.h" +#include "constants/flags.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/vars.h" +#include "scanline_effect.h" +#include "pokemon_storage_system.h" +#include "string_util.h" +#include "field_specials.h" + +enum +{ + HIT_0, + HIT_1, + HIT_2, +}; + +enum +{ + DOUBLE_0, + DOUBLE_1, + DOUBLE_2, + DOUBLE_3, + DOUBLE_4, +}; + +enum +{ + hitBJ_0, + hitBJ_1, + hitBJ_2, +}; + +enum +{ + STAND_0, + STAND_1, + STAND_2, + STAND_3, + STAND_4, + STAND_5, +}; + +enum +{ + WIN_0, + WIN_1, + WIN_2, + WIN_3, + WIN_4, +}; + +enum +{ + LOSE_0, + LOSE_1, + LOSE_2, +}; + +enum +{ + BUST_0, + BUST_1, + BUST_2, +}; + +enum +{ + PUSH_0, + PUSH_1, + PUSH_2, + PUSH_3, + PUSH_4, +}; + +enum +{ + BJ_STATE_INIT, + BJ_STATE_PROCESS_INPUT, + BJ_STATE_COMPLETED_WAIT_FOR_SOUND, + BJ_STATE_PROCESS_COMPLETED_INPUT, + BJ_STATE_START_EXIT, + BJ_STATE_EXIT, +}; + +enum { + SPR_CREDIT_DIG_1, + SPR_CREDIT_DIG_10, + SPR_CREDIT_DIG_100, + SPR_CREDIT_DIG_1000, +}; + +enum { + SPR_PLAYER_DIG_1, + SPR_PLAYER_DIG_10, +}; + +enum { + SPR_DEALER_DIG_1, + SPR_DEALER_DIG_10, +}; + +#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 +#define SPR_PLAYER_DIGITS SPR_PLAYER_DIG_1 +#define SPR_DEALER_DIGITS SPR_DEALER_DIG_1 + +#define SPR_CREDIT_DIG_1 0 +#define SPR_CREDIT_DIG_10 1 +#define SPR_CREDIT_DIG_100 2 +#define SPR_CREDIT_DIG_1000 3 + +#define hitState HIT_0 +#define doubleState DOUBLE_0 +#define hitBJState hitBJ_0 +#define standState STAND_0 +#define winState WIN_0 +#define loseState LOSE_0 +#define bustState BUST_0 +#define pushState PUSH_0 + +#define MAX_SPRITES_CREDIT 4 +#define MAX_SPRITES_PLAYER 2 +#define MAX_SPRITES_DEALER 2 + +#define MAX_PLAYER_CARDS 9 +#define MAX_DEALER_CARDS 9 + +struct BlackJack { + u8 state; + // + u8 numPlayerCards; + u8 numDealerCards; + // + u8 cursorSpriteId; + // + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; + u8 DealerSpriteIds[MAX_SPRITES_DEALER]; + // + u8 option1SpriteId; + u8 option2SpriteId; + u8 option3SpriteId; + // Player card IDs and numbers (to store their sprites and values) + u8 playerCardIds[MAX_PLAYER_CARDS]; + u8 playerCardNumbers[MAX_PLAYER_CARDS]; + + // Dealer card IDs and numbers + u8 dealerCardIds[MAX_DEALER_CARDS]; + u8 dealerCardNumbers[MAX_DEALER_CARDS]; + // Facedown Sprite ID + u8 DealerFaceDownId; + // + u8 CurrentLoadedSuit; + // + u8 LogoId; + + // Ace Values (1 or 11) + u8 AceHearts; + u8 AceDiamonds; + u8 AceClubs; + u8 AceSpades; + // + u8 AceAdjustPlayer; + u8 AceAdjustDealer; + // + u32 waitTimer; + // + u8 hitState; + u8 doubleState; + u8 hitBJState; + u8 standState; + u8 winState; + u8 loseState; + u8 bustState; + u8 pushState; + // + u8 exitToggle; + // +}; + +static EWRAM_DATA struct BlackJack *sBlackJack = NULL; +static EWRAM_INIT u8 sTextWindowId = 1; + +static void FadeToBJScreen(u8 taskId); +static void InitBJScreen(void); +static void BJVBlankCallback(void); +static void CreateCursorSprite(void); +static void CreateOptions(void); +static void AdjustCards(void); +static void CreateFacedown(void); +static void LoadHeartsSpriteSheet(void); +static void LoadDiamondsSpriteSheet(void); +static void LoadClubsSpriteSheet(void); +static void LoadSpadesSpriteSheet(void); +static void ShuffleCards(void); +static void UpdateCards(void); +static void SetCardSprite(u8 cardId, u8 cardNum, u8 cardIndex, u8 isPlayerCard); +static void MoveCursor(int direction); +static void StartExitBJ(void); +static void ExitBJ(void); +static void HandleInput(void); +static void BJMain(u8 taskId); +static void HandleInput_BJComplete(void); +static void PrintInitMessage(void); +static void AButton(void); + +//BlackJack +static const u8 sText_Bust[] = _("BUST!"); +static const u8 sText_YouLose[] = _("You lose!"); +static const u8 sText_YouWin[] = _("You win!"); +static const u8 sText_Push[] = _("PUSH!"); +static const u8 sText_BlackJack[] = _("BLACKJACK!"); +static const u8 sText_Betting[] = _("Your current\nbet is ¥{STR_VAR_1}."); +static const u8 sText_NoBetting[] = _("Your current\nbet is ¥0."); +static const u8 sText_NoMoney[] = _("You do not have\nenough COINS."); +static const u8 sHelpBarHitStandText[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}SELECT {B_BUTTON}EXIT"); + +static const u32 sBJBackgroundGfx[] = INCBIN_U32("graphics/blackjack/background_tiles.4bpp.lz"); +static const u8 sBJBackgroundTilemap[] = INCBIN_U8("graphics/blackjack/background_tiles.bin.lz"); +static const u16 sBJBackgroundPalette[] = INCBIN_U16("graphics/blackjack/background.gbapal"); + +static const u32 gCredits_Gfx[] = INCBIN_U32("graphics/blackjack/digits.4bpp.lz"); +static const u16 sCredit_Pal[] = INCBIN_U16("graphics/blackjack/digits.gbapal"); +static const u32 gPlayer_Gfx[] = INCBIN_U32("graphics/blackjack/digits_player.4bpp.lz"); +static const u32 gDealer_Gfx[] = INCBIN_U32("graphics/blackjack/digits_dealer.4bpp.lz"); +static const u16 sPlayer_Pal[] = INCBIN_U16("graphics/blackjack/digits_player.gbapal"); +static const u16 sDealer_Pal[] = INCBIN_U16("graphics/blackjack/digits_dealer.gbapal"); + +static const u32 gOption_1_Gfx[] = INCBIN_U32("graphics/blackjack/option_1.4bpp.lz"); +static const u32 gOption_2_Gfx[] = INCBIN_U32("graphics/blackjack/option_2.4bpp.lz"); +static const u32 gOption_3_Gfx[] = INCBIN_U32("graphics/blackjack/option_3.4bpp.lz"); + +static const u32 gCards_2_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_2.4bpp.lz"); +static const u32 gCards_3_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_3.4bpp.lz"); +static const u32 gCards_4_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_4.4bpp.lz"); +static const u32 gCards_5_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_5.4bpp.lz"); +static const u32 gCards_6_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_6.4bpp.lz"); +static const u32 gCards_7_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_7.4bpp.lz"); +static const u32 gCards_8_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_8.4bpp.lz"); +static const u32 gCards_9_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_9.4bpp.lz"); +static const u32 gCards_10_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_10.4bpp.lz"); +static const u32 gCards_J_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_j.4bpp.lz"); +static const u32 gCards_Q_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_q.4bpp.lz"); +static const u32 gCards_K_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_k.4bpp.lz"); +static const u32 gCards_A_Hearts_Gfx[] = INCBIN_U32("graphics/blackjack/cards/hearts/cards_hearts_a.4bpp.lz"); + +static const u32 gCards_2_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_2.4bpp.lz"); +static const u32 gCards_3_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_3.4bpp.lz"); +static const u32 gCards_4_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_4.4bpp.lz"); +static const u32 gCards_5_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_5.4bpp.lz"); +static const u32 gCards_6_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_6.4bpp.lz"); +static const u32 gCards_7_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_7.4bpp.lz"); +static const u32 gCards_8_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_8.4bpp.lz"); +static const u32 gCards_9_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_9.4bpp.lz"); +static const u32 gCards_10_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_10.4bpp.lz"); +static const u32 gCards_J_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_j.4bpp.lz"); +static const u32 gCards_Q_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_q.4bpp.lz"); +static const u32 gCards_K_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_k.4bpp.lz"); +static const u32 gCards_A_Diamonds_Gfx[] = INCBIN_U32("graphics/blackjack/cards/diamonds/cards_diamonds_a.4bpp.lz"); + +static const u32 gCards_2_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_2.4bpp.lz"); +static const u32 gCards_3_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_3.4bpp.lz"); +static const u32 gCards_4_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_4.4bpp.lz"); +static const u32 gCards_5_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_5.4bpp.lz"); +static const u32 gCards_6_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_6.4bpp.lz"); +static const u32 gCards_7_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_7.4bpp.lz"); +static const u32 gCards_8_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_8.4bpp.lz"); +static const u32 gCards_9_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_9.4bpp.lz"); +static const u32 gCards_10_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_10.4bpp.lz"); +static const u32 gCards_J_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_j.4bpp.lz"); +static const u32 gCards_Q_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_q.4bpp.lz"); +static const u32 gCards_K_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_k.4bpp.lz"); +static const u32 gCards_A_Clubs_Gfx[] = INCBIN_U32("graphics/blackjack/cards/clubs/cards_clubs_a.4bpp.lz"); + +static const u32 gCards_2_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_2.4bpp.lz"); +static const u32 gCards_3_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_3.4bpp.lz"); +static const u32 gCards_4_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_4.4bpp.lz"); +static const u32 gCards_5_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_5.4bpp.lz"); +static const u32 gCards_6_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_6.4bpp.lz"); +static const u32 gCards_7_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_7.4bpp.lz"); +static const u32 gCards_8_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_8.4bpp.lz"); +static const u32 gCards_9_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_9.4bpp.lz"); +static const u32 gCards_10_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_10.4bpp.lz"); +static const u32 gCards_J_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_j.4bpp.lz"); +static const u32 gCards_Q_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_q.4bpp.lz"); +static const u32 gCards_K_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_k.4bpp.lz"); +static const u32 gCards_A_Spades_Gfx[] = INCBIN_U32("graphics/blackjack/cards/spades/cards_spades_a.4bpp.lz"); + +static const u32 gFaceDown_Gfx[] = INCBIN_U32("graphics/blackjack/facedown.4bpp.lz"); +static const u16 sCards_Pal[] = INCBIN_U16("graphics/blackjack/cards.gbapal"); + +static const u32 sCursor_Gfx[] = INCBIN_U32("graphics/blackjack/cursor.4bpp.lz"); +static const u16 sCursorTiles_Pal[] = INCBIN_U16("graphics/blackjack/cursor.gbapal"); + +static const u32 sPopup_Gfx[] = INCBIN_U32("graphics/blackjack/popup.4bpp.lz"); + +static void ShowHelpBar(const u8 *str); +static void ShowHit(const u8 *str); +static void ShowStand(const u8 *str); +static void ShowDouble(const u8 *str); +static void ShowInsurance(const u8 *str); +static void ShowPlus(const u8 *str); +static void ShowMinus(const u8 *str); +static void ShowBet(const u8 *str); +static void SetCreditDigits(u16); +static void SetPlayerDigits(u16); +static void SetDealerDigits(u16); +static void CreatePlayerSprites(); +static void CreateCreditSprites(); +static void CreateDealerSprites(); +static void CreatePopUpSprite(); + +#define BJ_BG_BASE 1 +#define BJ_WIN_MENU 2 + +static const u8 cardPoints[52] = { + 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 0, // Hearts (0-12) + 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 0, // Diamonds (13-25) + 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 0, // Clubs (26-38) + 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 0, // Spades (39-51) +}; + +struct CardPosition { + s16 x; + s16 y; + u8 priority; +}; + +static const struct CardPosition cardPositions[18] = { + // Player cards (x, y, priority) + {144, 120, 9}, {112, 120, 8}, {80, 120, 7}, {48, 120, 6}, {16, 120, 5}, + {64, 120, 4}, {48, 120, 3}, {32, 120, 2}, {16, 120, 1}, + + // Dealer cards (x, y, priority) + {16, 56, 9}, {48, 56, 8}, {80, 56, 7}, {112, 56, 6}, {144, 56, 5}, + {96, 56, 4}, {112, 56, 3}, {128, 56, 2}, {144, 56, 1} +}; + +static const struct BgTemplate sBJBgTemplates[] = { + { + .bg = BJ_BG_BASE, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = BJ_WIN_MENU, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sBJWinTemplates[] = { + { + .bg = BJ_BG_BASE, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 11, + .baseBlock = 0x73, + }, + { + .bg = BJ_WIN_MENU, + .tilemapLeft = 3, + .tilemapTop = 15, + .width = 14, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x194, + }, + DUMMY_WIN_TEMPLATE, +}; + +#define PALTAG_INTERFACE 1 +#define PALTAG_INTERFACEPLAYER 2 +#define PALTAG_INTERFACEDEALER 3 +#define PALTAG_CURSOR 4 +#define PALTAG_OPTION1 5 +#define PALTAG_OPTION2 6 +#define PALTAG_OPTION3 7 +#define PALTAG_CARDS_HEARTS 8 +#define PALTAG_FACEDOWN 9 +#define PALTAG_CARDS_CLUBS 10 +#define PALTAG_CARDS_DIAMONDS 11 +#define PALTAG_CARDS_SPADES 12 +#define PALTAG_POPUP 13 + +#define GFXTAG_CREDIT_DIGIT 1 +#define GFXTAG_PLAYER_DIGIT 2 +#define GFXTAG_DEALER_DIGIT 3 +#define GFXTAG_CURSOR 4 +#define GFXTAG_OPTION1 5 +#define GFXTAG_OPTION2 6 +#define GFXTAG_OPTION3 7 +#define GFXTAG_FACEDOWN 8 + +#define GFXTAG_CARDS_HEARTS_2 9 +#define GFXTAG_CARDS_HEARTS_3 10 +#define GFXTAG_CARDS_HEARTS_4 11 +#define GFXTAG_CARDS_HEARTS_5 12 +#define GFXTAG_CARDS_HEARTS_6 13 +#define GFXTAG_CARDS_HEARTS_7 14 +#define GFXTAG_CARDS_HEARTS_8 15 +#define GFXTAG_CARDS_HEARTS_9 16 +#define GFXTAG_CARDS_HEARTS_10 17 +#define GFXTAG_CARDS_HEARTS_J 18 +#define GFXTAG_CARDS_HEARTS_Q 19 +#define GFXTAG_CARDS_HEARTS_K 20 +#define GFXTAG_CARDS_HEARTS_A 21 + +#define GFXTAG_CARDS_DIAMONDS_2 22 +#define GFXTAG_CARDS_DIAMONDS_3 23 +#define GFXTAG_CARDS_DIAMONDS_4 24 +#define GFXTAG_CARDS_DIAMONDS_5 25 +#define GFXTAG_CARDS_DIAMONDS_6 26 +#define GFXTAG_CARDS_DIAMONDS_7 27 +#define GFXTAG_CARDS_DIAMONDS_8 28 +#define GFXTAG_CARDS_DIAMONDS_9 29 +#define GFXTAG_CARDS_DIAMONDS_10 30 +#define GFXTAG_CARDS_DIAMONDS_J 31 +#define GFXTAG_CARDS_DIAMONDS_Q 32 +#define GFXTAG_CARDS_DIAMONDS_K 33 +#define GFXTAG_CARDS_DIAMONDS_A 34 + +#define GFXTAG_CARDS_CLUBS_2 35 +#define GFXTAG_CARDS_CLUBS_3 36 +#define GFXTAG_CARDS_CLUBS_4 37 +#define GFXTAG_CARDS_CLUBS_5 38 +#define GFXTAG_CARDS_CLUBS_6 39 +#define GFXTAG_CARDS_CLUBS_7 40 +#define GFXTAG_CARDS_CLUBS_8 41 +#define GFXTAG_CARDS_CLUBS_9 42 +#define GFXTAG_CARDS_CLUBS_10 43 +#define GFXTAG_CARDS_CLUBS_J 44 +#define GFXTAG_CARDS_CLUBS_Q 45 +#define GFXTAG_CARDS_CLUBS_K 46 +#define GFXTAG_CARDS_CLUBS_A 47 + +#define GFXTAG_CARDS_SPADES_2 48 +#define GFXTAG_CARDS_SPADES_3 49 +#define GFXTAG_CARDS_SPADES_4 50 +#define GFXTAG_CARDS_SPADES_5 51 +#define GFXTAG_CARDS_SPADES_6 52 +#define GFXTAG_CARDS_SPADES_7 53 +#define GFXTAG_CARDS_SPADES_8 54 +#define GFXTAG_CARDS_SPADES_9 55 +#define GFXTAG_CARDS_SPADES_10 56 +#define GFXTAG_CARDS_SPADES_J 57 +#define GFXTAG_CARDS_SPADES_Q 58 +#define GFXTAG_CARDS_SPADES_K 59 +#define GFXTAG_CARDS_SPADES_A 60 + +#define GFXTAG_POPUP 61 + +#define STD_WINDOW_PALETTE_NUM 14 +#define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10) + +static const struct SpritePalette sSpritePalettes[] = +{ + { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = sDealer_Pal, .tag = PALTAG_INTERFACEDEALER }, + { .data = sCursorTiles_Pal, .tag = PALTAG_CURSOR }, + { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION1 }, + { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION2 }, + { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION3 }, + { .data = sCards_Pal, .tag = PALTAG_CARDS_HEARTS }, + { .data = sCards_Pal, .tag = PALTAG_FACEDOWN }, + { .data = sCards_Pal, .tag = PALTAG_CARDS_CLUBS }, + { .data = sCards_Pal, .tag = PALTAG_CARDS_DIAMONDS }, + { .data = sCards_Pal, .tag = PALTAG_CARDS_SPADES }, + { .data = sCursorTiles_Pal, .tag = PALTAG_POPUP }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cursor = +{ + .data = sCursor_Gfx, + .size = 0x400, + .tag = GFXTAG_CURSOR, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Popup = +{ + .data = sPopup_Gfx, + .size = 0x800, + .tag = GFXTAG_POPUP, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Option1 = +{ + .data = gOption_1_Gfx, + .size = 0x300, + .tag = GFXTAG_OPTION1, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Option2 = +{ + .data = gOption_2_Gfx, + .size = 0x300, + .tag = GFXTAG_OPTION2, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Option3 = +{ + .data = gOption_3_Gfx, + .size = 0x400, + .tag = GFXTAG_OPTION3, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_2 = +{ + .data = gCards_2_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_2, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_3 = +{ + .data = gCards_3_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_3, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_4 = +{ + .data = gCards_4_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_4, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_5 = +{ + .data = gCards_5_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_5, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_6 = +{ + .data = gCards_6_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_6, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_7 = +{ + .data = gCards_7_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_7, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_8 = +{ + .data = gCards_8_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_8, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_9 = +{ + .data = gCards_9_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_9, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_10 = +{ + .data = gCards_10_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_10, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_J = +{ + .data = gCards_J_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_J, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_Q = +{ + .data = gCards_Q_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_Q, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_K = +{ + .data = gCards_K_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_K, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Hearts_A = +{ + .data = gCards_A_Hearts_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_HEARTS_A, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_2 = +{ + .data = gCards_2_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_2, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_3 = +{ + .data = gCards_3_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_3, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_4 = +{ + .data = gCards_4_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_4, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_5 = +{ + .data = gCards_5_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_5, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_6 = +{ + .data = gCards_6_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_6, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_7 = +{ + .data = gCards_7_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_7, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_8 = +{ + .data = gCards_8_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_8, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_9 = +{ + .data = gCards_9_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_9, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_10 = +{ + .data = gCards_10_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_10, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_J = +{ + .data = gCards_J_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_J, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_Q = +{ + .data = gCards_Q_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_Q, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_A = +{ + .data = gCards_A_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_A, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Clubs_K = +{ + .data = gCards_K_Clubs_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_CLUBS_K, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_2 = +{ + .data = gCards_2_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_2, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_3 = +{ + .data = gCards_3_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_3, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_4 = +{ + .data = gCards_4_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_4, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_5 = +{ + .data = gCards_5_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_5, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_6 = +{ + .data = gCards_6_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_6, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_7 = +{ + .data = gCards_7_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_7, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_8 = +{ + .data = gCards_8_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_8, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_9 = +{ + .data = gCards_9_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_9, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_10 = +{ + .data = gCards_10_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_10, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_J = +{ + .data = gCards_J_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_J, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_Q = +{ + .data = gCards_Q_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_Q, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_K = +{ + .data = gCards_K_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_K, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Diamonds_A = +{ + .data = gCards_A_Diamonds_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_DIAMONDS_A, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_2 = +{ + .data = gCards_2_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_2, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_3 = +{ + .data = gCards_3_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_3, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_4 = +{ + .data = gCards_4_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_4, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_5 = +{ + .data = gCards_5_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_5, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_6 = +{ + .data = gCards_6_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_6, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_7 = +{ + .data = gCards_7_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_7, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_8 = +{ + .data = gCards_8_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_8, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_9 = +{ + .data = gCards_9_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_9, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_10 = +{ + .data = gCards_10_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_10, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_J = +{ + .data = gCards_J_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_J, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_Q = +{ + .data = gCards_Q_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_Q, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_K = +{ + .data = gCards_K_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_K, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Cards_Spades_A = +{ + .data = gCards_A_Spades_Gfx, + .size = 0x400, + .tag = GFXTAG_CARDS_SPADES_A, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Facedown = +{ + .data = gFaceDown_Gfx, + .size = 0x400, + .tag = GFXTAG_FACEDOWN, +}; + +static const struct OamData sOamData_Cards_Hearts = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x64), + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Cards_Diamonds = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x64), + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Cards_Clubs = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x64), + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Cards_Spades = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x64), + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Facedown = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x64), + .size = SPRITE_SIZE(32x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Cursor = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Popup = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Option1 = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Option2 = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Option3 = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Facedown = +{ + .tileTag = GFXTAG_FACEDOWN, + .paletteTag = PALTAG_FACEDOWN, + .oam = &sOamData_Facedown, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Popup = +{ + .tileTag = GFXTAG_POPUP, + .paletteTag = PALTAG_POPUP, + .oam = &sOamData_Popup, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_2 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_2, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_3 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_3, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_4 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_4, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_5 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_5, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_6 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_6, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_7 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_7, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_8 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_8, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_9 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_9, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_10 = +{ + .tileTag = GFXTAG_CARDS_HEARTS_10, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_J = +{ + .tileTag = GFXTAG_CARDS_HEARTS_J, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_Q = +{ + .tileTag = GFXTAG_CARDS_HEARTS_Q, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_K = +{ + .tileTag = GFXTAG_CARDS_HEARTS_K, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Hearts_A = +{ + .tileTag = GFXTAG_CARDS_HEARTS_A, + .paletteTag = PALTAG_CARDS_HEARTS, + .oam = &sOamData_Cards_Hearts, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_2 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_2, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_3 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_3, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_4 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_4, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_5 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_5, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_6 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_6, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_7 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_7, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_8 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_8, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_9 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_9, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_10 = +{ + .tileTag = GFXTAG_CARDS_CLUBS_10, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_J = +{ + .tileTag = GFXTAG_CARDS_CLUBS_J, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_Q = +{ + .tileTag = GFXTAG_CARDS_CLUBS_Q, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_K = +{ + .tileTag = GFXTAG_CARDS_CLUBS_K, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Clubs_A = +{ + .tileTag = GFXTAG_CARDS_CLUBS_A, + .paletteTag = PALTAG_CARDS_CLUBS, + .oam = &sOamData_Cards_Clubs, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_2 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_2, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_3 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_3, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_4 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_4, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_5 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_5, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_6 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_6, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_7 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_7, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_8 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_8, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_9 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_9, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_10 = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_10, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_J = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_J, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_Q = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_Q, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_K = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_K, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Diamonds_A = +{ + .tileTag = GFXTAG_CARDS_DIAMONDS_A, + .paletteTag = PALTAG_CARDS_DIAMONDS, + .oam = &sOamData_Cards_Diamonds, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_2 = +{ + .tileTag = GFXTAG_CARDS_SPADES_2, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_3 = +{ + .tileTag = GFXTAG_CARDS_SPADES_3, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_4 = +{ + .tileTag = GFXTAG_CARDS_SPADES_4, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_5 = +{ + .tileTag = GFXTAG_CARDS_SPADES_5, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_6 = +{ + .tileTag = GFXTAG_CARDS_SPADES_6, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_7 = +{ + .tileTag = GFXTAG_CARDS_SPADES_7, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_8 = +{ + .tileTag = GFXTAG_CARDS_SPADES_8, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_9 = +{ + .tileTag = GFXTAG_CARDS_SPADES_9, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_10 = +{ + .tileTag = GFXTAG_CARDS_SPADES_10, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_J = +{ + .tileTag = GFXTAG_CARDS_SPADES_J, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_Q = +{ + .tileTag = GFXTAG_CARDS_SPADES_Q, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_K = +{ + .tileTag = GFXTAG_CARDS_SPADES_K, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cards_Spades_A = +{ + .tileTag = GFXTAG_CARDS_SPADES_A, + .paletteTag = PALTAG_CARDS_SPADES, + .oam = &sOamData_Cards_Spades, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Cursor = +{ + .tileTag = GFXTAG_CURSOR, + .paletteTag = PALTAG_CURSOR, + .oam = &sOamData_Cursor, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Option1 = +{ + .tileTag = GFXTAG_OPTION1, + .paletteTag = PALTAG_OPTION1, + .oam = &sOamData_Option1, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Option2 = +{ + .tileTag = GFXTAG_OPTION2, + .paletteTag = PALTAG_OPTION2, + .oam = &sOamData_Option2, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Option3 = +{ + .tileTag = GFXTAG_OPTION3, + .paletteTag = PALTAG_OPTION3, + .oam = &sOamData_Option3, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void StartBlackJack(void) +{ + u8 taskId = 0; + sBlackJack = AllocZeroed(sizeof(struct BlackJack)); + taskId = CreateTask(FadeToBJScreen, 0); +} + +static void FadeToBJScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + SetMainCallback2(InitBJScreen); + DestroyTask(taskId); + } + break; + } +} + +static const struct CompressedSpriteSheet sSpriteSheets_Interface[] = +{ + { + .data = gCredits_Gfx, + .size = 0x280, + .tag = GFXTAG_CREDIT_DIGIT + }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheets_PlayerInterface[] = +{ + { + .data = gPlayer_Gfx, + .size = 0x280, + .tag = GFXTAG_PLAYER_DIGIT + }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheets_DealerInterface[] = +{ + { + .data = gDealer_Gfx, + .size = 0x280, + .tag = GFXTAG_DEALER_DIGIT + }, + {} +}; + +static const struct OamData sOam_CreditDigit = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2, +}; + +static const struct SpriteTemplate sSpriteTemplate_CreditDigit = +{ + .tileTag = GFXTAG_CREDIT_DIGIT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate sSpriteTemplate_PlayerDigit = +{ + .tileTag = GFXTAG_PLAYER_DIGIT, + .paletteTag = PALTAG_INTERFACEPLAYER, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate sSpriteTemplate_DealerDigit = +{ + .tileTag = GFXTAG_DEALER_DIGIT, + .paletteTag = PALTAG_INTERFACEDEALER, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static void BJMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void SetCreditDigits(u16 num) +{ + u8 i; + u16 d = 1000; + + for (i = 0; i < 4; i++) + { + u8 digit = num / d; + + gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; + + gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.tileNum = + gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 2; + + num = num % d; + d = d / 10; + } + + for (i = 0; i < 4; i++) { + if (gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible == FALSE) { + + } else { + gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; + } + } + + BuildOamBuffer(); +} + +static void SetPlayerDigits(u16 num) +{ + u8 i; + u16 d = 10; + bool8 isSingleDigit = num < 10; + + for (i = 0; i < 2; i++) + { + u8 digit = num / d; + + gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = FALSE; + + if (i == 0 && isSingleDigit) { + digit = 0; + } + + else if (i == 1 && isSingleDigit) { + digit = num; + } + + gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.tileNum = + gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 2; + + num = num % d; + d = d / 10; + + if (isSingleDigit && i == 1) { + //gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = TRUE; + } + } + BuildOamBuffer(); +} + +static void SetDealerDigits(u16 num) +{ + u8 i; + u16 d = 10; + bool8 isSingleDigit = num < 10; + + for (i = 0; i < 2; i++) + { + u8 digit = num / d; + + gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].invisible = FALSE; + + if (i == 0 && isSingleDigit) { + digit = 0; + } + + else if (i == 1 && isSingleDigit) { + digit = num; + } + + gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].oam.tileNum = + gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].oam.priority = 2; + + num = num % d; + d = d / 10; + + if (isSingleDigit && i == 1) { + //gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].invisible = TRUE; + } + } + BuildOamBuffer(); +} + +static void CreateCreditSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_Interface) - 1; i++) + { + LoadCompressedSpriteSheet(&sSpriteSheets_Interface[i]); + } + + for (i = 0; i < MAX_COIN_DIGITS; i++) + { + if (i == 0){ + sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 188, 39, 2); + } + if (i == 1){ + sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 8 + 188, 39, 2); + } + if (i == 2){ + sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 16 + 188, 39, 2); + } + if (i == 3){ + sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 24 + 188, 39, 2); + } + } +} + +static void CreatePlayerSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PlayerInterface) - 1; i++) + { + LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); + } + + for (i = 0; i < 2; i++) + { + sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS] = CreateSprite(&sSpriteTemplate_PlayerDigit, i * 8 + 180, 148, 2); + } +} + +static void CreateDealerSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_DealerInterface) - 1; i++) + { + LoadCompressedSpriteSheet(&sSpriteSheets_DealerInterface[i]); + } + + for (i = 0; i < 2; i++) + { + sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS] = CreateSprite(&sSpriteTemplate_DealerDigit, i * 8 + 211, 148, 2); + } +} + +static void SetMode(u16 num) +{ + gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE)); + gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE)); + gSprites[sBlackJack->option3SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION3_TILE)); + + if (num == 0) // +100, -100, BET + { + gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE)); + gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE)); + gSprites[sBlackJack->option3SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION3_TILE)); + gSprites[sBlackJack->cursorSpriteId].y = 57; + gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; + gSprites[sBlackJack->option1SpriteId].invisible = FALSE; + gSprites[sBlackJack->option2SpriteId].invisible = FALSE; + gSprites[sBlackJack->option3SpriteId].invisible = FALSE; + } + if (num == 1) // HIT, STAND, NONE + { + gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE) + 8); + gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE) + 8); + gSprites[sBlackJack->cursorSpriteId].y = 57; + gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; + gSprites[sBlackJack->option1SpriteId].invisible = FALSE; + gSprites[sBlackJack->option2SpriteId].invisible = FALSE; + gSprites[sBlackJack->option3SpriteId].invisible = TRUE; + } + if (num == 2) // HIT, STAND, DOUBLE + { + gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE) + 8); + gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE) + 8); + gSprites[sBlackJack->option3SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION3_TILE) + 8); + gSprites[sBlackJack->cursorSpriteId].y = 57; + gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; + gSprites[sBlackJack->option1SpriteId].invisible = FALSE; + gSprites[sBlackJack->option2SpriteId].invisible = FALSE; + gSprites[sBlackJack->option3SpriteId].invisible = FALSE; + } + if (num == 3) // HIT, STAND, INSURE + { + gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE) + 8); + gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE) + 8); + gSprites[sBlackJack->option3SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION3_TILE) + 16); + gSprites[sBlackJack->cursorSpriteId].y = 57; + gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; + gSprites[sBlackJack->option1SpriteId].invisible = FALSE; + gSprites[sBlackJack->option2SpriteId].invisible = FALSE; + gSprites[sBlackJack->option3SpriteId].invisible = FALSE; + } + if (num >= 4) // NONE, NONE, NONE + { + gSprites[sBlackJack->cursorSpriteId].invisible = TRUE; + gSprites[sBlackJack->option1SpriteId].invisible = TRUE; + gSprites[sBlackJack->option2SpriteId].invisible = TRUE; + gSprites[sBlackJack->option3SpriteId].invisible = TRUE; + } +} + +static void InitBJScreen(void) +{ + + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + ResetTempTileDataBuffers(); + + InitBgsFromTemplates(0, sBJBgTemplates, ARRAY_COUNT(sBJBgTemplates)); + SetBgTilemapBuffer(BJ_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(BJ_BG_BASE, sBJBackgroundGfx, 0xE00, 0, 0); + CopyToBgTilemapBuffer(BJ_BG_BASE, sBJBackgroundTilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(sBJBackgroundPalette, 0, sizeof(sBJBackgroundPalette)); + + ResetSpriteData(); + FreeAllSpritePalettes(); + LoadSpritePalettes(sSpritePalettes); + + FlagClear(BLACKJACK_FLAG_INSURANCE); + VarSet(BLACKJACK_VAR_PLAYER, 0); + VarSet(BLACKJACK_VAR_DEALER, 0); + + if ((GetCoins()) >= 10) // If you can afford to play + { + VarSet(BLACKJACK_VAR_OPTIONS, 0); // 0 = Bet, 1 = Hit, 2 = Double, 3 = Insurance, 4 = None + } + else // Not enough coins + { + VarSet(BLACKJACK_VAR_OPTIONS, 4); // 0 = Bet, 1 = Hit, 2 = Double, 3 = Insurance, 4 = None + } + + FlagClear(BLACKJACK_FLAG_BLACKJACK); + CreateCreditSprites(); + + CreatePlayerSprites(); + CreateDealerSprites(); + SetCreditDigits(GetCoins()); + SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); + SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); + CreateCursorSprite(); + CreateOptions(); + VarSet(BLACKJACK_VAR_OPTION1_TILE, (gSprites[sBlackJack->option1SpriteId].oam.tileNum)); + VarSet(BLACKJACK_VAR_OPTION2_TILE, (gSprites[sBlackJack->option2SpriteId].oam.tileNum)); + VarSet(BLACKJACK_VAR_OPTION3_TILE, (gSprites[sBlackJack->option3SpriteId].oam.tileNum)); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + CreatePopUpSprite(); + + CreateFacedown(); + sBlackJack->numPlayerCards = 0; + sBlackJack->numDealerCards = 0; + sBlackJack->AceHearts = 11; + sBlackJack->AceDiamonds = 11; + sBlackJack->AceClubs = 11; + sBlackJack->AceSpades = 11; + sBlackJack->AceAdjustPlayer = 0; + sBlackJack->AceAdjustDealer = 0; + sBlackJack->exitToggle = 0; + AdjustCards(); + ShuffleCards(); + + gSprites[sBlackJack->CreditSpriteIds[0 + SPR_CREDIT_DIGITS]].x = 188; + + DeactivateAllTextPrinters(); + + + + InitWindows(sBJWinTemplates); + + LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); + ShowHelpBar(sHelpBarHitStandText); + PrintInitMessage(); + + CopyBgTilemapBufferToVram(BJ_BG_BASE); + CopyBgTilemapBufferToVram(BJ_WIN_MENU); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); + ShowBg(BJ_BG_BASE); + ShowBg(BJ_WIN_MENU); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(BJVBlankCallback); + SetMainCallback2(BJMainCallback); + CreateTask(BJMain, 1); +} + +static void BGrefresh(void) +{ + //HideBg(BJ_WIN_MENU); + ClearStdWindowAndFrame(sTextWindowId, TRUE); + RemoveWindow(sTextWindowId); +} + +static void BJMain(u8 taskId) +{ + switch (sBlackJack->state) + { + case BJ_STATE_INIT: + if (!gPaletteFade.active) { + sBlackJack->state = BJ_STATE_PROCESS_INPUT; + } + break; + case BJ_STATE_PROCESS_INPUT: + HandleInput(); + break; + case BJ_STATE_COMPLETED_WAIT_FOR_SOUND: + if (IsSEPlaying()) + break; + + PlayFanfare(MUS_SLOTS_WIN); + sBlackJack->state = BJ_STATE_PROCESS_COMPLETED_INPUT; + case BJ_STATE_PROCESS_COMPLETED_INPUT: + HandleInput_BJComplete(); + break; + case BJ_STATE_START_EXIT: + StartExitBJ(); + break; + case BJ_STATE_EXIT: + ExitBJ(); + break; + } +} + +static void ShowMessage(const u8 *str) +{ + struct WindowTemplate template; + SetWindowTemplateFields(&template, BJ_WIN_MENU, 3, 15, 14, 4, 0xF, 0x194); + + sTextWindowId = AddWindow(&template); + FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sTextWindowId); + LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, str, 0, 1, 0, 0); + CopyWindowToVram(sTextWindowId, 3); +} + +static void PrintInitMessage(void) +{ + u8 bet; + bet = VarGet(BLACKJACK_VAR_BET); + + if (GetCoins() > 9) { // You can play + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEFT_ALIGN, 3); + ShowMessage(sText_NoBetting); + } + else + { + ShowMessage(sText_NoMoney); + } +} + +static void HandleInput_BJComplete(void) +{ + if (IsFanfareTaskInactive()) + { + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + gSpecialVar_Result = 1; + sBlackJack->state = BJ_STATE_START_EXIT; + } + } +} + +static void HandleInput(void) +{ + if (JOY_NEW(A_BUTTON)) + { + AButton(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + FlagClear(BLACKJACK_FLAG_RESET); } + } + else if (JOY_NEW(B_BUTTON)) + { + if (sBlackJack->exitToggle == 0) { + sBlackJack->state = BJ_STATE_START_EXIT; + } + } + else if (JOY_NEW(DPAD_UP)) + { + MoveCursor(0); + } + else if (JOY_NEW(DPAD_DOWN)) + { + MoveCursor(2); + } +} + +static void UpdateCardVisibility(void) +{ + int i; + + for (i = 0; i < sBlackJack->numPlayerCards; i++) { + gSprites[sBlackJack->playerCardIds[i]].invisible = FALSE; + } + + for (i = sBlackJack->numPlayerCards; i < MAX_PLAYER_CARDS; i++) { + gSprites[sBlackJack->playerCardIds[i]].invisible = TRUE; + } + + for (i = 0; i < sBlackJack->numDealerCards; i++) { + gSprites[sBlackJack->dealerCardIds[i]].invisible = FALSE; + } + + for (i = sBlackJack->numDealerCards; i < MAX_DEALER_CARDS; i++) { + gSprites[sBlackJack->dealerCardIds[i]].invisible = TRUE; + } + + BuildOamBuffer(); +} + +static void HideAllCards(void) +{ + int i; + + for (i = 0; i < MAX_PLAYER_CARDS; i++) { + gSprites[sBlackJack->playerCardIds[i]].invisible = TRUE; + } + + for (i = 0; i < MAX_DEALER_CARDS; i++) { + gSprites[sBlackJack->dealerCardIds[i]].invisible = TRUE; + } +} + +static void DeleteCards(void) +{ + u8 i; + // Loop through and destroy all player cards + for (i = 0; i < MAX_PLAYER_CARDS; i++) { + if (sBlackJack->playerCardIds[i] != 0) { + DestroySpriteAndFreeResources(&gSprites[sBlackJack->playerCardIds[i]]); + } + } + + // Loop through and destroy all dealer cards + for (i = 0; i < MAX_DEALER_CARDS; i++) { + if (sBlackJack->dealerCardIds[i] != 0) { + DestroySpriteAndFreeResources(&gSprites[sBlackJack->dealerCardIds[i]]); + } + } +} + +static void Reset(void) +{ + HideAllCards(); + BuildOamBuffer(); + BGrefresh(); + FlagClear(BLACKJACK_FLAG_BLACKJACK); + VarSet(BLACKJACK_VAR_BET, 0); + VarSet(BLACKJACK_VAR_DEALER, 0); + VarSet(BLACKJACK_VAR_PLAYER, 0); + sBlackJack->numDealerCards = 0; + sBlackJack->numPlayerCards = 0; + sBlackJack->AceAdjustPlayer = 0; + sBlackJack->AceAdjustDealer = 0; + gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; + gSprites[sBlackJack->LogoId].invisible = FALSE; + SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); + SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); + SetCreditDigits(GetCoins()); + DeleteCards(); + LoadSpritePalettes(sSpritePalettes); + ShuffleCards(); + AdjustCards(); + VarSet(BLACKJACK_VAR_OPTIONS, 0); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + sBlackJack->exitToggle = 0; + FlagSet(BLACKJACK_FLAG_RESET); + DeactivateAllTextPrinters(); + PrintInitMessage(); + return; +} + +static void Push(void) +{ + switch (sBlackJack->pushState) + { + case PUSH_0: + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + PlaySE(SE_BOO); + ShowMessage(sText_Push); + sBlackJack->waitTimer = 100000; + sBlackJack->pushState = 1; + break; + + case PUSH_1: + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->pushState = 2; + } + break; + + case PUSH_2: + + PlaySE(SE_SHOP); + AddCoins(VarGet(BLACKJACK_VAR_BET)); + SetCreditDigits(GetCoins()); + sBlackJack->waitTimer = 30; + sBlackJack->pushState = 3; + break; + + case PUSH_3: + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->pushState = 4; + } + break; + + case PUSH_4: + BGrefresh(); + Reset(); + return; + } +} + +static void ProcessPush(void) +{ + sBlackJack->pushState = PUSH_0; + while (sBlackJack->pushState != PUSH_4) + { + Push(); + } + Push(); +} + +static void Bust(void) +{ + switch (sBlackJack->bustState) + { + case BUST_0: + + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + PlaySE(SE_FAILURE); + ShowMessage(sText_Bust); + sBlackJack->waitTimer = 100000; + sBlackJack->bustState = BUST_1; + break; + + case BUST_1: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->bustState = BUST_2; + } + break; + + case BUST_2: + BGrefresh(); + Reset(); + return; + } +} + +static void ProcessBust(void) +{ + sBlackJack->bustState = BUST_0; + while (sBlackJack->bustState != BUST_2) + { + Bust(); + } + Bust(); +} + +static void Lose(void) +{ + switch (sBlackJack->loseState) + { + case LOSE_0: + + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + PlaySE(SE_FAILURE); + ShowMessage(sText_YouLose); + sBlackJack->waitTimer = 100000; + sBlackJack->loseState = LOSE_1; + break; + + case LOSE_1: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->loseState = LOSE_2; + } + break; + + case LOSE_2: + BGrefresh(); + Reset(); + return; + } +} + +static void ProcessLose(void) +{ + sBlackJack->loseState = LOSE_0; + while (sBlackJack->loseState != LOSE_2) + { + Lose(); + } + Lose(); +} + +static void Win(void) +{ + u16 winnings; + + switch (sBlackJack->winState) + { + case WIN_0: + + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + PlaySE(SE_RG_POKE_JUMP_SUCCESS); + ShowMessage(sText_YouWin); + sBlackJack->waitTimer = 100000; + sBlackJack->winState = WIN_1; + break; + + case WIN_1: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->winState = WIN_2; + } + break; + + case WIN_2: + + PlaySE(SE_SHOP); + if (((VarGet(BLACKJACK_VAR_BET) * 2) + GetCoins()) < 9999) + { + if (FlagGet(BLACKJACK_FLAG_BLACKJACK) == TRUE) + { + // 3:2 payout + winnings = (VarGet(BLACKJACK_VAR_BET) * 3) / 2; + + if ((GetCoins() + winnings) <= 9999) + { + AddCoins(winnings); + } + else + { + SetCoins(9999); + } + } + else + { + // Regular 1:1 payout + winnings = VarGet(BLACKJACK_VAR_BET) * 2; + + if ((GetCoins() + winnings) <= 9999) + { + AddCoins(winnings); + } + else + { + SetCoins(9999); + } + } + } + else + { + SetCoins(9999); + } + SetCreditDigits(GetCoins()); + sBlackJack->waitTimer = 30; + sBlackJack->winState = WIN_3; + break; + + case WIN_3: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + + sBlackJack->winState = WIN_4; + } + break; + + case WIN_4: + BGrefresh(); + Reset(); + return; + } +} + +static void ProcessWin(void) +{ + sBlackJack->winState = WIN_0; + while (sBlackJack->winState != WIN_4) + { + Win(); + } + Win(); +} + +static void Stand(void) +{ + u8 DCardPoints; + + switch (sBlackJack->standState) + { + case STAND_0: + + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + PlaySE(SE_REPEL); + sBlackJack->numDealerCards = 2; + gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; + UpdateCardVisibility(); + AdjustCards(); + DCardPoints = cardPoints[sBlackJack->dealerCardNumbers[1]]; + if (DCardPoints == 0) + { + if (VarGet(BLACKJACK_VAR_DEALER) == 11) + { + DCardPoints = 1; + } + else + { + DCardPoints = 11; + } + } + VarSet(BLACKJACK_VAR_DEALER, (VarGet(BLACKJACK_VAR_DEALER) + DCardPoints)); + SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); + sBlackJack->waitTimer = 100000; + sBlackJack->standState = STAND_1; + break; + + case STAND_1: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + + if (FlagGet(BLACKJACK_FLAG_BLACKJACK) == FALSE) { + sBlackJack->standState = STAND_2; + } + else { + FlagClear(BLACKJACK_FLAG_BLACKJACK); + sBlackJack->standState = STAND_5; + } + } + break; + + case STAND_2: + + if (FlagGet(BLACKJACK_FLAG_INSURANCE) == TRUE) + { + if (VarGet(BLACKJACK_VAR_DEALER) == 21) + { + AddCoins(VarGet(BLACKJACK_VAR_BET)); + FlagClear(BLACKJACK_FLAG_INSURANCE); + } + else { + FlagClear(BLACKJACK_FLAG_INSURANCE); + } + } + + sBlackJack->standState = STAND_3; + break; + + case STAND_3: + + if (VarGet(BLACKJACK_VAR_DEALER) < 17) { + + PlaySE(SE_REPEL); + sBlackJack->numDealerCards++; + UpdateCardVisibility(); + AdjustCards(); + DCardPoints = cardPoints[sBlackJack->dealerCardNumbers[(sBlackJack->numDealerCards - 1)]]; + if (DCardPoints == 0) + { + if ((VarGet(BLACKJACK_VAR_DEALER) + 11) > 21) + { + DCardPoints = 1; + } + else + { + DCardPoints = 11; + } + } + VarSet(BLACKJACK_VAR_DEALER, (VarGet(BLACKJACK_VAR_DEALER) + DCardPoints)); + if (VarGet(BLACKJACK_VAR_DEALER) > 21) + { + if (cardPoints[sBlackJack->dealerCardNumbers[0]] == 0) { + if (sBlackJack->AceAdjustDealer == 0) { + VarSet(BLACKJACK_VAR_DEALER, (VarGet(BLACKJACK_VAR_DEALER) - 10)); + sBlackJack->AceAdjustDealer = 1; + } + } + else if (cardPoints[sBlackJack->dealerCardNumbers[1]] == 0) { + if (sBlackJack->AceAdjustDealer == 0) { + VarSet(BLACKJACK_VAR_DEALER, (VarGet(BLACKJACK_VAR_DEALER) - 10)); + sBlackJack->AceAdjustDealer = 1; + } + } + } + SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); + sBlackJack->waitTimer = 100000; + sBlackJack->standState = STAND_4; + break; + } + else { + sBlackJack->standState = STAND_5; + break; + } + + case STAND_4: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + + sBlackJack->standState = STAND_3; + } + break; + + case STAND_5: + + BGrefresh(); + + if (VarGet(BLACKJACK_VAR_DEALER) < 22) + { + if (VarGet(BLACKJACK_VAR_DEALER) > VarGet(BLACKJACK_VAR_PLAYER)) // Dealer Wins + { + ProcessLose(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; } + } + else if (VarGet(BLACKJACK_VAR_DEALER) < VarGet(BLACKJACK_VAR_PLAYER)) // Player Wins + { + ProcessWin(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; } + } + if (VarGet(BLACKJACK_VAR_DEALER) == VarGet(BLACKJACK_VAR_PLAYER)) // Push + { + ProcessPush(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; } + } + } + else if (VarGet(BLACKJACK_VAR_DEALER) > 21) // Dealer Busts + { + ProcessWin(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; } + } + return; + } +} + +static void ProcessStand(void) +{ + sBlackJack->standState = STAND_0; + while (sBlackJack->standState != STAND_5) + { + Stand(); + } + Stand(); +} + +static void HitBlackJack(void) +{ + switch (sBlackJack->hitBJState) + { + case hitBJ_0: + + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + PlaySE(SE_APPLAUSE); + ShowMessage(sText_BlackJack); + sBlackJack->waitTimer = 300000; + sBlackJack->hitBJState = hitBJ_1; + break; + + case 1: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->hitBJState = hitBJ_2; + } + break; + + case 2: + + BGrefresh(); + FlagSet(BLACKJACK_FLAG_BLACKJACK); + ProcessStand(); + return; + } +} + +static void ProcessHitBJ(void) +{ + sBlackJack->hitBJState = hitBJ_0; + while (sBlackJack->hitBJState != hitBJ_2) + { + HitBlackJack(); + } + HitBlackJack(); +} + +static void Double(void) +{ + u8 playerCardPoints; + + switch (sBlackJack->doubleState) + { + case DOUBLE_0: + + PlaySE(SE_SHOP); + SetCoins(GetCoins() - VarGet(BLACKJACK_VAR_BET)); + VarSet(BLACKJACK_VAR_BET, (VarGet(BLACKJACK_VAR_BET) * 2)); + SetCreditDigits(GetCoins()); + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + sBlackJack->waitTimer = 100000; + sBlackJack->doubleState = DOUBLE_1; + break; + + case DOUBLE_1: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->doubleState = DOUBLE_2; + } + break; + + case DOUBLE_2: + + PlaySE(SE_REPEL); + sBlackJack->numPlayerCards = (sBlackJack->numPlayerCards + 1); + UpdateCardVisibility(); + AdjustCards(); + playerCardPoints = cardPoints[sBlackJack->playerCardNumbers[(sBlackJack->numPlayerCards - 1)]]; + if (playerCardPoints == 0){ + if ((VarGet(BLACKJACK_VAR_PLAYER) + 11) > 21) + { + playerCardPoints = 1; + } + else + { + playerCardPoints = 11; + } + } + VarSet(BLACKJACK_VAR_PLAYER, (VarGet(BLACKJACK_VAR_PLAYER) + playerCardPoints)); + SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); + sBlackJack->waitTimer = 100000; + sBlackJack->doubleState = DOUBLE_3; + break; + + case DOUBLE_3: + + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->doubleState = DOUBLE_4; + } + break; + + case DOUBLE_4: + + BGrefresh(); + if (VarGet(BLACKJACK_VAR_PLAYER) > 21) + { + ProcessBust(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; } + } + else + { + ProcessStand(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; } + } + return; + } +} + +static void ProcessDouble(void) +{ + sBlackJack->doubleState = DOUBLE_0; + while (sBlackJack->doubleState != DOUBLE_4) + { + Double(); + } + Double(); +} + +static void Hit(void) +{ + u8 playerCardPoints; + int i; + + switch (sBlackJack->hitState) + { + case HIT_0: + PlaySE(SE_REPEL); + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + sBlackJack->numPlayerCards = (sBlackJack->numPlayerCards + 1); + AdjustCards(); + UpdateCardVisibility(); + playerCardPoints = cardPoints[sBlackJack->playerCardNumbers[(sBlackJack->numPlayerCards - 1)]]; + if (playerCardPoints == 0) + { + if ((VarGet(BLACKJACK_VAR_PLAYER) + 11) > 21) + { + playerCardPoints = 1; + } + else + { + playerCardPoints = 11; + } + } + VarSet(BLACKJACK_VAR_PLAYER, (VarGet(BLACKJACK_VAR_PLAYER) + playerCardPoints)); + if (VarGet(BLACKJACK_VAR_PLAYER) > 21) + { + for (i = 0; i < sBlackJack->numPlayerCards; i++) + { + if (cardPoints[sBlackJack->playerCardNumbers[i]] == 0) + { + if (sBlackJack->AceAdjustPlayer == 0) + { + VarSet(BLACKJACK_VAR_PLAYER, (VarGet(BLACKJACK_VAR_PLAYER) - 10)); + sBlackJack->AceAdjustPlayer = 1; + } + } + } + } + SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); + sBlackJack->waitTimer = 100000; + sBlackJack->hitState = HIT_1; + break; + + case HIT_1: + if (sBlackJack->waitTimer > 0) { + sBlackJack->waitTimer--; + } else { + sBlackJack->hitState = HIT_2; + } + break; + + case HIT_2: + if (VarGet(BLACKJACK_VAR_PLAYER) > 21) + { + ProcessBust(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; + } + } + else if (VarGet(BLACKJACK_VAR_PLAYER) == 21) + { + ProcessStand(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; + } + } + else if (sBlackJack->numPlayerCards == 9) + { + ProcessStand(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; + } + } + else + { + VarSet(BLACKJACK_VAR_OPTIONS, 1); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + } + return; + } +} + +static void AButton(void) +{ + u32 bet; + u8 num; + u8 playerCard1Points; + u8 playerCard2Points; + u8 dealerCard1Points; + u8 taskId1; + u8 taskId2; + + if (VarGet(BLACKJACK_VAR_OPTIONS) != 4) + { + if (gSprites[sBlackJack->cursorSpriteId].y == 57) // Top + { + if (VarGet(BLACKJACK_VAR_OPTIONS) == 0) // +100 + { + if ((GetCoins()) > 9) // enough + { + BGrefresh(); + PlaySE(SE_VEND); + RemoveCoins(10); + VarSet(BLACKJACK_VAR_BET, (VarGet(BLACKJACK_VAR_BET) + 10)); + bet = VarGet(BLACKJACK_VAR_BET); + num = CountDigits(VarGet(BLACKJACK_VAR_BET)); + SetCreditDigits(GetCoins()); + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, num); + gStringVar4[0] = '\0'; + StringExpandPlaceholders(gStringVar4, sText_Betting); + ShowMessage(gStringVar4); + } + else // Not Enough + { + PlaySE(SE_FAILURE); + } + } + if ((VarGet(BLACKJACK_VAR_OPTIONS) == 1) || (VarGet(BLACKJACK_VAR_OPTIONS) == 2) || (VarGet(BLACKJACK_VAR_OPTIONS) == 3)) { // Hit + if ((VarGet(BLACKJACK_VAR_BET)) > 9) // Enough + { + PlaySE(SE_CARD); + //delay? + + sBlackJack->hitState = HIT_0; + while (sBlackJack->hitState != HIT_2) + { + Hit(); + } + Hit(); + return; + } + else + { + PlaySE(SE_FAILURE); + } + } + return; + } + if (gSprites[sBlackJack->cursorSpriteId].y == (57 + 16)) // Middle + { + if (VarGet(BLACKJACK_VAR_OPTIONS) == 0) // -100 + { + if (VarGet(BLACKJACK_VAR_BET) > 0) // Existing Bet + { + BGrefresh(); + PlaySE(SE_VEND); + AddCoins(10); + VarSet(BLACKJACK_VAR_BET, (VarGet(BLACKJACK_VAR_BET) - 10)); + bet = VarGet(BLACKJACK_VAR_BET); + num = CountDigits(VarGet(BLACKJACK_VAR_BET)); + SetCreditDigits(GetCoins()); + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, num); + gStringVar4[0] = '\0'; + StringExpandPlaceholders(gStringVar4, sText_Betting); + ShowMessage(gStringVar4); + } + else // No existing bet + { + PlaySE(SE_FAILURE); + } + } + if ((VarGet(BLACKJACK_VAR_OPTIONS) == 1) || (VarGet(BLACKJACK_VAR_OPTIONS) == 2) || (VarGet(BLACKJACK_VAR_OPTIONS) == 3)) { // Stand + PlaySE(SE_CARD); + // delay? + + ProcessStand(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; } + } + return; + } + if (gSprites[sBlackJack->cursorSpriteId].y == (57 + 32)) // Bottom + { + if (VarGet(BLACKJACK_VAR_OPTIONS) == 0) // Bet + { + if ((VarGet(BLACKJACK_VAR_BET)) > 9) // Enough + { + sBlackJack->exitToggle = 1; + PlaySE(SE_SHOP); + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + // delay? + + gSprites[sBlackJack->LogoId].invisible = TRUE; + BGrefresh(); + sBlackJack->numPlayerCards = 2; + sBlackJack->numDealerCards = 1; + AdjustCards(); + UpdateCardVisibility(); + gSprites[sBlackJack->DealerFaceDownId].invisible = FALSE; + PlaySE(SE_REPEL); + // delay? + + playerCard1Points = cardPoints[sBlackJack->playerCardNumbers[0]]; + playerCard2Points = cardPoints[sBlackJack->playerCardNumbers[1]]; + + if (playerCard1Points != 0 && playerCard2Points != 0) + { + VarSet(BLACKJACK_VAR_PLAYER, playerCard1Points + playerCard2Points); + } + else if (playerCard1Points == 0 && playerCard2Points == 0) + { + VarSet(BLACKJACK_VAR_PLAYER, 12); + } + else if (playerCard1Points == 0 && playerCard2Points != 0) + { + VarSet(BLACKJACK_VAR_PLAYER, 11 + playerCard2Points); + } + else if (playerCard1Points != 0 && playerCard2Points == 0) + { + VarSet(BLACKJACK_VAR_PLAYER, playerCard1Points + 11); + } + + dealerCard1Points = cardPoints[sBlackJack->dealerCardNumbers[0]]; + + if (dealerCard1Points == 0) + { + VarSet(BLACKJACK_VAR_DEALER, 11); + } + else + { + VarSet(BLACKJACK_VAR_DEALER, dealerCard1Points); + } + SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); + SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); + if (VarGet(BLACKJACK_VAR_PLAYER) == 21) + { + ProcessHitBJ(); + return; + } + + if ((VarGet(BLACKJACK_VAR_PLAYER) != 9) && (VarGet(BLACKJACK_VAR_PLAYER) != 10) && (VarGet(BLACKJACK_VAR_PLAYER) != 11) && + (VarGet(BLACKJACK_VAR_DEALER) != 11)) + { + VarSet(BLACKJACK_VAR_OPTIONS, 1); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + return; + } + + if ((VarGet(BLACKJACK_VAR_PLAYER) >= 9) && (VarGet(BLACKJACK_VAR_PLAYER) <= 11) && + (VarGet(BLACKJACK_VAR_DEALER) != 11)) + { + if (GetCoins() > VarGet(BLACKJACK_VAR_BET)) { + VarSet(BLACKJACK_VAR_OPTIONS, 2); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + } + else + { + VarSet(BLACKJACK_VAR_OPTIONS, 1); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + } + return; + } + + if ((VarGet(BLACKJACK_VAR_DEALER) == 11)) + { + if (GetCoins() > (VarGet(BLACKJACK_VAR_BET) / 2)) { + VarSet(BLACKJACK_VAR_OPTIONS, 3); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + } + else + { + VarSet(BLACKJACK_VAR_OPTIONS, 1); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + } + return; + } + } + else + { + PlaySE(SE_FAILURE); + } + } + if (VarGet(BLACKJACK_VAR_OPTIONS) == 2) // Double + { + PlaySE(SE_SHOP); + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + // delay? + + ProcessDouble(); + if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + return; } + } + if (VarGet(BLACKJACK_VAR_OPTIONS) == 3) // Insurance + { + PlaySE(SE_SHOP); + VarSet(BLACKJACK_VAR_OPTIONS, 4); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + RemoveCoins(VarGet(BLACKJACK_VAR_BET) / 2); + SetCreditDigits(GetCoins()); + // delay? + FlagSet(BLACKJACK_FLAG_INSURANCE); + VarSet(BLACKJACK_VAR_OPTIONS, 1); + SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + } + return; + } + } + else + { + PlaySE(SE_FAILURE); + return; + } +} + +static void MoveCursor(int direction) +{ + struct Sprite *cursorSprite = &gSprites[sBlackJack->cursorSpriteId]; + int curY; + int destY; + curY = gSprites[sBlackJack->cursorSpriteId].y; + destY = curY; + + if (((VarGet(BLACKJACK_VAR_OPTIONS)) != 1) && (VarGet(BLACKJACK_VAR_OPTIONS) != 4)) { + switch (direction) + { + case 0: if (curY > 57) destY = curY - 16; break; + case 2: if (curY < 89) destY = curY + 16; break; + } + } + if (VarGet(BLACKJACK_VAR_OPTIONS) == 1){ + switch (direction) + { + case 0: if (curY > 57) destY = curY - 16; break; + case 2: if (curY < 73) destY = curY + 16; break; + } + } + if (VarGet(BLACKJACK_VAR_OPTIONS) == 4){ + return; + } + if (curY == destY) { + PlaySE(SE_WALL_HIT); + return; + } + gSprites[sBlackJack->cursorSpriteId].y = destY; + PlaySE(SE_CLICK); +} + +#define TOTAL_CARDS 52 + +static void ShuffleCards(void) +{ + unsigned int allCardNumbers[TOTAL_CARDS]; + unsigned int temp; + unsigned int i, j; + + for (i = 0; i < TOTAL_CARDS; i++) { + allCardNumbers[i] = i; + } + + for (i = 0; i < TOTAL_CARDS; i++) { + j = Random() % TOTAL_CARDS; + temp = allCardNumbers[i]; + allCardNumbers[i] = allCardNumbers[j]; + allCardNumbers[j] = temp; + } + + for (i = 0; i < MAX_PLAYER_CARDS; i++) { + sBlackJack->playerCardNumbers[i] = allCardNumbers[i]; + } + + for (i = 0; i < MAX_DEALER_CARDS; i++) { + sBlackJack->dealerCardNumbers[i] = allCardNumbers[MAX_PLAYER_CARDS + i]; + } + + UpdateCards(); +} + +static void UpdateCards(void) +{ + u8 i; + // Update player cards + for (i = 0; i < MAX_PLAYER_CARDS; i++) { + SetCardSprite(sBlackJack->playerCardIds[i], sBlackJack->playerCardNumbers[i], i, 1); + } + + // Update dealer cards + for (i = 0; i < MAX_DEALER_CARDS; i++) { + SetCardSprite(sBlackJack->dealerCardIds[i], sBlackJack->dealerCardNumbers[i], i + MAX_PLAYER_CARDS, 0); + } +} + +static void SetCardSprite(u8 cardId, u8 cardNum, u8 cardIndex, u8 isPlayerCard) +{ + unsigned int tileNum = cardNum % 13; + s16 x = cardPositions[cardIndex].x; + s16 y = cardPositions[cardIndex].y; + u8 subpriority = cardPositions[cardIndex].priority; + + const struct CompressedSpriteSheet* sheet = NULL; + const struct SpriteTemplate* template = NULL; + struct SpriteSheet spriteSheet; + + switch (cardNum) + { + case 0: sheet = &sSpriteSheet_Cards_Hearts_2; template = &sSpriteTemplate_Cards_Hearts_2; break; + case 1: sheet = &sSpriteSheet_Cards_Hearts_3; template = &sSpriteTemplate_Cards_Hearts_3; break; + case 2: sheet = &sSpriteSheet_Cards_Hearts_4; template = &sSpriteTemplate_Cards_Hearts_4; break; + case 3: sheet = &sSpriteSheet_Cards_Hearts_5; template = &sSpriteTemplate_Cards_Hearts_5; break; + case 4: sheet = &sSpriteSheet_Cards_Hearts_6; template = &sSpriteTemplate_Cards_Hearts_6; break; + case 5: sheet = &sSpriteSheet_Cards_Hearts_7; template = &sSpriteTemplate_Cards_Hearts_7; break; + case 6: sheet = &sSpriteSheet_Cards_Hearts_8; template = &sSpriteTemplate_Cards_Hearts_8; break; + case 7: sheet = &sSpriteSheet_Cards_Hearts_9; template = &sSpriteTemplate_Cards_Hearts_9; break; + case 8: sheet = &sSpriteSheet_Cards_Hearts_10; template = &sSpriteTemplate_Cards_Hearts_10; break; + case 9: sheet = &sSpriteSheet_Cards_Hearts_J; template = &sSpriteTemplate_Cards_Hearts_J; break; + case 10: sheet = &sSpriteSheet_Cards_Hearts_Q; template = &sSpriteTemplate_Cards_Hearts_Q; break; + case 11: sheet = &sSpriteSheet_Cards_Hearts_K; template = &sSpriteTemplate_Cards_Hearts_K; break; + case 12: sheet = &sSpriteSheet_Cards_Hearts_A; template = &sSpriteTemplate_Cards_Hearts_A; break; + case 13: sheet = &sSpriteSheet_Cards_Clubs_2; template = &sSpriteTemplate_Cards_Clubs_2; break; + case 14: sheet = &sSpriteSheet_Cards_Clubs_3; template = &sSpriteTemplate_Cards_Clubs_3; break; + case 15: sheet = &sSpriteSheet_Cards_Clubs_4; template = &sSpriteTemplate_Cards_Clubs_4; break; + case 16: sheet = &sSpriteSheet_Cards_Clubs_5; template = &sSpriteTemplate_Cards_Clubs_5; break; + case 17: sheet = &sSpriteSheet_Cards_Clubs_6; template = &sSpriteTemplate_Cards_Clubs_6; break; + case 18: sheet = &sSpriteSheet_Cards_Clubs_7; template = &sSpriteTemplate_Cards_Clubs_7; break; + case 19: sheet = &sSpriteSheet_Cards_Clubs_8; template = &sSpriteTemplate_Cards_Clubs_8; break; + case 20: sheet = &sSpriteSheet_Cards_Clubs_9; template = &sSpriteTemplate_Cards_Clubs_9; break; + case 21: sheet = &sSpriteSheet_Cards_Clubs_10; template = &sSpriteTemplate_Cards_Clubs_10; break; + case 22: sheet = &sSpriteSheet_Cards_Clubs_J; template = &sSpriteTemplate_Cards_Clubs_J; break; + case 23: sheet = &sSpriteSheet_Cards_Clubs_Q; template = &sSpriteTemplate_Cards_Clubs_Q; break; + case 24: sheet = &sSpriteSheet_Cards_Clubs_K; template = &sSpriteTemplate_Cards_Clubs_K; break; + case 25: sheet = &sSpriteSheet_Cards_Clubs_A; template = &sSpriteTemplate_Cards_Clubs_A; break; + case 26: sheet = &sSpriteSheet_Cards_Diamonds_2; template = &sSpriteTemplate_Cards_Diamonds_2; break; + case 27: sheet = &sSpriteSheet_Cards_Diamonds_3; template = &sSpriteTemplate_Cards_Diamonds_3; break; + case 28: sheet = &sSpriteSheet_Cards_Diamonds_4; template = &sSpriteTemplate_Cards_Diamonds_4; break; + case 29: sheet = &sSpriteSheet_Cards_Diamonds_5; template = &sSpriteTemplate_Cards_Diamonds_5; break; + case 30: sheet = &sSpriteSheet_Cards_Diamonds_6; template = &sSpriteTemplate_Cards_Diamonds_6; break; + case 31: sheet = &sSpriteSheet_Cards_Diamonds_7; template = &sSpriteTemplate_Cards_Diamonds_7; break; + case 32: sheet = &sSpriteSheet_Cards_Diamonds_8; template = &sSpriteTemplate_Cards_Diamonds_8; break; + case 33: sheet = &sSpriteSheet_Cards_Diamonds_9; template = &sSpriteTemplate_Cards_Diamonds_9; break; + case 34: sheet = &sSpriteSheet_Cards_Diamonds_10; template = &sSpriteTemplate_Cards_Diamonds_10; break; + case 35: sheet = &sSpriteSheet_Cards_Diamonds_J; template = &sSpriteTemplate_Cards_Diamonds_J; break; + case 36: sheet = &sSpriteSheet_Cards_Diamonds_Q; template = &sSpriteTemplate_Cards_Diamonds_Q; break; + case 37: sheet = &sSpriteSheet_Cards_Diamonds_K; template = &sSpriteTemplate_Cards_Diamonds_K; break; + case 38: sheet = &sSpriteSheet_Cards_Diamonds_A; template = &sSpriteTemplate_Cards_Diamonds_A; break; + case 39: sheet = &sSpriteSheet_Cards_Spades_2; template = &sSpriteTemplate_Cards_Spades_2; break; + case 40: sheet = &sSpriteSheet_Cards_Spades_3; template = &sSpriteTemplate_Cards_Spades_3; break; + case 41: sheet = &sSpriteSheet_Cards_Spades_4; template = &sSpriteTemplate_Cards_Spades_4; break; + case 42: sheet = &sSpriteSheet_Cards_Spades_5; template = &sSpriteTemplate_Cards_Spades_5; break; + case 43: sheet = &sSpriteSheet_Cards_Spades_6; template = &sSpriteTemplate_Cards_Spades_6; break; + case 44: sheet = &sSpriteSheet_Cards_Spades_7; template = &sSpriteTemplate_Cards_Spades_7; break; + case 45: sheet = &sSpriteSheet_Cards_Spades_8; template = &sSpriteTemplate_Cards_Spades_8; break; + case 46: sheet = &sSpriteSheet_Cards_Spades_9; template = &sSpriteTemplate_Cards_Spades_9; break; + case 47: sheet = &sSpriteSheet_Cards_Spades_10; template = &sSpriteTemplate_Cards_Spades_10; break; + case 48: sheet = &sSpriteSheet_Cards_Spades_J; template = &sSpriteTemplate_Cards_Spades_J; break; + case 49: sheet = &sSpriteSheet_Cards_Spades_Q; template = &sSpriteTemplate_Cards_Spades_Q; break; + case 50: sheet = &sSpriteSheet_Cards_Spades_K; template = &sSpriteTemplate_Cards_Spades_K; break; + case 51: sheet = &sSpriteSheet_Cards_Spades_A; template = &sSpriteTemplate_Cards_Spades_A; break; + default: return; // Invalid card number + } + + LoadCompressedSpriteSheet(sheet); + + cardId = CreateSprite(template, x, y, subpriority); + gSprites[cardId].oam.priority = 1; + gSprites[cardId].invisible = TRUE; + + if (isPlayerCard == 1) { + sBlackJack->playerCardIds[cardIndex] = cardId; + sBlackJack->playerCardNumbers[cardIndex] = cardNum; + } else { + sBlackJack->dealerCardIds[cardIndex - MAX_PLAYER_CARDS] = cardId; + sBlackJack->dealerCardNumbers[cardIndex - MAX_PLAYER_CARDS] = cardNum; + } +} + +static void LoadHeartsSpriteSheet(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Cards_Hearts_A); +} + +static void CreateFacedown(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Facedown); + + sBlackJack->DealerFaceDownId = CreateSprite(&sSpriteTemplate_Facedown, 48, 56, 0); + gSprites[sBlackJack->DealerFaceDownId].oam.priority = 0; + gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; +} + +static void CreateCursorSprite(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Cursor); + + sBlackJack->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, 173, 57, 9); + gSprites[sBlackJack->cursorSpriteId].oam.priority = 3; +} + +static void CreatePopUpSprite(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Popup); + + sBlackJack->LogoId = CreateSprite(&sSpriteTemplate_Popup, 80, 72, 1); + gSprites[sBlackJack->LogoId].oam.priority = 3; +} + +static void CreateOptions(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Option1); + + sBlackJack->option1SpriteId = CreateSprite(&sSpriteTemplate_Option1, 219, 58, 9); + gSprites[sBlackJack->option1SpriteId].oam.priority = 2; + + LoadCompressedSpriteSheet(&sSpriteSheet_Option2); + + sBlackJack->option2SpriteId = CreateSprite(&sSpriteTemplate_Option2, 219, 74, 9); + gSprites[sBlackJack->option2SpriteId].oam.priority = 2; + + LoadCompressedSpriteSheet(&sSpriteSheet_Option3); + + sBlackJack->option3SpriteId = CreateSprite(&sSpriteTemplate_Option3, 219, 90, 9); + gSprites[sBlackJack->option3SpriteId].oam.priority = 2; +} + +static void AdjustCards(void) +{ + if (sBlackJack->numPlayerCards > 5) + { + gSprites[sBlackJack->playerCardIds[1]].x = 128; + gSprites[sBlackJack->playerCardIds[2]].x = 112; + gSprites[sBlackJack->playerCardIds[3]].x = 96; + gSprites[sBlackJack->playerCardIds[4]].x = 80; + } + else + { + gSprites[sBlackJack->playerCardIds[1]].x = 112; + gSprites[sBlackJack->playerCardIds[2]].x = 80; + gSprites[sBlackJack->playerCardIds[3]].x = 48; + gSprites[sBlackJack->playerCardIds[4]].x = 16; + } + if (sBlackJack->numDealerCards > 5) + { + gSprites[sBlackJack->dealerCardIds[1]].x = 32; + gSprites[sBlackJack->dealerCardIds[2]].x = 48; + gSprites[sBlackJack->dealerCardIds[3]].x = 64; + gSprites[sBlackJack->dealerCardIds[4]].x = 80; + } + else + { + gSprites[sBlackJack->dealerCardIds[1]].x = 48; + gSprites[sBlackJack->dealerCardIds[2]].x = 80; + gSprites[sBlackJack->dealerCardIds[3]].x = 112; + gSprites[sBlackJack->dealerCardIds[4]].x = 144; + } +} + +static void BJVBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void ShowHelpBar(const u8 *str) +{ + const u8 color[3] = { TEXT_COLOR_TRANSPARENT, 1, 2 }; + + FillWindowPixelBuffer(0, 0xFF); + DeactivateAllTextPrinters(); + AddTextPrinterParameterized3(0, 0, GetStringRightAlignXOffset(0, str, 240) - 4, 0, color, 0, str); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +static void StartExitBJ(void) +{ + if (VarGet(BLACKJACK_VAR_BET) > 0) + { + AddCoins(VarGet(BLACKJACK_VAR_BET)); + VarSet(BLACKJACK_VAR_BET, 0); + } + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sBlackJack->state = BJ_STATE_EXIT; +} + +static void ExitBJ(void) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + FREE_AND_SET_NULL(sBlackJack); + } +} \ No newline at end of file diff --git a/src/game_corner_gacha.c b/src/game_corner_gacha.c new file mode 100644 index 000000000000..6aea1372b2e9 --- /dev/null +++ b/src/game_corner_gacha.c @@ -0,0 +1,3880 @@ +//#include "game_corner_blackjack.h" +#include "game_corner_gacha.h" +#include "global.h" +#include "malloc.h" +#include "battle.h" +#include "bg.h" +#include "coins.h" +#include "data.h" +#include "daycare.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "field_message_box.h" +#include "international_string_util.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "naming_screen.h" +#include "new_game.h" +#include "overworld.h" +#include "palette.h" +#include "palette_util.h" +#include "pokemon.h" +#include "pokedex.h" +#include "random.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trade.h" +#include "trainer_pokemon_sprites.h" +#include "tv.h" +#include "window.h" +#include "constants/coins.h" +#include "constants/flags.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/vars.h" +#include "scanline_effect.h" +#include "pokemon_storage_system.h" +#include "string_util.h" +#include "field_specials.h" + +enum +{ + GACHA_STATE_INIT, + GACHA_STATE_PROCESS_INPUT, + GACHA_STATE_COMPLETED_WAIT_FOR_SOUND, + GACHA_STATE_PROCESS_COMPLETED_INPUT, + GACHA_STATE_START_EXIT, + GACHA_STATE_EXIT, + STATE_INIT_A, + STATE_TIMER_1, + STATE_TWIST, + STATE_TIMER_2, + STATE_INIT_GIVE, + STATE_SHAKE_1, + STATE_TIMER_3, + STATE_INIT_SHAKE_2, + STATE_SHAKE_2, + STATE_TIMER_4, + STATE_INIT_SHAKE_3, + STATE_TIMER_5, + STATE_GIVE, + STATE_FADE, + STATE_POKEBALL_INIT, + STATE_POKEBALL_PROCESS, + STATE_POKEBALL_ARRIVE, + STATE_FADE_POKEBALL_TO_NORMAL, + STATE_POKEBALL_ARRIVE_WAIT, + STATE_SHOW_NEW_MON, + STATE_NEW_MON_MSG, + NEW_1, + NEW_2, + NEW_3, + NEW_4, + NEW_5, + NEW_6, +}; + +enum { + SPR_CREDIT_DIG_1, + SPR_CREDIT_DIG_10, + SPR_CREDIT_DIG_100, + SPR_CREDIT_DIG_1000, +}; + +enum { + SPR_PLAYER_DIG_1, + SPR_PLAYER_DIG_10, + SPR_PLAYER_DIG_100, + SPR_PLAYER_DIG_1000, +}; + +#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 +#define SPR_PLAYER_DIGITS SPR_PLAYER_DIG_1 + +#define MAX_SPRITES_CREDIT 4 +#define MAX_SPRITES_PLAYER 4 + +struct Gacha { + u8 state; + u8 GachaId; + u8 KnobSpriteId; + u8 DigitalTextSpriteId; + u8 LotteryJPNspriteId; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; + u8 CreditMenu1Id; + u8 CreditMenu2Id; + u8 PokemonOne; + u8 PokemonTwo; + u8 PokemonOneSpriteId; + u8 PokemonTwoSpriteId; + u8 PokemonThreeSpriteId; + u8 Odds; // Chance of new Pokemon + u8 ArrowsSpriteId; + u8 CTAspriteId; + u8 exitToggle; + u16 wager; + u8 cursorPosition; + u8 Trigger; + u8 Basic_CommonMax; // Total Number of Pokemon in each array + u8 Basic_UncommonMax; + u8 Basic_RareMax; + u8 Basic_UltraRareMax; + u8 Great_CommonMax; + u8 Great_UncommonMax; + u8 Great_RareMax; + u8 Great_UltraRareMax; + u8 Ultra_CommonMax; + u8 Ultra_UncommonMax; + u8 Ultra_RareMax; + u8 Ultra_UltraRareMax; + u8 Master_CommonMax; + u8 Master_UncommonMax; + u8 Master_RareMax; + u8 Master_UltraRareMax; + u8 Rarity; // 0 = Common, 1 = Uncommon, 2 = Rare, 3 = Ultra Rare + u8 Basic_Common_Owned; // How Many Pokemon in the array does the Player Own + u8 Basic_Uncommon_Owned; + u8 Basic_Rare_Owned; + u8 Basic_UltraRare_Owned; + u8 Great_Common_Owned; + u8 Great_Uncommon_Owned; + u8 Great_Rare_Owned; + u8 Great_UltraRare_Owned; + u8 Ultra_Common_Owned; + u8 Ultra_Uncommon_Owned; + u8 Ultra_Rare_Owned; + u8 Ultra_UltraRare_Owned; + u8 Master_Common_Owned; + u8 Master_Uncommon_Owned; + u8 Master_Rare_Owned; + u8 Master_UltraRare_Owned; + u16 Basic_Total_Owned; + u16 Great_Total_Owned; + u16 Ultra_Total_Owned; + u16 Master_Total_Owned; + u16 Basic_Total_Max; + u16 Great_Total_Max; + u16 Ultra_Total_Max; + u16 Master_Total_Max; + u8 commonChance; + u8 uncommonChance; + u8 rareChance; + u8 ultraRareChance; + u8 IsNewPokemon; + u16 Temp_Total; + u16 CalculatedSpecies; + u8 bouncingPokeballSpriteId; + u8 timer; + u8 monSpriteId; + u32 waitTimer; + u8 gachaState; + u8 Input; + u8 textColor[3]; + struct Pokemon GachaMon; +}; + +static EWRAM_DATA struct { + struct Pokemon tempMon; // Used as a temp variable when swapping Pokémon + u32 timer; + u32 monPersonalities[2]; + u8 filler_70[2]; + u8 playerFinishStatus; + u8 partnerFinishStatus; + u16 linkData[10]; + u8 linkTimeoutZero1; + u8 linkTimeoutZero2; + u16 linkTimeoutTimer; + u16 neverRead_8C; + u8 monSpriteIds[2]; + u8 connectionSpriteId1; // Multi-purpose sprite ids used during the transfer sequence + u8 connectionSpriteId2; + u8 cableEndSpriteId; + u8 scheduleLinkTransfer; + u16 state; + u8 filler_96[0x3C]; + u8 releasePokeballSpriteId; + u8 bouncingPokeballSpriteId; + u16 texX; + u16 texY; + u16 neverRead_D8; + u16 neverRead_DA; + u16 scrX; + u16 scrY; + s16 bg1vofs; + s16 bg1hofs; + s16 bg2vofs; + s16 bg2hofs; + u16 sXY; + u16 gbaScale; + u16 alpha; + bool8 isLinkTrade; + u16 monSpecies[2]; + u16 cachedMapMusic; + u8 textColors[3]; + u8 filler_F9; + bool8 isCableTrade; + u8 wirelessWinLeft; + u8 wirelessWinTop; + u8 wirelessWinRight; + u8 wirelessWinBottom; +} *sTradeAnim = NULL; + +static const u8 sText_FromGacha[] = _("You got {STR_VAR_1}!"); + +static const s8 sTradeBallVerticalVelocityTable[] = +{ + 0, 0, 1, 0, 1, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, -4, -4, -4, -3, -3, + -3, -3, -2, -2, -2, -2, -1, -1, -1, + -1, 0, -1, 0, -1, 0, 0, 0, 0, + 0, 1, 0, 1, 0, 1, 1, 1, 1, + 2, 2, 2, 2, 3, 3, 3, 3, 4, + 4, 4, 4, -4, -3, -3, -2, -2, -1, + -1, -1, 0, -1, 0, 0, 0, 0, 0, + 0, 1, 0, 1, 1, 1, 2, 2, 3, + 3, 4, -4, -3, -2, -1, -1, -1, 0, + 0, 0, 0, 1, 0, 1, 1, 2, 3 +}; + +static EWRAM_DATA struct Gacha *sGacha = NULL; +static EWRAM_DATA u8 sTextWindowId = 0; + +static void FadeToGachaScreen(u8 taskId); +static void InitGachaScreen(void); +static void GachaVBlankCallback(void); +static void SpriteCB_BouncingPokeball(struct Sprite *); +static void SpriteCB_BouncingPokeballArrive(struct Sprite *); +static void InitTradeScreen(void); +static void Process_A(void); +static void EggHatchPrintMessage(u8, u8 *, u8, u8, u8); + +static const u8 sMessageText[] = _("NEW POKéMON : {STR_VAR_1}%"); + +static void SpriteCB_Null(struct Sprite *sprite) +{ +} + +// BG Images/Tilemaps + +// Main, no shake +static const u32 Gacha_BG_Main[] = INCBIN_U32("graphics/gacha/bg_middle.4bpp.lz"); +static const u8 Gacha_BG_Main_Tilemap[] = INCBIN_U8("graphics/gacha/bg_middle.bin.lz"); +// Left shake +static const u32 Gacha_BG_Left[] = INCBIN_U32("graphics/gacha/bg_left.4bpp.lz"); +static const u8 Gacha_BG_Left_Tilemap[] = INCBIN_U8("graphics/gacha/bg_left.bin.lz"); +// Right shake +static const u32 Gacha_BG_Right[] = INCBIN_U32("graphics/gacha/bg_right.4bpp.lz"); +static const u8 Gacha_BG_Right_Tilemap[] = INCBIN_U8("graphics/gacha/bg_right.bin.lz"); + +// Trade +static const u32 Gacha_BG_Red[] = INCBIN_U32("graphics/gacha/bg_mon.4bpp.lz"); +static const u8 Gacha_BG_Red_Tilemap[] = INCBIN_U8("graphics/gacha/bg_mon.bin.lz"); + +// BG Palettes + +// Basic +static const u16 Gacha_BG_Basic_Pal[] = INCBIN_U16("graphics/gacha/bg_basic.gbapal"); +// Great +static const u16 Gacha_BG_Great_Pal[] = INCBIN_U16("graphics/gacha/bg_great.gbapal"); +// Ultra +static const u16 Gacha_BG_Ultra_Pal[] = INCBIN_U16("graphics/gacha/bg_ultra.gbapal"); +// Master +static const u16 Gacha_BG_Master_Pal[] = INCBIN_U16("graphics/gacha/bg_master.gbapal"); + +static const u16 Gacha_BG_Red_Pal[] = INCBIN_U16("graphics/gacha/bg_mon.gbapal"); + +// Knob Sprite Image +static const u32 Gacha_Knob[] = INCBIN_U32("graphics/gacha/knob.4bpp.lz"); + +// Knob Sprite Palettes + +static const u16 Gacha_Knob_Pal[] = INCBIN_U16("graphics/gacha/knob.gbapal"); +static const u16 Gacha_Digital_Text_Pal[] = INCBIN_U16("graphics/gacha/digital_text.gbapal"); +static const u16 Gacha_Lottery_Pal[] = INCBIN_U16("graphics/gacha/lottery.gbapal"); +static const u16 Gacha_press_a_Pal[] = INCBIN_U16("graphics/gacha/press_a.gbapal"); + +// Digital Text +static const u32 Gacha_Digital_Text[] = INCBIN_U32("graphics/gacha/digital_text.4bpp.lz"); + +// Title, Japanese +static const u32 Gacha_Lottery_JPN[] = INCBIN_U32("graphics/gacha/lottery_japan.4bpp.lz"); + +//Numbers + +static const u32 gCredits_Gfx[] = INCBIN_U32("graphics/gacha/numbers.4bpp.lz"); +static const u16 sCredit_Pal[] = INCBIN_U16("graphics/gacha/numbers.gbapal"); + +static const u32 gPlayer_Gfx[] = INCBIN_U32("graphics/gacha/input_numbers.4bpp.lz"); +static const u16 sPlayer_Pal[] = INCBIN_U16("graphics/gacha/input_numbers.gbapal"); + +// Credits Menu + +// Images + +static const u32 Gacha_Menu_1[] = INCBIN_U32("graphics/gacha/menu_1.4bpp.lz"); +static const u32 Gacha_Menu_2[] = INCBIN_U32("graphics/gacha/menu_2.4bpp.lz"); + +// Palettes + +// Basic +static const u16 Gacha_Menu_Basic_Pal[] = INCBIN_U16("graphics/gacha/menu_basic.gbapal"); +// Great +static const u16 Gacha_Menu_Great_Pal[] = INCBIN_U16("graphics/gacha/menu_great.gbapal"); +// Ultra +static const u16 Gacha_Menu_Ultra_Pal[] = INCBIN_U16("graphics/gacha/menu_ultra.gbapal"); +// Master +static const u16 Gacha_Menu_Master_Pal[] = INCBIN_U16("graphics/gacha/menu_master.gbapal"); + +// Basic +static const u16 Gacha_Menu2_Basic_Pal[] = INCBIN_U16("graphics/gacha/menu2_basic.gbapal"); +// Great +static const u16 Gacha_Menu2_Great_Pal[] = INCBIN_U16("graphics/gacha/menu2_great.gbapal"); +// Ultra +static const u16 Gacha_Menu2_Ultra_Pal[] = INCBIN_U16("graphics/gacha/menu2_ultra.gbapal"); +// Master +static const u16 Gacha_Menu2_Master_Pal[] = INCBIN_U16("graphics/gacha/menu2_master.gbapal"); + +// Pokemon + +// Belossom +static const u32 BelossomGFX[] = INCBIN_U32("graphics/gacha/belossom.4bpp.lz"); +static const u16 BelossomPAL[] = INCBIN_U16("graphics/gacha/belossom.gbapal"); + +// Phanpy +static const u32 PhanpyGFX[] = INCBIN_U32("graphics/gacha/phanpy.4bpp.lz"); +static const u16 PhanpyPal[] = INCBIN_U16("graphics/gacha/phanpy.gbapal"); + +// Teddiursa +static const u32 TeddiursaGFX[] = INCBIN_U32("graphics/gacha/teddiursa.4bpp.lz"); +static const u16 TeddiursaPAL[] = INCBIN_U16("graphics/gacha/teddiursa.gbapal"); + +// Elekid +static const u32 ElekidGFX[] = INCBIN_U32("graphics/gacha/elekid.4bpp.lz"); +static const u16 ElekidPAL[] = INCBIN_U16("graphics/gacha/elekid.gbapal"); + +// Hoppip +static const u32 HoppipGFX[] = INCBIN_U32("graphics/gacha/hoppip.4bpp.lz"); +static const u16 HoppipPAL[] = INCBIN_U16("graphics/gacha/hoppip.gbapal"); + +// Arrows + +static const u32 Gacha_Arrows_GFX[] = INCBIN_U32("graphics/gacha/arrows.4bpp.lz"); + +// Press "A" + +static const u32 Gacha_Press_A_GFX[] = INCBIN_U32("graphics/gacha/pressA.4bpp.lz"); + +static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/trade/pokeball.gbapal"); +static const u8 sPokeball_Gfx[] = INCBIN_U8("graphics/trade/pokeball.4bpp"); + +const u16 gTrade_Tilemap[] = INCBIN_U16("graphics/trade/platform.bin"); + +#define GACHA_BG_BASE 1 +#define GACHA_MENUS 2 + +static const struct BgTemplate sGachaBGtemplates[] = { + { + .bg = GACHA_BG_BASE, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = GACHA_MENUS, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sGachaWinTemplates[] = { + { + .bg = GACHA_MENUS, + .tilemapLeft = 16, + .tilemapTop = 9, + .width = 14, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x194, + }, + DUMMY_WIN_TEMPLATE, +}; + +static const struct WindowTemplate sWinTemplates_EggHatch[] = +{ + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 0, + .baseBlock = 64 + }, + DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate sYesNoWinTemplate = +{ + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 9, + .width = 5, + .height = 4, + .paletteNum = 15, + .baseBlock = 424 +}; + +#define BG_MIDDLE_GFX 1 +#define BG_LEFT_GFX 2 +#define BG_RIGHT_GFX 3 +#define KNOB_GFX 4 +#define DIGITAL_TEXT_GFX 5 +#define LOTTERY_JPN_GFX 6 +#define GFXTAG_CREDIT_DIGIT 7 +#define GFXTAG_PLAYER_DIGIT 8 +#define GFXTAG_MENU_1 9 +#define GFXTAG_MENU_2 10 +#define GFXTAG_BELOSSOM 11 +#define GFXTAG_PHANPY 12 +#define GFXTAG_TEDDIURSA 13 +#define GFXTAG_ELEKID 14 +#define GFXTAG_HOPPIP 15 +#define GFXTAG_ARROWS 16 +#define GFXTAG_PRESS_A 17 + +#define GFXTAG_POKEBALL 5557 + +#define BG_BASIC_PAL 1 +#define BG_GREAT_PAL 2 +#define BG_ULTRA_PAL 3 +#define BG_MASTER_PAL 4 +#define PALTAG_KNOB 5 +#define DIGITAL_TEXT_PAL 6 +#define LOTTERY_JPN_PAL 7 +#define PALTAG_INTERFACE 8 +#define PALTAG_INTERFACEPLAYER 9 +#define PALTAG_MENU_BASIC 10 +#define PALTAG_MENU_GREAT 11 +#define PALTAG_MENU_ULTRA 12 +#define PALTAG_MENU_MASTER 13 + +#define PALTAG_BELOSSOM 14 +#define PALTAG_PHANPY 15 +#define PALTAG_TEDDIURSA 16 +#define PALTAG_ELEKID 17 +#define PALTAG_HOPPIP 18 +#define PALTAG_ARROWS 19 +#define PALTAG_PRESS_A 20 + +#define PALTAG_POKEBALL 5558 + +static const struct SpritePalette sSpritePalettes[] = +{ + { .data = Gacha_BG_Basic_Pal, .tag = BG_BASIC_PAL }, + { .data = Gacha_BG_Great_Pal, .tag = BG_GREAT_PAL }, + { .data = Gacha_BG_Ultra_Pal, .tag = BG_ULTRA_PAL }, + { .data = Gacha_BG_Master_Pal, .tag = BG_MASTER_PAL }, + {} +}; + +static const struct SpritePalette sSpritePalettes2[] = +{ + { .data = BelossomPAL, .tag = PALTAG_BELOSSOM }, + { .data = PhanpyPal, .tag = PALTAG_PHANPY }, + { .data = TeddiursaPAL, .tag = PALTAG_TEDDIURSA }, + { .data = ElekidPAL, .tag = PALTAG_ELEKID }, + { .data = HoppipPAL, .tag = PALTAG_HOPPIP }, + { .data = sCredit_Pal, .tag = PALTAG_ARROWS }, + { .data = Gacha_press_a_Pal, .tag = PALTAG_PRESS_A }, + { .data = Gacha_Knob_Pal, .tag = PALTAG_KNOB }, + { .data = Gacha_Digital_Text_Pal, .tag = DIGITAL_TEXT_PAL }, + { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = Gacha_Lottery_Pal, .tag = LOTTERY_JPN_PAL }, + { .data = Gacha_Menu_Basic_Pal, .tag = PALTAG_MENU_BASIC }, + { .data = Gacha_Menu_Great_Pal, .tag = PALTAG_MENU_GREAT }, + { .data = Gacha_Menu_Ultra_Pal, .tag = PALTAG_MENU_ULTRA }, + { .data = Gacha_Menu_Master_Pal, .tag = PALTAG_MENU_MASTER }, + {} +}; + +static const struct SpritePalette sBall[] = +{ + { .data = sPokeball_Pal, .tag = PALTAG_POKEBALL }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Press_A = +{ + .data = Gacha_Press_A_GFX, + .size = 0xC00, + .tag = GFXTAG_PRESS_A, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Arrows = +{ + .data = Gacha_Arrows_GFX, + .size = 0x200, + .tag = GFXTAG_ARROWS, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Hoppip = +{ + .data = HoppipGFX, + .size = 0x800, + .tag = GFXTAG_HOPPIP, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Elekid = +{ + .data = ElekidGFX, + .size = 0x800, + .tag = GFXTAG_ELEKID, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Teddiursa = +{ + .data = TeddiursaGFX, + .size = 0x800, + .tag = GFXTAG_TEDDIURSA, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Phanpy = +{ + .data = PhanpyGFX, + .size = 0x800, + .tag = GFXTAG_PHANPY, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Belossom = +{ + .data = BelossomGFX, + .size = 0x800, + .tag = GFXTAG_BELOSSOM, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Menu_1 = +{ + .data = Gacha_Menu_1, + .size = 0x800, + .tag = GFXTAG_MENU_1, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Menu_2 = +{ + .data = Gacha_Menu_2, + .size = 0x1000, + .tag = GFXTAG_MENU_2, +}; + +static const struct CompressedSpriteSheet sSpriteSheets_Interface[] = +{ + { + .data = gCredits_Gfx, + .size = 0x280, + .tag = GFXTAG_CREDIT_DIGIT, + }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheets_PlayerInterface[] = +{ + { + .data = gPlayer_Gfx, + .size = 0x280, + .tag = GFXTAG_PLAYER_DIGIT + }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Lottery_JPN = +{ + .data = Gacha_Lottery_JPN, + .size = 0x800, + .tag = LOTTERY_JPN_GFX, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Digital_Text = +{ + .data = Gacha_Digital_Text, + .size = 0x1000, + .tag = DIGITAL_TEXT_GFX, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Knob = +{ + .data = Gacha_Knob, + .size = 0x800, + .tag = KNOB_GFX, +}; + +static const struct OamData sOamData_Press_A = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Arrows = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x32), + .size = SPRITE_SIZE(8x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Hoppip = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Elekid = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Teddiursa = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Phanpy = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Belossom = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Menu = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Menu_2 = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Lottery_JPN = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Digital_Text = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOamData_Knob = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct OamData sOam_CreditDigit = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2, +}; + +static const struct OamData sOamData_Pokeball = +{ + .affineMode = ST_OAM_AFFINE_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16) +}; + +static const union AnimCmd sAnim_Pokeball_SpinOnce[] = +{ + ANIMCMD_FRAME( 0, 3), + ANIMCMD_FRAME( 4, 3), + ANIMCMD_FRAME( 8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(20, 3), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(28, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(36, 3), + ANIMCMD_FRAME(40, 3), + ANIMCMD_FRAME(44, 3), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME( 0, 3), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_Pokeball_SpinTwice[] = +{ + ANIMCMD_FRAME( 0, 3), + ANIMCMD_FRAME( 4, 3), + ANIMCMD_FRAME( 8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(20, 3), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(28, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(36, 3), + ANIMCMD_FRAME(40, 3), + ANIMCMD_FRAME(44, 3), + ANIMCMD_LOOP(2), + ANIMCMD_FRAME( 0, 3), + ANIMCMD_END +}; + +static const union AnimCmd *const sAnims_Pokeball[] = +{ + sAnim_Pokeball_SpinOnce, + sAnim_Pokeball_SpinTwice +}; + +static const union AffineAnimCmd sAffineAnim_Pokeball_Normal[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sAffineAnim_Pokeball_Squish[] = +{ + AFFINEANIMCMD_FRAME(-8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sAffineAnim_Pokeball_Unsquish[] = +{ + AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0), + AFFINEANIMCMD_FRAME( 0, 0, 0, 5), + AFFINEANIMCMD_FRAME( 8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sAffineAnims_Pokeball[] = +{ + sAffineAnim_Pokeball_Normal, + sAffineAnim_Pokeball_Squish, + sAffineAnim_Pokeball_Unsquish +}; + +static const struct SpriteSheet sPokeBallSpriteSheet = +{ + .data = sPokeball_Gfx, + .size = sizeof(sPokeball_Gfx), + .tag = GFXTAG_POKEBALL +}; + +static const struct SpritePalette sPokeBallSpritePalette = +{ + .data = sPokeball_Pal, + .tag = PALTAG_POKEBALL +}; + +static const struct SpriteTemplate sSpriteTemplate_Pokeball = +{ + .tileTag = GFXTAG_POKEBALL, + .paletteTag = PALTAG_POKEBALL, + .oam = &sOamData_Pokeball, + .anims = sAnims_Pokeball, + .images = NULL, + .affineAnims = sAffineAnims_Pokeball, + .callback = SpriteCB_BouncingPokeball +}; + +static const union AnimCmd sPressAAnimCmd_1[] = +{ + ANIMCMD_FRAME(32, 10), + ANIMCMD_FRAME(64, 10), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sPressAAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sPressAAnimCmds[] = { + sPressAAnimCmd_0, // Gray + sPressAAnimCmd_1, // Highlight +}; + +static const struct SpriteTemplate sSpriteTemplate_Press_A = +{ + .tileTag = GFXTAG_PRESS_A, + .paletteTag = PALTAG_PRESS_A, + .oam = &sOamData_Press_A, + .anims = sPressAAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AnimCmd sArrowAnimCmd_1[] = +{ + ANIMCMD_FRAME(8, 20), + ANIMCMD_FRAME(12, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sArrowAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sArrowsAnimCmds[] = { + sArrowAnimCmd_0, // Up and Down + sArrowAnimCmd_1, // Up +}; + +static const struct SpriteTemplate sSpriteTemplate_Arrows = +{ + .tileTag = GFXTAG_ARROWS, + .paletteTag = PALTAG_ARROWS, + .oam = &sOamData_Arrows, + .anims = sArrowsAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AnimCmd sMenu2AnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(64, 10), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sMenu2AnimCmds[] = { + sMenu2AnimCmd_0, // Looping animation +}; + +static const union AnimCmd sHoppipAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(48, 15), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sHoppipAnimCmds[] = { + sHoppipAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Hoppip = +{ + .tileTag = GFXTAG_HOPPIP, + .paletteTag = PALTAG_HOPPIP, + .oam = &sOamData_Hoppip, + .anims = sHoppipAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AnimCmd sElekidAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(32, 15), + //ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(48, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sElekidAnimCmds[] = { + sElekidAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Elekid = +{ + .tileTag = GFXTAG_ELEKID, + .paletteTag = PALTAG_ELEKID, + .oam = &sOamData_Elekid, + .anims = sElekidAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AnimCmd sTeddiursaAnimCmd_0[] = +{ + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(48, 30), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sTeddiursaAnimCmds[] = { + sTeddiursaAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Teddiursa = +{ + .tileTag = GFXTAG_TEDDIURSA, + .paletteTag = PALTAG_TEDDIURSA, + .oam = &sOamData_Teddiursa, + .anims = sTeddiursaAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AnimCmd sPhanpyAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(48, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(48, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sPhanpyAnimCmds[] = { + sPhanpyAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Phanpy = +{ + .tileTag = GFXTAG_PHANPY, + .paletteTag = PALTAG_PHANPY, + .oam = &sOamData_Phanpy, + .anims = sPhanpyAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AnimCmd sBelossomAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(48, 30), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sBelossomAnimCmds[] = { + sBelossomAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Belossom = +{ + .tileTag = GFXTAG_BELOSSOM, + .paletteTag = PALTAG_BELOSSOM, + .oam = &sOamData_Belossom, + .anims = sBelossomAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu_1_Master = +{ + .tileTag = GFXTAG_MENU_1, + .paletteTag = PALTAG_MENU_MASTER, + .oam = &sOamData_Menu, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu_2_Master = +{ + .tileTag = GFXTAG_MENU_2, + .paletteTag = PALTAG_MENU_MASTER, + .oam = &sOamData_Menu_2, + .anims = sMenu2AnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu_1_Ultra = +{ + .tileTag = GFXTAG_MENU_1, + .paletteTag = PALTAG_MENU_ULTRA, + .oam = &sOamData_Menu, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu_2_Ultra = +{ + .tileTag = GFXTAG_MENU_2, + .paletteTag = PALTAG_MENU_ULTRA, + .oam = &sOamData_Menu_2, + .anims = sMenu2AnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu_1_Great = +{ + .tileTag = GFXTAG_MENU_1, + .paletteTag = PALTAG_MENU_GREAT, + .oam = &sOamData_Menu, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu_2_Great = +{ + .tileTag = GFXTAG_MENU_2, + .paletteTag = PALTAG_MENU_GREAT, + .oam = &sOamData_Menu_2, + .anims = sMenu2AnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu_1_Basic = +{ + .tileTag = GFXTAG_MENU_1, + .paletteTag = PALTAG_MENU_BASIC, + .oam = &sOamData_Menu, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu_2_Basic = +{ + .tileTag = GFXTAG_MENU_2, + .paletteTag = PALTAG_MENU_BASIC, + .oam = &sOamData_Menu_2, + .anims = sMenu2AnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_CreditDigit = +{ + .tileTag = GFXTAG_CREDIT_DIGIT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate sSpriteTemplate_PlayerDigit = +{ + .tileTag = GFXTAG_PLAYER_DIGIT, + .paletteTag = PALTAG_INTERFACEPLAYER, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const union AnimCmd sDigitalTextAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_FRAME(32, 30), + ANIMCMD_FRAME(64, 30), + ANIMCMD_FRAME(96, 30), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sDigitalTextAnimCmds[] = { + sDigitalTextAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Digital_Text = +{ + .tileTag = DIGITAL_TEXT_GFX, + .paletteTag = DIGITAL_TEXT_PAL, + .oam = &sOamData_Digital_Text, + .anims = sDigitalTextAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Lottery_JPN = +{ + .tileTag = LOTTERY_JPN_GFX, + .paletteTag = LOTTERY_JPN_PAL, + .oam = &sOamData_Lottery_JPN, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const union AnimCmd sKnobAnimCmd_1[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 20), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +static const union AnimCmd sKnobAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_END +}; + +static const union AnimCmd *const sKnobAnimCmds[] = { + sKnobAnimCmd_0, // Still + sKnobAnimCmd_1, // Rotate +}; + +static const struct SpriteTemplate sSpriteTemplate_Knob = +{ + .tileTag = KNOB_GFX, + .paletteTag = PALTAG_KNOB, + .oam = &sOamData_Knob, + .anims = sKnobAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +void StartGacha(void) +{ + u8 taskId = 0; + sGacha = AllocZeroed(sizeof(struct Gacha)); + taskId = CreateTask(FadeToGachaScreen, 0); +} + +static void SpriteCB_BouncingPokeball(struct Sprite *sprite) +{ + sprite->y += sprite->data[0] / 10; + sprite->data[5] += sprite->data[1]; + sprite->x = sprite->data[5] / 10; + if (sprite->y > 0x4c) + { + sprite->y = 0x4c; + sprite->data[0] = -(sprite->data[0] * sprite->data[2]) / 100; + sprite->data[3] ++; + } + if (sprite->x == 0x78) + sprite->data[1] = 0; + sprite->data[0] += sprite->data[4]; + if (sprite->data[3] == 4) + { + sprite->data[7] = 1; + sprite->callback = SpriteCallbackDummy; + } +} + +static void SpriteCB_BouncingPokeballArrive(struct Sprite *sprite) +{ + if (sprite->data[2] == 0) + { + if ((sprite->y += 4) > sprite->data[3]) + { + sprite->data[2] ++; + sprite->data[0] = 0x16; + PlaySE(SE_BALL_BOUNCE_1); + } + } + else + { + if (sprite->data[0] == 0x42) + PlaySE(SE_BALL_BOUNCE_2); + if (sprite->data[0] == 0x5c) + PlaySE(SE_BALL_BOUNCE_3); + if (sprite->data[0] == 0x6b) + PlaySE(SE_BALL_BOUNCE_4); + sprite->y2 += sTradeBallVerticalVelocityTable[sprite->data[0]]; + if (++sprite->data[0] == 0x6c) + sprite->callback = SpriteCallbackDummy; + } +} + +static void FadeToGachaScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + SetMainCallback2(InitGachaScreen); + DestroyTask(taskId); + } + break; + } +} + +static void BGSetup(void) +{ + u16 size = 0x1480; + + if (sGacha->GachaId == 1) // Basic + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Basic_Pal, 0, sizeof(Gacha_BG_Basic_Pal)); + } + else if (sGacha->GachaId == 2) // Great + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Great_Pal, 0, sizeof(Gacha_BG_Great_Pal)); + } + else if (sGacha->GachaId == 3) // Ultra + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Ultra_Pal, 0, sizeof(Gacha_BG_Ultra_Pal)); + } + else // Master + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Master_Pal, 0, sizeof(Gacha_BG_Master_Pal)); + } +} + +static void BGRed(void) +{ + u16 size = 0x1480; + + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Red, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Red_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Red_Pal, 0, sizeof(Gacha_BG_Red_Pal)); +} + +static void Shake1(void) +{ + u16 size = 0x1480; + + if (sGacha->GachaId == 1) // Basic + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Basic_Pal, 0, sizeof(Gacha_BG_Basic_Pal)); + } + else if (sGacha->GachaId == 2) // Great + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Great_Pal, 0, sizeof(Gacha_BG_Great_Pal)); + } + else if (sGacha->GachaId == 3) // Ultra + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Ultra_Pal, 0, sizeof(Gacha_BG_Ultra_Pal)); + } + else // Master + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Master_Pal, 0, sizeof(Gacha_BG_Master_Pal)); + } +} + +static void Shake2(void) +{ + u16 size = 0x1480; + + if (sGacha->GachaId == 1) // Basic + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Basic_Pal, 0, sizeof(Gacha_BG_Basic_Pal)); + } + else if (sGacha->GachaId == 2) // Great + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Great_Pal, 0, sizeof(Gacha_BG_Great_Pal)); + } + else if (sGacha->GachaId == 3) // Ultra + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Ultra_Pal, 0, sizeof(Gacha_BG_Ultra_Pal)); + } + else // Master + { + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Master_Pal, 0, sizeof(Gacha_BG_Master_Pal)); + } +} + +static void GachaVBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void GachaMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void SetCreditDigits(u16 num) +{ + u8 i; + u16 d = 1000; + + for (i = 0; i < 4; i++) + { + u8 digit = num / d; + + gSprites[sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; + + gSprites[sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.tileNum = + gSprites[sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + + num = num % d; + d = d / 10; + } + + for (i = 0; i < 4; i++) { + if (gSprites[sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible == FALSE) { + + } else { + gSprites[sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; + } + } + + BuildOamBuffer(); +} + +static void SetPlayerDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place + + for (i = 0; i < 4; i++) // Always show 4 digits + { + u8 digit = num / d; + + // Show the digit (all digits are visible) + gSprites[sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = FALSE; + + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } + + // Set the tileNum based on the current digit + gSprites[sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.tileNum = + gSprites[sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreateCreditSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_Interface) - 1; i++) + { + LoadCompressedSpriteSheet(&sSpriteSheets_Interface[i]); + } + + for (i = 0; i < MAX_COIN_DIGITS; i++) + { + if (i == 0){ + sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 207, 140, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } + if (i == 1){ + sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 8 + 207, 140, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } + if (i == 2){ + sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 16 + 207, 140, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } + if (i == 3){ + sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 24 + 207, 140, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } + } +} + +static void CreatePlayerSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PlayerInterface) - 1; i++) + { + LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS] = CreateSprite(&sSpriteTemplate_PlayerDigit, i * 8 + 207, 118, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; + } +} + +static void CreateCTA(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Press_A); + + sGacha->CTAspriteId = CreateSprite(&sSpriteTemplate_Press_A, 152, 116, 0); + gSprites[sGacha->CTAspriteId].animNum = 0; // Off +} + +static void CreateArrows(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Arrows); + + sGacha->ArrowsSpriteId = CreateSprite(&sSpriteTemplate_Arrows, 207 + 24, 120, 0); + gSprites[sGacha->ArrowsSpriteId].animNum = 1; // Only Up +} + +static void CreateLotteryJPN(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Lottery_JPN); + + sGacha->LotteryJPNspriteId = CreateSprite(&sSpriteTemplate_Lottery_JPN, 176, 32, 0); +} + +static void CreateHoppip(void) +{ + s16 x = 142; + s16 y = 56; + s16 x2 = x + 34; + s16 x3 = x + 68; + + LoadCompressedSpriteSheet(&sSpriteSheet_Hoppip); + + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x3, y, 0); +} + +static void CreateElekid(void) +{ + s16 x = 142; + s16 y = 56 + 2; + s16 x2 = x + 34; + s16 x3 = x + 68; + + LoadCompressedSpriteSheet(&sSpriteSheet_Elekid); + + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x3, y, 0); +} + +static void CreateTeddiursa(void) +{ + s16 x = 142; + s16 y = 56; + s16 x2 = x + 34; + s16 x3 = x + 68; + + LoadCompressedSpriteSheet(&sSpriteSheet_Teddiursa); + + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x3, y, 0); +} + +static void CreatePhanpy(void) +{ + s16 x = 142; + s16 y = 56; + s16 x2 = x + 34; + s16 x3 = x + 68; + + LoadCompressedSpriteSheet(&sSpriteSheet_Phanpy); + + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x3, y, 0); +} + +static void CreateBelossom(void) +{ + s16 x = 142; + s16 y = 56; + s16 x2 = x + 34; + s16 x3 = x + 68; + + LoadCompressedSpriteSheet(&sSpriteSheet_Belossom); + + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x3, y, 0); + +} + +static void CreateDigitalText(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Digital_Text); + + sGacha->DigitalTextSpriteId = CreateSprite(&sSpriteTemplate_Digital_Text, 64, 25, 0); +} + +static void CreateCreditMenu(void) +{ + s16 x = 144; + s16 y = 128; + s16 x2 = x + 64; + u8 priority = 1; + + LoadCompressedSpriteSheet(&sSpriteSheet_Menu_1); + if (sGacha->GachaId == 1) // Basic + { + sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Basic, x, y, priority); + } + else if (sGacha->GachaId == 2) // Great + { + sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Great, x, y, priority); + } + else if (sGacha->GachaId == 3) // Ultra + { + sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Ultra, x, y, priority); + } + else // Master + { + sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Master, x, y, priority); + } + gSprites[sGacha->CreditMenu1Id].oam.priority = 1; +} + +static void CreatePlayerMenu(void) +{ + s16 x = 144; + s16 y = 128; + s16 x2 = x + 64; + u8 priority = 1; + + LoadCompressedSpriteSheet(&sSpriteSheet_Menu_2); + if (sGacha->GachaId == 1) // Basic + { + sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Basic, x2, y, priority); + } + else if (sGacha->GachaId == 2) // Great + { + sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Great, x2, y, priority); + } + else if (sGacha->GachaId == 3) // Ultra + { + sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Ultra, x2, y, priority); + } + else // Master + { + sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Master, x2, y, priority); + } + gSprites[sGacha->CreditMenu2Id].oam.priority = 1; +} + +static void CreateKnob(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Knob); + + sGacha->KnobSpriteId = CreateSprite(&sSpriteTemplate_Knob, 76, 128, 0); + gSprites[sGacha->KnobSpriteId].animNum = 0; // No Rotation +} + +typedef struct { + int customNumber; + u16 species; +} SpeciesBasicA; + +static const SpeciesBasicA SpeciesBasicCommon[] = { + {0, SPECIES_SUNKERN}, + {1, SPECIES_AZURILL}, + {2, SPECIES_CATERPIE}, + {3, SPECIES_WURMPLE}, + {4, SPECIES_IGGLYBUFF}, + {5, SPECIES_WOOPER}, + {6, SPECIES_MAGIKARP}, + {7, SPECIES_SENTRET}, + {8, SPECIES_CLEFFA}, + {9, SPECIES_POOCHYENA}, + {10, SPECIES_LOTAD}, + {11, SPECIES_SEEDOT}, + {12, SPECIES_ZIGZAGOON}, + {13, SPECIES_WHISMUR}, + {14, SPECIES_ZUBAT}, + {15, SPECIES_SPINARAK}, + {16, SPECIES_HOPPIP}, + {17, SPECIES_PIDGEY}, + {18, SPECIES_RATTATA}, + {19, SPECIES_SPEAROW}, + {20, SPECIES_HOOTHOOT}, + {21, SPECIES_LEDYBA}, + {22, SPECIES_SURSKIT}, + {23, SPECIES_TAILLOW}, + {24, SPECIES_WINGULL}, + {25, SPECIES_NIDORAN_M}, + {26, SPECIES_NIDORAN_F}, + {27, SPECIES_PARAS}, + {28, SPECIES_SHROOMISH}, + {29, SPECIES_POLIWAG}, + {30, SPECIES_BELLSPROUT}, + {31, SPECIES_VENONAT}, + {32, SPECIES_SMOOCHUM}, + {33, SPECIES_ODDISH}, + {34, SPECIES_PSYDUCK}, + {35, SPECIES_GOLDEEN}, + {36, SPECIES_FEEBAS} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesBasicB; + +static const SpeciesBasicB SpeciesBasicUncommon[] = { + {0, SPECIES_METAPOD}, + {1, SPECIES_KAKUNA}, + {2, SPECIES_PICHU}, + {3, SPECIES_SILCOON}, + {4, SPECIES_CASCOON}, + {5, SPECIES_MAKUHITA}, + {6, SPECIES_MARILL}, + {7, SPECIES_SLUGMA}, + {8, SPECIES_SWINUB}, + {9, SPECIES_DIGLETT}, + {10, SPECIES_MAREEP}, + {11, SPECIES_MEDITITE}, + {12, SPECIES_EKANS}, + {13, SPECIES_BARBOACH}, + {14, SPECIES_HORSEA}, + {15, SPECIES_SANDSHREW}, + {16, SPECIES_GEODUDE}, + {17, SPECIES_GULPIN}, + {18, SPECIES_MANKEY}, + {19, SPECIES_MACHOP}, + {20, SPECIES_SHELLDER}, + {21, SPECIES_GRIMER}, + {22, SPECIES_VOLTORB}, + {23, SPECIES_PLUSLE}, + {24, SPECIES_MINUN}, + {25, SPECIES_NATU}, + {26, SPECIES_NINCADA}, + {27, SPECIES_SPOINK} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesBasicC; + +static const SpeciesBasicC SpeciesBasicRare[] = { + {0, SPECIES_RALTS}, + {1, SPECIES_TYROGUE}, + {2, SPECIES_SKITTY}, + {3, SPECIES_SLAKOTH}, + {4, SPECIES_MEOWTH}, + {5, SPECIES_PINECO}, + {6, SPECIES_TRAPINCH}, + {7, SPECIES_SPHEAL}, + {8, SPECIES_VULPIX}, + {9, SPECIES_SNUBBULL}, + {10, SPECIES_REMORAID}, + {11, SPECIES_CORPHISH}, + {12, SPECIES_ABRA}, + {13, SPECIES_ELEKID}, + {14, SPECIES_MAGBY}, + {15, SPECIES_CORSOLA} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesBasicD; + +static const SpeciesBasicD SpeciesBasicUltraRare[] = { + {0, SPECIES_TOGEPI}, + {1, SPECIES_CHARMANDER}, + {2, SPECIES_CYNDAQUIL}, + {3, SPECIES_TREECKO}, + {4, SPECIES_TORCHIC}, + {5, SPECIES_MUDKIP}, + {6, SPECIES_SQUIRTLE}, + {7, SPECIES_TOTODILE}, + {8, SPECIES_BULBASAUR}, + {9, SPECIES_CHIKORITA}, + {10, SPECIES_SHUCKLE} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesGreatA; + +static const SpeciesGreatA SpeciesGreatCommon[] = { + {0, SPECIES_JIGGLYPUFF}, + {1, SPECIES_CLEFAIRY}, + {2, SPECIES_KIRLIA}, + {3, SPECIES_ELECTRIKE}, + {4, SPECIES_SHUPPET}, + {5, SPECIES_DUSKULL}, + {6, SPECIES_SHELLDER}, + {7, SPECIES_MACHOP}, + {8, SPECIES_MANKEY}, + {9, SPECIES_GULPIN}, + {10, SPECIES_MAREEP}, + {11, SPECIES_PINECO}, + {12, SPECIES_REMORAID}, + {13, SPECIES_CARVANHA}, + {14, SPECIES_NUMEL}, + {15, SPECIES_CORPHISH}, + {16, SPECIES_SWABLU}, + {17, SPECIES_SLOWPOKE}, + {18, SPECIES_PIKACHU}, + {19, SPECIES_PSYDUCK}, + {20, SPECIES_GRIMER}, + {21, SPECIES_KRABBY}, + {22, SPECIES_EXEGGCUTE}, + {23, SPECIES_VOLTORB}, + {24, SPECIES_NATU}, + {25, SPECIES_PHANPY}, + {26, SPECIES_ARON}, + {27, SPECIES_SPOINK}, + {28, SPECIES_TENTACOOL}, + {29, SPECIES_KOFFING}, + {30, SPECIES_SKIPLOOM}, + {31, SPECIES_LOMBRE}, + {32, SPECIES_NUZLEAF}, + {33, SPECIES_RHYHORN}, + {34, SPECIES_CLAMPERL}, + {35, SPECIES_PIDGEOTTO}, + {36, SPECIES_ELEKID}, + {37, SPECIES_LOUDRED}, + {38, SPECIES_NIDORINA}, + {39, SPECIES_NIDORINO}, + {40, SPECIES_MAGBY}, + {41, SPECIES_POLIWHIRL}, + {42, SPECIES_ONIX}, + {43, SPECIES_GRAVELER}, + {44, SPECIES_GLOOM}, + {45, SPECIES_PLUSLE}, + {46, SPECIES_MINUN}, + {47, SPECIES_PONYTA}, + {48, SPECIES_FURRET}, + {49, SPECIES_LINOONE}, + {50, SPECIES_SUNFLORA}, + {51, SPECIES_CHIMECHO}, + {52, SPECIES_QUAGSIRE}, + {53, SPECIES_TAILLOW}, + {54, SPECIES_PELIPPER}, + {55, SPECIES_PERSIAN}, + {56, SPECIES_SEADRA}, + {57, SPECIES_NOCTOWL}, + {58, SPECIES_SANDSLASH}, + {59, SPECIES_VENOMOTH}, + {60, SPECIES_SEAKING}, + {61, SPECIES_GOLBAT}, + {62, SPECIES_TYROGUE}, + {63, SPECIES_TORKOAL}, + {64, SPECIES_ELECTRODE} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesGreatB; + +static const SpeciesGreatB SpeciesGreatUncommon[] = { + {0, SPECIES_FEEBAS}, + {1, SPECIES_BALTOY}, + {2, SPECIES_SNORUNT}, + {3, SPECIES_DODUO}, + {4, SPECIES_GASTLY}, + {5, SPECIES_ABRA}, + {6, SPECIES_CUBONE}, + {7, SPECIES_MAGNEMITE}, + {8, SPECIES_SEEL}, + {9, SPECIES_DROWZEE}, + {10, SPECIES_CHINCHOU}, + {11, SPECIES_TEDDIURSA}, + {12, SPECIES_HOUNDOUR}, + {13, SPECIES_CACNEA}, + {14, SPECIES_GROWLITHE}, + {15, SPECIES_SPINDA}, + {16, SPECIES_FLAAFFY}, + {17, SPECIES_CORSOLA}, + {18, SPECIES_DELCATTY}, + {19, SPECIES_DUSTOX}, + {20, SPECIES_WEEPINBELL}, + {21, SPECIES_LEDIAN}, + {22, SPECIES_ARIADOS}, + {23, SPECIES_BUTTERFREE}, + {24, SPECIES_BEEDRILL}, + {25, SPECIES_BEAUTIFLY}, + {26, SPECIES_VOLBEAT}, + {27, SPECIES_ILLUMISE}, + {28, SPECIES_ROSELIA}, + {29, SPECIES_WAILMER}, + {30, SPECIES_MACHOKE}, + {31, SPECIES_MURKROW}, + {32, SPECIES_MAGCARGO}, + {33, SPECIES_RATICATE}, + {34, SPECIES_MASQUERAIN}, + {35, SPECIES_MIGHTYENA}, + {36, SPECIES_CASTFORM}, + {37, SPECIES_GLIGAR}, + {38, SPECIES_QWILFISH}, + {39, SPECIES_TANGELA}, + {40, SPECIES_VIGOROTH}, + {41, SPECIES_FEAROW}, + {42, SPECIES_PILOSWINE}, + {43, SPECIES_PRIMEAPE}, + {44, SPECIES_BRELOOM}, + {45, SPECIES_TROPIUS}, + {46, SPECIES_STANTLER}, + {47, SPECIES_SWALOT}, + {48, SPECIES_XATU}, + {49, SPECIES_GRUMPIG}, + {50, SPECIES_HARIYAMA}, + {51, SPECIES_GOLDUCK} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesGreatC; + +static const SpeciesGreatC SpeciesGreatRare[] = { + {0, SPECIES_DRATINI}, + {1, SPECIES_LARVITAR}, + {2, SPECIES_BAGON}, + {3, SPECIES_TOGEPI}, + {4, SPECIES_CHARMANDER}, + {5, SPECIES_CYNDAQUIL}, + {6, SPECIES_TREECKO}, + {7, SPECIES_TORCHIC}, + {8, SPECIES_MUDKIP}, + {9, SPECIES_SQUIRTLE}, + {10, SPECIES_TOTODILE}, + {11, SPECIES_BULBASAUR}, + {12, SPECIES_CHIKORITA}, + {13, SPECIES_LUVDISC}, + {14, SPECIES_STARYU}, + {15, SPECIES_VIBRAVA}, + {16, SPECIES_FARFETCHD}, + {17, SPECIES_AIPOM}, + {18, SPECIES_NOSEPASS}, + {19, SPECIES_SABLEYE}, + {20, SPECIES_MAWILE}, + {21, SPECIES_YANMA}, + {22, SPECIES_KADABRA}, + {23, SPECIES_DUGTRIO}, + {24, SPECIES_HAUNTER}, + {25, SPECIES_SUDOWOODO}, + {26, SPECIES_KECLEON}, + {27, SPECIES_MEDICHAM}, + {28, SPECIES_SEALEO}, + {29, SPECIES_DUNSPARCE}, + {30, SPECIES_SNEASEL}, + {31, SPECIES_ZANGOOSE}, + {32, SPECIES_SEVIPER}, + {33, SPECIES_MANTINE}, + {34, SPECIES_SKARMORY}, + {35, SPECIES_OCTILLERY}, + {36, SPECIES_RELICANTH}, + {37, SPECIES_MILTANK}, + {38, SPECIES_SCYTHER}, + {39, SPECIES_PINSIR}, + {40, SPECIES_SHUCKLE} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesGreatD; + +static const SpeciesGreatD SpeciesGreatUltraRare[] = { + {0, SPECIES_WYNAUT}, + {1, SPECIES_DELIBIRD}, + {2, SPECIES_PORYGON}, + {3, SPECIES_IVYSAUR}, + {4, SPECIES_CHARMELEON}, + {5, SPECIES_WARTORTLE}, + {6, SPECIES_BAYLEEF}, + {7, SPECIES_QUILAVA}, + {8, SPECIES_CROCONAW}, + {9, SPECIES_GROVYLE}, + {10, SPECIES_COMBUSKEN}, + {11, SPECIES_MARSHTOMP}, + {12, SPECIES_PUPITAR}, + {13, SPECIES_DRAGONAIR}, + {14, SPECIES_SHELGON}, + {15, SPECIES_METANG}, + {16, SPECIES_MR_MIME}, + {17, SPECIES_HERACROSS} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesUltraA; + +static const SpeciesUltraA SpeciesUltraCommon[] = { + {0, SPECIES_KRABBY}, + {1, SPECIES_EXEGGCUTE}, + {2, SPECIES_MAGNEMITE}, + {3, SPECIES_TEDDIURSA}, + {4, SPECIES_ARIADOS}, + {5, SPECIES_PARASECT}, + {6, SPECIES_DUGTRIO}, + {7, SPECIES_SUDOWOODO}, + {8, SPECIES_MAGCARGO}, + {9, SPECIES_MEDICHAM}, + {10, SPECIES_SEALEO}, + {11, SPECIES_MASQUERAIN}, + {12, SPECIES_MIGHTYENA}, + {13, SPECIES_LINOONE}, + {14, SPECIES_CASTFORM}, + {15, SPECIES_SUNFLORA}, + {16, SPECIES_CHIMECHO}, + {17, SPECIES_SWELLOW}, + {18, SPECIES_PELIPPER}, + {19, SPECIES_LAIRON}, + {20, SPECIES_WIGGLYTUFF}, + {21, SPECIES_ARBOK}, + {22, SPECIES_KECLEON}, + {23, SPECIES_FEAROW}, + {24, SPECIES_SANDSLASH}, + {25, SPECIES_SEAKING}, + {26, SPECIES_NINJASK}, + {27, SPECIES_ZANGOOSE}, + {28, SPECIES_SEVIPER}, + {29, SPECIES_DODRIO}, + {30, SPECIES_LANTURN}, + {31, SPECIES_JUMPLUFF}, + {32, SPECIES_BRELOOM}, + {33, SPECIES_SHARPEDO}, + {34, SPECIES_CAMERUPT}, + {35, SPECIES_SWALOT}, + {36, SPECIES_CRAWDAUNT}, + {37, SPECIES_XATU}, + {38, SPECIES_TORKOAL}, + {39, SPECIES_GRUMPIG}, + {40, SPECIES_HARIYAMA}, + {41, SPECIES_KINGLER}, + {42, SPECIES_PIDGEOT}, + {43, SPECIES_CLEFABLE}, + {44, SPECIES_HYPNO}, + {45, SPECIES_RAICHU}, + {46, SPECIES_RHYDON}, + {47, SPECIES_VILEPLUME}, + {48, SPECIES_VICTREEBEL}, + {49, SPECIES_BELLOSSOM}, + {50, SPECIES_MILTANK}, + {51, SPECIES_GOLEM}, + {52, SPECIES_GOLDUCK}, + {53, SPECIES_RAPIDASH}, + {54, SPECIES_WAILORD}, + {55, SPECIES_NIDOQUEEN}, + {56, SPECIES_NIDOKING}, + {57, SPECIES_NINETALES}, + {58, SPECIES_MACHAMP}, + {59, SPECIES_POLIWRATH}, + {60, SPECIES_TENTACRUEL}, + {61, SPECIES_EXEGGUTOR}, + {62, SPECIES_CLOYSTER} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesUltraB; + +static const SpeciesUltraB SpeciesUltraUncommon[] = { + {0, SPECIES_DELIBIRD}, + {1, SPECIES_LICKITUNG}, + {2, SPECIES_YANMA}, + {3, SPECIES_PORYGON}, + {4, SPECIES_TOGETIC}, + {5, SPECIES_AZUMARILL}, + {6, SPECIES_MAROWAK}, + {7, SPECIES_LUNATONE}, + {8, SPECIES_SOLROCK}, + {9, SPECIES_GRANBULL}, + {10, SPECIES_HITMONLEE}, + {11, SPECIES_HITMONCHAN}, + {12, SPECIES_HITMONTOP}, + {13, SPECIES_BANETTE}, + {14, SPECIES_DUSCLOPS}, + {15, SPECIES_MR_MIME}, + {16, SPECIES_TROPIUS}, + {17, SPECIES_MAGNETON}, + {18, SPECIES_MANTINE}, + {19, SPECIES_SKARMORY}, + {20, SPECIES_WHISCASH}, + {21, SPECIES_DEWGONG}, + {22, SPECIES_MANECTRIC}, + {23, SPECIES_OCTILLERY}, + {24, SPECIES_GLALIE}, + {25, SPECIES_SLOWBRO}, + {26, SPECIES_WEEZING}, + {27, SPECIES_ELECTABUZZ}, + {28, SPECIES_SLOWKING}, + {29, SPECIES_EXPLOUD}, + {30, SPECIES_MAGMAR}, + {31, SPECIES_MUK}, + {32, SPECIES_SCYTHER}, + {33, SPECIES_PINSIR}, + {34, SPECIES_URSARING}, + {35, SPECIES_HOUNDOOM}, + {36, SPECIES_CLAYDOL}, + {37, SPECIES_AMPHAROS}, + {38, SPECIES_GARDEVOIR}, + {39, SPECIES_ABSOL}, + {40, SPECIES_CACTURNE}, + {41, SPECIES_LUDICOLO}, + {42, SPECIES_SHIFTRY}, + {43, SPECIES_POLITOED}, + {44, SPECIES_SCIZOR}, + {45, SPECIES_HERACROSS}, + {46, SPECIES_STEELIX}, + {47, SPECIES_ALTARIA}, + {48, SPECIES_RELICANTH}, + {49, SPECIES_HUNTAIL}, + {50, SPECIES_GOREBYSS} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesUltraC; + +static const SpeciesUltraC SpeciesUltraRare[] = { + {0, SPECIES_DITTO}, + {1, SPECIES_EEVEE}, + {2, SPECIES_OMANYTE}, + {3, SPECIES_KABUTO}, + {4, SPECIES_LILEEP}, + {5, SPECIES_ANORITH}, + {6, SPECIES_WOBBUFFET}, + {7, SPECIES_PUPITAR}, + {8, SPECIES_DUNSPARCE}, + {9, SPECIES_DRAGONAIR}, + {10, SPECIES_SHELGON}, + {11, SPECIES_METANG}, + {12, SPECIES_MISDREAVUS}, + {13, SPECIES_KANGASKHAN}, + {14, SPECIES_TAUROS}, + {15, SPECIES_ALAKAZAM}, + {16, SPECIES_GENGAR}, + {17, SPECIES_STARMIE}, + {18, SPECIES_FLYGON}, + {19, SPECIES_VAPOREON}, + {20, SPECIES_JOLTEON}, + {21, SPECIES_FLAREON}, + {22, SPECIES_AGGRON}, + {23, SPECIES_WALREIN}, + {24, SPECIES_CROBAT}, + {25, SPECIES_GYARADOS}, + {26, SPECIES_KINGDRA}, + {27, SPECIES_MILOTIC} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesUltraD; + +static const SpeciesUltraD SpeciesUltraUltraRare[] = { + {0, SPECIES_SHEDINJA}, + {1, SPECIES_SMEARGLE}, + {2, SPECIES_CHANSEY}, + {3, SPECIES_OMASTAR}, + {4, SPECIES_KABUTOPS}, + {5, SPECIES_CRADILY}, + {6, SPECIES_ARMALDO}, + {7, SPECIES_AERODACTYL}, + {8, SPECIES_PORYGON2}, + {9, SPECIES_VENUSAUR}, + {10, SPECIES_MEGANIUM}, + {11, SPECIES_ESPEON}, + {12, SPECIES_UMBREON}, + {13, SPECIES_BLASTOISE}, + {14, SPECIES_FERALIGATR}, + {15, SPECIES_SCEPTILE}, + {16, SPECIES_BLAZIKEN}, + {17, SPECIES_SWAMPERT}, + {18, SPECIES_CHARIZARD}, + {19, SPECIES_TYPHLOSION}, + {20, SPECIES_LAPRAS}, + {21, SPECIES_SNORLAX}, + {22, SPECIES_ARCANINE}, + {23, SPECIES_DRAGONITE}, + {24, SPECIES_TYRANITAR}, + {25, SPECIES_SALAMENCE}, + {26, SPECIES_METAGROSS}, + {27, SPECIES_SLAKING} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesMasterA; + +static const SpeciesMasterA SpeciesMasterCommon[] = { + {0, SPECIES_DITTO}, + {1, SPECIES_METANG}, + {2, SPECIES_SHELGON}, + {3, SPECIES_PUPITAR}, + {4, SPECIES_DRAGONAIR}, + {5, SPECIES_FLYGON}, + {6, SPECIES_VENUSAUR}, + {7, SPECIES_VAPOREON}, + {8, SPECIES_JOLTEON}, + {9, SPECIES_FLAREON}, + {10, SPECIES_MEGANIUM}, + {11, SPECIES_BLASTOISE}, + {12, SPECIES_FERALIGATR}, + {13, SPECIES_SCEPTILE}, + {14, SPECIES_BLAZIKEN}, + {15, SPECIES_SWAMPERT}, + {16, SPECIES_CHARIZARD}, + {17, SPECIES_TYPHLOSION} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesMasterB; + +static const SpeciesMasterB SpeciesMasterUncommon[] = { + {0, SPECIES_OMASTAR}, + {1, SPECIES_KABUTOPS}, + {2, SPECIES_CRADILY}, + {3, SPECIES_ARMALDO}, + {4, SPECIES_SHUCKLE}, + {5, SPECIES_AERODACTYL}, + {6, SPECIES_ESPEON}, + {7, SPECIES_UMBREON}, + {8, SPECIES_LAPRAS}, + {9, SPECIES_SNORLAX}, + {10, SPECIES_DRAGONITE}, + {11, SPECIES_SALAMENCE}, + {12, SPECIES_METAGROSS}, + {13, SPECIES_SHEDINJA}, + {14, SPECIES_SMEARGLE}, + {15, SPECIES_UNOWN}, + {16, SPECIES_BLISSEY} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesMasterC; + +static const SpeciesMasterC SpeciesMasterRare[] = { + {0, SPECIES_ARTICUNO}, + {1, SPECIES_ZAPDOS}, + {2, SPECIES_MOLTRES}, + {3, SPECIES_RAIKOU}, + {4, SPECIES_ENTEI}, + {5, SPECIES_SUICUNE}, + {6, SPECIES_REGIROCK}, + {7, SPECIES_REGICE}, + {8, SPECIES_REGISTEEL}, + {9, SPECIES_LATIAS}, + {10, SPECIES_LATIOS} +}; + +typedef struct { + int customNumber; + u16 species; +} SpeciesMasterD; + +static const SpeciesMasterD SpeciesMasterUltraRare[] = { + {0, SPECIES_MEW}, + {1, SPECIES_CELEBI}, + {2, SPECIES_JIRACHI}, + {3, SPECIES_DEOXYS}, + {4, SPECIES_KYOGRE}, + {5, SPECIES_GROUDON}, + {6, SPECIES_MEWTWO}, + {7, SPECIES_LUGIA}, + {8, SPECIES_HO_OH}, + {9, SPECIES_RAYQUAZA} +}; + +static void ShowMessage(void) +{ + u16 bet; + struct WindowTemplate template; + + + SetWindowTemplateFields(&template, GACHA_MENUS, 17, 10, 10, 2, 0xF, 0x194); + + sTextWindowId = AddWindow(&template); + FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sTextWindowId); + LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); + DrawStdWindowFrame(sTextWindowId, FALSE); + bet = sGacha->Odds; + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, 3); + //gStringVar4[0] = '\0'; + StringExpandPlaceholders(gStringVar4, sMessageText); + AddTextPrinterParameterized(sTextWindowId, FONT_NARROW, gStringVar4, 0, 1, 0, 0); + CopyWindowToVram(sTextWindowId, 3); +} + +static void ResetMessage(void) +{ + ClearStdWindowAndFrame(sTextWindowId, TRUE); + RemoveWindow(sTextWindowId); +} + +static void StartExitGacha(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sGacha->state = GACHA_STATE_EXIT; +} + +static void StartTradeScreen(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sGacha->state = STATE_FADE; +} + +u16 getBasicSpeciesbyNum(u16 Number) { + int i; + u16 totalMax; + + // Use the pre-defined totalMax values based on the rarity + if (sGacha->Rarity == 0) { // Common + totalMax = sGacha->Basic_CommonMax; + } + else if (sGacha->Rarity == 1) { // Uncommon + totalMax = sGacha->Basic_UncommonMax; + } + else if (sGacha->Rarity == 2) { // Rare + totalMax = sGacha->Basic_RareMax; + } + else if (sGacha->Rarity == 3) { // Ultra Rare + totalMax = sGacha->Basic_UltraRareMax; + } + + // Check if the provided Number is valid + if (Number >= totalMax) { + return -1; // Return -1 if the Number is out of range for the list + } + + // Now, search for the Pokémon based on its customNumber + if (sGacha->Rarity == 0) { // Common + for (i = 0; i < totalMax; i++) { + if (SpeciesBasicCommon[i].customNumber == Number) { + return SpeciesBasicCommon[i].species; + } + } + } + else if (sGacha->Rarity == 1) { // Uncommon + for (i = 0; i < totalMax; i++) { + if (SpeciesBasicUncommon[i].customNumber == Number) { + return SpeciesBasicUncommon[i].species; + } + } + } + else if (sGacha->Rarity == 2) { // Rare + for (i = 0; i < totalMax; i++) { + if (SpeciesBasicRare[i].customNumber == Number) { + return SpeciesBasicRare[i].species; + } + } + } + else if (sGacha->Rarity == 3) { // Ultra Rare + for (i = 0; i < totalMax; i++) { + if (SpeciesBasicUltraRare[i].customNumber == Number) { + return SpeciesBasicUltraRare[i].species; + } + } + } + + return -1; // Return -1 if customNumber is not found +} + +u16 getGreatSpeciesbyNum(u16 Number) { + int i; + u16 totalMax = 0; + + // Determine the totalMax based on rarity + if (sGacha->Rarity == 0) { // Common + totalMax = sGacha->Great_CommonMax; + } + else if (sGacha->Rarity == 1) { // Uncommon + totalMax = sGacha->Great_UncommonMax; + } + else if (sGacha->Rarity == 2) { // Rare + totalMax = sGacha->Great_RareMax; + } + else { // Ultra Rare + totalMax = sGacha->Great_UltraRareMax; + } + + // Check if the provided Number is within the range + if (Number >= totalMax) { + return -1; // Return -1 if out of range + } + + // Loop through the correct array based on rarity + if (sGacha->Rarity == 0) { // Common + for (i = 0; i < totalMax; i++) { + if (SpeciesGreatCommon[i].customNumber == Number) { + return SpeciesGreatCommon[i].species; + } + } + } + else if (sGacha->Rarity == 1) { // Uncommon + for (i = 0; i < totalMax; i++) { + if (SpeciesGreatUncommon[i].customNumber == Number) { + return SpeciesGreatUncommon[i].species; + } + } + } + else if (sGacha->Rarity == 2) { // Rare + for (i = 0; i < totalMax; i++) { + if (SpeciesGreatRare[i].customNumber == Number) { + return SpeciesGreatRare[i].species; + } + } + } + else { // Ultra Rare + for (i = 0; i < totalMax; i++) { + if (SpeciesGreatUltraRare[i].customNumber == Number) { + return SpeciesGreatUltraRare[i].species; + } + } + } + + return -1; // Return -1 if customNumber is not found +} + +u16 getUltraSpeciesbyNum(u16 Number) { + int i; + u16 totalMax = 0; + + // Determine the totalMax based on rarity + if (sGacha->Rarity == 0) { // Common + totalMax = sGacha->Ultra_CommonMax; + } + else if (sGacha->Rarity == 1) { // Uncommon + totalMax = sGacha->Ultra_UncommonMax; + } + else if (sGacha->Rarity == 2) { // Rare + totalMax = sGacha->Ultra_RareMax; + } + else { // Ultra Rare + totalMax = sGacha->Ultra_UltraRareMax; + } + + // Check if the provided Number is within the range + if (Number >= totalMax) { + return -1; // Return -1 if out of range + } + + // Loop through the correct array based on rarity + if (sGacha->Rarity == 0) { // Common + for (i = 0; i < totalMax; i++) { + if (SpeciesUltraCommon[i].customNumber == Number) { + return SpeciesUltraCommon[i].species; + } + } + } + else if (sGacha->Rarity == 1) { // Uncommon + for (i = 0; i < totalMax; i++) { + if (SpeciesUltraUncommon[i].customNumber == Number) { + return SpeciesUltraUncommon[i].species; + } + } + } + else if (sGacha->Rarity == 2) { // Rare + for (i = 0; i < totalMax; i++) { + if (SpeciesUltraRare[i].customNumber == Number) { + return SpeciesUltraRare[i].species; + } + } + } + else { // Ultra Rare + for (i = 0; i < totalMax; i++) { + if (SpeciesUltraUltraRare[i].customNumber == Number) { + return SpeciesUltraUltraRare[i].species; + } + } + } + + return -1; // Return -1 if customNumber is not found +} + +u16 getMasterSpeciesbyNum(u16 Number) { + int i; + u16 totalMax = 0; + + // Determine the totalMax based on rarity + if (sGacha->Rarity == 0) { // Common + totalMax = sGacha->Master_CommonMax; + } + else if (sGacha->Rarity == 1) { // Uncommon + totalMax = sGacha->Master_UncommonMax; + } + else if (sGacha->Rarity == 2) { // Rare + totalMax = sGacha->Master_RareMax; + } + else { // Ultra Rare + totalMax = sGacha->Master_UltraRareMax; + } + + // Check if the provided Number is within the range + if (Number >= totalMax) { + return -1; // Return -1 if out of range + } + + // Loop through the correct array based on rarity + if (sGacha->Rarity == 0) { // Common + for (i = 0; i < totalMax; i++) { + if (SpeciesMasterCommon[i].customNumber == Number) { + return SpeciesMasterCommon[i].species; + } + } + } + else if (sGacha->Rarity == 1) { // Uncommon + for (i = 0; i < totalMax; i++) { + if (SpeciesMasterUncommon[i].customNumber == Number) { + return SpeciesMasterUncommon[i].species; + } + } + } + else if (sGacha->Rarity == 2) { // Rare + for (i = 0; i < totalMax; i++) { + if (SpeciesMasterRare[i].customNumber == Number) { + return SpeciesMasterRare[i].species; + } + } + } + else { // Ultra Rare + for (i = 0; i < totalMax; i++) { + if (SpeciesMasterUltraRare[i].customNumber == Number) { + return SpeciesMasterUltraRare[i].species; + } + } + } + + return -1; // Return -1 if customNumber is not found +} + +u16 GetPokemon(u16 n) { + int num; + if (sGacha->GachaId == 1) { // Basic + num = getBasicSpeciesbyNum(n); + } + else if (sGacha->GachaId == 2) { // Great + num = getGreatSpeciesbyNum(n); + } + else if (sGacha->GachaId == 3) { // Ultra + num = getUltraSpeciesbyNum(n); + } + else { // Master + num = getMasterSpeciesbyNum(n); + } + + if (num == -1) { + return 0; // Or another default value indicating not found. + } + return num; +} + +u8 CheckIfOwned(u16 species) +{ + u16 nationalDexNo; + nationalDexNo = SpeciesToNationalPokedexNum(species); + return GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT); +} + +static void GetPokemonOwned(void) +{ + u16 species; + int nationalDexNo; + int i; + + sGacha->Basic_Common_Owned = 0; + sGacha->Basic_Uncommon_Owned = 0; + sGacha->Basic_Rare_Owned = 0; + sGacha->Basic_UltraRare_Owned = 0; + sGacha->Great_Common_Owned = 0; + sGacha->Great_Uncommon_Owned = 0; + sGacha->Great_Rare_Owned = 0; + sGacha->Great_UltraRare_Owned = 0; + sGacha->Ultra_Common_Owned = 0; + sGacha->Ultra_Uncommon_Owned = 0; + sGacha->Ultra_Rare_Owned = 0; + sGacha->Ultra_UltraRare_Owned = 0; + sGacha->Master_Common_Owned = 0; + sGacha->Master_Uncommon_Owned = 0; + sGacha->Master_Rare_Owned = 0; + sGacha->Master_UltraRare_Owned = 0; + + // Basic + for (i = 0; i < sGacha->Basic_CommonMax; i++) { + species = SpeciesBasicCommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Basic_Common_Owned = (sGacha->Basic_Common_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Basic_UncommonMax; i++) { + species = SpeciesBasicUncommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Basic_Uncommon_Owned = (sGacha->Basic_Uncommon_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Basic_RareMax; i++) { + species = SpeciesBasicRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Basic_Rare_Owned = (sGacha->Basic_Rare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Basic_UltraRareMax; i++) { + species = SpeciesBasicUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Basic_UltraRare_Owned = (sGacha->Basic_UltraRare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + sGacha->Basic_Total_Owned = (sGacha->Basic_Common_Owned + sGacha->Basic_Uncommon_Owned + sGacha->Basic_Rare_Owned + sGacha->Basic_UltraRare_Owned); + + // Great + for (i = 0; i < sGacha->Great_CommonMax; i++) { + species = SpeciesGreatCommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Great_Common_Owned = (sGacha->Great_Common_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Great_UncommonMax; i++) { + species = SpeciesGreatUncommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Great_Uncommon_Owned = (sGacha->Great_Uncommon_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Great_RareMax; i++) { + species = SpeciesGreatRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Great_Rare_Owned = (sGacha->Great_Rare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Great_UltraRareMax; i++) { + species = SpeciesGreatUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Great_UltraRare_Owned = (sGacha->Great_UltraRare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + sGacha->Great_Total_Owned = (sGacha->Great_Common_Owned + sGacha->Great_Uncommon_Owned + sGacha->Great_Rare_Owned + sGacha->Great_UltraRare_Owned); + + // Ultra + for (i = 0; i < sGacha->Ultra_CommonMax; i++) { + species = SpeciesUltraCommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Ultra_Common_Owned = (sGacha->Ultra_Common_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Ultra_UncommonMax; i++) { + species = SpeciesUltraUncommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Ultra_Uncommon_Owned = (sGacha->Ultra_Uncommon_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Ultra_RareMax; i++) { + species = SpeciesUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Ultra_Rare_Owned = (sGacha->Ultra_Rare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Ultra_UltraRareMax; i++) { + species = SpeciesUltraUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Ultra_UltraRare_Owned = (sGacha->Ultra_UltraRare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + sGacha->Ultra_Total_Owned = (sGacha->Ultra_Common_Owned + sGacha->Ultra_Uncommon_Owned + sGacha->Ultra_Rare_Owned + sGacha->Ultra_UltraRare_Owned); + + // Master + for (i = 0; i < sGacha->Master_CommonMax; i++) { + species = SpeciesMasterCommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Master_Common_Owned = (sGacha->Master_Common_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Master_UncommonMax; i++) { + species = SpeciesMasterUncommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Master_Uncommon_Owned = (sGacha->Master_Uncommon_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Master_RareMax; i++) { + species = SpeciesMasterRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Master_Rare_Owned = (sGacha->Master_Rare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < sGacha->Master_UltraRareMax; i++) { + species = SpeciesMasterUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->Master_UltraRare_Owned = (sGacha->Master_UltraRare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + sGacha->Master_Total_Owned = (sGacha->Master_Common_Owned + sGacha->Master_Uncommon_Owned + sGacha->Master_Rare_Owned + sGacha->Master_UltraRare_Owned); +} + +u8 CalculateChanceForCategory(u16 owned, u16 available, u8 baseChance, u16 wager) +{ + u8 newChance; + u8 ownedPercentage; + u8 wagerMultiplier; + u8 boostedChance; + u16 minWager; + + // Determine minimum wager based on sGacha->GachaId + switch (sGacha->GachaId) + { + case 1: + minWager = 50; + break; + case 2: + minWager = 250; + break; + case 3: + minWager = 1000; + break; + case 4: + minWager = 4500; + break; + default: + minWager = 0; // Should never be 0, but failsafe + break; + } + + // If available Pokémon is 0, there is no chance + if (available == 0) + return 0; + + // Calculate the reduction in chance based on the proportion of owned Pokémon + ownedPercentage = (owned * 100) / available; + newChance = baseChance * (100 - ownedPercentage) / 100; + + // Ensure the wager is within the valid range + if (wager >= minWager && owned < available) + { + // Normalize wager to a 0-100 range where [minWager - 9999] -> [0 - 100] + wagerMultiplier = ((wager - minWager) * 100) / (9999 - minWager); + + // Boost the chance based on the wager multiplier, but cap it by baseChance + boostedChance = newChance + ((baseChance - newChance) * wagerMultiplier) / 100; + + // Ensure the chance doesn't exceed baseChance + newChance = (boostedChance > baseChance) ? baseChance : boostedChance; + } + + return newChance; +} + +// Function to determine if the player gets a new Pokémon, and the rarity +void DeterminePokemonRarityAndNewStatus(void) +{ + u16 species; + u16 totalNotOwned; + u8 totalOwned; + u16 totalMax; + u8 commonChance; + u8 uncommonChance; + u8 rareChance; + u8 ultraRareChance; + u16 newPokemonChance; + u16 randomValue; + u32 attempts = 1000; + + commonChance = sGacha->commonChance; + uncommonChance = sGacha->uncommonChance; + rareChance = sGacha->rareChance; + ultraRareChance = sGacha->ultraRareChance; + + while (1) { + randomValue = (Random() % 100); // Generate random value between 0 and 100 + + // Determine Rarity based on the chances + if (randomValue < 50) { + sGacha->Rarity = 0; // Common + } + else if (randomValue < 80) { + sGacha->Rarity = 1; // Uncommon + } + else if (randomValue < 95) { + sGacha->Rarity = 2; // Rare + } + else { + sGacha->Rarity = 3; // Ultra Rare + } + + // Get the number of available and owned Pokémon based on rarity + if (sGacha->GachaId == 1) { // Basic + if (sGacha->Rarity == 0) { // Common + totalOwned = sGacha->Basic_Common_Owned; + totalMax = sGacha->Basic_CommonMax; + } + else if (sGacha->Rarity == 1) { // Uncommon + totalOwned = sGacha->Basic_Uncommon_Owned; + totalMax = sGacha->Basic_UncommonMax; + } + else if (sGacha->Rarity == 2) { // Rare + totalOwned = sGacha->Basic_Rare_Owned; + totalMax = sGacha->Basic_RareMax; + } + else { // Ultra Rare + totalOwned = sGacha->Basic_UltraRare_Owned; + totalMax = sGacha->Basic_UltraRareMax; + } + sGacha->Temp_Total = totalMax; + } + else if (sGacha->GachaId == 2) { // Great + if (sGacha->Rarity == 0) { // Common + totalOwned = sGacha->Great_Common_Owned; + totalMax = sGacha->Great_CommonMax; + } + else if (sGacha->Rarity == 1) { // Uncommon + totalOwned = sGacha->Great_Uncommon_Owned; + totalMax = sGacha->Great_UncommonMax; + } + else if (sGacha->Rarity == 2) { // Rare + totalOwned = sGacha->Great_Rare_Owned; + totalMax = sGacha->Great_RareMax; + } + else { // Ultra Rare + totalOwned = sGacha->Great_UltraRare_Owned; + totalMax = sGacha->Great_UltraRareMax; + } + sGacha->Temp_Total = totalMax; + } + else if (sGacha->GachaId == 3) { // Ultra + if (sGacha->Rarity == 0) { // Common + totalOwned = sGacha->Ultra_Common_Owned; + totalMax = sGacha->Ultra_CommonMax; + } + else if (sGacha->Rarity == 1) { // Uncommon + totalOwned = sGacha->Ultra_Uncommon_Owned; + totalMax = sGacha->Ultra_UncommonMax; + } + else if (sGacha->Rarity == 2) { // Rare + totalOwned = sGacha->Ultra_Rare_Owned; + totalMax = sGacha->Ultra_RareMax; + } + else { // Ultra Rare + totalOwned = sGacha->Ultra_UltraRare_Owned; + totalMax = sGacha->Ultra_UltraRareMax; + } + sGacha->Temp_Total = totalMax; + } + else { // Master + if (sGacha->Rarity == 0) { // Common + totalOwned = sGacha->Master_Common_Owned; + totalMax = sGacha->Master_CommonMax; + } + else if (sGacha->Rarity == 1) { // Uncommon + totalOwned = sGacha->Master_Uncommon_Owned; + totalMax = sGacha->Master_UncommonMax; + } + else if (sGacha->Rarity == 2) { // Rare + totalOwned = sGacha->Master_Rare_Owned; + totalMax = sGacha->Master_RareMax; + } + else { // Ultra Rare + totalOwned = sGacha->Master_UltraRare_Owned; + totalMax = sGacha->Master_UltraRareMax; + } + sGacha->Temp_Total = totalMax; + } + // Repeat similar logic for Great, Ultra, Master, etc. + // Same logic for GachaId == 2, 3, and others + + // Calculate the total number of Pokémon the player doesn't own + totalNotOwned = totalMax - totalOwned; + + if (totalNotOwned <= 0) { + // If all Pokémon of the selected rarity are owned, restart the process (reroll) + continue; // This will make the loop restart from the beginning + } + + // Generate a random value for the chances + randomValue = Random() % 100; // Generate random value between 0-99 + + // Check if we should get a new Pokémon based on the odds + if (sGacha->Odds >= randomValue) { + // Loop until a new (not owned) Pokémon is found + do { + newPokemonChance = (Random() % totalMax); // Random pull from the available pool + species = GetPokemon(newPokemonChance); // Get the Pokémon species based on the random value + attempts--; + if (attempts < 1) { + attempts = 1000; + randomValue = (Random() % 100); // Generate random value between 0 and 100 + + // Determine Rarity based on the chances + if (randomValue < 50) { + sGacha->Rarity = 0; // Common + } + else if (randomValue < 80) { + sGacha->Rarity = 1; // Uncommon + } + else if (randomValue < 95) { + sGacha->Rarity = 2; // Rare + } + else { + sGacha->Rarity = 3; // Ultra Rare + } + } + // If the Pokémon is not owned (CheckIfOwned returns 0), we found a new Pokémon + } while (CheckIfOwned(species) == 1); // Continue if owned (CheckIfOwned returns 1) + + // If we've broken out of the loop, we have a new Pokémon + sGacha->IsNewPokemon = 1; // Mark as a new Pokémon + sGacha->CalculatedSpecies = species; // Store the species of the new Pokémon + break; // Exit the loop after finding a new Pokémon + } + else { + // Loop until an owned Pokémon is found + do { + newPokemonChance = (Random() % totalMax); // Random pull from the available pool + species = GetPokemon(newPokemonChance); // Get the Pokémon species based on the random value + attempts--; + if (attempts < 1) { + attempts = 1000; + randomValue = (Random() % 100); // Generate random value between 0 and 100 + + // Determine Rarity based on the chances + if (randomValue < 50) { + sGacha->Rarity = 0; // Common + } + else if (randomValue < 80) { + sGacha->Rarity = 1; // Uncommon + } + else if (randomValue < 95) { + sGacha->Rarity = 2; // Rare + } + else { + sGacha->Rarity = 3; // Ultra Rare + } + } + + // If the Pokémon is owned (CheckIfOwned returns 1), we have an owned Pokémon + } while (CheckIfOwned(species) == 0); // Continue if not owned (CheckIfOwned returns 0) + + // If we've broken out of the loop, we have an owned Pokémon + sGacha->IsNewPokemon = 0; // Mark as an owned Pokémon + sGacha->CalculatedSpecies = species; // Store the species of the owned Pokémon + break; // Exit the loop after finding an owned Pokémon + } + } +} + +static void CalculatePullOdds(void) +{ + u16 totalCommonOwned; + u16 totalCommonAvailable; + u16 totalUncommonOwned; + u16 totalUncommonAvailable; + u16 totalRareOwned; + u16 totalRareAvailable; + u16 totalUltraRareOwned; + u16 totalUltraRareAvailable; + u16 wager; + u8 commonChance; + u8 uncommonChance; + u8 rareChance; + u8 ultraRareChance; + u8 totalChance; + + // Constants + const u8 COMMON_ODDS = 50; // 50% chance for common + const u8 UNCOMMON_ODDS = 30; // 30% chance for uncommon + const u8 RARE_ODDS = 15; // 15% chance for rare + const u8 ULTRA_RARE_ODDS = 5; // 5% chance for ultra rare + + if (sGacha->GachaId == 1) // Basic + { + // Variables to store the total numbers of owned and available Pokemon + totalCommonOwned = sGacha->Basic_Common_Owned; + totalCommonAvailable = sGacha->Basic_CommonMax; + + totalUncommonOwned = sGacha->Basic_Uncommon_Owned; + totalUncommonAvailable = sGacha->Basic_UncommonMax; + + totalRareOwned = sGacha->Basic_Rare_Owned; + totalRareAvailable = sGacha->Basic_RareMax; + + totalUltraRareOwned = sGacha->Basic_UltraRare_Owned; + totalUltraRareAvailable = sGacha->Basic_UltraRareMax; + + wager = sGacha->wager; // Player's wager (0-9999) + + // Calculate the chance for each category + commonChance = CalculateChanceForCategory(totalCommonOwned, totalCommonAvailable, COMMON_ODDS, wager); + uncommonChance = CalculateChanceForCategory(totalUncommonOwned, totalUncommonAvailable, UNCOMMON_ODDS, wager); + rareChance = CalculateChanceForCategory(totalRareOwned, totalRareAvailable, RARE_ODDS, wager); + ultraRareChance = CalculateChanceForCategory(totalUltraRareOwned, totalUltraRareAvailable, ULTRA_RARE_ODDS, wager); + } + else if (sGacha->GachaId == 2) // Great + { + // Variables to store the total numbers of owned and available Pokemon + totalCommonOwned = sGacha->Great_Common_Owned; + totalCommonAvailable = sGacha->Great_CommonMax; + + totalUncommonOwned = sGacha->Great_Uncommon_Owned; + totalUncommonAvailable = sGacha->Great_UncommonMax; + + totalRareOwned = sGacha->Great_Rare_Owned; + totalRareAvailable = sGacha->Great_RareMax; + + totalUltraRareOwned = sGacha->Great_UltraRare_Owned; + totalUltraRareAvailable = sGacha->Great_UltraRareMax; + + wager = sGacha->wager; // Player's wager (0-9999) + + // Calculate the chance for each category + commonChance = CalculateChanceForCategory(totalCommonOwned, totalCommonAvailable, COMMON_ODDS, wager); + uncommonChance = CalculateChanceForCategory(totalUncommonOwned, totalUncommonAvailable, UNCOMMON_ODDS, wager); + rareChance = CalculateChanceForCategory(totalRareOwned, totalRareAvailable, RARE_ODDS, wager); + ultraRareChance = CalculateChanceForCategory(totalUltraRareOwned, totalUltraRareAvailable, ULTRA_RARE_ODDS, wager); + } + else if (sGacha->GachaId == 3) // Ultra + { + // Variables to store the total numbers of owned and available Pokemon + totalCommonOwned = sGacha->Ultra_Common_Owned; + totalCommonAvailable = sGacha->Ultra_CommonMax; + + totalUncommonOwned = sGacha->Ultra_Uncommon_Owned; + totalUncommonAvailable = sGacha->Ultra_UncommonMax; + + totalRareOwned = sGacha->Ultra_Rare_Owned; + totalRareAvailable = sGacha->Ultra_RareMax; + + totalUltraRareOwned = sGacha->Ultra_UltraRare_Owned; + totalUltraRareAvailable = sGacha->Ultra_UltraRareMax; + + wager = sGacha->wager; // Player's wager (0-9999) + + // Calculate the chance for each category + commonChance = CalculateChanceForCategory(totalCommonOwned, totalCommonAvailable, COMMON_ODDS, wager); + uncommonChance = CalculateChanceForCategory(totalUncommonOwned, totalUncommonAvailable, UNCOMMON_ODDS, wager); + rareChance = CalculateChanceForCategory(totalRareOwned, totalRareAvailable, RARE_ODDS, wager); + ultraRareChance = CalculateChanceForCategory(totalUltraRareOwned, totalUltraRareAvailable, ULTRA_RARE_ODDS, wager); + } + else // Master + { + // Variables to store the total numbers of owned and available Pokemon + totalCommonOwned = sGacha->Master_Common_Owned; + totalCommonAvailable = sGacha->Master_CommonMax; + + totalUncommonOwned = sGacha->Master_Uncommon_Owned; + totalUncommonAvailable = sGacha->Master_UncommonMax; + + totalRareOwned = sGacha->Master_Rare_Owned; + totalRareAvailable = sGacha->Master_RareMax; + + totalUltraRareOwned = sGacha->Master_UltraRare_Owned; + totalUltraRareAvailable = sGacha->Master_UltraRareMax; + + wager = sGacha->wager; // Player's wager (0-9999) + + // Calculate the chance for each category + commonChance = CalculateChanceForCategory(totalCommonOwned, totalCommonAvailable, COMMON_ODDS, wager); + uncommonChance = CalculateChanceForCategory(totalUncommonOwned, totalUncommonAvailable, UNCOMMON_ODDS, wager); + rareChance = CalculateChanceForCategory(totalRareOwned, totalRareAvailable, RARE_ODDS, wager); + ultraRareChance = CalculateChanceForCategory(totalUltraRareOwned, totalUltraRareAvailable, ULTRA_RARE_ODDS, wager); + } + + sGacha->commonChance = commonChance; + sGacha->uncommonChance = uncommonChance; + sGacha->rareChance = rareChance; + sGacha->ultraRareChance = ultraRareChance; + + // Final Odds as a sum of chances + + totalChance = commonChance + uncommonChance + rareChance + ultraRareChance; + if (totalChance <= 100) { + sGacha->Odds = commonChance + uncommonChance + rareChance + ultraRareChance; + } + else { + sGacha->Odds = 100; + } +} + +static void AButton(void) +{ + if (sGacha->Trigger == 1) + { + sGacha->state = STATE_INIT_A; + } + else + { + PlaySE(SE_FAILURE); + } +} + +static void UpdateCursorPosition(s16 x) +{ + // Update cursor position based on X coordinate + if (x == 231) { + sGacha->cursorPosition = 3; // Ones + } else if (x == 223) { + sGacha->cursorPosition = 2; // Tens + } else if (x == 215) { + sGacha->cursorPosition = 1; // Hundreds + } else { + sGacha->cursorPosition = 0; // Thousands + } +} + +static void UpdateWagerDigit(int direction) +{ + u8 place; + u16 tempwager; + u8 wagerDigits[4]; + u16 newWager; + u16 d; + int i; + u16 maxWager; + + place = sGacha->cursorPosition; + d = 1000; + tempwager = sGacha->wager; + + for (i = 0; i < 4; i++) + { + if (tempwager >= d) { + wagerDigits[i] = tempwager / d; + } + else { + wagerDigits[i] = 0; + } + + tempwager = tempwager % d; + d = d / 10; + } + maxWager = GetCoins(); // Maximum wager is the current coins + + // wagerDigits[0] = Thousands place + // wagerDigits[1] = Hundreds place + // wagerDigits[2] = Tens place + // wagerDigits[3] = Ones place + + if (direction == 0) { // Up + if (wagerDigits[place] == 9) { + // Set the current digit to 0 + wagerDigits[place] = 0; + if (place > 0) { + place--; // Move to the next digit on the left + } + } + + // Otherwise, simply increase the digit by 1 + wagerDigits[place]++; + PlaySE(SE_SELECT); + + // Ensure the new wager doesn't exceed max available coins + newWager = (wagerDigits[0] * 1000) + (wagerDigits[1] * 100) + (wagerDigits[2] * 10) + wagerDigits[3]; + if (newWager > maxWager) { + // If the new wager exceeds available coins, revert back + newWager = GetCoins(); + } + // Update the wager if it's within the limit + sGacha->wager = newWager; + } + else if (direction == 2) { // Down + if (wagerDigits[place] > 0) { + // Decrease the digit by 1 + wagerDigits[place]--; + sGacha->wager = (wagerDigits[0] * 1000) + (wagerDigits[1] * 100) + (wagerDigits[2] * 10) + wagerDigits[3]; + PlaySE(SE_SELECT); + } + } + + // Update sprite animation based on the new value + gSprites[sGacha->ArrowsSpriteId].animNum = (wagerDigits[place] == 0) ? 1 : 0; + SetPlayerDigits(sGacha->wager); // Update the displayed wager + if (sGacha->GachaId == 1) + { + if (sGacha->wager > 49) + { + ResetMessage(); + CalculatePullOdds(); + sGacha->Trigger = 1; + //gSprites[sGacha->CTAspriteId].animPaused = FALSE; + gSprites[sGacha->CTAspriteId].animNum = 1; // On + ShowMessage(); + } + else + { + ResetMessage(); + //CalculatePullOdds(); + sGacha->Odds = 0; + sGacha->Trigger = 0; + gSprites[sGacha->CTAspriteId].animNum = 0; // Off + //gSprites[sGacha->CTAspriteId].animPaused = TRUE; + ShowMessage(); + } + } + else if (sGacha->GachaId == 2) + { + if (sGacha->wager > 249) + { + ResetMessage(); + CalculatePullOdds(); + sGacha->Trigger = 1; + //gSprites[sGacha->CTAspriteId].animPaused = FALSE; + gSprites[sGacha->CTAspriteId].animNum = 1; // On + ShowMessage(); + } + else + { + ResetMessage(); + //CalculatePullOdds(); + sGacha->Odds = 0; + sGacha->Trigger = 0; + gSprites[sGacha->CTAspriteId].animNum = 0; // Off + //gSprites[sGacha->CTAspriteId].animPaused = TRUE; + ShowMessage(); + } + } + else if (sGacha->GachaId == 3) + { + if (sGacha->wager > 999) + { + ResetMessage(); + CalculatePullOdds(); + sGacha->Trigger = 1; + //gSprites[sGacha->CTAspriteId].animPaused = FALSE; + gSprites[sGacha->CTAspriteId].animNum = 1; // On + ShowMessage(); + } + else + { + ResetMessage(); + //CalculatePullOdds(); + sGacha->Odds = 0; + sGacha->Trigger = 0; + gSprites[sGacha->CTAspriteId].animNum = 0; // Off + //gSprites[sGacha->CTAspriteId].animPaused = TRUE; + ShowMessage(); + } + } + else + { + if (sGacha->wager > 4499) + { + ResetMessage(); + CalculatePullOdds(); + sGacha->Trigger = 1; + //gSprites[sGacha->CTAspriteId].animPaused = FALSE; + gSprites[sGacha->CTAspriteId].animNum = 1; // On + ShowMessage(); + } + else + { + ResetMessage(); + //CalculatePullOdds(); + sGacha->Odds = 0; + sGacha->Trigger = 0; + gSprites[sGacha->CTAspriteId].animNum = 0; // Off + //gSprites[sGacha->CTAspriteId].animPaused = TRUE; + ShowMessage(); + } + } +} + +static void MoveCursor(int direction) +{ + struct Sprite *cursorSprite = &gSprites[sGacha->ArrowsSpriteId]; + int curX = cursorSprite->x; + int destX = curX; + u16 num = sGacha->wager; + + // Move cursor left or right (X axis) + if (direction == 1 || direction == 3) { // Right or Left + if (direction == 1 && curX < 231) { + destX = curX + 8; + PlaySE(SE_SELECT); + } else if (direction == 3 && curX > 207) { + destX = curX - 8; + PlaySE(SE_SELECT); + } + + cursorSprite->x = destX; + UpdateCursorPosition(gSprites[sGacha->ArrowsSpriteId].x); // Update cursor position based on X coordinate + } + + // Move cursor up or down (change wager digit) + else if (direction == 0 || direction == 2) { // Up or Down + UpdateWagerDigit(direction); // Update the corresponding digit + } +} + +static void ExitGacha(void) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + FREE_AND_SET_NULL(sGacha); + FREE_AND_SET_NULL(sTradeAnim); + } +} + +static void EggHatchPrintMessage(u8 windowId, u8 *string, u8 x, u8 y, u8 speed) +{ + FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); + sGacha->textColor[0] = 0; + sGacha->textColor[1] = 5; + sGacha->textColor[2] = 6; + AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 0, 0, sGacha->textColor, speed, string); +} + +static void HandleInput_GachaComplete(void) +{ + if (IsFanfareTaskInactive()) + { + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + gSpecialVar_Result = 1; + sGacha->state = GACHA_STATE_START_EXIT; + } + } +} + +static void HandleInput(void) +{ + if (sGacha->Input == 0) + { + if (JOY_NEW(A_BUTTON)) + { + AButton(); + } + else if (JOY_NEW(B_BUTTON)) + { + if (sGacha->exitToggle == 0) { + sGacha->state = GACHA_STATE_START_EXIT; + } + } + else if (JOY_NEW(DPAD_UP)) + { + MoveCursor(0); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + MoveCursor(1); + } + else if (JOY_NEW(DPAD_DOWN)) + { + MoveCursor(2); + } + else if (JOY_NEW(DPAD_LEFT)) + { + MoveCursor(3); + } + } +} + +u8 GenerateRandomIV(void) { + return (Random() % 17) + 15; // Random value between 15 and 31 +} + +static void Fade(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sGacha->state = STATE_POKEBALL_INIT; +} + +static void RemoveGarbage(void) +{ + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[0]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[1]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[2]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[3]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[0]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[1]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[2]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[3]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->KnobSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->DigitalTextSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->LotteryJPNspriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditMenu1Id]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditMenu2Id]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonOneSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonTwoSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonThreeSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->ArrowsSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CTAspriteId]); + ResetMessage(); + sTradeAnim->bg1vofs = 0; + sTradeAnim->bg1hofs = 0; + + sTradeAnim->bg2vofs = 0; + sTradeAnim->bg2hofs = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | + BGCNT_CHARBASE(1) | + BGCNT_16COLOR | + BGCNT_SCREENBASE(18) | + BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, BG_PLTT_ID(1), 3 * PLTT_SIZE_4BPP); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gTrade_Tilemap, (void *) BG_SCREEN_ADDR(18), 0x1000); + + gPaletteFade.bufferTransferDisabled = TRUE; + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(GachaVBlankCallback); +} + +static void GachaSetMonNickname(void) +{ + SetMonData(&sGacha->GachaMon, MON_DATA_NICKNAME, gStringVar3); + FreeMonSpritesGfx(); + sGacha->state = GACHA_STATE_START_EXIT; +} + +void ShowFinalMessage(void) +{ + struct WindowTemplate template; + + SetWindowTemplateFields(&template, 1, 2, 15, 26, 4, 0xF, 0x194); + + sTextWindowId = AddWindow(&template); + FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sTextWindowId); + LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); + DrawStdWindowFrame(sTextWindowId, FALSE); + StringCopy(gStringVar1, GetSpeciesName(sGacha->CalculatedSpecies)); + StringExpandPlaceholders(gStringVar4, sText_FromGacha); + AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, gStringVar4, 0, 1, 0, 0); + CopyWindowToVram(sTextWindowId, 3); +} + + +static void GachaMain(u8 taskId) +{ + u16 species; + u8 fixedIV; + u8 hasFixedPersonality = TRUE; + u32 fixedPersonality; + u8 trainerId[TRAINER_ID_LENGTH] = {0}; // Assuming this is set elsewhere + u32 playerId = GetTrainerId(trainerId); + u8 otIdType = OT_ID_PLAYER_ID; + u32 fixedOtId = playerId; + u16 level; + u8 check; + u8 gender; + u32 personality; + u8 party; + int pos = 0; + //struct Pokemon *mon = NULL; + struct Pokemon mon; + + pos = B_POSITION_OPPONENT_RIGHT; + //struct SpriteSheet s; + + check = 0; + + if (FlagGet(FLAG_IS_CHAMPION) == TRUE) + { + level = (Random() % 30) + 40; + } + else if (FlagGet(FLAG_BADGE08_GET) == TRUE) + { + level = (Random() % 15) + 36; + } + else if (FlagGet(FLAG_BADGE07_GET) == TRUE) + { + level = (Random() % 9) + 28; + } + else if (FlagGet(FLAG_BADGE06_GET) == TRUE) + { + level = (Random() % 10) + 21; + } + else if (FlagGet(FLAG_BADGE05_GET) == TRUE) + { + level = (Random() % 10) + 19; + } + else if (FlagGet(FLAG_BADGE04_GET) == TRUE) + { + level = (Random() % 6) + 18; + } + else if (FlagGet(FLAG_BADGE03_GET) == TRUE) + { + level = (Random() % 8) + 13; + } + else if (FlagGet(FLAG_BADGE02_GET) == TRUE) + { + level = (Random() % 6) + 7; + } + else if (FlagGet(FLAG_BADGE01_GET) == TRUE) + { + level = (Random() % 7) + 5; + } + else + { + level = (Random() % 5) + 2; + } + + switch (sGacha->state) + { + case GACHA_STATE_INIT: + if (!gPaletteFade.active) { + sGacha->state = GACHA_STATE_PROCESS_INPUT; + } + break; + case GACHA_STATE_PROCESS_INPUT: + HandleInput(); + break; + case GACHA_STATE_COMPLETED_WAIT_FOR_SOUND: + if (IsSEPlaying()) + break; + + PlayFanfare(MUS_SLOTS_WIN); + sGacha->state = GACHA_STATE_PROCESS_COMPLETED_INPUT; + case GACHA_STATE_PROCESS_COMPLETED_INPUT: + HandleInput_GachaComplete(); + break; + case GACHA_STATE_START_EXIT: + StartExitGacha(); + break; + case GACHA_STATE_EXIT: + ExitGacha(); + break; + case STATE_INIT_A: // Initial state + sGacha->Input = 1; + DeterminePokemonRarityAndNewStatus(); + PlaySE(SE_SHOP); + RemoveCoins(sGacha->wager); + sGacha->wager = 0; + ResetMessage(); + gSprites[sGacha->CTAspriteId].animNum = 0; + gSprites[sGacha->ArrowsSpriteId].invisible = TRUE; + SetCreditDigits(GetCoins()); + SetPlayerDigits(sGacha->wager); + sGacha->waitTimer = 30; // Set the timer + sGacha->state = STATE_TIMER_1; // Move to next state + break; + + case STATE_TIMER_1: // Waiting for timer to expire + if (sGacha->waitTimer > 0) { + sGacha->waitTimer--; // Decrease timer + } else { + sGacha->state = STATE_TWIST; // Transition to next state when the timer is done + } + break; + + case STATE_TWIST: // After timer expires, proceed with animation + PlaySE(SE_VEND); + gSprites[sGacha->KnobSpriteId].animNum = 1; + sGacha->state = STATE_TIMER_2; // Move to the next state after animation starts + break; + + case STATE_TIMER_2: // Handle the next part of the delay or action + // (You can add another waiting period if needed) + sGacha->waitTimer = 50; // Set the next timer + sGacha->state = STATE_INIT_GIVE; // Move to next state + break; + + case STATE_INIT_GIVE: // Final state + if (sGacha->waitTimer > 0) { + sGacha->waitTimer--; // Decrease timer + } else { + sGacha->state = STATE_SHAKE_1; // Final action after timer + } + break; + + case STATE_SHAKE_1: // After timer expires, proceed with animation + PlaySE(SE_BREAKABLE_DOOR); + Shake1(); + sGacha->state = STATE_TIMER_3; // Move to the next state after animation starts + break; + + case STATE_TIMER_3: // Handle the next part of the delay or action + // (You can add another waiting period if needed) + sGacha->waitTimer = 3; // Set the next timer + sGacha->state = STATE_INIT_SHAKE_2; // Move to next state + break; + + case STATE_INIT_SHAKE_2: // Final state + if (sGacha->waitTimer > 0) { + sGacha->waitTimer--; // Decrease timer + } else { + sGacha->state = STATE_SHAKE_2; // Final action after timer + } + break; + case STATE_SHAKE_2: // After timer expires, proceed with animation + //PlaySE(SE_BREAKABLE_DOOR); + Shake2(); + sGacha->state = STATE_TIMER_4; // Move to the next state after animation starts + break; + + case STATE_TIMER_4: // Handle the next part of the delay or action + // (You can add another waiting period if needed) + sGacha->waitTimer = 3; // Set the next timer + sGacha->state = STATE_INIT_SHAKE_3; // Move to next state + break; + + case STATE_INIT_SHAKE_3: // Final state + if (sGacha->waitTimer > 0) { + sGacha->waitTimer--; // Decrease timer + } else { + BGSetup(); + sGacha->waitTimer = 20; + sGacha->state = STATE_TIMER_5; // Final action after timer + } + break; + + case STATE_TIMER_5: // After timer expires, proceed with animation + if (sGacha->waitTimer > 0) { + sGacha->waitTimer--; // Decrease timer + } else { + sGacha->state = STATE_GIVE; // Move to the next state after animation starts + } + break; + + case STATE_GIVE: + StartTradeScreen(); + break; + case STATE_FADE: + if (!gPaletteFade.active) { + BGRed(); + sGacha->state = STATE_POKEBALL_INIT; } + break; + case STATE_POKEBALL_INIT: + RemoveGarbage(); + sGacha->state++; + break; + case STATE_POKEBALL_PROCESS: + if (!gPaletteFade.active) { + sGacha->state = STATE_POKEBALL_ARRIVE; } + break; + case STATE_POKEBALL_ARRIVE: + LoadSpriteSheet(&sPokeBallSpriteSheet); + LoadSpritePalette(&sPokeBallSpritePalette); + sGacha->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); + gSprites[sGacha->bouncingPokeballSpriteId].data[3] = 74; + gSprites[sGacha->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; + StartSpriteAnim(&gSprites[sGacha->bouncingPokeballSpriteId], 1); + StartSpriteAffineAnim(&gSprites[sGacha->bouncingPokeballSpriteId], 2); + BlendPalettes(1 << (16 + gSprites[sGacha->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); + sGacha->state++; + sGacha->timer = 0; + break; + case STATE_FADE_POKEBALL_TO_NORMAL: + BeginNormalPaletteFade(1 << (16 + gSprites[sGacha->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sGacha->state++; + break; + case STATE_POKEBALL_ARRIVE_WAIT: + if (gSprites[sGacha->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) + { CreateMon(&mon, sGacha->CalculatedSpecies, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + party = GiveMonToPlayer(&mon); + GetSetPokedexFlag(sGacha->CalculatedSpecies, FLAG_SET_SEEN); + HandleSetPokedexFlag(sGacha->CalculatedSpecies, FLAG_SET_CAUGHT, GetMonData(&mon, MON_DATA_PERSONALITY)); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(sGacha->CalculatedSpecies, IsMonShiny(&mon), GetMonData(&mon, MON_DATA_PERSONALITY)), OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); + SetMultiuseSpriteTemplateToPokemon(sGacha->CalculatedSpecies, pos); + sGacha->monSpriteId = CreateMonPicSprite_Affine(sGacha->CalculatedSpecies, SHINY_ODDS, 0, MON_PIC_AFFINE_FRONT, 120, 60, 14, TAG_NONE); + gSprites[sGacha->monSpriteId].callback = SpriteCB_Null; + gSprites[sGacha->monSpriteId].oam.priority = 0; + gSprites[sGacha->monSpriteId].invisible = TRUE; + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->spritesGfx[pos], + sGacha->CalculatedSpecies, + GetMonData(&mon, MON_DATA_PERSONALITY)); + sGacha->state++; + } + break; + case STATE_SHOW_NEW_MON: + + gSprites[sGacha->monSpriteId].x = 120; + gSprites[sGacha->monSpriteId].y = gSpeciesInfo[sGacha->CalculatedSpecies].frontPicYOffset + 56; + gSprites[sGacha->monSpriteId].x2 = 0; + gSprites[sGacha->monSpriteId].y2 = 0; + StartSpriteAnim(&gSprites[sGacha->monSpriteId], 0); + CreatePokeballSpriteToReleaseMon(sGacha->monSpriteId, gSprites[sGacha->monSpriteId].oam.paletteNum, 120, 84, 2, 1, 20, PALETTES_BG | (0xF << 16), sGacha->CalculatedSpecies); + FreeSpriteOamMatrix(&gSprites[sGacha->bouncingPokeballSpriteId]); + DestroySprite(&gSprites[sGacha->bouncingPokeballSpriteId]); + sGacha->state++; + break; + case STATE_NEW_MON_MSG: + // Wait for Pokémon's front sprite animation + if (gSprites[sGacha->monSpriteId].callback == SpriteCallbackDummy) + sGacha->state++; + break; + case NEW_1: + // "{mon} hatched from egg" message/fanfare + ShowFinalMessage(); + //EggHatchPrintMessage(0, gStringVar4, 0, 3, TEXT_SKIP_DRAW); + PlayFanfare(MUS_EVOLVED); + sGacha->state++; + //PutWindowTilemap(0); + //CopyWindowToVram(0, COPYWIN_FULL); + break; + case NEW_2: + if (IsFanfareTaskInactive()) + sGacha->state++; + break; + case NEW_3: // Twice? + if (IsFanfareTaskInactive()) + sGacha->state++; + break; + case NEW_4: + // Ready the nickname prompt + if (FlagGet(FLAG_SYS_POKEMON_GET) == FALSE){ + FlagSet(FLAG_SYS_POKEMON_GET); + } + sGacha->state = GACHA_STATE_START_EXIT; + break; + } +} + +static void InitTradeScreen(void) +{ + //SetVBlankCallback(NULL); + //ResetAllBgsCoordinates(); + //ResetVramOamAndBgCntRegs(); + //ResetBgsAndClearDma3BusyFlags(0); + //ResetTempTileDataBuffers(); +} + +static void InitGachaScreen(void) +{ + sGacha->GachaId = gSpecialVar_0x8004; + + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + ResetTempTileDataBuffers(); + + BGSetup(); + + ResetSpriteData(); + FreeAllSpritePalettes(); + LoadSpritePalettes(sSpritePalettes2); + + if (sGacha->GachaId == 1) { // Basic + CreateHoppip(); + } + else if (sGacha->GachaId == 2) { // Great + CreatePhanpy(); + } + else if (sGacha->GachaId == 3) { // Ultra + CreateTeddiursa(); + } + else { // Master + CreateBelossom(); + } + CreateArrows(); + CreateCTA(); + CreateDigitalText(); + CreateKnob(); + CreateCreditSprites(); + CreatePlayerSprites(); + SetCreditDigits(GetCoins()); + SetPlayerDigits(0); + CreateCreditMenu(); + CreatePlayerMenu(); + CreateLotteryJPN(); + + sGacha->Odds = 0; + InitWindows(sGachaWinTemplates); + LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); + ShowMessage(); + + sGacha->exitToggle = 0; + UpdateCursorPosition(gSprites[sGacha->ArrowsSpriteId].x); + sGacha->Basic_CommonMax = 37; + sGacha->Basic_UncommonMax = 28; + sGacha->Basic_RareMax = 16; + sGacha->Basic_UltraRareMax = 11; + sGacha->Great_CommonMax = 65; + sGacha->Great_UncommonMax = 52; + sGacha->Great_RareMax = 41; + sGacha->Great_UltraRareMax = 18; + sGacha->Ultra_CommonMax = 63; + sGacha->Ultra_UncommonMax = 51; + sGacha->Ultra_RareMax = 28; + sGacha->Ultra_UltraRareMax = 28; + sGacha->Master_CommonMax = 18; + sGacha->Master_UncommonMax = 17; + sGacha->Master_RareMax = 11; + sGacha->Master_UltraRareMax = 10; + sGacha->gachaState = 0; + sGacha->waitTimer = 0; + sGacha->Input = 0; + sGacha->Basic_Total_Max = (sGacha->Basic_CommonMax + sGacha->Basic_UncommonMax + sGacha->Basic_RareMax + sGacha->Basic_UltraRareMax); + sGacha->Great_Total_Max = (sGacha->Great_CommonMax + sGacha->Great_UncommonMax + sGacha->Great_RareMax + sGacha->Great_UltraRareMax); + sGacha->Ultra_Total_Max = (sGacha->Ultra_CommonMax + sGacha->Ultra_UncommonMax + sGacha->Ultra_RareMax + sGacha->Ultra_UltraRareMax); + sGacha->Master_Total_Max = (sGacha->Master_CommonMax + sGacha->Master_UncommonMax + sGacha->Master_RareMax + sGacha->Master_UltraRareMax); + GetPokemonOwned(); + + CopyBgTilemapBufferToVram(GACHA_BG_BASE); + CopyBgTilemapBufferToVram(GACHA_MENUS); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); + ShowBg(GACHA_BG_BASE); + ShowBg(GACHA_MENUS); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(GachaVBlankCallback); + SetMainCallback2(GachaMainCallback); + CreateTask(GachaMain, 1); +} + diff --git a/src/new_game.c b/src/new_game.c index bdc020f9dffe..825c20ee6416 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -1,5 +1,6 @@ #include "global.h" #include "new_game.h" +#include "derby.h" #include "random.h" #include "pokemon.h" #include "roamer.h" @@ -17,6 +18,7 @@ #include "rtc.h" #include "easy_chat.h" #include "event_data.h" +#include "constants/flags.h" #include "money.h" #include "trainer_hill.h" #include "tv.h" @@ -176,6 +178,7 @@ void NewGameInitData(void) ClearBerryTrees(); SetMoney(&gSaveBlock1Ptr->money, 3000); SetCoins(0); + GetNewDerby(); ResetLinkContestBoolean(); ResetGameStats(); ClearAllContestWinnerPics(); diff --git a/src/pachinko.c b/src/pachinko.c new file mode 100644 index 000000000000..dbb36629f528 --- /dev/null +++ b/src/pachinko.c @@ -0,0 +1,6831 @@ +#include "global.h" +#include "bg.h" +#include "coins.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "field_weather.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "pachinko.h" +#include "random.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trig.h" +#include "window.h" +#include "constants/coins.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "string_util.h" +#include "constants/weather.h" +#include "constants/vars.h" + +// In order to run the Pinball game, it should be launched via a normal script +// like the example below. VAR_RESULT is set to 1 if the player successfully +// completes the game, 0 otherwise. +// +// ... +// callnative PlayMeowthPinballGame +// waitstate +// ... + +#define PINBALL_BG_TEXT 0 +#define PINBALL_BG_COVER 1 +#define PINBALL_BG_BASE 2 + +#define WIN_TEXT 0 + +#define TAG_BALL_POKEBALL 500 +#define TAG_FLIPPER 501 +#define TAG_MEOWTH 502 +#define TAG_MEOWTH_JEWEL 503 +#define TAG_MEOWTH_JEWEL_MUTLIPLIER 504 +#define TAG_TILES_MEOWTH_JEWEL_SPARKLE 505 +#define TAG_DUGTRIO 506 +#define TAG_SEEL 507 +#define TAG_SEEL_SPARKLE 508 +#define TAG_SEEL_MULTIPLIER 509 +#define TAG_GASTLY 510 +#define TAG_HAUNTER 511 +#define TAG_GENGAR 512 +#define TAG_TIMER_DIGIT 513 + +#define GFXTAG_PLAYER_DIGIT 8 +#define GFXTAG_SPINARAK 9 +#define GFXTAG_SPEED 10 +#define GFXTAG_MULTIPLIER 11 +#define GFXTAG_LIVES 12 +#define GFXTAG_ARROW 13 +#define GFXTAG_TITLE 14 +#define GFXTAG_GAMEOVER 15 +#define GFXTAG_WIN 16 +#define GFXTAG_NEWLEVEL 17 + +#define PALTAG_INTERFACEPLAYER 9 +#define PALTAG_SPINARAK 10 +#define PALTAG_SPEED 11 +#define PALTAG_MULTIPLIER 12 +#define PALTAG_LIVES 13 +#define PALTAG_ARROW 14 +#define PALTAG_TITLE 15 +#define PALTAG_GAMEOVER 16 +#define PALTAG_WIN 17 +#define PALTAG_NEWLEVEL 18 + +enum { + SPR_PLAYER_DIG_1, + SPR_PLAYER_DIG_10, + SPR_PLAYER_DIG_100, + SPR_PLAYER_DIG_1000, +}; + +#define SPR_PLAYER_DIGITS SPR_PLAYER_DIG_1 +#define MAX_SPRITES_PLAYER 4 + +struct Credits { + u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; + u8 StartSpeed; + u8 SpinarakSpriteId; + u8 SpeedSpriteId; + u8 MultiplierSpriteId; + u8 Live1SpriteId; + u8 Live2SpriteId; + u8 Live3SpriteId; + u8 Live4SpriteId; + u8 Live5SpriteId; + u8 Lives; + u8 Multiplier; + u8 GameStart; + u32 StartDelayTimer; + u8 ArrowSpriteId; + u8 ArrowPosition; + u32 StartDelayMax; + u8 ArrowDirection; + u32 SecondDelay; + u8 Level; + u8 TitleSpriteId; + u8 GameOverSpriteId; + u8 Winnings; + u8 WinSpriteId; + u8 TitleDestroyed; + u32 LevelChangeTimer; + u8 JackpotSpriteId; + u8 NewLevelSpriteId; + u8 LastLevel; + u32 TitleCounter; +}; + +enum +{ + GAME_TYPE_MEOWTH, + GAME_TYPE_DIGLETT, + GAME_TYPE_SEEL, + GAME_TYPE_GENGAR, +}; + +enum +{ + PINBALL_STATE_INIT, + PACHINKO_START_SCREEN, + PINBALL_STATE_RUNNING, + PINBALL_LOST_BALL_FADE_OUT, + PINBALL_LOST_BALL_FADE_IN, + PINBALL_STATE_DELAY_START_EXIT, + PINBALL_STATE_START_EXIT, + PINBALL_STATE_EXIT, + PINBALL_STATE_WAIT_ANIM, + PACHINKO_START_WIN, + PACHINKO_WIN, + PACHINKO_START_JACKPOT, + PACHINKO_JACKPOT, + PACHINKO_X2, + PACHINKO_X3, + PACHINKO_LEVEL_CHANGE_START, + PACHINKO_LEVEL_FADE_OUT, + PACHINKO_LEVEL_CHANGE, + PACHINKO_LEVEL_FADE_IN, +}; + +struct Ball +{ + u8 spriteId; + u32 xPos; + u32 yPos; + s16 xVelocity; + s16 yVelocity; + s8 spin; + u8 rotation; +}; + +enum +{ + MEOWTH_STATE_WALK, + MEOWTH_STATE_HIT, + MEOWTH_STATE_FINISH, +}; + +enum +{ + MEOWTH_FACING_RIGHT, + MEOWTH_FACING_LEFT, +}; + +enum +{ + JEWEL_STATE_HIDDEN, + JEWEL_STATE_FALLING, + JEWEL_STATE_LANDED, + JEWEL_STATE_CONSUMED, +}; + +#define MAX_MEOWTH_JEWELS 6 + +struct MeowthJewel +{ + u8 state; + u8 spriteId; + u16 xPos; + u16 yPos; + s16 xVelocity; + s16 yVelocity; + u16 destYPos; +}; + +struct Meowth +{ + u8 spriteId; + u8 sparkleSpriteId; + u16 xPos; + u16 yPos; + int state; + int facing; + int yMovement; + int hitDuration; + struct MeowthJewel jewels[MAX_MEOWTH_JEWELS]; + int score; + int jewelStreak; + bool32 completed; +}; + +enum +{ + DIGLETT_STATE_INIT, + DIGLETT_STATE_HIDDEN, + DIGLETT_STATE_IDLE_0, + DIGLETT_STATE_IDLE_1, + DIGLETT_STATE_IDLE_2, + DIGLETT_STATE_IDLE_3, + DIGLETT_STATE_HIT_0, + DIGLETT_STATE_HIT_1, + DIGLETT_STATE_HIT_2, +}; + +enum +{ + DUGTRIO_STATE_HIDDEN, + DUGTRIO_STATE_3ALIVE, + DUGTRIO_STATE_3ALIVE_HIT, + DUGTRIO_STATE_2ALIVE, + DUGTRIO_STATE_2ALIVE_HIT, + DUGTRIO_STATE_1ALIVE, + DUGTRIO_STATE_1ALIVE_HIT, + DUGTRIO_STATE_0ALIVE, + DUGTRIO_STATE_COMPLETE, +}; + +#define NUM_DIGLETTS 31 + +struct Diglett +{ + bool32 completed; + bool8 initialized; + u8 curInitIndex; + u8 curUpdateIndex; + u8 states[NUM_DIGLETTS]; + u8 numDiglettsHit; + u8 *collisionMap; + u8 dugtrioSpriteId; + u8 dugtrioState; +}; + +enum +{ + SEEL_STATE_SWIM_RIGHT, + SEEL_STATE_TURN_LEFT, + SEEL_STATE_SWIM_LEFT, + SEEL_STATE_TURN_RIGHT, + SEEL_STATE_EMERGE_RIGHT, + SEEL_STATE_EMERGE_LEFT, + SEEL_STATE_VISIBLE_RIGHT, + SEEL_STATE_VISIBLE_LEFT, + SEEL_STATE_SUBMERGE_RIGHT, + SEEL_STATE_SUBMERGE_LEFT, + SEEL_STATE_HIT_RIGHT, + SEEL_STATE_HIT_LEFT, +}; + +struct SeelSwimmer +{ + u8 state; + u8 spriteId; + u16 xPos; + u16 yPos; + int counter; +}; + +#define NUM_SEELS 3 + +struct Seel +{ + bool32 completed; + struct SeelSwimmer swimmers[NUM_SEELS]; + u8 streak; + u8 score; + u8 emergingSwimmerIndex; + u8 emergingSwimmerCounter; + u8 sparkleSpriteId; +}; + +enum +{ + GHOST_DIR_RIGHT, + GHOST_DIR_LEFT, +}; + +enum +{ + GHOST_STATE_VISIBLE, + GHOST_STATE_HIT, + GHOST_STATE_INVISIBLE, + GHOST_STATE_FINISHED, +}; + +struct GraveyardGhost +{ + u8 state; + u8 spriteId; + u16 xPos; + u16 yPos; + u8 direction; + u8 leftBoundary; + u8 rightBoundary; + u8 counter; +}; + +enum +{ + GENGAR_STATE_STANDING, + GENGAR_STATE_STEP_LEFT, + GENGAR_STATE_STEP_RIGHT, + GENGAR_STATE_HIT, + GENGAR_STATE_LAST_HIT, + GENGAR_STATE_LEAVING, +}; + +struct GengarGhost +{ + u8 state; + u8 spriteId; + u16 xPos; + u16 yPos; + u8 nextFoot; + u32 counter; +}; + +enum +{ + GRAVEYARD_STATE_GASTLY, + GRAVEYARD_STATE_TO_HAUNTER, + GRAVEYARD_STATE_HAUNTER, + GRAVEYARD_STATE_TO_GENGAR, + GRAVEYARD_STATE_GENGAR, + GRAVEYARD_STATE_GENGAR_VICTORY, +}; + +#define NUM_GASTLY 3 +#define NUM_HAUNTER 2 + +struct Gengar +{ + bool32 completed; + u8 graveyardState; + u16 counter; + struct GraveyardGhost gastlyGhosts[NUM_GASTLY]; + struct GraveyardGhost haunterGhosts[NUM_HAUNTER]; + struct GengarGhost gengarGhost; + u8 numGastlyHits; + u8 numHaunterHits; + u8 numGengarHits; + u8 *collisionMap; +}; + +#define FLIPPER_LEFT 0 +#define FLIPPER_RIGHT 1 + +struct Flipper +{ + u8 type; + u8 spriteId; + u16 xPos; + u16 yPos; + int state; + int prevState; + int stateDelta; +}; + +struct Timer +{ + u32 ticks; + u8 minutesSpriteId; + u8 colonSpriteId; + u8 tensSpriteId; + u8 onesSpriteId; +}; + +struct Tilt +{ + u8 counter; + bool8 reset; + bool8 pushing; +}; + +struct PinballGame +{ + u8 state; + u8 gameType; + struct Ball ball; + struct Flipper leftFlipper; + struct Flipper rightFlipper; + struct Timer timer; + bool8 gravityEnabled; + u8 stageTileWidth; + u8 stageTileHeight; + u16 cameraScrollX; + u16 cameraScrollY; + struct Meowth meowth; + struct Diglett diglett; + struct Seel seel; + struct Gengar gengar; + struct Tilt leftTilt; + struct Tilt rightTilt; + struct Tilt downTilt; + bool8 doArtificialDownTilt; + bool8 ballIsEntering; + bool8 flippersDisabled; + bool8 completed; + u8 exitTimer; + bool8 waitExitScene; + MainCallback returnMainCallback; +}; + +static void PlayPinballGame(u8 gameType); +static void FadeToPinballScreen(u8 taskId); +static void InitPinballScreen(void); +static void InitPinballGame(void); +static u32 GetTimerTicks(u8 gameType); +static void LoadBgGfx(u8 gameType); +static void LoadSpriteGfx(u8 gameType); +static void InitBallSprite(void); +static void InitFlipperSprites(void); +static void InitTimerSprites(void); +static bool32 GameTypeUsesTimer(u8 gameType); +static void GetTimerScreenCoords(u8 gameType, int *outX, int *outY); +static void InitGameType(u8 gameType); +static void InitMeowth(void); +static void InitDiglett(void); +static void InitSeel(void); +static void InitGengar(void); +static void PinballVBlankCallback(void); +static void PinballMainCallback(void); +static void PinballMain(u8 taskId); +static void StartNewBall(void); +static void LoseBall(void); +static bool32 PlayAnotherBall(void); +static void LostBall(u8 gameType); +static void LostBallMeowth(struct Meowth *meowth); +static void LostBallSeel(struct Seel *seel); +static void LostBallGengar(struct Gengar *gengar); +static void DrawMeowthScoreJewels(struct Meowth *meowth); +static void DrawSeelScoreJewels(struct Seel *seel); +static void OpenEntrance(u8 gameType); +static void OpenEntranceMeowth(void); +static void OpenEntranceDiglett(void); +static void OpenEntranceSeel(void); +static void OpenEntranceGengar(void); +static void CloseEntranceMeowth(void); +static void CloseEntranceDiglett(void); +static void CloseEntranceSeel(void); +static void CloseEntranceGengar(void); +static void HandleBallPhysics(void); +static void ApplyGravity(struct Ball *ball); +static void LimitVelocity(struct Ball *ball); +static void HandleTilts(struct Ball *ball); +static void HandleTilt(struct Ball *ball, struct Tilt *tilt, int xDelta, int yDelta, u32 buttonMask, bool8 artificalEnabled); +static bool32 HandleFlippers(struct Ball *ball, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification); +static void UpdateFlipperState(struct Flipper *flipper); +static bool32 CheckFlipperCollision(struct Ball *ball, struct Flipper *flipper, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification); +static void UpdatePosition(struct Ball *ball); +static bool32 CheckStaticCollision(u8 gameType, struct Ball *ball, bool32 ballIsEntering, int stageTileWidth, int stageTileHeight, u8 *outCollisionNormal, u16 *outYForce); +static u8 GetCollisionAttribute(u8 gameType, bool32 ballIsEntering, int index); +static u8 GetCollisionMaskRow(u8 gameType, int collisionAttribute, int row); +static void HandleStaticCollisionForGameType(u8 gameType, int x, int y, u8 collisionAttribute, u16 *outYForce); +static void HandleStaticCollisionDiglett(struct Diglett *diglett, int x, int y, u8 collisionAttribute, u16 *outYForce); +static void HandleStaticCollisionGengar(struct Gengar *gengar, u8 collisionAttribute, u16 *outYForce); +static void ApplyTiltForces(struct Ball *ball, u8 collisionNormal); +static void RotateVector(s16 *x, s16 *y, u8 angle); +static u8 ReverseBits(u8 value); +static void ApplyCollisionForces(struct Ball *ball, u16 flipperYForce, int collisionAmplification); +static void UpdateCamera(void); +static void UpdateTimer(void); +static void HandleTimeRanOut(void); +static void DisableFlippers(void); +static void StartExitPinballGame(void); +static void ExitPinballGame(void); +static void UpdateBallSprite(struct Sprite *sprite); +static void UpdateFlipperSprite(struct Sprite *sprite); +static void UpdateTimerDigitSprite(struct Sprite *sprite); +static bool32 UpdateGameType(u8 gameType); +static bool32 UpdateMeowth(struct Meowth *meowth); +static bool32 CheckObjectsCollision(u8 gameType, struct Ball *ball, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 CheckMeowthCollision(struct Ball *ball, struct Meowth *meowth, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 CheckJewelCollision(struct Ball *ball, struct MeowthJewel *jewel, u8 *outCollisionNormal); +static bool32 IsJewelSpaceOccupied(u16 xPos, u16 destYPos, struct MeowthJewel *jewels); +static bool32 CheckMeowthJewelsCollision(struct Ball *ball, struct Meowth *meowth, u8 *outCollisionNormal); +static int GetNumActiveJewels(struct Meowth *meowth); +static struct MeowthJewel *TryCreateNewJewel(struct Meowth *meowth, int ballXPos); +static void UpdateJewels(struct MeowthJewel *jewels); +static void UpdateMeowthSprite(struct Sprite *sprite); +static void UpdateMeowthJewelSprite(struct Sprite *sprite); +static void UpdateMeowthJewelMultiplierSprite(struct Sprite *sprite); +static void ResetMeowthJewels(struct Meowth *meowth); +static void UpdateMeowthJewelSparkleSprite(struct Sprite *sprite); +static bool32 UpdateDiglett(struct Diglett *diglett); +static void UpdateDiglettTiles(u16 *tilemap, int index, struct Diglett *diglett); +static void UpdateDiglettCollision(u8 *collisionMap, int index, bool32 solidCollision); +static void UpdateDugtrioSprite(struct Sprite *sprite); +static bool32 CheckSeelCollision(struct Ball *ball, struct Seel *seel, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 UpdateSeel(struct Seel *seel); +static void ResetSeels(struct Seel *seel); +static void ChooseNextEmergingSeel(int curSeelIndex, struct Seel *seel); +static u32 GetSeelVisibleTicks(int curStreak); +static void UpdateSeelSprite(struct Sprite *sprite); +static void UpdateSeelSparkleSprite(struct Sprite *sprite); +static void UpdateSeelMultiplierSprite(struct Sprite *sprite); +static bool32 CheckGhostsCollision(struct Ball *ball, u32 ticks, struct GraveyardGhost *ghosts, int numGhosts, const u8 *angles, int width, int height, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 CheckGengarCollision(struct Ball *ball, struct Gengar *gengar, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 UpdateGengar(struct Gengar *gengar); +static void UpdateGengarGhost(struct Gengar *gengar); +static void UpdateGhost(struct Gengar *gengar, struct GraveyardGhost *ghost, u8 *numGhostHits, u8 nextState, int numGhosts); +static void InitGhost(struct GraveyardGhost *ghost, const u8 *initialData, const struct SpriteTemplate *spriteTemplate, int ghostIndex); +static void UpdateGastlySprite(struct Sprite *sprite); +static void UpdateHaunterSprite(struct Sprite *sprite); +static void UpdateGhostSprite(struct Sprite *sprite, struct GraveyardGhost *ghost); +static void UpdateGengarSprite(struct Sprite *sprite); +static void CrumbleGravestones(struct Gengar *gengar); + +static const u8 sJackpotText[] = _("JACKPOT!\nYou won {STR_VAR_1} COINS!"); +static const u8 sWinText[] = _("You won {STR_VAR_1} COINS!"); +static const u8 sLoseText[] = _("Game over!"); + +static EWRAM_DATA u8 sTextWindowId = 0; +static EWRAM_DATA struct PinballGame *sPinballGame = NULL; +static EWRAM_DATA struct Credits *sScore = NULL; + +static const struct BgTemplate sPinballBgTemplates[] = { + { + .bg = PINBALL_BG_TEXT, + .charBaseIndex = 0, + .mapBaseIndex = 27, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = PINBALL_BG_COVER, + .charBaseIndex = 1, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = PINBALL_BG_BASE, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate sPinballWinTemplates[] = { + { // WIN_TEXT + .bg = PINBALL_BG_TEXT, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x1, + }, + DUMMY_WIN_TEMPLATE, +}; + +static const u32 sCoverBgGfx[] = INCBIN_U32("graphics/pinball/bg_cover_tiles.4bpp"); +static const u16 sCoverBgPalette[] = INCBIN_U16("graphics/pinball/bg_cover_tiles.gbapal"); +static const u16 sCovergTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_cover.bin"); + +static const u32 sBallPokeballGfx[] = INCBIN_U32("graphics/pinball/ball_pokeball.4bpp.lz"); +static const u16 sBallPokeballPalette[] = INCBIN_U16("graphics/pinball/ball_pokeball.gbapal"); +static const u32 sFlipperGfx[] = INCBIN_U32("graphics/pinball/flipper.4bpp.lz"); +static const u16 sFlipperPalette[] = INCBIN_U16("graphics/pinball/flipper.gbapal"); +static const u8 sFlipperLeftMinigameCollisionMasks[] = INCBIN_U8("graphics/pinball/flipper_left_masks_minigame.1bpp"); +static const u8 sFlipperRightMinigameCollisionMasks[] = INCBIN_U8("graphics/pinball/flipper_right_masks_minigame.1bpp"); +static const u32 sTimerDigitsGfx[] = INCBIN_U32("graphics/pinball/timer_digits.4bpp.lz"); +static const u16 sTimerDigitsPalette[] = INCBIN_U16("graphics/pinball/timer_digits.gbapal"); + +static const u8 sFlipperCollisionRadii[] = INCBIN_U8("data/pinball/flipper_radii.bin"); +static const u8 sFlipperCollisionNormalAngles[] = INCBIN_U8("data/pinball/flipper_normal_angles.bin"); + +static const u32 sMeowthStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_meowth.4bpp"); +static const u16 sMeowthStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_meowth.gbapal"); +static const u16 sMeowthStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_meowth.bin"); +static const u8 sMeowthStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_meowth.1bpp"); +static const u8 sMeowthStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_meowth.bin"); +static const u8 sMeowthStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_meowth_entrance.bin"); +static const u32 sMeowthAnimationGfx[] = INCBIN_U32("graphics/pinball/meowth_animation.4bpp.lz"); +static const u16 sMeowthAnimationPalette[] = INCBIN_U16("graphics/pinball/meowth_animation.gbapal"); +static const u32 sMeowthJewelGfx[] = INCBIN_U32("graphics/pinball/meowth_jewel_animation.4bpp.lz"); +static const u16 sMeowthJewelPalette[] = INCBIN_U16("graphics/pinball/meowth_jewel_animation.gbapal"); +static const u32 sMeowthJewelMultipliersGfx[] = INCBIN_U32("graphics/pinball/meowth_jewel_multipliers.4bpp.lz"); +static const u32 sMeowthJewelSparkleGfx[] = INCBIN_U32("graphics/pinball/meowth_sparkle.4bpp.lz"); +static const u16 sMeowthJewelMultipliersPalette[] = INCBIN_U16("graphics/pinball/meowth_jewel_multipliers.gbapal"); +static const u8 sMeowthCollisionNormalAngles[] = INCBIN_U8("data/pinball/meowth_normal_angles.bin"); +static const u8 sMeowthJewelCollisionNormalAngles[] = INCBIN_U8("data/pinball/meowth_jewel_normal_angles.bin"); + +static const u32 sDiglettStageBgGfx[] = INCBIN_U32("graphics/pachinko/bgtiles.4bpp"); +static const u16 sDiglettStageBgPalette[] = INCBIN_U16("graphics/pachinko/bg_indexed.gbapal"); +static const u16 sDiglettStageBgTilemap[] = INCBIN_U16("graphics/pachinko/pachinkobg1.bin"); +static const u8 sDiglettStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_diglett.1bpp"); +static const u8 sDiglettStageBgCollisionMap[] = INCBIN_U8("graphics/pachinko/collisionmap.bin"); +static const u8 sDiglettStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_diglett_entrance.bin"); +static const u32 sDugtrioAnimationGfx[] = INCBIN_U32("graphics/pinball/dugtrio_animation.4bpp.lz"); +static const u16 sDugtrioAnimationPalette[] = INCBIN_U16("graphics/pinball/dugtrio_animation.gbapal"); + +static const u32 sSeelStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_seel.4bpp"); +static const u16 sSeelStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_seel.gbapal"); +static const u16 sSeelStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_seel.bin"); +static const u8 sSeelStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_seel.1bpp"); +static const u8 sSeelStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_seel.bin"); +static const u8 sSeelStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_seel_entrance.bin"); +static const u32 sSeelAnimationGfx[] = INCBIN_U32("graphics/pinball/seel_animation.4bpp.lz"); +static const u16 sSeelAnimationPalette[] = INCBIN_U16("graphics/pinball/seel_animation.gbapal"); +static const u8 sSeelCollisionNormalAngles[] = INCBIN_U8("data/pinball/seel_normal_angles.bin"); +static const u32 sSeelSparkleGfx[] = INCBIN_U32("graphics/pinball/seel_sparkle.4bpp.lz"); +static const u16 sSeelSparklePalette[] = INCBIN_U16("graphics/pinball/seel_sparkle.gbapal"); +static const u32 sSeelMultipliersGfx[] = INCBIN_U32("graphics/pinball/seel_multipliers.4bpp.lz"); +static const u16 sSeelMultipliersPalette[] = INCBIN_U16("graphics/pinball/seel_multipliers.gbapal"); + +static const u32 sGengarStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_gengar.4bpp"); +static const u16 sGengarStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_gengar.gbapal"); +static const u16 sGengarStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_gengar.bin"); +static const u8 sGengarStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_gengar.1bpp"); +static const u8 sGengarStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_gengar.bin"); +static const u8 sGengarStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_gengar_entrance.bin"); +static const u32 sGastlyAnimationGfx[] = INCBIN_U32("graphics/pinball/gastly_animation.4bpp.lz"); +static const u16 sGastlyAnimationPalette[] = INCBIN_U16("graphics/pinball/gastly_animation.gbapal"); +static const u8 sGastlyCollisionNormalAngles[] = INCBIN_U8("data/pinball/gastly_normal_angles.bin"); +static const u32 sHaunterAnimationGfx[] = INCBIN_U32("graphics/pinball/haunter_animation.4bpp.lz"); +static const u16 sHaunterAnimationPalette[] = INCBIN_U16("graphics/pinball/haunter_animation.gbapal"); +static const u8 sHaunterCollisionNormalAngles[] = INCBIN_U8("data/pinball/haunter_normal_angles.bin"); +static const u32 sGengarAnimationGfx[] = INCBIN_U32("graphics/pinball/gengar_animation.4bpp.lz"); +static const u16 sGengarAnimationPalette[] = INCBIN_U16("graphics/pinball/gengar_animation.gbapal"); +static const u8 sGengarCollisionNormalAngles[] = INCBIN_U8("data/pinball/gengar_normal_angles.bin"); + +static const u32 gPlayer_Gfx[] = INCBIN_U32("graphics/pachinko/input_numbers.4bpp.lz"); +static const u16 sPlayer_Pal[] = INCBIN_U16("graphics/pachinko/input_numbers.gbapal"); + +static const u32 SpinarakGFX[] = INCBIN_U32("graphics/pachinko/spider.4bpp.lz"); +static const u16 SpinarakPAL[] = INCBIN_U16("graphics/pachinko/spider.gbapal"); + +static const u32 SpeedGFX[] = INCBIN_U32("graphics/pachinko/speed.4bpp.lz"); +static const u16 SpeedPAL[] = INCBIN_U16("graphics/pachinko/speed.gbapal"); + +static const u32 MultiplierGFX[] = INCBIN_U32("graphics/pachinko/multiplier.4bpp.lz"); +static const u16 MultiplierPAL[] = INCBIN_U16("graphics/pachinko/multiplier.gbapal"); + +static const u32 LivesGFX[] = INCBIN_U32("graphics/pachinko/lives.4bpp.lz"); +static const u16 LivesPAL[] = INCBIN_U16("graphics/pachinko/lives.gbapal"); + +static const u32 ArrowGFX[] = INCBIN_U32("graphics/pachinko/arrow.4bpp.lz"); +static const u16 ArrowPAL[] = INCBIN_U16("graphics/pachinko/arrow.gbapal"); + +static const u32 TitleGFX[] = INCBIN_U32("graphics/pachinko/title.4bpp.lz"); +static const u16 TitlePAL[] = INCBIN_U16("graphics/pachinko/title.gbapal"); + +static const u32 GameOverGFX[] = INCBIN_U32("graphics/pachinko/gameover.4bpp.lz"); +static const u16 GameOverPAL[] = INCBIN_U16("graphics/pachinko/gameover.gbapal"); + +static const u32 WinGFX[] = INCBIN_U32("graphics/pachinko/win.4bpp.lz"); +static const u16 WinPAL[] = INCBIN_U16("graphics/pachinko/win.gbapal"); + +static const u32 NewLevelGFX[] = INCBIN_U32("graphics/pachinko/newlevel.4bpp.lz"); +static const u16 NewLevelPAL[] = INCBIN_U16("graphics/pachinko/newlevel.gbapal"); + +// Levels + +static const u16 sLevel_01_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_01.bin"); +static const u8 sLevel_01_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_01.bin"); + +static const u16 sLevel_02_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_02.bin"); +static const u8 sLevel_02_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_02.bin"); + +static const u16 sLevel_03_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_03.bin"); +static const u8 sLevel_03_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_03.bin"); + +static const u16 sLevel_04_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_04.bin"); +static const u8 sLevel_04_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_04.bin"); + +static const u16 sLevel_05_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_05.bin"); +static const u8 sLevel_05_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_05.bin"); + +static const u16 sLevel_06_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_06.bin"); +static const u8 sLevel_06_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_06.bin"); + +static const u16 sLevel_07_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_07.bin"); +static const u8 sLevel_07_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_07.bin"); + +static const u16 sLevel_08_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_08.bin"); +static const u8 sLevel_08_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_08.bin"); + +static const u16 sLevel_09_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_09.bin"); +static const u8 sLevel_09_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_09.bin"); + +static const u16 sLevel_10_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_10.bin"); +static const u8 sLevel_10_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_10.bin"); + +static const u16 sLevel_11_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_11.bin"); +static const u8 sLevel_11_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_11.bin"); + +static const u16 sLevel_12_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_12.bin"); +static const u8 sLevel_12_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_12.bin"); + +static const u16 sLevel_13_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_13.bin"); +static const u8 sLevel_13_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_13.bin"); + +static const u16 sLevel_14_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_14.bin"); +static const u8 sLevel_14_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_14.bin"); + +static const u16 sLevel_15_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_15.bin"); +static const u8 sLevel_15_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_15.bin"); + +static const u16 sLevel_16_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_16.bin"); +static const u8 sLevel_16_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_16.bin"); + +static const u16 sLevel_17_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_17.bin"); +static const u8 sLevel_17_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_17.bin"); + +static const u16 sLevel_18_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_18.bin"); +static const u8 sLevel_18_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_18.bin"); + +static const u16 sLevel_19_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_19.bin"); +static const u8 sLevel_19_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_19.bin"); + +static const u16 sLevel_20_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_20.bin"); +static const u8 sLevel_20_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_20.bin"); + +static const u16 sLevel_21_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_21.bin"); +static const u8 sLevel_21_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_21.bin"); + +static const u16 sLevel_22_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_22.bin"); +static const u8 sLevel_22_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_22.bin"); + +static const u16 sLevel_23_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_23.bin"); +static const u8 sLevel_23_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_23.bin"); + +//static const u16 sLevel_24_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_24.bin"); +//static const u8 sLevel_24_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_24.bin"); +// +//static const u16 sLevel_25_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_25.bin"); +//static const u8 sLevel_25_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_25.bin"); +// +//static const u16 sLevel_26_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_26.bin"); +//static const u8 sLevel_26_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_26.bin"); +// +//static const u16 sLevel_27_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_27.bin"); +//static const u8 sLevel_27_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_27.bin"); +// +//static const u16 sLevel_28_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_28.bin"); +//static const u8 sLevel_28_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_28.bin"); +// +//static const u16 sLevel_29_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_29.bin"); +//static const u8 sLevel_29_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_29.bin"); +// +//static const u16 sLevel_30_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_30.bin"); +//static const u8 sLevel_30_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_30.bin"); +// +//static const u16 sLevel_31_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_31.bin"); +//static const u8 sLevel_31_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_31.bin"); +// +//static const u16 sLevel_32_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_32.bin"); +//static const u8 sLevel_32_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_32.bin"); +// +//static const u16 sLevel_33_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_33.bin"); +//static const u8 sLevel_33_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_33.bin"); +// +//static const u16 sLevel_34_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_34.bin"); +//static const u8 sLevel_34_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_34.bin"); +// +//static const u16 sLevel_35_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_35.bin"); +//static const u8 sLevel_35_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_35.bin"); +// +//static const u16 sLevel_36_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_36.bin"); +//static const u8 sLevel_36_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_36.bin"); +// +//static const u16 sLevel_37_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_37.bin"); +//static const u8 sLevel_37_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_37.bin"); +// +//static const u16 sLevel_38_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_38.bin"); +//static const u8 sLevel_38_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_38.bin"); +// +//static const u16 sLevel_39_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_39.bin"); +//static const u8 sLevel_39_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_39.bin"); +// +//static const u16 sLevel_40_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_40.bin"); +//static const u8 sLevel_40_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_40.bin"); + +static const struct SpritePalette sSpritePalettes2[] = +{ + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = SpinarakPAL, .tag = PALTAG_SPINARAK }, + { .data = SpeedPAL, .tag = PALTAG_SPEED }, + { .data = MultiplierPAL, .tag = PALTAG_MULTIPLIER }, + { .data = LivesPAL, .tag = PALTAG_LIVES }, + { .data = ArrowPAL, .tag = PALTAG_ARROW }, + { .data = TitlePAL, .tag = PALTAG_TITLE }, + { .data = GameOverPAL, .tag = PALTAG_GAMEOVER }, + { .data = WinPAL, .tag = PALTAG_WIN }, + { .data = NewLevelPAL, .tag = PALTAG_NEWLEVEL }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheet_NewLevel = +{ + .data = NewLevelGFX, + .size = 0x1000, + .tag = GFXTAG_NEWLEVEL, +}; + +static const struct OamData sOamData_NewLevel = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sNewLevelAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 15), // Frame 0 for 30 ticks + ANIMCMD_FRAME(32, 15), // Frame 1 for 30 ticks + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sNewLevelAnimCmds[] = { + sNewLevelAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_NewLevel = +{ + .tileTag = GFXTAG_NEWLEVEL, + .paletteTag = PALTAG_NEWLEVEL, + .oam = &sOamData_NewLevel, + .anims = sNewLevelAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Win = +{ + .data = WinGFX, + .size = 0x1000, + .tag = GFXTAG_WIN, +}; + +static const struct OamData sOamData_Win = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sWinAnimCmd_0[] = +{ + ANIMCMD_FRAME(64, 15), // Frame 0 for 30 ticks + ANIMCMD_FRAME(0, 15), // Frame 1 for 30 ticks + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sWinAnimCmds[] = { + sWinAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Win = +{ + .tileTag = GFXTAG_WIN, + .paletteTag = PALTAG_WIN, + .oam = &sOamData_Win, + .anims = sWinAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_GameOver = +{ + .data = GameOverGFX, + .size = 0x800, + .tag = GFXTAG_GAMEOVER, +}; + +static const struct OamData sOamData_GameOver = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_GameOver = +{ + .tileTag = GFXTAG_GAMEOVER, + .paletteTag = PALTAG_GAMEOVER, + .oam = &sOamData_GameOver, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Title = +{ + .data = TitleGFX, + .size = 0x800, + .tag = GFXTAG_TITLE, +}; + +static const struct OamData sOamData_Title = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Title = +{ + .tileTag = GFXTAG_TITLE, + .paletteTag = PALTAG_TITLE, + .oam = &sOamData_Title, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Arrow = +{ + .data = ArrowGFX, + .size = 0x80, + .tag = GFXTAG_ARROW, +}; + +static const struct OamData sOamData_Arrow = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Arrow = +{ + .tileTag = GFXTAG_ARROW, + .paletteTag = PALTAG_ARROW, + .oam = &sOamData_Arrow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Lives = +{ + .data = LivesGFX, + .size = 0x40, + .tag = GFXTAG_LIVES, +}; + +static const struct OamData sOamData_Lives = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Lives = +{ + .tileTag = GFXTAG_LIVES, + .paletteTag = PALTAG_LIVES, + .oam = &sOamData_Lives, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Multiplier = +{ + .data = MultiplierGFX, + .size = 0x800, + .tag = GFXTAG_MULTIPLIER, +}; + +static const struct OamData sOamData_Multiplier = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sMultiplierAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 10), // Frame 0 for 30 ticks + ANIMCMD_FRAME(8, 10), // Frame 1 for 30 ticks + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd sMultiplierAnimCmd_1[] = +{ + ANIMCMD_FRAME(16, 10), // Frame 0 for 30 ticks + ANIMCMD_FRAME(24, 10), // Frame 1 for 30 ticks + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd sMultiplierAnimCmd_2[] = +{ + ANIMCMD_FRAME(32, 10), // Frame 0 for 30 ticks + ANIMCMD_FRAME(40, 10), // Frame 1 for 30 ticks + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sMultiplierAnimCmds[] = { + sMultiplierAnimCmd_0, // Looping animation + sMultiplierAnimCmd_1, + sMultiplierAnimCmd_2, +}; + +static const struct SpriteTemplate sSpriteTemplate_Multiplier = +{ + .tileTag = GFXTAG_MULTIPLIER, + .paletteTag = PALTAG_MULTIPLIER, + .oam = &sOamData_Multiplier, + .anims = sMultiplierAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Speed = +{ + .data = SpeedGFX, + .size = 0x1000, + .tag = GFXTAG_SPEED, +}; + +static const struct OamData sOamData_Speed = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x16), + .size = SPRITE_SIZE(64x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Speed = +{ + .tileTag = GFXTAG_SPEED, + .paletteTag = PALTAG_SPEED, + .oam = &sOamData_Speed, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Spinarak = +{ + .data = SpinarakGFX, + .size = 0x3000, + .tag = GFXTAG_SPINARAK, +}; + +static const struct OamData sOamData_Spinarak = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x64), + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sSpinarakAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 30), // Frame 0 for 30 ticks + ANIMCMD_FRAME(64, 30), // Frame 1 for 30 ticks + ANIMCMD_FRAME(0, 30), // Frame 0 for 30 ticks + ANIMCMD_FRAME(64, 30), // Frame 1 for 30 ticks + ANIMCMD_FRAME(0, 30), // Frame 0 for 30 ticks + ANIMCMD_FRAME(64, 30), // Frame 1 for 30 ticks + ANIMCMD_FRAME(128, 15), // Frame 2 for 15 ticks + ANIMCMD_FRAME(0, 15), // Frame 0 for 15 ticks + ANIMCMD_FRAME(64, 30), // Frame 1 for 30 ticks + ANIMCMD_FRAME(0, 30), // Frame 0 for 30 ticks + ANIMCMD_FRAME(64, 30), // Frame 1 for 30 ticks + ANIMCMD_FRAME(0, 30), // Frame 0 for 30 ticks + ANIMCMD_FRAME(64, 30), // Frame 1 for 30 ticks + ANIMCMD_FRAME(192, 15), // Frame 3 for 15 ticks + ANIMCMD_FRAME(256, 10), // Frame 4 for 15 ticks + ANIMCMD_FRAME(320, 10), // Frame 5 for 15 ticks + ANIMCMD_FRAME(256, 10), // Frame 4 for 15 ticks + ANIMCMD_FRAME(192, 15), // Frame 3 for 15 ticks + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sSpinarakAnimCmds[] = { + sSpinarakAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Spinarak = +{ + .tileTag = GFXTAG_SPINARAK, + .paletteTag = PALTAG_SPINARAK, + .oam = &sOamData_Spinarak, + .anims = sSpinarakAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheets_PlayerInterface[] = +{ + { + .data = gPlayer_Gfx, + .size = 0x280, + .tag = GFXTAG_PLAYER_DIGIT + }, + {} +}; + +static const struct OamData sOam_CreditDigit = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2, +}; + +static const struct SpriteTemplate sSpriteTemplate_PlayerDigit = +{ + .tileTag = GFXTAG_PLAYER_DIGIT, + .paletteTag = PALTAG_INTERFACEPLAYER, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct CompressedSpriteSheet sBallPokeballSpriteSheet = { + .data = sBallPokeballGfx, + .size = 0x400, + .tag = TAG_BALL_POKEBALL, +}; + +static const struct CompressedSpriteSheet sFlipperSpriteSheet = { + .data = sFlipperGfx, + .size = 0x600, + .tag = TAG_FLIPPER, +}; + +static const struct CompressedSpriteSheet sTimerDigitsSpriteSheet = { + .data = sTimerDigitsGfx, + .size = 0x2C0, + .tag = TAG_TIMER_DIGIT, +}; + +static const struct CompressedSpriteSheet sMeowthAnimationSpriteSheet = { + .data = sMeowthAnimationGfx, + .size = 0xA00, + .tag = TAG_MEOWTH, +}; + +static const struct CompressedSpriteSheet sMeowthJewelSpriteSheet = { + .data = sMeowthJewelGfx, + .size = 0x400, + .tag = TAG_MEOWTH_JEWEL, +}; + +static const struct CompressedSpriteSheet sMeowthJewelMultipliersSpriteSheet = { + .data = sMeowthJewelMultipliersGfx, + .size = 0x140, + .tag = TAG_MEOWTH_JEWEL_MUTLIPLIER, +}; + +static const struct CompressedSpriteSheet sMeowthSparkleSpriteSheet = { + .data = sMeowthJewelSparkleGfx, + .size = 0x40, + .tag = TAG_TILES_MEOWTH_JEWEL_SPARKLE, +}; + +static const struct CompressedSpriteSheet sDugtrioAnimationSpriteSheet = { + .data = sDugtrioAnimationGfx, + .size = 0x1A00, + .tag = TAG_DUGTRIO, +}; + +static const struct CompressedSpriteSheet sSeelAnimationSpriteSheet = { + .data = sSeelAnimationGfx, + .size = 0x1E00, + .tag = TAG_SEEL, +}; + +static const struct CompressedSpriteSheet sSeelSparkleSpriteSheet = { + .data = sSeelSparkleGfx, + .size = 0x40, + .tag = TAG_SEEL_SPARKLE, +}; + +static const struct CompressedSpriteSheet sSeelMultipliersSpriteSheet = { + .data = sSeelMultipliersGfx, + .size = 0x1C0, + .tag = TAG_SEEL_MULTIPLIER, +}; + +static const struct CompressedSpriteSheet sGastlyAnimationSpriteSheet = { + .data = sGastlyAnimationGfx, + .size = 0x600, + .tag = TAG_GASTLY, +}; + +static const struct CompressedSpriteSheet sHaunterAnimationSpriteSheet = { + .data = sHaunterAnimationGfx, + .size = 0x3000, + .tag = TAG_HAUNTER, +}; + +static const struct CompressedSpriteSheet sGengarAnimationSpriteSheet = { + .data = sGengarAnimationGfx, + .size = 0x4000, + .tag = TAG_GENGAR, +}; + +static const struct SpritePalette sPinballSpritePalette = { sBallPokeballPalette, TAG_BALL_POKEBALL }; +static const struct SpritePalette sFlipperSpritePalette = { sFlipperPalette, TAG_FLIPPER }; +static const struct SpritePalette sTimerDigitsSpritePalette = { sTimerDigitsPalette, TAG_TIMER_DIGIT }; +static const struct SpritePalette sMeowthAnimationSpritePalette = { sMeowthAnimationPalette, TAG_MEOWTH }; +static const struct SpritePalette sMeowthJewelSpritePalette = { sMeowthJewelPalette, TAG_MEOWTH_JEWEL }; +static const struct SpritePalette sMeowthJewelMultipliersSpritePalette = { sMeowthJewelMultipliersPalette, TAG_MEOWTH_JEWEL_MUTLIPLIER }; +static const struct SpritePalette sDugtrioAnimationSpritePalette = { sDugtrioAnimationPalette, TAG_DUGTRIO }; +static const struct SpritePalette sSeelAnimationSpritePalette = { sSeelAnimationPalette, TAG_SEEL }; +static const struct SpritePalette sSeelSparkleSpritePalette = { sSeelSparklePalette, TAG_SEEL_SPARKLE }; +static const struct SpritePalette sSeelMultipliersSpritePalette = { sSeelMultipliersPalette, TAG_SEEL_MULTIPLIER }; +static const struct SpritePalette sGastlyAnimationSpritePalette = { sGastlyAnimationPalette, TAG_GASTLY }; +static const struct SpritePalette sHaunterAnimationSpritePalette = { sHaunterAnimationPalette, TAG_HAUNTER }; +static const struct SpritePalette sGengarAnimationSpritePalette = { sGengarAnimationPalette, TAG_GENGAR }; + +static const struct OamData sBallOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +#define BALL_FRAME_ANIMCMD(n) \ +static const union AnimCmd sBallAnimCmd_##n[] =\ +{\ + ANIMCMD_FRAME((n) * 4, 0),\ + ANIMCMD_END,\ +}; + +BALL_FRAME_ANIMCMD(0) +BALL_FRAME_ANIMCMD(1) +BALL_FRAME_ANIMCMD(2) +BALL_FRAME_ANIMCMD(3) +BALL_FRAME_ANIMCMD(4) +BALL_FRAME_ANIMCMD(5) +BALL_FRAME_ANIMCMD(6) +BALL_FRAME_ANIMCMD(7) + +static const union AnimCmd *const sBallAnimCmds[] = { + sBallAnimCmd_0, + sBallAnimCmd_1, + sBallAnimCmd_2, + sBallAnimCmd_3, + sBallAnimCmd_4, + sBallAnimCmd_5, + sBallAnimCmd_6, + sBallAnimCmd_7, +}; + +static const struct SpriteTemplate sBallPokeballSpriteTemplate = { + .tileTag = TAG_BALL_POKEBALL, + .paletteTag = TAG_BALL_POKEBALL, + .oam = &sBallOamData, + .anims = sBallAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateBallSprite, +}; + +static const struct OamData sFlipperOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +#define FLIPPER_FRAME_ANIMCMD(n, flip) \ +static const union AnimCmd sFlipperAnimCmd_##n[] =\ +{\ + ANIMCMD_FRAME(((n) % 3) * 16, 0, .hFlip = (flip)),\ + ANIMCMD_END,\ +}; + +FLIPPER_FRAME_ANIMCMD(0, FALSE) +FLIPPER_FRAME_ANIMCMD(1, FALSE) +FLIPPER_FRAME_ANIMCMD(2, FALSE) +FLIPPER_FRAME_ANIMCMD(3, TRUE) +FLIPPER_FRAME_ANIMCMD(4, TRUE) +FLIPPER_FRAME_ANIMCMD(5, TRUE) + +static const union AnimCmd *const sFlipperAnimCmds[] = { + sFlipperAnimCmd_0, + sFlipperAnimCmd_1, + sFlipperAnimCmd_2, + sFlipperAnimCmd_3, + sFlipperAnimCmd_4, + sFlipperAnimCmd_5, +}; + +static const struct SpriteTemplate sFlipperSpriteTemplate = { + .tileTag = TAG_FLIPPER, + .paletteTag = TAG_FLIPPER, + .oam = &sFlipperOamData, + .anims = sFlipperAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFlipperSprite, +}; + +static const struct OamData sTimerDigitOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +#define TIMER_DIGIT_FRAME_ANIMCMD(n) \ +static const union AnimCmd sTimerDigitAnimCmd_##n[] =\ +{\ + ANIMCMD_FRAME((n) * 2, 0),\ + ANIMCMD_END,\ +}; + +TIMER_DIGIT_FRAME_ANIMCMD(0) +TIMER_DIGIT_FRAME_ANIMCMD(1) +TIMER_DIGIT_FRAME_ANIMCMD(2) +TIMER_DIGIT_FRAME_ANIMCMD(3) +TIMER_DIGIT_FRAME_ANIMCMD(4) +TIMER_DIGIT_FRAME_ANIMCMD(5) +TIMER_DIGIT_FRAME_ANIMCMD(6) +TIMER_DIGIT_FRAME_ANIMCMD(7) +TIMER_DIGIT_FRAME_ANIMCMD(8) +TIMER_DIGIT_FRAME_ANIMCMD(9) +TIMER_DIGIT_FRAME_ANIMCMD(10) + +static const union AnimCmd *const sTimerDigitAnimCmds[] = { + sTimerDigitAnimCmd_0, + sTimerDigitAnimCmd_1, + sTimerDigitAnimCmd_2, + sTimerDigitAnimCmd_3, + sTimerDigitAnimCmd_4, + sTimerDigitAnimCmd_5, + sTimerDigitAnimCmd_6, + sTimerDigitAnimCmd_7, + sTimerDigitAnimCmd_8, + sTimerDigitAnimCmd_9, + sTimerDigitAnimCmd_10, +}; + +static const struct SpriteTemplate sTimerDigitSpriteTemplate = { + .tileTag = TAG_TIMER_DIGIT, + .paletteTag = TAG_TIMER_DIGIT, + .oam = &sTimerDigitOamData, + .anims = sTimerDigitAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateTimerDigitSprite, +}; + +static const struct OamData sMeowthOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sMeowthAnimCmd_WalkRight[] = { + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sMeowthAnimCmd_WalkLeft[] = { + ANIMCMD_FRAME(0, 15, .hFlip = TRUE), + ANIMCMD_FRAME(16, 15, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sMeowthAnimCmd_HitRight[] = { + ANIMCMD_FRAME(32, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthAnimCmd_HitLeft[] = { + ANIMCMD_FRAME(32, 0, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthAnimCmd_Finish[] = { + ANIMCMD_FRAME(48, 30), + ANIMCMD_FRAME(64, 30), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sMeowthAnimCmds[] = { + sMeowthAnimCmd_WalkRight, + sMeowthAnimCmd_WalkLeft, + sMeowthAnimCmd_HitRight, + sMeowthAnimCmd_HitLeft, + sMeowthAnimCmd_Finish, +}; + +static const struct SpriteTemplate sMeowthSpriteTemplate = { + .tileTag = TAG_MEOWTH, + .paletteTag = TAG_MEOWTH, + .oam = &sMeowthOamData, + .anims = sMeowthAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateMeowthSprite, +}; + +static const struct OamData sMeowthJewelOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sMeowthJewelAnimCmd_Create[] = { + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(4, 20), + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelAnimCmd_Sparkle[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelAnimCmd_Disappear[] = { + ANIMCMD_FRAME(12, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(20, 1), + ANIMCMD_FRAME(24, 1), + ANIMCMD_FRAME(28, 1), + ANIMCMD_FRAME(24, 1), + ANIMCMD_FRAME(20, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(12, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sMeowthJewelAnimCmds[] = { + sMeowthJewelAnimCmd_Create, + sMeowthJewelAnimCmd_Sparkle, + sMeowthJewelAnimCmd_Disappear, +}; + +static const struct SpriteTemplate sMeowthJewelSpriteTemplate = { + .tileTag = TAG_MEOWTH_JEWEL, + .paletteTag = TAG_MEOWTH_JEWEL, + .oam = &sMeowthJewelOamData, + .anims = sMeowthJewelAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateMeowthJewelSprite, +}; + +static const struct OamData sMeowthJewelMultiplierOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_2x[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_3x[] = { + ANIMCMD_FRAME(2, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_4x[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_5x[] = { + ANIMCMD_FRAME(6, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_6x[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sMeowthJewelMultiplierAnimCmds[] = { + sMeowthJewelMultiplierAnimCmd_2x, + sMeowthJewelMultiplierAnimCmd_3x, + sMeowthJewelMultiplierAnimCmd_4x, + sMeowthJewelMultiplierAnimCmd_5x, + sMeowthJewelMultiplierAnimCmd_6x, +}; + +static const struct SpriteTemplate sMeowthJewelMultiplierSpriteTemplate = { + .tileTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, + .paletteTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, + .oam = &sMeowthJewelMultiplierOamData, + .anims = sMeowthJewelMultiplierAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateMeowthJewelMultiplierSprite, +}; + +static const struct OamData sMeowthJewelSparkleOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sMeowthJewelSparkleAnimCmd_0[] = { + ANIMCMD_FRAME(0, 11), + ANIMCMD_FRAME(1, 11), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sMeowthJewelSparkleAnimCmds[] = { + sMeowthJewelSparkleAnimCmd_0, +}; + +static const struct SpriteTemplate sMeowthJewelSparkleSpriteTemplate = { + .tileTag = TAG_TILES_MEOWTH_JEWEL_SPARKLE, + .paletteTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, + .oam = &sMeowthJewelSparkleOamData, + .anims = sMeowthJewelSparkleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateMeowthJewelSparkleSprite, +}; + +static const u8 sDiglettStateTiles[][4] = { + [DIGLETT_STATE_INIT] = {0x4C, 0x4D, 0x4E, 0x4F}, + [DIGLETT_STATE_HIDDEN] = {0x4C, 0x4D, 0x4E, 0x4F}, + [DIGLETT_STATE_IDLE_0] = {0x3C, 0x3D, 0x3E, 0x3F}, + [DIGLETT_STATE_IDLE_1] = {0x44, 0x45, 0x46, 0x47}, + [DIGLETT_STATE_IDLE_2] = {0x3C, 0x3D, 0x3E, 0x3F}, + [DIGLETT_STATE_IDLE_3] = {0x40, 0x41, 0x42, 0x43}, + [DIGLETT_STATE_HIT_0] = {0x48, 0x49, 0x4A, 0x4B}, + [DIGLETT_STATE_HIT_1] = {0x48, 0x49, 0x4A, 0x4B}, + [DIGLETT_STATE_HIT_2] = {0x48, 0x49, 0x4A, 0x4B}, +}; + +static const u8 sDiglettCoords[NUM_DIGLETTS][2] = { + {1, 3}, + {1, 5}, + {1, 7}, + {3, 4}, + {3, 6}, + {3, 8}, + {5, 3}, + {5, 5}, + {5, 7}, + {5, 9}, + {7, 4}, + {7, 6}, + {7, 8}, + {7, 10}, + {9, 5}, + {9, 7}, + {9, 9}, + {11, 4}, + {11, 6}, + {11, 8}, + {11, 10}, + {13, 3}, + {13, 5}, + {13, 7}, + {13, 9}, + {15, 4}, + {15, 6}, + {15, 8}, + {17, 3}, + {17, 5}, + {17, 7}, +}; + +static const u8 sDiglettInitOrder[NUM_DIGLETTS] = { 0, 28, 1, 29, 3, 25, 6, 21, 2, 30, 4, 26, 7, 22, 10, 17, 5, 27, 8, 23, 11, 18, 14, 9, 24, 12, 19, 15, 13, 20, 16 }; + +static const struct OamData sDugtrioOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sDugtrioAnimCmd_Hidden[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sDugtrioAnimCmd_3Alive[] = { + ANIMCMD_FRAME(16, 14), + ANIMCMD_FRAME(32, 14), + ANIMCMD_FRAME(48, 14), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sDugtrioAnimCmd_3AliveHit[] = { + ANIMCMD_FRAME(64, 12), + ANIMCMD_END, +}; + +static const union AnimCmd sDugtrioAnimCmd_2Alive[] = { + ANIMCMD_FRAME(80, 14), + ANIMCMD_FRAME(96, 14), + ANIMCMD_FRAME(112, 14), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sDugtrioAnimCmd_2AliveHit[] = { + ANIMCMD_FRAME(128, 12), + ANIMCMD_END, +}; + +static const union AnimCmd sDugtrioAnimCmd_1Alive[] = { + ANIMCMD_FRAME(144, 14), + ANIMCMD_FRAME(160, 28), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sDugtrioAnimCmd_1AliveHit[] = { + ANIMCMD_FRAME(176, 12), + ANIMCMD_END, +}; + +static const union AnimCmd sDugtrioAnimCmd_0Alive[] = { + ANIMCMD_FRAME(192, 33), // We want a duration of 66 frames, but 63 is the maximum an ANIMCMD_FRAME can hold. + ANIMCMD_FRAME(192, 33), + ANIMCMD_END, +}; + +static const union AnimCmd *const sDugtrioAnimCmds[] = { + sDugtrioAnimCmd_Hidden, + sDugtrioAnimCmd_3Alive, + sDugtrioAnimCmd_3AliveHit, + sDugtrioAnimCmd_2Alive, + sDugtrioAnimCmd_2AliveHit, + sDugtrioAnimCmd_1Alive, + sDugtrioAnimCmd_1AliveHit, + sDugtrioAnimCmd_0Alive, +}; + +static const struct SpriteTemplate sDugtrioSpriteTemplate = { + .tileTag = TAG_DUGTRIO, + .paletteTag = TAG_DUGTRIO, + .oam = &sDugtrioOamData, + .anims = sDugtrioAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateDugtrioSprite, +}; + +static const struct OamData sSeelOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSeelAnimCmd_SwimRight[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 13), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 12), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sSeelAnimCmd_TurnLeft[] = { + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(64, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_SwimLeft[] = { + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(16, 13, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(32, 12, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sSeelAnimCmd_TurnRight[] = { + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE), + ANIMCMD_FRAME(80, 6, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_EmergeRight[] = { + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(144, 8), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_EmergeLeft[] = { + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(144, 8), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_Visible[] = { + ANIMCMD_FRAME(160, 30), + ANIMCMD_FRAME(176, 30), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sSeelAnimCmd_SubmergeRight[] = { + ANIMCMD_FRAME(144, 9), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(192, 6), + ANIMCMD_FRAME(224, 16), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(64, 4, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_SubmergeLeft[] = { + ANIMCMD_FRAME(144, 9), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(192, 6), + ANIMCMD_FRAME(224, 16), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_HitRight[] = { + ANIMCMD_FRAME(208, 16), + ANIMCMD_FRAME(192, 6), + ANIMCMD_FRAME(224, 16), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(64, 4, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_HitLeft[] = { + ANIMCMD_FRAME(208, 16), + ANIMCMD_FRAME(192, 6), + ANIMCMD_FRAME(224, 16), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSeelAnimCmds[] = { + sSeelAnimCmd_SwimRight, + sSeelAnimCmd_TurnLeft, + sSeelAnimCmd_SwimLeft, + sSeelAnimCmd_TurnRight, + sSeelAnimCmd_EmergeRight, + sSeelAnimCmd_EmergeLeft, + sSeelAnimCmd_Visible, + sSeelAnimCmd_SubmergeRight, + sSeelAnimCmd_SubmergeLeft, + sSeelAnimCmd_HitRight, + sSeelAnimCmd_HitLeft, +}; + +static const struct SpriteTemplate sSeelSpriteTemplate = { + .tileTag = TAG_SEEL, + .paletteTag = TAG_SEEL, + .oam = &sSeelOamData, + .anims = sSeelAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSeelSprite, +}; + +static const u8 sInitialSeelStates[NUM_SEELS] = { + SEEL_STATE_SWIM_RIGHT, + SEEL_STATE_SWIM_LEFT, + SEEL_STATE_SWIM_RIGHT, +}; + +static const u8 sInitialSeelCoords[NUM_SEELS][2] = { + {110, 30}, + {46, 56}, + {78, 82}, +}; + +static const struct OamData sSeelSparkleOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSeelSparkleAnimCmd_0[] = { + ANIMCMD_FRAME(0, 11), + ANIMCMD_FRAME(1, 11), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sSeelSparkleAnimCmds[] = { + sSeelSparkleAnimCmd_0, +}; + +static const struct SpriteTemplate sSeelSparkleSpriteTemplate = { + .tileTag = TAG_SEEL_SPARKLE, + .paletteTag = TAG_SEEL_SPARKLE, + .oam = &sSeelSparkleOamData, + .anims = sSeelSparkleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSeelSparkleSprite, +}; + +static const struct OamData sSeelMultiplierOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_2x[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_3x[] = { + ANIMCMD_FRAME(2, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_4x[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_5x[] = { + ANIMCMD_FRAME(6, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_6x[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_7x[] = { + ANIMCMD_FRAME(10, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_8x[] = { + ANIMCMD_FRAME(12, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSeelMultiplierAnimCmds[] = { + sSeelMultiplierAnimCmd_2x, + sSeelMultiplierAnimCmd_3x, + sSeelMultiplierAnimCmd_4x, + sSeelMultiplierAnimCmd_5x, + sSeelMultiplierAnimCmd_6x, + sSeelMultiplierAnimCmd_7x, + sSeelMultiplierAnimCmd_8x, +}; + +static const struct SpriteTemplate sSeelMultiplierSpriteTemplate = { + .tileTag = TAG_SEEL_MULTIPLIER, + .paletteTag = TAG_SEEL_MULTIPLIER, + .oam = &sSeelMultiplierOamData, + .anims = sSeelMultiplierAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSeelMultiplierSprite, +}; + +static const struct OamData sGastlyOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sGastlyAnimCmd_Visible[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sGastlyAnimCmd_Hit[] = { + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(32, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sGastlyAnimCmds[] = { + sGastlyAnimCmd_Visible, + sGastlyAnimCmd_Hit, +}; + +static const struct SpriteTemplate sGastlySpriteTemplate = { + .tileTag = TAG_GASTLY, + .paletteTag = TAG_GASTLY, + .oam = &sGastlyOamData, + .anims = sGastlyAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateGastlySprite, +}; + +static const struct OamData sHaunterOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sHaunterAnimCmd_Visible[] = { + ANIMCMD_FRAME(0, 13), + ANIMCMD_FRAME(64, 13), + ANIMCMD_FRAME(128, 13), + ANIMCMD_FRAME(192, 13), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sHaunterAnimCmd_Hit[] = { + ANIMCMD_FRAME(256, 8), + ANIMCMD_FRAME(320, 4), + ANIMCMD_FRAME(256, 4), + ANIMCMD_FRAME(320, 4), + ANIMCMD_FRAME(256, 3), + ANIMCMD_FRAME(320, 3), + ANIMCMD_FRAME(256, 3), + ANIMCMD_FRAME(320, 3), + ANIMCMD_FRAME(256, 2), + ANIMCMD_FRAME(320, 2), + ANIMCMD_FRAME(256, 2), + ANIMCMD_FRAME(320, 2), + ANIMCMD_FRAME(256, 1), + ANIMCMD_FRAME(320, 1), + ANIMCMD_FRAME(256, 1), + ANIMCMD_FRAME(320, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sHaunterAnimCmds[] = { + sHaunterAnimCmd_Visible, + sHaunterAnimCmd_Hit, +}; + +static const struct SpriteTemplate sHaunterSpriteTemplate = { + .tileTag = TAG_HAUNTER, + .paletteTag = TAG_HAUNTER, + .oam = &sHaunterOamData, + .anims = sHaunterAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateHaunterSprite, +}; + +static const struct OamData sGengarOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sGengarAnimCmd_Stand[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sGengarAnimCmd_StepLeft[] = { + ANIMCMD_FRAME(64, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sGengarAnimCmd_StepRight[] = { + ANIMCMD_FRAME(128, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sGengarAnimCmd_Hit[] = { + ANIMCMD_FRAME(192, 16), + ANIMCMD_FRAME(64, 32), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_END, +}; + +static const union AnimCmd sGengarAnimCmd_Leave[] = { + ANIMCMD_FRAME(192, 16), + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(320, 8), + ANIMCMD_FRAME(384, 12), + ANIMCMD_FRAME(320, 10), + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(320, 8), + ANIMCMD_FRAME(384, 12), + ANIMCMD_FRAME(320, 10), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sGengarAnimCmds[] = { + sGengarAnimCmd_Stand, + sGengarAnimCmd_StepLeft, + sGengarAnimCmd_StepRight, + sGengarAnimCmd_Hit, + sGengarAnimCmd_Leave, +}; + +static const struct SpriteTemplate sGengarSpriteTemplate = { + .tileTag = TAG_GENGAR, + .paletteTag = TAG_GENGAR, + .oam = &sGengarOamData, + .anims = sGengarAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateGengarSprite, +}; + +static const u8 sGengarGravestoneCollisionAttributes[] = {0x19, 0x1A, 0x1B, 0x1C, 0x27, 0x1D, 0x1E, 0x1F, 0x20}; + +static const u8 sGengarGravestoneCoords[][2] = { + {8, 5}, + {15, 4}, + {4, 8}, + {14, 9}, +}; + +static const u8 sInitialGastlyData[NUM_GASTLY][5] = { + {24, 24, GHOST_DIR_RIGHT, 24, 64}, + {96, 48, GHOST_DIR_RIGHT, 96, 136}, + {64, 72, GHOST_DIR_RIGHT, 64, 96}, +}; + +static const u8 sInitialHaunterData[NUM_HAUNTER][5] = { + {94, 30, GHOST_DIR_RIGHT, 94, 134}, + {30, 66, GHOST_DIR_RIGHT, 30, 70}, +}; + +static const s8 sCollisionTestPointOffsets[][2] = { + { 4, 0 }, + { 4, 1 }, + { 3, 3 }, + { 1, 4 }, + { 0, 4 }, + { -1, 4 }, + { -3, 3 }, + { -4, 1 }, + { -4, 0 }, + { -4, -1 }, + { -3, -3 }, + { -1, -4 }, + { 0, -4 }, + { 1, -4 }, + { 3, -3 }, + { 4, -1 }, +}; + +// This array is indexed by the start and end indexes of the 16 collision point tests. +// The values here are on a 256-degree'd unit circle, where an angle of 0x00 is pointing +// directly up, 0x40 is pointing directly right, 0x80 is pointing directly down, and +// 0xC0 is pointing directly left. +static const u8 sCollisionNormals[256] = { + 0xC0, 0xC5, 0xD0, 0xDB, 0xE0, 0xE5, 0xF0, 0xFB, 0x00, 0x05, 0x10, 0x1B, 0x20, 0x25, 0x30, 0x3B, // 0x0X + 0x45, 0xCA, 0xD5, 0xE0, 0xE5, 0xEA, 0xF5, 0x00, 0x05, 0x0A, 0x15, 0x20, 0x25, 0x2A, 0x35, 0x40, // 0x1X + 0x50, 0x55, 0xE0, 0xEB, 0xF0, 0xF5, 0x00, 0x0B, 0x10, 0x15, 0x20, 0x2B, 0x30, 0x35, 0x40, 0x4B, // 0x2X + 0x5B, 0x60, 0x6B, 0xF6, 0xFB, 0x00, 0x0B, 0x16, 0x1B, 0x20, 0x2B, 0x36, 0x3B, 0x40, 0x4B, 0x56, // 0x3X + 0x60, 0x65, 0x70, 0x7B, 0x00, 0x05, 0x10, 0x1B, 0x20, 0x25, 0x30, 0x3B, 0x40, 0x45, 0x50, 0x5B, // 0x4X + 0x65, 0x6A, 0x75, 0x80, 0x85, 0x0A, 0x15, 0x20, 0x25, 0x2A, 0x35, 0x40, 0x45, 0x4A, 0x55, 0x60, // 0x5X + 0x70, 0x75, 0x80, 0x8B, 0x90, 0x95, 0x20, 0x2B, 0x30, 0x35, 0x40, 0x4B, 0x50, 0x55, 0x60, 0x6B, // 0x6X + 0x7B, 0x80, 0x8B, 0x96, 0x9B, 0xA0, 0xAB, 0x36, 0x3B, 0x40, 0x4B, 0x56, 0x5B, 0x60, 0x6B, 0x76, // 0x7X + 0x80, 0x85, 0x90, 0x9B, 0xA0, 0xA5, 0xB0, 0xBB, 0x40, 0x45, 0x50, 0x5B, 0x60, 0x65, 0x70, 0x7B, // 0x8X + 0x85, 0x8A, 0x95, 0xA0, 0xA5, 0xAA, 0xB5, 0xC0, 0xC5, 0x4A, 0x55, 0x60, 0x65, 0x6A, 0x75, 0x80, // 0x9X + 0x90, 0x95, 0xA0, 0xAB, 0xB0, 0xB5, 0xC0, 0xCB, 0xD0, 0xD5, 0x60, 0x6B, 0x70, 0x75, 0x80, 0x8B, // 0xAX + 0x9B, 0xA0, 0xAB, 0xB6, 0xBB, 0xC0, 0xCB, 0xD6, 0xDB, 0xE0, 0xEB, 0x76, 0x7B, 0x80, 0x8B, 0x96, // 0xBX + 0xA0, 0xA5, 0xB0, 0xBB, 0xC0, 0xC5, 0xD0, 0xDB, 0xE0, 0xE5, 0xF0, 0xFB, 0x80, 0x85, 0x90, 0x9B, // 0xCX + 0xA5, 0xAA, 0xB5, 0xC0, 0xC5, 0xCA, 0xD5, 0xE0, 0xE5, 0xEA, 0xF5, 0x00, 0x05, 0x8A, 0x95, 0xA0, // 0xDX + 0xB0, 0xB5, 0xC0, 0xCB, 0xD0, 0xD5, 0xE0, 0xEB, 0xF0, 0xF5, 0x00, 0x0B, 0x10, 0x15, 0xA0, 0xAB, // 0xEX + 0xBB, 0xC0, 0xCB, 0xD6, 0xDB, 0xE0, 0xEB, 0xF6, 0xFB, 0x00, 0x0B, 0x16, 0x1B, 0x20, 0x2B, 0xB6, // 0xFX +}; + +// This array is indexed by the start and end indexes of the 16 collision point tests. +// It is used to move the ball out of the the wall it's colliding with. +static const u16 sCollisionXDeltas[256] = { + 0xFF00, 0xFEFB, 0xFECC, 0xFE8C, 0xFE77, 0xFE71, 0xFEAD, 0xFF73, 0x0000, 0x00AC, 0x027F, 0x0497, 0x0589, 0x066D, 0x0808, 0x08E7, // 0x0X + 0x08E7, 0xFF08, 0xFF01, 0xFEE4, 0xFEDE, 0xFEE3, 0xFF32, 0x0000, 0x008D, 0x0137, 0x02FD, 0x04FD, 0x05E1, 0x06B6, 0x082C, 0x08E1, // 0x1X + 0x0808, 0x07B4, 0xFF4B, 0xFF70, 0xFF81, 0xFF99, 0x0000, 0x00CE, 0x0153, 0x01F0, 0x0389, 0x0547, 0x0608, 0x06B8, 0x07D4, 0x082C, // 0x2X + 0x066D, 0x05F6, 0x045D, 0xFFC2, 0xFFE0, 0x0000, 0x0067, 0x011D, 0x018F, 0x0214, 0x036C, 0x04D9, 0x0572, 0x05F8, 0x06B8, 0x06B6, // 0x3X + 0x0589, 0x0504, 0x0353, 0x0119, 0x0000, 0x0020, 0x007F, 0x0122, 0x0189, 0x0200, 0x0334, 0x0479, 0x04FF, 0x0572, 0x0608, 0x05E1, // 0x4X + 0x0497, 0x0406, 0x0243, 0x0000, 0xFEE7, 0x003E, 0x0090, 0x011C, 0x0174, 0x01DC, 0x02EB, 0x0407, 0x0479, 0x04D9, 0x0547, 0x04FD, // 0x5X + 0x027F, 0x01DC, 0x0000, 0xFDBD, 0xFCAD, 0xFBA3, 0x00B5, 0x00FF, 0x0134, 0x0176, 0x022B, 0x02EB, 0x0334, 0x036C, 0x0389, 0x02FD, // 0x6X + 0x00AC, 0x0000, 0xFE24, 0xFBFA, 0xFAFC, 0xFA0A, 0xF84C, 0x00F8, 0x0105, 0x011E, 0x0176, 0x01DC, 0x0200, 0x0214, 0x01F0, 0x0137, // 0x7X + 0x0000, 0xFF54, 0xFD81, 0xFB69, 0xFA77, 0xF993, 0xF7F8, 0xF719, 0x0100, 0x0105, 0x0134, 0x0174, 0x0189, 0x018F, 0x0153, 0x008D, // 0x8X + 0xFF73, 0xFEC9, 0xFD03, 0xFB03, 0xFA1F, 0xF94A, 0xF7D4, 0xF71F, 0xF719, 0x00F8, 0x00FF, 0x011C, 0x0122, 0x011D, 0x00CE, 0x0000, // 0x9X + 0xFEAD, 0xFE10, 0xFC77, 0xFAB9, 0xF9F8, 0xF948, 0xF82C, 0xF7D4, 0xF7F8, 0xF84C, 0x00B5, 0x0090, 0x007F, 0x0067, 0x0000, 0xFF32, // 0xAX + 0xFE71, 0xFDEC, 0xFC94, 0xFB27, 0xFA8E, 0xFA08, 0xF948, 0xF94A, 0xF993, 0xFA0A, 0xFBA3, 0x003E, 0x0020, 0x0000, 0xFF99, 0xFEE3, // 0xBX + 0xFE77, 0xFE00, 0xFCCC, 0xFB87, 0xFB01, 0xFA8E, 0xF9F8, 0xFA1F, 0xFA77, 0xFAFC, 0xFCAD, 0xFEE7, 0x0000, 0xFFE0, 0xFF81, 0xFEDE, // 0xCX + 0xFE8C, 0xFE24, 0xFD15, 0xFBF9, 0xFB87, 0xFB27, 0xFAB9, 0xFB03, 0xFB69, 0xFBFA, 0xFDBD, 0x0000, 0x0119, 0xFFC2, 0xFF70, 0xFEE4, // 0xDX + 0xFECC, 0xFE8A, 0xFDD5, 0xFD15, 0xFCCC, 0xFC94, 0xFC77, 0xFD03, 0xFD81, 0xFE24, 0x0000, 0x0243, 0x0353, 0x045D, 0xFF4B, 0xFF01, // 0xEX + 0xFEFB, 0xFEE2, 0xFE8A, 0xFE24, 0xFE00, 0xFDEC, 0xFE10, 0xFEC9, 0xFF54, 0x0000, 0x01DC, 0x0406, 0x0504, 0x05F6, 0x07B4, 0xFF08, // 0xFX +}; + +// This array is indexed by the start and end indexes of the 16 collision point tests. +// It is used to move the ball out of the the wall it's colliding with. +static const u16 sCollisionYDeltas[256] = { + 0x0000, 0xFFE0, 0xFF81, 0xFEDE, 0xFE77, 0xFE00, 0xFCCC, 0xFB87, 0xFB01, 0xFA8E, 0xF9F8, 0xFA1F, 0xFA77, 0xFAFC, 0xFCAD, 0xFEE7, // 0x0X + 0x0119, 0xFFC2, 0xFF70, 0xFEE4, 0xFE8C, 0xFE24, 0xFD15, 0xFBF9, 0xFB87, 0xFB27, 0xFAB9, 0xFB03, 0xFB69, 0xFBFA, 0xFDBD, 0x0000, // 0x1X + 0x0353, 0x045D, 0xFF4B, 0xFF01, 0xFECC, 0xFE8A, 0xFDD5, 0xFD15, 0xFCCC, 0xFC94, 0xFC77, 0xFD03, 0xFD81, 0xFE24, 0x0000, 0x0243, // 0x2X + 0x0504, 0x05F6, 0x07B4, 0xFF08, 0xFEFB, 0xFEE2, 0xFE8A, 0xFE24, 0xFE00, 0xFDEC, 0xFE10, 0xFEC9, 0xFF54, 0x0000, 0x01DC, 0x0406, // 0x3X + 0x0589, 0x066D, 0x0808, 0x08E7, 0xFF00, 0xFEFB, 0xFECC, 0xFE8C, 0xFE77, 0xFE71, 0xFEAD, 0xFF73, 0x0000, 0x00AC, 0x027F, 0x0497, // 0x4X + 0x05E1, 0x06B6, 0x082C, 0x08E1, 0x08E7, 0xFF08, 0xFF01, 0xFEE4, 0xFEDE, 0xFEE3, 0xFF32, 0x0000, 0x008D, 0x0137, 0x02FD, 0x04FD, // 0x5X + 0x0608, 0x06B8, 0x07D4, 0x082C, 0x0808, 0x07B4, 0xFF4B, 0xFF70, 0xFF81, 0xFF99, 0x0000, 0x00CE, 0x0153, 0x01F0, 0x0389, 0x0547, // 0x6X + 0x0572, 0x05F8, 0x06B8, 0x06B6, 0x066D, 0x05F6, 0x045D, 0xFFC2, 0xFFE0, 0x0000, 0x0067, 0x011D, 0x018F, 0x0214, 0x036C, 0x04D9, // 0x7X + 0x04FF, 0x0572, 0x0608, 0x05E1, 0x0589, 0x0504, 0x0353, 0x0119, 0x0000, 0x0020, 0x007F, 0x0122, 0x0189, 0x0200, 0x0334, 0x0479, // 0x8X + 0x0479, 0x04D9, 0x0547, 0x04FD, 0x0497, 0x0406, 0x0243, 0x0000, 0xFEE7, 0x003E, 0x0090, 0x011C, 0x0174, 0x01DC, 0x02EB, 0x0407, // 0x9X + 0x0334, 0x036C, 0x0389, 0x02FD, 0x027F, 0x01DC, 0x0000, 0xFDBD, 0xFCAD, 0xFBA3, 0x00B5, 0x00FF, 0x0134, 0x0176, 0x022B, 0x02EB, // 0xAX + 0x0200, 0x0214, 0x01F0, 0x0137, 0x00AC, 0x0000, 0xFE24, 0xFBFA, 0xFAFC, 0xFA0A, 0xF84C, 0x00F8, 0x0105, 0x011E, 0x0176, 0x01DC, // 0xBX + 0x0189, 0x018F, 0x0153, 0x008D, 0x0000, 0xFF54, 0xFD81, 0xFB69, 0xFA77, 0xF993, 0xF7F8, 0xF719, 0x0100, 0x0105, 0x0134, 0x0174, // 0xCX + 0x0122, 0x011D, 0x00CE, 0x0000, 0xFF73, 0xFEC9, 0xFD03, 0xFB03, 0xFA1F, 0xF94A, 0xF7D4, 0xF71F, 0xF719, 0x00F8, 0x00FF, 0x011C, // 0xDX + 0x007F, 0x0067, 0x0000, 0xFF32, 0xFEAD, 0xFE10, 0xFC77, 0xFAB9, 0xF9F8, 0xF948, 0xF82C, 0xF7D4, 0xF7F8, 0xF84C, 0x00B5, 0x0090, // 0xEX + 0x0020, 0x0000, 0xFF99, 0xFEE3, 0xFE71, 0xFDEC, 0xFC94, 0xFB27, 0xFA8E, 0xFA08, 0xF948, 0xF94A, 0xF993, 0xFA0A, 0xFBA3, 0x003E, // 0xFX +}; + +static const u16 sFlipperRadiusMagnitudes[32] = { + 0x0000, 0x000C, 0x001C, 0x0030, 0x0038, 0x0048, 0x005C, 0x006C, 0x0070, 0x0080, 0x0094, 0x00A4, 0x00B4, 0x00C4, 0x00D4, 0x00E4, + 0x00F8, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, +}; + +static const s16 sTiltLeftOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_left_deltas.bin"); +static const s16 sTiltRightOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_right_deltas.bin"); +static const s16 sTiltDownOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_deltas.bin"); +static const s16 sTiltDownRightVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_right_deltas.bin"); +static const s16 sTiltDownLeftVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_left_deltas.bin"); + +static const s16 *const sTiltVelocityDeltas[] = { + NULL, + sTiltLeftOnlyVelocityDeltas, + sTiltRightOnlyVelocityDeltas, + NULL, + sTiltDownOnlyVelocityDeltas, + sTiltDownLeftVelocityDeltas, + sTiltDownRightVelocityDeltas, + sTiltDownOnlyVelocityDeltas, +}; + +//void PlayMeowthPinballGame(void) +//{ +// PlayPinballGame(GAME_TYPE_MEOWTH); +//} + +void PlayPachinko(void) +{ + PlayPinballGame(GAME_TYPE_DIGLETT); +} + +//void PlaySeelPinballGame(void) +//{ +// PlayPinballGame(GAME_TYPE_SEEL); +//} + +//void PlayGengarPinballGame(void) +//{ +// PlayPinballGame(GAME_TYPE_GENGAR); +//} + +static void SetPlayerDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place + + for (i = 0; i < 4; i++) // Always show 4 digits + { + u8 digit = num / d; + + // Show the digit (all digits are visible) + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = FALSE; + + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } + + // Set the tileNum based on the current digit + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.tileNum = + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreatePlayerSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PlayerInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS] = CreateSprite(&sSpriteTemplate_PlayerDigit, i * 7 + 198, 127, 2); + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; + } +} + +static void PlayPinballGame(u8 gameType) +{ + u8 taskId; + + ScriptContext_Stop(); + sPinballGame = AllocZeroed(sizeof(*sPinballGame)); + sPinballGame->gameType = gameType; + sPinballGame->returnMainCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; + taskId = CreateTask(FadeToPinballScreen, 0); +} + +static void FadeToPinballScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + SetMainCallback2(InitPinballScreen); + DestroyTask(taskId); + } + break; + } +} + +static void RandomLevel(void) +{ + struct Diglett *diglett = &sPinballGame->diglett; + + if (sScore->Level == 1) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_01_BgTilemap, sizeof(sLevel_01_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_01_BgCollisionMap, ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); + } + else if (sScore->Level == 2) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_02_BgTilemap, sizeof(sLevel_02_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_02_BgCollisionMap) * sizeof(sLevel_02_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_02_BgCollisionMap, ARRAY_COUNT(sLevel_02_BgCollisionMap) * sizeof(sLevel_02_BgCollisionMap[0])); + } + else if (sScore->Level == 3) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_03_BgTilemap, sizeof(sLevel_03_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_03_BgCollisionMap) * sizeof(sLevel_03_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_03_BgCollisionMap, ARRAY_COUNT(sLevel_03_BgCollisionMap) * sizeof(sLevel_03_BgCollisionMap[0])); + } + else if (sScore->Level == 4) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_04_BgTilemap, sizeof(sLevel_04_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_04_BgCollisionMap) * sizeof(sLevel_04_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_04_BgCollisionMap, ARRAY_COUNT(sLevel_04_BgCollisionMap) * sizeof(sLevel_04_BgCollisionMap[0])); + } + else if (sScore->Level == 5) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_05_BgTilemap, sizeof(sLevel_05_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_05_BgCollisionMap) * sizeof(sLevel_05_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_05_BgCollisionMap, ARRAY_COUNT(sLevel_05_BgCollisionMap) * sizeof(sLevel_05_BgCollisionMap[0])); + } + else if (sScore->Level == 6) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_06_BgTilemap, sizeof(sLevel_06_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_06_BgCollisionMap) * sizeof(sLevel_06_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_06_BgCollisionMap, ARRAY_COUNT(sLevel_06_BgCollisionMap) * sizeof(sLevel_06_BgCollisionMap[0])); + } + else if (sScore->Level == 7) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_07_BgTilemap, sizeof(sLevel_07_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_07_BgCollisionMap) * sizeof(sLevel_07_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_07_BgCollisionMap, ARRAY_COUNT(sLevel_07_BgCollisionMap) * sizeof(sLevel_07_BgCollisionMap[0])); + } + else if (sScore->Level == 8) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_08_BgTilemap, sizeof(sLevel_08_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_08_BgCollisionMap) * sizeof(sLevel_08_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_08_BgCollisionMap, ARRAY_COUNT(sLevel_08_BgCollisionMap) * sizeof(sLevel_08_BgCollisionMap[0])); + } + else if (sScore->Level == 9) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_09_BgTilemap, sizeof(sLevel_09_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_09_BgCollisionMap) * sizeof(sLevel_09_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_09_BgCollisionMap, ARRAY_COUNT(sLevel_09_BgCollisionMap) * sizeof(sLevel_09_BgCollisionMap[0])); + } + else if (sScore->Level == 10) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_10_BgTilemap, sizeof(sLevel_10_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_10_BgCollisionMap) * sizeof(sLevel_10_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_10_BgCollisionMap, ARRAY_COUNT(sLevel_10_BgCollisionMap) * sizeof(sLevel_10_BgCollisionMap[0])); + } + else if (sScore->Level == 11) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_11_BgTilemap, sizeof(sLevel_11_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_11_BgCollisionMap) * sizeof(sLevel_11_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_11_BgCollisionMap, ARRAY_COUNT(sLevel_11_BgCollisionMap) * sizeof(sLevel_11_BgCollisionMap[0])); + } + else if (sScore->Level == 12) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_12_BgTilemap, sizeof(sLevel_12_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_12_BgCollisionMap) * sizeof(sLevel_12_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_12_BgCollisionMap, ARRAY_COUNT(sLevel_12_BgCollisionMap) * sizeof(sLevel_12_BgCollisionMap[0])); + } + else if (sScore->Level == 13) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_13_BgTilemap, sizeof(sLevel_13_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_13_BgCollisionMap) * sizeof(sLevel_13_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_13_BgCollisionMap, ARRAY_COUNT(sLevel_13_BgCollisionMap) * sizeof(sLevel_13_BgCollisionMap[0])); + } + else if (sScore->Level == 14) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_14_BgTilemap, sizeof(sLevel_14_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_14_BgCollisionMap) * sizeof(sLevel_14_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_14_BgCollisionMap, ARRAY_COUNT(sLevel_14_BgCollisionMap) * sizeof(sLevel_14_BgCollisionMap[0])); + } + else if (sScore->Level == 15) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_15_BgTilemap, sizeof(sLevel_15_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_15_BgCollisionMap) * sizeof(sLevel_15_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_15_BgCollisionMap, ARRAY_COUNT(sLevel_15_BgCollisionMap) * sizeof(sLevel_15_BgCollisionMap[0])); + } + else if (sScore->Level == 16) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_16_BgTilemap, sizeof(sLevel_16_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_16_BgCollisionMap) * sizeof(sLevel_16_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_16_BgCollisionMap, ARRAY_COUNT(sLevel_16_BgCollisionMap) * sizeof(sLevel_16_BgCollisionMap[0])); + } + else if (sScore->Level == 17) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_17_BgTilemap, sizeof(sLevel_17_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_17_BgCollisionMap) * sizeof(sLevel_17_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_17_BgCollisionMap, ARRAY_COUNT(sLevel_17_BgCollisionMap) * sizeof(sLevel_17_BgCollisionMap[0])); + } + else if (sScore->Level == 18) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_18_BgTilemap, sizeof(sLevel_18_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_18_BgCollisionMap) * sizeof(sLevel_18_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_18_BgCollisionMap, ARRAY_COUNT(sLevel_18_BgCollisionMap) * sizeof(sLevel_18_BgCollisionMap[0])); + } + else if (sScore->Level == 19) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_19_BgTilemap, sizeof(sLevel_19_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_19_BgCollisionMap) * sizeof(sLevel_19_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_19_BgCollisionMap, ARRAY_COUNT(sLevel_19_BgCollisionMap) * sizeof(sLevel_19_BgCollisionMap[0])); + } + else if (sScore->Level == 20) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_20_BgTilemap, sizeof(sLevel_20_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_20_BgCollisionMap) * sizeof(sLevel_20_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_20_BgCollisionMap, ARRAY_COUNT(sLevel_20_BgCollisionMap) * sizeof(sLevel_20_BgCollisionMap[0])); + } + else if (sScore->Level == 21) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_21_BgTilemap, sizeof(sLevel_21_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_21_BgCollisionMap) * sizeof(sLevel_21_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_21_BgCollisionMap, ARRAY_COUNT(sLevel_21_BgCollisionMap) * sizeof(sLevel_21_BgCollisionMap[0])); + } + else if (sScore->Level == 22) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_22_BgTilemap, sizeof(sLevel_22_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_22_BgCollisionMap) * sizeof(sLevel_22_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_22_BgCollisionMap, ARRAY_COUNT(sLevel_22_BgCollisionMap) * sizeof(sLevel_22_BgCollisionMap[0])); + } + else if (sScore->Level == 23) + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_23_BgTilemap, sizeof(sLevel_23_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_23_BgCollisionMap) * sizeof(sLevel_23_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_23_BgCollisionMap, ARRAY_COUNT(sLevel_23_BgCollisionMap) * sizeof(sLevel_23_BgCollisionMap[0])); + } + //else if (sScore->Level == 24) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_24_BgTilemap, sizeof(sLevel_24_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_24_BgCollisionMap) * sizeof(sLevel_24_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_24_BgCollisionMap, ARRAY_COUNT(sLevel_24_BgCollisionMap) * sizeof(sLevel_24_BgCollisionMap[0])); + //} + //else if (sScore->Level == 25) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_25_BgTilemap, sizeof(sLevel_25_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_25_BgCollisionMap) * sizeof(sLevel_25_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_25_BgCollisionMap, ARRAY_COUNT(sLevel_25_BgCollisionMap) * sizeof(sLevel_25_BgCollisionMap[0])); + //} + //else if (sScore->Level == 26) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_26_BgTilemap, sizeof(sLevel_26_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_26_BgCollisionMap) * sizeof(sLevel_26_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_26_BgCollisionMap, ARRAY_COUNT(sLevel_26_BgCollisionMap) * sizeof(sLevel_26_BgCollisionMap[0])); + //} + //else if (sScore->Level == 27) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_27_BgTilemap, sizeof(sLevel_27_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_27_BgCollisionMap) * sizeof(sLevel_27_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_27_BgCollisionMap, ARRAY_COUNT(sLevel_27_BgCollisionMap) * sizeof(sLevel_27_BgCollisionMap[0])); + //} + //else if (sScore->Level == 28) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_28_BgTilemap, sizeof(sLevel_28_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_28_BgCollisionMap) * sizeof(sLevel_28_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_28_BgCollisionMap, ARRAY_COUNT(sLevel_28_BgCollisionMap) * sizeof(sLevel_28_BgCollisionMap[0])); + //} + //else if (sScore->Level == 29) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_29_BgTilemap, sizeof(sLevel_29_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_29_BgCollisionMap) * sizeof(sLevel_29_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_29_BgCollisionMap, ARRAY_COUNT(sLevel_29_BgCollisionMap) * sizeof(sLevel_29_BgCollisionMap[0])); + //} + //else if (sScore->Level == 30) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_30_BgTilemap, sizeof(sLevel_30_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_30_BgCollisionMap) * sizeof(sLevel_30_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_30_BgCollisionMap, ARRAY_COUNT(sLevel_30_BgCollisionMap) * sizeof(sLevel_30_BgCollisionMap[0])); + //} + //else if (sScore->Level == 31) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_31_BgTilemap, sizeof(sLevel_31_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_31_BgCollisionMap) * sizeof(sLevel_31_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_31_BgCollisionMap, ARRAY_COUNT(sLevel_31_BgCollisionMap) * sizeof(sLevel_31_BgCollisionMap[0])); + //} + //else if (sScore->Level == 32) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_32_BgTilemap, sizeof(sLevel_32_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_32_BgCollisionMap) * sizeof(sLevel_32_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_32_BgCollisionMap, ARRAY_COUNT(sLevel_32_BgCollisionMap) * sizeof(sLevel_32_BgCollisionMap[0])); + //} + //else if (sScore->Level == 33) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_33_BgTilemap, sizeof(sLevel_33_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_33_BgCollisionMap) * sizeof(sLevel_33_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_33_BgCollisionMap, ARRAY_COUNT(sLevel_33_BgCollisionMap) * sizeof(sLevel_33_BgCollisionMap[0])); + //} + //else if (sScore->Level == 34) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_34_BgTilemap, sizeof(sLevel_34_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_34_BgCollisionMap) * sizeof(sLevel_34_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_34_BgCollisionMap, ARRAY_COUNT(sLevel_34_BgCollisionMap) * sizeof(sLevel_34_BgCollisionMap[0])); + //} + //else if (sScore->Level == 35) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_35_BgTilemap, sizeof(sLevel_35_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_35_BgCollisionMap) * sizeof(sLevel_35_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_35_BgCollisionMap, ARRAY_COUNT(sLevel_35_BgCollisionMap) * sizeof(sLevel_35_BgCollisionMap[0])); + //} + //else if (sScore->Level == 36) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_36_BgTilemap, sizeof(sLevel_36_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_36_BgCollisionMap) * sizeof(sLevel_36_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_36_BgCollisionMap, ARRAY_COUNT(sLevel_36_BgCollisionMap) * sizeof(sLevel_36_BgCollisionMap[0])); + //} + //else if (sScore->Level == 37) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_37_BgTilemap, sizeof(sLevel_37_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_37_BgCollisionMap) * sizeof(sLevel_37_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_37_BgCollisionMap, ARRAY_COUNT(sLevel_37_BgCollisionMap) * sizeof(sLevel_37_BgCollisionMap[0])); + //} + //else if (sScore->Level == 38) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_38_BgTilemap, sizeof(sLevel_38_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_38_BgCollisionMap) * sizeof(sLevel_38_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_38_BgCollisionMap, ARRAY_COUNT(sLevel_38_BgCollisionMap) * sizeof(sLevel_38_BgCollisionMap[0])); + //} + //else if (sScore->Level == 39) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_39_BgTilemap, sizeof(sLevel_39_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_39_BgCollisionMap) * sizeof(sLevel_39_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_39_BgCollisionMap, ARRAY_COUNT(sLevel_39_BgCollisionMap) * sizeof(sLevel_39_BgCollisionMap[0])); + //} + //else if (sScore->Level == 40) + //{ + // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_40_BgTilemap, sizeof(sLevel_40_BgTilemap), 0); + // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->completed = FALSE; + // diglett->numDiglettsHit = 0; + // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_40_BgCollisionMap) * sizeof(sLevel_40_BgCollisionMap[0])); + // memcpy(diglett->collisionMap, sLevel_40_BgCollisionMap, ARRAY_COUNT(sLevel_40_BgCollisionMap) * sizeof(sLevel_40_BgCollisionMap[0])); + //} + else + { + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_01_BgTilemap, sizeof(sLevel_01_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); + memcpy(diglett->collisionMap, sLevel_01_BgCollisionMap, ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); + } +} + + +static void LevelChange(void) +{ + sScore->Multiplier = 1; + gSprites[sScore->MultiplierSpriteId].animNum = 0; + InitBgsFromTemplates(0, sPinballBgTemplates, ARRAY_COUNT(sPinballBgTemplates)); + SetBgTilemapBuffer(PINBALL_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + LoadBgGfx(sPinballGame->gameType); +} + +static void DestroyWin(void) +{ + DestroySpriteAndFreeResources(&gSprites[sScore->WinSpriteId]); +} + +static void DestroyTitle(void) +{ + DestroySpriteAndFreeResources(&gSprites[sScore->TitleSpriteId]); + sScore->TitleDestroyed = 1; +} + +static void DestroyNewLevel(void) +{ + DestroySpriteAndFreeResources(&gSprites[sScore->NewLevelSpriteId]); +} + +static void CreateNewLevel(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes2); + LoadCompressedSpriteSheet(&sSpriteSheet_NewLevel); + + sScore->NewLevelSpriteId = CreateSprite(&sSpriteTemplate_NewLevel, 92, 82, 0); + //gSprites[sScore->WinSpriteId].invisible = TRUE; +} + +static void CreateWin(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes2); + LoadCompressedSpriteSheet(&sSpriteSheet_Win); + + sScore->WinSpriteId = CreateSprite(&sSpriteTemplate_Win, 92, 82, 0); + //gSprites[sScore->WinSpriteId].invisible = TRUE; +} + +static void CreateGameOver(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes2); + LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); + + sScore->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 92, 82, 0); + //gSprites[sScore->GameOverSpriteId].invisible = TRUE; +} + +static void CreateTitle(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Title); + + sScore->TitleSpriteId = CreateSprite(&sSpriteTemplate_Title, 92, 82, 0); +} + +static void CreateArrow(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Arrow); + + sScore->ArrowSpriteId = CreateSprite(&sSpriteTemplate_Arrow, 36, 20, 0); +} + +static void CreateLives(void) +{ + + s16 x = 4; + s16 y = 156; + s16 x2 = x + 8; + s16 x3 = x + 16; + s16 x4 = x + 24; + s16 x5 = x + 32; + + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Lives); + + sScore->Live1SpriteId = CreateSprite(&sSpriteTemplate_Lives, x, y, 0); + sScore->Live2SpriteId = CreateSprite(&sSpriteTemplate_Lives, x2, y, 0); + sScore->Live3SpriteId = CreateSprite(&sSpriteTemplate_Lives, x3, y, 0); + sScore->Live4SpriteId = CreateSprite(&sSpriteTemplate_Lives, x4, y, 0); + sScore->Live5SpriteId = CreateSprite(&sSpriteTemplate_Lives, x5, y, 0); +} + +static void UpdateLives(void) +{ + if (sScore->Lives == 5) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = FALSE; + gSprites[sScore->Live3SpriteId].invisible = FALSE; + gSprites[sScore->Live4SpriteId].invisible = FALSE; + gSprites[sScore->Live5SpriteId].invisible = FALSE; + } + else if (sScore->Lives == 4) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = FALSE; + gSprites[sScore->Live3SpriteId].invisible = FALSE; + gSprites[sScore->Live4SpriteId].invisible = FALSE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } + else if (sScore->Lives == 3) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = FALSE; + gSprites[sScore->Live3SpriteId].invisible = FALSE; + gSprites[sScore->Live4SpriteId].invisible = TRUE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } + else if (sScore->Lives == 2) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = FALSE; + gSprites[sScore->Live3SpriteId].invisible = TRUE; + gSprites[sScore->Live4SpriteId].invisible = TRUE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } + else if (sScore->Lives == 1) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = TRUE; + gSprites[sScore->Live3SpriteId].invisible = TRUE; + gSprites[sScore->Live4SpriteId].invisible = TRUE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } + else + { + gSprites[sScore->Live1SpriteId].invisible = TRUE; + gSprites[sScore->Live2SpriteId].invisible = TRUE; + gSprites[sScore->Live3SpriteId].invisible = TRUE; + gSprites[sScore->Live4SpriteId].invisible = TRUE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } +} + +static void CreateSpinarak(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Spinarak); + + sScore->SpinarakSpriteId = CreateSprite(&sSpriteTemplate_Spinarak, 208, 48, 0); +} + +static void CreateSpeed(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Speed); + + sScore->SpeedSpriteId = CreateSprite(&sSpriteTemplate_Speed, 208, 160, 0); +} + +static void CreateMultiplier(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Multiplier); + + sScore->MultiplierSpriteId = CreateSprite(&sSpriteTemplate_Multiplier, 208, 96, 0); +} + +static void ShowJackpot(void) +{ + u16 bet; + struct WindowTemplate template; + + + SetWindowTemplateFields(&template, 3, 17, 10, 10, 2, 0xF, 0x194); + + sTextWindowId = AddWindow(&template); + FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sTextWindowId); + LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); + DrawStdWindowFrame(sTextWindowId, FALSE); + bet = 50 * sScore->Multiplier; + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, 3); + //gStringVar4[0] = '\0'; + StringExpandPlaceholders(gStringVar4, sJackpotText); + AddTextPrinterParameterized(sTextWindowId, FONT_NARROW, gStringVar4, 0, 1, 0, 0); + CopyWindowToVram(sTextWindowId, 3); +} + +static void ShowWin(void) +{ + u16 bet; + struct WindowTemplate template; + + + SetWindowTemplateFields(&template, 3, 17, 10, 10, 2, 0xF, 0x194); + + sTextWindowId = AddWindow(&template); + FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sTextWindowId); + LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); + DrawStdWindowFrame(sTextWindowId, FALSE); + bet = 50 * sScore->Multiplier; + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, 3); + //gStringVar4[0] = '\0'; + StringExpandPlaceholders(gStringVar4, sWinText); + AddTextPrinterParameterized(sTextWindowId, FONT_NARROW, gStringVar4, 0, 1, 0, 0); + CopyWindowToVram(sTextWindowId, 3); +} + +static void ShowLose(void) +{ + struct WindowTemplate template; + + + SetWindowTemplateFields(&template, 3, 17, 10, 10, 2, 0xF, 0x194); + + sTextWindowId = AddWindow(&template); + FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sTextWindowId); + LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); + DrawStdWindowFrame(sTextWindowId, FALSE); + AddTextPrinterParameterized(sTextWindowId, FONT_NARROW, sLoseText, 0, 1, 0, 0); + CopyWindowToVram(sTextWindowId, 3); +} + +static void ResetMessage(void) +{ + ClearStdWindowAndFrame(sTextWindowId, TRUE); + RemoveWindow(sTextWindowId); +} + +static void InitPinballScreen(void) +{ + switch (gMain.state) + { + case 0: + sScore = AllocZeroed(sizeof(struct Credits)); + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + gMain.state++; + break; + case 1: + sScore->Level = ((Random() % 23) + 1); + sScore->LastLevel = sScore->Level; + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sPinballBgTemplates, ARRAY_COUNT(sPinballBgTemplates)); + //SetBgTilemapBuffer(PINBALL_BG_COVER, AllocZeroed(BG_SCREEN_SIZE)); + SetBgTilemapBuffer(PINBALL_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + LoadBgGfx(sPinballGame->gameType); + //InitWindows(sPinballWinTemplates); + //DeactivateAllTextPrinters(); + //LoadMessageBoxGfx(WIN_TEXT, 0x0, 0xF0); + //LoadUserWindowBorderGfx(WIN_TEXT, 0x14, 0xE0); + gMain.state++; + break; + case 2: + ResetSpriteData(); + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + //CopyBgTilemapBufferToVram(PINBALL_BG_COVER); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG3_ON); + //ShowBg(PINBALL_BG_TEXT); + //ShowBg(PINBALL_BG_COVER); + ShowBg(PINBALL_BG_BASE); + ShowBg(3); + gMain.state++; + break; + case 4: + sScore->StartSpeed = 0; + sScore->Lives = 5; + sScore->Multiplier = 1; + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->ArrowPosition = 0; + sScore->ArrowDirection = 0; + sScore->SecondDelay = 30; + LoadSpritePalettes(sSpritePalettes2); + CreateArrow(); + sScore->TitleDestroyed = 0; + sScore->TitleCounter = 140; + CreateTitle(); + //CreateGameOver(); + //CreateWin(); + CreateLives(); + CreateSpinarak(); + CreateSpeed(); + CreateMultiplier(); + CreatePlayerSprites(); + SetPlayerDigits(GetCoins()); + LoadCompressedSpriteSheet(&sBallPokeballSpriteSheet); + LoadSpritePalette(&sPinballSpritePalette); + //LoadCompressedSpriteSheet(&sFlipperSpriteSheet); + //LoadSpritePalette(&sFlipperSpritePalette); + LoadCompressedSpriteSheet(&sTimerDigitsSpriteSheet); + LoadSpritePalette(&sTimerDigitsSpritePalette); + LoadSpriteGfx(sPinballGame->gameType); + InitPinballGame(); + InitBallSprite(); + //InitFlipperSprites(); + InitTimerSprites(); + InitGameType(sPinballGame->gameType); + //StartNewBall(); + gMain.state++; + case 5: + // Center game in the middle of the screen + //SetGpuReg(REG_OFFSET_BG2HOFS, -40); + + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(PinballVBlankCallback); + SetMainCallback2(PinballMainCallback); + CreateTask(PinballMain, 0); + return; + } +} + +static void LoadBgGfx(u8 gameType) +{ + ResetPaletteFade(); + switch (gameType) + { + case GAME_TYPE_MEOWTH: + LoadBgTiles(PINBALL_BG_BASE, sMeowthStageBgGfx, sizeof(sMeowthStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sMeowthStageBgTilemap, sizeof(sMeowthStageBgTilemap), 0); + LoadPalette(sMeowthStageBgPalette, 0, sizeof(sMeowthStageBgPalette)); + break; + case GAME_TYPE_DIGLETT: + //DecompressAndLoadBgGfxUsingHeap(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0, 0); + RandomLevel(); + break; + case GAME_TYPE_SEEL: + LoadBgTiles(PINBALL_BG_BASE, sSeelStageBgGfx, sizeof(sSeelStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sSeelStageBgTilemap, sizeof(sSeelStageBgTilemap), 0); + LoadPalette(sSeelStageBgPalette, 0, sizeof(sSeelStageBgPalette)); + break; + case GAME_TYPE_GENGAR: + LoadBgTiles(PINBALL_BG_BASE, sGengarStageBgGfx, sizeof(sGengarStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sGengarStageBgTilemap, sizeof(sGengarStageBgTilemap), 0); + LoadPalette(sGengarStageBgPalette, 0, sizeof(sGengarStageBgPalette)); + break; + } + + //LoadBgTiles(PINBALL_BG_COVER, sCoverBgGfx, sizeof(sCoverBgGfx), 0); + //CopyToBgTilemapBuffer(PINBALL_BG_COVER, sCovergTilemap, sizeof(sCovergTilemap), 0); + //LoadPalette(sCoverBgPalette, 0x10, sizeof(sCoverBgPalette)); +} + +static void LoadSpriteGfx(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + LoadCompressedSpriteSheet(&sMeowthAnimationSpriteSheet); + LoadSpritePalette(&sMeowthAnimationSpritePalette); + LoadCompressedSpriteSheet(&sMeowthJewelSpriteSheet); + LoadSpritePalette(&sMeowthJewelSpritePalette); + LoadCompressedSpriteSheet(&sMeowthJewelMultipliersSpriteSheet); + LoadCompressedSpriteSheet(&sMeowthSparkleSpriteSheet); + LoadSpritePalette(&sMeowthJewelMultipliersSpritePalette); + break; + case GAME_TYPE_DIGLETT: + //LoadCompressedSpriteSheet(&sDugtrioAnimationSpriteSheet); + //LoadSpritePalette(&sDugtrioAnimationSpritePalette); + break; + case GAME_TYPE_SEEL: + LoadCompressedSpriteSheet(&sSeelAnimationSpriteSheet); + LoadSpritePalette(&sSeelAnimationSpritePalette); + LoadCompressedSpriteSheet(&sSeelSparkleSpriteSheet); + LoadSpritePalette(&sSeelSparkleSpritePalette); + LoadCompressedSpriteSheet(&sSeelMultipliersSpriteSheet); + LoadSpritePalette(&sSeelMultipliersSpritePalette); + break; + case GAME_TYPE_GENGAR: + LoadCompressedSpriteSheet(&sGastlyAnimationSpriteSheet); + LoadSpritePalette(&sGastlyAnimationSpritePalette); + LoadCompressedSpriteSheet(&sHaunterAnimationSpriteSheet); + LoadSpritePalette(&sHaunterAnimationSpritePalette); + break; + } +} + +static void InitPinballGame(void) +{ + sPinballGame->stageTileWidth = 32; + sPinballGame->stageTileHeight = 32; + sPinballGame->gravityEnabled = TRUE; + //sPinballGame->rightFlipper.type = FLIPPER_RIGHT; + //sPinballGame->rightFlipper.xPos = 93; + //sPinballGame->rightFlipper.yPos = 122; + //sPinballGame->leftFlipper.type = FLIPPER_LEFT; + //sPinballGame->leftFlipper.xPos = 67; + //sPinballGame->leftFlipper.yPos = 122; + sPinballGame->timer.ticks = GetTimerTicks(sPinballGame->gameType); + //sPinballGame->flippersDisabled = FALSE; + sPinballGame->cameraScrollX = -40; + sPinballGame->cameraScrollY = 0; +} + +static u32 GetTimerTicks(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + return 60 * 60 + 59; + case GAME_TYPE_SEEL: + return 90 * 60 + 59; + case GAME_TYPE_GENGAR: + return 90 * 60 + 59; + default: + return 1; + } +} + +static void InitBallSprite(void) +{ + sPinballGame->ball.spriteId = CreateSprite(&sBallPokeballSpriteTemplate, 0, 0, 3); + StartSpriteAnim(&gSprites[sPinballGame->ball.spriteId], 3); + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; +} + +static void InitFlipperSprites(void) +{ + //sPinballGame->rightFlipper.spriteId = CreateSprite(&sFlipperSpriteTemplate, 0, 0, 4); + //sPinballGame->leftFlipper.spriteId = CreateSprite(&sFlipperSpriteTemplate, 0, 0, 4); + //gSprites[sPinballGame->leftFlipper.spriteId].data[0] = FLIPPER_LEFT; + //gSprites[sPinballGame->rightFlipper.spriteId].data[0] = FLIPPER_RIGHT; + //StartSpriteAnim(&gSprites[sPinballGame->leftFlipper.spriteId], 0); + //StartSpriteAnim(&gSprites[sPinballGame->rightFlipper.spriteId], 3); +} + +static void InitTimerSprites(void) +{ + if (GameTypeUsesTimer(sPinballGame->gameType)) + { + int x, y; + GetTimerScreenCoords(sPinballGame->gameType, &x, &y); + sPinballGame->timer.minutesSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x, y, 4); + sPinballGame->timer.colonSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 8, y, 4); + sPinballGame->timer.tensSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 16, y, 4); + sPinballGame->timer.onesSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 24, y, 4); + gSprites[sPinballGame->timer.minutesSpriteId].data[0] = 0; + gSprites[sPinballGame->timer.colonSpriteId].data[0] = 1; + gSprites[sPinballGame->timer.tensSpriteId].data[0] = 2; + gSprites[sPinballGame->timer.onesSpriteId].data[0] = 3; + StartSpriteAnim(&gSprites[sPinballGame->timer.minutesSpriteId], 0); + StartSpriteAnim(&gSprites[sPinballGame->timer.colonSpriteId], 10); + StartSpriteAnim(&gSprites[sPinballGame->timer.tensSpriteId], 0); + StartSpriteAnim(&gSprites[sPinballGame->timer.onesSpriteId], 0); + } +} + +static bool32 GameTypeUsesTimer(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_DIGLETT: + return FALSE; + default: + return TRUE; + } +} + +static void GetTimerScreenCoords(u8 gameType, int *outX, int *outY) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + case GAME_TYPE_SEEL: + *outX = 131; + *outY = 109; + break; + case GAME_TYPE_GENGAR: + *outX = 131; + *outY = 8; + break; + default: + *outX = 0; + *outY = 0; + break; + } +} + +static void InitGameType(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + InitMeowth(); + break; + case GAME_TYPE_DIGLETT: + InitDiglett(); + break; + case GAME_TYPE_SEEL: + InitSeel(); + break; + case GAME_TYPE_GENGAR: + InitGengar(); + break; + } +} + +static void InitMeowth(void) +{ + struct Meowth *meowth = &sPinballGame->meowth; + + meowth->xPos = 40; + meowth->yPos = 40; + meowth->state = MEOWTH_STATE_WALK; + meowth->facing = MEOWTH_FACING_RIGHT; + meowth->yMovement = 0; + meowth->score = 0; + meowth->jewelStreak = 0; + meowth->spriteId = CreateSprite(&sMeowthSpriteTemplate, 0, 0, 5); + meowth->sparkleSpriteId = CreateSprite(&sMeowthJewelSparkleSpriteTemplate, 0, 0, 6); + StartSpriteAnim(&gSprites[meowth->spriteId], 0); + StartSpriteAnim(&gSprites[meowth->sparkleSpriteId], 0); +} + +static void InitDiglett(void) +{ + //struct Diglett *diglett = &sPinballGame->diglett; + //diglett->completed = FALSE; + //diglett->numDiglettsHit = 0; + //diglett->collisionMap = Alloc(ARRAY_COUNT(sDiglettStageBgCollisionMap) * sizeof(sDiglettStageBgCollisionMap[0])); + //memcpy(diglett->collisionMap, sDiglettStageBgCollisionMap, ARRAY_COUNT(sDiglettStageBgCollisionMap) * sizeof(sDiglettStageBgCollisionMap[0])); + //diglett->dugtrioSpriteId = CreateSprite(&sDugtrioSpriteTemplate, 80, 16, 5); + //diglett->dugtrioState = DUGTRIO_STATE_HIDDEN; + //gSprites[diglett->dugtrioSpriteId].data[0] = DUGTRIO_STATE_HIDDEN; + //StartSpriteAnim(&gSprites[diglett->dugtrioSpriteId], 0); +} + +static void InitSeel(void) +{ + int i; + struct Seel *seel = &sPinballGame->seel; + seel->completed = FALSE; + seel->streak = 0; + seel->sparkleSpriteId = CreateSprite(&sSeelSparkleSpriteTemplate, 0, 0, 6); + StartSpriteAnim(&gSprites[seel->sparkleSpriteId], 0); + for (i = 0; i < NUM_SEELS; i++) + { + struct SeelSwimmer *swimmer = &seel->swimmers[i]; + swimmer->state = sInitialSeelStates[i]; + swimmer->xPos = sInitialSeelCoords[i][0] << 8; + swimmer->yPos = sInitialSeelCoords[i][1] << 8; + swimmer->spriteId = CreateSprite(&sSeelSpriteTemplate, swimmer->xPos >> 8, swimmer->yPos >> 8, 5); + gSprites[swimmer->spriteId].data[0] = swimmer->state; + gSprites[swimmer->spriteId].data[1] = i; + if (swimmer->state == SEEL_STATE_SWIM_RIGHT) + StartSpriteAnim(&gSprites[swimmer->spriteId], 0); + else + StartSpriteAnim(&gSprites[swimmer->spriteId], 2); + } +} + +static void InitGengar(void) +{ + int i; + struct Gengar *gengar = &sPinballGame->gengar; + gengar->completed = FALSE; + gengar->numGastlyHits = 0; + gengar->numHaunterHits = 0; + gengar->numGengarHits = 0; + gengar->graveyardState = GRAVEYARD_STATE_GASTLY; + gengar->collisionMap = Alloc(ARRAY_COUNT(sGengarStageBgCollisionMap) * sizeof(sGengarStageBgCollisionMap[0])); + memcpy(gengar->collisionMap, sGengarStageBgCollisionMap, ARRAY_COUNT(sGengarStageBgCollisionMap) * sizeof(sGengarStageBgCollisionMap[0])); + for (i = 0; i < NUM_GASTLY; i++) { + InitGhost(&gengar->gastlyGhosts[i], sInitialGastlyData[i], &sGastlySpriteTemplate, i); } + //SetWeather(WEATHER_FOG_HORIZONTAL); +} + +static void PinballVBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void PinballMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void Arrow(void) +{ + if (sScore->GameStart != 1) + { + if (sScore->StartDelayTimer != 0) + { + sScore->StartDelayTimer--; + return; + } + else + { + if ((sScore->ArrowPosition > 0) && (sScore->ArrowDirection == 0) && (sScore->ArrowPosition < 14)) // Right + { + sScore->ArrowPosition++; + gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x + 8); + } + else if ((sScore->ArrowPosition > 0) && (sScore->ArrowDirection == 1) && (sScore->ArrowPosition < 14)) // Left + { + sScore->ArrowPosition--; + gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x - 8); + } + else if (sScore->ArrowPosition == 0) // Turn Right + { + sScore->ArrowPosition++; + sScore->ArrowDirection = 0; + gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x + 8); + } + else if (sScore->ArrowPosition == 14) // Turn Left + { + sScore->ArrowPosition--; + sScore->ArrowDirection = 1; + gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x - 8); + } + sScore->StartDelayTimer = sScore->StartDelayMax; + return; + } + } +} + +static void AButton(void) +{ + if (GetCoins() > 2) + { + PlaySE(SE_TRUCK_DOOR); + if (sScore->TitleDestroyed == 0) + { + DestroyTitle(); + } + RemoveCoins(3); + SetPlayerDigits(GetCoins()); + sScore->GameStart = 1; + return; + } + else + { + PlaySE(SE_FAILURE); + return; + } +} + +static void DropSpeed(u8 direction) +{ + if (direction == 1) // Left + { + if (sScore->StartSpeed == 0) + { + PlaySE(SE_FAILURE); + return; + } + else if (sScore->StartSpeed == 1) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 0; + return; + } + else if (sScore->StartSpeed == 5) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 1; + return; + } + else if (sScore->StartSpeed == 10) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 5; + return; + } + else if (sScore->StartSpeed == 15) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 10; + return; + } + else if (sScore->StartSpeed == 20) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 15; + return; + } + else if (sScore->StartSpeed == 25) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 20; + return; + } + } + else if (direction == 0) // Right + { + if (sScore->StartSpeed == 0) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 1; + return; + } + else if (sScore->StartSpeed == 1) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 5; + return; + } + else if (sScore->StartSpeed == 5) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 10; + return; + } + else if (sScore->StartSpeed == 10) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 15; + return; + } + else if (sScore->StartSpeed == 15) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 20; + return; + } + else if (sScore->StartSpeed == 20) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 25; + return; + } + else if (sScore->StartSpeed == 25) + { + PlaySE(SE_FAILURE); + return; + } + } + return; +} + +static void HandleInput(void) +{ + if (sScore->GameStart == 0) + { + if (JOY_NEW(A_BUTTON)) + { + AButton(); + } + else if (JOY_NEW(B_BUTTON)) + { + sPinballGame->state = PINBALL_STATE_START_EXIT; + } + else if (JOY_NEW(DPAD_RIGHT)) + { + DropSpeed(0); + } + else if (JOY_NEW(DPAD_LEFT)) + { + DropSpeed(1); + } + } +} + +static void PinballMain(u8 taskId) +{ + bool32 completed; + + switch (sPinballGame->state) + { + case PINBALL_STATE_INIT: + if (!gPaletteFade.active) + { + sPinballGame->state = PACHINKO_START_SCREEN; + } + break; + case PACHINKO_START_SCREEN: + HandleInput(); + //gSprites[sScore->WinSpriteId].invisible = TRUE; + gSprites[sScore->ArrowSpriteId].invisible = FALSE; + Arrow(); + if ((sScore->TitleCounter > 0) && (sScore->TitleDestroyed == 0)) + { + sScore->TitleCounter--; + } + else if ((sScore->TitleCounter == 0) && (sScore->TitleDestroyed == 0)) + { + DestroyTitle(); + sScore->TitleDestroyed = 1; + } + + if (sScore->GameStart == 1) + { + gSprites[sScore->ArrowSpriteId].invisible = TRUE; + sScore->SecondDelay--; + if (sScore->SecondDelay == 0) { + PlaySE(SE_BALL_TRADE); + StartNewBall(); + sScore->SecondDelay = 30; + sPinballGame->state = PINBALL_STATE_RUNNING; + } + } + break; + case PINBALL_STATE_RUNNING: + completed = UpdateGameType(sPinballGame->gameType); + if (!sPinballGame->completed && completed) + sPinballGame->completed = TRUE; + gSprites[sPinballGame->ball.spriteId].invisible = FALSE; + HandleBallPhysics(); + UpdateCamera(); + + if (!sPinballGame->waitExitScene) + UpdateTimer(); + break; + case PINBALL_LOST_BALL_FADE_OUT: + if (!gPaletteFade.active) + { + LostBall(sPinballGame->gameType); + //StartNewBall(); + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); + sPinballGame->state = PINBALL_LOST_BALL_FADE_IN; + } + break; + case PINBALL_LOST_BALL_FADE_IN: + if (!gPaletteFade.active) + sPinballGame->state = PACHINKO_START_SCREEN; + break; + case PACHINKO_START_JACKPOT: + if (!gPaletteFade.active) + { + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); + //ShowJackpot(); + PlayFanfare(MUS_OBTAIN_BADGE); + CreateWin(); + sPinballGame->state = PACHINKO_JACKPOT; + } + break; + case PACHINKO_JACKPOT: + if (IsFanfareTaskInactive()) + { + //ResetMessage(); + PlaySE(SE_SHOP); + AddCoins(50 * sScore->Multiplier); + sScore->Winnings = (sScore->Winnings + (50 * sScore->Multiplier)); + SetPlayerDigits(GetCoins()); + DestroyWin(); + if (sScore->Winnings < 30) + { + sPinballGame->state = PACHINKO_START_SCREEN; + } + else + { + sScore->LevelChangeTimer = 200; + sPinballGame->state = PACHINKO_LEVEL_CHANGE_START; + } + } + break; + case PACHINKO_START_WIN: + if (!gPaletteFade.active) + { + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); + //ShowWin(); + PlayFanfare(MUS_LEVEL_UP); + CreateWin(); + sPinballGame->state = PACHINKO_WIN; + } + break; + case PACHINKO_WIN: + if (IsFanfareTaskInactive()) + { + //ResetMessage(); + PlaySE(SE_SHOP); + AddCoins(6 * sScore->Multiplier); + sScore->Winnings = (sScore->Winnings + (6 * sScore->Multiplier)); + SetPlayerDigits(GetCoins()); + DestroyWin(); + if (sScore->Winnings < 30) + { + sPinballGame->state = PACHINKO_START_SCREEN; + } + else + { + sScore->LevelChangeTimer = 200; + sPinballGame->state = PACHINKO_LEVEL_CHANGE_START; + } + } + break; + case PACHINKO_LEVEL_CHANGE_START: + if (sScore->LevelChangeTimer == 200) + { + PlaySE(SE_SUCCESS); + CreateNewLevel(); + sScore->LevelChangeTimer--; + } + else if (sScore->LevelChangeTimer != 0) + { + sScore->LevelChangeTimer--; + } + else if (sScore->LevelChangeTimer == 0) + { + PlaySE(SE_LAVARIDGE_FALL_WARP); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sPinballGame->state = PACHINKO_LEVEL_FADE_OUT; + } + break; + case PACHINKO_LEVEL_FADE_OUT: + if (!gPaletteFade.active) + { + DestroyNewLevel(); + sPinballGame->state = PACHINKO_LEVEL_CHANGE; + } + break; + case PACHINKO_LEVEL_CHANGE: + sScore->Level = ((Random() % 23) + 1); + while (sScore->Level == sScore->LastLevel) + { + sScore->Level = ((Random() % 23) + 1); + } + sScore->LastLevel = sScore->Level; + sScore->Winnings = 0; + LevelChange(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sPinballGame->state = PACHINKO_LEVEL_FADE_IN; + break; + case PACHINKO_LEVEL_FADE_IN: + if (!gPaletteFade.active) + { + sPinballGame->state = PACHINKO_START_SCREEN; + } + break; + case PINBALL_STATE_DELAY_START_EXIT: + if (--sPinballGame->exitTimer == 0) + { + //ShowLose(); + //gSprites[sScore->GameOverSpriteId].invisible = FALSE; + sPinballGame->state = PINBALL_STATE_START_EXIT; + } + break; + case PINBALL_STATE_START_EXIT: + StartExitPinballGame(); + break; + case PINBALL_STATE_EXIT: + ExitPinballGame(); + break; + } +} + +static void StartNewBall(void) +{ + u16 randomvel; + u8 LR; + s16 x; + + LR = (Random () % 100); + x = 36 + (sScore->ArrowPosition * 8); + randomvel = (Random() % 0x40); + if (randomvel == 0) + { + randomvel = 2; + } + if (LR < 51) + { + randomvel = (randomvel * (0 - 1)); + } + + sPinballGame->ball.xPos = x << 8; + sPinballGame->ball.yPos = 16 << 8; + sPinballGame->ball.xVelocity = randomvel; + sPinballGame->ball.yVelocity = (sScore->StartSpeed * 20); + sPinballGame->ball.spin = 0; + //OpenEntrance(sPinballGame->gameType); +} + +static void OpenEntrance(u8 gameType) +{ + sPinballGame->ballIsEntering = TRUE; + switch (gameType) + { + case GAME_TYPE_MEOWTH: + OpenEntranceMeowth(); + break; + case GAME_TYPE_DIGLETT: + //OpenEntranceDiglett(); + break; + case GAME_TYPE_SEEL: + OpenEntranceSeel(); + break; + case GAME_TYPE_GENGAR: + OpenEntranceGengar(); + break; + } +} + +static void OpenEntranceMeowth(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x415; + //tilemap[0x114] = 0x414; + tilemap[0x133] = 0x413; + tilemap[0x173] = 0x408; // 0x412 og + tilemap[0x152] = 0x413; // 0x400 og + tilemap[0x153] = 0x410; + tilemap[0x154] = 0x011; + tilemap[0x172] = 0x409; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void OpenEntranceDiglett(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x55; + tilemap[0x114] = 0x56; + tilemap[0x133] = 0x0; + tilemap[0x134] = 0x54; + tilemap[0x152] = 0x0; + tilemap[0x153] = 0x52; + tilemap[0x154] = 0x53; + tilemap[0x172] = 0x50; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void OpenEntranceSeel(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x41E; + tilemap[0x114] = 0x41D; + tilemap[0x133] = 0x41B; + tilemap[0x134] = 0x41A; + tilemap[0x152] = 0x400; + tilemap[0x153] = 0x418; + tilemap[0x154] = 0x417; + tilemap[0x172] = 0x414; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void OpenEntranceGengar(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x0; + tilemap[0x132] = 0x1; + tilemap[0x133] = 0x2; + tilemap[0x152] = 0x5; + tilemap[0x153] = 0x3; + tilemap[0x172] = 0x4; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void CloseEntrance(u8 gameType) +{ + sPinballGame->ballIsEntering = FALSE; + switch (gameType) + { + case GAME_TYPE_MEOWTH: + CloseEntranceMeowth(); + break; + case GAME_TYPE_DIGLETT: + //CloseEntranceDiglett(); + break; + case GAME_TYPE_SEEL: + CloseEntranceSeel(); + break; + case GAME_TYPE_GENGAR: + CloseEntranceGengar(); + break; + } +} + +static void CloseEntranceMeowth(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x403; + tilemap[0x173] = 0x40D; + tilemap[0x133] = 0x403; + //tilemap[0x134] = 0x401; + tilemap[0x152] = 0x40F; + tilemap[0x153] = 0x40E; + tilemap[0x154] = 0x002; + tilemap[0x172] = 0x40C; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void CloseEntranceDiglett(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x24; + tilemap[0x114] = 0x2; + tilemap[0x133] = 0x22; + tilemap[0x134] = 0x1; + tilemap[0x152] = 0x1F; + tilemap[0x153] = 0x20; + tilemap[0x154] = 0x2; + tilemap[0x172] = 0x1B; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void CloseEntranceSeel(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x41C; + tilemap[0x114] = 0x401; + tilemap[0x133] = 0x419; + tilemap[0x134] = 0x408; + tilemap[0x152] = 0x416; + tilemap[0x153] = 0x415; + tilemap[0x154] = 0x405; + tilemap[0x172] = 0x411; + tilemap[0x173] = 0x401; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void CloseEntranceGengar(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x4D; + tilemap[0x132] = 0x41; + tilemap[0x133] = 0x42; + tilemap[0x152] = 0x36; + tilemap[0x153] = 0x37; + tilemap[0x172] = 0x2F; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void DrawMeowthScoreJewels(struct Meowth *meowth) +{ + int i; + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + for (i = 0; i < 20; i++) + { + if (i < meowth->score) + tilemap[i] = i % 2 ? 0x41E : 0x1E; + else + tilemap[i] = sMeowthStageBgTilemap[i]; + } + + VarSet(GAME_CORNER_VAR_WINNINGS, (meowth->score * 3)); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void DrawSeelScoreJewels(struct Seel *seel) +{ + int i; + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + for (i = 0; i < 20; i++) + { + if (i < seel->score) + { + if (i == 0 || i == 19) + tilemap[i] = 0x28; + else if (i == 1) + tilemap[i] = 0x29; + else if (i == 18) + tilemap[i] = 0x2B; + else + tilemap[i] = 0x2A; + } + else + { + tilemap[i] = sSeelStageBgTilemap[i]; + } + } + VarSet(GAME_CORNER_VAR_WINNINGS, (seel->score * 4)); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void HandleBallPhysics(void) +{ + bool32 isFlipperColliding = FALSE; + bool32 isStaticColliding; + bool32 isObjectColliding = FALSE; + u8 flipperCollisionNormal = 0; + u8 objectCollisionNormal; + u8 staticCollisionNormal; + u8 collisionNormal; + u16 artificialYForce = 0; + int collisionAmplification = 0; + struct Ball *ball = &sPinballGame->ball; + + //if (sPinballGame->ballIsEntering && (ball->xPos >> 8) < 144) + //CloseEntrance(sPinballGame->gameType); + + if (sPinballGame->gravityEnabled) + ApplyGravity(ball); + + LimitVelocity(ball); + HandleTilts(ball); + //isFlipperColliding = HandleFlippers(ball, &artificialYForce, &flipperCollisionNormal, &collisionAmplification); + //if (!isFlipperColliding) + //isObjectColliding = CheckObjectsCollision(sPinballGame->gameType, ball, sPinballGame->timer.ticks, &objectCollisionNormal, &collisionAmplification); + + isStaticColliding = CheckStaticCollision(sPinballGame->gameType, ball, sPinballGame->ballIsEntering, sPinballGame->stageTileWidth, sPinballGame->stageTileHeight, &staticCollisionNormal, &artificialYForce); + if (isFlipperColliding) + collisionNormal = flipperCollisionNormal; + else if (isObjectColliding) + collisionNormal = objectCollisionNormal; + else + collisionNormal = staticCollisionNormal; + + if (isObjectColliding || isStaticColliding) + { + ApplyTiltForces(ball, collisionNormal); + RotateVector(&ball->xVelocity, &ball->yVelocity, collisionNormal); + ApplyCollisionForces(ball, artificialYForce, collisionAmplification); + RotateVector(&ball->xVelocity, &ball->yVelocity, -collisionNormal); + + if ((isStaticColliding) && ((ball->yVelocity > 100) || (ball->xVelocity > 100))) // Wall or static object collision + { + PlaySE(SE_WALL_HIT); // Trigger the sound effect for wall collision + } + } + + UpdatePosition(ball); + + if ((ball->yPos >> 8) > 168) + { + ball->yPos == 170 << 8; + LoseBall(); + } +} + +static void LoseBall(void) +{ + sScore->Lives--; + if (PlayAnotherBall()) + { + PlaySE(SE_FAINT); + sScore->Multiplier = 1; + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + gSprites[sScore->MultiplierSpriteId].animNum = 0; + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + UpdateLives(); + sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else + { + if (!sPinballGame->waitExitScene) + { + PlayFanfare(MUS_TOO_BAD); + sScore->Multiplier = 1; + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + gSprites[sScore->MultiplierSpriteId].animNum = 0; + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + CreateGameOver(); + UpdateLives(); + sPinballGame->exitTimer = 2 * 60; + sPinballGame->state = PINBALL_STATE_DELAY_START_EXIT; + } + + gSpecialVar_Result = sPinballGame->completed; + } +} + +static bool32 PlayAnotherBall(void) +{ + switch (sPinballGame->gameType) + { + case GAME_TYPE_MEOWTH: + case GAME_TYPE_SEEL: + case GAME_TYPE_GENGAR: + return sPinballGame->timer.ticks > 0 && !sPinballGame->completed; + case GAME_TYPE_DIGLETT: + if (sScore->Lives > 0) + { + return TRUE; + } + else + { + return FALSE; + } + default: + return TRUE; + } +} + +static void LostBall(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + LostBallMeowth(&sPinballGame->meowth); + PlaySE(SE_FAINT); + break; + case GAME_TYPE_DIGLETT: + + break; + case GAME_TYPE_SEEL: + LostBallSeel(&sPinballGame->seel); + PlaySE(SE_FAINT); + break; + case GAME_TYPE_GENGAR: + LostBallGengar(&sPinballGame->gengar); + PlaySE(SE_FAINT); + break; + } +} + +#define JEWEL_SPARKLE_DURATION 180 + +static void LostBallMeowth(struct Meowth *meowth) +{ + struct Sprite *sparkleSprite = &gSprites[sPinballGame->meowth.sparkleSpriteId]; + if (meowth->score > 4) + { + meowth->score -= 4; + sparkleSprite->data[0] = JEWEL_SPARKLE_DURATION; + sparkleSprite->data[1] = meowth->score; + } + else + { + meowth->score = 0; + sparkleSprite->data[0] = 0; + sparkleSprite->data[1] = 0; + } + + meowth->jewelStreak = 0; + ResetMeowthJewels(meowth); + DrawMeowthScoreJewels(meowth); +} + +#define SEEL_SPARKLE_DURATION 180 + +static void LostBallSeel(struct Seel *seel) +{ + struct Sprite *sparkleSprite = &gSprites[sPinballGame->seel.sparkleSpriteId]; + if (seel->score > 4) + { + seel->score -= 4; + sparkleSprite->data[0] = SEEL_SPARKLE_DURATION; + sparkleSprite->data[1] = seel->score; + } + else + { + seel->score = 0; + sparkleSprite->data[0] = 0; + sparkleSprite->data[1] = 0; + } + + seel->streak = 0; + ResetSeels(seel); + DrawSeelScoreJewels(seel); +} + +static void LostBallGengar(struct Gengar *gengar) +{ +} + +#define GRAVITY 0x08 + +static void ApplyGravity(struct Ball *ball) +{ + ball->yVelocity += GRAVITY; +} + +#define MAX_VELOCITY 0x07FF + +static void LimitVelocity(struct Ball *ball) +{ + // Limit each velocity axis independently. This means + // the ball can move diagonally at a higher speed. + if (ball->xVelocity > MAX_VELOCITY) + ball->xVelocity = MAX_VELOCITY; + else if (ball->xVelocity < -MAX_VELOCITY) + ball->xVelocity = -MAX_VELOCITY; + + if (ball->yVelocity > MAX_VELOCITY) + ball->yVelocity = MAX_VELOCITY; + else if (ball->yVelocity < -MAX_VELOCITY) + ball->yVelocity = -MAX_VELOCITY; +} + +static void HandleTilts(struct Ball *ball) +{ + HandleTilt(ball, &sPinballGame->rightTilt, 1, 0, DPAD_RIGHT, FALSE); + HandleTilt(ball, &sPinballGame->leftTilt, -1, 0, DPAD_LEFT, FALSE); + HandleTilt(ball, &sPinballGame->downTilt, 0, 1, DPAD_UP | DPAD_DOWN, TRUE); +} + +static void HandleTilt(struct Ball *ball, struct Tilt *tilt, int xDelta, int yDelta, u32 buttonMask, bool8 artificalEnabled) +{ + if ((!tilt->reset && (gMain.newKeys & buttonMask))) + { + PlaySE(SE_BREAKABLE_DOOR); + } + + if ((artificalEnabled && sPinballGame->doArtificialDownTilt) || (!tilt->reset && (gMain.heldKeys & buttonMask))) + { + if (++tilt->counter >= 3) + { + if (artificalEnabled) + sPinballGame->doArtificialDownTilt = FALSE; + + tilt->pushing = FALSE; + tilt->reset = TRUE; + } + else + { + ball->xPos += (xDelta << 8); + ball->yPos += (yDelta << 8); + tilt->pushing = TRUE; + } + } + else + { + tilt->pushing = FALSE; + if (tilt->counter > 0) + tilt->counter--; + else if (!(gMain.heldKeys & buttonMask)) + tilt->reset = FALSE; + } +} + +static bool32 HandleFlippers(struct Ball *ball, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + //bool32 collided; + //struct Flipper *flipper; + + //UpdateFlipperState(&sPinballGame->rightFlipper); + //UpdateFlipperState(&sPinballGame->leftFlipper); + + //collided = CheckFlipperCollision(ball, &sPinballGame->rightFlipper, outYForce, outCollisionNormal, outCollisionAmplification); + //if (!collided) + // collided = CheckFlipperCollision(ball, &sPinballGame->leftFlipper, outYForce, outCollisionNormal, outCollisionAmplification); + + //return collided; + return FALSE; +} + +#define FLIPPER_STATE_DELTA 0x0333 + +static void UpdateFlipperState(struct Flipper *flipper) +{ + //int stateDelta; + + //flipper->prevState = flipper->state; + + //if (!sPinballGame->flippersDisabled && (gMain.newKeys & A_BUTTON)) // A button rising edge + //{ + // PlaySE(SE_VEND); // Play sound effect + //} + //else if (!sPinballGame->flippersDisabled && (gMain.newKeys & B_BUTTON)) // A button rising edge + //{ + // PlaySE(SE_VEND); // Play sound effect + //} + // + //if (!sPinballGame->flippersDisabled && (gMain.heldKeys & (A_BUTTON | B_BUTTON))) + //{ + // if (flipper->state == 0x0FFF) + // stateDelta = 0; + // else + // stateDelta = FLIPPER_STATE_DELTA; + //} + //else + //{ + // if (flipper->state == 0) + // stateDelta = 0; + // else + // stateDelta = -FLIPPER_STATE_DELTA; + //} + + //flipper->stateDelta = stateDelta; + //flipper->state += stateDelta; +} + +static bool32 CheckFlipperCollision(struct Ball *ball, struct Flipper *flipper, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + //int curState, stateDelta; + //int offset; + //u32 collisionRadius, magnitude; + //u8 collisionNormal; + //int ballXPos = (ball->xPos >> 8); + //int ballYPos = (ball->yPos >> 8); + //int xOffset = ballXPos - flipper->xPos + 24; + //int yOffset = ballYPos - flipper->yPos + 16; + // + //if (xOffset < 0 || xOffset >= 48 || yOffset < 0 || yOffset >= 32) + // return FALSE; + // + //*outYForce = 0; + //*outCollisionAmplification = 0; + // + //if (flipper->type == FLIPPER_RIGHT) + // xOffset = 48 - xOffset; + // + //offset = xOffset * 32 + yOffset; + //collisionRadius = 0; + // + //stateDelta = flipper->prevState < flipper->state ? 1 : -1; + //curState = flipper->prevState >> 8; + //while (1) + ////{ + //// collisionRadius = sFlipperCollisionRadii[curState * 0x600 + offset]; + // if (collisionRadius != 0) + // break; + // + // if (curState == (flipper->state >> 8)) + // return FALSE; + // + // curState += stateDelta; + //} + // + //collisionNormal = sFlipperCollisionNormalAngles[curState * 0x600 + offset]; + //magnitude = sFlipperRadiusMagnitudes[collisionRadius]; + //*outYForce = ((flipper->stateDelta * 4) * magnitude) >> 8; + //*outCollisionNormal = flipper->type == FLIPPER_LEFT ? collisionNormal : -collisionNormal; + //*outCollisionAmplification = 1; + // + //// Don't apply any y force if the ball is being forced downwards into the flipper + //if ((*outYForce) & 0x8000) + //{ + // *outYForce = 0; + // *outCollisionAmplification = 0; + //} + // + return TRUE; +} + +#define MAX_POS_UPDATE 0x04FF + +static void UpdatePosition(struct Ball *ball) +{ + // Moves the ball's position according to its velocity. + // The amount it's moved is artificially limited at a lower + // threshold than the maximum velocity. + if (ball->xVelocity > MAX_POS_UPDATE) + ball->xPos += MAX_POS_UPDATE; + else if (ball->xVelocity < -MAX_POS_UPDATE) + ball->xPos -= MAX_POS_UPDATE; + else + ball->xPos += ball->xVelocity; + + if (ball->yVelocity > MAX_POS_UPDATE) + ball->yPos += MAX_POS_UPDATE; + else if (ball->yVelocity < -MAX_POS_UPDATE) + ball->yPos -= MAX_POS_UPDATE; + else + ball->yPos += ball->yVelocity; + + if (ball->xPos & 0x80000000) + ball->xPos = 0; + if (ball->yPos & 0x80000000) + ball->yPos = 0; + +} + +static bool32 CheckStaticCollision(u8 gameType, struct Ball *ball, bool32 ballIsEntering, int stageTileWidth, int stageTileHeight, u8 *outCollisionNormal, u16 *outYForce) +{ + int i; + u16 xDelta, yDelta; + int collisionIndex; + int maxStringStart, maxStringEnd, curStringStart, curStringLength, maxStringLength; + u8 collisionTestAttributes[ARRAY_COUNT(sCollisionTestPointOffsets)]; + u8 collisionTestCoords[ARRAY_COUNT(sCollisionTestPointOffsets)][2]; + u8 collisionTests[ARRAY_COUNT(sCollisionTestPointOffsets)]; + + // Check each of the test points around the ball's origin + // to see if they are colliding with the static collision masks. + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) + { + int testX, testY; + int tileX, tileY, tileIndex; + int collisionAttribute, row, column; + u8 collisionMaskRow; + int xPos = ball->xPos >> 8; + int yPos = ball->yPos >> 8; + + collisionTests[i] = 0; + testX = xPos + sCollisionTestPointOffsets[i][0]; + testY = yPos + sCollisionTestPointOffsets[i][1]; + if (testX < 0 || testY < 0) + { + collisionTests[i] = 1; + continue; + } + + tileX = testX / 8; + tileY = testY / 8; + row = testY % 8; + column = testX % 8; + tileIndex = (tileY * stageTileWidth) + tileX; + collisionAttribute = GetCollisionAttribute(gameType, ballIsEntering, tileIndex); + collisionMaskRow = GetCollisionMaskRow(gameType, collisionAttribute, row); + collisionTests[i] = (collisionMaskRow & (1 << column)) != 0; + collisionTestCoords[i][0] = testX; + collisionTestCoords[i][1] = testY; + collisionTestAttributes[i] = collisionAttribute; + } + + // Find the largest string of consecutive colliding test points. + maxStringStart = 0; + maxStringEnd = 0; + maxStringLength = 0; + curStringStart = -1; + curStringLength = 0; + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) + { + if (collisionTests[i]) + { + if (curStringStart == -1) + curStringStart = i; + + curStringLength++; + if (curStringLength > maxStringLength) + { + maxStringLength = curStringLength; + maxStringStart = curStringStart; + maxStringEnd = i; + } + } + else + { + curStringLength = 0; + curStringStart = -1; + } + } + + // If all of the test points are colliding, then the ball + // is inside a wall. Just early exit with no collision. + if (maxStringLength == 0 || maxStringLength == 16) + return FALSE; + + // Check if the maximum string loops around to the front of + // the collision tests array. + if (curStringStart != -1) + { + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) + { + if (!collisionTests[i]) + break; + + curStringLength++; + if (curStringLength > maxStringLength) + { + maxStringLength = curStringLength; + maxStringStart = curStringStart; + maxStringEnd = i; + } + } + } + + collisionIndex = ((maxStringStart & 0xF) << 4) | (maxStringEnd & 0xF); + + // Treat the delta values as signed. + xDelta = sCollisionXDeltas[collisionIndex]; + if (xDelta > 0x8000) + ball->xPos -= 0x10000 - xDelta; + else + ball->xPos += xDelta; + + yDelta = sCollisionYDeltas[collisionIndex]; + if (yDelta > 0x8000) + ball->yPos -= 0x10000 - yDelta; + else + ball->yPos += yDelta; + + *outCollisionNormal = sCollisionNormals[collisionIndex]; + HandleStaticCollisionForGameType( + gameType, + collisionTestCoords[maxStringStart][0], + collisionTestCoords[maxStringStart][1], + collisionTestAttributes[maxStringStart], + outYForce + ); + + return TRUE; +} + +static u8 GetCollisionAttribute(u8 gameType, bool32 ballIsEntering, int index) +{ + const u8 *entranceCollisionMap; + const u8 *collisionMap; + + switch (gameType) + { + default: + case GAME_TYPE_MEOWTH: + entranceCollisionMap = sMeowthStageEntranceBgCollisionMap; + collisionMap = sMeowthStageBgCollisionMap; + break; + case GAME_TYPE_DIGLETT: + entranceCollisionMap = sDiglettStageEntranceBgCollisionMap; + collisionMap = sPinballGame->diglett.collisionMap; + break; + case GAME_TYPE_SEEL: + entranceCollisionMap = sSeelStageEntranceBgCollisionMap; + collisionMap = sSeelStageBgCollisionMap; + break; + case GAME_TYPE_GENGAR: + entranceCollisionMap = sGengarStageEntranceBgCollisionMap; + collisionMap = sPinballGame->gengar.collisionMap; + break; + } + + if (ballIsEntering) + return entranceCollisionMap[index]; + + return collisionMap[index]; +} + +static u8 GetCollisionMaskRow(u8 gameType, int collisionAttribute, int row) +{ + struct Flipper *flipper; + int state; + int offset; + const u8 *flipperStateMasks; + u8 mask = 0; + + if (collisionAttribute < 0xE0) + { + const u8 *masks; + switch (gameType) + { + default: + case GAME_TYPE_MEOWTH: + masks = sMeowthStageBgCollisionMasks; + break; + case GAME_TYPE_DIGLETT: + masks = sDiglettStageBgCollisionMasks; + break; + case GAME_TYPE_SEEL: + masks = sSeelStageBgCollisionMasks; + break; + case GAME_TYPE_GENGAR: + masks = sGengarStageBgCollisionMasks; + break; + } + + // Reverse the bits because my tooling is backwards. + return ReverseBits(masks[(collisionAttribute * 0x8) + row]); + } + + // Collision attribute from 0xE0 - 0xFF are special + // static flipper collision masks. + //if (collisionAttribute < 0xF0) + // flipper = &sPinballGame->leftFlipper; + //else + // flipper = &sPinballGame->rightFlipper; + + //state = flipper->state >> 8; + //if (state < 7) + // offset = 0; + //else if (state < 14) + // offset = 1; + //else + // offset = 2; + + //if (collisionAttribute < 0xF0) + // flipperStateMasks = sFlipperLeftMinigameCollisionMasks[offset]; + //else + // flipperStateMasks = sFlipperRightMinigameCollisionMasks[offset]; + + // mask = flipperStateMasks[(collisionAttribute % 0x10) * 0x8 + row]; + + // Reverse the bits because my tooling is backwards. + return ReverseBits(mask); +} + +static u8 ReverseBits(u8 b) +{ + b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; + b = (b & 0xCC) >> 2 | (b & 0x33) << 2; + b = (b & 0xAA) >> 1 | (b & 0x55) << 1; + return b; +} + +static void ApplyTiltForces(struct Ball *ball, u8 collisionNormal) +{ + u32 index = (sPinballGame->downTilt.pushing << 2) | + (sPinballGame->rightTilt.pushing << 1) | + (sPinballGame->leftTilt.pushing << 0); + const s16 *deltas = sTiltVelocityDeltas[index]; + if (deltas != NULL) + { + ball->xVelocity += deltas[collisionNormal * 2]; + ball->yVelocity += deltas[collisionNormal * 2 + 1]; + } +} + +static void RotateVector(s16 *x, s16 *y, u8 angle) +{ + // Rotate a vector by an angle with a 2D rotation matrix calculation. + // rotatedX = xComponent * cos(angle) + yComponent * sin(angle) + // rotatedY = yComponent * cos(angle) - xComponent * sin(angle) + s16 sin = gSineTable[angle]; + s16 cos = gSineTable[angle + 64]; + s16 newX = ((*x * cos) / 256) + ((*y * sin) / 256); + s16 newY = ((*y * cos) / 256) - ((*x * sin) / 256); + *x = newX; + *y = newY; +} + +static void HandleStaticCollisionForGameType(u8 gameType, int x, int y, u8 collisionAttribute, u16 *outYForce) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + case GAME_TYPE_SEEL: + break; + case GAME_TYPE_GENGAR: + HandleStaticCollisionGengar(&sPinballGame->gengar, collisionAttribute, outYForce); + break; + case GAME_TYPE_DIGLETT: + HandleStaticCollisionDiglett(&sPinballGame->diglett, x, y, collisionAttribute, outYForce); + break; + } +} + +static void HandleStaticCollisionDiglett(struct Diglett *diglett, int x, int y, u8 collisionAttribute, u16 *outYForce) +{ + if (collisionAttribute == 0x1C) + { + // If the ball hit a Diglett, remove the Diglett's solid collision from the map. + int tileX = x / 8; // Convert pixel x to tile x + int tileY = y / 8; // Convert pixel y to tile y + + // Update the collision map with the new coordinates (tileX, tileY) + u16 *tilemap; + int tileIndex = tileY * 32 + tileX; // Convert tile coordinates to index (assuming 32 tiles per row) + + // Remove the collision at this position by setting it back to 0x2 in the collision map + diglett->collisionMap[tileIndex] = 0x2; + //diglett->collisionMap[tileIndex + 1] = 0x2; + //diglett->collisionMap[tileIndex + 32] = 0x2; + //diglett->collisionMap[tileIndex + 33] = 0x2; + + // Update the tilemap at this position to 0x28 (new tile after collision) + tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[tileIndex] = 0x28; + + PlaySE(SE_SWITCH); + // Copy the updated tilemap to VRAM + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + } + + else if (collisionAttribute == 0x19) // Jackpot + { + PlaySE(SE_UNLOCK); + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + sPinballGame->state = PACHINKO_START_JACKPOT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else if (collisionAttribute == 0x1F) // x2 + { + PlaySE(SE_UNLOCK); + PlaySE(SE_M_STAT_INCREASE); + if (sScore->Multiplier != 3) + { + sScore->Multiplier = 2; + gSprites[sScore->MultiplierSpriteId].animNum = 1; + } + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else if (collisionAttribute == 0x22) // x3 + { + PlaySE(SE_UNLOCK); + PlaySE(SE_M_STAT_INCREASE); + sScore->Multiplier = 3; + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + gSprites[sScore->MultiplierSpriteId].animNum = 2; + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else if (collisionAttribute == 0x25) // Win + { + PlaySE(SE_UNLOCK); + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + sPinballGame->state = PACHINKO_START_WIN; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else if (collisionAttribute == 0x28) // Bounce + { + PlaySE(SE_LEDGE); + *outYForce = 0x100; + } +} + +static void HandleStaticCollisionGengar(struct Gengar *gengar, u8 collisionAttribute, u16 *outYForce) +{ + int i; + for (i = 0; i < ARRAY_COUNT(sGengarGravestoneCollisionAttributes); i++) + { + if (collisionAttribute == sGengarGravestoneCollisionAttributes[i]) + { + // If the ball hit a gravestone, apply some artificial force to + // make the ball bounce harder. + *outYForce = 0x100; + return; + } + } +} + +static void ApplyCollisionForces(struct Ball *ball, u16 flipperYForce, int collisionAmplification) +{ + // Only apply the collision forces if the ball is moving + // towards the wall it collided with, which can only be + // true if the y velocity is traveling downward in the rotated + // coordinate system. + if (ball->yVelocity < 0) + return; + + // Apply dampening to the vertical velocity component, and + // negate it so that the ball bounces off the wall. + ball->yVelocity = -(((2 + collisionAmplification) * ball->yVelocity) / 8); + ball->xVelocity += ball->spin / 2; + ball->spin = (ball->xVelocity * 4) >> 8; + + ball->yVelocity -= flipperYForce; +} + +static void UpdateCamera(void) +{ + int scrollX, scrollY; + int stagePixelWidth = sPinballGame->stageTileWidth * 8; + int stagePixelHeight = sPinballGame->stageTileHeight * 8; + struct Ball *ball = &sPinballGame->ball; + + // scrollX = (ball->xPos >> 8) - (DISPLAY_WIDTH / 2); + // if (scrollX < 0) + // scrollX = 0; + // if (scrollX > stagePixelWidth - DISPLAY_WIDTH) + // scrollX = stagePixelWidth - DISPLAY_WIDTH; + + // scrollY = (ball->yPos >> 8) - (DISPLAY_HEIGHT / 2); + // if (scrollY < 0) + // scrollY = 0; + // if (scrollY > stagePixelHeight - DISPLAY_HEIGHT) + // scrollY = stagePixelHeight - DISPLAY_HEIGHT; + + scrollX = 0; // Center the game in the middle of the screen + scrollY = 0; + + scrollX += sPinballGame->leftTilt.counter; + scrollX -= sPinballGame->rightTilt.counter; + scrollY += sPinballGame->downTilt.counter; + + sPinballGame->cameraScrollX = scrollX; + sPinballGame->cameraScrollY = scrollY; + + SetGpuReg(REG_OFFSET_BG2HOFS, scrollX); + SetGpuReg(REG_OFFSET_BG2VOFS, scrollY); +} + +static void UpdateTimer(void) +{ + if (GameTypeUsesTimer(sPinballGame->gameType) && sPinballGame->timer.ticks > 0) + { + if (--sPinballGame->timer.ticks == 0) + { + // Time has completely run out. + // Disable the flippers, and play any ending + // animation stuff. + DisableFlippers(); + HandleTimeRanOut(); + } + } +} + +static void HandleTimeRanOut(void) +{ + switch (sPinballGame->gameType) + { + case GAME_TYPE_MEOWTH: + sPinballGame->meowth.state = MEOWTH_STATE_FINISH; + break; + case GAME_TYPE_DIGLETT: + break; + case GAME_TYPE_SEEL: + break; + case GAME_TYPE_GENGAR: + break; + } +} + +static void DisableFlippers(void) +{ + //int flipperPaletteIndex; + //sPinballGame->flippersDisabled = TRUE; + + // Change the flippers' color to red. + //flipperPaletteIndex = IndexOfSpritePaletteTag(TAG_FLIPPER); + //gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 1] = RGB(16, 16, 16); + //gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 2] = RGB(22, 22, 22); + //gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 3] = RGB(12, 12, 12); + //gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 1] = RGB(16, 16, 16); + //gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 2] = RGB(22, 22, 22); + //gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 3] = RGB(12, 12, 12); +} + +static void StartExitPinballGame(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sPinballGame->state = PINBALL_STATE_EXIT; + //SetWeather(WEATHER_NONE); +} + +static void ExitPinballGame(void) +{ + if (!gPaletteFade.active) + { + if (sPinballGame->gameType == GAME_TYPE_DIGLETT) + FREE_AND_SET_NULL(sPinballGame->diglett.collisionMap); + + SetMainCallback2(sPinballGame->returnMainCallback); + FREE_AND_SET_NULL(sPinballGame); + FREE_AND_SET_NULL(sScore); + } +} + +static void UpdateBallSprite(struct Sprite *sprite) +{ + int ballAnim; + struct Ball *ball = &sPinballGame->ball; + sprite->x = (ball->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (ball->yPos >> 8) - sPinballGame->cameraScrollY; + + ball->rotation += ball->spin; + ballAnim = (ball->rotation >> 4) % 8; + StartSpriteAnim(sprite, ballAnim); +} + +static void UpdateFlipperSprite(struct Sprite *sprite) +{ + //int anim; + //struct Flipper *flipper; + //if (sprite->data[0] == FLIPPER_RIGHT) + // flipper = &sPinballGame->rightFlipper; + //else + // flipper = &sPinballGame->leftFlipper; + + //sprite->x = flipper->xPos - sPinballGame->cameraScrollX; + //sprite->y = flipper->yPos - sPinballGame->cameraScrollY; + + //anim = (flipper->type * 3) + ((flipper->state >> 8) / 6); + //StartSpriteAnim(sprite, anim); +} + +static void UpdateTimerDigitSprite(struct Sprite *sprite) +{ + int minutes, tensDigit, onesDigit; + int type = sprite->data[0]; + + sprite->x2 = -sPinballGame->cameraScrollX; + sprite->y2 = -sPinballGame->cameraScrollY; + + switch (type) + { + case 0: // Minutes ones digit + minutes = (sPinballGame->timer.ticks / 3600) % 10; + StartSpriteAnim(sprite, minutes); + break; + case 2: // Seconds tens digit + tensDigit = ((sPinballGame->timer.ticks / 60) % 60) / 10; + StartSpriteAnim(sprite, tensDigit); + break; + case 3: // Seconds ones digit + onesDigit = ((sPinballGame->timer.ticks / 60) % 60) % 10; + StartSpriteAnim(sprite, onesDigit); + break; + } +} + +static bool32 UpdateGameType(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + return UpdateMeowth(&sPinballGame->meowth); + case GAME_TYPE_DIGLETT: + return UpdateDiglett(&sPinballGame->diglett); + case GAME_TYPE_SEEL: + return UpdateSeel(&sPinballGame->seel); + case GAME_TYPE_GENGAR: + return UpdateGengar(&sPinballGame->gengar); + default: + return FALSE; + } +} + +#define MEOWTH_HORIZONTAL_SPEED 1 +#define MEOWTH_VERTICAL_SPEED 1 + +static bool32 UpdateMeowth(struct Meowth *meowth) +{ + if (meowth->state == MEOWTH_STATE_WALK) + { + if (meowth->facing == MEOWTH_FACING_RIGHT) + meowth->xPos += MEOWTH_HORIZONTAL_SPEED; + else + meowth->xPos -= MEOWTH_HORIZONTAL_SPEED; + + meowth->yPos += meowth->yMovement; + + if (meowth->xPos > 136) + { + meowth->facing = MEOWTH_FACING_LEFT; + meowth->xPos = 136; + } + else if (meowth->xPos < 24) + { + meowth->facing = MEOWTH_FACING_RIGHT; + meowth->xPos = 24; + } + else if (gMain.vblankCounter1 % 64 == 0) + { + meowth->facing = Random() % 2 ? MEOWTH_FACING_RIGHT : MEOWTH_FACING_LEFT; + } + + if (meowth->yPos > 48) + { + meowth->yPos = 48; + meowth->yMovement = 0; + } + else if (meowth->yPos < 32) + { + meowth->yPos = 32; + meowth->yMovement = 0; + } + else if (gMain.vblankCounter1 % 64 == 0) + { + meowth->yMovement = Random() % 2 ? -MEOWTH_VERTICAL_SPEED : MEOWTH_VERTICAL_SPEED; + } + } + + UpdateJewels(meowth->jewels); + return meowth->completed; +} + +static bool32 CheckObjectsCollision(u8 gameType, struct Ball *ball, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + bool32 isColliding = FALSE; + + switch (gameType) + { + case GAME_TYPE_MEOWTH: + isColliding = CheckMeowthCollision(ball, &sPinballGame->meowth, ticks, outCollisionNormal, outCollisionAmplification); + if (!isColliding) + isColliding = CheckMeowthJewelsCollision(ball, &sPinballGame->meowth, outCollisionNormal); + break; + case GAME_TYPE_SEEL: + isColliding = CheckSeelCollision(ball, &sPinballGame->seel, ticks, outCollisionNormal, outCollisionAmplification); + break; + case GAME_TYPE_GENGAR: + switch (sPinballGame->gengar.graveyardState) + { + case GRAVEYARD_STATE_GASTLY: + isColliding = CheckGhostsCollision( + ball, + ticks, + sPinballGame->gengar.gastlyGhosts, + NUM_GASTLY, + sGastlyCollisionNormalAngles, + 32, + 32, + outCollisionNormal, + outCollisionAmplification); + break; + case GRAVEYARD_STATE_HAUNTER: + isColliding = CheckGhostsCollision( + ball, + ticks, + sPinballGame->gengar.haunterGhosts, + NUM_HAUNTER, + sHaunterCollisionNormalAngles, + 32, + 40, + outCollisionNormal, + outCollisionAmplification); + break; + case GRAVEYARD_STATE_GENGAR: + isColliding = CheckGengarCollision(ball, &sPinballGame->gengar, ticks, outCollisionNormal, outCollisionAmplification); + break; + } + break; + } + + return isColliding; +} + +static bool32 CheckMeowthCollision(struct Ball *ball, struct Meowth *meowth, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int x, y; + u8 collisionNormal; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + + if (ticks <= 0) + return FALSE; + + if (ballXPos < meowth->xPos - 24 || ballXPos >= meowth->xPos + 24 + || ballYPos < meowth->yPos - 20 || ballYPos >= meowth->yPos + 20) + return FALSE; + + x = ballXPos - meowth->xPos + 24; + y = ballYPos - meowth->yPos + 20; + collisionNormal = sMeowthCollisionNormalAngles[y * 48 + x]; + if (collisionNormal == 0xFF) + return FALSE; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + //*outCollisionAmplification = 1; + + if (meowth->state == MEOWTH_STATE_WALK) + { + meowth->state = MEOWTH_STATE_HIT; + meowth->hitDuration = 30; + TryCreateNewJewel(meowth, ballXPos); + PlaySE(SE_EFFECTIVE); + } + + return TRUE; +} + +static bool32 CheckMeowthJewelsCollision(struct Ball *ball, struct Meowth *meowth, u8 *outCollisionNormal) +{ + int i; + struct Sprite *sparkleSprite = &gSprites[meowth->sparkleSpriteId]; + + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + struct MeowthJewel *jewel = &meowth->jewels[i]; + if (jewel->state == JEWEL_STATE_LANDED) + { + if (CheckJewelCollision(ball, jewel, outCollisionNormal)) + { + if (++meowth->jewelStreak > 6) + meowth->jewelStreak = 6; + + meowth->score += meowth->jewelStreak; + if (!meowth->completed && meowth->score >= 20) + meowth->completed = TRUE; + + sparkleSprite->data[0] = JEWEL_SPARKLE_DURATION; + sparkleSprite->data[1] = min(20, meowth->score); + DrawMeowthScoreJewels(meowth); + if (meowth->jewelStreak > 1) + { + int y = (jewel->yPos >> 8) - 8; + u8 spriteId = CreateSprite(&sMeowthJewelMultiplierSpriteTemplate, jewel->xPos, y, 4); + gSprites[spriteId].data[2] = y; + StartSpriteAnim(&gSprites[spriteId], meowth->jewelStreak - 2); + } + PlaySE(SE_M_PAY_DAY); + return TRUE; + } + } + } + + return FALSE; +} + +static int GetNumActiveJewels(struct Meowth *meowth) +{ + int i, count; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + if (meowth->jewels[i].state != JEWEL_STATE_HIDDEN) + count++; + } + return count; +} + +static struct MeowthJewel *TryCreateNewJewel(struct Meowth *meowth, int ballXPos) +{ + int i, count; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + if (meowth->jewels[i].state == JEWEL_STATE_HIDDEN) + break; + } + + if (i == MAX_MEOWTH_JEWELS) + return NULL; + + meowth->jewelStreak = 0; + + meowth->jewels[i].state = JEWEL_STATE_FALLING; + meowth->jewels[i].xPos = meowth->xPos; + meowth->jewels[i].yPos = (meowth->yPos - 12) << 8; + meowth->jewels[i].spriteId = CreateSprite(&sMeowthJewelSpriteTemplate, meowth->jewels[i].xPos, meowth->jewels[i].yPos, 4); + meowth->jewels[i].xVelocity = ballXPos < meowth->xPos ? 2 : -2; + meowth->jewels[i].yVelocity = -2 << 8; + meowth->jewels[i].destYPos = meowth->yPos < 40 ? 72 : 88; + gSprites[meowth->jewels[i].spriteId].data[0] = i; + gSprites[meowth->jewels[i].spriteId].data[1] = JEWEL_STATE_HIDDEN; + + PlaySE(SE_M_PAY_DAY); + return &meowth->jewels[i]; +} + +static void UpdateJewels(struct MeowthJewel *jewels) +{ + int i; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + struct MeowthJewel *jewel = &jewels[i]; + if (jewel->state == JEWEL_STATE_FALLING) + { + jewel->xPos += jewel->xVelocity; + if (jewel->xPos < 16) + { + jewel->xPos = 16; + jewel->xVelocity *= -1; + } + else if (jewel->xPos >= 148) + { + jewel->xPos = 148; + jewel->xVelocity *= -1; + } + + jewel->yPos += jewel->yVelocity; + jewel->yVelocity += 0x40; + if ((jewel->yPos >> 8) >= jewel->destYPos) + { + if (IsJewelSpaceOccupied(jewel->xPos, jewel->destYPos, jewels)) + { + jewel->yVelocity = -1 << 8; + } + else + { + jewel->yPos = jewel->destYPos << 8; + jewel->state = JEWEL_STATE_LANDED; + } + } + } + } +} + +static bool32 IsJewelSpaceOccupied(u16 xPos, u16 destYPos, struct MeowthJewel *jewels) +{ + int i; + struct MeowthJewel *jewel; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + jewel = &jewels[i]; + if (jewel->state == JEWEL_STATE_LANDED && jewel->destYPos == destYPos && abs(xPos - jewel->xPos) < 16) + return TRUE; + } + + return FALSE; +} + +static bool32 CheckJewelCollision(struct Ball *ball, struct MeowthJewel *jewel, u8 *outCollisionNormal) +{ + int x, y; + u8 collisionNormal; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + int jewelXPos = jewel->xPos; + int jewelYPos = jewel->yPos >> 8; + if (ballXPos < jewelXPos - 12 || ballXPos >= jewelXPos + 12 + || ballYPos < jewelYPos - 12 || ballYPos >= jewelYPos + 12) + return FALSE; + + x = ballXPos - jewelXPos + 12; + y = ballYPos - jewelYPos + 12; + collisionNormal = sMeowthJewelCollisionNormalAngles[y * 24 + x]; + if (collisionNormal == 0xFF) + return FALSE; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + jewel->state = JEWEL_STATE_CONSUMED; + return TRUE; +} + +static void UpdateMeowthSprite(struct Sprite *sprite) +{ + int animNum; + struct Meowth *meowth = &sPinballGame->meowth; + int prevState = sprite->data[0]; + int prevFacing = sprite->data[1]; + int curState = meowth->state; + int curFacing = meowth->facing; + sprite->x = meowth->xPos - sPinballGame->cameraScrollX; + sprite->y = meowth->yPos - sPinballGame->cameraScrollY; + + // Check if Meowth's state changed, and start the appropriate + // sprite animation. + if (prevState != curState || prevFacing != curFacing) + { + sprite->data[0] = curState; + sprite->data[1] = curFacing; + switch (curState) + { + case MEOWTH_STATE_WALK: + animNum = curFacing == MEOWTH_FACING_RIGHT ? 0 : 1; + StartSpriteAnim(sprite, animNum); + break; + case MEOWTH_STATE_HIT: + animNum = curFacing == MEOWTH_FACING_RIGHT ? 2 : 3; + StartSpriteAnim(sprite, animNum); + break; + case MEOWTH_STATE_FINISH: + StartSpriteAnim(sprite, 4); + break; + } + } + + if (curState == MEOWTH_STATE_HIT) + { + if (--meowth->hitDuration == 0) + meowth->state = MEOWTH_STATE_WALK; + } +} + +static void UpdateMeowthJewelSprite(struct Sprite *sprite) +{ + int jewelId = sprite->data[0]; + struct MeowthJewel *jewel = &sPinballGame->meowth.jewels[jewelId]; + int prevState = sprite->data[1]; + int curState = jewel->state; + sprite->x = jewel->xPos - sPinballGame->cameraScrollX; + sprite->y = (jewel->yPos >> 8) - sPinballGame->cameraScrollY; + if (prevState != curState) + { + sprite->data[1] = curState; + switch (curState) + { + case JEWEL_STATE_HIDDEN: + DestroySprite(sprite); + break; + case JEWEL_STATE_FALLING: + StartSpriteAnim(sprite, 0); + break; + case JEWEL_STATE_LANDED: + StartSpriteAnim(sprite, 1); + break; + case JEWEL_STATE_CONSUMED: + StartSpriteAnim(sprite, 2); + break; + } + } + + if (curState == JEWEL_STATE_CONSUMED && sprite->animEnded) + { + sPinballGame->meowth.jewels[jewelId].state = JEWEL_STATE_HIDDEN; + DestroySprite(sprite); + } +} + +static void UpdateMeowthJewelMultiplierSprite(struct Sprite *sprite) +{ + // data[0] = state + // data[1] = state counter + // data[2] = original y position + sprite->x2 = -sPinballGame->cameraScrollX; + sprite->y2 = -sPinballGame->cameraScrollY; + switch (sprite->data[0]) + { + case 0: + sprite->y--; + if (++sprite->data[1] == 5) + { + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->y = sprite->data[2]; + } + break; + case 1: + if (++sprite->data[1] >= 22) + { + sprite->data[0] = 2; + sprite->data[1] = 0; + } + break; + case 2: + if (++sprite->data[1] >= 24) + { + DestroySprite(sprite); + return; + } + + if (sprite->data[1] % 8 < 4) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + break; + } +} + +static void ResetMeowthJewels(struct Meowth *meowth) +{ + int i; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + struct MeowthJewel *jewel = &meowth->jewels[i]; + if (jewel->state != JEWEL_STATE_HIDDEN) + { + DestroySprite(&gSprites[jewel->spriteId]); + jewel->state = JEWEL_STATE_HIDDEN; + } + } +} + +static void UpdateMeowthJewelSparkleSprite(struct Sprite *sprite) +{ + // data[0] is visibility counter timer + // data[1] is the player's score, capped at 20. + if (sprite->data[0] == 0) + { + sprite->invisible = TRUE; + } + else + { + sprite->data[0]--; + sprite->x = ((sprite->data[1] - 1) * 8 + 4) - sPinballGame->cameraScrollX; + sprite->y = 4 - sPinballGame->cameraScrollY; + sprite->invisible = FALSE; + } +} + +static bool32 UpdateDiglett(struct Diglett *diglett) +{ + u16 *tilemap; + + // if (!diglett->initialized) + // { + // if (gMain.vblankCounter1 & 1) + // { + // int index = sDiglettInitOrder[diglett->curInitIndex]; + // diglett->states[index] = DIGLETT_STATE_IDLE_0 + (Random() % 4); + + // tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + // UpdateDiglettTiles(tilemap, index, diglett); + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // UpdateDiglettCollision(diglett->collisionMap, index, TRUE); + // + // if (++diglett->curInitIndex == NUM_DIGLETTS) + // diglett->initialized = TRUE; + // } + // } + // else if (diglett->numDiglettsHit < NUM_DIGLETTS) + // { + // // Update 4 digletts each frame. + // int i; + // for (i = 0; i < 4; i++) + // { + // int index = (diglett->curUpdateIndex + i) % NUM_DIGLETTS; + // switch (diglett->states[index]) + // { + // case DIGLETT_STATE_INIT: + // case DIGLETT_STATE_HIDDEN: + // break; + // case DIGLETT_STATE_IDLE_0: + // diglett->states[index] = DIGLETT_STATE_IDLE_1; + // break; + // case DIGLETT_STATE_IDLE_1: + // diglett->states[index] = DIGLETT_STATE_IDLE_2; + // break; + // case DIGLETT_STATE_IDLE_2: + // diglett->states[index] = DIGLETT_STATE_IDLE_3; + // break; + // case DIGLETT_STATE_IDLE_3: + // diglett->states[index] = DIGLETT_STATE_IDLE_0; + // break; + // case DIGLETT_STATE_HIT_0: + // diglett->states[index] = DIGLETT_STATE_HIT_1; + // PlaySE(SE_BALLOON_YELLOW); + // break; + // case DIGLETT_STATE_HIT_1: + // diglett->states[index] = DIGLETT_STATE_HIT_2; + // //PlaySE(SE_BALLOON_YELLOW); + // break; + // case DIGLETT_STATE_HIT_2: + // diglett->states[index] = DIGLETT_STATE_HIDDEN; + // UpdateDiglettCollision(diglett->collisionMap, index, FALSE); + // if (++diglett->numDiglettsHit == NUM_DIGLETTS) + // { + // diglett->dugtrioState = DUGTRIO_STATE_3ALIVE; + // + // // Update the colision tilemap for the Dugtrio-occupied tiles. + // tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + // diglett->collisionMap[0x48] = 0x14; + // diglett->collisionMap[0x49] = 0x14; + // diglett->collisionMap[0x4A] = 0x14; + // diglett->collisionMap[0x4B] = 0x14; + // diglett->collisionMap[0x68] = 0x15; + // diglett->collisionMap[0x69] = 0x16; + // diglett->collisionMap[0x6A] = 0x17; + // diglett->collisionMap[0x6B] = 0x18; + // } + // VarSet(VAR_FLIP_WINNINGS, (diglett->numDiglettsHit * 3)); + // SetPlayerDigits(VarGet(VAR_FLIP_WINNINGS)); + // break; + // } + // + // // Update bg tilemap for the new diglett states. + // tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + // UpdateDiglettTiles(tilemap, index, diglett); + // } + // + // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + // diglett->curUpdateIndex = (diglett->curUpdateIndex + 4) % NUM_DIGLETTS; + // } + // else + // { + // // At this point, all the Digletts are hidden and Dugtrio is visible. + // //struct Sprite *dugtrioSprite = &gSprites[diglett->dugtrioSpriteId]; + // //VarSet(VAR_FLIP_WINNINGS, 100); + // //SetPlayerDigits(VarGet(VAR_FLIP_WINNINGS)); + // //switch (diglett->dugtrioState) + // //{ + // //case DUGTRIO_STATE_3ALIVE_HIT: + // // if (dugtrioSprite->animEnded) + // // diglett->dugtrioState = DUGTRIO_STATE_2ALIVE; + // // break; + //case DUGTRIO_STATE_2ALIVE_HIT: + // if (dugtrioSprite->animEnded) + // diglett->dugtrioState = DUGTRIO_STATE_1ALIVE; + // break; + //case DUGTRIO_STATE_1ALIVE_HIT: + // if (dugtrioSprite->animEnded) + // { + // diglett->dugtrioState = DUGTRIO_STATE_0ALIVE; + // StartSpriteAnim(dugtrioSprite, 7); + // // DisableFlippers(); + // // diglett->completed = TRUE; + // // return TRUE; + // // } + // // break; + // //case DUGTRIO_STATE_0ALIVE: + // // if (dugtrioSprite->animEnded) + // // diglett->dugtrioState = DUGTRIO_STATE_COMPLETE; + // // return TRUE; + // //} + //} + // + return FALSE; +} + +static void UpdateDiglettTiles(u16 *tilemap, int index, struct Diglett *diglett) +{ + //int tileIndex = sDiglettCoords[index][0] + sDiglettCoords[index][1] * 32; + //tilemap[tileIndex] = sDiglettStateTiles[diglett->states[index]][0]; + //tilemap[tileIndex + 1] = sDiglettStateTiles[diglett->states[index]][1]; + //tilemap[tileIndex + 32] = sDiglettStateTiles[diglett->states[index]][2]; + //tilemap[tileIndex + 33] = sDiglettStateTiles[diglett->states[index]][3]; +} + +static void UpdateDiglettCollision(u8 *collisionMap, int index, bool32 solidCollision) +{ + int tileIndex = sDiglettCoords[index][0] + sDiglettCoords[index][1] * 32; + if (solidCollision) + { + collisionMap[tileIndex] = 0x19; + collisionMap[tileIndex + 1] = 0x19; + collisionMap[tileIndex + 32] = 0x1A; + collisionMap[tileIndex + 33] = 0x1B; + } + else + { + collisionMap[tileIndex] = 0x2; + collisionMap[tileIndex + 1] = 0x2; + collisionMap[tileIndex + 32] = 0x2; + collisionMap[tileIndex + 33] = 0x2; + } +} + +static void UpdateDugtrioSprite(struct Sprite *sprite) +{ + //// data[0] = previous state + //struct Diglett *diglett = &sPinballGame->diglett; + //int prevState = sprite->data[0]; + //int curState = diglett->dugtrioState; + // + //sprite->x2 = -sPinballGame->cameraScrollX; + //sprite->y2 = -sPinballGame->cameraScrollY; + // + //// Check if Dugtrio's state changed, and start the appropriate + //// sprite animation. + //if (prevState != curState) + //{ + // sprite->data[0] = curState; + // switch (curState) + // { + // case DUGTRIO_STATE_HIDDEN: + // StartSpriteAnim(sprite, 0); + // break; + // case DUGTRIO_STATE_3ALIVE: + // StartSpriteAnim(sprite, 1); + // PlayBGM(MUS_RG_ROCKET_HIDEOUT); + // PlayCry_Normal(SPECIES_DUGTRIO, 0); + // break; + // case DUGTRIO_STATE_3ALIVE_HIT: + // StartSpriteAnim(sprite, 2); + // PlaySE(SE_EFFECTIVE); + // break; + // case DUGTRIO_STATE_2ALIVE: + // StartSpriteAnim(sprite, 3); + // break; + // case DUGTRIO_STATE_2ALIVE_HIT: + // StartSpriteAnim(sprite, 4); + // PlaySE(SE_EFFECTIVE); + // break; + // case DUGTRIO_STATE_1ALIVE: + // StartSpriteAnim(sprite, 5); + // break; + // case DUGTRIO_STATE_1ALIVE_HIT: + // StartSpriteAnim(sprite, 6); + // PlayBGM(MUS_NONE); + // VarSet(VAR_FLIP_WINNINGS, 200); + // SetPlayerDigits(VarGet(VAR_FLIP_WINNINGS)); + // PlaySE(SE_SUPER_EFFECTIVE); + // break; + // case DUGTRIO_STATE_0ALIVE: + // StartSpriteAnim(sprite, 7); + // break; + // case DUGTRIO_STATE_COMPLETE: + // StartSpriteAnim(sprite, 0); + // break; + // } + //} +} + +static bool32 CheckSeelCollision(struct Ball *ball, struct Seel *seel, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int x, y; + u8 collisionNormal; + struct Sprite *sparkleSprite = &gSprites[seel->sparkleSpriteId]; + struct SeelSwimmer *swimmer = &seel->swimmers[seel->emergingSwimmerIndex]; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + int swimmerXPos = (swimmer->xPos >> 8); + int swimmerYPos = (swimmer->yPos >> 8); + + if (ticks <= 0) + return FALSE; + + if (swimmer->state != SEEL_STATE_VISIBLE_RIGHT && swimmer->state != SEEL_STATE_VISIBLE_LEFT) + return FALSE; + + if (ballXPos < swimmerXPos - 16 || ballXPos >= swimmerXPos + 16 + || ballYPos < swimmerYPos - 16 || ballYPos >= swimmerYPos + 16) + return FALSE; + + x = ballXPos - swimmerXPos + 16; + y = ballYPos - swimmerYPos + 16; + collisionNormal = sSeelCollisionNormalAngles[y * 32 + x]; + if (collisionNormal == 0xFF) + return FALSE; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + //*outCollisionAmplification = 1; + + if (swimmer->state == SEEL_STATE_VISIBLE_RIGHT) + swimmer->state = SEEL_STATE_HIT_RIGHT; + else + swimmer->state = SEEL_STATE_HIT_LEFT; + + seel->score += seel->streak + 1; + if (!seel->completed && seel->score >= 20) + seel->completed = TRUE; + + if (++seel->streak >= 9) + seel->streak = 0; + + sparkleSprite->data[0] = SEEL_SPARKLE_DURATION; + sparkleSprite->data[1] = min(20, seel->score); + DrawSeelScoreJewels(seel); + if (seel->streak > 1) + { + int y = swimmerYPos - 16; + u8 spriteId = CreateSprite(&sSeelMultiplierSpriteTemplate, swimmerXPos, y, 4); + gSprites[spriteId].data[2] = y; + StartSpriteAnim(&gSprites[spriteId], seel->streak - 2); + } + + return TRUE; +} + +#define SEEL_SWIMMER_SPEED 0x34 + +static bool32 UpdateSeel(struct Seel *seel) +{ + int i; + + for (i = 0; i < NUM_SEELS; i++) + { + struct SeelSwimmer *swimmer = &seel->swimmers[i]; + struct Sprite *swimmerSprite = &gSprites[swimmer->spriteId]; + switch (swimmer->state) + { + case SEEL_STATE_SWIM_RIGHT: + swimmer->xPos += SEEL_SWIMMER_SPEED; + if ((swimmer->xPos >> 8) > 136) + { + swimmer->state = SEEL_STATE_TURN_LEFT; + swimmer->xPos = 136 << 8; + } + else if (seel->emergingSwimmerIndex == i) + { + if (--seel->emergingSwimmerCounter == 0) + swimmer->state = SEEL_STATE_EMERGE_RIGHT; + } + break; + case SEEL_STATE_TURN_LEFT: + if (swimmerSprite->animEnded) + swimmer->state = SEEL_STATE_SWIM_LEFT; + break; + case SEEL_STATE_SWIM_LEFT: + swimmer->xPos -= SEEL_SWIMMER_SPEED; + if ((swimmer->xPos >> 8) < 24) + { + swimmer->state = SEEL_STATE_TURN_RIGHT; + swimmer->xPos = 24 << 8; + } + else if (seel->emergingSwimmerIndex == i) + { + if (--seel->emergingSwimmerCounter == 0) + swimmer->state = SEEL_STATE_EMERGE_LEFT; + } + break; + case SEEL_STATE_TURN_RIGHT: + if (swimmerSprite->animEnded) + swimmer->state = SEEL_STATE_SWIM_RIGHT; + break; + case SEEL_STATE_EMERGE_RIGHT: + if (swimmerSprite->animEnded) + { + swimmer->state = SEEL_STATE_VISIBLE_RIGHT; + swimmer->counter = GetSeelVisibleTicks(seel->streak); + } + break; + case SEEL_STATE_EMERGE_LEFT: + if (swimmerSprite->animEnded) + { + swimmer->state = SEEL_STATE_VISIBLE_LEFT; + swimmer->counter = GetSeelVisibleTicks(seel->streak); + } + break; + case SEEL_STATE_VISIBLE_RIGHT: + case SEEL_STATE_VISIBLE_LEFT: + if (--swimmer->counter == 0) + { + swimmer->state = (Random() & 1) ? SEEL_STATE_SUBMERGE_RIGHT : SEEL_STATE_SUBMERGE_LEFT; + seel->streak = 0; + } + break; + case SEEL_STATE_SUBMERGE_RIGHT: + case SEEL_STATE_HIT_RIGHT: + if (swimmerSprite->animEnded) + { + swimmer->state = SEEL_STATE_SWIM_RIGHT; + ChooseNextEmergingSeel(i, seel); + } + break; + case SEEL_STATE_SUBMERGE_LEFT: + case SEEL_STATE_HIT_LEFT: + if (swimmerSprite->animEnded) + { + swimmer->state = SEEL_STATE_SWIM_LEFT; + ChooseNextEmergingSeel(i, seel); + } + break; + } + } + + return seel->completed; +} + +static void ChooseNextEmergingSeel(int curSeelIndex, struct Seel *seel) +{ + int index; + do { + index = Random() % NUM_SEELS; + } while (index == curSeelIndex); + + seel->emergingSwimmerIndex = index; + seel->emergingSwimmerCounter = Random() % 60; +} + +static u32 GetSeelVisibleTicks(int curStreak) +{ + if (curStreak < 2) + return 3 * 60; + + if (curStreak < 6) + return 2 * 60; + + return 1 * 60; +} + +static void ResetSeels(struct Seel *seel) +{ + int i; + bool32 isSeelVisible = FALSE; + + for (i = 0; i < NUM_SEELS; i++) + { + struct SeelSwimmer *swimmer = &seel->swimmers[i]; + if (swimmer->state == SEEL_STATE_VISIBLE_RIGHT || swimmer->state == SEEL_STATE_VISIBLE_LEFT) + { + isSeelVisible = TRUE; + break; + } + } + + for (i = 0; i < NUM_SEELS; i++) + { + struct SeelSwimmer *swimmer = &seel->swimmers[i]; + if (isSeelVisible) + { + // Reset to original positions. + // The original game does this for some reason. + swimmer->state = sInitialSeelStates[i]; + swimmer->xPos = sInitialSeelCoords[i][0] << 8; + swimmer->yPos = sInitialSeelCoords[i][1] << 8; + } + else + { + // Revert the seel back to a swimming state, depending on + // its current direction. + swimmer->state = (swimmer->state == SEEL_STATE_SWIM_RIGHT || + swimmer->state == SEEL_STATE_TURN_LEFT || + swimmer->state == SEEL_STATE_EMERGE_RIGHT || + swimmer->state == SEEL_STATE_SUBMERGE_RIGHT || + swimmer->state == SEEL_STATE_HIT_RIGHT) + ? SEEL_STATE_SWIM_RIGHT + : SEEL_STATE_SWIM_LEFT; + } + } +} + +static void UpdateSeelSprite(struct Sprite *sprite) +{ + // data[0] = previous state + // data[1] = seel swimmer index + struct SeelSwimmer *swimmer = &sPinballGame->seel.swimmers[sprite->data[1]]; + int prevState = sprite->data[0]; + int curState = swimmer->state; + sprite->x = (swimmer->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (swimmer->yPos >> 8) - sPinballGame->cameraScrollY; + + // Check if this Seel's state changed, and start the appropriate + // sprite animation. + if (prevState != curState) + { + sprite->data[0] = curState; + switch (curState) + { + case SEEL_STATE_SWIM_RIGHT: + StartSpriteAnim(sprite, 0); + break; + case SEEL_STATE_TURN_LEFT: + StartSpriteAnim(sprite, 1); + break; + case SEEL_STATE_SWIM_LEFT: + StartSpriteAnim(sprite, 2); + break; + case SEEL_STATE_TURN_RIGHT: + StartSpriteAnim(sprite, 3); + break; + case SEEL_STATE_EMERGE_RIGHT: + StartSpriteAnim(sprite, 4); + PlaySE(SE_M_DIVE); + break; + case SEEL_STATE_EMERGE_LEFT: + StartSpriteAnim(sprite, 5); + PlaySE(SE_M_DIVE); + break; + case SEEL_STATE_VISIBLE_RIGHT: + case SEEL_STATE_VISIBLE_LEFT: + StartSpriteAnim(sprite, 6); + break; + case SEEL_STATE_SUBMERGE_RIGHT: + StartSpriteAnim(sprite, 7); + PlaySE(SE_M_DIVE); + break; + case SEEL_STATE_SUBMERGE_LEFT: + StartSpriteAnim(sprite, 8); + PlaySE(SE_M_DIVE); + break; + case SEEL_STATE_HIT_RIGHT: + StartSpriteAnim(sprite, 9); + PlaySE(SE_BALLOON_YELLOW); + break; + case SEEL_STATE_HIT_LEFT: + StartSpriteAnim(sprite, 10); + PlaySE(SE_BALLOON_YELLOW); + break; + } + } +} + +static void UpdateSeelSparkleSprite(struct Sprite *sprite) +{ + // data[0] is visibility counter timer + // data[1] is the player's score, capped at 20. + if (sprite->data[0] == 0) + { + sprite->invisible = TRUE; + } + else + { + sprite->data[0]--; + sprite->x = ((sprite->data[1] - 1) * 8 + 4) - sPinballGame->cameraScrollX; + sprite->y = 4 - sPinballGame->cameraScrollY; + sprite->invisible = FALSE; + } +} + +static void UpdateSeelMultiplierSprite(struct Sprite *sprite) +{ + // data[0] = state + // data[1] = state counter + // data[2] = original y position + sprite->x2 = -sPinballGame->cameraScrollX; + sprite->y2 = -sPinballGame->cameraScrollY; + switch (sprite->data[0]) + { + case 0: + sprite->y--; + if (++sprite->data[1] == 5) + { + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->y = sprite->data[2]; + } + break; + case 1: + if (++sprite->data[1] >= 22) + { + sprite->data[0] = 2; + sprite->data[1] = 0; + } + break; + case 2: + if (++sprite->data[1] >= 24) + { + DestroySprite(sprite); + return; + } + + if (sprite->data[1] % 8 < 4) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + break; + } +} + +static bool32 CheckGhostsCollision(struct Ball *ball, u32 ticks, struct GraveyardGhost *ghosts, int numGhosts, const u8 *angles, int width, int height, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int i; + int x, y; + u8 collisionNormal; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + + if (ticks <= 0) + return FALSE; + + for (i = 0; i < numGhosts; i++) + { + struct GraveyardGhost *ghost = &ghosts[i]; + int ghostXPos = (ghost->xPos >> 8); + int ghostYPos = (ghost->yPos >> 8); + + if (ghost->state != GHOST_STATE_VISIBLE) + continue; + + if (ballXPos < ghostXPos - (width / 2) || ballXPos >= ghostXPos + (width / 2) + || ballYPos < ghostYPos - (height / 2) || ballYPos >= ghostYPos + (height / 2)) + continue; + + x = ballXPos - ghostXPos + (width / 2); + y = ballYPos - ghostYPos + (height / 2); + collisionNormal = angles[y * width + x]; + if (collisionNormal == 0xFF) + continue; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + ghost->state = GHOST_STATE_HIT; + PlaySE(SE_M_COMET_PUNCH); + return TRUE; + } + + return FALSE; +} + +#define GHOST_SPEED 0x35 +#define REQUIRED_GHOST_HITS 10 +#define REQUIRED_GENGAR_HITS 5 + +static bool32 CheckGengarCollision(struct Ball *ball, struct Gengar *gengar, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int x, y; + u8 collisionNormal; + struct GengarGhost *gengarGhost = &gengar->gengarGhost; + int gengarXPos = (gengarGhost->xPos >> 8); + int gengarYPos = (gengarGhost->yPos >> 8); + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + + if (ticks <= 0) + return FALSE; + + if (ballXPos < gengarXPos - 24 || ballXPos >= gengarXPos + 24 + || ballYPos < gengarYPos - 32 || ballYPos >= gengarYPos + 32) + return FALSE; + + x = ballXPos - gengarXPos + 24; + y = ballYPos - gengarYPos + 32; + collisionNormal = sGengarCollisionNormalAngles[y * 48 + x]; + if (collisionNormal == 0xFF) + return FALSE; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + + if (gengarGhost->state == GENGAR_STATE_STANDING || gengarGhost->state == GENGAR_STATE_STEP_LEFT || + gengarGhost->state == GENGAR_STATE_STEP_RIGHT) + { + gengarGhost->state = GENGAR_STATE_HIT; + gengarGhost->counter = 0; + gengar->numGengarHits++; + if (gengar->numGengarHits >= REQUIRED_GENGAR_HITS) + { + gengar->completed = TRUE; + DisableFlippers(); + gengarGhost->state = GENGAR_STATE_LEAVING; + sPinballGame->waitExitScene = TRUE; + } + } + + return TRUE; +} + +static bool32 UpdateGengar(struct Gengar *gengar) +{ + int i; + + switch (gengar->graveyardState) + { + case GRAVEYARD_STATE_GASTLY: + for (i = 0; i < NUM_GASTLY; i++) + UpdateGhost(gengar, &gengar->gastlyGhosts[i], &gengar->numGastlyHits, GRAVEYARD_STATE_TO_HAUNTER, NUM_GASTLY); + break; + case GRAVEYARD_STATE_TO_HAUNTER: + if (--gengar->counter == 0) + { + gengar->graveyardState = GRAVEYARD_STATE_HAUNTER; + PlayBGM(MUS_RG_POKE_MANSION); + for (i = 0; i < NUM_HAUNTER; i++) + InitGhost(&gengar->haunterGhosts[i], sInitialHaunterData[i], &sHaunterSpriteTemplate, i); + } + break; + case GRAVEYARD_STATE_HAUNTER: + for (i = 0; i < NUM_HAUNTER; i++) + UpdateGhost(gengar, &gengar->haunterGhosts[i], &gengar->numHaunterHits, GRAVEYARD_STATE_TO_GENGAR, NUM_HAUNTER); + break; + case GRAVEYARD_STATE_TO_GENGAR: + gengar->counter--; + if (gengar->counter == 60) + { + CrumbleGravestones(gengar); + } + else if (gengar->counter == 0) + { + struct GengarGhost *gengarGhost = &gengar->gengarGhost; + FreeSpriteTilesByTag(TAG_HAUNTER); + FreeSpritePaletteByTag(TAG_HAUNTER); + LoadCompressedSpriteSheet(&sGengarAnimationSpriteSheet); + LoadSpritePalette(&sGengarAnimationSpritePalette); + gengar->graveyardState = GRAVEYARD_STATE_GENGAR; + gengarGhost->state = GENGAR_STATE_STANDING; + gengarGhost->counter = 60; + gengarGhost->xPos = 80 << 8; + gengarGhost->yPos = 20 << 8; + gengarGhost->spriteId = CreateSprite(&sGengarSpriteTemplate, 80, 20, 5); + gSprites[gengarGhost->spriteId].data[0] = gengarGhost->state; + StartSpriteAnim(&gSprites[gengarGhost->spriteId], 0); + PlayCry_Normal(SPECIES_GENGAR, 0); + } + case GRAVEYARD_STATE_GENGAR: + UpdateGengarGhost(gengar); + break; + } + + return gengar->completed; +} + +static void UpdateGengarGhost(struct Gengar *gengar) +{ + struct GengarGhost *gengarGhost = &gengar->gengarGhost; + struct Sprite *sprite = &gSprites[gengarGhost->spriteId]; + + switch (gengarGhost->state) + { + case GENGAR_STATE_STANDING: + if (--gengarGhost->counter == 0) + { + gengarGhost->state = gengarGhost->nextFoot ? GENGAR_STATE_STEP_RIGHT : GENGAR_STATE_STEP_LEFT; + gengarGhost->counter = 64; + if ((gengarGhost->yPos >> 8) < 64) + gengarGhost->yPos += (3 << 8); + + sPinballGame->doArtificialDownTilt = TRUE; + PlaySE(SE_M_STRENGTH); + } + break; + case GENGAR_STATE_STEP_LEFT: + case GENGAR_STATE_STEP_RIGHT: + if (--gengarGhost->counter == 0) + { + gengarGhost->state = GENGAR_STATE_STANDING; + gengarGhost->counter = 12; + gengarGhost->nextFoot = !gengarGhost->nextFoot; + if ((gengarGhost->yPos >> 8) < 64) { + gengarGhost->yPos += (1 << 8); + } + } + break; + case GENGAR_STATE_HIT: + gengarGhost->counter++; + if (gengarGhost->counter == 1) + { + if ((gengarGhost->yPos >> 8) > 16) { + gengarGhost->yPos -= (4 << 8); + PlaySE(SE_EFFECTIVE); + } + } + else if (gengarGhost->counter == 21) + { + if ((gengarGhost->yPos >> 8) > 16) + gengarGhost->yPos -= (4 << 8); + } + else if (sprite->animEnded) + { + gengarGhost->state = GENGAR_STATE_STANDING; + gengarGhost->counter = 10; + } + break; + case GENGAR_STATE_LEAVING: + if (sprite->animEnded) + { + PlaySE(SE_M_TELEPORT); + sPinballGame->waitExitScene = FALSE; + sPinballGame->state = PINBALL_STATE_START_EXIT; + sprite->invisible = TRUE; + } + else if (++gengarGhost->counter >= 108) + { + int leaveIndex = gengarGhost->counter - 108; + //PlaySE(SE_M_STRENGTH); + if (leaveIndex % 82 == 0) + { + gengarGhost->yPos -= (3 << 8); + } + else if (leaveIndex % 82 == 64) + { + gengarGhost->yPos -= (1 << 8); + } + } + break; + } +}; + +static void UpdateGhost(struct Gengar *gengar, struct GraveyardGhost *ghost, u8 *numGhostHits, u8 nextState, int numGhosts) +{ + u8 multiplier = 0; + struct Sprite *sprite = &gSprites[ghost->spriteId]; + + if (numGhostHits == &gengar->numGastlyHits) + { + multiplier = 3; // Gastly + } + else if (numGhostHits == &gengar->numHaunterHits) + { + multiplier = 7; // Haunter + } + + switch (ghost->state) + { + case GHOST_STATE_VISIBLE: + if (ghost->direction == GHOST_DIR_RIGHT) + { + ghost->xPos += GHOST_SPEED; + if ((ghost->xPos >> 8) >= ghost->rightBoundary) + { + ghost->xPos = ghost->rightBoundary << 8; + ghost->direction = GHOST_DIR_LEFT; + } + } + else + { + ghost->xPos -= GHOST_SPEED; + if ((ghost->xPos >> 8) < ghost->leftBoundary) + { + ghost->xPos = ghost->leftBoundary << 8; + ghost->direction = GHOST_DIR_RIGHT; + } + } + + if (++ghost->counter >= 52) + ghost->counter = 0; + break; + case GHOST_STATE_HIT: + if (sprite->animEnded) + { + (*numGhostHits)++; + VarSet(GAME_CORNER_VAR_WINNINGS, (VarGet(GAME_CORNER_VAR_WINNINGS) + multiplier)); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + PlaySE(SE_M_TELEPORT); + if (*numGhostHits >= REQUIRED_GHOST_HITS - (numGhosts - 1)) + { + ghost->state = GHOST_STATE_FINISHED; + if (*numGhostHits >= REQUIRED_GHOST_HITS) + { + gengar->graveyardState = nextState; + gengar->counter = 2 * 60; + } + } + else + { + ghost->state = GHOST_STATE_INVISIBLE; + ghost->counter = 0; + } + } + break; + case GHOST_STATE_INVISIBLE: + if (++ghost->counter >= 130) + { + ghost->state = GHOST_STATE_VISIBLE; + ghost->counter = 0; + } + break; + } +} + +static void InitGhost(struct GraveyardGhost *ghost, const u8 *initialData, const struct SpriteTemplate *spriteTemplate, int ghostIndex) +{ + ghost->state = GHOST_STATE_VISIBLE; + ghost->xPos = initialData[0] << 8; + ghost->yPos = initialData[1] << 8; + ghost->direction = initialData[2]; + ghost->leftBoundary = initialData[3]; + ghost->rightBoundary = initialData[4]; + ghost->spriteId = CreateSprite(spriteTemplate, ghost->xPos >> 8, ghost->yPos >> 8, 5); + gSprites[ghost->spriteId].data[0] = ghost->state; + gSprites[ghost->spriteId].data[1] = ghostIndex; + PlaySE(SE_M_TELEPORT); + if (ghost->direction == GHOST_DIR_RIGHT) + StartSpriteAnim(&gSprites[ghost->spriteId], 0); + else + StartSpriteAnim(&gSprites[ghost->spriteId], 1); +} + +static void UpdateGastlySprite(struct Sprite *sprite) +{ + // data[0] = previous state + // data[1] = gastly index + struct GraveyardGhost *gastly = &sPinballGame->gengar.gastlyGhosts[sprite->data[1]]; + UpdateGhostSprite(sprite, gastly); +} + +static void UpdateHaunterSprite(struct Sprite *sprite) +{ + // data[0] = previous state + // data[1] = haunter index + struct GraveyardGhost *haunter = &sPinballGame->gengar.haunterGhosts[sprite->data[1]]; + UpdateGhostSprite(sprite, haunter); +} + +static void UpdateGhostSprite(struct Sprite *sprite, struct GraveyardGhost *ghost) +{ + // data[0] = previous state + // data[1] = ghost index + int prevState = sprite->data[0]; + int curState = ghost->state; + sprite->x = (ghost->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (ghost->yPos >> 8) - sPinballGame->cameraScrollY; + switch ((ghost->counter % 52) / 13) + { + case 0: + case 2: + sprite->y2 = 0; + break; + case 1: + sprite->y2 = 1; + break; + case 3: + sprite->y2 = -1; + break; + } + + // Check if this Haunter's state changed, and start the appropriate + // sprite animation. + if (prevState != curState) + { + sprite->data[0] = curState; + switch (curState) + { + case GHOST_STATE_VISIBLE: + sprite->invisible = FALSE; + StartSpriteAnim(sprite, 0); + PlaySE(SE_M_TELEPORT); + break; + case GHOST_STATE_HIT: + sprite->invisible = FALSE; + StartSpriteAnim(sprite, 1); + break; + case GHOST_STATE_INVISIBLE: + sprite->invisible = TRUE; + break; + case GHOST_STATE_FINISHED: + DestroySprite(sprite); + ghost->spriteId = 0xFF; + break; + } + } +} + +static void UpdateGengarSprite(struct Sprite *sprite) +{ + // data[0] = previous state + struct GengarGhost *gengarGhost = &sPinballGame->gengar.gengarGhost; + int prevState = sprite->data[0]; + int curState = gengarGhost->state; + sprite->x = (gengarGhost->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (gengarGhost->yPos >> 8) - sPinballGame->cameraScrollY; + + // Check if Gengar's state changed, and start the appropriate + // sprite animation. + if (prevState != curState) + { + sprite->data[0] = curState; + switch (curState) + { + case GENGAR_STATE_STANDING: + StartSpriteAnim(sprite, 0); + break; + case GENGAR_STATE_STEP_LEFT: + StartSpriteAnim(sprite, 1); + break; + case GENGAR_STATE_STEP_RIGHT: + StartSpriteAnim(sprite, 2); + break; + case GENGAR_STATE_HIT: + StartSpriteAnim(sprite, 3); + break; + case GENGAR_STATE_LEAVING: + StartSpriteAnim(sprite, 4); + PlayBGM(MUS_NONE); + VarSet(GAME_CORNER_VAR_WINNINGS, 250); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + PlaySE(SE_SUPER_EFFECTIVE); + break; + } + } +} + +static void CrumbleGravestones(struct Gengar *gengar) +{ + int i; + + // Draw the 4 crumbled gravestone tiles to the background tilemap. + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + PlayBGM(MUS_RG_SILPH); + PlaySE(SE_M_ROCK_THROW); + tilemap[0x67] = 0x5; + tilemap[0x68] = 0x5; + tilemap[0x69] = 0x5; + tilemap[0x87] = 0x5; + tilemap[0x88] = 0x5; + tilemap[0x89] = 0x5; + tilemap[0xA7] = 0xA0; + tilemap[0xA8] = 0xA1; + tilemap[0xA9] = 0xA2; + tilemap[0xC7] = 0xA3; + tilemap[0xC8] = 0xA4; + tilemap[0xC9] = 0xA5; + + tilemap[0x6E] = 0x5; + tilemap[0x6F] = 0x5; + tilemap[0x70] = 0x5; + tilemap[0x8E] = 0xA0; + tilemap[0x8F] = 0xA1; + tilemap[0x90] = 0xA2; + tilemap[0xAE] = 0xA3; + tilemap[0xAF] = 0xA4; + tilemap[0xB0] = 0xA5; + + tilemap[0xE3] = 0x7; + tilemap[0xE4] = 0x64; + tilemap[0xE5] = 0x65; + tilemap[0x103] = 0xA6; + tilemap[0x104] = 0xA7; + tilemap[0x105] = 0xA8; + tilemap[0x123] = 0xA9; + tilemap[0x124] = 0xAA; + tilemap[0x125] = 0xAB; + + tilemap[0xED] = 0x5; + tilemap[0xEE] = 0x5; + tilemap[0xEF] = 0x5; + tilemap[0x10D] = 0x5; + tilemap[0x10E] = 0x5; + tilemap[0x10F] = 0x5; + tilemap[0x12D] = 0xA0; + tilemap[0x12E] = 0xA1; + tilemap[0x12F] = 0xA2; + tilemap[0x14D] = 0xA3; + tilemap[0x14E] = 0xA4; + tilemap[0x14F] = 0xA5; + + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + + // Update the collision map so the pinball can't collide with the + // crumbled gravestones. + for (i = 0; i < ARRAY_COUNT(sGengarGravestoneCoords); i++) + { + int index = sGengarGravestoneCoords[i][0] + sGengarGravestoneCoords[i][1] * 0x20; + gengar->collisionMap[index - 0x21] = 0x0; + gengar->collisionMap[index - 0x20] = 0x0; + gengar->collisionMap[index - 0x1F] = 0x0; + gengar->collisionMap[index - 0x01] = 0x0; + gengar->collisionMap[index] = 0x0; + gengar->collisionMap[index + 0x01] = 0x0; + gengar->collisionMap[index + 0x1F] = 0x0; + gengar->collisionMap[index + 0x20] = 0x0; + gengar->collisionMap[index + 0x21] = 0x0; + } +} diff --git a/src/pinball.c b/src/pinball.c new file mode 100644 index 000000000000..4c32588d48b3 --- /dev/null +++ b/src/pinball.c @@ -0,0 +1,5177 @@ +#include "global.h" +#include "bg.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "field_weather.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "pinball.h" +#include "random.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trig.h" +#include "window.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/weather.h" +#include "constants/vars.h" + +// In order to run the Pinball game, it should be launched via a normal script +// like the example below. VAR_RESULT is set to 1 if the player successfully +// completes the game, 0 otherwise. +// +// ... +// callnative PlayMeowthPinballGame +// waitstate +// ... + +#define PINBALL_BG_TEXT 0 +#define PINBALL_BG_COVER 1 +#define PINBALL_BG_BASE 2 + +#define WIN_TEXT 0 + +#define TAG_BALL_POKEBALL 500 +#define TAG_FLIPPER 501 +#define TAG_MEOWTH 502 +#define TAG_MEOWTH_JEWEL 503 +#define TAG_MEOWTH_JEWEL_MUTLIPLIER 504 +#define TAG_TILES_MEOWTH_JEWEL_SPARKLE 505 +#define TAG_DUGTRIO 506 +#define TAG_SEEL 507 +#define TAG_SEEL_SPARKLE 508 +#define TAG_SEEL_MULTIPLIER 509 +#define TAG_GASTLY 510 +#define TAG_HAUNTER 511 +#define TAG_GENGAR 512 +#define TAG_TIMER_DIGIT 513 + +#define GFXTAG_PLAYER_DIGIT 8 +#define PALTAG_INTERFACEPLAYER 9 + +enum { + SPR_PLAYER_DIG_1, + SPR_PLAYER_DIG_10, + SPR_PLAYER_DIG_100, + SPR_PLAYER_DIG_1000, +}; + +#define SPR_PLAYER_DIGITS SPR_PLAYER_DIG_1 +#define MAX_SPRITES_PLAYER 4 + +struct Credits { + u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; +}; + +enum +{ + GAME_TYPE_MEOWTH, + GAME_TYPE_DIGLETT, + GAME_TYPE_SEEL, + GAME_TYPE_GENGAR, +}; + +enum +{ + PINBALL_STATE_INIT, + PINBALL_STATE_RUNNING, + PINBALL_LOST_BALL_FADE_OUT, + PINBALL_LOST_BALL_FADE_IN, + PINBALL_STATE_DELAY_START_EXIT, + PINBALL_STATE_START_EXIT, + PINBALL_STATE_EXIT, + PINBALL_STATE_WAIT_ANIM, +}; + +struct Ball +{ + u8 spriteId; + u32 xPos; + u32 yPos; + s16 xVelocity; + s16 yVelocity; + s8 spin; + u8 rotation; +}; + +enum +{ + MEOWTH_STATE_WALK, + MEOWTH_STATE_HIT, + MEOWTH_STATE_FINISH, +}; + +enum +{ + MEOWTH_FACING_RIGHT, + MEOWTH_FACING_LEFT, +}; + +enum +{ + JEWEL_STATE_HIDDEN, + JEWEL_STATE_FALLING, + JEWEL_STATE_LANDED, + JEWEL_STATE_CONSUMED, +}; + +#define MAX_MEOWTH_JEWELS 6 + +struct MeowthJewel +{ + u8 state; + u8 spriteId; + u16 xPos; + u16 yPos; + s16 xVelocity; + s16 yVelocity; + u16 destYPos; +}; + +struct Meowth +{ + u8 spriteId; + u8 sparkleSpriteId; + u16 xPos; + u16 yPos; + int state; + int facing; + int yMovement; + int hitDuration; + struct MeowthJewel jewels[MAX_MEOWTH_JEWELS]; + int score; + int jewelStreak; + bool32 completed; +}; + +enum +{ + DIGLETT_STATE_INIT, + DIGLETT_STATE_HIDDEN, + DIGLETT_STATE_IDLE_0, + DIGLETT_STATE_IDLE_1, + DIGLETT_STATE_IDLE_2, + DIGLETT_STATE_IDLE_3, + DIGLETT_STATE_HIT_0, + DIGLETT_STATE_HIT_1, + DIGLETT_STATE_HIT_2, +}; + +enum +{ + DUGTRIO_STATE_HIDDEN, + DUGTRIO_STATE_3ALIVE, + DUGTRIO_STATE_3ALIVE_HIT, + DUGTRIO_STATE_2ALIVE, + DUGTRIO_STATE_2ALIVE_HIT, + DUGTRIO_STATE_1ALIVE, + DUGTRIO_STATE_1ALIVE_HIT, + DUGTRIO_STATE_0ALIVE, + DUGTRIO_STATE_COMPLETE, +}; + +#define NUM_DIGLETTS 31 + +struct Diglett +{ + bool32 completed; + bool8 initialized; + u8 curInitIndex; + u8 curUpdateIndex; + u8 states[NUM_DIGLETTS]; + u8 numDiglettsHit; + u8 *collisionMap; + u8 dugtrioSpriteId; + u8 dugtrioState; +}; + +enum +{ + SEEL_STATE_SWIM_RIGHT, + SEEL_STATE_TURN_LEFT, + SEEL_STATE_SWIM_LEFT, + SEEL_STATE_TURN_RIGHT, + SEEL_STATE_EMERGE_RIGHT, + SEEL_STATE_EMERGE_LEFT, + SEEL_STATE_VISIBLE_RIGHT, + SEEL_STATE_VISIBLE_LEFT, + SEEL_STATE_SUBMERGE_RIGHT, + SEEL_STATE_SUBMERGE_LEFT, + SEEL_STATE_HIT_RIGHT, + SEEL_STATE_HIT_LEFT, +}; + +struct SeelSwimmer +{ + u8 state; + u8 spriteId; + u16 xPos; + u16 yPos; + int counter; +}; + +#define NUM_SEELS 3 + +struct Seel +{ + bool32 completed; + struct SeelSwimmer swimmers[NUM_SEELS]; + u8 streak; + u8 score; + u8 emergingSwimmerIndex; + u8 emergingSwimmerCounter; + u8 sparkleSpriteId; +}; + +enum +{ + GHOST_DIR_RIGHT, + GHOST_DIR_LEFT, +}; + +enum +{ + GHOST_STATE_VISIBLE, + GHOST_STATE_HIT, + GHOST_STATE_INVISIBLE, + GHOST_STATE_FINISHED, +}; + +struct GraveyardGhost +{ + u8 state; + u8 spriteId; + u16 xPos; + u16 yPos; + u8 direction; + u8 leftBoundary; + u8 rightBoundary; + u8 counter; +}; + +enum +{ + GENGAR_STATE_STANDING, + GENGAR_STATE_STEP_LEFT, + GENGAR_STATE_STEP_RIGHT, + GENGAR_STATE_HIT, + GENGAR_STATE_LAST_HIT, + GENGAR_STATE_LEAVING, +}; + +struct GengarGhost +{ + u8 state; + u8 spriteId; + u16 xPos; + u16 yPos; + u8 nextFoot; + u32 counter; +}; + +enum +{ + GRAVEYARD_STATE_GASTLY, + GRAVEYARD_STATE_TO_HAUNTER, + GRAVEYARD_STATE_HAUNTER, + GRAVEYARD_STATE_TO_GENGAR, + GRAVEYARD_STATE_GENGAR, + GRAVEYARD_STATE_GENGAR_VICTORY, +}; + +#define NUM_GASTLY 3 +#define NUM_HAUNTER 2 + +struct Gengar +{ + bool32 completed; + u8 graveyardState; + u16 counter; + struct GraveyardGhost gastlyGhosts[NUM_GASTLY]; + struct GraveyardGhost haunterGhosts[NUM_HAUNTER]; + struct GengarGhost gengarGhost; + u8 numGastlyHits; + u8 numHaunterHits; + u8 numGengarHits; + u8 *collisionMap; +}; + +#define FLIPPER_LEFT 0 +#define FLIPPER_RIGHT 1 + +struct Flipper +{ + u8 type; + u8 spriteId; + u16 xPos; + u16 yPos; + int state; + int prevState; + int stateDelta; +}; + +struct Timer +{ + u32 ticks; + u8 minutesSpriteId; + u8 colonSpriteId; + u8 tensSpriteId; + u8 onesSpriteId; +}; + +struct Tilt +{ + u8 counter; + bool8 reset; + bool8 pushing; +}; + +struct PinballGame +{ + u8 state; + u8 gameType; + struct Ball ball; + struct Flipper leftFlipper; + struct Flipper rightFlipper; + struct Timer timer; + bool8 gravityEnabled; + u8 stageTileWidth; + u8 stageTileHeight; + u16 cameraScrollX; + u16 cameraScrollY; + struct Meowth meowth; + struct Diglett diglett; + struct Seel seel; + struct Gengar gengar; + struct Tilt leftTilt; + struct Tilt rightTilt; + struct Tilt downTilt; + bool8 doArtificialDownTilt; + bool8 ballIsEntering; + bool8 flippersDisabled; + bool8 completed; + u8 exitTimer; + bool8 waitExitScene; + MainCallback returnMainCallback; +}; + +static void PlayPinballGame(u8 gameType); +static void FadeToPinballScreen(u8 taskId); +static void InitPinballScreen(void); +static void InitPinballGame(void); +static u32 GetTimerTicks(u8 gameType); +static void LoadBgGfx(u8 gameType); +static void LoadSpriteGfx(u8 gameType); +static void InitBallSprite(void); +static void InitFlipperSprites(void); +static void InitTimerSprites(void); +static bool32 GameTypeUsesTimer(u8 gameType); +static void GetTimerScreenCoords(u8 gameType, int *outX, int *outY); +static void InitGameType(u8 gameType); +static void InitMeowth(void); +static void InitDiglett(void); +static void InitSeel(void); +static void InitGengar(void); +static void PinballVBlankCallback(void); +static void PinballMainCallback(void); +static void PinballMain(u8 taskId); +static void StartNewBall(void); +static void LoseBall(void); +static bool32 PlayAnotherBall(void); +static void LostBall(u8 gameType); +static void LostBallMeowth(struct Meowth *meowth); +static void LostBallSeel(struct Seel *seel); +static void LostBallGengar(struct Gengar *gengar); +static void DrawMeowthScoreJewels(struct Meowth *meowth); +static void DrawSeelScoreJewels(struct Seel *seel); +static void OpenEntrance(u8 gameType); +static void OpenEntranceMeowth(void); +static void OpenEntranceDiglett(void); +static void OpenEntranceSeel(void); +static void OpenEntranceGengar(void); +static void CloseEntranceMeowth(void); +static void CloseEntranceDiglett(void); +static void CloseEntranceSeel(void); +static void CloseEntranceGengar(void); +static void HandleBallPhysics(void); +static void ApplyGravity(struct Ball *ball); +static void LimitVelocity(struct Ball *ball); +static void HandleTilts(struct Ball *ball); +static void HandleTilt(struct Ball *ball, struct Tilt *tilt, int xDelta, int yDelta, u32 buttonMask, bool8 artificalEnabled); +static bool32 HandleFlippers(struct Ball *ball, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification); +static void UpdateFlipperState(struct Flipper *flipper); +static bool32 CheckFlipperCollision(struct Ball *ball, struct Flipper *flipper, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification); +static void UpdatePosition(struct Ball *ball); +static bool32 CheckStaticCollision(u8 gameType, struct Ball *ball, bool32 ballIsEntering, int stageTileWidth, int stageTileHeight, u8 *outCollisionNormal, u16 *outYForce); +static u8 GetCollisionAttribute(u8 gameType, bool32 ballIsEntering, int index); +static u8 GetCollisionMaskRow(u8 gameType, int collisionAttribute, int row); +static void HandleStaticCollisionForGameType(u8 gameType, int x, int y, u8 collisionAttribute, u16 *outYForce); +static void HandleStaticCollisionDiglett(struct Diglett *diglett, int x, int y, u8 collisionAttribute); +static void HandleStaticCollisionGengar(struct Gengar *gengar, u8 collisionAttribute, u16 *outYForce); +static void ApplyTiltForces(struct Ball *ball, u8 collisionNormal); +static void RotateVector(s16 *x, s16 *y, u8 angle); +static u8 ReverseBits(u8 value); +static void ApplyCollisionForces(struct Ball *ball, u16 flipperYForce, int collisionAmplification); +static void UpdateCamera(void); +static void UpdateTimer(void); +static void HandleTimeRanOut(void); +static void DisableFlippers(void); +static void StartExitPinballGame(void); +static void ExitPinballGame(void); +static void UpdateBallSprite(struct Sprite *sprite); +static void UpdateFlipperSprite(struct Sprite *sprite); +static void UpdateTimerDigitSprite(struct Sprite *sprite); +static bool32 UpdateGameType(u8 gameType); +static bool32 UpdateMeowth(struct Meowth *meowth); +static bool32 CheckObjectsCollision(u8 gameType, struct Ball *ball, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 CheckMeowthCollision(struct Ball *ball, struct Meowth *meowth, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 CheckJewelCollision(struct Ball *ball, struct MeowthJewel *jewel, u8 *outCollisionNormal); +static bool32 IsJewelSpaceOccupied(u16 xPos, u16 destYPos, struct MeowthJewel *jewels); +static bool32 CheckMeowthJewelsCollision(struct Ball *ball, struct Meowth *meowth, u8 *outCollisionNormal); +static int GetNumActiveJewels(struct Meowth *meowth); +static struct MeowthJewel *TryCreateNewJewel(struct Meowth *meowth, int ballXPos); +static void UpdateJewels(struct MeowthJewel *jewels); +static void UpdateMeowthSprite(struct Sprite *sprite); +static void UpdateMeowthJewelSprite(struct Sprite *sprite); +static void UpdateMeowthJewelMultiplierSprite(struct Sprite *sprite); +static void ResetMeowthJewels(struct Meowth *meowth); +static void UpdateMeowthJewelSparkleSprite(struct Sprite *sprite); +static bool32 UpdateDiglett(struct Diglett *diglett); +static void UpdateDiglettTiles(u16 *tilemap, int index, struct Diglett *diglett); +static void UpdateDiglettCollision(u8 *collisionMap, int index, bool32 solidCollision); +static void UpdateDugtrioSprite(struct Sprite *sprite); +static bool32 CheckSeelCollision(struct Ball *ball, struct Seel *seel, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 UpdateSeel(struct Seel *seel); +static void ResetSeels(struct Seel *seel); +static void ChooseNextEmergingSeel(int curSeelIndex, struct Seel *seel); +static u32 GetSeelVisibleTicks(int curStreak); +static void UpdateSeelSprite(struct Sprite *sprite); +static void UpdateSeelSparkleSprite(struct Sprite *sprite); +static void UpdateSeelMultiplierSprite(struct Sprite *sprite); +static bool32 CheckGhostsCollision(struct Ball *ball, u32 ticks, struct GraveyardGhost *ghosts, int numGhosts, const u8 *angles, int width, int height, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 CheckGengarCollision(struct Ball *ball, struct Gengar *gengar, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); +static bool32 UpdateGengar(struct Gengar *gengar); +static void UpdateGengarGhost(struct Gengar *gengar); +static void UpdateGhost(struct Gengar *gengar, struct GraveyardGhost *ghost, u8 *numGhostHits, u8 nextState, int numGhosts); +static void InitGhost(struct GraveyardGhost *ghost, const u8 *initialData, const struct SpriteTemplate *spriteTemplate, int ghostIndex); +static void UpdateGastlySprite(struct Sprite *sprite); +static void UpdateHaunterSprite(struct Sprite *sprite); +static void UpdateGhostSprite(struct Sprite *sprite, struct GraveyardGhost *ghost); +static void UpdateGengarSprite(struct Sprite *sprite); +static void CrumbleGravestones(struct Gengar *gengar); + +static EWRAM_DATA struct PinballGame *sPinballGame = NULL; +static EWRAM_DATA struct Credits *sScore = NULL; + +static const struct BgTemplate sPinballBgTemplates[] = { + { + .bg = PINBALL_BG_TEXT, + .charBaseIndex = 0, + .mapBaseIndex = 27, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = PINBALL_BG_COVER, + .charBaseIndex = 1, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = PINBALL_BG_BASE, + .charBaseIndex = 2, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate sPinballWinTemplates[] = { + { // WIN_TEXT + .bg = PINBALL_BG_TEXT, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x1, + }, + DUMMY_WIN_TEMPLATE, +}; + +static const u32 sCoverBgGfx[] = INCBIN_U32("graphics/pinball/bg_cover_tiles.4bpp"); +static const u16 sCoverBgPalette[] = INCBIN_U16("graphics/pinball/bg_cover_tiles.gbapal"); +static const u16 sCovergTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_cover.bin"); + +static const u32 sBallPokeballGfx[] = INCBIN_U32("graphics/pinball/ball_pokeball.4bpp.lz"); +static const u16 sBallPokeballPalette[] = INCBIN_U16("graphics/pinball/ball_pokeball.gbapal"); +static const u32 sFlipperGfx[] = INCBIN_U32("graphics/pinball/flipper.4bpp.lz"); +static const u16 sFlipperPalette[] = INCBIN_U16("graphics/pinball/flipper.gbapal"); +static const u8 sFlipperLeftMinigameCollisionMasks[][0x200] = { INCBIN_U8("graphics/pinball/flipper_left_masks_minigame.1bpp"), }; +static const u8 sFlipperRightMinigameCollisionMasks[][0x200] = { INCBIN_U8("graphics/pinball/flipper_right_masks_minigame.1bpp"), }; +static const u32 sTimerDigitsGfx[] = INCBIN_U32("graphics/pinball/timer_digits.4bpp.lz"); +static const u16 sTimerDigitsPalette[] = INCBIN_U16("graphics/pinball/timer_digits.gbapal"); + +static const u8 sFlipperCollisionRadii[] = INCBIN_U8("data/pinball/flipper_radii.bin"); +static const u8 sFlipperCollisionNormalAngles[] = INCBIN_U8("data/pinball/flipper_normal_angles.bin"); + +static const u32 sMeowthStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_meowth.4bpp"); +static const u16 sMeowthStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_meowth.gbapal"); +static const u16 sMeowthStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_meowth.bin"); +static const u8 sMeowthStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_meowth.1bpp"); +static const u8 sMeowthStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_meowth.bin"); +static const u8 sMeowthStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_meowth_entrance.bin"); +static const u32 sMeowthAnimationGfx[] = INCBIN_U32("graphics/pinball/meowth_animation.4bpp.lz"); +static const u16 sMeowthAnimationPalette[] = INCBIN_U16("graphics/pinball/meowth_animation.gbapal"); +static const u32 sMeowthJewelGfx[] = INCBIN_U32("graphics/pinball/meowth_jewel_animation.4bpp.lz"); +static const u16 sMeowthJewelPalette[] = INCBIN_U16("graphics/pinball/meowth_jewel_animation.gbapal"); +static const u32 sMeowthJewelMultipliersGfx[] = INCBIN_U32("graphics/pinball/meowth_jewel_multipliers.4bpp.lz"); +static const u32 sMeowthJewelSparkleGfx[] = INCBIN_U32("graphics/pinball/meowth_sparkle.4bpp.lz"); +static const u16 sMeowthJewelMultipliersPalette[] = INCBIN_U16("graphics/pinball/meowth_jewel_multipliers.gbapal"); +static const u8 sMeowthCollisionNormalAngles[] = INCBIN_U8("data/pinball/meowth_normal_angles.bin"); +static const u8 sMeowthJewelCollisionNormalAngles[] = INCBIN_U8("data/pinball/meowth_jewel_normal_angles.bin"); + +static const u32 sDiglettStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_diglett.4bpp"); +static const u16 sDiglettStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_diglett.gbapal"); +static const u16 sDiglettStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_diglett.bin"); +static const u8 sDiglettStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_diglett.1bpp"); +static const u8 sDiglettStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_diglett.bin"); +static const u8 sDiglettStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_diglett_entrance.bin"); +static const u32 sDugtrioAnimationGfx[] = INCBIN_U32("graphics/pinball/dugtrio_animation.4bpp.lz"); +static const u16 sDugtrioAnimationPalette[] = INCBIN_U16("graphics/pinball/dugtrio_animation.gbapal"); + +static const u32 sSeelStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_seel.4bpp"); +static const u16 sSeelStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_seel.gbapal"); +static const u16 sSeelStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_seel.bin"); +static const u8 sSeelStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_seel.1bpp"); +static const u8 sSeelStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_seel.bin"); +static const u8 sSeelStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_seel_entrance.bin"); +static const u32 sSeelAnimationGfx[] = INCBIN_U32("graphics/pinball/seel_animation.4bpp.lz"); +static const u16 sSeelAnimationPalette[] = INCBIN_U16("graphics/pinball/seel_animation.gbapal"); +static const u8 sSeelCollisionNormalAngles[] = INCBIN_U8("data/pinball/seel_normal_angles.bin"); +static const u32 sSeelSparkleGfx[] = INCBIN_U32("graphics/pinball/seel_sparkle.4bpp.lz"); +static const u16 sSeelSparklePalette[] = INCBIN_U16("graphics/pinball/seel_sparkle.gbapal"); +static const u32 sSeelMultipliersGfx[] = INCBIN_U32("graphics/pinball/seel_multipliers.4bpp.lz"); +static const u16 sSeelMultipliersPalette[] = INCBIN_U16("graphics/pinball/seel_multipliers.gbapal"); + +static const u32 sGengarStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_gengar.4bpp"); +static const u16 sGengarStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_gengar.gbapal"); +static const u16 sGengarStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_gengar.bin"); +static const u8 sGengarStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_gengar.1bpp"); +static const u8 sGengarStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_gengar.bin"); +static const u8 sGengarStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_gengar_entrance.bin"); +static const u32 sGastlyAnimationGfx[] = INCBIN_U32("graphics/pinball/gastly_animation.4bpp.lz"); +static const u16 sGastlyAnimationPalette[] = INCBIN_U16("graphics/pinball/gastly_animation.gbapal"); +static const u8 sGastlyCollisionNormalAngles[] = INCBIN_U8("data/pinball/gastly_normal_angles.bin"); +static const u32 sHaunterAnimationGfx[] = INCBIN_U32("graphics/pinball/haunter_animation.4bpp.lz"); +static const u16 sHaunterAnimationPalette[] = INCBIN_U16("graphics/pinball/haunter_animation.gbapal"); +static const u8 sHaunterCollisionNormalAngles[] = INCBIN_U8("data/pinball/haunter_normal_angles.bin"); +static const u32 sGengarAnimationGfx[] = INCBIN_U32("graphics/pinball/gengar_animation.4bpp.lz"); +static const u16 sGengarAnimationPalette[] = INCBIN_U16("graphics/pinball/gengar_animation.gbapal"); +static const u8 sGengarCollisionNormalAngles[] = INCBIN_U8("data/pinball/gengar_normal_angles.bin"); + +static const u32 gPlayer_Gfx[] = INCBIN_U32("graphics/pinball/input_numbers.4bpp.lz"); +static const u16 sPlayer_Pal[] = INCBIN_U16("graphics/pinball/input_numbers.gbapal"); + +static const struct SpritePalette sSpritePalettes2[] = +{ + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheets_PlayerInterface[] = +{ + { + .data = gPlayer_Gfx, + .size = 0x280, + .tag = GFXTAG_PLAYER_DIGIT + }, + {} +}; + +static const struct OamData sOam_CreditDigit = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2, +}; + +static const struct SpriteTemplate sSpriteTemplate_PlayerDigit = +{ + .tileTag = GFXTAG_PLAYER_DIGIT, + .paletteTag = PALTAG_INTERFACEPLAYER, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct CompressedSpriteSheet sBallPokeballSpriteSheet = { + .data = sBallPokeballGfx, + .size = 0x400, + .tag = TAG_BALL_POKEBALL, +}; + +static const struct CompressedSpriteSheet sFlipperSpriteSheet = { + .data = sFlipperGfx, + .size = 0x600, + .tag = TAG_FLIPPER, +}; + +static const struct CompressedSpriteSheet sTimerDigitsSpriteSheet = { + .data = sTimerDigitsGfx, + .size = 0x2C0, + .tag = TAG_TIMER_DIGIT, +}; + +static const struct CompressedSpriteSheet sMeowthAnimationSpriteSheet = { + .data = sMeowthAnimationGfx, + .size = 0xA00, + .tag = TAG_MEOWTH, +}; + +static const struct CompressedSpriteSheet sMeowthJewelSpriteSheet = { + .data = sMeowthJewelGfx, + .size = 0x400, + .tag = TAG_MEOWTH_JEWEL, +}; + +static const struct CompressedSpriteSheet sMeowthJewelMultipliersSpriteSheet = { + .data = sMeowthJewelMultipliersGfx, + .size = 0x140, + .tag = TAG_MEOWTH_JEWEL_MUTLIPLIER, +}; + +static const struct CompressedSpriteSheet sMeowthSparkleSpriteSheet = { + .data = sMeowthJewelSparkleGfx, + .size = 0x40, + .tag = TAG_TILES_MEOWTH_JEWEL_SPARKLE, +}; + +static const struct CompressedSpriteSheet sDugtrioAnimationSpriteSheet = { + .data = sDugtrioAnimationGfx, + .size = 0x1A00, + .tag = TAG_DUGTRIO, +}; + +static const struct CompressedSpriteSheet sSeelAnimationSpriteSheet = { + .data = sSeelAnimationGfx, + .size = 0x1E00, + .tag = TAG_SEEL, +}; + +static const struct CompressedSpriteSheet sSeelSparkleSpriteSheet = { + .data = sSeelSparkleGfx, + .size = 0x40, + .tag = TAG_SEEL_SPARKLE, +}; + +static const struct CompressedSpriteSheet sSeelMultipliersSpriteSheet = { + .data = sSeelMultipliersGfx, + .size = 0x1C0, + .tag = TAG_SEEL_MULTIPLIER, +}; + +static const struct CompressedSpriteSheet sGastlyAnimationSpriteSheet = { + .data = sGastlyAnimationGfx, + .size = 0x600, + .tag = TAG_GASTLY, +}; + +static const struct CompressedSpriteSheet sHaunterAnimationSpriteSheet = { + .data = sHaunterAnimationGfx, + .size = 0x3000, + .tag = TAG_HAUNTER, +}; + +static const struct CompressedSpriteSheet sGengarAnimationSpriteSheet = { + .data = sGengarAnimationGfx, + .size = 0x4000, + .tag = TAG_GENGAR, +}; + +static const struct SpritePalette sPinballSpritePalette = { sBallPokeballPalette, TAG_BALL_POKEBALL }; +static const struct SpritePalette sFlipperSpritePalette = { sFlipperPalette, TAG_FLIPPER }; +static const struct SpritePalette sTimerDigitsSpritePalette = { sTimerDigitsPalette, TAG_TIMER_DIGIT }; +static const struct SpritePalette sMeowthAnimationSpritePalette = { sMeowthAnimationPalette, TAG_MEOWTH }; +static const struct SpritePalette sMeowthJewelSpritePalette = { sMeowthJewelPalette, TAG_MEOWTH_JEWEL }; +static const struct SpritePalette sMeowthJewelMultipliersSpritePalette = { sMeowthJewelMultipliersPalette, TAG_MEOWTH_JEWEL_MUTLIPLIER }; +static const struct SpritePalette sDugtrioAnimationSpritePalette = { sDugtrioAnimationPalette, TAG_DUGTRIO }; +static const struct SpritePalette sSeelAnimationSpritePalette = { sSeelAnimationPalette, TAG_SEEL }; +static const struct SpritePalette sSeelSparkleSpritePalette = { sSeelSparklePalette, TAG_SEEL_SPARKLE }; +static const struct SpritePalette sSeelMultipliersSpritePalette = { sSeelMultipliersPalette, TAG_SEEL_MULTIPLIER }; +static const struct SpritePalette sGastlyAnimationSpritePalette = { sGastlyAnimationPalette, TAG_GASTLY }; +static const struct SpritePalette sHaunterAnimationSpritePalette = { sHaunterAnimationPalette, TAG_HAUNTER }; +static const struct SpritePalette sGengarAnimationSpritePalette = { sGengarAnimationPalette, TAG_GENGAR }; + +static const struct OamData sBallOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +#define BALL_FRAME_ANIMCMD(n) \ +static const union AnimCmd sBallAnimCmd_##n[] =\ +{\ + ANIMCMD_FRAME((n) * 4, 0),\ + ANIMCMD_END,\ +}; + +BALL_FRAME_ANIMCMD(0) +BALL_FRAME_ANIMCMD(1) +BALL_FRAME_ANIMCMD(2) +BALL_FRAME_ANIMCMD(3) +BALL_FRAME_ANIMCMD(4) +BALL_FRAME_ANIMCMD(5) +BALL_FRAME_ANIMCMD(6) +BALL_FRAME_ANIMCMD(7) + +static const union AnimCmd *const sBallAnimCmds[] = { + sBallAnimCmd_0, + sBallAnimCmd_1, + sBallAnimCmd_2, + sBallAnimCmd_3, + sBallAnimCmd_4, + sBallAnimCmd_5, + sBallAnimCmd_6, + sBallAnimCmd_7, +}; + +static const struct SpriteTemplate sBallPokeballSpriteTemplate = { + .tileTag = TAG_BALL_POKEBALL, + .paletteTag = TAG_BALL_POKEBALL, + .oam = &sBallOamData, + .anims = sBallAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateBallSprite, +}; + +static const struct OamData sFlipperOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +#define FLIPPER_FRAME_ANIMCMD(n, flip) \ +static const union AnimCmd sFlipperAnimCmd_##n[] =\ +{\ + ANIMCMD_FRAME(((n) % 3) * 16, 0, .hFlip = (flip)),\ + ANIMCMD_END,\ +}; + +FLIPPER_FRAME_ANIMCMD(0, FALSE) +FLIPPER_FRAME_ANIMCMD(1, FALSE) +FLIPPER_FRAME_ANIMCMD(2, FALSE) +FLIPPER_FRAME_ANIMCMD(3, TRUE) +FLIPPER_FRAME_ANIMCMD(4, TRUE) +FLIPPER_FRAME_ANIMCMD(5, TRUE) + +static const union AnimCmd *const sFlipperAnimCmds[] = { + sFlipperAnimCmd_0, + sFlipperAnimCmd_1, + sFlipperAnimCmd_2, + sFlipperAnimCmd_3, + sFlipperAnimCmd_4, + sFlipperAnimCmd_5, +}; + +static const struct SpriteTemplate sFlipperSpriteTemplate = { + .tileTag = TAG_FLIPPER, + .paletteTag = TAG_FLIPPER, + .oam = &sFlipperOamData, + .anims = sFlipperAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFlipperSprite, +}; + +static const struct OamData sTimerDigitOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +#define TIMER_DIGIT_FRAME_ANIMCMD(n) \ +static const union AnimCmd sTimerDigitAnimCmd_##n[] =\ +{\ + ANIMCMD_FRAME((n) * 2, 0),\ + ANIMCMD_END,\ +}; + +TIMER_DIGIT_FRAME_ANIMCMD(0) +TIMER_DIGIT_FRAME_ANIMCMD(1) +TIMER_DIGIT_FRAME_ANIMCMD(2) +TIMER_DIGIT_FRAME_ANIMCMD(3) +TIMER_DIGIT_FRAME_ANIMCMD(4) +TIMER_DIGIT_FRAME_ANIMCMD(5) +TIMER_DIGIT_FRAME_ANIMCMD(6) +TIMER_DIGIT_FRAME_ANIMCMD(7) +TIMER_DIGIT_FRAME_ANIMCMD(8) +TIMER_DIGIT_FRAME_ANIMCMD(9) +TIMER_DIGIT_FRAME_ANIMCMD(10) + +static const union AnimCmd *const sTimerDigitAnimCmds[] = { + sTimerDigitAnimCmd_0, + sTimerDigitAnimCmd_1, + sTimerDigitAnimCmd_2, + sTimerDigitAnimCmd_3, + sTimerDigitAnimCmd_4, + sTimerDigitAnimCmd_5, + sTimerDigitAnimCmd_6, + sTimerDigitAnimCmd_7, + sTimerDigitAnimCmd_8, + sTimerDigitAnimCmd_9, + sTimerDigitAnimCmd_10, +}; + +static const struct SpriteTemplate sTimerDigitSpriteTemplate = { + .tileTag = TAG_TIMER_DIGIT, + .paletteTag = TAG_TIMER_DIGIT, + .oam = &sTimerDigitOamData, + .anims = sTimerDigitAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateTimerDigitSprite, +}; + +static const struct OamData sMeowthOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sMeowthAnimCmd_WalkRight[] = { + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sMeowthAnimCmd_WalkLeft[] = { + ANIMCMD_FRAME(0, 15, .hFlip = TRUE), + ANIMCMD_FRAME(16, 15, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sMeowthAnimCmd_HitRight[] = { + ANIMCMD_FRAME(32, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthAnimCmd_HitLeft[] = { + ANIMCMD_FRAME(32, 0, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthAnimCmd_Finish[] = { + ANIMCMD_FRAME(48, 30), + ANIMCMD_FRAME(64, 30), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sMeowthAnimCmds[] = { + sMeowthAnimCmd_WalkRight, + sMeowthAnimCmd_WalkLeft, + sMeowthAnimCmd_HitRight, + sMeowthAnimCmd_HitLeft, + sMeowthAnimCmd_Finish, +}; + +static const struct SpriteTemplate sMeowthSpriteTemplate = { + .tileTag = TAG_MEOWTH, + .paletteTag = TAG_MEOWTH, + .oam = &sMeowthOamData, + .anims = sMeowthAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateMeowthSprite, +}; + +static const struct OamData sMeowthJewelOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sMeowthJewelAnimCmd_Create[] = { + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(4, 20), + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelAnimCmd_Sparkle[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelAnimCmd_Disappear[] = { + ANIMCMD_FRAME(12, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(20, 1), + ANIMCMD_FRAME(24, 1), + ANIMCMD_FRAME(28, 1), + ANIMCMD_FRAME(24, 1), + ANIMCMD_FRAME(20, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(12, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sMeowthJewelAnimCmds[] = { + sMeowthJewelAnimCmd_Create, + sMeowthJewelAnimCmd_Sparkle, + sMeowthJewelAnimCmd_Disappear, +}; + +static const struct SpriteTemplate sMeowthJewelSpriteTemplate = { + .tileTag = TAG_MEOWTH_JEWEL, + .paletteTag = TAG_MEOWTH_JEWEL, + .oam = &sMeowthJewelOamData, + .anims = sMeowthJewelAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateMeowthJewelSprite, +}; + +static const struct OamData sMeowthJewelMultiplierOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_2x[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_3x[] = { + ANIMCMD_FRAME(2, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_4x[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_5x[] = { + ANIMCMD_FRAME(6, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sMeowthJewelMultiplierAnimCmd_6x[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sMeowthJewelMultiplierAnimCmds[] = { + sMeowthJewelMultiplierAnimCmd_2x, + sMeowthJewelMultiplierAnimCmd_3x, + sMeowthJewelMultiplierAnimCmd_4x, + sMeowthJewelMultiplierAnimCmd_5x, + sMeowthJewelMultiplierAnimCmd_6x, +}; + +static const struct SpriteTemplate sMeowthJewelMultiplierSpriteTemplate = { + .tileTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, + .paletteTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, + .oam = &sMeowthJewelMultiplierOamData, + .anims = sMeowthJewelMultiplierAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateMeowthJewelMultiplierSprite, +}; + +static const struct OamData sMeowthJewelSparkleOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sMeowthJewelSparkleAnimCmd_0[] = { + ANIMCMD_FRAME(0, 11), + ANIMCMD_FRAME(1, 11), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sMeowthJewelSparkleAnimCmds[] = { + sMeowthJewelSparkleAnimCmd_0, +}; + +static const struct SpriteTemplate sMeowthJewelSparkleSpriteTemplate = { + .tileTag = TAG_TILES_MEOWTH_JEWEL_SPARKLE, + .paletteTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, + .oam = &sMeowthJewelSparkleOamData, + .anims = sMeowthJewelSparkleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateMeowthJewelSparkleSprite, +}; + +static const u8 sDiglettStateTiles[][4] = { + [DIGLETT_STATE_INIT] = {0x4C, 0x4D, 0x4E, 0x4F}, + [DIGLETT_STATE_HIDDEN] = {0x4C, 0x4D, 0x4E, 0x4F}, + [DIGLETT_STATE_IDLE_0] = {0x3C, 0x3D, 0x3E, 0x3F}, + [DIGLETT_STATE_IDLE_1] = {0x44, 0x45, 0x46, 0x47}, + [DIGLETT_STATE_IDLE_2] = {0x3C, 0x3D, 0x3E, 0x3F}, + [DIGLETT_STATE_IDLE_3] = {0x40, 0x41, 0x42, 0x43}, + [DIGLETT_STATE_HIT_0] = {0x48, 0x49, 0x4A, 0x4B}, + [DIGLETT_STATE_HIT_1] = {0x48, 0x49, 0x4A, 0x4B}, + [DIGLETT_STATE_HIT_2] = {0x48, 0x49, 0x4A, 0x4B}, +}; + +static const u8 sDiglettCoords[NUM_DIGLETTS][2] = { + {1, 3}, + {1, 5}, + {1, 7}, + {3, 4}, + {3, 6}, + {3, 8}, + {5, 3}, + {5, 5}, + {5, 7}, + {5, 9}, + {7, 4}, + {7, 6}, + {7, 8}, + {7, 10}, + {9, 5}, + {9, 7}, + {9, 9}, + {11, 4}, + {11, 6}, + {11, 8}, + {11, 10}, + {13, 3}, + {13, 5}, + {13, 7}, + {13, 9}, + {15, 4}, + {15, 6}, + {15, 8}, + {17, 3}, + {17, 5}, + {17, 7}, +}; + +static const u8 sDiglettInitOrder[NUM_DIGLETTS] = { 0, 28, 1, 29, 3, 25, 6, 21, 2, 30, 4, 26, 7, 22, 10, 17, 5, 27, 8, 23, 11, 18, 14, 9, 24, 12, 19, 15, 13, 20, 16 }; + +static const struct OamData sDugtrioOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sDugtrioAnimCmd_Hidden[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sDugtrioAnimCmd_3Alive[] = { + ANIMCMD_FRAME(16, 14), + ANIMCMD_FRAME(32, 14), + ANIMCMD_FRAME(48, 14), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sDugtrioAnimCmd_3AliveHit[] = { + ANIMCMD_FRAME(64, 12), + ANIMCMD_END, +}; + +static const union AnimCmd sDugtrioAnimCmd_2Alive[] = { + ANIMCMD_FRAME(80, 14), + ANIMCMD_FRAME(96, 14), + ANIMCMD_FRAME(112, 14), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sDugtrioAnimCmd_2AliveHit[] = { + ANIMCMD_FRAME(128, 12), + ANIMCMD_END, +}; + +static const union AnimCmd sDugtrioAnimCmd_1Alive[] = { + ANIMCMD_FRAME(144, 14), + ANIMCMD_FRAME(160, 28), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sDugtrioAnimCmd_1AliveHit[] = { + ANIMCMD_FRAME(176, 12), + ANIMCMD_END, +}; + +static const union AnimCmd sDugtrioAnimCmd_0Alive[] = { + ANIMCMD_FRAME(192, 33), // We want a duration of 66 frames, but 63 is the maximum an ANIMCMD_FRAME can hold. + ANIMCMD_FRAME(192, 33), + ANIMCMD_END, +}; + +static const union AnimCmd *const sDugtrioAnimCmds[] = { + sDugtrioAnimCmd_Hidden, + sDugtrioAnimCmd_3Alive, + sDugtrioAnimCmd_3AliveHit, + sDugtrioAnimCmd_2Alive, + sDugtrioAnimCmd_2AliveHit, + sDugtrioAnimCmd_1Alive, + sDugtrioAnimCmd_1AliveHit, + sDugtrioAnimCmd_0Alive, +}; + +static const struct SpriteTemplate sDugtrioSpriteTemplate = { + .tileTag = TAG_DUGTRIO, + .paletteTag = TAG_DUGTRIO, + .oam = &sDugtrioOamData, + .anims = sDugtrioAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateDugtrioSprite, +}; + +static const struct OamData sSeelOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSeelAnimCmd_SwimRight[] = { + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(16, 13), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(32, 12), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sSeelAnimCmd_TurnLeft[] = { + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(64, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_SwimLeft[] = { + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(16, 13, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(32, 12, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sSeelAnimCmd_TurnRight[] = { + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE), + ANIMCMD_FRAME(80, 6, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_EmergeRight[] = { + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(144, 8), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_EmergeLeft[] = { + ANIMCMD_FRAME(48, 4, .hFlip = TRUE), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(144, 8), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_Visible[] = { + ANIMCMD_FRAME(160, 30), + ANIMCMD_FRAME(176, 30), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sSeelAnimCmd_SubmergeRight[] = { + ANIMCMD_FRAME(144, 9), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(192, 6), + ANIMCMD_FRAME(224, 16), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(64, 4, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_SubmergeLeft[] = { + ANIMCMD_FRAME(144, 9), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(192, 6), + ANIMCMD_FRAME(224, 16), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_HitRight[] = { + ANIMCMD_FRAME(208, 16), + ANIMCMD_FRAME(192, 6), + ANIMCMD_FRAME(224, 16), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(64, 4, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelAnimCmd_HitLeft[] = { + ANIMCMD_FRAME(208, 16), + ANIMCMD_FRAME(192, 6), + ANIMCMD_FRAME(224, 16), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(80, 6), + ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(64, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_FRAME(48, 4, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSeelAnimCmds[] = { + sSeelAnimCmd_SwimRight, + sSeelAnimCmd_TurnLeft, + sSeelAnimCmd_SwimLeft, + sSeelAnimCmd_TurnRight, + sSeelAnimCmd_EmergeRight, + sSeelAnimCmd_EmergeLeft, + sSeelAnimCmd_Visible, + sSeelAnimCmd_SubmergeRight, + sSeelAnimCmd_SubmergeLeft, + sSeelAnimCmd_HitRight, + sSeelAnimCmd_HitLeft, +}; + +static const struct SpriteTemplate sSeelSpriteTemplate = { + .tileTag = TAG_SEEL, + .paletteTag = TAG_SEEL, + .oam = &sSeelOamData, + .anims = sSeelAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSeelSprite, +}; + +static const u8 sInitialSeelStates[NUM_SEELS] = { + SEEL_STATE_SWIM_RIGHT, + SEEL_STATE_SWIM_LEFT, + SEEL_STATE_SWIM_RIGHT, +}; + +static const u8 sInitialSeelCoords[NUM_SEELS][2] = { + {110, 30}, + {46, 56}, + {78, 82}, +}; + +static const struct OamData sSeelSparkleOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSeelSparkleAnimCmd_0[] = { + ANIMCMD_FRAME(0, 11), + ANIMCMD_FRAME(1, 11), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const sSeelSparkleAnimCmds[] = { + sSeelSparkleAnimCmd_0, +}; + +static const struct SpriteTemplate sSeelSparkleSpriteTemplate = { + .tileTag = TAG_SEEL_SPARKLE, + .paletteTag = TAG_SEEL_SPARKLE, + .oam = &sSeelSparkleOamData, + .anims = sSeelSparkleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSeelSparkleSprite, +}; + +static const struct OamData sSeelMultiplierOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(16x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x8), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_2x[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_3x[] = { + ANIMCMD_FRAME(2, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_4x[] = { + ANIMCMD_FRAME(4, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_5x[] = { + ANIMCMD_FRAME(6, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_6x[] = { + ANIMCMD_FRAME(8, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_7x[] = { + ANIMCMD_FRAME(10, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sSeelMultiplierAnimCmd_8x[] = { + ANIMCMD_FRAME(12, 0), + ANIMCMD_END, +}; + +static const union AnimCmd *const sSeelMultiplierAnimCmds[] = { + sSeelMultiplierAnimCmd_2x, + sSeelMultiplierAnimCmd_3x, + sSeelMultiplierAnimCmd_4x, + sSeelMultiplierAnimCmd_5x, + sSeelMultiplierAnimCmd_6x, + sSeelMultiplierAnimCmd_7x, + sSeelMultiplierAnimCmd_8x, +}; + +static const struct SpriteTemplate sSeelMultiplierSpriteTemplate = { + .tileTag = TAG_SEEL_MULTIPLIER, + .paletteTag = TAG_SEEL_MULTIPLIER, + .oam = &sSeelMultiplierOamData, + .anims = sSeelMultiplierAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSeelMultiplierSprite, +}; + +static const struct OamData sGastlyOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sGastlyAnimCmd_Visible[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sGastlyAnimCmd_Hit[] = { + ANIMCMD_FRAME(16, 8), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(16, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(16, 2), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(32, 1), + ANIMCMD_FRAME(16, 1), + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sGastlyAnimCmds[] = { + sGastlyAnimCmd_Visible, + sGastlyAnimCmd_Hit, +}; + +static const struct SpriteTemplate sGastlySpriteTemplate = { + .tileTag = TAG_GASTLY, + .paletteTag = TAG_GASTLY, + .oam = &sGastlyOamData, + .anims = sGastlyAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateGastlySprite, +}; + +static const struct OamData sHaunterOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sHaunterAnimCmd_Visible[] = { + ANIMCMD_FRAME(0, 13), + ANIMCMD_FRAME(64, 13), + ANIMCMD_FRAME(128, 13), + ANIMCMD_FRAME(192, 13), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sHaunterAnimCmd_Hit[] = { + ANIMCMD_FRAME(256, 8), + ANIMCMD_FRAME(320, 4), + ANIMCMD_FRAME(256, 4), + ANIMCMD_FRAME(320, 4), + ANIMCMD_FRAME(256, 3), + ANIMCMD_FRAME(320, 3), + ANIMCMD_FRAME(256, 3), + ANIMCMD_FRAME(320, 3), + ANIMCMD_FRAME(256, 2), + ANIMCMD_FRAME(320, 2), + ANIMCMD_FRAME(256, 2), + ANIMCMD_FRAME(320, 2), + ANIMCMD_FRAME(256, 1), + ANIMCMD_FRAME(320, 1), + ANIMCMD_FRAME(256, 1), + ANIMCMD_FRAME(320, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sHaunterAnimCmds[] = { + sHaunterAnimCmd_Visible, + sHaunterAnimCmd_Hit, +}; + +static const struct SpriteTemplate sHaunterSpriteTemplate = { + .tileTag = TAG_HAUNTER, + .paletteTag = TAG_HAUNTER, + .oam = &sHaunterOamData, + .anims = sHaunterAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateHaunterSprite, +}; + +static const struct OamData sGengarOamData = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sGengarAnimCmd_Stand[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sGengarAnimCmd_StepLeft[] = { + ANIMCMD_FRAME(64, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sGengarAnimCmd_StepRight[] = { + ANIMCMD_FRAME(128, 0), + ANIMCMD_END, +}; + +static const union AnimCmd sGengarAnimCmd_Hit[] = { + ANIMCMD_FRAME(192, 16), + ANIMCMD_FRAME(64, 32), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_END, +}; + +static const union AnimCmd sGengarAnimCmd_Leave[] = { + ANIMCMD_FRAME(192, 16), + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(320, 8), + ANIMCMD_FRAME(384, 12), + ANIMCMD_FRAME(320, 10), + ANIMCMD_FRAME(0, 16), + ANIMCMD_FRAME(320, 8), + ANIMCMD_FRAME(384, 12), + ANIMCMD_FRAME(320, 10), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 4), + ANIMCMD_FRAME(448, 4), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 3), + ANIMCMD_FRAME(448, 3), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(64, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 2), + ANIMCMD_FRAME(448, 2), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(128, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(448, 1), + ANIMCMD_END, +}; + +static const union AnimCmd *const sGengarAnimCmds[] = { + sGengarAnimCmd_Stand, + sGengarAnimCmd_StepLeft, + sGengarAnimCmd_StepRight, + sGengarAnimCmd_Hit, + sGengarAnimCmd_Leave, +}; + +static const struct SpriteTemplate sGengarSpriteTemplate = { + .tileTag = TAG_GENGAR, + .paletteTag = TAG_GENGAR, + .oam = &sGengarOamData, + .anims = sGengarAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateGengarSprite, +}; + +static const u8 sGengarGravestoneCollisionAttributes[] = {0x19, 0x1A, 0x1B, 0x1C, 0x27, 0x1D, 0x1E, 0x1F, 0x20}; + +static const u8 sGengarGravestoneCoords[][2] = { + {8, 5}, + {15, 4}, + {4, 8}, + {14, 9}, +}; + +static const u8 sInitialGastlyData[NUM_GASTLY][5] = { + {24, 24, GHOST_DIR_RIGHT, 24, 64}, + {96, 48, GHOST_DIR_RIGHT, 96, 136}, + {64, 72, GHOST_DIR_RIGHT, 64, 96}, +}; + +static const u8 sInitialHaunterData[NUM_HAUNTER][5] = { + {94, 30, GHOST_DIR_RIGHT, 94, 134}, + {30, 66, GHOST_DIR_RIGHT, 30, 70}, +}; + +static const s8 sCollisionTestPointOffsets[][2] = { + { 4, 0 }, + { 4, 1 }, + { 3, 3 }, + { 1, 4 }, + { 0, 4 }, + { -1, 4 }, + { -3, 3 }, + { -4, 1 }, + { -4, 0 }, + { -4, -1 }, + { -3, -3 }, + { -1, -4 }, + { 0, -4 }, + { 1, -4 }, + { 3, -3 }, + { 4, -1 }, +}; + +// This array is indexed by the start and end indexes of the 16 collision point tests. +// The values here are on a 256-degree'd unit circle, where an angle of 0x00 is pointing +// directly up, 0x40 is pointing directly right, 0x80 is pointing directly down, and +// 0xC0 is pointing directly left. +static const u8 sCollisionNormals[256] = { + 0xC0, 0xC5, 0xD0, 0xDB, 0xE0, 0xE5, 0xF0, 0xFB, 0x00, 0x05, 0x10, 0x1B, 0x20, 0x25, 0x30, 0x3B, // 0x0X + 0x45, 0xCA, 0xD5, 0xE0, 0xE5, 0xEA, 0xF5, 0x00, 0x05, 0x0A, 0x15, 0x20, 0x25, 0x2A, 0x35, 0x40, // 0x1X + 0x50, 0x55, 0xE0, 0xEB, 0xF0, 0xF5, 0x00, 0x0B, 0x10, 0x15, 0x20, 0x2B, 0x30, 0x35, 0x40, 0x4B, // 0x2X + 0x5B, 0x60, 0x6B, 0xF6, 0xFB, 0x00, 0x0B, 0x16, 0x1B, 0x20, 0x2B, 0x36, 0x3B, 0x40, 0x4B, 0x56, // 0x3X + 0x60, 0x65, 0x70, 0x7B, 0x00, 0x05, 0x10, 0x1B, 0x20, 0x25, 0x30, 0x3B, 0x40, 0x45, 0x50, 0x5B, // 0x4X + 0x65, 0x6A, 0x75, 0x80, 0x85, 0x0A, 0x15, 0x20, 0x25, 0x2A, 0x35, 0x40, 0x45, 0x4A, 0x55, 0x60, // 0x5X + 0x70, 0x75, 0x80, 0x8B, 0x90, 0x95, 0x20, 0x2B, 0x30, 0x35, 0x40, 0x4B, 0x50, 0x55, 0x60, 0x6B, // 0x6X + 0x7B, 0x80, 0x8B, 0x96, 0x9B, 0xA0, 0xAB, 0x36, 0x3B, 0x40, 0x4B, 0x56, 0x5B, 0x60, 0x6B, 0x76, // 0x7X + 0x80, 0x85, 0x90, 0x9B, 0xA0, 0xA5, 0xB0, 0xBB, 0x40, 0x45, 0x50, 0x5B, 0x60, 0x65, 0x70, 0x7B, // 0x8X + 0x85, 0x8A, 0x95, 0xA0, 0xA5, 0xAA, 0xB5, 0xC0, 0xC5, 0x4A, 0x55, 0x60, 0x65, 0x6A, 0x75, 0x80, // 0x9X + 0x90, 0x95, 0xA0, 0xAB, 0xB0, 0xB5, 0xC0, 0xCB, 0xD0, 0xD5, 0x60, 0x6B, 0x70, 0x75, 0x80, 0x8B, // 0xAX + 0x9B, 0xA0, 0xAB, 0xB6, 0xBB, 0xC0, 0xCB, 0xD6, 0xDB, 0xE0, 0xEB, 0x76, 0x7B, 0x80, 0x8B, 0x96, // 0xBX + 0xA0, 0xA5, 0xB0, 0xBB, 0xC0, 0xC5, 0xD0, 0xDB, 0xE0, 0xE5, 0xF0, 0xFB, 0x80, 0x85, 0x90, 0x9B, // 0xCX + 0xA5, 0xAA, 0xB5, 0xC0, 0xC5, 0xCA, 0xD5, 0xE0, 0xE5, 0xEA, 0xF5, 0x00, 0x05, 0x8A, 0x95, 0xA0, // 0xDX + 0xB0, 0xB5, 0xC0, 0xCB, 0xD0, 0xD5, 0xE0, 0xEB, 0xF0, 0xF5, 0x00, 0x0B, 0x10, 0x15, 0xA0, 0xAB, // 0xEX + 0xBB, 0xC0, 0xCB, 0xD6, 0xDB, 0xE0, 0xEB, 0xF6, 0xFB, 0x00, 0x0B, 0x16, 0x1B, 0x20, 0x2B, 0xB6, // 0xFX +}; + +// This array is indexed by the start and end indexes of the 16 collision point tests. +// It is used to move the ball out of the the wall it's colliding with. +static const u16 sCollisionXDeltas[256] = { + 0xFF00, 0xFEFB, 0xFECC, 0xFE8C, 0xFE77, 0xFE71, 0xFEAD, 0xFF73, 0x0000, 0x00AC, 0x027F, 0x0497, 0x0589, 0x066D, 0x0808, 0x08E7, // 0x0X + 0x08E7, 0xFF08, 0xFF01, 0xFEE4, 0xFEDE, 0xFEE3, 0xFF32, 0x0000, 0x008D, 0x0137, 0x02FD, 0x04FD, 0x05E1, 0x06B6, 0x082C, 0x08E1, // 0x1X + 0x0808, 0x07B4, 0xFF4B, 0xFF70, 0xFF81, 0xFF99, 0x0000, 0x00CE, 0x0153, 0x01F0, 0x0389, 0x0547, 0x0608, 0x06B8, 0x07D4, 0x082C, // 0x2X + 0x066D, 0x05F6, 0x045D, 0xFFC2, 0xFFE0, 0x0000, 0x0067, 0x011D, 0x018F, 0x0214, 0x036C, 0x04D9, 0x0572, 0x05F8, 0x06B8, 0x06B6, // 0x3X + 0x0589, 0x0504, 0x0353, 0x0119, 0x0000, 0x0020, 0x007F, 0x0122, 0x0189, 0x0200, 0x0334, 0x0479, 0x04FF, 0x0572, 0x0608, 0x05E1, // 0x4X + 0x0497, 0x0406, 0x0243, 0x0000, 0xFEE7, 0x003E, 0x0090, 0x011C, 0x0174, 0x01DC, 0x02EB, 0x0407, 0x0479, 0x04D9, 0x0547, 0x04FD, // 0x5X + 0x027F, 0x01DC, 0x0000, 0xFDBD, 0xFCAD, 0xFBA3, 0x00B5, 0x00FF, 0x0134, 0x0176, 0x022B, 0x02EB, 0x0334, 0x036C, 0x0389, 0x02FD, // 0x6X + 0x00AC, 0x0000, 0xFE24, 0xFBFA, 0xFAFC, 0xFA0A, 0xF84C, 0x00F8, 0x0105, 0x011E, 0x0176, 0x01DC, 0x0200, 0x0214, 0x01F0, 0x0137, // 0x7X + 0x0000, 0xFF54, 0xFD81, 0xFB69, 0xFA77, 0xF993, 0xF7F8, 0xF719, 0x0100, 0x0105, 0x0134, 0x0174, 0x0189, 0x018F, 0x0153, 0x008D, // 0x8X + 0xFF73, 0xFEC9, 0xFD03, 0xFB03, 0xFA1F, 0xF94A, 0xF7D4, 0xF71F, 0xF719, 0x00F8, 0x00FF, 0x011C, 0x0122, 0x011D, 0x00CE, 0x0000, // 0x9X + 0xFEAD, 0xFE10, 0xFC77, 0xFAB9, 0xF9F8, 0xF948, 0xF82C, 0xF7D4, 0xF7F8, 0xF84C, 0x00B5, 0x0090, 0x007F, 0x0067, 0x0000, 0xFF32, // 0xAX + 0xFE71, 0xFDEC, 0xFC94, 0xFB27, 0xFA8E, 0xFA08, 0xF948, 0xF94A, 0xF993, 0xFA0A, 0xFBA3, 0x003E, 0x0020, 0x0000, 0xFF99, 0xFEE3, // 0xBX + 0xFE77, 0xFE00, 0xFCCC, 0xFB87, 0xFB01, 0xFA8E, 0xF9F8, 0xFA1F, 0xFA77, 0xFAFC, 0xFCAD, 0xFEE7, 0x0000, 0xFFE0, 0xFF81, 0xFEDE, // 0xCX + 0xFE8C, 0xFE24, 0xFD15, 0xFBF9, 0xFB87, 0xFB27, 0xFAB9, 0xFB03, 0xFB69, 0xFBFA, 0xFDBD, 0x0000, 0x0119, 0xFFC2, 0xFF70, 0xFEE4, // 0xDX + 0xFECC, 0xFE8A, 0xFDD5, 0xFD15, 0xFCCC, 0xFC94, 0xFC77, 0xFD03, 0xFD81, 0xFE24, 0x0000, 0x0243, 0x0353, 0x045D, 0xFF4B, 0xFF01, // 0xEX + 0xFEFB, 0xFEE2, 0xFE8A, 0xFE24, 0xFE00, 0xFDEC, 0xFE10, 0xFEC9, 0xFF54, 0x0000, 0x01DC, 0x0406, 0x0504, 0x05F6, 0x07B4, 0xFF08, // 0xFX +}; + +// This array is indexed by the start and end indexes of the 16 collision point tests. +// It is used to move the ball out of the the wall it's colliding with. +static const u16 sCollisionYDeltas[256] = { + 0x0000, 0xFFE0, 0xFF81, 0xFEDE, 0xFE77, 0xFE00, 0xFCCC, 0xFB87, 0xFB01, 0xFA8E, 0xF9F8, 0xFA1F, 0xFA77, 0xFAFC, 0xFCAD, 0xFEE7, // 0x0X + 0x0119, 0xFFC2, 0xFF70, 0xFEE4, 0xFE8C, 0xFE24, 0xFD15, 0xFBF9, 0xFB87, 0xFB27, 0xFAB9, 0xFB03, 0xFB69, 0xFBFA, 0xFDBD, 0x0000, // 0x1X + 0x0353, 0x045D, 0xFF4B, 0xFF01, 0xFECC, 0xFE8A, 0xFDD5, 0xFD15, 0xFCCC, 0xFC94, 0xFC77, 0xFD03, 0xFD81, 0xFE24, 0x0000, 0x0243, // 0x2X + 0x0504, 0x05F6, 0x07B4, 0xFF08, 0xFEFB, 0xFEE2, 0xFE8A, 0xFE24, 0xFE00, 0xFDEC, 0xFE10, 0xFEC9, 0xFF54, 0x0000, 0x01DC, 0x0406, // 0x3X + 0x0589, 0x066D, 0x0808, 0x08E7, 0xFF00, 0xFEFB, 0xFECC, 0xFE8C, 0xFE77, 0xFE71, 0xFEAD, 0xFF73, 0x0000, 0x00AC, 0x027F, 0x0497, // 0x4X + 0x05E1, 0x06B6, 0x082C, 0x08E1, 0x08E7, 0xFF08, 0xFF01, 0xFEE4, 0xFEDE, 0xFEE3, 0xFF32, 0x0000, 0x008D, 0x0137, 0x02FD, 0x04FD, // 0x5X + 0x0608, 0x06B8, 0x07D4, 0x082C, 0x0808, 0x07B4, 0xFF4B, 0xFF70, 0xFF81, 0xFF99, 0x0000, 0x00CE, 0x0153, 0x01F0, 0x0389, 0x0547, // 0x6X + 0x0572, 0x05F8, 0x06B8, 0x06B6, 0x066D, 0x05F6, 0x045D, 0xFFC2, 0xFFE0, 0x0000, 0x0067, 0x011D, 0x018F, 0x0214, 0x036C, 0x04D9, // 0x7X + 0x04FF, 0x0572, 0x0608, 0x05E1, 0x0589, 0x0504, 0x0353, 0x0119, 0x0000, 0x0020, 0x007F, 0x0122, 0x0189, 0x0200, 0x0334, 0x0479, // 0x8X + 0x0479, 0x04D9, 0x0547, 0x04FD, 0x0497, 0x0406, 0x0243, 0x0000, 0xFEE7, 0x003E, 0x0090, 0x011C, 0x0174, 0x01DC, 0x02EB, 0x0407, // 0x9X + 0x0334, 0x036C, 0x0389, 0x02FD, 0x027F, 0x01DC, 0x0000, 0xFDBD, 0xFCAD, 0xFBA3, 0x00B5, 0x00FF, 0x0134, 0x0176, 0x022B, 0x02EB, // 0xAX + 0x0200, 0x0214, 0x01F0, 0x0137, 0x00AC, 0x0000, 0xFE24, 0xFBFA, 0xFAFC, 0xFA0A, 0xF84C, 0x00F8, 0x0105, 0x011E, 0x0176, 0x01DC, // 0xBX + 0x0189, 0x018F, 0x0153, 0x008D, 0x0000, 0xFF54, 0xFD81, 0xFB69, 0xFA77, 0xF993, 0xF7F8, 0xF719, 0x0100, 0x0105, 0x0134, 0x0174, // 0xCX + 0x0122, 0x011D, 0x00CE, 0x0000, 0xFF73, 0xFEC9, 0xFD03, 0xFB03, 0xFA1F, 0xF94A, 0xF7D4, 0xF71F, 0xF719, 0x00F8, 0x00FF, 0x011C, // 0xDX + 0x007F, 0x0067, 0x0000, 0xFF32, 0xFEAD, 0xFE10, 0xFC77, 0xFAB9, 0xF9F8, 0xF948, 0xF82C, 0xF7D4, 0xF7F8, 0xF84C, 0x00B5, 0x0090, // 0xEX + 0x0020, 0x0000, 0xFF99, 0xFEE3, 0xFE71, 0xFDEC, 0xFC94, 0xFB27, 0xFA8E, 0xFA08, 0xF948, 0xF94A, 0xF993, 0xFA0A, 0xFBA3, 0x003E, // 0xFX +}; + +static const u16 sFlipperRadiusMagnitudes[32] = { + 0x0000, 0x000C, 0x001C, 0x0030, 0x0038, 0x0048, 0x005C, 0x006C, 0x0070, 0x0080, 0x0094, 0x00A4, 0x00B4, 0x00C4, 0x00D4, 0x00E4, + 0x00F8, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, +}; + +static const s16 sTiltLeftOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_left_deltas.bin"); +static const s16 sTiltRightOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_right_deltas.bin"); +static const s16 sTiltDownOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_deltas.bin"); +static const s16 sTiltDownRightVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_right_deltas.bin"); +static const s16 sTiltDownLeftVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_left_deltas.bin"); + +static const s16 *const sTiltVelocityDeltas[] = { + NULL, + sTiltLeftOnlyVelocityDeltas, + sTiltRightOnlyVelocityDeltas, + NULL, + sTiltDownOnlyVelocityDeltas, + sTiltDownLeftVelocityDeltas, + sTiltDownRightVelocityDeltas, + sTiltDownOnlyVelocityDeltas, +}; + +void PlayMeowthPinballGame(void) +{ + PlayPinballGame(GAME_TYPE_MEOWTH); +} + +void PlayDiglettPinballGame(void) +{ + PlayPinballGame(GAME_TYPE_DIGLETT); +} + +void PlaySeelPinballGame(void) +{ + PlayPinballGame(GAME_TYPE_SEEL); +} + +void PlayGengarPinballGame(void) +{ + PlayPinballGame(GAME_TYPE_GENGAR); +} + +static void SetPlayerDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place + + for (i = 0; i < 4; i++) // Always show 4 digits + { + u8 digit = num / d; + + // Show the digit (all digits are visible) + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = FALSE; + + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } + + // Set the tileNum based on the current digit + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.tileNum = + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreatePlayerSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PlayerInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS] = CreateSprite(&sSpriteTemplate_PlayerDigit, i * 8 + 48, 150, 2); + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; + } +} + +static void PlayPinballGame(u8 gameType) +{ + u8 taskId; + + ScriptContext_Stop(); + sPinballGame = AllocZeroed(sizeof(*sPinballGame)); + sPinballGame->gameType = gameType; + sPinballGame->returnMainCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; + taskId = CreateTask(FadeToPinballScreen, 0); +} + +static void FadeToPinballScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + SetMainCallback2(InitPinballScreen); + DestroyTask(taskId); + } + break; + } +} + +static void InitPinballScreen(void) +{ + switch (gMain.state) + { + case 0: + sScore = AllocZeroed(sizeof(struct Credits)); + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + gMain.state++; + break; + case 1: + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sPinballBgTemplates, ARRAY_COUNT(sPinballBgTemplates)); + SetBgTilemapBuffer(PINBALL_BG_COVER, AllocZeroed(BG_SCREEN_SIZE * 4)); + SetBgTilemapBuffer(PINBALL_BG_BASE, AllocZeroed(BG_SCREEN_SIZE * 4)); + LoadBgGfx(sPinballGame->gameType); + InitWindows(sPinballWinTemplates); + DeactivateAllTextPrinters(); + LoadMessageBoxGfx(WIN_TEXT, 0x0, 0xF0); + LoadUserWindowBorderGfx(WIN_TEXT, 0x14, 0xE0); + gMain.state++; + break; + case 2: + ResetSpriteData(); + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + CopyBgTilemapBufferToVram(PINBALL_BG_COVER); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + ShowBg(PINBALL_BG_TEXT); + ShowBg(PINBALL_BG_COVER); + ShowBg(PINBALL_BG_BASE); + gMain.state++; + break; + case 4: + LoadSpritePalettes(sSpritePalettes2); + CreatePlayerSprites(); + SetPlayerDigits(0); + LoadCompressedSpriteSheet(&sBallPokeballSpriteSheet); + LoadSpritePalette(&sPinballSpritePalette); + LoadCompressedSpriteSheet(&sFlipperSpriteSheet); + LoadSpritePalette(&sFlipperSpritePalette); + LoadCompressedSpriteSheet(&sTimerDigitsSpriteSheet); + LoadSpritePalette(&sTimerDigitsSpritePalette); + LoadSpriteGfx(sPinballGame->gameType); + InitPinballGame(); + InitBallSprite(); + InitFlipperSprites(); + InitTimerSprites(); + InitGameType(sPinballGame->gameType); + StartNewBall(); + gMain.state++; + case 5: + // Center game in the middle of the screen + SetGpuReg(REG_OFFSET_BG2HOFS, -40); + + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(PinballVBlankCallback); + SetMainCallback2(PinballMainCallback); + CreateTask(PinballMain, 0); + return; + } +} + +static void LoadBgGfx(u8 gameType) +{ + ResetPaletteFade(); + switch (gameType) + { + case GAME_TYPE_MEOWTH: + LoadBgTiles(PINBALL_BG_BASE, sMeowthStageBgGfx, sizeof(sMeowthStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sMeowthStageBgTilemap, sizeof(sMeowthStageBgTilemap), 0); + LoadPalette(sMeowthStageBgPalette, 0, sizeof(sMeowthStageBgPalette)); + break; + case GAME_TYPE_DIGLETT: + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sDiglettStageBgTilemap, sizeof(sDiglettStageBgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + break; + case GAME_TYPE_SEEL: + LoadBgTiles(PINBALL_BG_BASE, sSeelStageBgGfx, sizeof(sSeelStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sSeelStageBgTilemap, sizeof(sSeelStageBgTilemap), 0); + LoadPalette(sSeelStageBgPalette, 0, sizeof(sSeelStageBgPalette)); + break; + case GAME_TYPE_GENGAR: + LoadBgTiles(PINBALL_BG_BASE, sGengarStageBgGfx, sizeof(sGengarStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, sGengarStageBgTilemap, sizeof(sGengarStageBgTilemap), 0); + LoadPalette(sGengarStageBgPalette, 0, sizeof(sGengarStageBgPalette)); + break; + } + + LoadBgTiles(PINBALL_BG_COVER, sCoverBgGfx, sizeof(sCoverBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_COVER, sCovergTilemap, sizeof(sCovergTilemap), 0); + LoadPalette(sCoverBgPalette, 0x10, sizeof(sCoverBgPalette)); +} + +static void LoadSpriteGfx(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + LoadCompressedSpriteSheet(&sMeowthAnimationSpriteSheet); + LoadSpritePalette(&sMeowthAnimationSpritePalette); + LoadCompressedSpriteSheet(&sMeowthJewelSpriteSheet); + LoadSpritePalette(&sMeowthJewelSpritePalette); + LoadCompressedSpriteSheet(&sMeowthJewelMultipliersSpriteSheet); + LoadCompressedSpriteSheet(&sMeowthSparkleSpriteSheet); + LoadSpritePalette(&sMeowthJewelMultipliersSpritePalette); + break; + case GAME_TYPE_DIGLETT: + LoadCompressedSpriteSheet(&sDugtrioAnimationSpriteSheet); + LoadSpritePalette(&sDugtrioAnimationSpritePalette); + break; + case GAME_TYPE_SEEL: + LoadCompressedSpriteSheet(&sSeelAnimationSpriteSheet); + LoadSpritePalette(&sSeelAnimationSpritePalette); + LoadCompressedSpriteSheet(&sSeelSparkleSpriteSheet); + LoadSpritePalette(&sSeelSparkleSpritePalette); + LoadCompressedSpriteSheet(&sSeelMultipliersSpriteSheet); + LoadSpritePalette(&sSeelMultipliersSpritePalette); + break; + case GAME_TYPE_GENGAR: + LoadCompressedSpriteSheet(&sGastlyAnimationSpriteSheet); + LoadSpritePalette(&sGastlyAnimationSpritePalette); + LoadCompressedSpriteSheet(&sHaunterAnimationSpriteSheet); + LoadSpritePalette(&sHaunterAnimationSpritePalette); + break; + } +} + +static void InitPinballGame(void) +{ + sPinballGame->stageTileWidth = 32; + sPinballGame->stageTileHeight = 32; + sPinballGame->gravityEnabled = TRUE; + sPinballGame->rightFlipper.type = FLIPPER_RIGHT; + sPinballGame->rightFlipper.xPos = 93; + sPinballGame->rightFlipper.yPos = 122; + sPinballGame->leftFlipper.type = FLIPPER_LEFT; + sPinballGame->leftFlipper.xPos = 67; + sPinballGame->leftFlipper.yPos = 122; + sPinballGame->timer.ticks = GetTimerTicks(sPinballGame->gameType); + sPinballGame->flippersDisabled = FALSE; + sPinballGame->cameraScrollX = -40; + sPinballGame->cameraScrollY = 0; +} + +static u32 GetTimerTicks(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + return 60 * 60 + 59; + case GAME_TYPE_SEEL: + return 90 * 60 + 59; + case GAME_TYPE_GENGAR: + return 90 * 60 + 59; + default: + return 1; + } +} + +static void InitBallSprite(void) +{ + sPinballGame->ball.spriteId = CreateSprite(&sBallPokeballSpriteTemplate, 0, 0, 3); + StartSpriteAnim(&gSprites[sPinballGame->ball.spriteId], 3); +} + +static void InitFlipperSprites(void) +{ + sPinballGame->rightFlipper.spriteId = CreateSprite(&sFlipperSpriteTemplate, 0, 0, 4); + sPinballGame->leftFlipper.spriteId = CreateSprite(&sFlipperSpriteTemplate, 0, 0, 4); + gSprites[sPinballGame->leftFlipper.spriteId].data[0] = FLIPPER_LEFT; + gSprites[sPinballGame->rightFlipper.spriteId].data[0] = FLIPPER_RIGHT; + StartSpriteAnim(&gSprites[sPinballGame->leftFlipper.spriteId], 0); + StartSpriteAnim(&gSprites[sPinballGame->rightFlipper.spriteId], 3); +} + +static void InitTimerSprites(void) +{ + if (GameTypeUsesTimer(sPinballGame->gameType)) + { + int x, y; + GetTimerScreenCoords(sPinballGame->gameType, &x, &y); + sPinballGame->timer.minutesSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x, y, 4); + sPinballGame->timer.colonSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 8, y, 4); + sPinballGame->timer.tensSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 16, y, 4); + sPinballGame->timer.onesSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 24, y, 4); + gSprites[sPinballGame->timer.minutesSpriteId].data[0] = 0; + gSprites[sPinballGame->timer.colonSpriteId].data[0] = 1; + gSprites[sPinballGame->timer.tensSpriteId].data[0] = 2; + gSprites[sPinballGame->timer.onesSpriteId].data[0] = 3; + StartSpriteAnim(&gSprites[sPinballGame->timer.minutesSpriteId], 0); + StartSpriteAnim(&gSprites[sPinballGame->timer.colonSpriteId], 10); + StartSpriteAnim(&gSprites[sPinballGame->timer.tensSpriteId], 0); + StartSpriteAnim(&gSprites[sPinballGame->timer.onesSpriteId], 0); + } +} + +static bool32 GameTypeUsesTimer(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_DIGLETT: + return FALSE; + default: + return TRUE; + } +} + +static void GetTimerScreenCoords(u8 gameType, int *outX, int *outY) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + case GAME_TYPE_SEEL: + *outX = 131; + *outY = 109; + break; + case GAME_TYPE_GENGAR: + *outX = 131; + *outY = 8; + break; + default: + *outX = 0; + *outY = 0; + break; + } +} + +static void InitGameType(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + InitMeowth(); + break; + case GAME_TYPE_DIGLETT: + InitDiglett(); + break; + case GAME_TYPE_SEEL: + InitSeel(); + break; + case GAME_TYPE_GENGAR: + InitGengar(); + break; + } +} + +static void InitMeowth(void) +{ + struct Meowth *meowth = &sPinballGame->meowth; + + meowth->xPos = 40; + meowth->yPos = 40; + meowth->state = MEOWTH_STATE_WALK; + meowth->facing = MEOWTH_FACING_RIGHT; + meowth->yMovement = 0; + meowth->score = 0; + meowth->jewelStreak = 0; + meowth->spriteId = CreateSprite(&sMeowthSpriteTemplate, 0, 0, 5); + meowth->sparkleSpriteId = CreateSprite(&sMeowthJewelSparkleSpriteTemplate, 0, 0, 6); + StartSpriteAnim(&gSprites[meowth->spriteId], 0); + StartSpriteAnim(&gSprites[meowth->sparkleSpriteId], 0); +} + +static void InitDiglett(void) +{ + struct Diglett *diglett = &sPinballGame->diglett; + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sDiglettStageBgCollisionMap) * sizeof(sDiglettStageBgCollisionMap[0])); + memcpy(diglett->collisionMap, sDiglettStageBgCollisionMap, ARRAY_COUNT(sDiglettStageBgCollisionMap) * sizeof(sDiglettStageBgCollisionMap[0])); + diglett->dugtrioSpriteId = CreateSprite(&sDugtrioSpriteTemplate, 80, 16, 5); + diglett->dugtrioState = DUGTRIO_STATE_HIDDEN; + gSprites[diglett->dugtrioSpriteId].data[0] = DUGTRIO_STATE_HIDDEN; + StartSpriteAnim(&gSprites[diglett->dugtrioSpriteId], 0); +} + +static void InitSeel(void) +{ + int i; + struct Seel *seel = &sPinballGame->seel; + seel->completed = FALSE; + seel->streak = 0; + seel->sparkleSpriteId = CreateSprite(&sSeelSparkleSpriteTemplate, 0, 0, 6); + StartSpriteAnim(&gSprites[seel->sparkleSpriteId], 0); + for (i = 0; i < NUM_SEELS; i++) + { + struct SeelSwimmer *swimmer = &seel->swimmers[i]; + swimmer->state = sInitialSeelStates[i]; + swimmer->xPos = sInitialSeelCoords[i][0] << 8; + swimmer->yPos = sInitialSeelCoords[i][1] << 8; + swimmer->spriteId = CreateSprite(&sSeelSpriteTemplate, swimmer->xPos >> 8, swimmer->yPos >> 8, 5); + gSprites[swimmer->spriteId].data[0] = swimmer->state; + gSprites[swimmer->spriteId].data[1] = i; + if (swimmer->state == SEEL_STATE_SWIM_RIGHT) + StartSpriteAnim(&gSprites[swimmer->spriteId], 0); + else + StartSpriteAnim(&gSprites[swimmer->spriteId], 2); + } +} + +static void InitGengar(void) +{ + int i; + struct Gengar *gengar = &sPinballGame->gengar; + gengar->completed = FALSE; + gengar->numGastlyHits = 0; + gengar->numHaunterHits = 0; + gengar->numGengarHits = 0; + gengar->graveyardState = GRAVEYARD_STATE_GASTLY; + gengar->collisionMap = Alloc(ARRAY_COUNT(sGengarStageBgCollisionMap) * sizeof(sGengarStageBgCollisionMap[0])); + memcpy(gengar->collisionMap, sGengarStageBgCollisionMap, ARRAY_COUNT(sGengarStageBgCollisionMap) * sizeof(sGengarStageBgCollisionMap[0])); + for (i = 0; i < NUM_GASTLY; i++) { + InitGhost(&gengar->gastlyGhosts[i], sInitialGastlyData[i], &sGastlySpriteTemplate, i); } + //SetWeather(WEATHER_FOG_HORIZONTAL); +} + +static void PinballVBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void PinballMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void PinballMain(u8 taskId) +{ + bool32 completed; + + switch (sPinballGame->state) + { + case PINBALL_STATE_INIT: + if (!gPaletteFade.active) + { + sPinballGame->state = PINBALL_STATE_RUNNING; + } + break; + case PINBALL_STATE_RUNNING: + completed = UpdateGameType(sPinballGame->gameType); + if (!sPinballGame->completed && completed) + sPinballGame->completed = TRUE; + + HandleBallPhysics(); + UpdateCamera(); + + if (!sPinballGame->waitExitScene) + UpdateTimer(); + break; + case PINBALL_LOST_BALL_FADE_OUT: + if (!gPaletteFade.active) + { + LostBall(sPinballGame->gameType); + StartNewBall(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); + sPinballGame->state = PINBALL_LOST_BALL_FADE_IN; + } + break; + case PINBALL_LOST_BALL_FADE_IN: + if (!gPaletteFade.active) + sPinballGame->state = PINBALL_STATE_RUNNING; + break; + case PINBALL_STATE_DELAY_START_EXIT: + if (--sPinballGame->exitTimer == 0) + sPinballGame->state = PINBALL_STATE_START_EXIT; + break; + case PINBALL_STATE_START_EXIT: + StartExitPinballGame(); + break; + case PINBALL_STATE_EXIT: + ExitPinballGame(); + break; + } +} + +static void StartNewBall(void) +{ + sPinballGame->ball.xPos = 166 << 8; + sPinballGame->ball.yPos = 70 << 8; + sPinballGame->ball.xVelocity = 0x40; + sPinballGame->ball.yVelocity = 0; + sPinballGame->ball.spin = 0; + OpenEntrance(sPinballGame->gameType); +} + +static void OpenEntrance(u8 gameType) +{ + sPinballGame->ballIsEntering = TRUE; + switch (gameType) + { + case GAME_TYPE_MEOWTH: + OpenEntranceMeowth(); + break; + case GAME_TYPE_DIGLETT: + OpenEntranceDiglett(); + break; + case GAME_TYPE_SEEL: + OpenEntranceSeel(); + break; + case GAME_TYPE_GENGAR: + OpenEntranceGengar(); + break; + } +} + +static void OpenEntranceMeowth(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x415; + //tilemap[0x114] = 0x414; + tilemap[0x133] = 0x413; + tilemap[0x173] = 0x408; // 0x412 og + tilemap[0x152] = 0x413; // 0x400 og + tilemap[0x153] = 0x410; + tilemap[0x154] = 0x011; + tilemap[0x172] = 0x409; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void OpenEntranceDiglett(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x55; + tilemap[0x114] = 0x56; + tilemap[0x133] = 0x0; + tilemap[0x134] = 0x54; + tilemap[0x152] = 0x0; + tilemap[0x153] = 0x52; + tilemap[0x154] = 0x53; + tilemap[0x172] = 0x50; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void OpenEntranceSeel(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x41E; + tilemap[0x114] = 0x41D; + tilemap[0x133] = 0x41B; + tilemap[0x134] = 0x41A; + tilemap[0x152] = 0x400; + tilemap[0x153] = 0x418; + tilemap[0x154] = 0x417; + tilemap[0x172] = 0x414; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void OpenEntranceGengar(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x0; + tilemap[0x132] = 0x1; + tilemap[0x133] = 0x2; + tilemap[0x152] = 0x5; + tilemap[0x153] = 0x3; + tilemap[0x172] = 0x4; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void CloseEntrance(u8 gameType) +{ + sPinballGame->ballIsEntering = FALSE; + switch (gameType) + { + case GAME_TYPE_MEOWTH: + CloseEntranceMeowth(); + break; + case GAME_TYPE_DIGLETT: + CloseEntranceDiglett(); + break; + case GAME_TYPE_SEEL: + CloseEntranceSeel(); + break; + case GAME_TYPE_GENGAR: + CloseEntranceGengar(); + break; + } +} + +static void CloseEntranceMeowth(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x403; + tilemap[0x173] = 0x40D; + tilemap[0x133] = 0x403; + //tilemap[0x134] = 0x401; + tilemap[0x152] = 0x40F; + tilemap[0x153] = 0x40E; + tilemap[0x154] = 0x002; + tilemap[0x172] = 0x40C; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void CloseEntranceDiglett(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x24; + tilemap[0x114] = 0x2; + tilemap[0x133] = 0x22; + tilemap[0x134] = 0x1; + tilemap[0x152] = 0x1F; + tilemap[0x153] = 0x20; + tilemap[0x154] = 0x2; + tilemap[0x172] = 0x1B; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void CloseEntranceSeel(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x41C; + tilemap[0x114] = 0x401; + tilemap[0x133] = 0x419; + tilemap[0x134] = 0x408; + tilemap[0x152] = 0x416; + tilemap[0x153] = 0x415; + tilemap[0x154] = 0x405; + tilemap[0x172] = 0x411; + tilemap[0x173] = 0x401; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void CloseEntranceGengar(void) +{ + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[0x113] = 0x4D; + tilemap[0x132] = 0x41; + tilemap[0x133] = 0x42; + tilemap[0x152] = 0x36; + tilemap[0x153] = 0x37; + tilemap[0x172] = 0x2F; + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void DrawMeowthScoreJewels(struct Meowth *meowth) +{ + int i; + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + for (i = 0; i < 20; i++) + { + if (i < meowth->score) + tilemap[i] = i % 2 ? 0x41E : 0x1E; + else + tilemap[i] = sMeowthStageBgTilemap[i]; + } + + VarSet(GAME_CORNER_VAR_WINNINGS, (meowth->score * 3)); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void DrawSeelScoreJewels(struct Seel *seel) +{ + int i; + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + for (i = 0; i < 20; i++) + { + if (i < seel->score) + { + if (i == 0 || i == 19) + tilemap[i] = 0x28; + else if (i == 1) + tilemap[i] = 0x29; + else if (i == 18) + tilemap[i] = 0x2B; + else + tilemap[i] = 0x2A; + } + else + { + tilemap[i] = sSeelStageBgTilemap[i]; + } + } + VarSet(GAME_CORNER_VAR_WINNINGS, (seel->score * 4)); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); +} + +static void HandleBallPhysics(void) +{ + bool32 isFlipperColliding; + bool32 isStaticColliding; + bool32 isObjectColliding = FALSE; + u8 flipperCollisionNormal; + u8 objectCollisionNormal; + u8 staticCollisionNormal; + u8 collisionNormal; + u16 artificialYForce = 0; + int collisionAmplification = 0; + struct Ball *ball = &sPinballGame->ball; + + if (sPinballGame->ballIsEntering && (ball->xPos >> 8) < 144) + CloseEntrance(sPinballGame->gameType); + + if (sPinballGame->gravityEnabled) + ApplyGravity(ball); + + LimitVelocity(ball); + HandleTilts(ball); + isFlipperColliding = HandleFlippers(ball, &artificialYForce, &flipperCollisionNormal, &collisionAmplification); + if (!isFlipperColliding) + isObjectColliding = CheckObjectsCollision(sPinballGame->gameType, ball, sPinballGame->timer.ticks, &objectCollisionNormal, &collisionAmplification); + + isStaticColliding = CheckStaticCollision(sPinballGame->gameType, ball, sPinballGame->ballIsEntering, sPinballGame->stageTileWidth, sPinballGame->stageTileHeight, &staticCollisionNormal, &artificialYForce); + if (isFlipperColliding) + collisionNormal = flipperCollisionNormal; + else if (isObjectColliding) + collisionNormal = objectCollisionNormal; + else + collisionNormal = staticCollisionNormal; + + if (isFlipperColliding || isObjectColliding || isStaticColliding) + { + ApplyTiltForces(ball, collisionNormal); + RotateVector(&ball->xVelocity, &ball->yVelocity, collisionNormal); + ApplyCollisionForces(ball, artificialYForce, collisionAmplification); + RotateVector(&ball->xVelocity, &ball->yVelocity, -collisionNormal); + + if ((isStaticColliding) && ((ball->yVelocity > 300) || (ball->xVelocity > 300))) // Wall or static object collision + { + PlaySE(SE_WALL_HIT); // Trigger the sound effect for wall collision + } + } + + UpdatePosition(ball); + + if ((ball->yPos >> 8) > 168) + { + ball->yPos == 170 << 8; + LoseBall(); + } +} + +static void LoseBall(void) +{ + if (PlayAnotherBall()) + { + sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else + { + if (!sPinballGame->waitExitScene) + { + sPinballGame->state = PINBALL_STATE_DELAY_START_EXIT; + sPinballGame->exitTimer = 2 * 60; + } + + gSpecialVar_Result = sPinballGame->completed; + } +} + +static bool32 PlayAnotherBall(void) +{ + switch (sPinballGame->gameType) + { + case GAME_TYPE_MEOWTH: + case GAME_TYPE_SEEL: + case GAME_TYPE_GENGAR: + return sPinballGame->timer.ticks > 0 && !sPinballGame->completed; + case GAME_TYPE_DIGLETT: + return FALSE; + default: + return TRUE; + } +} + +static void LostBall(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + LostBallMeowth(&sPinballGame->meowth); + PlaySE(SE_FAINT); + break; + case GAME_TYPE_DIGLETT: + PlaySE(SE_FAINT); + break; + case GAME_TYPE_SEEL: + LostBallSeel(&sPinballGame->seel); + PlaySE(SE_FAINT); + break; + case GAME_TYPE_GENGAR: + LostBallGengar(&sPinballGame->gengar); + PlaySE(SE_FAINT); + break; + } +} + +#define JEWEL_SPARKLE_DURATION 180 + +static void LostBallMeowth(struct Meowth *meowth) +{ + struct Sprite *sparkleSprite = &gSprites[sPinballGame->meowth.sparkleSpriteId]; + if (meowth->score > 4) + { + meowth->score -= 4; + sparkleSprite->data[0] = JEWEL_SPARKLE_DURATION; + sparkleSprite->data[1] = meowth->score; + } + else + { + meowth->score = 0; + sparkleSprite->data[0] = 0; + sparkleSprite->data[1] = 0; + } + + meowth->jewelStreak = 0; + ResetMeowthJewels(meowth); + DrawMeowthScoreJewels(meowth); +} + +#define SEEL_SPARKLE_DURATION 180 + +static void LostBallSeel(struct Seel *seel) +{ + struct Sprite *sparkleSprite = &gSprites[sPinballGame->seel.sparkleSpriteId]; + if (seel->score > 4) + { + seel->score -= 4; + sparkleSprite->data[0] = SEEL_SPARKLE_DURATION; + sparkleSprite->data[1] = seel->score; + } + else + { + seel->score = 0; + sparkleSprite->data[0] = 0; + sparkleSprite->data[1] = 0; + } + + seel->streak = 0; + ResetSeels(seel); + DrawSeelScoreJewels(seel); +} + +static void LostBallGengar(struct Gengar *gengar) +{ +} + +#define GRAVITY 0x0B + +static void ApplyGravity(struct Ball *ball) +{ + ball->yVelocity += GRAVITY; +} + +#define MAX_VELOCITY 0x07FF + +static void LimitVelocity(struct Ball *ball) +{ + // Limit each velocity axis independently. This means + // the ball can move diagonally at a higher speed. + if (ball->xVelocity > MAX_VELOCITY) + ball->xVelocity = MAX_VELOCITY; + else if (ball->xVelocity < -MAX_VELOCITY) + ball->xVelocity = -MAX_VELOCITY; + + if (ball->yVelocity > MAX_VELOCITY) + ball->yVelocity = MAX_VELOCITY; + else if (ball->yVelocity < -MAX_VELOCITY) + ball->yVelocity = -MAX_VELOCITY; +} + +static void HandleTilts(struct Ball *ball) +{ + HandleTilt(ball, &sPinballGame->rightTilt, 1, 0, DPAD_RIGHT, FALSE); + HandleTilt(ball, &sPinballGame->leftTilt, -1, 0, DPAD_LEFT, FALSE); + HandleTilt(ball, &sPinballGame->downTilt, 0, 1, DPAD_UP | DPAD_DOWN, TRUE); +} + +static void HandleTilt(struct Ball *ball, struct Tilt *tilt, int xDelta, int yDelta, u32 buttonMask, bool8 artificalEnabled) +{ + if ((!tilt->reset && (gMain.newKeys & buttonMask))) + { + PlaySE(SE_BREAKABLE_DOOR); + } + + if ((artificalEnabled && sPinballGame->doArtificialDownTilt) || (!tilt->reset && (gMain.heldKeys & buttonMask))) + { + if (++tilt->counter >= 3) + { + if (artificalEnabled) + sPinballGame->doArtificialDownTilt = FALSE; + + tilt->pushing = FALSE; + tilt->reset = TRUE; + } + else + { + ball->xPos += (xDelta << 8); + ball->yPos += (yDelta << 8); + tilt->pushing = TRUE; + } + } + else + { + tilt->pushing = FALSE; + if (tilt->counter > 0) + tilt->counter--; + else if (!(gMain.heldKeys & buttonMask)) + tilt->reset = FALSE; + } +} + +static bool32 HandleFlippers(struct Ball *ball, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + bool32 collided; + struct Flipper *flipper; + + UpdateFlipperState(&sPinballGame->rightFlipper); + UpdateFlipperState(&sPinballGame->leftFlipper); + + collided = CheckFlipperCollision(ball, &sPinballGame->rightFlipper, outYForce, outCollisionNormal, outCollisionAmplification); + if (!collided) + collided = CheckFlipperCollision(ball, &sPinballGame->leftFlipper, outYForce, outCollisionNormal, outCollisionAmplification); + + return collided; +} + +#define FLIPPER_STATE_DELTA 0x0333 + +static void UpdateFlipperState(struct Flipper *flipper) +{ + int stateDelta; + + flipper->prevState = flipper->state; + + if (!sPinballGame->flippersDisabled && (gMain.newKeys & A_BUTTON)) // A button rising edge + { + PlaySE(SE_VEND); // Play sound effect + } + else if (!sPinballGame->flippersDisabled && (gMain.newKeys & B_BUTTON)) // A button rising edge + { + PlaySE(SE_VEND); // Play sound effect + } + + if (!sPinballGame->flippersDisabled && (gMain.heldKeys & (A_BUTTON | B_BUTTON))) + { + if (flipper->state == 0x0FFF) + stateDelta = 0; + else + stateDelta = FLIPPER_STATE_DELTA; + } + else + { + if (flipper->state == 0) + stateDelta = 0; + else + stateDelta = -FLIPPER_STATE_DELTA; + } + + flipper->stateDelta = stateDelta; + flipper->state += stateDelta; +} + +static bool32 CheckFlipperCollision(struct Ball *ball, struct Flipper *flipper, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int curState, stateDelta; + int offset; + u32 collisionRadius, magnitude; + u8 collisionNormal; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + int xOffset = ballXPos - flipper->xPos + 24; + int yOffset = ballYPos - flipper->yPos + 16; + + if (xOffset < 0 || xOffset >= 48 || yOffset < 0 || yOffset >= 32) + return FALSE; + + *outYForce = 0; + *outCollisionAmplification = 0; + + if (flipper->type == FLIPPER_RIGHT) + xOffset = 48 - xOffset; + + offset = xOffset * 32 + yOffset; + collisionRadius = 0; + + stateDelta = flipper->prevState < flipper->state ? 1 : -1; + curState = flipper->prevState >> 8; + while (1) + { + collisionRadius = sFlipperCollisionRadii[curState * 0x600 + offset]; + if (collisionRadius != 0) + break; + + if (curState == (flipper->state >> 8)) + return FALSE; + + curState += stateDelta; + } + + collisionNormal = sFlipperCollisionNormalAngles[curState * 0x600 + offset]; + magnitude = sFlipperRadiusMagnitudes[collisionRadius]; + *outYForce = ((flipper->stateDelta * 4) * magnitude) >> 8; + *outCollisionNormal = flipper->type == FLIPPER_LEFT ? collisionNormal : -collisionNormal; + *outCollisionAmplification = 1; + + // Don't apply any y force if the ball is being forced downwards into the flipper + if ((*outYForce) & 0x8000) + { + *outYForce = 0; + *outCollisionAmplification = 0; + } + + return TRUE; +} + +#define MAX_POS_UPDATE 0x04FF + +static void UpdatePosition(struct Ball *ball) +{ + // Moves the ball's position according to its velocity. + // The amount it's moved is artificially limited at a lower + // threshold than the maximum velocity. + if (ball->xVelocity > MAX_POS_UPDATE) + ball->xPos += MAX_POS_UPDATE; + else if (ball->xVelocity < -MAX_POS_UPDATE) + ball->xPos -= MAX_POS_UPDATE; + else + ball->xPos += ball->xVelocity; + + if (ball->yVelocity > MAX_POS_UPDATE) + ball->yPos += MAX_POS_UPDATE; + else if (ball->yVelocity < -MAX_POS_UPDATE) + ball->yPos -= MAX_POS_UPDATE; + else + ball->yPos += ball->yVelocity; + + if (ball->xPos & 0x80000000) + ball->xPos = 0; + if (ball->yPos & 0x80000000) + ball->yPos = 0; + +} + +static bool32 CheckStaticCollision(u8 gameType, struct Ball *ball, bool32 ballIsEntering, int stageTileWidth, int stageTileHeight, u8 *outCollisionNormal, u16 *outYForce) +{ + int i; + u16 xDelta, yDelta; + int collisionIndex; + int maxStringStart, maxStringEnd, curStringStart, curStringLength, maxStringLength; + u8 collisionTestAttributes[ARRAY_COUNT(sCollisionTestPointOffsets)]; + u8 collisionTestCoords[ARRAY_COUNT(sCollisionTestPointOffsets)][2]; + u8 collisionTests[ARRAY_COUNT(sCollisionTestPointOffsets)]; + + // Check each of the test points around the ball's origin + // to see if they are colliding with the static collision masks. + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) + { + int testX, testY; + int tileX, tileY, tileIndex; + int collisionAttribute, row, column; + u8 collisionMaskRow; + int xPos = ball->xPos >> 8; + int yPos = ball->yPos >> 8; + + collisionTests[i] = 0; + testX = xPos + sCollisionTestPointOffsets[i][0]; + testY = yPos + sCollisionTestPointOffsets[i][1]; + if (testX < 0 || testY < 0) + { + collisionTests[i] = 1; + continue; + } + + tileX = testX / 8; + tileY = testY / 8; + row = testY % 8; + column = testX % 8; + tileIndex = (tileY * stageTileWidth) + tileX; + collisionAttribute = GetCollisionAttribute(gameType, ballIsEntering, tileIndex); + collisionMaskRow = GetCollisionMaskRow(gameType, collisionAttribute, row); + collisionTests[i] = (collisionMaskRow & (1 << column)) != 0; + collisionTestCoords[i][0] = testX; + collisionTestCoords[i][1] = testY; + collisionTestAttributes[i] = collisionAttribute; + } + + // Find the largest string of consecutive colliding test points. + maxStringStart = 0; + maxStringEnd = 0; + maxStringLength = 0; + curStringStart = -1; + curStringLength = 0; + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) + { + if (collisionTests[i]) + { + if (curStringStart == -1) + curStringStart = i; + + curStringLength++; + if (curStringLength > maxStringLength) + { + maxStringLength = curStringLength; + maxStringStart = curStringStart; + maxStringEnd = i; + } + } + else + { + curStringLength = 0; + curStringStart = -1; + } + } + + // If all of the test points are colliding, then the ball + // is inside a wall. Just early exit with no collision. + if (maxStringLength == 0 || maxStringLength == 16) + return FALSE; + + // Check if the maximum string loops around to the front of + // the collision tests array. + if (curStringStart != -1) + { + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) + { + if (!collisionTests[i]) + break; + + curStringLength++; + if (curStringLength > maxStringLength) + { + maxStringLength = curStringLength; + maxStringStart = curStringStart; + maxStringEnd = i; + } + } + } + + collisionIndex = ((maxStringStart & 0xF) << 4) | (maxStringEnd & 0xF); + + // Treat the delta values as signed. + xDelta = sCollisionXDeltas[collisionIndex]; + if (xDelta > 0x8000) + ball->xPos -= 0x10000 - xDelta; + else + ball->xPos += xDelta; + + yDelta = sCollisionYDeltas[collisionIndex]; + if (yDelta > 0x8000) + ball->yPos -= 0x10000 - yDelta; + else + ball->yPos += yDelta; + + *outCollisionNormal = sCollisionNormals[collisionIndex]; + HandleStaticCollisionForGameType( + gameType, + collisionTestCoords[maxStringStart][0], + collisionTestCoords[maxStringStart][1], + collisionTestAttributes[maxStringStart], + outYForce + ); + + return TRUE; +} + +static u8 GetCollisionAttribute(u8 gameType, bool32 ballIsEntering, int index) +{ + const u8 *entranceCollisionMap; + const u8 *collisionMap; + + switch (gameType) + { + default: + case GAME_TYPE_MEOWTH: + entranceCollisionMap = sMeowthStageEntranceBgCollisionMap; + collisionMap = sMeowthStageBgCollisionMap; + break; + case GAME_TYPE_DIGLETT: + entranceCollisionMap = sDiglettStageEntranceBgCollisionMap; + collisionMap = sPinballGame->diglett.collisionMap; + break; + case GAME_TYPE_SEEL: + entranceCollisionMap = sSeelStageEntranceBgCollisionMap; + collisionMap = sSeelStageBgCollisionMap; + break; + case GAME_TYPE_GENGAR: + entranceCollisionMap = sGengarStageEntranceBgCollisionMap; + collisionMap = sPinballGame->gengar.collisionMap; + break; + } + + if (ballIsEntering) + return entranceCollisionMap[index]; + + return collisionMap[index]; +} + +static u8 GetCollisionMaskRow(u8 gameType, int collisionAttribute, int row) +{ + struct Flipper *flipper; + int state; + int offset; + const u8 *flipperStateMasks; + u8 mask; + + if (collisionAttribute < 0xE0) + { + const u8 *masks; + switch (gameType) + { + default: + case GAME_TYPE_MEOWTH: + masks = sMeowthStageBgCollisionMasks; + break; + case GAME_TYPE_DIGLETT: + masks = sDiglettStageBgCollisionMasks; + break; + case GAME_TYPE_SEEL: + masks = sSeelStageBgCollisionMasks; + break; + case GAME_TYPE_GENGAR: + masks = sGengarStageBgCollisionMasks; + break; + } + + // Reverse the bits because my tooling is backwards. + return ReverseBits(masks[(collisionAttribute * 0x8) + row]); + } + + // Collision attribute from 0xE0 - 0xFF are special + // static flipper collision masks. + if (collisionAttribute < 0xF0) + flipper = &sPinballGame->leftFlipper; + else + flipper = &sPinballGame->rightFlipper; + + state = flipper->state >> 8; + if (state < 7) + offset = 0; + else if (state < 14) + offset = 1; + else + offset = 2; + + if (collisionAttribute < 0xF0) + flipperStateMasks = sFlipperLeftMinigameCollisionMasks[offset]; + else + flipperStateMasks = sFlipperRightMinigameCollisionMasks[offset]; + + mask = flipperStateMasks[(collisionAttribute % 0x10) * 0x8 + row]; + + // Reverse the bits because my tooling is backwards. + return ReverseBits(mask); +} + +static u8 ReverseBits(u8 b) +{ + b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; + b = (b & 0xCC) >> 2 | (b & 0x33) << 2; + b = (b & 0xAA) >> 1 | (b & 0x55) << 1; + return b; +} + +static void ApplyTiltForces(struct Ball *ball, u8 collisionNormal) +{ + u32 index = (sPinballGame->downTilt.pushing << 2) | + (sPinballGame->rightTilt.pushing << 1) | + (sPinballGame->leftTilt.pushing << 0); + const s16 *deltas = sTiltVelocityDeltas[index]; + if (deltas != NULL) + { + ball->xVelocity += deltas[collisionNormal * 2]; + ball->yVelocity += deltas[collisionNormal * 2 + 1]; + } +} + +static void RotateVector(s16 *x, s16 *y, u8 angle) +{ + // Rotate a vector by an angle with a 2D rotation matrix calculation. + // rotatedX = xComponent * cos(angle) + yComponent * sin(angle) + // rotatedY = yComponent * cos(angle) - xComponent * sin(angle) + s16 sin = gSineTable[angle]; + s16 cos = gSineTable[angle + 64]; + s16 newX = ((*x * cos) / 256) + ((*y * sin) / 256); + s16 newY = ((*y * cos) / 256) - ((*x * sin) / 256); + *x = newX; + *y = newY; +} + +static void HandleStaticCollisionForGameType(u8 gameType, int x, int y, u8 collisionAttribute, u16 *outYForce) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + case GAME_TYPE_SEEL: + break; + case GAME_TYPE_GENGAR: + HandleStaticCollisionGengar(&sPinballGame->gengar, collisionAttribute, outYForce); + break; + case GAME_TYPE_DIGLETT: + HandleStaticCollisionDiglett(&sPinballGame->diglett, x, y, collisionAttribute); + break; + } +} + +static void HandleStaticCollisionDiglett(struct Diglett *diglett, int x, int y, u8 collisionAttribute) +{ + if (collisionAttribute == 0x19 || collisionAttribute == 0x1A || collisionAttribute == 0x1B) + { + // If the ball hit a Diglett, remove the Diglett's solid collision from the map. + int i; + int tileX = x / 8; + int tileY = y / 8; + + // Find the id of the collided Diglett. + for (i = 0; i < NUM_DIGLETTS; i++) + { + int diglettX = sDiglettCoords[i][0]; + int diglettY = sDiglettCoords[i][1]; + int xDiff = tileX - diglettX; + int yDiff = tileY - diglettY; + if ((xDiff == 0 || xDiff == 1) && (yDiff == 0 || yDiff == 1)) + break; + } + + if (i != NUM_DIGLETTS) + { + u16 *tilemap; + int tileIndex = sDiglettCoords[i][0] + sDiglettCoords[i][1] * 32; + diglett->collisionMap[tileIndex] = 0x2; + diglett->collisionMap[tileIndex + 1] = 0x2; + diglett->collisionMap[tileIndex + 32] = 0x2; + diglett->collisionMap[tileIndex + 33] = 0x2; + diglett->states[i] = DIGLETT_STATE_HIT_0; + tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + UpdateDiglettTiles(tilemap, i, diglett); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + } + } + else if (collisionAttribute == 0x14 || collisionAttribute == 0x15 || + collisionAttribute == 0x16 || collisionAttribute == 0x17 || + collisionAttribute == 0x18) + { + // If the ball hit Dugtrio, advance its state. + switch (diglett->dugtrioState) + { + case DUGTRIO_STATE_3ALIVE: + diglett->dugtrioState = DUGTRIO_STATE_3ALIVE_HIT; + break; + case DUGTRIO_STATE_2ALIVE: + diglett->dugtrioState = DUGTRIO_STATE_2ALIVE_HIT; + break; + case DUGTRIO_STATE_1ALIVE: + diglett->dugtrioState = DUGTRIO_STATE_1ALIVE_HIT; + // Clear the collision map for the Dugtrio-occupied tiles. + diglett->collisionMap[0x48] = 0x2; + diglett->collisionMap[0x49] = 0x2; + diglett->collisionMap[0x4A] = 0x2; + diglett->collisionMap[0x4B] = 0x2; + diglett->collisionMap[0x68] = 0x2; + diglett->collisionMap[0x69] = 0x2; + diglett->collisionMap[0x6A] = 0x2; + diglett->collisionMap[0x6B] = 0x2; + break; + } + } +} + +static void HandleStaticCollisionGengar(struct Gengar *gengar, u8 collisionAttribute, u16 *outYForce) +{ + int i; + for (i = 0; i < ARRAY_COUNT(sGengarGravestoneCollisionAttributes); i++) + { + if (collisionAttribute == sGengarGravestoneCollisionAttributes[i]) + { + // If the ball hit a gravestone, apply some artificial force to + // make the ball bounce harder. + *outYForce = 0x100; + return; + } + } +} + +static void ApplyCollisionForces(struct Ball *ball, u16 flipperYForce, int collisionAmplification) +{ + // Only apply the collision forces if the ball is moving + // towards the wall it collided with, which can only be + // true if the y velocity is traveling downward in the rotated + // coordinate system. + if (ball->yVelocity < 0) + return; + + // Apply dampening to the vertical velocity component, and + // negate it so that the ball bounces off the wall. + ball->yVelocity = -(((2 + collisionAmplification) * ball->yVelocity) / 8); + ball->xVelocity += ball->spin / 2; + ball->spin = (ball->xVelocity * 4) >> 8; + + ball->yVelocity -= flipperYForce; +} + +static void UpdateCamera(void) +{ + int scrollX, scrollY; + int stagePixelWidth = sPinballGame->stageTileWidth * 8; + int stagePixelHeight = sPinballGame->stageTileHeight * 8; + struct Ball *ball = &sPinballGame->ball; + + // scrollX = (ball->xPos >> 8) - (DISPLAY_WIDTH / 2); + // if (scrollX < 0) + // scrollX = 0; + // if (scrollX > stagePixelWidth - DISPLAY_WIDTH) + // scrollX = stagePixelWidth - DISPLAY_WIDTH; + + // scrollY = (ball->yPos >> 8) - (DISPLAY_HEIGHT / 2); + // if (scrollY < 0) + // scrollY = 0; + // if (scrollY > stagePixelHeight - DISPLAY_HEIGHT) + // scrollY = stagePixelHeight - DISPLAY_HEIGHT; + + scrollX = -40; // Center the game in the middle of the screen + scrollY = 0; + + scrollX += sPinballGame->leftTilt.counter; + scrollX -= sPinballGame->rightTilt.counter; + scrollY += sPinballGame->downTilt.counter; + + sPinballGame->cameraScrollX = scrollX; + sPinballGame->cameraScrollY = scrollY; + + SetGpuReg(REG_OFFSET_BG2HOFS, scrollX); + SetGpuReg(REG_OFFSET_BG2VOFS, scrollY); +} + +static void UpdateTimer(void) +{ + if (GameTypeUsesTimer(sPinballGame->gameType) && sPinballGame->timer.ticks > 0) + { + if (--sPinballGame->timer.ticks == 0) + { + // Time has completely run out. + // Disable the flippers, and play any ending + // animation stuff. + DisableFlippers(); + HandleTimeRanOut(); + } + } +} + +static void HandleTimeRanOut(void) +{ + switch (sPinballGame->gameType) + { + case GAME_TYPE_MEOWTH: + sPinballGame->meowth.state = MEOWTH_STATE_FINISH; + break; + case GAME_TYPE_DIGLETT: + break; + case GAME_TYPE_SEEL: + break; + case GAME_TYPE_GENGAR: + break; + } +} + +static void DisableFlippers(void) +{ + int flipperPaletteIndex; + sPinballGame->flippersDisabled = TRUE; + + // Change the flippers' color to red. + flipperPaletteIndex = IndexOfSpritePaletteTag(TAG_FLIPPER); + gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 1] = RGB(16, 16, 16); + gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 2] = RGB(22, 22, 22); + gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 3] = RGB(12, 12, 12); + gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 1] = RGB(16, 16, 16); + gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 2] = RGB(22, 22, 22); + gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 3] = RGB(12, 12, 12); +} + +static void StartExitPinballGame(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sPinballGame->state = PINBALL_STATE_EXIT; + //SetWeather(WEATHER_NONE); +} + +static void ExitPinballGame(void) +{ + if (!gPaletteFade.active) + { + if (sPinballGame->gameType == GAME_TYPE_DIGLETT) + FREE_AND_SET_NULL(sPinballGame->diglett.collisionMap); + + SetMainCallback2(sPinballGame->returnMainCallback); + FREE_AND_SET_NULL(sPinballGame); + FREE_AND_SET_NULL(sScore); + } +} + +static void UpdateBallSprite(struct Sprite *sprite) +{ + int ballAnim; + struct Ball *ball = &sPinballGame->ball; + sprite->x = (ball->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (ball->yPos >> 8) - sPinballGame->cameraScrollY; + + ball->rotation += ball->spin; + ballAnim = (ball->rotation >> 4) % 8; + StartSpriteAnim(sprite, ballAnim); +} + +static void UpdateFlipperSprite(struct Sprite *sprite) +{ + int anim; + struct Flipper *flipper; + if (sprite->data[0] == FLIPPER_RIGHT) + flipper = &sPinballGame->rightFlipper; + else + flipper = &sPinballGame->leftFlipper; + + sprite->x = flipper->xPos - sPinballGame->cameraScrollX; + sprite->y = flipper->yPos - sPinballGame->cameraScrollY; + + anim = (flipper->type * 3) + ((flipper->state >> 8) / 6); + StartSpriteAnim(sprite, anim); +} + +static void UpdateTimerDigitSprite(struct Sprite *sprite) +{ + int minutes, tensDigit, onesDigit; + int type = sprite->data[0]; + + sprite->x2 = -sPinballGame->cameraScrollX; + sprite->y2 = -sPinballGame->cameraScrollY; + + switch (type) + { + case 0: // Minutes ones digit + minutes = (sPinballGame->timer.ticks / 3600) % 10; + StartSpriteAnim(sprite, minutes); + break; + case 2: // Seconds tens digit + tensDigit = ((sPinballGame->timer.ticks / 60) % 60) / 10; + StartSpriteAnim(sprite, tensDigit); + break; + case 3: // Seconds ones digit + onesDigit = ((sPinballGame->timer.ticks / 60) % 60) % 10; + StartSpriteAnim(sprite, onesDigit); + break; + } +} + +static bool32 UpdateGameType(u8 gameType) +{ + switch (gameType) + { + case GAME_TYPE_MEOWTH: + return UpdateMeowth(&sPinballGame->meowth); + case GAME_TYPE_DIGLETT: + return UpdateDiglett(&sPinballGame->diglett); + case GAME_TYPE_SEEL: + return UpdateSeel(&sPinballGame->seel); + case GAME_TYPE_GENGAR: + return UpdateGengar(&sPinballGame->gengar); + default: + return FALSE; + } +} + +#define MEOWTH_HORIZONTAL_SPEED 1 +#define MEOWTH_VERTICAL_SPEED 1 + +static bool32 UpdateMeowth(struct Meowth *meowth) +{ + if (meowth->state == MEOWTH_STATE_WALK) + { + if (meowth->facing == MEOWTH_FACING_RIGHT) + meowth->xPos += MEOWTH_HORIZONTAL_SPEED; + else + meowth->xPos -= MEOWTH_HORIZONTAL_SPEED; + + meowth->yPos += meowth->yMovement; + + if (meowth->xPos > 136) + { + meowth->facing = MEOWTH_FACING_LEFT; + meowth->xPos = 136; + } + else if (meowth->xPos < 24) + { + meowth->facing = MEOWTH_FACING_RIGHT; + meowth->xPos = 24; + } + else if (gMain.vblankCounter1 % 64 == 0) + { + meowth->facing = Random() % 2 ? MEOWTH_FACING_RIGHT : MEOWTH_FACING_LEFT; + } + + if (meowth->yPos > 48) + { + meowth->yPos = 48; + meowth->yMovement = 0; + } + else if (meowth->yPos < 32) + { + meowth->yPos = 32; + meowth->yMovement = 0; + } + else if (gMain.vblankCounter1 % 64 == 0) + { + meowth->yMovement = Random() % 2 ? -MEOWTH_VERTICAL_SPEED : MEOWTH_VERTICAL_SPEED; + } + } + + UpdateJewels(meowth->jewels); + return meowth->completed; +} + +static bool32 CheckObjectsCollision(u8 gameType, struct Ball *ball, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + bool32 isColliding = FALSE; + + switch (gameType) + { + case GAME_TYPE_MEOWTH: + isColliding = CheckMeowthCollision(ball, &sPinballGame->meowth, ticks, outCollisionNormal, outCollisionAmplification); + if (!isColliding) + isColliding = CheckMeowthJewelsCollision(ball, &sPinballGame->meowth, outCollisionNormal); + break; + case GAME_TYPE_SEEL: + isColliding = CheckSeelCollision(ball, &sPinballGame->seel, ticks, outCollisionNormal, outCollisionAmplification); + break; + case GAME_TYPE_GENGAR: + switch (sPinballGame->gengar.graveyardState) + { + case GRAVEYARD_STATE_GASTLY: + isColliding = CheckGhostsCollision( + ball, + ticks, + sPinballGame->gengar.gastlyGhosts, + NUM_GASTLY, + sGastlyCollisionNormalAngles, + 32, + 32, + outCollisionNormal, + outCollisionAmplification); + break; + case GRAVEYARD_STATE_HAUNTER: + isColliding = CheckGhostsCollision( + ball, + ticks, + sPinballGame->gengar.haunterGhosts, + NUM_HAUNTER, + sHaunterCollisionNormalAngles, + 32, + 40, + outCollisionNormal, + outCollisionAmplification); + break; + case GRAVEYARD_STATE_GENGAR: + isColliding = CheckGengarCollision(ball, &sPinballGame->gengar, ticks, outCollisionNormal, outCollisionAmplification); + break; + } + break; + } + + return isColliding; +} + +static bool32 CheckMeowthCollision(struct Ball *ball, struct Meowth *meowth, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int x, y; + u8 collisionNormal; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + + if (ticks <= 0) + return FALSE; + + if (ballXPos < meowth->xPos - 24 || ballXPos >= meowth->xPos + 24 + || ballYPos < meowth->yPos - 20 || ballYPos >= meowth->yPos + 20) + return FALSE; + + x = ballXPos - meowth->xPos + 24; + y = ballYPos - meowth->yPos + 20; + collisionNormal = sMeowthCollisionNormalAngles[y * 48 + x]; + if (collisionNormal == 0xFF) + return FALSE; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + //*outCollisionAmplification = 1; + + if (meowth->state == MEOWTH_STATE_WALK) + { + meowth->state = MEOWTH_STATE_HIT; + meowth->hitDuration = 30; + TryCreateNewJewel(meowth, ballXPos); + PlaySE(SE_EFFECTIVE); + } + + return TRUE; +} + +static bool32 CheckMeowthJewelsCollision(struct Ball *ball, struct Meowth *meowth, u8 *outCollisionNormal) +{ + int i; + struct Sprite *sparkleSprite = &gSprites[meowth->sparkleSpriteId]; + + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + struct MeowthJewel *jewel = &meowth->jewels[i]; + if (jewel->state == JEWEL_STATE_LANDED) + { + if (CheckJewelCollision(ball, jewel, outCollisionNormal)) + { + if (++meowth->jewelStreak > 6) + meowth->jewelStreak = 6; + + meowth->score += meowth->jewelStreak; + if (!meowth->completed && meowth->score >= 20) + meowth->completed = TRUE; + + sparkleSprite->data[0] = JEWEL_SPARKLE_DURATION; + sparkleSprite->data[1] = min(20, meowth->score); + DrawMeowthScoreJewels(meowth); + if (meowth->jewelStreak > 1) + { + int y = (jewel->yPos >> 8) - 8; + u8 spriteId = CreateSprite(&sMeowthJewelMultiplierSpriteTemplate, jewel->xPos, y, 4); + gSprites[spriteId].data[2] = y; + StartSpriteAnim(&gSprites[spriteId], meowth->jewelStreak - 2); + } + PlaySE(SE_M_PAY_DAY); + return TRUE; + } + } + } + + return FALSE; +} + +static int GetNumActiveJewels(struct Meowth *meowth) +{ + int i, count; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + if (meowth->jewels[i].state != JEWEL_STATE_HIDDEN) + count++; + } + return count; +} + +static struct MeowthJewel *TryCreateNewJewel(struct Meowth *meowth, int ballXPos) +{ + int i, count; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + if (meowth->jewels[i].state == JEWEL_STATE_HIDDEN) + break; + } + + if (i == MAX_MEOWTH_JEWELS) + return NULL; + + meowth->jewelStreak = 0; + + meowth->jewels[i].state = JEWEL_STATE_FALLING; + meowth->jewels[i].xPos = meowth->xPos; + meowth->jewels[i].yPos = (meowth->yPos - 12) << 8; + meowth->jewels[i].spriteId = CreateSprite(&sMeowthJewelSpriteTemplate, meowth->jewels[i].xPos, meowth->jewels[i].yPos, 4); + meowth->jewels[i].xVelocity = ballXPos < meowth->xPos ? 2 : -2; + meowth->jewels[i].yVelocity = -2 << 8; + meowth->jewels[i].destYPos = meowth->yPos < 40 ? 72 : 88; + gSprites[meowth->jewels[i].spriteId].data[0] = i; + gSprites[meowth->jewels[i].spriteId].data[1] = JEWEL_STATE_HIDDEN; + + PlaySE(SE_M_PAY_DAY); + return &meowth->jewels[i]; +} + +static void UpdateJewels(struct MeowthJewel *jewels) +{ + int i; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + struct MeowthJewel *jewel = &jewels[i]; + if (jewel->state == JEWEL_STATE_FALLING) + { + jewel->xPos += jewel->xVelocity; + if (jewel->xPos < 16) + { + jewel->xPos = 16; + jewel->xVelocity *= -1; + } + else if (jewel->xPos >= 148) + { + jewel->xPos = 148; + jewel->xVelocity *= -1; + } + + jewel->yPos += jewel->yVelocity; + jewel->yVelocity += 0x40; + if ((jewel->yPos >> 8) >= jewel->destYPos) + { + if (IsJewelSpaceOccupied(jewel->xPos, jewel->destYPos, jewels)) + { + jewel->yVelocity = -1 << 8; + } + else + { + jewel->yPos = jewel->destYPos << 8; + jewel->state = JEWEL_STATE_LANDED; + } + } + } + } +} + +static bool32 IsJewelSpaceOccupied(u16 xPos, u16 destYPos, struct MeowthJewel *jewels) +{ + int i; + struct MeowthJewel *jewel; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + jewel = &jewels[i]; + if (jewel->state == JEWEL_STATE_LANDED && jewel->destYPos == destYPos && abs(xPos - jewel->xPos) < 16) + return TRUE; + } + + return FALSE; +} + +static bool32 CheckJewelCollision(struct Ball *ball, struct MeowthJewel *jewel, u8 *outCollisionNormal) +{ + int x, y; + u8 collisionNormal; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + int jewelXPos = jewel->xPos; + int jewelYPos = jewel->yPos >> 8; + if (ballXPos < jewelXPos - 12 || ballXPos >= jewelXPos + 12 + || ballYPos < jewelYPos - 12 || ballYPos >= jewelYPos + 12) + return FALSE; + + x = ballXPos - jewelXPos + 12; + y = ballYPos - jewelYPos + 12; + collisionNormal = sMeowthJewelCollisionNormalAngles[y * 24 + x]; + if (collisionNormal == 0xFF) + return FALSE; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + jewel->state = JEWEL_STATE_CONSUMED; + return TRUE; +} + +static void UpdateMeowthSprite(struct Sprite *sprite) +{ + int animNum; + struct Meowth *meowth = &sPinballGame->meowth; + int prevState = sprite->data[0]; + int prevFacing = sprite->data[1]; + int curState = meowth->state; + int curFacing = meowth->facing; + sprite->x = meowth->xPos - sPinballGame->cameraScrollX; + sprite->y = meowth->yPos - sPinballGame->cameraScrollY; + + // Check if Meowth's state changed, and start the appropriate + // sprite animation. + if (prevState != curState || prevFacing != curFacing) + { + sprite->data[0] = curState; + sprite->data[1] = curFacing; + switch (curState) + { + case MEOWTH_STATE_WALK: + animNum = curFacing == MEOWTH_FACING_RIGHT ? 0 : 1; + StartSpriteAnim(sprite, animNum); + break; + case MEOWTH_STATE_HIT: + animNum = curFacing == MEOWTH_FACING_RIGHT ? 2 : 3; + StartSpriteAnim(sprite, animNum); + break; + case MEOWTH_STATE_FINISH: + StartSpriteAnim(sprite, 4); + break; + } + } + + if (curState == MEOWTH_STATE_HIT) + { + if (--meowth->hitDuration == 0) + meowth->state = MEOWTH_STATE_WALK; + } +} + +static void UpdateMeowthJewelSprite(struct Sprite *sprite) +{ + int jewelId = sprite->data[0]; + struct MeowthJewel *jewel = &sPinballGame->meowth.jewels[jewelId]; + int prevState = sprite->data[1]; + int curState = jewel->state; + sprite->x = jewel->xPos - sPinballGame->cameraScrollX; + sprite->y = (jewel->yPos >> 8) - sPinballGame->cameraScrollY; + if (prevState != curState) + { + sprite->data[1] = curState; + switch (curState) + { + case JEWEL_STATE_HIDDEN: + DestroySprite(sprite); + break; + case JEWEL_STATE_FALLING: + StartSpriteAnim(sprite, 0); + break; + case JEWEL_STATE_LANDED: + StartSpriteAnim(sprite, 1); + break; + case JEWEL_STATE_CONSUMED: + StartSpriteAnim(sprite, 2); + break; + } + } + + if (curState == JEWEL_STATE_CONSUMED && sprite->animEnded) + { + sPinballGame->meowth.jewels[jewelId].state = JEWEL_STATE_HIDDEN; + DestroySprite(sprite); + } +} + +static void UpdateMeowthJewelMultiplierSprite(struct Sprite *sprite) +{ + // data[0] = state + // data[1] = state counter + // data[2] = original y position + sprite->x2 = -sPinballGame->cameraScrollX; + sprite->y2 = -sPinballGame->cameraScrollY; + switch (sprite->data[0]) + { + case 0: + sprite->y--; + if (++sprite->data[1] == 5) + { + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->y = sprite->data[2]; + } + break; + case 1: + if (++sprite->data[1] >= 22) + { + sprite->data[0] = 2; + sprite->data[1] = 0; + } + break; + case 2: + if (++sprite->data[1] >= 24) + { + DestroySprite(sprite); + return; + } + + if (sprite->data[1] % 8 < 4) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + break; + } +} + +static void ResetMeowthJewels(struct Meowth *meowth) +{ + int i; + for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + { + struct MeowthJewel *jewel = &meowth->jewels[i]; + if (jewel->state != JEWEL_STATE_HIDDEN) + { + DestroySprite(&gSprites[jewel->spriteId]); + jewel->state = JEWEL_STATE_HIDDEN; + } + } +} + +static void UpdateMeowthJewelSparkleSprite(struct Sprite *sprite) +{ + // data[0] is visibility counter timer + // data[1] is the player's score, capped at 20. + if (sprite->data[0] == 0) + { + sprite->invisible = TRUE; + } + else + { + sprite->data[0]--; + sprite->x = ((sprite->data[1] - 1) * 8 + 4) - sPinballGame->cameraScrollX; + sprite->y = 4 - sPinballGame->cameraScrollY; + sprite->invisible = FALSE; + } +} + +static bool32 UpdateDiglett(struct Diglett *diglett) +{ + u16 *tilemap; + + if (!diglett->initialized) + { + if (gMain.vblankCounter1 & 1) + { + int index = sDiglettInitOrder[diglett->curInitIndex]; + diglett->states[index] = DIGLETT_STATE_IDLE_0 + (Random() % 4); + + tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + UpdateDiglettTiles(tilemap, index, diglett); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + UpdateDiglettCollision(diglett->collisionMap, index, TRUE); + + if (++diglett->curInitIndex == NUM_DIGLETTS) + diglett->initialized = TRUE; + } + } + else if (diglett->numDiglettsHit < NUM_DIGLETTS) + { + // Update 4 digletts each frame. + int i; + for (i = 0; i < 4; i++) + { + int index = (diglett->curUpdateIndex + i) % NUM_DIGLETTS; + switch (diglett->states[index]) + { + case DIGLETT_STATE_INIT: + case DIGLETT_STATE_HIDDEN: + break; + case DIGLETT_STATE_IDLE_0: + diglett->states[index] = DIGLETT_STATE_IDLE_1; + break; + case DIGLETT_STATE_IDLE_1: + diglett->states[index] = DIGLETT_STATE_IDLE_2; + break; + case DIGLETT_STATE_IDLE_2: + diglett->states[index] = DIGLETT_STATE_IDLE_3; + break; + case DIGLETT_STATE_IDLE_3: + diglett->states[index] = DIGLETT_STATE_IDLE_0; + break; + case DIGLETT_STATE_HIT_0: + diglett->states[index] = DIGLETT_STATE_HIT_1; + PlaySE(SE_BALLOON_YELLOW); + break; + case DIGLETT_STATE_HIT_1: + diglett->states[index] = DIGLETT_STATE_HIT_2; + //PlaySE(SE_BALLOON_YELLOW); + break; + case DIGLETT_STATE_HIT_2: + diglett->states[index] = DIGLETT_STATE_HIDDEN; + UpdateDiglettCollision(diglett->collisionMap, index, FALSE); + if (++diglett->numDiglettsHit == NUM_DIGLETTS) + { + diglett->dugtrioState = DUGTRIO_STATE_3ALIVE; + + // Update the colision tilemap for the Dugtrio-occupied tiles. + tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + diglett->collisionMap[0x48] = 0x14; + diglett->collisionMap[0x49] = 0x14; + diglett->collisionMap[0x4A] = 0x14; + diglett->collisionMap[0x4B] = 0x14; + diglett->collisionMap[0x68] = 0x15; + diglett->collisionMap[0x69] = 0x16; + diglett->collisionMap[0x6A] = 0x17; + diglett->collisionMap[0x6B] = 0x18; + } + if (diglett->numDiglettsHit < NUM_DIGLETTS) { + VarSet(GAME_CORNER_VAR_WINNINGS, (diglett->numDiglettsHit * 3)); } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 100); + } + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + break; + } + + // Update bg tilemap for the new diglett states. + tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + UpdateDiglettTiles(tilemap, index, diglett); + } + + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->curUpdateIndex = (diglett->curUpdateIndex + 4) % NUM_DIGLETTS; + } + else + { + // At this point, all the Digletts are hidden and Dugtrio is visible. + struct Sprite *dugtrioSprite = &gSprites[diglett->dugtrioSpriteId]; + switch (diglett->dugtrioState) + { + case DUGTRIO_STATE_3ALIVE_HIT: + if (dugtrioSprite->animEnded) + diglett->dugtrioState = DUGTRIO_STATE_2ALIVE; + break; + case DUGTRIO_STATE_2ALIVE_HIT: + if (dugtrioSprite->animEnded) + diglett->dugtrioState = DUGTRIO_STATE_1ALIVE; + break; + case DUGTRIO_STATE_1ALIVE_HIT: + if (dugtrioSprite->animEnded) + { + diglett->dugtrioState = DUGTRIO_STATE_0ALIVE; + StartSpriteAnim(dugtrioSprite, 7); + DisableFlippers(); + diglett->completed = TRUE; + return TRUE; + } + break; + case DUGTRIO_STATE_0ALIVE: + if (dugtrioSprite->animEnded) + VarSet(GAME_CORNER_VAR_WINNINGS, 150); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + diglett->dugtrioState = DUGTRIO_STATE_COMPLETE; + return TRUE; + } + } + + return FALSE; +} + +static void UpdateDiglettTiles(u16 *tilemap, int index, struct Diglett *diglett) +{ + int tileIndex = sDiglettCoords[index][0] + sDiglettCoords[index][1] * 32; + tilemap[tileIndex] = sDiglettStateTiles[diglett->states[index]][0]; + tilemap[tileIndex + 1] = sDiglettStateTiles[diglett->states[index]][1]; + tilemap[tileIndex + 32] = sDiglettStateTiles[diglett->states[index]][2]; + tilemap[tileIndex + 33] = sDiglettStateTiles[diglett->states[index]][3]; +} + +static void UpdateDiglettCollision(u8 *collisionMap, int index, bool32 solidCollision) +{ + int tileIndex = sDiglettCoords[index][0] + sDiglettCoords[index][1] * 32; + if (solidCollision) + { + collisionMap[tileIndex] = 0x19; + collisionMap[tileIndex + 1] = 0x19; + collisionMap[tileIndex + 32] = 0x1A; + collisionMap[tileIndex + 33] = 0x1B; + } + else + { + collisionMap[tileIndex] = 0x2; + collisionMap[tileIndex + 1] = 0x2; + collisionMap[tileIndex + 32] = 0x2; + collisionMap[tileIndex + 33] = 0x2; + } +} + +static void UpdateDugtrioSprite(struct Sprite *sprite) +{ + // data[0] = previous state + struct Diglett *diglett = &sPinballGame->diglett; + int prevState = sprite->data[0]; + int curState = diglett->dugtrioState; + + sprite->x2 = -sPinballGame->cameraScrollX; + sprite->y2 = -sPinballGame->cameraScrollY; + + // Check if Dugtrio's state changed, and start the appropriate + // sprite animation. + if (prevState != curState) + { + sprite->data[0] = curState; + switch (curState) + { + case DUGTRIO_STATE_HIDDEN: + StartSpriteAnim(sprite, 0); + break; + case DUGTRIO_STATE_3ALIVE: + StartSpriteAnim(sprite, 1); + PlayBGM(MUS_RG_ROCKET_HIDEOUT); + PlayCry_Normal(SPECIES_DUGTRIO, 0); + break; + case DUGTRIO_STATE_3ALIVE_HIT: + StartSpriteAnim(sprite, 2); + PlaySE(SE_EFFECTIVE); + break; + case DUGTRIO_STATE_2ALIVE: + StartSpriteAnim(sprite, 3); + break; + case DUGTRIO_STATE_2ALIVE_HIT: + StartSpriteAnim(sprite, 4); + PlaySE(SE_EFFECTIVE); + break; + case DUGTRIO_STATE_1ALIVE: + StartSpriteAnim(sprite, 5); + break; + case DUGTRIO_STATE_1ALIVE_HIT: + StartSpriteAnim(sprite, 6); + PlayBGM(MUS_NONE); + VarSet(GAME_CORNER_VAR_WINNINGS, 150); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + PlaySE(SE_SUPER_EFFECTIVE); + break; + case DUGTRIO_STATE_0ALIVE: + StartSpriteAnim(sprite, 7); + break; + case DUGTRIO_STATE_COMPLETE: + StartSpriteAnim(sprite, 0); + break; + } + } +} + +static bool32 CheckSeelCollision(struct Ball *ball, struct Seel *seel, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int x, y; + u8 collisionNormal; + struct Sprite *sparkleSprite = &gSprites[seel->sparkleSpriteId]; + struct SeelSwimmer *swimmer = &seel->swimmers[seel->emergingSwimmerIndex]; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + int swimmerXPos = (swimmer->xPos >> 8); + int swimmerYPos = (swimmer->yPos >> 8); + + if (ticks <= 0) + return FALSE; + + if (swimmer->state != SEEL_STATE_VISIBLE_RIGHT && swimmer->state != SEEL_STATE_VISIBLE_LEFT) + return FALSE; + + if (ballXPos < swimmerXPos - 16 || ballXPos >= swimmerXPos + 16 + || ballYPos < swimmerYPos - 16 || ballYPos >= swimmerYPos + 16) + return FALSE; + + x = ballXPos - swimmerXPos + 16; + y = ballYPos - swimmerYPos + 16; + collisionNormal = sSeelCollisionNormalAngles[y * 32 + x]; + if (collisionNormal == 0xFF) + return FALSE; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + //*outCollisionAmplification = 1; + + if (swimmer->state == SEEL_STATE_VISIBLE_RIGHT) + swimmer->state = SEEL_STATE_HIT_RIGHT; + else + swimmer->state = SEEL_STATE_HIT_LEFT; + + seel->score += seel->streak + 1; + if (!seel->completed && seel->score >= 20) + seel->completed = TRUE; + + if (++seel->streak >= 9) + seel->streak = 0; + + sparkleSprite->data[0] = SEEL_SPARKLE_DURATION; + sparkleSprite->data[1] = min(20, seel->score); + DrawSeelScoreJewels(seel); + if (seel->streak > 1) + { + int y = swimmerYPos - 16; + u8 spriteId = CreateSprite(&sSeelMultiplierSpriteTemplate, swimmerXPos, y, 4); + gSprites[spriteId].data[2] = y; + StartSpriteAnim(&gSprites[spriteId], seel->streak - 2); + } + + return TRUE; +} + +#define SEEL_SWIMMER_SPEED 0x34 + +static bool32 UpdateSeel(struct Seel *seel) +{ + int i; + + for (i = 0; i < NUM_SEELS; i++) + { + struct SeelSwimmer *swimmer = &seel->swimmers[i]; + struct Sprite *swimmerSprite = &gSprites[swimmer->spriteId]; + switch (swimmer->state) + { + case SEEL_STATE_SWIM_RIGHT: + swimmer->xPos += SEEL_SWIMMER_SPEED; + if ((swimmer->xPos >> 8) > 136) + { + swimmer->state = SEEL_STATE_TURN_LEFT; + swimmer->xPos = 136 << 8; + } + else if (seel->emergingSwimmerIndex == i) + { + if (--seel->emergingSwimmerCounter == 0) + swimmer->state = SEEL_STATE_EMERGE_RIGHT; + } + break; + case SEEL_STATE_TURN_LEFT: + if (swimmerSprite->animEnded) + swimmer->state = SEEL_STATE_SWIM_LEFT; + break; + case SEEL_STATE_SWIM_LEFT: + swimmer->xPos -= SEEL_SWIMMER_SPEED; + if ((swimmer->xPos >> 8) < 24) + { + swimmer->state = SEEL_STATE_TURN_RIGHT; + swimmer->xPos = 24 << 8; + } + else if (seel->emergingSwimmerIndex == i) + { + if (--seel->emergingSwimmerCounter == 0) + swimmer->state = SEEL_STATE_EMERGE_LEFT; + } + break; + case SEEL_STATE_TURN_RIGHT: + if (swimmerSprite->animEnded) + swimmer->state = SEEL_STATE_SWIM_RIGHT; + break; + case SEEL_STATE_EMERGE_RIGHT: + if (swimmerSprite->animEnded) + { + swimmer->state = SEEL_STATE_VISIBLE_RIGHT; + swimmer->counter = GetSeelVisibleTicks(seel->streak); + } + break; + case SEEL_STATE_EMERGE_LEFT: + if (swimmerSprite->animEnded) + { + swimmer->state = SEEL_STATE_VISIBLE_LEFT; + swimmer->counter = GetSeelVisibleTicks(seel->streak); + } + break; + case SEEL_STATE_VISIBLE_RIGHT: + case SEEL_STATE_VISIBLE_LEFT: + if (--swimmer->counter == 0) + { + swimmer->state = (Random() & 1) ? SEEL_STATE_SUBMERGE_RIGHT : SEEL_STATE_SUBMERGE_LEFT; + seel->streak = 0; + } + break; + case SEEL_STATE_SUBMERGE_RIGHT: + case SEEL_STATE_HIT_RIGHT: + if (swimmerSprite->animEnded) + { + swimmer->state = SEEL_STATE_SWIM_RIGHT; + ChooseNextEmergingSeel(i, seel); + } + break; + case SEEL_STATE_SUBMERGE_LEFT: + case SEEL_STATE_HIT_LEFT: + if (swimmerSprite->animEnded) + { + swimmer->state = SEEL_STATE_SWIM_LEFT; + ChooseNextEmergingSeel(i, seel); + } + break; + } + } + + return seel->completed; +} + +static void ChooseNextEmergingSeel(int curSeelIndex, struct Seel *seel) +{ + int index; + do { + index = Random() % NUM_SEELS; + } while (index == curSeelIndex); + + seel->emergingSwimmerIndex = index; + seel->emergingSwimmerCounter = Random() % 60; +} + +static u32 GetSeelVisibleTicks(int curStreak) +{ + if (curStreak < 2) + return 3 * 60; + + if (curStreak < 6) + return 2 * 60; + + return 1 * 60; +} + +static void ResetSeels(struct Seel *seel) +{ + int i; + bool32 isSeelVisible = FALSE; + + for (i = 0; i < NUM_SEELS; i++) + { + struct SeelSwimmer *swimmer = &seel->swimmers[i]; + if (swimmer->state == SEEL_STATE_VISIBLE_RIGHT || swimmer->state == SEEL_STATE_VISIBLE_LEFT) + { + isSeelVisible = TRUE; + break; + } + } + + for (i = 0; i < NUM_SEELS; i++) + { + struct SeelSwimmer *swimmer = &seel->swimmers[i]; + if (isSeelVisible) + { + // Reset to original positions. + // The original game does this for some reason. + swimmer->state = sInitialSeelStates[i]; + swimmer->xPos = sInitialSeelCoords[i][0] << 8; + swimmer->yPos = sInitialSeelCoords[i][1] << 8; + } + else + { + // Revert the seel back to a swimming state, depending on + // its current direction. + swimmer->state = (swimmer->state == SEEL_STATE_SWIM_RIGHT || + swimmer->state == SEEL_STATE_TURN_LEFT || + swimmer->state == SEEL_STATE_EMERGE_RIGHT || + swimmer->state == SEEL_STATE_SUBMERGE_RIGHT || + swimmer->state == SEEL_STATE_HIT_RIGHT) + ? SEEL_STATE_SWIM_RIGHT + : SEEL_STATE_SWIM_LEFT; + } + } +} + +static void UpdateSeelSprite(struct Sprite *sprite) +{ + // data[0] = previous state + // data[1] = seel swimmer index + struct SeelSwimmer *swimmer = &sPinballGame->seel.swimmers[sprite->data[1]]; + int prevState = sprite->data[0]; + int curState = swimmer->state; + sprite->x = (swimmer->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (swimmer->yPos >> 8) - sPinballGame->cameraScrollY; + + // Check if this Seel's state changed, and start the appropriate + // sprite animation. + if (prevState != curState) + { + sprite->data[0] = curState; + switch (curState) + { + case SEEL_STATE_SWIM_RIGHT: + StartSpriteAnim(sprite, 0); + break; + case SEEL_STATE_TURN_LEFT: + StartSpriteAnim(sprite, 1); + break; + case SEEL_STATE_SWIM_LEFT: + StartSpriteAnim(sprite, 2); + break; + case SEEL_STATE_TURN_RIGHT: + StartSpriteAnim(sprite, 3); + break; + case SEEL_STATE_EMERGE_RIGHT: + StartSpriteAnim(sprite, 4); + PlaySE(SE_M_DIVE); + break; + case SEEL_STATE_EMERGE_LEFT: + StartSpriteAnim(sprite, 5); + PlaySE(SE_M_DIVE); + break; + case SEEL_STATE_VISIBLE_RIGHT: + case SEEL_STATE_VISIBLE_LEFT: + StartSpriteAnim(sprite, 6); + break; + case SEEL_STATE_SUBMERGE_RIGHT: + StartSpriteAnim(sprite, 7); + PlaySE(SE_M_DIVE); + break; + case SEEL_STATE_SUBMERGE_LEFT: + StartSpriteAnim(sprite, 8); + PlaySE(SE_M_DIVE); + break; + case SEEL_STATE_HIT_RIGHT: + StartSpriteAnim(sprite, 9); + PlaySE(SE_BALLOON_YELLOW); + break; + case SEEL_STATE_HIT_LEFT: + StartSpriteAnim(sprite, 10); + PlaySE(SE_BALLOON_YELLOW); + break; + } + } +} + +static void UpdateSeelSparkleSprite(struct Sprite *sprite) +{ + // data[0] is visibility counter timer + // data[1] is the player's score, capped at 20. + if (sprite->data[0] == 0) + { + sprite->invisible = TRUE; + } + else + { + sprite->data[0]--; + sprite->x = ((sprite->data[1] - 1) * 8 + 4) - sPinballGame->cameraScrollX; + sprite->y = 4 - sPinballGame->cameraScrollY; + sprite->invisible = FALSE; + } +} + +static void UpdateSeelMultiplierSprite(struct Sprite *sprite) +{ + // data[0] = state + // data[1] = state counter + // data[2] = original y position + sprite->x2 = -sPinballGame->cameraScrollX; + sprite->y2 = -sPinballGame->cameraScrollY; + switch (sprite->data[0]) + { + case 0: + sprite->y--; + if (++sprite->data[1] == 5) + { + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->y = sprite->data[2]; + } + break; + case 1: + if (++sprite->data[1] >= 22) + { + sprite->data[0] = 2; + sprite->data[1] = 0; + } + break; + case 2: + if (++sprite->data[1] >= 24) + { + DestroySprite(sprite); + return; + } + + if (sprite->data[1] % 8 < 4) + sprite->invisible = FALSE; + else + sprite->invisible = TRUE; + break; + } +} + +static bool32 CheckGhostsCollision(struct Ball *ball, u32 ticks, struct GraveyardGhost *ghosts, int numGhosts, const u8 *angles, int width, int height, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int i; + int x, y; + u8 collisionNormal; + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + + if (ticks <= 0) + return FALSE; + + for (i = 0; i < numGhosts; i++) + { + struct GraveyardGhost *ghost = &ghosts[i]; + int ghostXPos = (ghost->xPos >> 8); + int ghostYPos = (ghost->yPos >> 8); + + if (ghost->state != GHOST_STATE_VISIBLE) + continue; + + if (ballXPos < ghostXPos - (width / 2) || ballXPos >= ghostXPos + (width / 2) + || ballYPos < ghostYPos - (height / 2) || ballYPos >= ghostYPos + (height / 2)) + continue; + + x = ballXPos - ghostXPos + (width / 2); + y = ballYPos - ghostYPos + (height / 2); + collisionNormal = angles[y * width + x]; + if (collisionNormal == 0xFF) + continue; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + ghost->state = GHOST_STATE_HIT; + PlaySE(SE_M_COMET_PUNCH); + return TRUE; + } + + return FALSE; +} + +#define GHOST_SPEED 0x35 +#define REQUIRED_GHOST_HITS 10 +#define REQUIRED_GENGAR_HITS 5 + +static bool32 CheckGengarCollision(struct Ball *ball, struct Gengar *gengar, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +{ + int x, y; + u8 collisionNormal; + struct GengarGhost *gengarGhost = &gengar->gengarGhost; + int gengarXPos = (gengarGhost->xPos >> 8); + int gengarYPos = (gengarGhost->yPos >> 8); + int ballXPos = (ball->xPos >> 8); + int ballYPos = (ball->yPos >> 8); + + if (ticks <= 0) + return FALSE; + + if (ballXPos < gengarXPos - 24 || ballXPos >= gengarXPos + 24 + || ballYPos < gengarYPos - 32 || ballYPos >= gengarYPos + 32) + return FALSE; + + x = ballXPos - gengarXPos + 24; + y = ballYPos - gengarYPos + 32; + collisionNormal = sGengarCollisionNormalAngles[y * 48 + x]; + if (collisionNormal == 0xFF) + return FALSE; + + // Multiply normal by two because the original data is stored halved. + *outCollisionNormal = collisionNormal * 2; + + if (gengarGhost->state == GENGAR_STATE_STANDING || gengarGhost->state == GENGAR_STATE_STEP_LEFT || + gengarGhost->state == GENGAR_STATE_STEP_RIGHT) + { + gengarGhost->state = GENGAR_STATE_HIT; + gengarGhost->counter = 0; + gengar->numGengarHits++; + if (gengar->numGengarHits >= REQUIRED_GENGAR_HITS) + { + gengar->completed = TRUE; + DisableFlippers(); + gengarGhost->state = GENGAR_STATE_LEAVING; + sPinballGame->waitExitScene = TRUE; + } + } + + return TRUE; +} + +static bool32 UpdateGengar(struct Gengar *gengar) +{ + int i; + + switch (gengar->graveyardState) + { + case GRAVEYARD_STATE_GASTLY: + for (i = 0; i < NUM_GASTLY; i++) + UpdateGhost(gengar, &gengar->gastlyGhosts[i], &gengar->numGastlyHits, GRAVEYARD_STATE_TO_HAUNTER, NUM_GASTLY); + break; + case GRAVEYARD_STATE_TO_HAUNTER: + if (--gengar->counter == 0) + { + gengar->graveyardState = GRAVEYARD_STATE_HAUNTER; + PlayBGM(MUS_RG_POKE_MANSION); + for (i = 0; i < NUM_HAUNTER; i++) + InitGhost(&gengar->haunterGhosts[i], sInitialHaunterData[i], &sHaunterSpriteTemplate, i); + } + break; + case GRAVEYARD_STATE_HAUNTER: + for (i = 0; i < NUM_HAUNTER; i++) + UpdateGhost(gengar, &gengar->haunterGhosts[i], &gengar->numHaunterHits, GRAVEYARD_STATE_TO_GENGAR, NUM_HAUNTER); + break; + case GRAVEYARD_STATE_TO_GENGAR: + gengar->counter--; + if (gengar->counter == 60) + { + CrumbleGravestones(gengar); + } + else if (gengar->counter == 0) + { + struct GengarGhost *gengarGhost = &gengar->gengarGhost; + FreeSpriteTilesByTag(TAG_HAUNTER); + FreeSpritePaletteByTag(TAG_HAUNTER); + LoadCompressedSpriteSheet(&sGengarAnimationSpriteSheet); + LoadSpritePalette(&sGengarAnimationSpritePalette); + gengar->graveyardState = GRAVEYARD_STATE_GENGAR; + gengarGhost->state = GENGAR_STATE_STANDING; + gengarGhost->counter = 60; + gengarGhost->xPos = 80 << 8; + gengarGhost->yPos = 20 << 8; + gengarGhost->spriteId = CreateSprite(&sGengarSpriteTemplate, 80, 20, 5); + gSprites[gengarGhost->spriteId].data[0] = gengarGhost->state; + StartSpriteAnim(&gSprites[gengarGhost->spriteId], 0); + PlayCry_Normal(SPECIES_GENGAR, 0); + } + case GRAVEYARD_STATE_GENGAR: + UpdateGengarGhost(gengar); + break; + } + + return gengar->completed; +} + +static void UpdateGengarGhost(struct Gengar *gengar) +{ + struct GengarGhost *gengarGhost = &gengar->gengarGhost; + struct Sprite *sprite = &gSprites[gengarGhost->spriteId]; + + switch (gengarGhost->state) + { + case GENGAR_STATE_STANDING: + if (--gengarGhost->counter == 0) + { + gengarGhost->state = gengarGhost->nextFoot ? GENGAR_STATE_STEP_RIGHT : GENGAR_STATE_STEP_LEFT; + gengarGhost->counter = 64; + if ((gengarGhost->yPos >> 8) < 64) + gengarGhost->yPos += (3 << 8); + + sPinballGame->doArtificialDownTilt = TRUE; + PlaySE(SE_M_STRENGTH); + } + break; + case GENGAR_STATE_STEP_LEFT: + case GENGAR_STATE_STEP_RIGHT: + if (--gengarGhost->counter == 0) + { + gengarGhost->state = GENGAR_STATE_STANDING; + gengarGhost->counter = 12; + gengarGhost->nextFoot = !gengarGhost->nextFoot; + if ((gengarGhost->yPos >> 8) < 64) { + gengarGhost->yPos += (1 << 8); + } + } + break; + case GENGAR_STATE_HIT: + gengarGhost->counter++; + if (gengarGhost->counter == 1) + { + if ((gengarGhost->yPos >> 8) > 16) { + gengarGhost->yPos -= (4 << 8); + PlaySE(SE_EFFECTIVE); + } + } + else if (gengarGhost->counter == 21) + { + if ((gengarGhost->yPos >> 8) > 16) + gengarGhost->yPos -= (4 << 8); + } + else if (sprite->animEnded) + { + gengarGhost->state = GENGAR_STATE_STANDING; + gengarGhost->counter = 10; + } + break; + case GENGAR_STATE_LEAVING: + if (sprite->animEnded) + { + PlaySE(SE_M_TELEPORT); + sPinballGame->waitExitScene = FALSE; + sPinballGame->state = PINBALL_STATE_START_EXIT; + sprite->invisible = TRUE; + } + else if (++gengarGhost->counter >= 108) + { + int leaveIndex = gengarGhost->counter - 108; + //PlaySE(SE_M_STRENGTH); + if (leaveIndex % 82 == 0) + { + gengarGhost->yPos -= (3 << 8); + } + else if (leaveIndex % 82 == 64) + { + gengarGhost->yPos -= (1 << 8); + } + } + break; + } +}; + +static void UpdateGhost(struct Gengar *gengar, struct GraveyardGhost *ghost, u8 *numGhostHits, u8 nextState, int numGhosts) +{ + u8 multiplier = 0; + struct Sprite *sprite = &gSprites[ghost->spriteId]; + + if (numGhostHits == &gengar->numGastlyHits) + { + multiplier = 3; // Gastly + } + else if (numGhostHits == &gengar->numHaunterHits) + { + multiplier = 7; // Haunter + } + + switch (ghost->state) + { + case GHOST_STATE_VISIBLE: + if (ghost->direction == GHOST_DIR_RIGHT) + { + ghost->xPos += GHOST_SPEED; + if ((ghost->xPos >> 8) >= ghost->rightBoundary) + { + ghost->xPos = ghost->rightBoundary << 8; + ghost->direction = GHOST_DIR_LEFT; + } + } + else + { + ghost->xPos -= GHOST_SPEED; + if ((ghost->xPos >> 8) < ghost->leftBoundary) + { + ghost->xPos = ghost->leftBoundary << 8; + ghost->direction = GHOST_DIR_RIGHT; + } + } + + if (++ghost->counter >= 52) + ghost->counter = 0; + break; + case GHOST_STATE_HIT: + if (sprite->animEnded) + { + (*numGhostHits)++; + VarSet(GAME_CORNER_VAR_WINNINGS, (VarGet(GAME_CORNER_VAR_WINNINGS) + multiplier)); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + PlaySE(SE_M_TELEPORT); + if (*numGhostHits >= REQUIRED_GHOST_HITS - (numGhosts - 1)) + { + ghost->state = GHOST_STATE_FINISHED; + if (*numGhostHits >= REQUIRED_GHOST_HITS) + { + gengar->graveyardState = nextState; + gengar->counter = 2 * 60; + } + } + else + { + ghost->state = GHOST_STATE_INVISIBLE; + ghost->counter = 0; + } + } + break; + case GHOST_STATE_INVISIBLE: + if (++ghost->counter >= 130) + { + ghost->state = GHOST_STATE_VISIBLE; + ghost->counter = 0; + } + break; + } +} + +static void InitGhost(struct GraveyardGhost *ghost, const u8 *initialData, const struct SpriteTemplate *spriteTemplate, int ghostIndex) +{ + ghost->state = GHOST_STATE_VISIBLE; + ghost->xPos = initialData[0] << 8; + ghost->yPos = initialData[1] << 8; + ghost->direction = initialData[2]; + ghost->leftBoundary = initialData[3]; + ghost->rightBoundary = initialData[4]; + ghost->spriteId = CreateSprite(spriteTemplate, ghost->xPos >> 8, ghost->yPos >> 8, 5); + gSprites[ghost->spriteId].data[0] = ghost->state; + gSprites[ghost->spriteId].data[1] = ghostIndex; + PlaySE(SE_M_TELEPORT); + if (ghost->direction == GHOST_DIR_RIGHT) + StartSpriteAnim(&gSprites[ghost->spriteId], 0); + else + StartSpriteAnim(&gSprites[ghost->spriteId], 1); +} + +static void UpdateGastlySprite(struct Sprite *sprite) +{ + // data[0] = previous state + // data[1] = gastly index + struct GraveyardGhost *gastly = &sPinballGame->gengar.gastlyGhosts[sprite->data[1]]; + UpdateGhostSprite(sprite, gastly); +} + +static void UpdateHaunterSprite(struct Sprite *sprite) +{ + // data[0] = previous state + // data[1] = haunter index + struct GraveyardGhost *haunter = &sPinballGame->gengar.haunterGhosts[sprite->data[1]]; + UpdateGhostSprite(sprite, haunter); +} + +static void UpdateGhostSprite(struct Sprite *sprite, struct GraveyardGhost *ghost) +{ + // data[0] = previous state + // data[1] = ghost index + int prevState = sprite->data[0]; + int curState = ghost->state; + sprite->x = (ghost->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (ghost->yPos >> 8) - sPinballGame->cameraScrollY; + switch ((ghost->counter % 52) / 13) + { + case 0: + case 2: + sprite->y2 = 0; + break; + case 1: + sprite->y2 = 1; + break; + case 3: + sprite->y2 = -1; + break; + } + + // Check if this Haunter's state changed, and start the appropriate + // sprite animation. + if (prevState != curState) + { + sprite->data[0] = curState; + switch (curState) + { + case GHOST_STATE_VISIBLE: + sprite->invisible = FALSE; + StartSpriteAnim(sprite, 0); + PlaySE(SE_M_TELEPORT); + break; + case GHOST_STATE_HIT: + sprite->invisible = FALSE; + StartSpriteAnim(sprite, 1); + break; + case GHOST_STATE_INVISIBLE: + sprite->invisible = TRUE; + break; + case GHOST_STATE_FINISHED: + DestroySprite(sprite); + ghost->spriteId = 0xFF; + break; + } + } +} + +static void UpdateGengarSprite(struct Sprite *sprite) +{ + // data[0] = previous state + struct GengarGhost *gengarGhost = &sPinballGame->gengar.gengarGhost; + int prevState = sprite->data[0]; + int curState = gengarGhost->state; + sprite->x = (gengarGhost->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (gengarGhost->yPos >> 8) - sPinballGame->cameraScrollY; + + // Check if Gengar's state changed, and start the appropriate + // sprite animation. + if (prevState != curState) + { + sprite->data[0] = curState; + switch (curState) + { + case GENGAR_STATE_STANDING: + StartSpriteAnim(sprite, 0); + break; + case GENGAR_STATE_STEP_LEFT: + StartSpriteAnim(sprite, 1); + break; + case GENGAR_STATE_STEP_RIGHT: + StartSpriteAnim(sprite, 2); + break; + case GENGAR_STATE_HIT: + StartSpriteAnim(sprite, 3); + break; + case GENGAR_STATE_LEAVING: + StartSpriteAnim(sprite, 4); + PlayBGM(MUS_NONE); + VarSet(GAME_CORNER_VAR_WINNINGS, 250); + SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + PlaySE(SE_SUPER_EFFECTIVE); + break; + } + } +} + +static void CrumbleGravestones(struct Gengar *gengar) +{ + int i; + + // Draw the 4 crumbled gravestone tiles to the background tilemap. + u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + PlayBGM(MUS_RG_SILPH); + PlaySE(SE_M_ROCK_THROW); + tilemap[0x67] = 0x5; + tilemap[0x68] = 0x5; + tilemap[0x69] = 0x5; + tilemap[0x87] = 0x5; + tilemap[0x88] = 0x5; + tilemap[0x89] = 0x5; + tilemap[0xA7] = 0xA0; + tilemap[0xA8] = 0xA1; + tilemap[0xA9] = 0xA2; + tilemap[0xC7] = 0xA3; + tilemap[0xC8] = 0xA4; + tilemap[0xC9] = 0xA5; + + tilemap[0x6E] = 0x5; + tilemap[0x6F] = 0x5; + tilemap[0x70] = 0x5; + tilemap[0x8E] = 0xA0; + tilemap[0x8F] = 0xA1; + tilemap[0x90] = 0xA2; + tilemap[0xAE] = 0xA3; + tilemap[0xAF] = 0xA4; + tilemap[0xB0] = 0xA5; + + tilemap[0xE3] = 0x7; + tilemap[0xE4] = 0x64; + tilemap[0xE5] = 0x65; + tilemap[0x103] = 0xA6; + tilemap[0x104] = 0xA7; + tilemap[0x105] = 0xA8; + tilemap[0x123] = 0xA9; + tilemap[0x124] = 0xAA; + tilemap[0x125] = 0xAB; + + tilemap[0xED] = 0x5; + tilemap[0xEE] = 0x5; + tilemap[0xEF] = 0x5; + tilemap[0x10D] = 0x5; + tilemap[0x10E] = 0x5; + tilemap[0x10F] = 0x5; + tilemap[0x12D] = 0xA0; + tilemap[0x12E] = 0xA1; + tilemap[0x12F] = 0xA2; + tilemap[0x14D] = 0xA3; + tilemap[0x14E] = 0xA4; + tilemap[0x14F] = 0xA5; + + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + + // Update the collision map so the pinball can't collide with the + // crumbled gravestones. + for (i = 0; i < ARRAY_COUNT(sGengarGravestoneCoords); i++) + { + int index = sGengarGravestoneCoords[i][0] + sGengarGravestoneCoords[i][1] * 0x20; + gengar->collisionMap[index - 0x21] = 0x0; + gengar->collisionMap[index - 0x20] = 0x0; + gengar->collisionMap[index - 0x1F] = 0x0; + gengar->collisionMap[index - 0x01] = 0x0; + gengar->collisionMap[index] = 0x0; + gengar->collisionMap[index + 0x01] = 0x0; + gengar->collisionMap[index + 0x1F] = 0x0; + gengar->collisionMap[index + 0x20] = 0x0; + gengar->collisionMap[index + 0x21] = 0x0; + } +} diff --git a/src/rogue_voltorbflip.c b/src/rogue_voltorbflip.c new file mode 100644 index 000000000000..f850ed6ace2d --- /dev/null +++ b/src/rogue_voltorbflip.c @@ -0,0 +1,1364 @@ +#include "global.h" +#include "constants/songs.h" + +#include "palette.h" +#include "coins.h" +#include "main.h" +#include "gpu_regs.h" +#include "scanline_effect.h" +#include "task.h" +#include "malloc.h" +#include "decompress.h" +#include "event_data.h" +#include "bg.h" +#include "window.h" +#include "sound.h" +#include "strings.h" +#include "string_util.h" +#include "text.h" +#include "overworld.h" +#include "menu.h" +#include "pokedex.h" +#include "constants/rgb.h" +#include "constants/coins.h" +#include "constants/vars.h" +#include "random.h" + +#include "rogue_voltorbflip.h" + +#define FLIP_VERTICAL (0x08 << 8) +#define FLIP_HORIZONTAL (0x04 << 8) + +#define BOARD_WIDTH 5 +#define BOARD_HEIGHT 5 +#define TOTAL_CARD_COUNT (BOARD_WIDTH * BOARD_HEIGHT) + +#define COORDS_TO_CARD(x, y) (y * BOARD_WIDTH + x) + +#define MAX_VOLTORB_FLIP_LEVEL 8 +#define MAX_VOLTORB_LEVEL_VARIANTS 5 + +enum { + SPR_CREDIT_DIG_1, + SPR_CREDIT_DIG_10, + SPR_CREDIT_DIG_100, + SPR_CREDIT_DIG_1000, +}; + +#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 +#define MAX_SPRITES_CREDIT 4 + +struct Vflip +{ + u8 CreditSpriteId1; + u8 CreditSpriteId2; + u8 CreditSpriteId3; + u8 CreditSpriteId4; + u8 CoinsSpriteId; + u32 winnings; + u32 prevWinnings; + u32 curWinnings; +}; + +enum +{ + CARD_GFX_HIDDEN, + CARD_GFX_SHOW_1, + CARD_GFX_SHOW_2, + CARD_GFX_SHOW_3, + CARD_GFX_SHOW_VOLTORB, + CARD_GFX_COUNT +}; + +enum +{ + CARD_VALUE_1, + CARD_VALUE_2, + CARD_VALUE_3, + CARD_VALUE_VOLTORB, + CARD_VALUE_COUNT +}; + +enum +{ + GAME_STATE_IN_PROGRESS, + GAME_STATE_WIN, + GAME_STATE_LOSE, +}; + +enum +{ + WIN_INFO_RED_X, + WIN_INFO_GREEN_X, + WIN_INFO_YELLOW_X, + WIN_INFO_BLUE_X, + WIN_INFO_PURPLE_X, + + WIN_INFO_RED_Y, + WIN_INFO_GREEN_Y, + WIN_INFO_YELLOW_Y, + WIN_INFO_BLUE_Y, + WIN_INFO_PURPLE_Y, + + WIN_COUNT, +}; + +struct VoltorbSpawnCounts +{ + u8 x2Count; + u8 x3Count; + u8 voltorbCount; +}; + +struct VoltorbCardState +{ + u8 value : 4; + u8 isShown: 1; + u8 note1 : 1; + u8 note2 : 1; + u8 note3 : 1; + u8 noteVoltorb : 1; +}; + +struct VoltorbFlipState +{ + struct VoltorbCardState cardStates[TOTAL_CARD_COUNT]; + u8 pointerSprite; + u8 outlineSprite; + u8 cursorX; + u8 cursorY; + u8 cursorWriteValue; +}; + +EWRAM_DATA static struct Vflip *sVflip = NULL; + +extern const u8 gText_DexNational[]; +extern const u8 gText_DexHoenn[]; +extern const u8 gText_PokedexDiploma[]; + +static void MainCB2(void); +static void Task_VoltorbFlipFadeIn(u8); +static void Task_VoltorbFlipWaitForKeyPress(u8); +static void Task_VoltorbFlipVictory(u8); +static void Task_VoltorbFlipLoss(u8); +static void Task_VoltorbFlipFadeOut(u8); +static void DisplayVoltorbFlipText(void); +static void DrawBoardCardTiles(void); +static void InitVoltorbFlipBg(void); +static void InitVoltorbFlipSprites(void); +static void InitVoltorbFlipWindow(void); +static void PrintVoltorbFlipText(u8, u8, u8 const*, u8, u8); + +static void UpdateVoltorbFlipSprites(); +static void ResetVoltorbFlipCards(u8 level); +static void ShowAllCards(); +static u8 CalculateBoardState(); + +static void DrawCardTiles(u8 x, u8 y); +static void DrawNoteTiles(); + +EWRAM_DATA static u8 *sVoltorbFlipTilemapPtr = NULL; +EWRAM_DATA static struct VoltorbFlipState *sVoltorbFlipState = NULL; + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static const u16 sVoltorbFlipPalettes[][16] = +{ + INCBIN_U16("graphics/rogue_voltorbflip/gameboard.gbapal"), +}; + +static const u32 sVoltorbFlipTilemap[] = INCBIN_U32("graphics/rogue_voltorbflip/gameboard.bin.lz"); +static const u32 sVoltorbFlipTiles[] = INCBIN_U32("graphics/rogue_voltorbflip/gameboard.4bpp.lz"); + +static const u8 sVoltorbFlipSpriteSheetData[] = INCBIN_U8("graphics/rogue_voltorbflip/sprites.4bpp"); +static const u16 sVoltorbFlipPaletteSpriteData[] = INCBIN_U16("graphics/rogue_voltorbflip/sprites.gbapal"); + +static const u32 sCoinsGFX[] = INCBIN_U32("graphics/rogue_voltorbflip/coins.4bpp.lz"); +static const u16 sCoinsPAL[] = INCBIN_U16("graphics/rogue_voltorbflip/coins.gbapal"); + +static const u32 gCredits_Gfx[] = INCBIN_U32("graphics/rogue_voltorbflip/digits.4bpp.lz"); +static const u16 sCredit_Pal[] = INCBIN_U16("graphics/rogue_voltorbflip/digits.gbapal"); + + +static const struct VoltorbSpawnCounts sVoltorbSpawnCounts[MAX_VOLTORB_FLIP_LEVEL][MAX_VOLTORB_LEVEL_VARIANTS] = +{ + { + { .x2Count = 3, .x3Count = 1, .voltorbCount = 6, }, + { .x2Count = 0, .x3Count = 3, .voltorbCount = 6, }, + { .x2Count = 5, .x3Count = 0, .voltorbCount = 6, }, + { .x2Count = 2, .x3Count = 2, .voltorbCount = 6, }, + { .x2Count = 4, .x3Count = 1, .voltorbCount = 6, }, + }, + { + { .x2Count = 1, .x3Count = 3, .voltorbCount = 7, }, + { .x2Count = 6, .x3Count = 0, .voltorbCount = 7, }, + { .x2Count = 3, .x3Count = 2, .voltorbCount = 7, }, + { .x2Count = 0, .x3Count = 4, .voltorbCount = 7, }, + { .x2Count = 5, .x3Count = 1, .voltorbCount = 7, }, + }, + { + { .x2Count = 2, .x3Count = 3, .voltorbCount = 8, }, + { .x2Count = 7, .x3Count = 0, .voltorbCount = 8, }, + { .x2Count = 4, .x3Count = 2, .voltorbCount = 8, }, + { .x2Count = 1, .x3Count = 4, .voltorbCount = 8, }, + { .x2Count = 6, .x3Count = 1, .voltorbCount = 8, }, + }, + { + { .x2Count = 3, .x3Count = 3, .voltorbCount = 8, }, + { .x2Count = 0, .x3Count = 5, .voltorbCount = 8, }, + { .x2Count = 8, .x3Count = 0, .voltorbCount = 10, }, + { .x2Count = 5, .x3Count = 2, .voltorbCount = 10, }, + { .x2Count = 2, .x3Count = 4, .voltorbCount = 10, }, + }, + { + { .x2Count = 7, .x3Count = 1, .voltorbCount = 10, }, + { .x2Count = 4, .x3Count = 3, .voltorbCount = 10, }, + { .x2Count = 1, .x3Count = 5, .voltorbCount = 10, }, + { .x2Count = 9, .x3Count = 0, .voltorbCount = 10, }, + { .x2Count = 6, .x3Count = 2, .voltorbCount = 10, }, + }, + { + { .x2Count = 3, .x3Count = 4, .voltorbCount = 10, }, + { .x2Count = 0, .x3Count = 6, .voltorbCount = 10, }, + { .x2Count = 8, .x3Count = 1, .voltorbCount = 10, }, + { .x2Count = 5, .x3Count = 3, .voltorbCount = 10, }, + { .x2Count = 2, .x3Count = 5, .voltorbCount = 10, }, + }, + { + { .x2Count = 7, .x3Count = 2, .voltorbCount = 10, }, + { .x2Count = 4, .x3Count = 4, .voltorbCount = 10, }, + { .x2Count = 1, .x3Count = 6, .voltorbCount = 10, }, + { .x2Count = 9, .x3Count = 1, .voltorbCount = 10, }, + { .x2Count = 6, .x3Count = 3, .voltorbCount = 10, }, + }, + { + { .x2Count = 0, .x3Count = 7, .voltorbCount = 10, }, + { .x2Count = 8, .x3Count = 2, .voltorbCount = 10, }, + { .x2Count = 5, .x3Count = 4, .voltorbCount = 10, }, + { .x2Count = 2, .x3Count = 6, .voltorbCount = 10, }, + { .x2Count = 7, .x3Count = 3, .voltorbCount = 10, }, + }, +}; + +static const u16 sCardGfxTiles[CARD_GFX_COUNT][9] = +{ + [CARD_GFX_HIDDEN] = + { + 0x06, 0x07, 0x06 | FLIP_HORIZONTAL, + 0x10, 0x11, 0x10 | FLIP_HORIZONTAL, + 0x06 | FLIP_VERTICAL, 0x07 | FLIP_VERTICAL, 0x06 | FLIP_HORIZONTAL | FLIP_VERTICAL, + }, + + [CARD_GFX_SHOW_1] = + { + 0x25, 0x26, 0x25 | FLIP_HORIZONTAL, + 0x30, 0x47, 0x30 | FLIP_HORIZONTAL, + 0x25 | FLIP_VERTICAL, 0x26 | FLIP_VERTICAL, 0x25 | FLIP_HORIZONTAL | FLIP_VERTICAL, + }, + [CARD_GFX_SHOW_2] = + { + 0x27, 0x28, 0x27 | FLIP_HORIZONTAL, + 0x32, 0x48, 0x32 | FLIP_HORIZONTAL, + 0x27 | FLIP_VERTICAL, 0x28 | FLIP_VERTICAL, 0x27 | FLIP_HORIZONTAL | FLIP_VERTICAL, + }, + [CARD_GFX_SHOW_3] = + { + 0x27, 0x28, 0x27 | FLIP_HORIZONTAL, + 0x32, 0x49, 0x32 | FLIP_HORIZONTAL, + 0x27 | FLIP_VERTICAL, 0x28 | FLIP_VERTICAL, 0x27 | FLIP_HORIZONTAL | FLIP_VERTICAL, + }, + [CARD_GFX_SHOW_VOLTORB] = + { + 0x43, 0x44, 0x43 | FLIP_HORIZONTAL, + 0x4A, 0x4B, 0x4A | FLIP_HORIZONTAL, + 0x4F, 0x50, 0x4F | FLIP_HORIZONTAL, + }, +}; + +static const struct BgTemplate sVoltorbFlipBgTemplates[2] = +{ + { + .bg = 0, + .charBaseIndex = 1, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0, + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 6, + .screenSize = 1, + .paletteMode = 0, + .priority = 1, + .baseTile = 0, + }, +}; + +static const struct WindowTemplate sVoltorbFlipWinTemplates[WIN_COUNT + 1] = +{ + [WIN_INFO_RED_X] = + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 1, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 1, + }, + [WIN_INFO_GREEN_X] = + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 1 + 3 * 1, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 10, + }, + [WIN_INFO_YELLOW_X] = + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 1 + 3 * 2, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 19, + }, + [WIN_INFO_BLUE_X] = + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 1 + 3 * 3, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 28, + }, + [WIN_INFO_PURPLE_X] = + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 1 + 3 * 4, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 37, + }, + + [WIN_INFO_RED_Y] = + { + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 16, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 46, + }, + [WIN_INFO_GREEN_Y] = + { + .bg = 0, + .tilemapLeft = 3 + 3 * 1, + .tilemapTop = 16, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 55, + }, + [WIN_INFO_YELLOW_Y] = + { + .bg = 0, + .tilemapLeft = 3 + 3 * 2, + .tilemapTop = 16, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 64, + }, + [WIN_INFO_BLUE_Y] = + { + .bg = 0, + .tilemapLeft = 3 + 3 * 3, + .tilemapTop = 16, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 73, + }, + [WIN_INFO_PURPLE_Y] = + { + .bg = 0, + .tilemapLeft = 3 + 3 * 4, + .tilemapTop = 16, + .width = 3, + .height = 3, + .paletteNum = 15, + .baseBlock = 82, + }, + [WIN_COUNT] = DUMMY_WIN_TEMPLATE, +}; + +#define SPRITE_SHEET_TILE_TAG 5525 +#define SPRITE_SHEET_PAL_TAG 5526 +#define GFXTAG_CREDIT_DIGIT 1 +#define PALTAG_INTERFACE 1 +#define GFX_COINS 2 +#define PAL_COINS 2 + +static const struct SpritePalette sCoinPalette = +{ + .data = sCoinsPAL, + .tag = PAL_COINS +}; + +static const struct SpritePalette sSpritePalettes2[] = +{ + { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, + {} +}; + +// TODO - Move to CompressedSpriteSheet +static const struct SpriteSheet sVoltorbFlipSpriteSheet = +{ + .data = sVoltorbFlipSpriteSheetData, + .size = 2048, + .tag = SPRITE_SHEET_TILE_TAG +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Coins = +{ + .data = sCoinsGFX, + .size = 0x100, + .tag = GFX_COINS, +}; + +static const struct OamData sOamData_Coins = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Coins = +{ + .tileTag = GFX_COINS, + .paletteTag = PAL_COINS, + .oam = &sOamData_Coins, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpritePalette sVoltorbFlipPalette = +{ + .data = sVoltorbFlipPaletteSpriteData, + .tag = SPRITE_SHEET_PAL_TAG +}; + +static const struct CompressedSpriteSheet sSpriteSheets_Interface[] = +{ + { + .data = gCredits_Gfx, + .size = 0x280, + .tag = GFXTAG_CREDIT_DIGIT, + }, + {} +}; + +static const struct OamData sOam_CreditDigit = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_CreditDigit = +{ + .tileTag = GFXTAG_CREDIT_DIGIT, + .paletteTag = PALTAG_INTERFACE, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct OamData sPointerSpriteOamData = +{ + .x = 0, + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x32), + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + .affineParam = 0, +}; + +static const union AnimCmd sPointerSprite_PointerFrame[] = +{ + ANIMCMD_FRAME(0, 5, FALSE, FALSE), + ANIMCMD_END +}; + +static const union AnimCmd sPointerSprite_PencilFrame[] = +{ + ANIMCMD_FRAME(16, 5, FALSE, FALSE), + ANIMCMD_END +}; + +static const union AnimCmd sPointerSprite_PointerOutlineFrame[] = +{ + ANIMCMD_FRAME(32, 5, FALSE, FALSE), + ANIMCMD_END +}; + +static const union AnimCmd sPointerSprite_PencilOutlineFrame[] = +{ + ANIMCMD_FRAME(48, 5, FALSE, FALSE), + ANIMCMD_END +}; + +enum +{ + POINTER_ANIM_POINTER, + POINTER_ANIM_PENCIL, + POINTER_ANIM_POINTER_OUTLINE, + POINTER_ANIM_PENCIL_OUTLINE, + POINTER_ANIM_COUNT, +}; + +static const union AnimCmd *const sPencilAnimationCommands[POINTER_ANIM_COUNT] = +{ + [POINTER_ANIM_POINTER] = sPointerSprite_PointerFrame, + [POINTER_ANIM_PENCIL] = sPointerSprite_PencilFrame, + [POINTER_ANIM_POINTER_OUTLINE] = sPointerSprite_PointerOutlineFrame, + [POINTER_ANIM_PENCIL_OUTLINE] = sPointerSprite_PencilOutlineFrame, +}; + +static const struct SpriteTemplate sPointerSprite = +{ + .tileTag = SPRITE_SHEET_TILE_TAG, + .paletteTag = SPRITE_SHEET_PAL_TAG, + .oam = &sPointerSpriteOamData, + .anims = sPencilAnimationCommands, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +//static const struct OamData sPointerSpriteOamData = +//{ +// .x = 0, +// .y = 0, +// .affineMode = ST_OAM_AFFINE_OFF, +// .objMode = ST_OAM_OBJ_NORMAL, +// .mosaic = 0, +// .bpp = ST_OAM_4BPP, +// .shape = SPRITE_SHAPE(32x32), +// .matrixNum = 0, +// .size = SPRITE_SIZE(32x32), +// .tileNum = 0, +// .priority = 0, +// .paletteNum = 1, +// .affineParam = 0, +//}; + +static void SetCreditDigits(u16 num) +{ + int i; + u16 d = 1000; + u8 digit; + + for (i = 0; i < 4; i++) // Always show 4 digits + { + digit = num / d; + + if (i == 0) + { + gSprites[sVflip->CreditSpriteId1].invisible = FALSE; + + // Set tileNum for CreditSpriteId1 + gSprites[sVflip->CreditSpriteId1].oam.tileNum = digit * 2; + + gSprites[sVflip->CreditSpriteId1].oam.priority = 0; + } + else if (i == 1) + { + gSprites[sVflip->CreditSpriteId2].invisible = FALSE; + + // Set tileNum for CreditSpriteId2 + gSprites[sVflip->CreditSpriteId2].oam.tileNum = digit * 2; + + gSprites[sVflip->CreditSpriteId2].oam.priority = 0; + } + else if (i == 2) + { + gSprites[sVflip->CreditSpriteId3].invisible = FALSE; + + // Set tileNum for CreditSpriteId3 + gSprites[sVflip->CreditSpriteId3].oam.tileNum = digit * 2; + + gSprites[sVflip->CreditSpriteId3].oam.priority = 0; + } + else if (i == 3) + { + gSprites[sVflip->CreditSpriteId4].invisible = FALSE; + + // Set tileNum for CreditSpriteId4 + gSprites[sVflip->CreditSpriteId4].oam.tileNum = digit * 2; + + gSprites[sVflip->CreditSpriteId4].oam.priority = 0; + } + + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + // Build the OAM buffer after updating all sprites + BuildOamBuffer(); +} + +static void CreateCreditSprites(void) +{ + int i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_Interface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_Interface[i]); + } + + for (i = 0; i < 4; i++) + { + if (i == 0) + { + sVflip->CreditSpriteId1 = CreateSprite(&sSpriteTemplate_CreditDigit, 185, 146, 0); + gSprites[sVflip->CreditSpriteId1].oam.priority = 0; + gSprites[sVflip->CreditSpriteId1].invisible = FALSE; + } + else if (i == 1) + { + sVflip->CreditSpriteId2 = CreateSprite(&sSpriteTemplate_CreditDigit, (8 + 185), 146, 0); + gSprites[sVflip->CreditSpriteId2].oam.priority = 0; + gSprites[sVflip->CreditSpriteId2].invisible = FALSE; + } + else if (i == 2) + { + sVflip->CreditSpriteId3 = CreateSprite(&sSpriteTemplate_CreditDigit, (16 + 185), 146, 0); + gSprites[sVflip->CreditSpriteId3].oam.priority = 0; + gSprites[sVflip->CreditSpriteId3].invisible = FALSE; + } + else if (i == 3) + { + sVflip->CreditSpriteId4 = CreateSprite(&sSpriteTemplate_CreditDigit, (24 + 185), 146, 0); + gSprites[sVflip->CreditSpriteId4].oam.priority = 0; + gSprites[sVflip->CreditSpriteId4].invisible = FALSE; + } + } +} + +static void CreateCoins(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Coins); + + sVflip->CoinsSpriteId = CreateSprite(&sSpriteTemplate_Coins, 198, 132, 0); +} + +void CB2_ShowVoltorbFlip(void) +{ + AGB_ASSERT(sVoltorbFlipTilemapPtr == NULL); + AGB_ASSERT(sVoltorbFlipState == NULL); + sVflip = Alloc(sizeof(struct Vflip)); + + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0); + SetGpuReg(REG_OFFSET_BG3CNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, 0); + SetGpuReg(REG_OFFSET_BG1CNT, 0); + SetGpuReg(REG_OFFSET_BG0CNT, 0); + SetGpuReg(REG_OFFSET_BG3HOFS, 0); + SetGpuReg(REG_OFFSET_BG3VOFS, 0); + SetGpuReg(REG_OFFSET_BG2HOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + // why doesn't this one use the dma manager either? + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + ScanlineEffect_Stop(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + + LoadSpritePalettes(sSpritePalettes2); + CreateCreditSprites(); + SetCreditDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + //SetCreditDigits(9876); + sVflip->prevWinnings = VarGet(GAME_CORNER_VAR_WINNINGS); + sVflip->curWinnings = 0; + sVflip->winnings = 0; + SetCreditDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); + LoadSpritePalette(&sCoinPalette); + CreateCoins(); + + LoadPalette(sVoltorbFlipPalettes, 0, ARRAY_COUNT(sVoltorbFlipPalettes) * 32); + sVoltorbFlipTilemapPtr = Alloc(0x1000); + sVoltorbFlipState = AllocZeroed(sizeof(struct VoltorbFlipState)); + + sVoltorbFlipState->cursorX = BOARD_WIDTH / 2; + sVoltorbFlipState->cursorY = BOARD_HEIGHT / 2; + sVoltorbFlipState->cursorWriteValue = 0; + + InitVoltorbFlipBg(); + InitVoltorbFlipSprites(); + InitVoltorbFlipWindow(); + + ResetTempTileDataBuffers(); + DecompressAndCopyTileDataToVram(1, &sVoltorbFlipTiles, 0, 0, 0); + while (FreeTempTileDataBuffersIfPossible()) + ; + + LZDecompressWram(sVoltorbFlipTilemap, sVoltorbFlipTilemapPtr); + CopyBgTilemapBufferToVram(1); + BlendPalettes(PALETTES_ALL, 16, RGB_BLACK); + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); + EnableInterrupts(1); + + SetVBlankCallback(VBlankCB); + SetMainCallback2(MainCB2); + + ResetVoltorbFlipCards(VarGet(FLIP_VAR_LEVEL)); + + CreateTask(Task_VoltorbFlipFadeIn, 0); +} + +static void MainCB2(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + DoScheduledBgTilemapCopiesToVram(); + UpdatePaletteFade(); +} + +static void Task_VoltorbFlipFadeIn(u8 taskId) +{ + if (!gPaletteFade.active) + gTasks[taskId].func = Task_VoltorbFlipWaitForKeyPress; +} + +static void Task_VoltorbFlipWaitForKeyPress(u8 taskId) +{ + u8 gameState = CalculateBoardState(); + AGB_ASSERT(sVoltorbFlipState != NULL); + //SetCreditDigits(VarGet(VAR_FLIP_WINNINGS)); + + if (JOY_NEW(B_BUTTON)) + { + VarSet(VAR_RESULT, FALSE); + VarSet(FLIP_VAR_LEVEL, 0); + + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_VoltorbFlipFadeOut; + return; + } + + if(gameState == GAME_STATE_LOSE) + { + VarSet(VAR_RESULT, FALSE); + VarSet(FLIP_VAR_LEVEL, 0); + + gSprites[sVoltorbFlipState->outlineSprite].invisible = TRUE; + gSprites[sVoltorbFlipState->pointerSprite].invisible = TRUE; + gTasks[taskId].func = Task_VoltorbFlipLoss; + gTasks[taskId].data[0] = 0; + } + else if(gameState == GAME_STATE_WIN) + { + ShowAllCards(); + VarSet(VAR_RESULT, TRUE); + VarSet(FLIP_VAR_LEVEL, FLIP_VAR_LEVEL + 1); + + gSprites[sVoltorbFlipState->outlineSprite].invisible = TRUE; + gSprites[sVoltorbFlipState->pointerSprite].invisible = TRUE; + gTasks[taskId].func = Task_VoltorbFlipVictory; + gTasks[taskId].data[0] = 0; + return; + } + + if (JOY_NEW(DPAD_LEFT)) + { + if(sVoltorbFlipState->cursorX > 0) + { + PlaySE(SE_DEX_SCROLL); + --sVoltorbFlipState->cursorX; + } + } + if (JOY_NEW(DPAD_RIGHT)) + { + if(sVoltorbFlipState->cursorX < BOARD_WIDTH - 1) + { + PlaySE(SE_DEX_SCROLL); + ++sVoltorbFlipState->cursorX; + } + } + + if (JOY_NEW(DPAD_UP)) + { + if(sVoltorbFlipState->cursorY > 0) + { + PlaySE(SE_DEX_SCROLL); + --sVoltorbFlipState->cursorY; + } + } + if (JOY_NEW(DPAD_DOWN)) + { + if(sVoltorbFlipState->cursorY < BOARD_HEIGHT - 1) + { + PlaySE(SE_DEX_SCROLL); + ++sVoltorbFlipState->cursorY; + } + } + + if (JOY_NEW(L_BUTTON)) + { + if(sVoltorbFlipState->cursorWriteValue > 0) + { + PlaySE(SE_SELECT); + --sVoltorbFlipState->cursorWriteValue; + DrawNoteTiles(); + } + } + if (JOY_NEW(R_BUTTON)) + { + if(sVoltorbFlipState->cursorWriteValue < CARD_VALUE_COUNT) + { + PlaySE(SE_SELECT); + ++sVoltorbFlipState->cursorWriteValue; + DrawNoteTiles(); + } + } + + if (JOY_NEW(A_BUTTON)) + { + u8 cardIdx = COORDS_TO_CARD(sVoltorbFlipState->cursorX, sVoltorbFlipState->cursorY); + + if(!sVoltorbFlipState->cardStates[cardIdx].isShown) + { + switch (sVoltorbFlipState->cursorWriteValue) + { + case 0: + if(sVoltorbFlipState->cardStates[cardIdx].value == CARD_VALUE_VOLTORB) + { + PlaySE(SE_M_EXPLOSION); + sVflip->winnings = 0; + sVflip->curWinnings = sVflip->prevWinnings + sVflip->winnings; + SetCreditDigits(sVflip->curWinnings); + } + else + { + PlaySE(SE_PIN); + if (sVoltorbFlipState->cardStates[cardIdx].value == CARD_VALUE_1) + { + if (sVflip->winnings == 0) + { + sVflip->winnings = 1; + sVflip->curWinnings = sVflip->prevWinnings + sVflip->winnings; + SetCreditDigits(sVflip->curWinnings); + } + else + { + + } + } + else if (sVoltorbFlipState->cardStates[cardIdx].value == CARD_VALUE_2) + { + if (sVflip->winnings == 0) + { + sVflip->winnings = 2; + sVflip->curWinnings = sVflip->prevWinnings + sVflip->winnings; + SetCreditDigits(sVflip->curWinnings); + } + else + { + sVflip->winnings = sVflip->winnings * 2; + sVflip->curWinnings = sVflip->prevWinnings + sVflip->winnings; + if (sVflip->curWinnings >= 9999) + { + sVflip->curWinnings = 9999; + } + SetCreditDigits(sVflip->curWinnings); + } + } + else + { + if (sVflip->winnings == 0) + { + sVflip->winnings = 3; + sVflip->curWinnings = sVflip->prevWinnings + sVflip->winnings; + SetCreditDigits(sVflip->curWinnings); + } + else + { + sVflip->winnings = sVflip->winnings * 3; + sVflip->curWinnings = sVflip->prevWinnings + sVflip->winnings; + if (sVflip->curWinnings >= 9999) + { + sVflip->curWinnings = 9999; + } + SetCreditDigits(sVflip->curWinnings); + } + } + } + + sVoltorbFlipState->cardStates[cardIdx].isShown = TRUE; + break; + + case 1 + CARD_VALUE_1: + PlaySE(SE_BALL); + sVoltorbFlipState->cardStates[cardIdx].note1 = !sVoltorbFlipState->cardStates[cardIdx].note1; + break; + + case 1 + CARD_VALUE_2: + PlaySE(SE_BALL); + sVoltorbFlipState->cardStates[cardIdx].note2 = !sVoltorbFlipState->cardStates[cardIdx].note2; + break; + + case 1 + CARD_VALUE_3: + PlaySE(SE_BALL); + sVoltorbFlipState->cardStates[cardIdx].note3 = !sVoltorbFlipState->cardStates[cardIdx].note3; + break; + + case 1 + CARD_VALUE_VOLTORB: + PlaySE(SE_BALL); + sVoltorbFlipState->cardStates[cardIdx].noteVoltorb = !sVoltorbFlipState->cardStates[cardIdx].noteVoltorb; + break; + } + + gSprites[sVoltorbFlipState->pointerSprite].y2 = 12; + DrawCardTiles(sVoltorbFlipState->cursorX, sVoltorbFlipState->cursorY); + } + } + + UpdateVoltorbFlipSprites(); + //AnimateSprites; +} + +static void Task_VoltorbFlipVictory(u8 taskId) +{ + if(gTasks[taskId].data[0] == 0) + { + PlayFanfare(MUS_OBTAIN_ITEM); + ++gTasks[taskId].data[0]; + } + else + { + if(WaitFanfare(FALSE)) + { + VarSet(GAME_CORNER_VAR_WINNINGS, sVflip->curWinnings); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_VoltorbFlipFadeOut; + } + } +} + +static void Task_VoltorbFlipLoss(u8 taskId) +{ + if(!IsSEPlaying()) + { + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_VoltorbFlipFadeOut; + } +} + +static void Task_VoltorbFlipFadeOut(u8 taskId) +{ + if (!gPaletteFade.active) + { + FREE_AND_SET_NULL(sVflip); + Free(sVoltorbFlipTilemapPtr); + Free(sVoltorbFlipState); + sVoltorbFlipTilemapPtr = NULL; + sVoltorbFlipState = NULL; + FreeAllWindowBuffers(); + DestroyTask(taskId); + SetMainCallback2(CB2_ReturnToFieldContinueScript); + } +} + +static void ResetVoltorbFlipCards(u8 level) +{ + u8 i, idx; + u8 variant = Random() % MAX_VOLTORB_LEVEL_VARIANTS; + AGB_ASSERT(sVoltorbFlipState != NULL); + + if(level != 0) + level = min(level, MAX_VOLTORB_FLIP_LEVEL) - 1; + + // Reset + for(i = 0; i < TOTAL_CARD_COUNT; ++i) + { + memset(&sVoltorbFlipState->cardStates[i], 0, sizeof(struct VoltorbCardState)); + sVoltorbFlipState->cardStates[i].value = CARD_VALUE_1; + } + + // Place voltorbs + for(i = 0; i < sVoltorbSpawnCounts[level][variant].voltorbCount;) + { + idx = Random() % TOTAL_CARD_COUNT; + if(sVoltorbFlipState->cardStates[idx].value == CARD_VALUE_1) + { + sVoltorbFlipState->cardStates[idx].value = CARD_VALUE_VOLTORB; + ++i; + } + } + + // x2 + for(i = 0; i < sVoltorbSpawnCounts[level][variant].x2Count;) + { + idx = Random() % TOTAL_CARD_COUNT; + if(sVoltorbFlipState->cardStates[idx].value == CARD_VALUE_1) + { + sVoltorbFlipState->cardStates[idx].value = CARD_VALUE_2; + ++i; + } + } + + // x3 + for(i = 0; i < sVoltorbSpawnCounts[level][variant].x3Count;) + { + idx = Random() % TOTAL_CARD_COUNT; + if(sVoltorbFlipState->cardStates[idx].value == CARD_VALUE_1) + { + sVoltorbFlipState->cardStates[idx].value = CARD_VALUE_3; + ++i; + } + } + + DisplayVoltorbFlipText(); + DrawBoardCardTiles(); + DrawNoteTiles(); +} + +static u8 CalculateBoardState() +{ + u8 i; + bool8 inProgress = FALSE; + + for(i = 0; i < TOTAL_CARD_COUNT; ++i) + { + if(sVoltorbFlipState->cardStates[i].isShown) + { + if(sVoltorbFlipState->cardStates[i].value == CARD_VALUE_VOLTORB) + return GAME_STATE_LOSE; + } + else + { + if(sVoltorbFlipState->cardStates[i].value == CARD_VALUE_2 || sVoltorbFlipState->cardStates[i].value == CARD_VALUE_3) + inProgress = TRUE; + } + } + + return inProgress ? GAME_STATE_IN_PROGRESS : GAME_STATE_WIN; +} + +static void ShowAllCards() +{ + u8 x, y; + + for(x = 0; x < BOARD_WIDTH; ++x) + for(y = 0; y < BOARD_HEIGHT; ++y) + { + sVoltorbFlipState->cardStates[COORDS_TO_CARD(x, y)].isShown = TRUE; + DrawCardTiles(x, y); + } +} + +static const u8 sTextWhite[] = _("{COLOR WHITE}{SHADOW DARK_GRAY}"); +static const u8 sTextGrey[] = _("{COLOR LIGHT_GRAY}{SHADOW DARK_GRAY}"); + +static void PrintRowInfo(u8 window, u8 totalValue, u8 totalVoltorbs) +{ + u8 text[8]; + FillWindowPixelBuffer(window, PIXEL_FILL(0)); + + // Top number + ConvertUIntToDecimalStringN(gStringVar4, totalValue, STR_CONV_MODE_RIGHT_ALIGN, 2); + StringCopy(text, sTextWhite); + StringAppend(text, gStringVar4); + PrintVoltorbFlipText(window, FONT_SMALL_NARROW, text, 10, 0); + + // Bottom number + ConvertUIntToDecimalStringN(gStringVar4, totalVoltorbs, STR_CONV_MODE_RIGHT_ALIGN, 1); + StringCopy(text, sTextGrey); + StringAppend(text, gStringVar4); + PrintVoltorbFlipText(window, FONT_SMALL_NARROW, text, 15, 8); + + PutWindowTilemap(window); + CopyWindowToVram(window, COPYWIN_FULL); +} + +static u8 CountRow(u8 y, bool8 countValue) +{ + u8 x; + u8 total = 0; + for(x = 0; x < BOARD_WIDTH; ++x) + { + if(countValue) + { + if(sVoltorbFlipState->cardStates[COORDS_TO_CARD(x, y)].value != CARD_VALUE_VOLTORB) + { + total += sVoltorbFlipState->cardStates[COORDS_TO_CARD(x, y)].value + 1; + } + } + else + { + if(sVoltorbFlipState->cardStates[COORDS_TO_CARD(x, y)].value == CARD_VALUE_VOLTORB) + { + total += 1; + } + } + } + + return total; +} + +static u8 CountColumn(u8 x, bool8 countValue) +{ + u8 y; + u8 total = 0; + for(y = 0; y < BOARD_HEIGHT; ++y) + { + if(countValue) + { + if(sVoltorbFlipState->cardStates[COORDS_TO_CARD(x, y)].value != CARD_VALUE_VOLTORB) + { + total += sVoltorbFlipState->cardStates[COORDS_TO_CARD(x, y)].value + 1; + } + } + else + { + if(sVoltorbFlipState->cardStates[COORDS_TO_CARD(x, y)].value == CARD_VALUE_VOLTORB) + { + total += 1; + } + } + } + + return total; +} + +static void DisplayVoltorbFlipText(void) +{ + u8 i; + + for(i = 0; i < BOARD_HEIGHT; ++i) + { + PrintRowInfo( + WIN_INFO_RED_X + i, + CountRow(i, TRUE), + CountRow(i, FALSE) + ); + } + + for(i = 0; i < BOARD_WIDTH; ++i) + { + PrintRowInfo( + WIN_INFO_RED_Y + i, + CountColumn(i, TRUE), + CountColumn(i, FALSE) + ); + } +} + +static void DrawBoardCardTiles(void) +{ + u8 x, y; + for(x = 0; x < BOARD_WIDTH; ++x) + { + for(y = 0; y < BOARD_HEIGHT; ++y) + DrawCardTiles(x, y); + } +} + +static void InitVoltorbFlipBg(void) +{ + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sVoltorbFlipBgTemplates, ARRAY_COUNT(sVoltorbFlipBgTemplates)); + SetBgTilemapBuffer(1, sVoltorbFlipTilemapPtr); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); +} + +static void UpdateVoltorbFlipSprites() +{ + AGB_ASSERT(sVoltorbFlipState != NULL); + gSprites[sVoltorbFlipState->outlineSprite].x = 24 + 16 + 24 * sVoltorbFlipState->cursorX; + gSprites[sVoltorbFlipState->outlineSprite].y = 8 + 16 + 24 * sVoltorbFlipState->cursorY; + + gSprites[sVoltorbFlipState->pointerSprite].x = 24 + 12 + 24 * sVoltorbFlipState->cursorX; + gSprites[sVoltorbFlipState->pointerSprite].y = 8 + 0 + 24 * sVoltorbFlipState->cursorY; + + if(gSprites[sVoltorbFlipState->pointerSprite].y2 > 0) + { + if(gSprites[sVoltorbFlipState->pointerSprite].y2 < 2) + gSprites[sVoltorbFlipState->pointerSprite].y2 = 0; + else + gSprites[sVoltorbFlipState->pointerSprite].y2 -= 2; + } + + if(sVoltorbFlipState->cursorWriteValue == 0) + { + StartSpriteAnimIfDifferent(&gSprites[sVoltorbFlipState->outlineSprite], POINTER_ANIM_POINTER_OUTLINE); + StartSpriteAnimIfDifferent(&gSprites[sVoltorbFlipState->pointerSprite], POINTER_ANIM_POINTER); + } + else + { + StartSpriteAnimIfDifferent(&gSprites[sVoltorbFlipState->outlineSprite], POINTER_ANIM_PENCIL_OUTLINE); + StartSpriteAnimIfDifferent(&gSprites[sVoltorbFlipState->pointerSprite], POINTER_ANIM_PENCIL); + } +} + +static void InitVoltorbFlipSprites(void) +{ + AGB_ASSERT(sVoltorbFlipState != NULL); + + LoadSpriteSheet(&sVoltorbFlipSpriteSheet); + LoadSpritePalette(&sVoltorbFlipPalette); + + sVoltorbFlipState->outlineSprite = CreateSprite(&sPointerSprite, 0, 0, 1); + sVoltorbFlipState->pointerSprite = CreateSprite(&sPointerSprite, 24 + 12, 8 + 0, 0); + UpdateVoltorbFlipSprites(); +} + +static void InitVoltorbFlipWindow(void) +{ + InitWindows(sVoltorbFlipWinTemplates); + DeactivateAllTextPrinters(); + LoadPalette(gStandardMenuPalette, 0xF0, 0x20); + + FillWindowPixelBuffer(WIN_INFO_RED_X, PIXEL_FILL(0)); + PutWindowTilemap(WIN_INFO_RED_X); +} + +static void PrintVoltorbFlipText(u8 win, u8 font, u8 const* text, u8 x, u8 y) +{ + u8 color[3] = {0, 2, 3}; + + AddTextPrinterParameterized4(win, font, x, y, 0, 0, color, TEXT_SKIP_DRAW, text); +} + +//static void A() +//{ +// FillWindowPixelBuffer(WIN_TITLE_COUNTERS, PIXEL_FILL(0)); +// PutWindowTilemap(WIN_TITLE_COUNTERS); +// +// CopyWindowToVram(WIN_TITLE_COUNTERS, COPYWIN_FULL); +//} + +static void DrawCardTiles(u8 x, u8 y) +{ + u8 const xOffset = 3; + u8 const yOffset = 1; + struct VoltorbCardState* state = &sVoltorbFlipState->cardStates[COORDS_TO_CARD(x, y)]; + u8 i, gfx; + + AGB_ASSERT(sVoltorbFlipState != NULL); + + if(state->isShown) + gfx = CARD_GFX_SHOW_1 + state->value; + else + gfx = CARD_GFX_HIDDEN; + + for(i = 0; i < 9; ++i) + FillBgTilemapBufferRect_Palette0(1, sCardGfxTiles[gfx][i], xOffset + x * 3 + (i % 3), yOffset + y * 3 + (i / 3), 1, 1); + + if(!state->isShown) + { + if(state->noteVoltorb) + FillBgTilemapBufferRect_Palette0(1, 0x23, xOffset + x * 3 + 0, yOffset + y * 3 + 0, 1, 1); + + if(state->note1) + FillBgTilemapBufferRect_Palette0(1, 0x24, xOffset + x * 3 + 2, yOffset + y * 3 + 0, 1, 1); + + if(state->note2) + FillBgTilemapBufferRect_Palette0(1, 0x3A, xOffset + x * 3 + 0, yOffset + y * 3 + 2, 1, 1); + + if(state->note3) + FillBgTilemapBufferRect_Palette0(1, 0x3B, xOffset + x * 3 + 2, yOffset + y * 3 + 2, 1, 1); + } + + ScheduleBgCopyTilemapToVram(1); +} + + +static void DrawNoteTiles() +{ + AGB_ASSERT(sVoltorbFlipState != NULL); + + FillBgTilemapBufferRect_Palette0(1, + (sVoltorbFlipState->cursorWriteValue == 0) ? 0x38 : 0x39, + 22 + 0, 5, + 1, 1 + ); + + FillBgTilemapBufferRect_Palette0(1, + (sVoltorbFlipState->cursorWriteValue == 1 + CARD_VALUE_1) ? 0x37 : 0x39, + 22 + 1, 5, + 1, 1 + ); + + FillBgTilemapBufferRect_Palette0(1, + (sVoltorbFlipState->cursorWriteValue == 1 + CARD_VALUE_2) ? 0x37 : 0x39, + 22 + 2, 5, + 1, 1 + ); + + FillBgTilemapBufferRect_Palette0(1, + (sVoltorbFlipState->cursorWriteValue == 1 + CARD_VALUE_3) ? 0x37 : 0x39, + 22 + 3, 5, + 1, 1 + ); + + FillBgTilemapBufferRect_Palette0(1, + (sVoltorbFlipState->cursorWriteValue == 1 + CARD_VALUE_VOLTORB) ? 0x37 : 0x39, + 22 + 4, 5, + 1, 1 + ); + + ScheduleBgCopyTilemapToVram(1); +} \ No newline at end of file diff --git a/src/snake.c b/src/snake.c new file mode 100644 index 000000000000..284dcc0501e5 --- /dev/null +++ b/src/snake.c @@ -0,0 +1,2175 @@ +//#include "game_corner_blackjack.h" +#include "snake.h" +#include "global.h" +#include "malloc.h" +#include "battle.h" +#include "bg.h" +#include "coins.h" +#include "data.h" +#include "daycare.h" +#include "decompress.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "field_message_box.h" +#include "international_string_util.h" +#include "m4a.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "naming_screen.h" +#include "new_game.h" +#include "overworld.h" +#include "palette.h" +#include "palette_util.h" +#include "pokemon.h" +#include "pokedex.h" +#include "random.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "trade.h" +#include "trainer_pokemon_sprites.h" +#include "tv.h" +#include "window.h" +#include "constants/coins.h" +#include "constants/flags.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/vars.h" +#include "scanline_effect.h" +#include "pokemon_storage_system.h" +#include "string_util.h" +#include "field_specials.h" + +enum +{ + SNAKE_STATE_INIT, + SNAKE_ONIX_CRY, + SNAKE_START_TEXT, + SNAKE_STATE_MOVEMENT_LOOP, + SNAKE_STATE_PROCESS_INPUT, + SNAKE_STATE_SPRITE_UPDATE, + SNAKE_STATE_GAMEOVER_LOOP, + SNAKE_STATE_GAMEOVER, + SNAKE_STATE_START_EXIT, + SNAKE_STATE_EXIT, + SNAKE_EXIT, +}; + +enum { + SPR_CREDIT_DIG_1, + SPR_CREDIT_DIG_10, + SPR_CREDIT_DIG_100, + SPR_CREDIT_DIG_1000, +}; + +enum { + SPR_NUM_DIG_1, + SPR_NUM_DIG_10, +}; + +enum { + SPR_BODY_1, + SPR_BODY_2, + SPR_BODY_3, + SPR_BODY_4, + SPR_BODY_5, + SPR_BODY_6, + SPR_BODY_7, + SPR_BODY_8, + SPR_BODY_9, + SPR_BODY_10, + SPR_BODY_11, + SPR_BODY_12, + SPR_BODY_13, + SPR_BODY_14, + SPR_BODY_15, + SPR_BODY_16, + SPR_BODY_17, + SPR_BODY_18, + SPR_BODY_19, + SPR_BODY_20, + SPR_BODY_21, + SPR_BODY_22, + SPR_BODY_23, + SPR_BODY_24, + SPR_BODY_25, + SPR_BODY_26, + SPR_BODY_27, + SPR_BODY_28, + SPR_BODY_29, + SPR_BODY_30, + SPR_BODY_31, + SPR_BODY_32, + SPR_BODY_33, + SPR_BODY_34, + SPR_BODY_35, + SPR_BODY_36, + SPR_BODY_37, + SPR_BODY_38, + SPR_BODY_39, + SPR_BODY_40, +}; + +enum { + X_BODY_1, + X_BODY_2, + X_BODY_3, + X_BODY_4, + X_BODY_5, + X_BODY_6, + X_BODY_7, + X_BODY_8, + X_BODY_9, + X_BODY_10, + X_BODY_11, + X_BODY_12, + X_BODY_13, + X_BODY_14, + X_BODY_15, + X_BODY_16, + X_BODY_17, + X_BODY_18, + X_BODY_19, + X_BODY_20, + X_BODY_21, + X_BODY_22, + X_BODY_23, + X_BODY_24, + X_BODY_25, + X_BODY_26, + X_BODY_27, + X_BODY_28, + X_BODY_29, + X_BODY_30, + X_BODY_31, + X_BODY_32, + X_BODY_33, + X_BODY_34, + X_BODY_35, + X_BODY_36, + X_BODY_37, + X_BODY_38, + X_BODY_39, + X_BODY_40, +}; + +enum { + Y_BODY_1, + Y_BODY_2, + Y_BODY_3, + Y_BODY_4, + Y_BODY_5, + Y_BODY_6, + Y_BODY_7, + Y_BODY_8, + Y_BODY_9, + Y_BODY_10, + Y_BODY_11, + Y_BODY_12, + Y_BODY_13, + Y_BODY_14, + Y_BODY_15, + Y_BODY_16, + Y_BODY_17, + Y_BODY_18, + Y_BODY_19, + Y_BODY_20, + Y_BODY_21, + Y_BODY_22, + Y_BODY_23, + Y_BODY_24, + Y_BODY_25, + Y_BODY_26, + Y_BODY_27, + Y_BODY_28, + Y_BODY_29, + Y_BODY_30, + Y_BODY_31, + Y_BODY_32, + Y_BODY_33, + Y_BODY_34, + Y_BODY_35, + Y_BODY_36, + Y_BODY_37, + Y_BODY_38, + Y_BODY_39, + Y_BODY_40, +}; + +enum { + DIR_BODY_1, + DIR_BODY_2, + DIR_BODY_3, + DIR_BODY_4, + DIR_BODY_5, + DIR_BODY_6, + DIR_BODY_7, + DIR_BODY_8, + DIR_BODY_9, + DIR_BODY_10, + DIR_BODY_11, + DIR_BODY_12, + DIR_BODY_13, + DIR_BODY_14, + DIR_BODY_15, + DIR_BODY_16, + DIR_BODY_17, + DIR_BODY_18, + DIR_BODY_19, + DIR_BODY_20, + DIR_BODY_21, + DIR_BODY_22, + DIR_BODY_23, + DIR_BODY_24, + DIR_BODY_25, + DIR_BODY_26, + DIR_BODY_27, + DIR_BODY_28, + DIR_BODY_29, + DIR_BODY_30, + DIR_BODY_31, + DIR_BODY_32, + DIR_BODY_33, + DIR_BODY_34, + DIR_BODY_35, + DIR_BODY_36, + DIR_BODY_37, + DIR_BODY_38, + DIR_BODY_39, + DIR_BODY_40, +}; + +enum { + DIR_LAST_BODY_1, + DIR_LAST_BODY_2, + DIR_LAST_BODY_3, + DIR_LAST_BODY_4, + DIR_LAST_BODY_5, + DIR_LAST_BODY_6, + DIR_LAST_BODY_7, + DIR_LAST_BODY_8, + DIR_LAST_BODY_9, + DIR_LAST_BODY_10, + DIR_LAST_BODY_11, + DIR_LAST_BODY_12, + DIR_LAST_BODY_13, + DIR_LAST_BODY_14, + DIR_LAST_BODY_15, + DIR_LAST_BODY_16, + DIR_LAST_BODY_17, + DIR_LAST_BODY_18, + DIR_LAST_BODY_19, + DIR_LAST_BODY_20, + DIR_LAST_BODY_21, + DIR_LAST_BODY_22, + DIR_LAST_BODY_23, + DIR_LAST_BODY_24, + DIR_LAST_BODY_25, + DIR_LAST_BODY_26, + DIR_LAST_BODY_27, + DIR_LAST_BODY_28, + DIR_LAST_BODY_29, + DIR_LAST_BODY_30, + DIR_LAST_BODY_31, + DIR_LAST_BODY_32, + DIR_LAST_BODY_33, + DIR_LAST_BODY_34, + DIR_LAST_BODY_35, + DIR_LAST_BODY_36, + DIR_LAST_BODY_37, + DIR_LAST_BODY_38, + DIR_LAST_BODY_39, + DIR_LAST_BODY_40, +}; + +#define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 +#define SPR_NUM_DIGITS SPR_NUM_DIG_1 +#define SPR_BODY SPR_BODY_1 +#define X_BODY X_BODY_1 +#define Y_BODY Y_BODY_1 +#define DIR_BODY DIR_BODY_1 +#define DIR_LAST_BODY DIR_LAST_BODY_1 + +#define MAX_SPRITES_CREDIT 4 +#define MAX_SPRITES_NUM 2 +#define MAX_SPRITES_BODY 40 +#define MAX_X_BODY 40 +#define MAX_Y_BODY 40 +#define MAX_DIR_BODY 40 +#define MAX_DIR_LAST_BODY 40 + +#define DOWN 0 +#define UP 1 +#define RIGHT 2 +#define LEFT 3 + +struct Snake { + u8 state; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 NumberSpriteIds[MAX_SPRITES_NUM]; + u8 ToggleButtons; + u8 OnixSpriteId; + u8 OnixTileX; + u8 OnixTileY; + u8 BodySprite1Id; + u8 Body1x; + u8 Body1y; + u8 Body1Direction; + u8 Body1LastDirection; + u8 BodySprite2Id; + u8 Body2x; + u8 Body2y; + u8 Body2Direction; + u8 Body2LastDirection; + u8 BodySpriteIds[MAX_SPRITES_BODY]; + u8 BodySpritesX[MAX_X_BODY]; + u8 BodySpritesY[MAX_Y_BODY]; + u8 BodySpritesDirection[MAX_DIR_BODY]; + u8 BodySpritesLastDirection[MAX_DIR_LAST_BODY]; + u8 BodyCount; + u8 Direction; // 0 = Down, 1 = Up, 2 = Right, 3 = Left + u8 LastDirection; + u32 FrameCount; + u32 delay; + u8 CanMove; + u8 GameOver; + u8 Loop; + u8 BerrySpriteId; + u8 BerryX; + u8 BerryY; + u8 StartSpriteId; + u8 GameOverSpriteId; + u32 timer; + u8 MenuSpriteId; + u32 Total; +}; + +static EWRAM_DATA struct Snake *sSnake = NULL; +static EWRAM_DATA u8 sTextWindowId = 0; + +static void FadeToSnakeScreen(u8 taskId); +static void InitSnakeScreen(void); +static void DerbyVBlankCallback(void); + +static const u8 sTestText[] = _("TEST"); + +// Backgound + +static const u32 Snake_BG_Img[] = INCBIN_U32("graphics/snake/snake-bg.4bpp.lz"); +static const u8 Snake_Tilemap[] = INCBIN_U8("graphics/snake/snake-bg.bin.lz"); +static const u16 Snake_BG_Pal[] = INCBIN_U16("graphics/snake/bg.gbapal"); + +// Onix + +static const u32 OnixGFX[] = INCBIN_U32("graphics/snake/onix-head.4bpp.lz"); + +static const u32 BodyGFX[] = INCBIN_U32("graphics/snake/onix-body.4bpp.lz"); +static const u16 OnixPAL[] = INCBIN_U16("graphics/snake/onix.gbapal"); + +static const u32 Body2GFX[] = INCBIN_U32("graphics/snake/onix-body-2.4bpp.lz"); +static const u32 Body3GFX[] = INCBIN_U32("graphics/snake/onix-body-3.4bpp.lz"); +static const u32 Body4GFX[] = INCBIN_U32("graphics/snake/onix-body-4.4bpp.lz"); + +// Berries + +static const u32 Berry1GFX[] = INCBIN_U32("graphics/snake/berry1.4bpp.lz"); +static const u32 Berry2GFX[] = INCBIN_U32("graphics/snake/berry3.4bpp.lz"); +static const u32 Berry3GFX[] = INCBIN_U32("graphics/snake/berry3.4bpp.lz"); +static const u16 BerryPAL[] = INCBIN_U16("graphics/snake/berry.gbapal"); + +// Text + +static const u32 StartGFX[] = INCBIN_U32("graphics/snake/start.4bpp.lz"); +static const u32 GameOverGFX[] = INCBIN_U32("graphics/snake/gameover.4bpp.lz"); +static const u16 TextPAL[] = INCBIN_U16("graphics/snake/text.gbapal"); + +// Menu + +static const u32 MenuGFX[] = INCBIN_U32("graphics/snake/menu.4bpp.lz"); +static const u16 MenuPAL[] = INCBIN_U16("graphics/snake/menu.gbapal"); + +// Numbers + +static const u32 Digits_Gfx[] = INCBIN_U32("graphics/snake/digits.4bpp.lz"); +static const u16 Digits_Pal[] = INCBIN_U16("graphics/snake/digits.gbapal"); + + +#define SNAKE_BG_BASE 1 +#define SNAKE_MENUS 0 + +static const struct BgTemplate sSnakeBGtemplates[] = { + { + .bg = SNAKE_BG_BASE, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = SNAKE_MENUS, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + } +}; + +static const struct WindowTemplate sSnakeWinTemplates[] = { + { + .bg = SNAKE_MENUS, + .tilemapLeft = 6, + .tilemapTop = 5, + .width = 9, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x194, + }, + DUMMY_WIN_TEMPLATE, +}; + + + +#define GFX_ONIX 1 +#define GFX_BODY_1 2 +#define GFX_BERRY_1 3 +#define GFX_BERRY_2 4 +#define GFX_BERRY_3 5 +#define GFX_BODY_2 6 +#define GFX_BODY_3 7 +#define GFX_BODY_4 8 +#define GFX_START 9 +#define GFX_GAMEOVER 10 +#define GFX_MENU 11 +#define GFX_CREDIT_DIGITS 12 + +#define PAL_ONIX 1 +#define PAL_BERRY 2 +#define PAL_TEXT 3 +#define PAL_MENU 4 +#define PAL_DIGITS 5 + +static const struct SpritePalette sSpritePalettes[] = +{ + { .data = OnixPAL, .tag = PAL_ONIX }, + { .data = BerryPAL, .tag = PAL_BERRY }, + { .data = TextPAL, .tag = PAL_TEXT }, + { .data = MenuPAL, .tag = PAL_MENU }, + { .data = Digits_Pal, .tag = PAL_DIGITS }, + {} +}; + +static const struct CompressedSpriteSheet sSpriteSheets_CreditsInterface[] = +{ + { + .data = Digits_Gfx, + .size = 0x280, + .tag = GFX_CREDIT_DIGITS + }, + {} +}; + +static const struct OamData sOam_CreditDigit = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2, +}; + +static const struct SpriteTemplate sSpriteTemplate_CreditDigit = +{ + .tileTag = GFX_CREDIT_DIGITS, + .paletteTag = PAL_DIGITS, + .oam = &sOam_CreditDigit, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Menu = +{ + .data = MenuGFX, + .size = 0x400, + .tag = GFX_MENU, +}; + +static const struct OamData sOamData_Menu = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Menu = +{ + .tileTag = GFX_MENU, + .paletteTag = PAL_MENU, + .oam = &sOamData_Menu, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Start = +{ + .data = StartGFX, + .size = 0x800, + .tag = GFX_START, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_GameOver = +{ + .data = GameOverGFX, + .size = 0x800, + .tag = GFX_GAMEOVER, +}; + +static const struct OamData sOamData_Text = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sTitleAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(32, 10), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sTitleAnimCmds[] = { + sTitleAnimCmd_0, // Looping animation +}; + +static const struct SpriteTemplate sSpriteTemplate_Start = +{ + .tileTag = GFX_START, + .paletteTag = PAL_TEXT, + .oam = &sOamData_Text, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_GameOver = +{ + .tileTag = GFX_GAMEOVER, + .paletteTag = PAL_TEXT, + .oam = &sOamData_Text, + .anims = sTitleAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Berry_1 = +{ + .data = Berry1GFX, + .size = 0x100, + .tag = GFX_BERRY_1, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Berry_2 = +{ + .data = Berry2GFX, + .size = 0x100, + .tag = GFX_BERRY_2, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Berry_3 = +{ + .data = Berry3GFX, + .size = 0x100, + .tag = GFX_BERRY_3, +}; + +static const struct OamData sOamData_Berry = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Berry_1 = +{ + .tileTag = GFX_BERRY_1, + .paletteTag = PAL_BERRY, + .oam = &sOamData_Berry, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Berry_2 = +{ + .tileTag = GFX_BERRY_2, + .paletteTag = PAL_BERRY, + .oam = &sOamData_Berry, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Berry_3 = +{ + .tileTag = GFX_BERRY_3, + .paletteTag = PAL_BERRY, + .oam = &sOamData_Berry, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Onix = +{ + .data = OnixGFX, + .size = 0x800, + .tag = GFX_ONIX, +}; + +static const struct OamData sOamData_Onix = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 0, +}; + +static const union AnimCmd sOnixAnimCmd_0[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(8, 15), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd sOnixAnimCmd_1[] = +{ + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(24, 15), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd sOnixAnimCmd_2[] = +{ + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(40, 15), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd sOnixAnimCmd_3[] = +{ + ANIMCMD_FRAME(48, 15), + ANIMCMD_FRAME(56, 15), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sOnixAnimCmds[] = { + sOnixAnimCmd_0, // Down + sOnixAnimCmd_1, // Up + sOnixAnimCmd_2, // Right + sOnixAnimCmd_3, // Left +}; + +static const struct SpriteTemplate sSpriteTemplate_Onix = +{ + .tileTag = GFX_ONIX, + .paletteTag = PAL_ONIX, + .oam = &sOamData_Onix, + .anims = sOnixAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Onix_Body = +{ + .data = BodyGFX, + .size = 0x200, + .tag = GFX_BODY_1, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Onix_Body_2 = +{ + .data = Body2GFX, + .size = 0x200, + .tag = GFX_BODY_2, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Onix_Body_3 = +{ + .data = Body3GFX, + .size = 0x200, + .tag = GFX_BODY_3, +}; + +static const struct CompressedSpriteSheet sSpriteSheet_Onix_Body_4 = +{ + .data = Body4GFX, + .size = 0x200, + .tag = GFX_BODY_4, +}; + +static const union AnimCmd sOnixAnimCmd2_0[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(8, 15), + ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) +}; + +static const union AnimCmd *const sOnixBAnimCmds[] = { + sOnixAnimCmd2_0, +}; + +static const struct SpriteTemplate sSpriteTemplate_Onix_Body = +{ + .tileTag = GFX_BODY_1, + .paletteTag = PAL_ONIX, + .oam = &sOamData_Onix, + .anims = sOnixBAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Onix_Body_4 = +{ + .tileTag = GFX_BODY_4, + .paletteTag = PAL_ONIX, + .oam = &sOamData_Onix, + .anims = sOnixBAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Onix_Body_2 = +{ + .tileTag = GFX_BODY_2, + .paletteTag = PAL_ONIX, + .oam = &sOamData_Onix, + .anims = sOnixBAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Onix_Body_3 = +{ + .tileTag = GFX_BODY_3, + .paletteTag = PAL_ONIX, + .oam = &sOamData_Onix, + .anims = sOnixBAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +typedef struct { + int TileID; + s16 xReal; + s16 yReal; + u8 y; + u8 x; +} SnakeTiles; + +#define MAX_X 8 +#define MAX_Y 7 +#define MAX_TILES 72 + +static const SnakeTiles SnakeTilesArray[] = { + + {0, 56, 16, 0, 0}, // Row 1 + {1, 72, 16, 0, 1}, + {2, 88, 16, 0, 2}, + {3, 104, 16, 0, 3}, + {4, 120, 16, 0, 4}, + {5, 136, 16, 0, 5}, + {6, 152, 16, 0, 6}, + {7, 168, 16, 0, 7}, + {8, 184, 16, 0, 8}, + + {9, 56, 32, 1, 0}, // Row 2 + {10, 72, 32, 1, 1}, + {11, 88, 32, 1, 2}, + {12, 104, 32, 1, 3}, + {13, 120, 32, 1, 4}, + {14, 136, 32, 1, 5}, + {15, 152, 32, 1, 6}, + {16, 168, 32, 1, 7}, + {17, 184, 32, 1, 8}, + + {18, 56, 48, 2, 0}, // Row 3 + {19, 72, 48, 2, 1}, + {20, 88, 48, 2, 2}, + {21, 104, 48, 2, 3}, + {22, 120, 48, 2, 4}, + {23, 136, 48, 2, 5}, + {24, 152, 48, 2, 6}, + {25, 168, 48, 2, 7}, + {26, 184, 48, 2, 8}, + + {27, 56, 64, 3, 0}, // Row 4 + {28, 72, 64, 3, 1}, + {29, 88, 64, 3, 2}, + {30, 104, 64, 3, 3}, + {31, 120, 64, 3, 4}, + {32, 136, 64, 3, 5}, + {33, 152, 64, 3, 6}, + {34, 168, 64, 3, 7}, + {35, 184, 64, 3, 8}, + + {36, 56, 80, 4, 0}, // Row 5 + {37, 72, 80, 4, 1}, + {38, 88, 80, 4, 2}, + {39, 104, 80, 4, 3}, + {40, 120, 80, 4, 4}, + {41, 136, 80, 4, 5}, + {42, 152, 80, 4, 6}, + {43, 168, 80, 4, 7}, + {44, 184, 80, 4, 8}, + + {45, 56, 96, 5, 0}, // Row 6 + {46, 72, 96, 5, 1}, + {47, 88, 96, 5, 2}, + {48, 104, 96, 5, 3}, + {49, 120, 96, 5, 4}, + {50, 136, 96, 5, 5}, + {51, 152, 96, 5, 6}, + {52, 168, 96, 5, 7}, + {53, 184, 96, 5, 8}, + + {54, 56, 112, 6, 0}, // Row 7 + {55, 72, 112, 6, 1}, + {56, 88, 112, 6, 2}, + {57, 104, 112, 6, 3}, + {58, 120, 112, 6, 4}, + {59, 136, 112, 6, 5}, + {60, 152, 112, 6, 6}, + {61, 168, 112, 6, 7}, + {62, 184, 112, 6, 8}, + + {63, 56, 128, 7, 0}, // Row 8 + {64, 72, 128, 7, 1}, + {65, 88, 128, 7, 2}, + {66, 104, 128, 7, 3}, + {67, 120, 128, 7, 4}, + {68, 136, 128, 7, 5}, + {69, 152, 128, 7, 6}, + {70, 168, 128, 7, 7}, + {71, 184, 128, 7, 8}, + +}; + +void StartSnake(void) +{ + u8 taskId = 0; + sSnake = AllocZeroed(sizeof(struct Snake)); + taskId = CreateTask(FadeToSnakeScreen, 0); +} + +static void FadeToSnakeScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) + { + SetMainCallback2(InitSnakeScreen); + DestroyTask(taskId); + } + break; + } +} + +static void SnakeVBlankCallback(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void SnakeMainCallback(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +static void HandleInput(void) +{ + if (sSnake->ToggleButtons == 1) + { + if (JOY_NEW(A_BUTTON)) + { + + } + else if (JOY_NEW(B_BUTTON)) + { + + } + } +} + +static void ExitSnake(void) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + FREE_AND_SET_NULL(sSnake); + } +} + +static void StartExitSnake(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sSnake->state = SNAKE_EXIT; +} + +static void CreateOnix(void) +{ + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheet_Onix); + + sSnake->OnixSpriteId = CreateSprite(&sSpriteTemplate_Onix, 120, 64, 0); // 5, 4 +} + +static void CreateBody(s16 x, s16 y) +{ + u8 Body; + struct SpriteSheet s; + + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[(sSnake->BodyCount - 3)] = CreateSprite(&sSpriteTemplate_Onix_Body, x, y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[(sSnake->BodyCount - 3)] = CreateSprite(&sSpriteTemplate_Onix_Body_2, x, y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[(sSnake->BodyCount - 3)] = CreateSprite(&sSpriteTemplate_Onix_Body_3, x, y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[(sSnake->BodyCount - 3)] = CreateSprite(&sSpriteTemplate_Onix_Body_4, x, y, sSnake->BodyCount); + } +} + +static void CreateBody1(void) +{ + s16 x = 120; + s16 y = 48; + u8 Body; + struct SpriteSheet s; + + Body = 3; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body, x, y, 1); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body_2, x, y, 1); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body_3, x, y, 1); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body_4, x, y, 1); + } +} + +static void CreateBody2(void) +{ + s16 x = 120; + s16 y = 32; + u8 Body; + struct SpriteSheet s; + + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body, x, y, 2); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_2, x, y, 2); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_3, x, y, 2); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_4, x, y, 2); + } +} + +#define MAX_FRAME_COUNT 8 +#define MAX_DELAY 1 + +static void HandleMovement(void) +{ + + u8 Count = sSnake->BodyCount - 3; + int j; + int i; + + if (sSnake->Direction == DOWN) + { + if (sSnake->OnixTileY < MAX_Y) + { + sSnake->CanMove = 0; + gSprites[sSnake->OnixSpriteId].y += 2; + } + else + { + sSnake->CanMove = 1; + } + } + else if (sSnake->Direction == UP) + { + if (sSnake->OnixTileY > 0) + { + sSnake->CanMove = 0; + gSprites[sSnake->OnixSpriteId].y -= 2; + } + else + { + sSnake->CanMove = 1; + } + } + else if (sSnake->Direction == LEFT) + { + if (sSnake->OnixTileX > 0) + { + sSnake->CanMove = 0; + gSprites[sSnake->OnixSpriteId].x -= 2; + } + else + { + sSnake->CanMove = 1; + } + } + else if (sSnake->Direction == RIGHT) + { + if (sSnake->OnixTileX < MAX_X) + { + sSnake->CanMove = 0; + gSprites[sSnake->OnixSpriteId].x += 2; + } + else + { + sSnake->CanMove = 1; + } + } + + if (sSnake->Body1Direction == DOWN) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite1Id].y += 2; + } + } + else if (sSnake->Body1Direction == UP) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite1Id].y -= 2; + } + } + else if (sSnake->Body1Direction == LEFT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite1Id].x -= 2; + } + } + else if (sSnake->Body1Direction == RIGHT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite1Id].x += 2; + } + } + + if (sSnake->Body2Direction == DOWN) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite2Id].y += 2; + } + } + else if (sSnake->Body2Direction == UP) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite2Id].y -= 2; + } + } + else if (sSnake->Body2Direction == LEFT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite2Id].x -= 2; + } + } + else if (sSnake->Body2Direction == RIGHT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite2Id].x += 2; + } + } + + for (i = Count, j = 0; i > 0; i--, j++) { + if (sSnake->BodySpritesDirection[j] == DOWN) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySpriteIds[j]].y += 2; + } + } + else if (sSnake->BodySpritesDirection[j] == UP) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySpriteIds[j]].y -= 2; + } + } + else if (sSnake->BodySpritesDirection[j] == LEFT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySpriteIds[j]].x -= 2; + } + } + else if (sSnake->BodySpritesDirection[j] == RIGHT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySpriteIds[j]].x += 2; + } + } + } + +} + +static void HandleMovementMinus(u8 num) +{ + + u8 Count = sSnake->BodyCount - 3; + int j; + int i; + + if (sSnake->Direction == DOWN) + { + gSprites[sSnake->OnixSpriteId].y += (2 * num); + } + else if (sSnake->Direction == UP) + { + gSprites[sSnake->OnixSpriteId].y -= (2 * num); + } + else if (sSnake->Direction == LEFT) + { + gSprites[sSnake->OnixSpriteId].x -= (2 * num); + } + else if (sSnake->Direction == RIGHT) + { + gSprites[sSnake->OnixSpriteId].x += (2 * num); + } + + if (sSnake->Body1Direction == DOWN) + { + gSprites[sSnake->BodySprite1Id].y += (2 * num); + } + else if (sSnake->Body1Direction == UP) + { + gSprites[sSnake->BodySprite1Id].y -= (2 * num); + } + else if (sSnake->Body1Direction == LEFT) + { + gSprites[sSnake->BodySprite1Id].x -= (2 * num); + } + else if (sSnake->Body1Direction == RIGHT) + { + gSprites[sSnake->BodySprite1Id].x += (2 * num); + } + + if (sSnake->Body2Direction == DOWN) + { + gSprites[sSnake->BodySprite2Id].y += (2 * num); + } + else if (sSnake->Body2Direction == UP) + { + gSprites[sSnake->BodySprite2Id].y -= (2 * num); + } + else if (sSnake->Body2Direction == LEFT) + { + gSprites[sSnake->BodySprite2Id].x -= (2 * num); + } + else if (sSnake->Body2Direction == RIGHT) + { + gSprites[sSnake->BodySprite2Id].x += (2 * num); + } + + for (i = Count, j = 0; i > 0; i--, j++) { + if (sSnake->BodySpritesDirection[j] == DOWN) + { + gSprites[sSnake->BodySpriteIds[j]].y += (2 * num); + } + else if (sSnake->BodySpritesDirection[j] == UP) + { + gSprites[sSnake->BodySpriteIds[j]].y -= (2 * num); + } + else if (sSnake->BodySpritesDirection[j] == LEFT) + { + gSprites[sSnake->BodySpriteIds[j]].x -= (2 * num); + } + else if (sSnake->BodySpritesDirection[j] == RIGHT) + { + gSprites[sSnake->BodySpriteIds[j]].x += (2 * num); + } + } + +} + +static void UpdateLocations(void) +{ + u8 Count = sSnake->BodyCount - 3; + int i; + int j; + int k; + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].xReal == gSprites[sSnake->OnixSpriteId].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->OnixSpriteId].y)) { + sSnake->OnixTileX = SnakeTilesArray[i].x; + sSnake->OnixTileY = SnakeTilesArray[i].y; + } + } + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySprite1Id].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySprite1Id].y)) { + sSnake->Body1x = SnakeTilesArray[i].x; + sSnake->Body1y = SnakeTilesArray[i].y; + } + } + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySprite2Id].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySprite2Id].y)) { + sSnake->Body2x = SnakeTilesArray[i].x; + sSnake->Body2y = SnakeTilesArray[i].y; + } + } + + for (k = Count, j = 0; k >= 0; k--, j++) { + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySpriteIds[j]].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySpriteIds[j]].y)) { + sSnake->BodySpritesX[j] = SnakeTilesArray[i].x; + sSnake->BodySpritesY[j] = SnakeTilesArray[i].y; + } + } + } +} + +static void UpdateDirections(void) +{ + u8 Count = sSnake->BodyCount - 3; + int j; + + for (j = Count; j >= 0; j--) + { + if (j > 0) + { + sSnake->BodySpritesDirection[j] = sSnake->BodySpritesLastDirection[j - 1]; + } + else // j == 0, right next to Body2 + { + sSnake->BodySpritesDirection[0] = sSnake->Body2LastDirection; + } + } + + sSnake->Body2Direction = sSnake->Body1LastDirection; + sSnake->Body1Direction = sSnake->LastDirection; +} + +static int CheckBoundaries(void) +{ + u8 Count = sSnake->BodyCount - 3; + int j; + int i; + + if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == MAX_X)) + { + return 1; + } + else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == 0)) + { + return 1; + } + else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == 0)) + { + return 1; + } + else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == MAX_Y)) + { + return 1; + } + + if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->Body1x - 1) && (sSnake->OnixTileY == sSnake->Body1y)) + { + return 1; + } + else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->Body1x + 1) && (sSnake->OnixTileY == sSnake->Body1y)) + { + return 1; + } + else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->Body1y + 1) && (sSnake->OnixTileX == sSnake->Body1x)) + { + return 1; + } + else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->Body1y - 1) && (sSnake->OnixTileX == sSnake->Body1x)) + { + return 1; + } + + if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->Body2x - 1) && (sSnake->OnixTileY == sSnake->Body2y)) + { + return 1; + } + else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->Body2x + 1) && (sSnake->OnixTileY == sSnake->Body2y)) + { + return 1; + } + else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->Body2y + 1) && (sSnake->OnixTileX == sSnake->Body2x)) + { + return 1; + } + else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->Body2y - 1) && (sSnake->OnixTileX == sSnake->Body2x)) + { + return 1; + } + + for (i = Count, j = 0; i > 0; i--, j++) { + if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->BodySpritesX[j] - 1) && (sSnake->OnixTileY == sSnake->BodySpritesY[j])) + { + return 1; + } + else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->BodySpritesX[j] + 1) && (sSnake->OnixTileY == sSnake->BodySpritesY[j])) + { + return 1; + } + else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->BodySpritesY[j] + 1) && (sSnake->OnixTileX == sSnake->BodySpritesX[j])) + { + return 1; + } + else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->BodySpritesY[j] - 1) && (sSnake->OnixTileX == sSnake->BodySpritesX[j])) + { + return 1; + } + } + + return 0; +} + +#define TRUE 1 +#define FALSE 0 + +static void CreateBerry(void) +{ + s16 xf = 0; + s16 yf = 0; + u8 Berry; + u8 Count = sSnake->BodyCount - 3; + int i; + int j; + struct SpriteSheet s; + + while (1) + { + u8 x; + u8 y; + u8 occupied = FALSE; + + i = Random() % MAX_TILES; + x = SnakeTilesArray[i].x; + y = SnakeTilesArray[i].y; + + if ((x == 0 && y == 0) || + (x == 1 && y == 0) || + (x == 0 && y == 1)) + continue; + + if ((sSnake->OnixTileX == x && sSnake->OnixTileY == y) || + (sSnake->Body1x == x && sSnake->Body1y == y) || + (sSnake->Body2x == x && sSnake->Body2y == y)) + { + continue; + } + + for (j = 0; j < Count; j++) { + if (sSnake->BodySpritesX[j] == x && sSnake->BodySpritesY[j] == y) { + occupied = TRUE; + break; + } + } + + if (!occupied) { + sSnake->BerryX = x; + sSnake->BerryY = y; + break; + } + } + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].x == sSnake->BerryX) && (SnakeTilesArray[i].y == sSnake->BerryY)) { + xf = SnakeTilesArray[i].xReal; + yf = SnakeTilesArray[i].yReal; + } + } + + Berry = Random() % 3; + + if (Berry == 0) + { + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Berry_1); + + sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_1, xf, yf, 45); + } + else if (Berry == 1) + { + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Berry_2); + + sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_2, xf, yf, 45); + } + else + { + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Berry_3); + + sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_3, xf, yf, 45); + } +} + +static void SetCreditDigits(u16 num) +{ + u8 i; + u16 d = 1000; + + for (i = 0; i < 4; i++) + { + u8 digit = num / d; + + gSprites[sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; + + if (i == 0 && num < 1000) { + digit = 0; + } + + gSprites[sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.tileNum = + gSprites[sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void SetNumberDigits(u16 num) +{ + u8 i; + u16 d = 10; + + for (i = 0; i < 2; i++) + { + u8 digit = num / d; + + gSprites[sSnake->NumberSpriteIds[i + SPR_NUM_DIGITS]].invisible = FALSE; + + if (i == 0 && num < 10) { + digit = 0; + } + + gSprites[sSnake->NumberSpriteIds[i + SPR_NUM_DIGITS]].oam.tileNum = + gSprites[sSnake->NumberSpriteIds[i + SPR_NUM_DIGITS]].sheetTileStart + (digit * 2); + + gSprites[sSnake->NumberSpriteIds[i + SPR_NUM_DIGITS]].oam.priority = 0; + + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); +} + +static void CreateCreditSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); + } + + for (i = 0; i < 4; i++) + { + sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 5 + 21, 14, 0); + gSprites[sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } +} + +static void CreateNumberSprites(void) +{ + u8 i; + + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) + { + struct SpriteSheet s; + LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); + } + + for (i = 0; i < 2; i++) + { + sSnake->NumberSpriteIds[i + SPR_NUM_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 5 + 26, 30, 0); + gSprites[sSnake->CreditSpriteIds[i + SPR_NUM_DIGITS]].oam.priority = 0; + } +} + +static void CheckBerry(void) +{ + u8 NewDirection; + u8 Count = sSnake->BodyCount - 3; + u8 index = Count; + u8 Body; + s16 xf; + s16 yf; + int i; + struct SpriteSheet s; + + if ((sSnake->OnixTileX == sSnake->BerryX) && (sSnake->OnixTileY == sSnake->BerryY)) + { + PlaySE(SE_USE_ITEM); + if (GetCoins() < 9998) + { + SetCoins(GetCoins() + 2); + SetCreditDigits(GetCoins()); + } + else + { + SetCoins(9999); + SetCreditDigits(GetCoins()); + } + if (sSnake->Total < 99) + { + sSnake->Total++; + SetNumberDigits(sSnake->Total); + } + DestroySpriteAndFreeResources(&gSprites[sSnake->BerrySpriteId]); + LoadSpritePalettes(sSpritePalettes); + if ((Count < MAX_SPRITES_BODY) && (sSnake->BodyCount < MAX_SPRITES_BODY)) + { + if (Count == 0) // New Body + { + NewDirection = sSnake->Body2LastDirection; + + if (NewDirection == UP) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); + } + } + else if (NewDirection == DOWN) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); + } + } + else if (NewDirection == LEFT) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + } + else if (NewDirection == RIGHT) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + } + + NewDirection = sSnake->Body2LastDirection; + sSnake->BodySpritesDirection[index] = NewDirection; + if (sSnake->BodyCount < MAX_SPRITES_BODY) { + sSnake->BodyCount++; } + } + else if (Count > 0) + { + NewDirection = sSnake->BodySpritesLastDirection[index - 1]; + + if (NewDirection == UP) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); + } + } + else if (NewDirection == DOWN) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); + } + } + else if (NewDirection == LEFT) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + } + else if (NewDirection == RIGHT) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + } + + NewDirection = sSnake->BodySpritesLastDirection[index - 1]; + sSnake->BodySpritesDirection[index] = NewDirection; + if (sSnake->BodyCount < MAX_SPRITES_BODY) { + sSnake->BodyCount++; } + } + + + } + CreateBerry(); + } +} + +static void CreateStartMenu(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Start); + + sSnake->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 120, 120, 0); +} + +static void CreateGameOver(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); + + sSnake->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 120, 80, 0); +} + +static void CreateMenu(void) +{ + struct SpriteSheet s; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Menu); + + sSnake->MenuSpriteId = CreateSprite(&sSpriteTemplate_Menu, 40, 24, 1); +} + +static void SnakeMain(u8 taskId) +{ + u8 Count = sSnake->BodyCount - 3; + int j; + int i; + + switch (sSnake->state) + { + case SNAKE_STATE_INIT: + if (!gPaletteFade.active) + { + PlayCry_Normal(SPECIES_ONIX, 0); + sSnake->timer = 75; + sSnake->state = SNAKE_ONIX_CRY; + } + break; + case SNAKE_ONIX_CRY: + if (sSnake->timer == 0) + { + PlaySE(SE_POKENAV_ON); + CreateStartMenu(); + sSnake->timer = 50; + sSnake->state = SNAKE_START_TEXT; + } + else + { + sSnake->timer--; + } + break; + case SNAKE_START_TEXT: + if (sSnake->timer == 0) + { + DestroySpriteAndFreeResources(&gSprites[sSnake->StartSpriteId]); + PlayBGM(MUS_RG_VICTORY_ROAD); + sSnake->state = SNAKE_STATE_MOVEMENT_LOOP; + } + else + { + sSnake->timer--; + } + break; + case SNAKE_STATE_MOVEMENT_LOOP: + if (sSnake->delay == 0) + { + if (sSnake->FrameCount == 0) + { + sSnake->delay = 0; + sSnake->LastDirection = sSnake->Direction; + sSnake->Body1LastDirection = sSnake->Body1Direction; + sSnake->Body2LastDirection = sSnake->Body2Direction; + + for (i = Count, j = 0; i > 0; i--, j++) { + sSnake->BodySpritesLastDirection[j] = sSnake->BodySpritesDirection[j]; + } + sSnake->state = SNAKE_STATE_PROCESS_INPUT; + } + else + { + sSnake->GameOver = CheckBoundaries(); + if (sSnake->GameOver == 1) + { + PlayBGM(MUS_NONE); + sSnake->FrameCount = sSnake->Loop; + sSnake->delay = MAX_DELAY; + PlaySE(SE_WALL_HIT); + sSnake->state = SNAKE_STATE_GAMEOVER_LOOP; + } + HandleMovement(); + sSnake->FrameCount--; + sSnake->delay = MAX_DELAY; + } + } + else + { + sSnake->delay--; + } + break; + case SNAKE_STATE_PROCESS_INPUT: + if (sSnake->delay == 0) + { + UpdateLocations(); + if (((JOY_HELD(DPAD_UP)) || (JOY_NEW(DPAD_UP))) && sSnake->LastDirection != DOWN) + { + sSnake->Direction = UP; + } + else if (((JOY_HELD(DPAD_DOWN)) || (JOY_NEW(DPAD_DOWN))) && sSnake->LastDirection != UP) + { + sSnake->Direction = DOWN; + } + else if (((JOY_HELD(DPAD_LEFT)) || (JOY_NEW(DPAD_LEFT))) && sSnake->LastDirection != RIGHT) + { + sSnake->Direction = LEFT; + } + else if (((JOY_HELD(DPAD_RIGHT)) || (JOY_NEW(DPAD_RIGHT))) && sSnake->LastDirection != LEFT) + { + sSnake->Direction = RIGHT; + } + sSnake->state = SNAKE_STATE_SPRITE_UPDATE; + } + else + { + UpdateLocations(); + if (((JOY_HELD(DPAD_UP)) || (JOY_NEW(DPAD_UP))) && sSnake->LastDirection != DOWN) + { + sSnake->Direction = UP; + } + else if (((JOY_HELD(DPAD_DOWN)) || (JOY_NEW(DPAD_DOWN))) && sSnake->LastDirection != UP) + { + sSnake->Direction = DOWN; + } + else if (((JOY_HELD(DPAD_LEFT)) || (JOY_NEW(DPAD_LEFT))) && sSnake->LastDirection != RIGHT) + { + sSnake->Direction = LEFT; + } + else if (((JOY_HELD(DPAD_RIGHT)) || (JOY_NEW(DPAD_RIGHT))) && sSnake->LastDirection != LEFT) + { + sSnake->Direction = RIGHT; + } + sSnake->delay--; + } + break; + case SNAKE_STATE_SPRITE_UPDATE: + if (sSnake->Direction == DOWN) + { + gSprites[sSnake->OnixSpriteId].animNum = 0; + } + else if (sSnake->Direction == UP) + { + gSprites[sSnake->OnixSpriteId].animNum = 1; + } + else if (sSnake->Direction == RIGHT) + { + gSprites[sSnake->OnixSpriteId].animNum = 2; + } + else if (sSnake->Direction == LEFT) + { + gSprites[sSnake->OnixSpriteId].animNum = 3; + } + + UpdateDirections(); + CheckBerry(); + HandleMovement(); + sSnake->FrameCount = MAX_FRAME_COUNT - 1; + sSnake->delay = MAX_DELAY; + sSnake->state = SNAKE_STATE_MOVEMENT_LOOP; + break; + case SNAKE_STATE_GAMEOVER_LOOP: + if (sSnake->delay == 0) + { + if ((sSnake->FrameCount == 0) && (sSnake->Loop > 0)) + { + HandleMovementMinus((0 - 1)); + sSnake->Loop--; + sSnake->delay = MAX_DELAY; + } + else if (sSnake->Loop > 0) + { + HandleMovementMinus(1); + sSnake->FrameCount--; + sSnake->delay = MAX_DELAY; + } + else if (sSnake->Loop == 0) + { + sSnake->timer = 140; + PlayFanfare(MUS_TOO_BAD); + CreateGameOver(); + sSnake->state = SNAKE_STATE_GAMEOVER; + } + } + else + { + sSnake->delay--; + } + break; + case SNAKE_STATE_GAMEOVER: + if (sSnake->timer == 0) + { + SetCoins(GetCoins() - (sSnake->Total + sSnake->Total)); + VarSet(GAME_CORNER_VAR_WINNINGS, (sSnake->Total + sSnake->Total)); + StartExitSnake(); + } + else + { + sSnake->timer--; + } + break; + case SNAKE_EXIT: + ExitSnake(); + break; + } +} + +static void InitSnakeScreen(void) +{ + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + ResetTempTileDataBuffers(); + InitBgsFromTemplates(0, sSnakeBGtemplates, ARRAY_COUNT(sSnakeBGtemplates)); + SetBgTilemapBuffer(SNAKE_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(SNAKE_BG_BASE, Snake_BG_Img, 0x800, 0, 0); + CopyToBgTilemapBuffer(SNAKE_BG_BASE, Snake_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Snake_BG_Pal, 0, sizeof(Snake_BG_Pal)); + ResetSpriteData(); + FreeAllSpritePalettes(); + LoadSpritePalettes(sSpritePalettes); + CreateMenu(); + CreateCreditSprites(); + SetCreditDigits(GetCoins()); + CreateNumberSprites(); + SetNumberDigits(0); + CreateOnix(); + CreateBody1(); + CreateBody2(); + + sSnake->BodyCount = 3; + sSnake->OnixTileX = 3; + sSnake->OnixTileY = 4; + sSnake->Body1x = 3; + sSnake->Body1y = 3; + sSnake->Body2x = 3; + sSnake->Body2y = 2; + sSnake->delay = MAX_DELAY; + sSnake->FrameCount = MAX_FRAME_COUNT; + sSnake->Direction = DOWN; + sSnake->Body1Direction = DOWN; + sSnake->Body2Direction = DOWN; + sSnake->Loop = 2; + + CreateBerry(); + + CopyBgTilemapBufferToVram(SNAKE_BG_BASE); + //CopyBgTilemapBufferToVram(BLOCKSTACKER_TEXT_MENUS); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); + ShowBg(SNAKE_BG_BASE); + //ShowBg(BLOCKSTACKER_TEXT_MENUS); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(SnakeVBlankCallback); + SetMainCallback2(SnakeMainCallback); + CreateTask(SnakeMain, 1); +} \ No newline at end of file From 5041a46920a29489746e3e545471b2d73df654b0 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 29 Apr 2025 18:44:55 -0400 Subject: [PATCH 002/429] compiler fixes + Gacha refactor --- include/gba/types.h | 2 + src/game_corner_gacha.c | 2910 +++++++++++++++++---------------------- 2 files changed, 1233 insertions(+), 1679 deletions(-) diff --git a/include/gba/types.h b/include/gba/types.h index 65b65187f864..b9bb644caa98 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -115,6 +115,8 @@ struct OamData #define SPRITE_SIZE_16x32 ((ST_OAM_SIZE_2 << 2) | (ST_OAM_V_RECTANGLE)) #define SPRITE_SIZE_32x64 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_V_RECTANGLE)) +#define SPRITE_SIZE_64x16 ((ST_OAM_SIZE_3 << 2) | (ST_OAM_H_RECTANGLE)) + #define SPRITE_SIZE(dim) ((SPRITE_SIZE_##dim >> 2) & 0x03) #define SPRITE_SHAPE(dim) (SPRITE_SIZE_##dim & 0x03) diff --git a/src/game_corner_gacha.c b/src/game_corner_gacha.c index 6aea1372b2e9..db3f1d7992d3 100644 --- a/src/game_corner_gacha.c +++ b/src/game_corner_gacha.c @@ -1,4 +1,3 @@ -//#include "game_corner_blackjack.h" #include "game_corner_gacha.h" #include "global.h" #include "malloc.h" @@ -54,33 +53,33 @@ enum GACHA_STATE_PROCESS_COMPLETED_INPUT, GACHA_STATE_START_EXIT, GACHA_STATE_EXIT, - STATE_INIT_A, - STATE_TIMER_1, - STATE_TWIST, - STATE_TIMER_2, - STATE_INIT_GIVE, - STATE_SHAKE_1, - STATE_TIMER_3, - STATE_INIT_SHAKE_2, - STATE_SHAKE_2, - STATE_TIMER_4, - STATE_INIT_SHAKE_3, - STATE_TIMER_5, - STATE_GIVE, - STATE_FADE, - STATE_POKEBALL_INIT, - STATE_POKEBALL_PROCESS, - STATE_POKEBALL_ARRIVE, + STATE_INIT_A, + STATE_TIMER_1, + STATE_TWIST, + STATE_TIMER_2, + STATE_INIT_GIVE, + STATE_SHAKE_1, + STATE_TIMER_3, + STATE_INIT_SHAKE_2, + STATE_SHAKE_2, + STATE_TIMER_4, + STATE_INIT_SHAKE_3, + STATE_TIMER_5, + STATE_GIVE, + STATE_FADE, + STATE_POKEBALL_INIT, + STATE_POKEBALL_PROCESS, + STATE_POKEBALL_ARRIVE, STATE_FADE_POKEBALL_TO_NORMAL, STATE_POKEBALL_ARRIVE_WAIT, STATE_SHOW_NEW_MON, STATE_NEW_MON_MSG, - NEW_1, - NEW_2, - NEW_3, - NEW_4, - NEW_5, - NEW_6, + NEW_1, + NEW_2, + NEW_3, + NEW_4, + NEW_5, + NEW_6, }; enum { @@ -90,13 +89,37 @@ enum { SPR_CREDIT_DIG_1000, }; +enum { + GACHA_BASIC = 1, + GACHA_GREAT, + GACHA_ULTRA, + GACHA_MASTER, +}; + +enum { + RARITY_COMMON, + RARITY_UNCOMMON, + RARITY_RARE, + RARITY_ULTRA_RARE, +}; + enum { SPR_PLAYER_DIG_1, SPR_PLAYER_DIG_10, - SPR_PLAYER_DIG_100, - SPR_PLAYER_DIG_1000, + SPR_PLAYER_DIG_100, + SPR_PLAYER_DIG_1000, }; +#define RARITY_COMMON_ODDS 50 +#define RARITY_UNCOMMON_ODDS 30 +#define RARITY_RARE_ODDS 15 +#define RARITY_ULTRA_RARE_ODDS 5 + +#define GACHA_BASIC_MIN_WAGER 50 +#define GACHA_GREAT_MIN_WAGER 250 +#define GACHA_ULTRA_MIN_WAGER 1000 +#define GACHA_MASTER_MIN_WAGER 4500 + #define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 #define SPR_PLAYER_DIGITS SPR_PLAYER_DIG_1 @@ -104,130 +127,40 @@ enum { #define MAX_SPRITES_PLAYER 4 struct Gacha { - u8 state; - u8 GachaId; - u8 KnobSpriteId; - u8 DigitalTextSpriteId; - u8 LotteryJPNspriteId; - u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; - u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; - u8 CreditMenu1Id; - u8 CreditMenu2Id; - u8 PokemonOne; - u8 PokemonTwo; - u8 PokemonOneSpriteId; - u8 PokemonTwoSpriteId; - u8 PokemonThreeSpriteId; - u8 Odds; // Chance of new Pokemon - u8 ArrowsSpriteId; - u8 CTAspriteId; - u8 exitToggle; - u16 wager; - u8 cursorPosition; - u8 Trigger; - u8 Basic_CommonMax; // Total Number of Pokemon in each array - u8 Basic_UncommonMax; - u8 Basic_RareMax; - u8 Basic_UltraRareMax; - u8 Great_CommonMax; - u8 Great_UncommonMax; - u8 Great_RareMax; - u8 Great_UltraRareMax; - u8 Ultra_CommonMax; - u8 Ultra_UncommonMax; - u8 Ultra_RareMax; - u8 Ultra_UltraRareMax; - u8 Master_CommonMax; - u8 Master_UncommonMax; - u8 Master_RareMax; - u8 Master_UltraRareMax; - u8 Rarity; // 0 = Common, 1 = Uncommon, 2 = Rare, 3 = Ultra Rare - u8 Basic_Common_Owned; // How Many Pokemon in the array does the Player Own - u8 Basic_Uncommon_Owned; - u8 Basic_Rare_Owned; - u8 Basic_UltraRare_Owned; - u8 Great_Common_Owned; - u8 Great_Uncommon_Owned; - u8 Great_Rare_Owned; - u8 Great_UltraRare_Owned; - u8 Ultra_Common_Owned; - u8 Ultra_Uncommon_Owned; - u8 Ultra_Rare_Owned; - u8 Ultra_UltraRare_Owned; - u8 Master_Common_Owned; - u8 Master_Uncommon_Owned; - u8 Master_Rare_Owned; - u8 Master_UltraRare_Owned; - u16 Basic_Total_Owned; - u16 Great_Total_Owned; - u16 Ultra_Total_Owned; - u16 Master_Total_Owned; - u16 Basic_Total_Max; - u16 Great_Total_Max; - u16 Ultra_Total_Max; - u16 Master_Total_Max; - u8 commonChance; - u8 uncommonChance; - u8 rareChance; - u8 ultraRareChance; - u8 IsNewPokemon; - u16 Temp_Total; - u16 CalculatedSpecies; - u8 bouncingPokeballSpriteId; - u8 timer; - u8 monSpriteId; - u32 waitTimer; - u8 gachaState; - u8 Input; - u8 textColor[3]; - struct Pokemon GachaMon; -}; - -static EWRAM_DATA struct { - struct Pokemon tempMon; // Used as a temp variable when swapping Pokémon - u32 timer; - u32 monPersonalities[2]; - u8 filler_70[2]; - u8 playerFinishStatus; - u8 partnerFinishStatus; - u16 linkData[10]; - u8 linkTimeoutZero1; - u8 linkTimeoutZero2; - u16 linkTimeoutTimer; - u16 neverRead_8C; - u8 monSpriteIds[2]; - u8 connectionSpriteId1; // Multi-purpose sprite ids used during the transfer sequence - u8 connectionSpriteId2; - u8 cableEndSpriteId; - u8 scheduleLinkTransfer; - u16 state; - u8 filler_96[0x3C]; - u8 releasePokeballSpriteId; + u8 state; + u8 GachaId; + u8 KnobSpriteId; + u8 DigitalTextSpriteId; + u8 LotteryJPNspriteId; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; + u8 CreditMenu1Id; + u8 CreditMenu2Id; + u8 PokemonOneSpriteId; + u8 PokemonTwoSpriteId; + u8 PokemonThreeSpriteId; + u8 newMonOdds; + u8 ArrowsSpriteId; + u8 CTAspriteId; + u16 wager; + u8 cursorPosition; + u8 Trigger; + u8 Rarity; // 0 = Common, 1 = Uncommon, 2 = Rare, 3 = Ultra Rare + u8 ownedCommon; + u8 ownedUncommon; + u8 ownedRare; + u8 ownedUltraRare; + u8 commonChance; + u8 uncommonChance; + u8 rareChance; + u8 ultraRareChance; + u16 CalculatedSpecies; u8 bouncingPokeballSpriteId; - u16 texX; - u16 texY; - u16 neverRead_D8; - u16 neverRead_DA; - u16 scrX; - u16 scrY; - s16 bg1vofs; - s16 bg1hofs; - s16 bg2vofs; - s16 bg2hofs; - u16 sXY; - u16 gbaScale; - u16 alpha; - bool8 isLinkTrade; - u16 monSpecies[2]; - u16 cachedMapMusic; - u8 textColors[3]; - u8 filler_F9; - bool8 isCableTrade; - u8 wirelessWinLeft; - u8 wirelessWinTop; - u8 wirelessWinRight; - u8 wirelessWinBottom; -} *sTradeAnim = NULL; + u8 timer; + u8 monSpriteId; + u32 waitTimer; + u8 Input; +}; static const u8 sText_FromGacha[] = _("You got {STR_VAR_1}!"); @@ -255,9 +188,6 @@ static void InitGachaScreen(void); static void GachaVBlankCallback(void); static void SpriteCB_BouncingPokeball(struct Sprite *); static void SpriteCB_BouncingPokeballArrive(struct Sprite *); -static void InitTradeScreen(void); -static void Process_A(void); -static void EggHatchPrintMessage(u8, u8 *, u8, u8, u8); static const u8 sMessageText[] = _("NEW POKéMON : {STR_VAR_1}%"); @@ -405,15 +335,15 @@ static const struct BgTemplate sGachaBGtemplates[] = { }; static const struct WindowTemplate sGachaWinTemplates[] = { - { + { .bg = GACHA_MENUS, .tilemapLeft = 16, .tilemapTop = 9, .width = 14, .height = 2, .paletteNum = 0xF, - .baseBlock = 0x194, - }, + .baseBlock = 0x194, + }, DUMMY_WIN_TEMPLATE, }; @@ -489,37 +419,37 @@ static const struct WindowTemplate sYesNoWinTemplate = static const struct SpritePalette sSpritePalettes[] = { { .data = Gacha_BG_Basic_Pal, .tag = BG_BASIC_PAL }, - { .data = Gacha_BG_Great_Pal, .tag = BG_GREAT_PAL }, - { .data = Gacha_BG_Ultra_Pal, .tag = BG_ULTRA_PAL }, - { .data = Gacha_BG_Master_Pal, .tag = BG_MASTER_PAL }, + { .data = Gacha_BG_Great_Pal, .tag = BG_GREAT_PAL }, + { .data = Gacha_BG_Ultra_Pal, .tag = BG_ULTRA_PAL }, + { .data = Gacha_BG_Master_Pal, .tag = BG_MASTER_PAL }, {} }; static const struct SpritePalette sSpritePalettes2[] = { - { .data = BelossomPAL, .tag = PALTAG_BELOSSOM }, - { .data = PhanpyPal, .tag = PALTAG_PHANPY }, - { .data = TeddiursaPAL, .tag = PALTAG_TEDDIURSA }, - { .data = ElekidPAL, .tag = PALTAG_ELEKID }, - { .data = HoppipPAL, .tag = PALTAG_HOPPIP }, - { .data = sCredit_Pal, .tag = PALTAG_ARROWS }, - { .data = Gacha_press_a_Pal, .tag = PALTAG_PRESS_A }, - { .data = Gacha_Knob_Pal, .tag = PALTAG_KNOB }, - { .data = Gacha_Digital_Text_Pal, .tag = DIGITAL_TEXT_PAL }, - { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, - { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, - { .data = Gacha_Lottery_Pal, .tag = LOTTERY_JPN_PAL }, - { .data = Gacha_Menu_Basic_Pal, .tag = PALTAG_MENU_BASIC }, - { .data = Gacha_Menu_Great_Pal, .tag = PALTAG_MENU_GREAT }, - { .data = Gacha_Menu_Ultra_Pal, .tag = PALTAG_MENU_ULTRA }, - { .data = Gacha_Menu_Master_Pal, .tag = PALTAG_MENU_MASTER }, - {} + { .data = BelossomPAL, .tag = PALTAG_BELOSSOM }, + { .data = PhanpyPal, .tag = PALTAG_PHANPY }, + { .data = TeddiursaPAL, .tag = PALTAG_TEDDIURSA }, + { .data = ElekidPAL, .tag = PALTAG_ELEKID }, + { .data = HoppipPAL, .tag = PALTAG_HOPPIP }, + { .data = sCredit_Pal, .tag = PALTAG_ARROWS }, + { .data = Gacha_press_a_Pal, .tag = PALTAG_PRESS_A }, + { .data = Gacha_Knob_Pal, .tag = PALTAG_KNOB }, + { .data = Gacha_Digital_Text_Pal, .tag = DIGITAL_TEXT_PAL }, + { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = Gacha_Lottery_Pal, .tag = LOTTERY_JPN_PAL }, + { .data = Gacha_Menu_Basic_Pal, .tag = PALTAG_MENU_BASIC }, + { .data = Gacha_Menu_Great_Pal, .tag = PALTAG_MENU_GREAT }, + { .data = Gacha_Menu_Ultra_Pal, .tag = PALTAG_MENU_ULTRA }, + { .data = Gacha_Menu_Master_Pal, .tag = PALTAG_MENU_MASTER }, + {} }; static const struct SpritePalette sBall[] = { - { .data = sPokeball_Pal, .tag = PALTAG_POKEBALL }, - {} + { .data = sPokeball_Pal, .tag = PALTAG_POKEBALL }, + {} }; static const struct CompressedSpriteSheet sSpriteSheet_Press_A = @@ -632,7 +562,7 @@ static const struct OamData sOamData_Press_A = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -642,7 +572,7 @@ static const struct OamData sOamData_Arrows = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(8x32), .size = SPRITE_SIZE(8x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -652,7 +582,7 @@ static const struct OamData sOamData_Hoppip = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -662,7 +592,7 @@ static const struct OamData sOamData_Elekid = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -672,7 +602,7 @@ static const struct OamData sOamData_Teddiursa = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -682,7 +612,7 @@ static const struct OamData sOamData_Phanpy = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -692,7 +622,7 @@ static const struct OamData sOamData_Belossom = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -702,7 +632,7 @@ static const struct OamData sOamData_Menu = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -712,7 +642,7 @@ static const struct OamData sOamData_Menu_2 = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -722,7 +652,7 @@ static const struct OamData sOamData_Lottery_JPN = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -732,7 +662,7 @@ static const struct OamData sOamData_Digital_Text = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -742,7 +672,7 @@ static const struct OamData sOamData_Knob = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -859,21 +789,21 @@ static const struct SpriteTemplate sSpriteTemplate_Pokeball = static const union AnimCmd sPressAAnimCmd_1[] = { - ANIMCMD_FRAME(32, 10), - ANIMCMD_FRAME(64, 10), + ANIMCMD_FRAME(32, 10), + ANIMCMD_FRAME(64, 10), ANIMCMD_JUMP(0) }; static const union AnimCmd sPressAAnimCmd_0[] = { - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(0, 10), ANIMCMD_JUMP(0) }; static const union AnimCmd *const sPressAAnimCmds[] = { sPressAAnimCmd_0, // Gray - sPressAAnimCmd_1, // Highlight + sPressAAnimCmd_1, // Highlight }; static const struct SpriteTemplate sSpriteTemplate_Press_A = @@ -889,21 +819,21 @@ static const struct SpriteTemplate sSpriteTemplate_Press_A = static const union AnimCmd sArrowAnimCmd_1[] = { - ANIMCMD_FRAME(8, 20), - ANIMCMD_FRAME(12, 20), + ANIMCMD_FRAME(8, 20), + ANIMCMD_FRAME(12, 20), ANIMCMD_JUMP(0) }; static const union AnimCmd sArrowAnimCmd_0[] = { - ANIMCMD_FRAME(0, 20), - ANIMCMD_FRAME(4, 20), + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(4, 20), ANIMCMD_JUMP(0) }; static const union AnimCmd *const sArrowsAnimCmds[] = { sArrowAnimCmd_0, // Up and Down - sArrowAnimCmd_1, // Up + sArrowAnimCmd_1, // Up }; static const struct SpriteTemplate sSpriteTemplate_Arrows = @@ -930,9 +860,9 @@ static const union AnimCmd *const sMenu2AnimCmds[] = { static const union AnimCmd sHoppipAnimCmd_0[] = { - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), ANIMCMD_FRAME(48, 15), ANIMCMD_JUMP(0) }; @@ -954,15 +884,15 @@ static const struct SpriteTemplate sSpriteTemplate_Hoppip = static const union AnimCmd sElekidAnimCmd_0[] = { - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(32, 15), - //ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(32, 15), + //ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(48, 15), - ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(32, 15), ANIMCMD_JUMP(0) }; @@ -984,24 +914,24 @@ static const struct SpriteTemplate sSpriteTemplate_Elekid = static const union AnimCmd sTeddiursaAnimCmd_0[] = { ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(16, 15), ANIMCMD_FRAME(48, 30), ANIMCMD_JUMP(0) }; @@ -1025,10 +955,10 @@ static const union AnimCmd sPhanpyAnimCmd_0[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(48, 15), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(48, 15), - ANIMCMD_FRAME(16, 15), + ANIMCMD_FRAME(48, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(48, 15), + ANIMCMD_FRAME(16, 15), ANIMCMD_JUMP(0) }; @@ -1051,12 +981,12 @@ static const union AnimCmd sBelossomAnimCmd_0[] = { ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(32, 15), - ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(32, 15), + ANIMCMD_FRAME(0, 15), ANIMCMD_FRAME(16, 15), - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(48, 30), + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(48, 30), ANIMCMD_JUMP(0) }; @@ -1222,23 +1152,23 @@ static const struct SpriteTemplate sSpriteTemplate_Lottery_JPN = static const union AnimCmd sKnobAnimCmd_1[] = { - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(16, 5), - ANIMCMD_FRAME(32, 20), - ANIMCMD_FRAME(16, 5), - ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(32, 20), + ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(0, 5), ANIMCMD_END }; static const union AnimCmd sKnobAnimCmd_0[] = { - ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(0, 20), ANIMCMD_END }; static const union AnimCmd *const sKnobAnimCmds[] = { sKnobAnimCmd_0, // Still - sKnobAnimCmd_1, // Rotate + sKnobAnimCmd_1, // Rotate }; static const struct SpriteTemplate sSpriteTemplate_Knob = @@ -1254,9 +1184,8 @@ static const struct SpriteTemplate sSpriteTemplate_Knob = void StartGacha(void) { - u8 taskId = 0; sGacha = AllocZeroed(sizeof(struct Gacha)); - taskId = CreateTask(FadeToGachaScreen, 0); + CreateTask(FadeToGachaScreen, 0); } static void SpriteCB_BouncingPokeball(struct Sprite *sprite) @@ -1307,7 +1236,7 @@ static void SpriteCB_BouncingPokeballArrive(struct Sprite *sprite) static void FadeToGachaScreen(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].data[0]) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -1325,140 +1254,98 @@ static void FadeToGachaScreen(u8 taskId) static void BGSetup(void) { - u16 size = 0x1480; - - if (sGacha->GachaId == 1) // Basic - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Basic_Pal, 0, sizeof(Gacha_BG_Basic_Pal)); - } - else if (sGacha->GachaId == 2) // Great - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Great_Pal, 0, sizeof(Gacha_BG_Great_Pal)); - } - else if (sGacha->GachaId == 3) // Ultra - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Ultra_Pal, 0, sizeof(Gacha_BG_Ultra_Pal)); - } - else // Master - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Master_Pal, 0, sizeof(Gacha_BG_Master_Pal)); - } + u16 size = 0x1480; + + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Main, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Main_Tilemap, 0, 0); + ResetPaletteFade(); + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + LoadPalette(Gacha_BG_Basic_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_GREAT: + LoadPalette(Gacha_BG_Great_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_ULTRA: + LoadPalette(Gacha_BG_Ultra_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_MASTER: + LoadPalette(Gacha_BG_Master_Pal, 0, PLTT_SIZE_4BPP); + break; + } } static void BGRed(void) { - u16 size = 0x1480; + u16 size = 0x1480; - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Red, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Red_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Red_Pal, 0, sizeof(Gacha_BG_Red_Pal)); + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Red, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Red_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Gacha_BG_Red_Pal, 0, PLTT_SIZE_4BPP); } static void Shake1(void) { - u16 size = 0x1480; - - if (sGacha->GachaId == 1) // Basic - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Basic_Pal, 0, sizeof(Gacha_BG_Basic_Pal)); - } - else if (sGacha->GachaId == 2) // Great - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Great_Pal, 0, sizeof(Gacha_BG_Great_Pal)); - } - else if (sGacha->GachaId == 3) // Ultra - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Ultra_Pal, 0, sizeof(Gacha_BG_Ultra_Pal)); - } - else // Master - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Master_Pal, 0, sizeof(Gacha_BG_Master_Pal)); - } + u16 size = 0x1480; + + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Left, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Left_Tilemap, 0, 0); + ResetPaletteFade(); + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + LoadPalette(Gacha_BG_Basic_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_GREAT: + LoadPalette(Gacha_BG_Great_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_ULTRA: + LoadPalette(Gacha_BG_Ultra_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_MASTER: + LoadPalette(Gacha_BG_Master_Pal, 0, PLTT_SIZE_4BPP); + break; + } } static void Shake2(void) { - u16 size = 0x1480; - - if (sGacha->GachaId == 1) // Basic - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Basic_Pal, 0, sizeof(Gacha_BG_Basic_Pal)); - } - else if (sGacha->GachaId == 2) // Great - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Great_Pal, 0, sizeof(Gacha_BG_Great_Pal)); - } - else if (sGacha->GachaId == 3) // Ultra - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Ultra_Pal, 0, sizeof(Gacha_BG_Ultra_Pal)); - } - else // Master - { - InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); - SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); - CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Gacha_BG_Master_Pal, 0, sizeof(Gacha_BG_Master_Pal)); - } + u16 size = 0x1480; + + InitBgsFromTemplates(0, sGachaBGtemplates, ARRAY_COUNT(sGachaBGtemplates)); + SetBgTilemapBuffer(GACHA_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(GACHA_BG_BASE, Gacha_BG_Right, size, 0, 0); + CopyToBgTilemapBuffer(GACHA_BG_BASE, Gacha_BG_Right_Tilemap, 0, 0); + ResetPaletteFade(); + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + LoadPalette(Gacha_BG_Basic_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_GREAT: + LoadPalette(Gacha_BG_Great_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_ULTRA: + LoadPalette(Gacha_BG_Ultra_Pal, 0, PLTT_SIZE_4BPP); + break; + case GACHA_MASTER: + LoadPalette(Gacha_BG_Master_Pal, 0, PLTT_SIZE_4BPP); + break; + } } static void GachaVBlankCallback(void) @@ -1545,27 +1432,31 @@ static void CreateCreditSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_Interface) - 1; i++) { - LoadCompressedSpriteSheet(&sSpriteSheets_Interface[i]); + LoadCompressedSpriteSheet(&sSpriteSheets_Interface[i]); } for (i = 0; i < MAX_COIN_DIGITS; i++) { - if (i == 0){ - sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 207, 140, 2); - gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; - } - if (i == 1){ - sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 8 + 207, 140, 2); - gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; - } - if (i == 2){ - sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 16 + 207, 140, 2); - gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; - } - if (i == 3){ - sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 24 + 207, 140, 2); - gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; - } + if (i == 0) + { + sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 207, 140, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } + if (i == 1) + { + sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 8 + 207, 140, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } + if (i == 2) + { + sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 16 + 207, 140, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } + if (i == 3) + { + sGacha->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 24 + 207, 140, 2); + gSprites[sGacha->PlayerSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + } } } @@ -1575,167 +1466,159 @@ static void CreatePlayerSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PlayerInterface) - 1; i++) { - LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); + LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); } for (i = 0; i < 4; i++) { sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS] = CreateSprite(&sSpriteTemplate_PlayerDigit, i * 8 + 207, 118, 2); - gSprites[sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; + gSprites[sGacha->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; } } static void CreateCTA(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Press_A); - - sGacha->CTAspriteId = CreateSprite(&sSpriteTemplate_Press_A, 152, 116, 0); - gSprites[sGacha->CTAspriteId].animNum = 0; // Off + sGacha->CTAspriteId = CreateSprite(&sSpriteTemplate_Press_A, 152, 116, 0); + gSprites[sGacha->CTAspriteId].animNum = 0; // Off } static void CreateArrows(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Arrows); - - sGacha->ArrowsSpriteId = CreateSprite(&sSpriteTemplate_Arrows, 207 + 24, 120, 0); - gSprites[sGacha->ArrowsSpriteId].animNum = 1; // Only Up + sGacha->ArrowsSpriteId = CreateSprite(&sSpriteTemplate_Arrows, 207 + 24, 120, 0); + gSprites[sGacha->ArrowsSpriteId].animNum = 1; // Only Up } static void CreateLotteryJPN(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Lottery_JPN); - - sGacha->LotteryJPNspriteId = CreateSprite(&sSpriteTemplate_Lottery_JPN, 176, 32, 0); + sGacha->LotteryJPNspriteId = CreateSprite(&sSpriteTemplate_Lottery_JPN, 176, 32, 0); } static void CreateHoppip(void) { - s16 x = 142; - s16 y = 56; - s16 x2 = x + 34; - s16 x3 = x + 68; - + s16 x = 142; + s16 y = 56; + s16 x2 = x + 34; + s16 x3 = x + 68; + LoadCompressedSpriteSheet(&sSpriteSheet_Hoppip); - - sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x, y, 0); - sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x2, y, 0); - sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x3, y, 0); + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Hoppip, x3, y, 0); } -static void CreateElekid(void) +static UNUSED void CreateElekid(void) { - s16 x = 142; - s16 y = 56 + 2; - s16 x2 = x + 34; - s16 x3 = x + 68; - + s16 x = 142; + s16 y = 56 + 2; + s16 x2 = x + 34; + s16 x3 = x + 68; + LoadCompressedSpriteSheet(&sSpriteSheet_Elekid); - - sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x, y, 0); - sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x2, y, 0); - sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x3, y, 0); + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Elekid, x3, y, 0); } static void CreateTeddiursa(void) { - s16 x = 142; - s16 y = 56; - s16 x2 = x + 34; - s16 x3 = x + 68; - + s16 x = 142; + s16 y = 56; + s16 x2 = x + 34; + s16 x3 = x + 68; + LoadCompressedSpriteSheet(&sSpriteSheet_Teddiursa); - - sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x, y, 0); - sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x2, y, 0); - sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x3, y, 0); + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Teddiursa, x3, y, 0); } static void CreatePhanpy(void) { - s16 x = 142; - s16 y = 56; - s16 x2 = x + 34; - s16 x3 = x + 68; - + s16 x = 142; + s16 y = 56; + s16 x2 = x + 34; + s16 x3 = x + 68; + LoadCompressedSpriteSheet(&sSpriteSheet_Phanpy); - - sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x, y, 0); - sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x2, y, 0); - sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x3, y, 0); + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Phanpy, x3, y, 0); } static void CreateBelossom(void) { - s16 x = 142; - s16 y = 56; - s16 x2 = x + 34; - s16 x3 = x + 68; - + s16 x = 142; + s16 y = 56; + s16 x2 = x + 34; + s16 x3 = x + 68; + LoadCompressedSpriteSheet(&sSpriteSheet_Belossom); - - sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x, y, 0); - sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x2, y, 0); - sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x3, y, 0); + sGacha->PokemonOneSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x, y, 0); + sGacha->PokemonTwoSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x2, y, 0); + sGacha->PokemonThreeSpriteId = CreateSprite(&sSpriteTemplate_Belossom, x3, y, 0); } static void CreateDigitalText(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Digital_Text); - - sGacha->DigitalTextSpriteId = CreateSprite(&sSpriteTemplate_Digital_Text, 64, 25, 0); + sGacha->DigitalTextSpriteId = CreateSprite(&sSpriteTemplate_Digital_Text, 64, 25, 0); } static void CreateCreditMenu(void) { - s16 x = 144; - s16 y = 128; - s16 x2 = x + 64; - u8 priority = 1; - + s16 x = 144; + s16 y = 128; + u8 priority = 1; + LoadCompressedSpriteSheet(&sSpriteSheet_Menu_1); - if (sGacha->GachaId == 1) // Basic - { - sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Basic, x, y, priority); - } - else if (sGacha->GachaId == 2) // Great - { - sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Great, x, y, priority); - } - else if (sGacha->GachaId == 3) // Ultra - { - sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Ultra, x, y, priority); - } - else // Master - { - sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Master, x, y, priority); - } - gSprites[sGacha->CreditMenu1Id].oam.priority = 1; + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Basic, x, y, priority); + break; + case GACHA_GREAT: + sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Great, x, y, priority); + break; + case GACHA_ULTRA: + sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Ultra, x, y, priority); + break; + case GACHA_MASTER: + sGacha->CreditMenu1Id = CreateSprite(&sSpriteTemplate_Menu_1_Master, x, y, priority); + break; + } + gSprites[sGacha->CreditMenu1Id].oam.priority = 1; } static void CreatePlayerMenu(void) { - s16 x = 144; - s16 y = 128; - s16 x2 = x + 64; - u8 priority = 1; - + s16 x = 144; + s16 y = 128; + s16 x2 = x + 64; + u8 priority = 1; + LoadCompressedSpriteSheet(&sSpriteSheet_Menu_2); - if (sGacha->GachaId == 1) // Basic - { - sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Basic, x2, y, priority); - } - else if (sGacha->GachaId == 2) // Great - { - sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Great, x2, y, priority); - } - else if (sGacha->GachaId == 3) // Ultra - { - sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Ultra, x2, y, priority); - } - else // Master - { - sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Master, x2, y, priority); + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Basic, x2, y, priority); + break; + case GACHA_GREAT: + sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Great, x2, y, priority); + break; + case GACHA_ULTRA: + sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Ultra, x2, y, priority); + break; + case GACHA_MASTER: + sGacha->CreditMenu2Id = CreateSprite(&sSpriteTemplate_Menu_2_Master, x2, y, priority); + break; } gSprites[sGacha->CreditMenu2Id].oam.priority = 1; } @@ -1743,17 +1626,16 @@ static void CreatePlayerMenu(void) static void CreateKnob(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Knob); - - sGacha->KnobSpriteId = CreateSprite(&sSpriteTemplate_Knob, 76, 128, 0); - gSprites[sGacha->KnobSpriteId].animNum = 0; // No Rotation + sGacha->KnobSpriteId = CreateSprite(&sSpriteTemplate_Knob, 76, 128, 0); + gSprites[sGacha->KnobSpriteId].animNum = 0; // No Rotation } typedef struct { int customNumber; u16 species; -} SpeciesBasicA; +} SpeciesGacha; -static const SpeciesBasicA SpeciesBasicCommon[] = { +static const SpeciesGacha sSpeciesGachaBasicCommon[] = { {0, SPECIES_SUNKERN}, {1, SPECIES_AZURILL}, {2, SPECIES_CATERPIE}, @@ -1793,12 +1675,7 @@ static const SpeciesBasicA SpeciesBasicCommon[] = { {36, SPECIES_FEEBAS} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesBasicB; - -static const SpeciesBasicB SpeciesBasicUncommon[] = { +static const SpeciesGacha sSpeciesGachaBasicUncommon[] = { {0, SPECIES_METAPOD}, {1, SPECIES_KAKUNA}, {2, SPECIES_PICHU}, @@ -1829,12 +1706,7 @@ static const SpeciesBasicB SpeciesBasicUncommon[] = { {27, SPECIES_SPOINK} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesBasicC; - -static const SpeciesBasicC SpeciesBasicRare[] = { +static const SpeciesGacha sSpeciesGachaBasicRare[] = { {0, SPECIES_RALTS}, {1, SPECIES_TYROGUE}, {2, SPECIES_SKITTY}, @@ -1853,12 +1725,7 @@ static const SpeciesBasicC SpeciesBasicRare[] = { {15, SPECIES_CORSOLA} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesBasicD; - -static const SpeciesBasicD SpeciesBasicUltraRare[] = { +static const SpeciesGacha sSpeciesGachaBasicUltraRare[] = { {0, SPECIES_TOGEPI}, {1, SPECIES_CHARMANDER}, {2, SPECIES_CYNDAQUIL}, @@ -1872,12 +1739,7 @@ static const SpeciesBasicD SpeciesBasicUltraRare[] = { {10, SPECIES_SHUCKLE} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesGreatA; - -static const SpeciesGreatA SpeciesGreatCommon[] = { +static const SpeciesGacha sSpeciesGreatCommon[] = { {0, SPECIES_JIGGLYPUFF}, {1, SPECIES_CLEFAIRY}, {2, SPECIES_KIRLIA}, @@ -1945,12 +1807,7 @@ static const SpeciesGreatA SpeciesGreatCommon[] = { {64, SPECIES_ELECTRODE} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesGreatB; - -static const SpeciesGreatB SpeciesGreatUncommon[] = { +static const SpeciesGacha sSpeciesGreatUncommon[] = { {0, SPECIES_FEEBAS}, {1, SPECIES_BALTOY}, {2, SPECIES_SNORUNT}, @@ -2005,12 +1862,7 @@ static const SpeciesGreatB SpeciesGreatUncommon[] = { {51, SPECIES_GOLDUCK} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesGreatC; - -static const SpeciesGreatC SpeciesGreatRare[] = { +static const SpeciesGacha sSpeciesGreatRare[] = { {0, SPECIES_DRATINI}, {1, SPECIES_LARVITAR}, {2, SPECIES_BAGON}, @@ -2054,12 +1906,7 @@ static const SpeciesGreatC SpeciesGreatRare[] = { {40, SPECIES_SHUCKLE} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesGreatD; - -static const SpeciesGreatD SpeciesGreatUltraRare[] = { +static const SpeciesGacha sSpeciesGreatUltraRare[] = { {0, SPECIES_WYNAUT}, {1, SPECIES_DELIBIRD}, {2, SPECIES_PORYGON}, @@ -2080,12 +1927,7 @@ static const SpeciesGreatD SpeciesGreatUltraRare[] = { {17, SPECIES_HERACROSS} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesUltraA; - -static const SpeciesUltraA SpeciesUltraCommon[] = { +static const SpeciesGacha sSpeciesUltraCommon[] = { {0, SPECIES_KRABBY}, {1, SPECIES_EXEGGCUTE}, {2, SPECIES_MAGNEMITE}, @@ -2151,12 +1993,7 @@ static const SpeciesUltraA SpeciesUltraCommon[] = { {62, SPECIES_CLOYSTER} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesUltraB; - -static const SpeciesUltraB SpeciesUltraUncommon[] = { +static const SpeciesGacha sSpeciesUltraUncommon[] = { {0, SPECIES_DELIBIRD}, {1, SPECIES_LICKITUNG}, {2, SPECIES_YANMA}, @@ -2210,12 +2047,7 @@ static const SpeciesUltraB SpeciesUltraUncommon[] = { {50, SPECIES_GOREBYSS} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesUltraC; - -static const SpeciesUltraC SpeciesUltraRare[] = { +static const SpeciesGacha sSpeciesUltraRare[] = { {0, SPECIES_DITTO}, {1, SPECIES_EEVEE}, {2, SPECIES_OMANYTE}, @@ -2246,12 +2078,7 @@ static const SpeciesUltraC SpeciesUltraRare[] = { {27, SPECIES_MILOTIC} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesUltraD; - -static const SpeciesUltraD SpeciesUltraUltraRare[] = { +static const SpeciesGacha sSpeciesUltraUltraRare[] = { {0, SPECIES_SHEDINJA}, {1, SPECIES_SMEARGLE}, {2, SPECIES_CHANSEY}, @@ -2282,12 +2109,7 @@ static const SpeciesUltraD SpeciesUltraUltraRare[] = { {27, SPECIES_SLAKING} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesMasterA; - -static const SpeciesMasterA SpeciesMasterCommon[] = { +static const SpeciesGacha sSpeciesMasterCommon[] = { {0, SPECIES_DITTO}, {1, SPECIES_METANG}, {2, SPECIES_SHELGON}, @@ -2308,12 +2130,7 @@ static const SpeciesMasterA SpeciesMasterCommon[] = { {17, SPECIES_TYPHLOSION} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesMasterB; - -static const SpeciesMasterB SpeciesMasterUncommon[] = { +static const SpeciesGacha sSpeciesMasterUncommon[] = { {0, SPECIES_OMASTAR}, {1, SPECIES_KABUTOPS}, {2, SPECIES_CRADILY}, @@ -2333,12 +2150,7 @@ static const SpeciesMasterB SpeciesMasterUncommon[] = { {16, SPECIES_BLISSEY} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesMasterC; - -static const SpeciesMasterC SpeciesMasterRare[] = { +static const SpeciesGacha sSpeciesMasterRare[] = { {0, SPECIES_ARTICUNO}, {1, SPECIES_ZAPDOS}, {2, SPECIES_MOLTRES}, @@ -2352,12 +2164,7 @@ static const SpeciesMasterC SpeciesMasterRare[] = { {10, SPECIES_LATIOS} }; -typedef struct { - int customNumber; - u16 species; -} SpeciesMasterD; - -static const SpeciesMasterD SpeciesMasterUltraRare[] = { +static const SpeciesGacha sSpeciesMasterUltraRare[] = { {0, SPECIES_MEW}, {1, SPECIES_CELEBI}, {2, SPECIES_JIRACHI}, @@ -2372,28 +2179,27 @@ static const SpeciesMasterD SpeciesMasterUltraRare[] = { static void ShowMessage(void) { - u16 bet; - struct WindowTemplate template; - - - SetWindowTemplateFields(&template, GACHA_MENUS, 17, 10, 10, 2, 0xF, 0x194); - + u16 bet; + struct WindowTemplate template; + + SetWindowTemplateFields(&template, GACHA_MENUS, 17, 10, 10, 2, 0xF, 0x194); + sTextWindowId = AddWindow(&template); FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); PutWindowTilemap(sTextWindowId); LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); - DrawStdWindowFrame(sTextWindowId, FALSE); - bet = sGacha->Odds; - ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, 3); - //gStringVar4[0] = '\0'; - StringExpandPlaceholders(gStringVar4, sMessageText); + DrawStdWindowFrame(sTextWindowId, FALSE); + bet = sGacha->newMonOdds; + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, 3); + //gStringVar4[0] = '\0'; + StringExpandPlaceholders(gStringVar4, sMessageText); AddTextPrinterParameterized(sTextWindowId, FONT_NARROW, gStringVar4, 0, 1, 0, 0); - CopyWindowToVram(sTextWindowId, 3); + CopyWindowToVram(sTextWindowId, 3); } static void ResetMessage(void) { - ClearStdWindowAndFrame(sTextWindowId, TRUE); + ClearStdWindowAndFrame(sTextWindowId, TRUE); RemoveWindow(sTextWindowId); } @@ -2409,372 +2215,428 @@ static void StartTradeScreen(void) sGacha->state = STATE_FADE; } -u16 getBasicSpeciesbyNum(u16 Number) { +static u16 GetMaxAvailableGachaRaritySpecies(u32 gachaId, u32 rarity) +{ + // Get the number of available Pokémon based on rarity + switch (gachaId) + { + default: + case GACHA_BASIC: + switch (rarity) + { + default: + case RARITY_COMMON: + return ARRAY_COUNT(sSpeciesGachaBasicCommon); + case RARITY_UNCOMMON: + return ARRAY_COUNT(sSpeciesGachaBasicUncommon); + case RARITY_RARE: + return ARRAY_COUNT(sSpeciesGachaBasicRare); + case RARITY_ULTRA_RARE: + return ARRAY_COUNT(sSpeciesGachaBasicUltraRare); + } + case GACHA_GREAT: + switch (rarity) + { + default: + case RARITY_COMMON: + return ARRAY_COUNT(sSpeciesGreatCommon); + case RARITY_UNCOMMON: + return ARRAY_COUNT(sSpeciesGreatUncommon); + case RARITY_RARE: + return ARRAY_COUNT(sSpeciesGreatRare); + case RARITY_ULTRA_RARE: + return ARRAY_COUNT(sSpeciesGreatUltraRare); + } + case GACHA_ULTRA: + switch (rarity) + { + default: + case RARITY_COMMON: + return ARRAY_COUNT(sSpeciesUltraCommon); + case RARITY_UNCOMMON: + return ARRAY_COUNT(sSpeciesUltraUncommon); + case RARITY_RARE: + return ARRAY_COUNT(sSpeciesUltraRare); + case RARITY_ULTRA_RARE: + return ARRAY_COUNT(sSpeciesUltraUltraRare); + } + case GACHA_MASTER: + switch (rarity) + { + default: + case RARITY_COMMON: + return ARRAY_COUNT(sSpeciesMasterCommon); + case RARITY_UNCOMMON: + return ARRAY_COUNT(sSpeciesMasterUncommon); + case RARITY_RARE: + return ARRAY_COUNT(sSpeciesMasterRare); + case RARITY_ULTRA_RARE: + return ARRAY_COUNT(sSpeciesMasterUltraRare); + } + } + return 0; // failsafe +} + +u16 GetGachaBasicSpecies(u16 randNum) +{ int i; u16 totalMax; // Use the pre-defined totalMax values based on the rarity - if (sGacha->Rarity == 0) { // Common - totalMax = sGacha->Basic_CommonMax; - } - else if (sGacha->Rarity == 1) { // Uncommon - totalMax = sGacha->Basic_UncommonMax; - } - else if (sGacha->Rarity == 2) { // Rare - totalMax = sGacha->Basic_RareMax; - } - else if (sGacha->Rarity == 3) { // Ultra Rare - totalMax = sGacha->Basic_UltraRareMax; - } + totalMax = GetMaxAvailableGachaRaritySpecies(GACHA_BASIC, sGacha->Rarity); // Check if the provided Number is valid - if (Number >= totalMax) { + if (randNum >= totalMax) return -1; // Return -1 if the Number is out of range for the list - } // Now, search for the Pokémon based on its customNumber - if (sGacha->Rarity == 0) { // Common - for (i = 0; i < totalMax; i++) { - if (SpeciesBasicCommon[i].customNumber == Number) { - return SpeciesBasicCommon[i].species; - } + switch (sGacha->Rarity) + { + default: + case RARITY_COMMON: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesGachaBasicCommon[i].customNumber == randNum) + return sSpeciesGachaBasicCommon[i].species; } - } - else if (sGacha->Rarity == 1) { // Uncommon - for (i = 0; i < totalMax; i++) { - if (SpeciesBasicUncommon[i].customNumber == Number) { - return SpeciesBasicUncommon[i].species; - } + break; + case RARITY_UNCOMMON: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesGachaBasicUncommon[i].customNumber == randNum) + return sSpeciesGachaBasicUncommon[i].species; } - } - else if (sGacha->Rarity == 2) { // Rare - for (i = 0; i < totalMax; i++) { - if (SpeciesBasicRare[i].customNumber == Number) { - return SpeciesBasicRare[i].species; - } + break; + case RARITY_RARE: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesGachaBasicRare[i].customNumber == randNum) + return sSpeciesGachaBasicRare[i].species; } - } - else if (sGacha->Rarity == 3) { // Ultra Rare - for (i = 0; i < totalMax; i++) { - if (SpeciesBasicUltraRare[i].customNumber == Number) { - return SpeciesBasicUltraRare[i].species; - } + break; + case RARITY_ULTRA_RARE: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesGachaBasicUltraRare[i].customNumber == randNum) + return sSpeciesGachaBasicUltraRare[i].species; } + break; } return -1; // Return -1 if customNumber is not found } -u16 getGreatSpeciesbyNum(u16 Number) { +u16 GetGachaGreatSpecies(u16 randNum) +{ int i; u16 totalMax = 0; // Determine the totalMax based on rarity - if (sGacha->Rarity == 0) { // Common - totalMax = sGacha->Great_CommonMax; - } - else if (sGacha->Rarity == 1) { // Uncommon - totalMax = sGacha->Great_UncommonMax; - } - else if (sGacha->Rarity == 2) { // Rare - totalMax = sGacha->Great_RareMax; - } - else { // Ultra Rare - totalMax = sGacha->Great_UltraRareMax; - } + totalMax = GetMaxAvailableGachaRaritySpecies(GACHA_GREAT, sGacha->Rarity); // Check if the provided Number is within the range - if (Number >= totalMax) { + if (randNum >= totalMax) return -1; // Return -1 if out of range - } // Loop through the correct array based on rarity - if (sGacha->Rarity == 0) { // Common - for (i = 0; i < totalMax; i++) { - if (SpeciesGreatCommon[i].customNumber == Number) { - return SpeciesGreatCommon[i].species; - } + switch (sGacha->Rarity) + { + default: + case RARITY_COMMON: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesGreatCommon[i].customNumber == randNum) + return sSpeciesGreatCommon[i].species; } - } - else if (sGacha->Rarity == 1) { // Uncommon - for (i = 0; i < totalMax; i++) { - if (SpeciesGreatUncommon[i].customNumber == Number) { - return SpeciesGreatUncommon[i].species; - } + break; + case RARITY_UNCOMMON: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesGreatUncommon[i].customNumber == randNum) + return sSpeciesGreatUncommon[i].species; } - } - else if (sGacha->Rarity == 2) { // Rare - for (i = 0; i < totalMax; i++) { - if (SpeciesGreatRare[i].customNumber == Number) { - return SpeciesGreatRare[i].species; - } + break; + case RARITY_RARE: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesGreatRare[i].customNumber == randNum) + return sSpeciesGreatRare[i].species; } - } - else { // Ultra Rare - for (i = 0; i < totalMax; i++) { - if (SpeciesGreatUltraRare[i].customNumber == Number) { - return SpeciesGreatUltraRare[i].species; - } + break; + case RARITY_ULTRA_RARE: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesGreatUltraRare[i].customNumber == randNum) + return sSpeciesGreatUltraRare[i].species; } + break; } - + return -1; // Return -1 if customNumber is not found } -u16 getUltraSpeciesbyNum(u16 Number) { +u16 GetGachaUltraSpecies(u16 randNum) +{ int i; u16 totalMax = 0; // Determine the totalMax based on rarity - if (sGacha->Rarity == 0) { // Common - totalMax = sGacha->Ultra_CommonMax; - } - else if (sGacha->Rarity == 1) { // Uncommon - totalMax = sGacha->Ultra_UncommonMax; - } - else if (sGacha->Rarity == 2) { // Rare - totalMax = sGacha->Ultra_RareMax; - } - else { // Ultra Rare - totalMax = sGacha->Ultra_UltraRareMax; - } + totalMax = GetMaxAvailableGachaRaritySpecies(GACHA_ULTRA, sGacha->Rarity); // Check if the provided Number is within the range - if (Number >= totalMax) { + if (randNum >= totalMax) return -1; // Return -1 if out of range - } // Loop through the correct array based on rarity - if (sGacha->Rarity == 0) { // Common - for (i = 0; i < totalMax; i++) { - if (SpeciesUltraCommon[i].customNumber == Number) { - return SpeciesUltraCommon[i].species; - } + switch (sGacha->Rarity) + { + default: + case RARITY_COMMON: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesUltraCommon[i].customNumber == randNum) + return sSpeciesUltraCommon[i].species; } - } - else if (sGacha->Rarity == 1) { // Uncommon - for (i = 0; i < totalMax; i++) { - if (SpeciesUltraUncommon[i].customNumber == Number) { - return SpeciesUltraUncommon[i].species; - } + break; + case RARITY_UNCOMMON: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesUltraUncommon[i].customNumber == randNum) + return sSpeciesUltraUncommon[i].species; } - } - else if (sGacha->Rarity == 2) { // Rare - for (i = 0; i < totalMax; i++) { - if (SpeciesUltraRare[i].customNumber == Number) { - return SpeciesUltraRare[i].species; - } + break; + case RARITY_RARE: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesUltraRare[i].customNumber == randNum) + return sSpeciesUltraRare[i].species; } - } - else { // Ultra Rare - for (i = 0; i < totalMax; i++) { - if (SpeciesUltraUltraRare[i].customNumber == Number) { - return SpeciesUltraUltraRare[i].species; - } + break; + case RARITY_ULTRA_RARE: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesUltraUltraRare[i].customNumber == randNum) + return sSpeciesUltraUltraRare[i].species; } + break; } - + return -1; // Return -1 if customNumber is not found } -u16 getMasterSpeciesbyNum(u16 Number) { +u16 GetGachaMasterSpecies(u16 randNum) +{ int i; u16 totalMax = 0; - // Determine the totalMax based on rarity - if (sGacha->Rarity == 0) { // Common - totalMax = sGacha->Master_CommonMax; - } - else if (sGacha->Rarity == 1) { // Uncommon - totalMax = sGacha->Master_UncommonMax; - } - else if (sGacha->Rarity == 2) { // Rare - totalMax = sGacha->Master_RareMax; - } - else { // Ultra Rare - totalMax = sGacha->Master_UltraRareMax; - } + totalMax = GetMaxAvailableGachaRaritySpecies(GACHA_MASTER, sGacha->Rarity); // Check if the provided Number is within the range - if (Number >= totalMax) { + if (randNum >= totalMax) return -1; // Return -1 if out of range - } - // Loop through the correct array based on rarity - if (sGacha->Rarity == 0) { // Common - for (i = 0; i < totalMax; i++) { - if (SpeciesMasterCommon[i].customNumber == Number) { - return SpeciesMasterCommon[i].species; - } + switch (sGacha->Rarity) + { + default: + case RARITY_COMMON: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesMasterCommon[i].customNumber == randNum) + return sSpeciesMasterCommon[i].species; } - } - else if (sGacha->Rarity == 1) { // Uncommon - for (i = 0; i < totalMax; i++) { - if (SpeciesMasterUncommon[i].customNumber == Number) { - return SpeciesMasterUncommon[i].species; - } + break; + case RARITY_UNCOMMON: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesMasterUncommon[i].customNumber == randNum) + return sSpeciesMasterUncommon[i].species; } - } - else if (sGacha->Rarity == 2) { // Rare - for (i = 0; i < totalMax; i++) { - if (SpeciesMasterRare[i].customNumber == Number) { - return SpeciesMasterRare[i].species; - } + break; + case RARITY_RARE: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesMasterRare[i].customNumber == randNum) + return sSpeciesMasterRare[i].species; } - } - else { // Ultra Rare - for (i = 0; i < totalMax; i++) { - if (SpeciesMasterUltraRare[i].customNumber == Number) { - return SpeciesMasterUltraRare[i].species; - } + break; + case RARITY_ULTRA_RARE: + for (i = 0; i < totalMax; i++) + { + if (sSpeciesMasterUltraRare[i].customNumber == randNum) + return sSpeciesMasterUltraRare[i].species; } + break; } - + return -1; // Return -1 if customNumber is not found } -u16 GetPokemon(u16 n) { - int num; - if (sGacha->GachaId == 1) { // Basic - num = getBasicSpeciesbyNum(n); - } - else if (sGacha->GachaId == 2) { // Great - num = getGreatSpeciesbyNum(n); - } - else if (sGacha->GachaId == 3) { // Ultra - num = getUltraSpeciesbyNum(n); - } - else { // Master - num = getMasterSpeciesbyNum(n); - } - - if (num == -1) { - return 0; // Or another default value indicating not found. +u16 GetGachaMon(u16 randNum) +{ + u32 species; + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + species = GetGachaBasicSpecies(randNum); + break; + case GACHA_GREAT: + species = GetGachaGreatSpecies(randNum); + break; + case GACHA_ULTRA: + species = GetGachaUltraSpecies(randNum); + break; + case GACHA_MASTER: + species = GetGachaMasterSpecies(randNum); + break; } - return num; + + if (species >= SPECIES_EGG) + return SPECIES_NONE; // Or another default value indicating not found. + return species; } -u8 CheckIfOwned(u16 species) +static inline bool32 CheckIfOwned(u16 species) { - u16 nationalDexNo; - nationalDexNo = SpeciesToNationalPokedexNum(species); - return GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT); + u16 nationalDexNo; + nationalDexNo = SpeciesToNationalPokedexNum(species); + return GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT); +} + +bool32 IsNotValidOwnedSpecies(u16 species) +{ + if (species == SPECIES_NONE) + return TRUE; + return !CheckIfOwned(species); +} + +bool32 IsNotValidUnownedSpecies(u16 species) +{ + if (species == SPECIES_NONE) + return TRUE; + return CheckIfOwned(species); } static void GetPokemonOwned(void) { - u16 species; - int nationalDexNo; - int i; - - sGacha->Basic_Common_Owned = 0; - sGacha->Basic_Uncommon_Owned = 0; - sGacha->Basic_Rare_Owned = 0; - sGacha->Basic_UltraRare_Owned = 0; - sGacha->Great_Common_Owned = 0; - sGacha->Great_Uncommon_Owned = 0; - sGacha->Great_Rare_Owned = 0; - sGacha->Great_UltraRare_Owned = 0; - sGacha->Ultra_Common_Owned = 0; - sGacha->Ultra_Uncommon_Owned = 0; - sGacha->Ultra_Rare_Owned = 0; - sGacha->Ultra_UltraRare_Owned = 0; - sGacha->Master_Common_Owned = 0; - sGacha->Master_Uncommon_Owned = 0; - sGacha->Master_Rare_Owned = 0; - sGacha->Master_UltraRare_Owned = 0; - - // Basic - for (i = 0; i < sGacha->Basic_CommonMax; i++) { - species = SpeciesBasicCommon[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Basic_Common_Owned = (sGacha->Basic_Common_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Basic_UncommonMax; i++) { - species = SpeciesBasicUncommon[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Basic_Uncommon_Owned = (sGacha->Basic_Uncommon_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Basic_RareMax; i++) { - species = SpeciesBasicRare[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Basic_Rare_Owned = (sGacha->Basic_Rare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Basic_UltraRareMax; i++) { - species = SpeciesBasicUltraRare[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Basic_UltraRare_Owned = (sGacha->Basic_UltraRare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - sGacha->Basic_Total_Owned = (sGacha->Basic_Common_Owned + sGacha->Basic_Uncommon_Owned + sGacha->Basic_Rare_Owned + sGacha->Basic_UltraRare_Owned); - - // Great - for (i = 0; i < sGacha->Great_CommonMax; i++) { - species = SpeciesGreatCommon[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Great_Common_Owned = (sGacha->Great_Common_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Great_UncommonMax; i++) { - species = SpeciesGreatUncommon[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Great_Uncommon_Owned = (sGacha->Great_Uncommon_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Great_RareMax; i++) { - species = SpeciesGreatRare[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Great_Rare_Owned = (sGacha->Great_Rare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Great_UltraRareMax; i++) { - species = SpeciesGreatUltraRare[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Great_UltraRare_Owned = (sGacha->Great_UltraRare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - sGacha->Great_Total_Owned = (sGacha->Great_Common_Owned + sGacha->Great_Uncommon_Owned + sGacha->Great_Rare_Owned + sGacha->Great_UltraRare_Owned); - - // Ultra - for (i = 0; i < sGacha->Ultra_CommonMax; i++) { - species = SpeciesUltraCommon[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Ultra_Common_Owned = (sGacha->Ultra_Common_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Ultra_UncommonMax; i++) { - species = SpeciesUltraUncommon[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Ultra_Uncommon_Owned = (sGacha->Ultra_Uncommon_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Ultra_RareMax; i++) { - species = SpeciesUltraRare[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Ultra_Rare_Owned = (sGacha->Ultra_Rare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Ultra_UltraRareMax; i++) { - species = SpeciesUltraUltraRare[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Ultra_UltraRare_Owned = (sGacha->Ultra_UltraRare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - sGacha->Ultra_Total_Owned = (sGacha->Ultra_Common_Owned + sGacha->Ultra_Uncommon_Owned + sGacha->Ultra_Rare_Owned + sGacha->Ultra_UltraRare_Owned); - - // Master - for (i = 0; i < sGacha->Master_CommonMax; i++) { - species = SpeciesMasterCommon[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Master_Common_Owned = (sGacha->Master_Common_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Master_UncommonMax; i++) { - species = SpeciesMasterUncommon[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Master_Uncommon_Owned = (sGacha->Master_Uncommon_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Master_RareMax; i++) { - species = SpeciesMasterRare[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Master_Rare_Owned = (sGacha->Master_Rare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - for (i = 0; i < sGacha->Master_UltraRareMax; i++) { - species = SpeciesMasterUltraRare[i].species; - nationalDexNo = SpeciesToNationalPokedexNum(species); - sGacha->Master_UltraRare_Owned = (sGacha->Master_UltraRare_Owned + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); - } - sGacha->Master_Total_Owned = (sGacha->Master_Common_Owned + sGacha->Master_Uncommon_Owned + sGacha->Master_Rare_Owned + sGacha->Master_UltraRare_Owned); + u16 species; + int nationalDexNo; + int i; + + sGacha->ownedCommon = 0; + sGacha->ownedUncommon = 0; + sGacha->ownedRare = 0; + sGacha->ownedUltraRare = 0; + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + for (i = 0; i < ARRAY_COUNT(sSpeciesGachaBasicCommon); i++) + { + species = sSpeciesGachaBasicCommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedCommon = (sGacha->ownedCommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesGachaBasicUncommon); i++) + { + species = sSpeciesGachaBasicUncommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedUncommon = (sGacha->ownedUncommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesGachaBasicRare); i++) + { + species = sSpeciesGachaBasicRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedRare = (sGacha->ownedRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesGachaBasicUltraRare); i++) + { + species = sSpeciesGachaBasicUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedUltraRare = (sGacha->ownedUltraRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + break; + case GACHA_GREAT: + for (i = 0; i < ARRAY_COUNT(sSpeciesGreatCommon); i++) + { + species = sSpeciesGreatCommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedCommon = (sGacha->ownedCommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesGreatUncommon); i++) + { + species = sSpeciesGreatUncommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedUncommon = (sGacha->ownedUncommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesGreatRare); i++) + { + species = sSpeciesGreatRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedRare = (sGacha->ownedRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesGreatUltraRare); i++) + { + species = sSpeciesGreatUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedUltraRare = (sGacha->ownedUltraRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + break; + case GACHA_ULTRA: + for (i = 0; i < ARRAY_COUNT(sSpeciesUltraCommon); i++) + { + species = sSpeciesUltraCommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedCommon = (sGacha->ownedCommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesUltraUncommon); i++) + { + species = sSpeciesUltraUncommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedUncommon = (sGacha->ownedUncommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesUltraRare); i++) + { + species = sSpeciesUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedRare = (sGacha->ownedRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesUltraUltraRare); i++) + { + species = sSpeciesUltraUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedUltraRare = (sGacha->ownedUltraRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + break; + case GACHA_MASTER: + for (i = 0; i < ARRAY_COUNT(sSpeciesMasterCommon); i++) + { + species = sSpeciesMasterCommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedCommon = (sGacha->ownedCommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesMasterUncommon); i++) + { + species = sSpeciesMasterUncommon[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedUncommon = (sGacha->ownedUncommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesMasterRare); i++) + { + species = sSpeciesMasterRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedRare = (sGacha->ownedRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + for (i = 0; i < ARRAY_COUNT(sSpeciesMasterUltraRare); i++) + { + species = sSpeciesMasterUltraRare[i].species; + nationalDexNo = SpeciesToNationalPokedexNum(species); + sGacha->ownedUltraRare = (sGacha->ownedUltraRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); + } + break; + } } u8 CalculateChanceForCategory(u16 owned, u16 available, u8 baseChance, u16 wager) @@ -2788,21 +2650,19 @@ u8 CalculateChanceForCategory(u16 owned, u16 available, u8 baseChance, u16 wager // Determine minimum wager based on sGacha->GachaId switch (sGacha->GachaId) { - case 1: - minWager = 50; - break; - case 2: - minWager = 250; - break; - case 3: - minWager = 1000; - break; - case 4: - minWager = 4500; - break; - default: - minWager = 0; // Should never be 0, but failsafe - break; + default: + case GACHA_BASIC: + minWager = GACHA_BASIC_MIN_WAGER; + break; + case GACHA_GREAT: + minWager = GACHA_GREAT_MIN_WAGER; + break; + case GACHA_ULTRA: + minWager = GACHA_ULTRA_MIN_WAGER; + break; + case GACHA_MASTER: + minWager = GACHA_MASTER_MIN_WAGER; + break; } // If available Pokémon is 0, there is no chance @@ -2832,334 +2692,164 @@ u8 CalculateChanceForCategory(u16 owned, u16 available, u8 baseChance, u16 wager // Function to determine if the player gets a new Pokémon, and the rarity void DeterminePokemonRarityAndNewStatus(void) { - u16 species; + u16 species; u16 totalNotOwned; u8 totalOwned; u16 totalMax; + u16 newPokemonChance; + u16 randomValue; + u32 attempts = 1000; + + while (TRUE) + { + randomValue = (Random() % 100); // Generate random value between 0 and 100 + + // Determine Rarity based on the chances + if (randomValue < RARITY_COMMON_ODDS) + sGacha->Rarity = RARITY_COMMON; // Common + else if (randomValue < (RARITY_COMMON_ODDS + RARITY_UNCOMMON_ODDS)) + sGacha->Rarity = RARITY_UNCOMMON; // Uncommon + else if (randomValue < (RARITY_COMMON_ODDS + RARITY_UNCOMMON_ODDS + RARITY_RARE_ODDS)) + sGacha->Rarity = RARITY_RARE; // Rare + else + sGacha->Rarity = RARITY_ULTRA_RARE; // Ultra Rare + + // Get the number of available and owned Pokémon based on rarity + totalMax = GetMaxAvailableGachaRaritySpecies(sGacha->GachaId, sGacha->Rarity); + switch (sGacha->Rarity) + { + default: + case RARITY_COMMON: + totalOwned = sGacha->ownedCommon; + break; + case RARITY_UNCOMMON: + totalOwned = sGacha->ownedUncommon; + break; + case RARITY_RARE: + totalOwned = sGacha->ownedRare; + break; + case RARITY_ULTRA_RARE: + totalOwned = sGacha->ownedUltraRare; + break; + } + + // Calculate the total number of Pokémon the player doesn't own + totalNotOwned = totalMax - totalOwned; + + if (totalNotOwned <= 0) + { + // If all Pokémon of the selected rarity are owned, restart the process (reroll) + continue; // This will make the loop restart from the beginning + } + + // Generate a random value for the chances + randomValue = Random() % 100; // Generate random value between 0-99 + + // Check if we should get a new Pokémon based on the odds + if (sGacha->newMonOdds >= randomValue) + { + // Loop until a new (not owned) Pokémon is found + do { + newPokemonChance = (Random() % totalMax); // Random pull from the available pool + species = GetGachaMon(newPokemonChance); // Get the Pokémon species based on the random value + attempts--; + if (attempts < 1) + { + attempts = 1000; + randomValue = (Random() % 100); // Generate random value between 0 and 100 + + // Determine Rarity based on the chances + if (randomValue < RARITY_COMMON_ODDS) + sGacha->Rarity = RARITY_COMMON; + else if (randomValue < (RARITY_COMMON_ODDS + RARITY_UNCOMMON_ODDS)) + sGacha->Rarity = RARITY_UNCOMMON; + else if (randomValue < (RARITY_COMMON_ODDS + RARITY_UNCOMMON_ODDS + RARITY_RARE_ODDS)) + sGacha->Rarity = RARITY_RARE; + else + sGacha->Rarity = RARITY_ULTRA_RARE; + } + // If the Pokémon is not owned, we found a new Pokémon + } while (IsNotValidUnownedSpecies(species)); // Continue if owned (IsNotValidUnownedSpecies returns TRUE) + + // If we've broken out of the loop, we have a new Pokémon + sGacha->CalculatedSpecies = species; // Store the species of the new Pokémon + break; // Exit the loop after finding a new Pokémon + } + else + { + // Loop until an owned Pokémon is found + do { + newPokemonChance = (Random() % totalMax); // Random pull from the available pool + species = GetGachaMon(newPokemonChance); // Get the Pokémon species based on the random value + attempts--; + if (attempts < 1) + { + attempts = 1000; + randomValue = (Random() % 100); // Generate random value between 0 and 100 + + // Determine Rarity based on the chances + if (randomValue < RARITY_COMMON_ODDS) + sGacha->Rarity = RARITY_COMMON; + else if (randomValue < (RARITY_COMMON_ODDS + RARITY_UNCOMMON_ODDS)) + sGacha->Rarity = RARITY_UNCOMMON; + else if (randomValue < (RARITY_COMMON_ODDS + RARITY_UNCOMMON_ODDS + RARITY_RARE_ODDS)) + sGacha->Rarity = RARITY_RARE; + else + sGacha->Rarity = RARITY_ULTRA_RARE; + } + + // If the Pokémon is owned, we have an owned Pokémon + } while (IsNotValidOwnedSpecies(species)); // Continue if not owned + + // If we've broken out of the loop, we have an owned Pokémon + sGacha->CalculatedSpecies = species; // Store the species of the owned Pokémon + break; // Exit the loop after finding an owned Pokémon + } + } +} + +static void CalculatePullOdds(void) +{ + u16 totalCommonAvailable; + u16 totalUncommonAvailable; + u16 totalRareAvailable; + u16 totalUltraRareAvailable; + u16 wager; u8 commonChance; u8 uncommonChance; u8 rareChance; u8 ultraRareChance; - u16 newPokemonChance; - u16 randomValue; - u32 attempts = 1000; - - commonChance = sGacha->commonChance; - uncommonChance = sGacha->uncommonChance; - rareChance = sGacha->rareChance; - ultraRareChance = sGacha->ultraRareChance; - - while (1) { - randomValue = (Random() % 100); // Generate random value between 0 and 100 - - // Determine Rarity based on the chances - if (randomValue < 50) { - sGacha->Rarity = 0; // Common - } - else if (randomValue < 80) { - sGacha->Rarity = 1; // Uncommon - } - else if (randomValue < 95) { - sGacha->Rarity = 2; // Rare - } - else { - sGacha->Rarity = 3; // Ultra Rare - } - - // Get the number of available and owned Pokémon based on rarity - if (sGacha->GachaId == 1) { // Basic - if (sGacha->Rarity == 0) { // Common - totalOwned = sGacha->Basic_Common_Owned; - totalMax = sGacha->Basic_CommonMax; - } - else if (sGacha->Rarity == 1) { // Uncommon - totalOwned = sGacha->Basic_Uncommon_Owned; - totalMax = sGacha->Basic_UncommonMax; - } - else if (sGacha->Rarity == 2) { // Rare - totalOwned = sGacha->Basic_Rare_Owned; - totalMax = sGacha->Basic_RareMax; - } - else { // Ultra Rare - totalOwned = sGacha->Basic_UltraRare_Owned; - totalMax = sGacha->Basic_UltraRareMax; - } - sGacha->Temp_Total = totalMax; - } - else if (sGacha->GachaId == 2) { // Great - if (sGacha->Rarity == 0) { // Common - totalOwned = sGacha->Great_Common_Owned; - totalMax = sGacha->Great_CommonMax; - } - else if (sGacha->Rarity == 1) { // Uncommon - totalOwned = sGacha->Great_Uncommon_Owned; - totalMax = sGacha->Great_UncommonMax; - } - else if (sGacha->Rarity == 2) { // Rare - totalOwned = sGacha->Great_Rare_Owned; - totalMax = sGacha->Great_RareMax; - } - else { // Ultra Rare - totalOwned = sGacha->Great_UltraRare_Owned; - totalMax = sGacha->Great_UltraRareMax; - } - sGacha->Temp_Total = totalMax; - } - else if (sGacha->GachaId == 3) { // Ultra - if (sGacha->Rarity == 0) { // Common - totalOwned = sGacha->Ultra_Common_Owned; - totalMax = sGacha->Ultra_CommonMax; - } - else if (sGacha->Rarity == 1) { // Uncommon - totalOwned = sGacha->Ultra_Uncommon_Owned; - totalMax = sGacha->Ultra_UncommonMax; - } - else if (sGacha->Rarity == 2) { // Rare - totalOwned = sGacha->Ultra_Rare_Owned; - totalMax = sGacha->Ultra_RareMax; - } - else { // Ultra Rare - totalOwned = sGacha->Ultra_UltraRare_Owned; - totalMax = sGacha->Ultra_UltraRareMax; - } - sGacha->Temp_Total = totalMax; - } - else { // Master - if (sGacha->Rarity == 0) { // Common - totalOwned = sGacha->Master_Common_Owned; - totalMax = sGacha->Master_CommonMax; - } - else if (sGacha->Rarity == 1) { // Uncommon - totalOwned = sGacha->Master_Uncommon_Owned; - totalMax = sGacha->Master_UncommonMax; - } - else if (sGacha->Rarity == 2) { // Rare - totalOwned = sGacha->Master_Rare_Owned; - totalMax = sGacha->Master_RareMax; - } - else { // Ultra Rare - totalOwned = sGacha->Master_UltraRare_Owned; - totalMax = sGacha->Master_UltraRareMax; - } - sGacha->Temp_Total = totalMax; - } - // Repeat similar logic for Great, Ultra, Master, etc. - // Same logic for GachaId == 2, 3, and others - - // Calculate the total number of Pokémon the player doesn't own - totalNotOwned = totalMax - totalOwned; - - if (totalNotOwned <= 0) { - // If all Pokémon of the selected rarity are owned, restart the process (reroll) - continue; // This will make the loop restart from the beginning - } - - // Generate a random value for the chances - randomValue = Random() % 100; // Generate random value between 0-99 - - // Check if we should get a new Pokémon based on the odds - if (sGacha->Odds >= randomValue) { - // Loop until a new (not owned) Pokémon is found - do { - newPokemonChance = (Random() % totalMax); // Random pull from the available pool - species = GetPokemon(newPokemonChance); // Get the Pokémon species based on the random value - attempts--; - if (attempts < 1) { - attempts = 1000; - randomValue = (Random() % 100); // Generate random value between 0 and 100 - - // Determine Rarity based on the chances - if (randomValue < 50) { - sGacha->Rarity = 0; // Common - } - else if (randomValue < 80) { - sGacha->Rarity = 1; // Uncommon - } - else if (randomValue < 95) { - sGacha->Rarity = 2; // Rare - } - else { - sGacha->Rarity = 3; // Ultra Rare - } - } - // If the Pokémon is not owned (CheckIfOwned returns 0), we found a new Pokémon - } while (CheckIfOwned(species) == 1); // Continue if owned (CheckIfOwned returns 1) - - // If we've broken out of the loop, we have a new Pokémon - sGacha->IsNewPokemon = 1; // Mark as a new Pokémon - sGacha->CalculatedSpecies = species; // Store the species of the new Pokémon - break; // Exit the loop after finding a new Pokémon - } - else { - // Loop until an owned Pokémon is found - do { - newPokemonChance = (Random() % totalMax); // Random pull from the available pool - species = GetPokemon(newPokemonChance); // Get the Pokémon species based on the random value - attempts--; - if (attempts < 1) { - attempts = 1000; - randomValue = (Random() % 100); // Generate random value between 0 and 100 - - // Determine Rarity based on the chances - if (randomValue < 50) { - sGacha->Rarity = 0; // Common - } - else if (randomValue < 80) { - sGacha->Rarity = 1; // Uncommon - } - else if (randomValue < 95) { - sGacha->Rarity = 2; // Rare - } - else { - sGacha->Rarity = 3; // Ultra Rare - } - } - - // If the Pokémon is owned (CheckIfOwned returns 1), we have an owned Pokémon - } while (CheckIfOwned(species) == 0); // Continue if not owned (CheckIfOwned returns 0) - - // If we've broken out of the loop, we have an owned Pokémon - sGacha->IsNewPokemon = 0; // Mark as an owned Pokémon - sGacha->CalculatedSpecies = species; // Store the species of the owned Pokémon - break; // Exit the loop after finding an owned Pokémon - } - } -} + u8 totalChance; -static void CalculatePullOdds(void) -{ - u16 totalCommonOwned; - u16 totalCommonAvailable; - u16 totalUncommonOwned; - u16 totalUncommonAvailable; - u16 totalRareOwned; - u16 totalRareAvailable; - u16 totalUltraRareOwned; - u16 totalUltraRareAvailable; - u16 wager; - u8 commonChance; - u8 uncommonChance; - u8 rareChance; - u8 ultraRareChance; - u8 totalChance; - - // Constants - const u8 COMMON_ODDS = 50; // 50% chance for common - const u8 UNCOMMON_ODDS = 30; // 30% chance for uncommon - const u8 RARE_ODDS = 15; // 15% chance for rare - const u8 ULTRA_RARE_ODDS = 5; // 5% chance for ultra rare - - if (sGacha->GachaId == 1) // Basic - { - // Variables to store the total numbers of owned and available Pokemon - totalCommonOwned = sGacha->Basic_Common_Owned; - totalCommonAvailable = sGacha->Basic_CommonMax; - - totalUncommonOwned = sGacha->Basic_Uncommon_Owned; - totalUncommonAvailable = sGacha->Basic_UncommonMax; - - totalRareOwned = sGacha->Basic_Rare_Owned; - totalRareAvailable = sGacha->Basic_RareMax; - - totalUltraRareOwned = sGacha->Basic_UltraRare_Owned; - totalUltraRareAvailable = sGacha->Basic_UltraRareMax; - - wager = sGacha->wager; // Player's wager (0-9999) - - // Calculate the chance for each category - commonChance = CalculateChanceForCategory(totalCommonOwned, totalCommonAvailable, COMMON_ODDS, wager); - uncommonChance = CalculateChanceForCategory(totalUncommonOwned, totalUncommonAvailable, UNCOMMON_ODDS, wager); - rareChance = CalculateChanceForCategory(totalRareOwned, totalRareAvailable, RARE_ODDS, wager); - ultraRareChance = CalculateChanceForCategory(totalUltraRareOwned, totalUltraRareAvailable, ULTRA_RARE_ODDS, wager); - } - else if (sGacha->GachaId == 2) // Great - { - // Variables to store the total numbers of owned and available Pokemon - totalCommonOwned = sGacha->Great_Common_Owned; - totalCommonAvailable = sGacha->Great_CommonMax; - - totalUncommonOwned = sGacha->Great_Uncommon_Owned; - totalUncommonAvailable = sGacha->Great_UncommonMax; - - totalRareOwned = sGacha->Great_Rare_Owned; - totalRareAvailable = sGacha->Great_RareMax; - - totalUltraRareOwned = sGacha->Great_UltraRare_Owned; - totalUltraRareAvailable = sGacha->Great_UltraRareMax; - - wager = sGacha->wager; // Player's wager (0-9999) - - // Calculate the chance for each category - commonChance = CalculateChanceForCategory(totalCommonOwned, totalCommonAvailable, COMMON_ODDS, wager); - uncommonChance = CalculateChanceForCategory(totalUncommonOwned, totalUncommonAvailable, UNCOMMON_ODDS, wager); - rareChance = CalculateChanceForCategory(totalRareOwned, totalRareAvailable, RARE_ODDS, wager); - ultraRareChance = CalculateChanceForCategory(totalUltraRareOwned, totalUltraRareAvailable, ULTRA_RARE_ODDS, wager); - } - else if (sGacha->GachaId == 3) // Ultra - { - // Variables to store the total numbers of owned and available Pokemon - totalCommonOwned = sGacha->Ultra_Common_Owned; - totalCommonAvailable = sGacha->Ultra_CommonMax; - - totalUncommonOwned = sGacha->Ultra_Uncommon_Owned; - totalUncommonAvailable = sGacha->Ultra_UncommonMax; - - totalRareOwned = sGacha->Ultra_Rare_Owned; - totalRareAvailable = sGacha->Ultra_RareMax; - - totalUltraRareOwned = sGacha->Ultra_UltraRare_Owned; - totalUltraRareAvailable = sGacha->Ultra_UltraRareMax; - - wager = sGacha->wager; // Player's wager (0-9999) - - // Calculate the chance for each category - commonChance = CalculateChanceForCategory(totalCommonOwned, totalCommonAvailable, COMMON_ODDS, wager); - uncommonChance = CalculateChanceForCategory(totalUncommonOwned, totalUncommonAvailable, UNCOMMON_ODDS, wager); - rareChance = CalculateChanceForCategory(totalRareOwned, totalRareAvailable, RARE_ODDS, wager); - ultraRareChance = CalculateChanceForCategory(totalUltraRareOwned, totalUltraRareAvailable, ULTRA_RARE_ODDS, wager); - } - else // Master - { - // Variables to store the total numbers of owned and available Pokemon - totalCommonOwned = sGacha->Master_Common_Owned; - totalCommonAvailable = sGacha->Master_CommonMax; - - totalUncommonOwned = sGacha->Master_Uncommon_Owned; - totalUncommonAvailable = sGacha->Master_UncommonMax; - - totalRareOwned = sGacha->Master_Rare_Owned; - totalRareAvailable = sGacha->Master_RareMax; - - totalUltraRareOwned = sGacha->Master_UltraRare_Owned; - totalUltraRareAvailable = sGacha->Master_UltraRareMax; - - wager = sGacha->wager; // Player's wager (0-9999) - - // Calculate the chance for each category - commonChance = CalculateChanceForCategory(totalCommonOwned, totalCommonAvailable, COMMON_ODDS, wager); - uncommonChance = CalculateChanceForCategory(totalUncommonOwned, totalUncommonAvailable, UNCOMMON_ODDS, wager); - rareChance = CalculateChanceForCategory(totalRareOwned, totalRareAvailable, RARE_ODDS, wager); - ultraRareChance = CalculateChanceForCategory(totalUltraRareOwned, totalUltraRareAvailable, ULTRA_RARE_ODDS, wager); - } - - sGacha->commonChance = commonChance; - sGacha->uncommonChance = uncommonChance; - sGacha->rareChance = rareChance; - sGacha->ultraRareChance = ultraRareChance; + totalCommonAvailable = GetMaxAvailableGachaRaritySpecies(sGacha->GachaId, RARITY_COMMON); + totalUncommonAvailable = GetMaxAvailableGachaRaritySpecies(sGacha->GachaId, RARITY_UNCOMMON); + totalRareAvailable = GetMaxAvailableGachaRaritySpecies(sGacha->GachaId, RARITY_RARE); + totalUltraRareAvailable = GetMaxAvailableGachaRaritySpecies(sGacha->GachaId, RARITY_ULTRA_RARE); + + wager = sGacha->wager; // Player's wager (0-9999) + + // Calculate the chance for each category + commonChance = CalculateChanceForCategory(sGacha->ownedCommon, totalCommonAvailable, RARITY_COMMON_ODDS, wager); + uncommonChance = CalculateChanceForCategory(sGacha->ownedUncommon, totalUncommonAvailable, RARITY_UNCOMMON_ODDS, wager); + rareChance = CalculateChanceForCategory(sGacha->ownedRare, totalRareAvailable, RARITY_RARE_ODDS, wager); + ultraRareChance = CalculateChanceForCategory(sGacha->ownedUltraRare, totalUltraRareAvailable, RARITY_ULTRA_RARE_ODDS, wager); + + sGacha->commonChance = commonChance; + sGacha->uncommonChance = uncommonChance; + sGacha->rareChance = rareChance; + sGacha->ultraRareChance = ultraRareChance; // Final Odds as a sum of chances - totalChance = commonChance + uncommonChance + rareChance + ultraRareChance; - if (totalChance <= 100) { - sGacha->Odds = commonChance + uncommonChance + rareChance + ultraRareChance; - } - else { - sGacha->Odds = 100; - } + totalChance = commonChance + uncommonChance + rareChance + ultraRareChance; + if (totalChance <= 100) + sGacha->newMonOdds = commonChance + uncommonChance + rareChance + ultraRareChance; + else + sGacha->newMonOdds = 100; } static void AButton(void) -{ +{ if (sGacha->Trigger == 1) { sGacha->state = STATE_INIT_A; @@ -3173,172 +2863,120 @@ static void AButton(void) static void UpdateCursorPosition(s16 x) { // Update cursor position based on X coordinate - if (x == 231) { + if (x == 231) sGacha->cursorPosition = 3; // Ones - } else if (x == 223) { + else if (x == 223) sGacha->cursorPosition = 2; // Tens - } else if (x == 215) { + else if (x == 215) sGacha->cursorPosition = 1; // Hundreds - } else { + else sGacha->cursorPosition = 0; // Thousands - } } static void UpdateWagerDigit(int direction) { - u8 place; + u8 place; u16 tempwager; u8 wagerDigits[4]; u16 newWager; u16 d; - int i; - u16 maxWager; - - place = sGacha->cursorPosition; - d = 1000; - tempwager = sGacha->wager; - - for (i = 0; i < 4; i++) + int i; + u16 maxWager; + u16 minWager; + + place = sGacha->cursorPosition; + d = 1000; + tempwager = sGacha->wager; + + for (i = 0; i < 4; i++) { - if (tempwager >= d) { - wagerDigits[i] = tempwager / d; - } - else { - wagerDigits[i] = 0; - } + if (tempwager >= d) + wagerDigits[i] = tempwager / d; + else + wagerDigits[i] = 0; tempwager = tempwager % d; d = d / 10; } - maxWager = GetCoins(); // Maximum wager is the current coins + maxWager = GetCoins(); // Maximum wager is the current coins // wagerDigits[0] = Thousands place - // wagerDigits[1] = Hundreds place + // wagerDigits[1] = Hundreds place // wagerDigits[2] = Tens place // wagerDigits[3] = Ones place - if (direction == 0) { // Up - if (wagerDigits[place] == 9) { - // Set the current digit to 0 - wagerDigits[place] = 0; - if (place > 0) { - place--; // Move to the next digit on the left - } + if (direction == 0) // Up + { + if (wagerDigits[place] == 9) + { + // Set the current digit to 0 + wagerDigits[place] = 0; + if (place > 0) + place--; // Move to the next digit on the left } - // Otherwise, simply increase the digit by 1 - wagerDigits[place]++; - PlaySE(SE_SELECT); - + // Otherwise, simply increase the digit by 1 + wagerDigits[place]++; + PlaySE(SE_SELECT); + // Ensure the new wager doesn't exceed max available coins newWager = (wagerDigits[0] * 1000) + (wagerDigits[1] * 100) + (wagerDigits[2] * 10) + wagerDigits[3]; - if (newWager > maxWager) { - // If the new wager exceeds available coins, revert back + if (newWager > maxWager) // If the new wager exceeds available coins, revert back newWager = GetCoins(); - } - // Update the wager if it's within the limit - sGacha->wager = newWager; + // Update the wager if it's within the limit + sGacha->wager = newWager; } - else if (direction == 2) { // Down - if (wagerDigits[place] > 0) { + else if (direction == 2) // Down + { + if (wagerDigits[place] > 0) + { // Decrease the digit by 1 wagerDigits[place]--; sGacha->wager = (wagerDigits[0] * 1000) + (wagerDigits[1] * 100) + (wagerDigits[2] * 10) + wagerDigits[3]; - PlaySE(SE_SELECT); + PlaySE(SE_SELECT); } } // Update sprite animation based on the new value gSprites[sGacha->ArrowsSpriteId].animNum = (wagerDigits[place] == 0) ? 1 : 0; SetPlayerDigits(sGacha->wager); // Update the displayed wager - if (sGacha->GachaId == 1) - { - if (sGacha->wager > 49) - { - ResetMessage(); - CalculatePullOdds(); - sGacha->Trigger = 1; - //gSprites[sGacha->CTAspriteId].animPaused = FALSE; - gSprites[sGacha->CTAspriteId].animNum = 1; // On - ShowMessage(); - } - else - { - ResetMessage(); - //CalculatePullOdds(); - sGacha->Odds = 0; - sGacha->Trigger = 0; - gSprites[sGacha->CTAspriteId].animNum = 0; // Off - //gSprites[sGacha->CTAspriteId].animPaused = TRUE; - ShowMessage(); - } - } - else if (sGacha->GachaId == 2) - { - if (sGacha->wager > 249) - { - ResetMessage(); - CalculatePullOdds(); - sGacha->Trigger = 1; - //gSprites[sGacha->CTAspriteId].animPaused = FALSE; - gSprites[sGacha->CTAspriteId].animNum = 1; // On - ShowMessage(); - } - else - { - ResetMessage(); - //CalculatePullOdds(); - sGacha->Odds = 0; - sGacha->Trigger = 0; - gSprites[sGacha->CTAspriteId].animNum = 0; // Off - //gSprites[sGacha->CTAspriteId].animPaused = TRUE; - ShowMessage(); - } - } - else if (sGacha->GachaId == 3) - { - if (sGacha->wager > 999) - { - ResetMessage(); - CalculatePullOdds(); - sGacha->Trigger = 1; - //gSprites[sGacha->CTAspriteId].animPaused = FALSE; - gSprites[sGacha->CTAspriteId].animNum = 1; // On - ShowMessage(); - } - else - { - ResetMessage(); - //CalculatePullOdds(); - sGacha->Odds = 0; - sGacha->Trigger = 0; - gSprites[sGacha->CTAspriteId].animNum = 0; // Off - //gSprites[sGacha->CTAspriteId].animPaused = TRUE; - ShowMessage(); - } - } - else - { - if (sGacha->wager > 4499) - { - ResetMessage(); - CalculatePullOdds(); - sGacha->Trigger = 1; - //gSprites[sGacha->CTAspriteId].animPaused = FALSE; - gSprites[sGacha->CTAspriteId].animNum = 1; // On - ShowMessage(); - } - else - { - ResetMessage(); - //CalculatePullOdds(); - sGacha->Odds = 0; - sGacha->Trigger = 0; - gSprites[sGacha->CTAspriteId].animNum = 0; // Off - //gSprites[sGacha->CTAspriteId].animPaused = TRUE; - ShowMessage(); - } - } + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + minWager = GACHA_BASIC_MIN_WAGER; + break; + case GACHA_GREAT: + minWager = GACHA_GREAT_MIN_WAGER; + break; + case GACHA_ULTRA: + minWager = GACHA_ULTRA_MIN_WAGER; + break; + case GACHA_MASTER: + minWager = GACHA_MASTER_MIN_WAGER; + break; + } + + if (sGacha->wager >= minWager) + { + ResetMessage(); + CalculatePullOdds(); + sGacha->Trigger = 1; + //gSprites[sGacha->CTAspriteId].animPaused = FALSE; + gSprites[sGacha->CTAspriteId].animNum = 1; // On + ShowMessage(); + } + else + { + ResetMessage(); + //CalculatePullOdds(); + sGacha->newMonOdds = 0; + sGacha->Trigger = 0; + gSprites[sGacha->CTAspriteId].animNum = 0; // Off + //gSprites[sGacha->CTAspriteId].animPaused = TRUE; + ShowMessage(); + } } static void MoveCursor(int direction) @@ -3346,14 +2984,17 @@ static void MoveCursor(int direction) struct Sprite *cursorSprite = &gSprites[sGacha->ArrowsSpriteId]; int curX = cursorSprite->x; int destX = curX; - u16 num = sGacha->wager; // Move cursor left or right (X axis) - if (direction == 1 || direction == 3) { // Right or Left - if (direction == 1 && curX < 231) { + if (direction == 1 || direction == 3)// Right or Left + { + if (direction == 1 && curX < 231) + { destX = curX + 8; PlaySE(SE_SELECT); - } else if (direction == 3 && curX > 207) { + } + else if (direction == 3 && curX > 207) + { destX = curX - 8; PlaySE(SE_SELECT); } @@ -3363,7 +3004,8 @@ static void MoveCursor(int direction) } // Move cursor up or down (change wager digit) - else if (direction == 0 || direction == 2) { // Up or Down + else if (direction == 0 || direction == 2) // Up or Down + { UpdateWagerDigit(direction); // Update the corresponding digit } } @@ -3374,19 +3016,9 @@ static void ExitGacha(void) { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); FREE_AND_SET_NULL(sGacha); - FREE_AND_SET_NULL(sTradeAnim); } } -static void EggHatchPrintMessage(u8 windowId, u8 *string, u8 x, u8 y, u8 speed) -{ - FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - sGacha->textColor[0] = 0; - sGacha->textColor[1] = 5; - sGacha->textColor[2] = 6; - AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 0, 0, sGacha->textColor, speed, string); -} - static void HandleInput_GachaComplete(void) { if (IsFanfareTaskInactive()) @@ -3401,185 +3033,142 @@ static void HandleInput_GachaComplete(void) static void HandleInput(void) { - if (sGacha->Input == 0) - { - if (JOY_NEW(A_BUTTON)) - { - AButton(); - } - else if (JOY_NEW(B_BUTTON)) - { - if (sGacha->exitToggle == 0) { - sGacha->state = GACHA_STATE_START_EXIT; - } - } - else if (JOY_NEW(DPAD_UP)) - { - MoveCursor(0); - } - else if (JOY_NEW(DPAD_RIGHT)) - { - MoveCursor(1); - } - else if (JOY_NEW(DPAD_DOWN)) - { - MoveCursor(2); - } - else if (JOY_NEW(DPAD_LEFT)) - { - MoveCursor(3); - } - } -} - -u8 GenerateRandomIV(void) { - return (Random() % 17) + 15; // Random value between 15 and 31 -} - -static void Fade(void) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sGacha->state = STATE_POKEBALL_INIT; + if (sGacha->Input == 0) + { + if (JOY_NEW(A_BUTTON)) + { + AButton(); + } + else if (JOY_NEW(B_BUTTON)) + { + sGacha->state = GACHA_STATE_START_EXIT; + } + else if (JOY_NEW(DPAD_UP)) + { + MoveCursor(0); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + MoveCursor(1); + } + else if (JOY_NEW(DPAD_DOWN)) + { + MoveCursor(2); + } + else if (JOY_NEW(DPAD_LEFT)) + { + MoveCursor(3); + } + } } static void RemoveGarbage(void) { - DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[0]]); - DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[1]]); - DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[2]]); - DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[3]]); - DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[0]]); - DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[1]]); - DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[2]]); - DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[3]]); - DestroySpriteAndFreeResources(&gSprites[sGacha->KnobSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sGacha->DigitalTextSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sGacha->LotteryJPNspriteId]); - DestroySpriteAndFreeResources(&gSprites[sGacha->CreditMenu1Id]); - DestroySpriteAndFreeResources(&gSprites[sGacha->CreditMenu2Id]); - DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonOneSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonTwoSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonThreeSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sGacha->ArrowsSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sGacha->CTAspriteId]); - ResetMessage(); - sTradeAnim->bg1vofs = 0; - sTradeAnim->bg1hofs = 0; - - sTradeAnim->bg2vofs = 0; - sTradeAnim->bg2hofs = 0; - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | - BGCNT_CHARBASE(1) | - BGCNT_16COLOR | - BGCNT_SCREENBASE(18) | - BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, BG_PLTT_ID(1), 3 * PLTT_SIZE_4BPP); - DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); - DmaCopy16Defvars(3, gTrade_Tilemap, (void *) BG_SCREEN_ADDR(18), 0x1000); - - gPaletteFade.bufferTransferDisabled = TRUE; - gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[0]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[1]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[2]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditSpriteIds[3]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[0]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[1]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[2]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PlayerSpriteIds[3]]); + DestroySpriteAndFreeResources(&gSprites[sGacha->KnobSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->DigitalTextSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->LotteryJPNspriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditMenu1Id]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CreditMenu2Id]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonOneSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonTwoSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->PokemonThreeSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->ArrowsSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sGacha->CTAspriteId]); + ResetMessage(); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | + BGCNT_CHARBASE(1) | + BGCNT_16COLOR | + BGCNT_SCREENBASE(18) | + BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, BG_PLTT_ID(1), 3 * PLTT_SIZE_4BPP); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gTrade_Tilemap, (void *) BG_SCREEN_ADDR(18), 0x1000); + + gPaletteFade.bufferTransferDisabled = TRUE; + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK); SetVBlankCallback(GachaVBlankCallback); } -static void GachaSetMonNickname(void) -{ - SetMonData(&sGacha->GachaMon, MON_DATA_NICKNAME, gStringVar3); - FreeMonSpritesGfx(); - sGacha->state = GACHA_STATE_START_EXIT; -} - void ShowFinalMessage(void) { - struct WindowTemplate template; + struct WindowTemplate template; - SetWindowTemplateFields(&template, 1, 2, 15, 26, 4, 0xF, 0x194); - + SetWindowTemplateFields(&template, 1, 2, 15, 26, 4, 0xF, 0x194); + sTextWindowId = AddWindow(&template); FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); PutWindowTilemap(sTextWindowId); LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); - DrawStdWindowFrame(sTextWindowId, FALSE); - StringCopy(gStringVar1, GetSpeciesName(sGacha->CalculatedSpecies)); + DrawStdWindowFrame(sTextWindowId, FALSE); + StringCopy(gStringVar1, GetSpeciesName(sGacha->CalculatedSpecies)); StringExpandPlaceholders(gStringVar4, sText_FromGacha); AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, gStringVar4, 0, 1, 0, 0); - CopyWindowToVram(sTextWindowId, 3); + CopyWindowToVram(sTextWindowId, 3); } static void GachaMain(u8 taskId) { - u16 species; - u8 fixedIV; - u8 hasFixedPersonality = TRUE; - u32 fixedPersonality; - u8 trainerId[TRAINER_ID_LENGTH] = {0}; // Assuming this is set elsewhere - u32 playerId = GetTrainerId(trainerId); - u8 otIdType = OT_ID_PLAYER_ID; - u32 fixedOtId = playerId; - u16 level; - u8 check; - u8 gender; - u32 personality; - u8 party; - int pos = 0; - //struct Pokemon *mon = NULL; - struct Pokemon mon; - - pos = B_POSITION_OPPONENT_RIGHT; - //struct SpriteSheet s; - - check = 0; - - if (FlagGet(FLAG_IS_CHAMPION) == TRUE) - { - level = (Random() % 30) + 40; - } - else if (FlagGet(FLAG_BADGE08_GET) == TRUE) - { - level = (Random() % 15) + 36; - } - else if (FlagGet(FLAG_BADGE07_GET) == TRUE) - { - level = (Random() % 9) + 28; - } - else if (FlagGet(FLAG_BADGE06_GET) == TRUE) - { - level = (Random() % 10) + 21; - } - else if (FlagGet(FLAG_BADGE05_GET) == TRUE) - { - level = (Random() % 10) + 19; - } - else if (FlagGet(FLAG_BADGE04_GET) == TRUE) - { - level = (Random() % 6) + 18; - } - else if (FlagGet(FLAG_BADGE03_GET) == TRUE) - { - level = (Random() % 8) + 13; - } - else if (FlagGet(FLAG_BADGE02_GET) == TRUE) - { - level = (Random() % 6) + 7; - } - else if (FlagGet(FLAG_BADGE01_GET) == TRUE) - { - level = (Random() % 7) + 5; - } - else - { - level = (Random() % 5) + 2; - } - + u16 level; + u32 pos = B_POSITION_OPPONENT_RIGHT; + + if (FlagGet(FLAG_IS_CHAMPION) == TRUE) + { + level = (Random() % 30) + 40; + } + else if (FlagGet(FLAG_BADGE08_GET) == TRUE) + { + level = (Random() % 15) + 36; + } + else if (FlagGet(FLAG_BADGE07_GET) == TRUE) + { + level = (Random() % 9) + 28; + } + else if (FlagGet(FLAG_BADGE06_GET) == TRUE) + { + level = (Random() % 10) + 21; + } + else if (FlagGet(FLAG_BADGE05_GET) == TRUE) + { + level = (Random() % 10) + 19; + } + else if (FlagGet(FLAG_BADGE04_GET) == TRUE) + { + level = (Random() % 6) + 18; + } + else if (FlagGet(FLAG_BADGE03_GET) == TRUE) + { + level = (Random() % 8) + 13; + } + else if (FlagGet(FLAG_BADGE02_GET) == TRUE) + { + level = (Random() % 6) + 7; + } + else if (FlagGet(FLAG_BADGE01_GET) == TRUE) + { + level = (Random() % 7) + 5; + } + else + { + level = (Random() % 5) + 2; + } + switch (sGacha->state) { case GACHA_STATE_INIT: if (!gPaletteFade.active) { sGacha->state = GACHA_STATE_PROCESS_INPUT; - } + } break; case GACHA_STATE_PROCESS_INPUT: HandleInput(); @@ -3599,118 +3188,108 @@ static void GachaMain(u8 taskId) case GACHA_STATE_EXIT: ExitGacha(); break; - case STATE_INIT_A: // Initial state - sGacha->Input = 1; - DeterminePokemonRarityAndNewStatus(); - PlaySE(SE_SHOP); - RemoveCoins(sGacha->wager); - sGacha->wager = 0; - ResetMessage(); - gSprites[sGacha->CTAspriteId].animNum = 0; - gSprites[sGacha->ArrowsSpriteId].invisible = TRUE; - SetCreditDigits(GetCoins()); - SetPlayerDigits(sGacha->wager); + case STATE_INIT_A: // Initial state + sGacha->Input = 1; + DeterminePokemonRarityAndNewStatus(); + PlaySE(SE_SHOP); + RemoveCoins(sGacha->wager); + sGacha->wager = 0; + ResetMessage(); + gSprites[sGacha->CTAspriteId].animNum = 0; + gSprites[sGacha->ArrowsSpriteId].invisible = TRUE; + SetCreditDigits(GetCoins()); + SetPlayerDigits(sGacha->wager); sGacha->waitTimer = 30; // Set the timer sGacha->state = STATE_TIMER_1; // Move to next state break; - case STATE_TIMER_1: // Waiting for timer to expire - if (sGacha->waitTimer > 0) { + if (sGacha->waitTimer > 0) sGacha->waitTimer--; // Decrease timer - } else { + else sGacha->state = STATE_TWIST; // Transition to next state when the timer is done - } break; - case STATE_TWIST: // After timer expires, proceed with animation PlaySE(SE_VEND); gSprites[sGacha->KnobSpriteId].animNum = 1; sGacha->state = STATE_TIMER_2; // Move to the next state after animation starts break; - case STATE_TIMER_2: // Handle the next part of the delay or action // (You can add another waiting period if needed) sGacha->waitTimer = 50; // Set the next timer sGacha->state = STATE_INIT_GIVE; // Move to next state break; - case STATE_INIT_GIVE: // Final state - if (sGacha->waitTimer > 0) { + if (sGacha->waitTimer > 0) sGacha->waitTimer--; // Decrease timer - } else { + else sGacha->state = STATE_SHAKE_1; // Final action after timer - } - break; - - case STATE_SHAKE_1: // After timer expires, proceed with animation + break; + case STATE_SHAKE_1: // After timer expires, proceed with animation PlaySE(SE_BREAKABLE_DOOR); Shake1(); sGacha->state = STATE_TIMER_3; // Move to the next state after animation starts break; - case STATE_TIMER_3: // Handle the next part of the delay or action // (You can add another waiting period if needed) sGacha->waitTimer = 3; // Set the next timer sGacha->state = STATE_INIT_SHAKE_2; // Move to next state break; - case STATE_INIT_SHAKE_2: // Final state - if (sGacha->waitTimer > 0) { + if (sGacha->waitTimer > 0) sGacha->waitTimer--; // Decrease timer - } else { + else sGacha->state = STATE_SHAKE_2; // Final action after timer - } - break; - case STATE_SHAKE_2: // After timer expires, proceed with animation + break; + case STATE_SHAKE_2: // After timer expires, proceed with animation //PlaySE(SE_BREAKABLE_DOOR); Shake2(); sGacha->state = STATE_TIMER_4; // Move to the next state after animation starts break; - case STATE_TIMER_4: // Handle the next part of the delay or action // (You can add another waiting period if needed) sGacha->waitTimer = 3; // Set the next timer sGacha->state = STATE_INIT_SHAKE_3; // Move to next state break; - case STATE_INIT_SHAKE_3: // Final state - if (sGacha->waitTimer > 0) { + if (sGacha->waitTimer > 0) + { sGacha->waitTimer--; // Decrease timer - } else { - BGSetup(); - sGacha->waitTimer = 20; + } + else + { + BGSetup(); + sGacha->waitTimer = 20; sGacha->state = STATE_TIMER_5; // Final action after timer - } - break; - - case STATE_TIMER_5: // After timer expires, proceed with animation - if (sGacha->waitTimer > 0) { + } + break; + case STATE_TIMER_5: // After timer expires, proceed with animation + if (sGacha->waitTimer > 0) sGacha->waitTimer--; // Decrease timer - } else { - sGacha->state = STATE_GIVE; // Move to the next state after animation starts - } - break; - - case STATE_GIVE: - StartTradeScreen(); - break; - case STATE_FADE: - if (!gPaletteFade.active) { - BGRed(); - sGacha->state = STATE_POKEBALL_INIT; } - break; - case STATE_POKEBALL_INIT: - RemoveGarbage(); - sGacha->state++; - break; - case STATE_POKEBALL_PROCESS: - if (!gPaletteFade.active) { - sGacha->state = STATE_POKEBALL_ARRIVE; } - break; - case STATE_POKEBALL_ARRIVE: - LoadSpriteSheet(&sPokeBallSpriteSheet); + else + sGacha->state = STATE_GIVE; // Move to the next state after animation starts + break; + case STATE_GIVE: + StartTradeScreen(); + break; + case STATE_FADE: + if (!gPaletteFade.active) + { + BGRed(); + sGacha->state = STATE_POKEBALL_INIT; + } + break; + case STATE_POKEBALL_INIT: + RemoveGarbage(); + sGacha->state++; + break; + case STATE_POKEBALL_PROCESS: + if (!gPaletteFade.active) + sGacha->state = STATE_POKEBALL_ARRIVE; + break; + case STATE_POKEBALL_ARRIVE: + LoadSpriteSheet(&sPokeBallSpriteSheet); LoadSpritePalette(&sPokeBallSpritePalette); - sGacha->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); + sGacha->bouncingPokeballSpriteId = CreateSprite(&sSpriteTemplate_Pokeball, 120, -8, 0); gSprites[sGacha->bouncingPokeballSpriteId].data[3] = 74; gSprites[sGacha->bouncingPokeballSpriteId].callback = SpriteCB_BouncingPokeballArrive; StartSpriteAnim(&gSprites[sGacha->bouncingPokeballSpriteId], 1); @@ -3718,33 +3297,33 @@ static void GachaMain(u8 taskId) BlendPalettes(1 << (16 + gSprites[sGacha->bouncingPokeballSpriteId].oam.paletteNum), 16, RGB_WHITEALPHA); sGacha->state++; sGacha->timer = 0; - break; - case STATE_FADE_POKEBALL_TO_NORMAL: - BeginNormalPaletteFade(1 << (16 + gSprites[sGacha->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + break; + case STATE_FADE_POKEBALL_TO_NORMAL: + BeginNormalPaletteFade(1 << (16 + gSprites[sGacha->bouncingPokeballSpriteId].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); sGacha->state++; - break; - case STATE_POKEBALL_ARRIVE_WAIT: - if (gSprites[sGacha->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) - { CreateMon(&mon, sGacha->CalculatedSpecies, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); - party = GiveMonToPlayer(&mon); - GetSetPokedexFlag(sGacha->CalculatedSpecies, FLAG_SET_SEEN); - HandleSetPokedexFlag(sGacha->CalculatedSpecies, FLAG_SET_CAUGHT, GetMonData(&mon, MON_DATA_PERSONALITY)); - LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(sGacha->CalculatedSpecies, IsMonShiny(&mon), GetMonData(&mon, MON_DATA_PERSONALITY)), OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); - SetMultiuseSpriteTemplateToPokemon(sGacha->CalculatedSpecies, pos); - sGacha->monSpriteId = CreateMonPicSprite_Affine(sGacha->CalculatedSpecies, SHINY_ODDS, 0, MON_PIC_AFFINE_FRONT, 120, 60, 14, TAG_NONE); - gSprites[sGacha->monSpriteId].callback = SpriteCB_Null; - gSprites[sGacha->monSpriteId].oam.priority = 0; - gSprites[sGacha->monSpriteId].invisible = TRUE; - HandleLoadSpecialPokePic(TRUE, - gMonSpritesGfxPtr->spritesGfx[pos], - sGacha->CalculatedSpecies, - GetMonData(&mon, MON_DATA_PERSONALITY)); - sGacha->state++; - } - break; - case STATE_SHOW_NEW_MON: - - gSprites[sGacha->monSpriteId].x = 120; + break; + case STATE_POKEBALL_ARRIVE_WAIT: + if (gSprites[sGacha->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) + { + CreateMon(&gEnemyParty[0], sGacha->CalculatedSpecies, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + GiveMonToPlayer(&gEnemyParty[0]); + GetSetPokedexFlag(sGacha->CalculatedSpecies, FLAG_SET_SEEN); + HandleSetPokedexFlag(sGacha->CalculatedSpecies, FLAG_SET_CAUGHT, GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY)); + LoadCompressedPalette(GetMonFrontSpritePal(&gEnemyParty[0]), OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); + SetMultiuseSpriteTemplateToPokemon(sGacha->CalculatedSpecies, pos); + sGacha->monSpriteId = CreateMonPicSprite_Affine(sGacha->CalculatedSpecies, GetMonData(&gEnemyParty[0], MON_DATA_IS_SHINY), GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY), MON_PIC_AFFINE_FRONT, 120, 60, 14, TAG_NONE); + gSprites[sGacha->monSpriteId].callback = SpriteCB_Null; + gSprites[sGacha->monSpriteId].oam.priority = 0; + gSprites[sGacha->monSpriteId].invisible = TRUE; + HandleLoadSpecialPokePic(TRUE, + gMonSpritesGfxPtr->spritesGfx[pos], + sGacha->CalculatedSpecies, + GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY)); + sGacha->state++; + } + break; + case STATE_SHOW_NEW_MON: + gSprites[sGacha->monSpriteId].x = 120; gSprites[sGacha->monSpriteId].y = gSpeciesInfo[sGacha->CalculatedSpecies].frontPicYOffset + 56; gSprites[sGacha->monSpriteId].x2 = 0; gSprites[sGacha->monSpriteId].y2 = 0; @@ -3753,7 +3332,7 @@ static void GachaMain(u8 taskId) FreeSpriteOamMatrix(&gSprites[sGacha->bouncingPokeballSpriteId]); DestroySprite(&gSprites[sGacha->bouncingPokeballSpriteId]); sGacha->state++; - break; + break; case STATE_NEW_MON_MSG: // Wait for Pokémon's front sprite animation if (gSprites[sGacha->monSpriteId].callback == SpriteCallbackDummy) @@ -3761,8 +3340,7 @@ static void GachaMain(u8 taskId) break; case NEW_1: // "{mon} hatched from egg" message/fanfare - ShowFinalMessage(); - //EggHatchPrintMessage(0, gStringVar4, 0, 3, TEXT_SKIP_DRAW); + ShowFinalMessage(); PlayFanfare(MUS_EVOLVED); sGacha->state++; //PutWindowTilemap(0); @@ -3778,26 +3356,18 @@ static void GachaMain(u8 taskId) break; case NEW_4: // Ready the nickname prompt - if (FlagGet(FLAG_SYS_POKEMON_GET) == FALSE){ - FlagSet(FLAG_SYS_POKEMON_GET); - } - sGacha->state = GACHA_STATE_START_EXIT; + if (FlagGet(FLAG_SYS_POKEMON_GET) == FALSE) + { + FlagSet(FLAG_SYS_POKEMON_GET); + } + sGacha->state = GACHA_STATE_START_EXIT; break; } } -static void InitTradeScreen(void) -{ - //SetVBlankCallback(NULL); - //ResetAllBgsCoordinates(); - //ResetVramOamAndBgCntRegs(); - //ResetBgsAndClearDma3BusyFlags(0); - //ResetTempTileDataBuffers(); -} - static void InitGachaScreen(void) -{ - sGacha->GachaId = gSpecialVar_0x8004; +{ + sGacha->GachaId = gSpecialVar_0x8004; SetVBlankCallback(NULL); ResetAllBgsCoordinates(); @@ -3805,73 +3375,55 @@ static void InitGachaScreen(void) ResetBgsAndClearDma3BusyFlags(0); ResetTempTileDataBuffers(); - BGSetup(); + BGSetup(); - ResetSpriteData(); + ResetSpriteData(); FreeAllSpritePalettes(); - LoadSpritePalettes(sSpritePalettes2); - - if (sGacha->GachaId == 1) { // Basic - CreateHoppip(); - } - else if (sGacha->GachaId == 2) { // Great - CreatePhanpy(); - } - else if (sGacha->GachaId == 3) { // Ultra - CreateTeddiursa(); - } - else { // Master - CreateBelossom(); - } - CreateArrows(); - CreateCTA(); - CreateDigitalText(); - CreateKnob(); - CreateCreditSprites(); - CreatePlayerSprites(); - SetCreditDigits(GetCoins()); - SetPlayerDigits(0); - CreateCreditMenu(); - CreatePlayerMenu(); - CreateLotteryJPN(); - - sGacha->Odds = 0; - InitWindows(sGachaWinTemplates); - LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); - ShowMessage(); - - sGacha->exitToggle = 0; - UpdateCursorPosition(gSprites[sGacha->ArrowsSpriteId].x); - sGacha->Basic_CommonMax = 37; - sGacha->Basic_UncommonMax = 28; - sGacha->Basic_RareMax = 16; - sGacha->Basic_UltraRareMax = 11; - sGacha->Great_CommonMax = 65; - sGacha->Great_UncommonMax = 52; - sGacha->Great_RareMax = 41; - sGacha->Great_UltraRareMax = 18; - sGacha->Ultra_CommonMax = 63; - sGacha->Ultra_UncommonMax = 51; - sGacha->Ultra_RareMax = 28; - sGacha->Ultra_UltraRareMax = 28; - sGacha->Master_CommonMax = 18; - sGacha->Master_UncommonMax = 17; - sGacha->Master_RareMax = 11; - sGacha->Master_UltraRareMax = 10; - sGacha->gachaState = 0; - sGacha->waitTimer = 0; - sGacha->Input = 0; - sGacha->Basic_Total_Max = (sGacha->Basic_CommonMax + sGacha->Basic_UncommonMax + sGacha->Basic_RareMax + sGacha->Basic_UltraRareMax); - sGacha->Great_Total_Max = (sGacha->Great_CommonMax + sGacha->Great_UncommonMax + sGacha->Great_RareMax + sGacha->Great_UltraRareMax); - sGacha->Ultra_Total_Max = (sGacha->Ultra_CommonMax + sGacha->Ultra_UncommonMax + sGacha->Ultra_RareMax + sGacha->Ultra_UltraRareMax); - sGacha->Master_Total_Max = (sGacha->Master_CommonMax + sGacha->Master_UncommonMax + sGacha->Master_RareMax + sGacha->Master_UltraRareMax); - GetPokemonOwned(); - - CopyBgTilemapBufferToVram(GACHA_BG_BASE); - CopyBgTilemapBufferToVram(GACHA_MENUS); + LoadSpritePalettes(sSpritePalettes2); + + switch (sGacha->GachaId) + { + default: + case GACHA_BASIC: + CreateHoppip(); + break; + case GACHA_GREAT: + CreatePhanpy(); + break; + case GACHA_ULTRA: + CreateTeddiursa(); + break; + case GACHA_MASTER: + CreateBelossom(); + break; + } + CreateArrows(); + CreateCTA(); + CreateDigitalText(); + CreateKnob(); + CreateCreditSprites(); + CreatePlayerSprites(); + SetCreditDigits(GetCoins()); + SetPlayerDigits(0); + CreateCreditMenu(); + CreatePlayerMenu(); + CreateLotteryJPN(); + + sGacha->newMonOdds = 0; + InitWindows(sGachaWinTemplates); + LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); + ShowMessage(); + + UpdateCursorPosition(gSprites[sGacha->ArrowsSpriteId].x); + sGacha->waitTimer = 0; + sGacha->Input = 0; + GetPokemonOwned(); + + CopyBgTilemapBufferToVram(GACHA_BG_BASE); + CopyBgTilemapBufferToVram(GACHA_MENUS); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); ShowBg(GACHA_BG_BASE); - ShowBg(GACHA_MENUS); + ShowBg(GACHA_MENUS); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetVBlankCallback(GachaVBlankCallback); SetMainCallback2(GachaMainCallback); From 003b25941135b6ca9fafe43973eed2f10e25b510 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 29 Apr 2025 20:46:13 -0400 Subject: [PATCH 003/429] Remove unused pachinko stuff + refactor levels --- src/pachinko.c | 7055 +++++++++--------------------------------------- 1 file changed, 1278 insertions(+), 5777 deletions(-) diff --git a/src/pachinko.c b/src/pachinko.c index dbb36629f528..ee9582837f28 100644 --- a/src/pachinko.c +++ b/src/pachinko.c @@ -45,19 +45,6 @@ #define WIN_TEXT 0 #define TAG_BALL_POKEBALL 500 -#define TAG_FLIPPER 501 -#define TAG_MEOWTH 502 -#define TAG_MEOWTH_JEWEL 503 -#define TAG_MEOWTH_JEWEL_MUTLIPLIER 504 -#define TAG_TILES_MEOWTH_JEWEL_SPARKLE 505 -#define TAG_DUGTRIO 506 -#define TAG_SEEL 507 -#define TAG_SEEL_SPARKLE 508 -#define TAG_SEEL_MULTIPLIER 509 -#define TAG_GASTLY 510 -#define TAG_HAUNTER 511 -#define TAG_GENGAR 512 -#define TAG_TIMER_DIGIT 513 #define GFXTAG_PLAYER_DIGIT 8 #define GFXTAG_SPINARAK 9 @@ -84,58 +71,78 @@ enum { SPR_PLAYER_DIG_1, SPR_PLAYER_DIG_10, - SPR_PLAYER_DIG_100, - SPR_PLAYER_DIG_1000, + SPR_PLAYER_DIG_100, + SPR_PLAYER_DIG_1000, }; #define SPR_PLAYER_DIGITS SPR_PLAYER_DIG_1 #define MAX_SPRITES_PLAYER 4 struct Credits { - u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; - u8 StartSpeed; - u8 SpinarakSpriteId; - u8 SpeedSpriteId; - u8 MultiplierSpriteId; - u8 Live1SpriteId; - u8 Live2SpriteId; - u8 Live3SpriteId; - u8 Live4SpriteId; - u8 Live5SpriteId; - u8 Lives; - u8 Multiplier; - u8 GameStart; - u32 StartDelayTimer; - u8 ArrowSpriteId; - u8 ArrowPosition; - u32 StartDelayMax; - u8 ArrowDirection; - u32 SecondDelay; - u8 Level; - u8 TitleSpriteId; - u8 GameOverSpriteId; - u8 Winnings; - u8 WinSpriteId; - u8 TitleDestroyed; - u32 LevelChangeTimer; - u8 JackpotSpriteId; - u8 NewLevelSpriteId; - u8 LastLevel; - u32 TitleCounter; + u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; + u8 StartSpeed; + u8 SpinarakSpriteId; + u8 SpeedSpriteId; + u8 MultiplierSpriteId; + u8 Live1SpriteId; + u8 Live2SpriteId; + u8 Live3SpriteId; + u8 Live4SpriteId; + u8 Live5SpriteId; + u8 Lives; + u8 Multiplier; + u8 GameStart; + u32 StartDelayTimer; + u8 ArrowSpriteId; + u8 ArrowPosition; + u32 StartDelayMax; + u8 ArrowDirection; + u32 SecondDelay; + u8 Level; + u8 TitleSpriteId; + u8 GameOverSpriteId; + u8 Winnings; + u8 WinSpriteId; + u8 TitleDestroyed; + u32 LevelChangeTimer; + u8 JackpotSpriteId; + u8 NewLevelSpriteId; + u8 LastLevel; + u32 TitleCounter; }; enum { - GAME_TYPE_MEOWTH, - GAME_TYPE_DIGLETT, - GAME_TYPE_SEEL, - GAME_TYPE_GENGAR, + PACHINKO_LEVEL_1, + PACHINKO_LEVEL_2, + PACHINKO_LEVEL_3, + PACHINKO_LEVEL_4, + PACHINKO_LEVEL_5, + PACHINKO_LEVEL_6, + PACHINKO_LEVEL_7, + PACHINKO_LEVEL_8, + PACHINKO_LEVEL_9, + PACHINKO_LEVEL_10, + PACHINKO_LEVEL_11, + PACHINKO_LEVEL_12, + PACHINKO_LEVEL_13, + PACHINKO_LEVEL_14, + PACHINKO_LEVEL_15, + PACHINKO_LEVEL_16, + PACHINKO_LEVEL_17, + PACHINKO_LEVEL_18, + PACHINKO_LEVEL_19, + PACHINKO_LEVEL_20, + PACHINKO_LEVEL_21, + PACHINKO_LEVEL_22, + PACHINKO_LEVEL_23, + PACHINKO_LEVEL_COUNT, }; enum { PINBALL_STATE_INIT, - PACHINKO_START_SCREEN, + PACHINKO_START_SCREEN, PINBALL_STATE_RUNNING, PINBALL_LOST_BALL_FADE_OUT, PINBALL_LOST_BALL_FADE_IN, @@ -143,16 +150,16 @@ enum PINBALL_STATE_START_EXIT, PINBALL_STATE_EXIT, PINBALL_STATE_WAIT_ANIM, - PACHINKO_START_WIN, - PACHINKO_WIN, - PACHINKO_START_JACKPOT, - PACHINKO_JACKPOT, - PACHINKO_X2, - PACHINKO_X3, - PACHINKO_LEVEL_CHANGE_START, - PACHINKO_LEVEL_FADE_OUT, - PACHINKO_LEVEL_CHANGE, - PACHINKO_LEVEL_FADE_IN, + PACHINKO_START_WIN, + PACHINKO_WIN, + PACHINKO_START_JACKPOT, + PACHINKO_JACKPOT, + PACHINKO_X2, + PACHINKO_X3, + PACHINKO_LEVEL_CHANGE_START, + PACHINKO_LEVEL_FADE_OUT, + PACHINKO_LEVEL_CHANGE, + PACHINKO_LEVEL_FADE_IN, }; struct Ball @@ -166,231 +173,18 @@ struct Ball u8 rotation; }; -enum -{ - MEOWTH_STATE_WALK, - MEOWTH_STATE_HIT, - MEOWTH_STATE_FINISH, -}; - -enum -{ - MEOWTH_FACING_RIGHT, - MEOWTH_FACING_LEFT, -}; - -enum -{ - JEWEL_STATE_HIDDEN, - JEWEL_STATE_FALLING, - JEWEL_STATE_LANDED, - JEWEL_STATE_CONSUMED, -}; - -#define MAX_MEOWTH_JEWELS 6 - -struct MeowthJewel -{ - u8 state; - u8 spriteId; - u16 xPos; - u16 yPos; - s16 xVelocity; - s16 yVelocity; - u16 destYPos; -}; - -struct Meowth -{ - u8 spriteId; - u8 sparkleSpriteId; - u16 xPos; - u16 yPos; - int state; - int facing; - int yMovement; - int hitDuration; - struct MeowthJewel jewels[MAX_MEOWTH_JEWELS]; - int score; - int jewelStreak; - bool32 completed; -}; - -enum -{ - DIGLETT_STATE_INIT, - DIGLETT_STATE_HIDDEN, - DIGLETT_STATE_IDLE_0, - DIGLETT_STATE_IDLE_1, - DIGLETT_STATE_IDLE_2, - DIGLETT_STATE_IDLE_3, - DIGLETT_STATE_HIT_0, - DIGLETT_STATE_HIT_1, - DIGLETT_STATE_HIT_2, -}; - -enum -{ - DUGTRIO_STATE_HIDDEN, - DUGTRIO_STATE_3ALIVE, - DUGTRIO_STATE_3ALIVE_HIT, - DUGTRIO_STATE_2ALIVE, - DUGTRIO_STATE_2ALIVE_HIT, - DUGTRIO_STATE_1ALIVE, - DUGTRIO_STATE_1ALIVE_HIT, - DUGTRIO_STATE_0ALIVE, - DUGTRIO_STATE_COMPLETE, -}; - -#define NUM_DIGLETTS 31 - struct Diglett { bool32 completed; bool8 initialized; u8 curInitIndex; u8 curUpdateIndex; - u8 states[NUM_DIGLETTS]; u8 numDiglettsHit; u8 *collisionMap; u8 dugtrioSpriteId; u8 dugtrioState; }; -enum -{ - SEEL_STATE_SWIM_RIGHT, - SEEL_STATE_TURN_LEFT, - SEEL_STATE_SWIM_LEFT, - SEEL_STATE_TURN_RIGHT, - SEEL_STATE_EMERGE_RIGHT, - SEEL_STATE_EMERGE_LEFT, - SEEL_STATE_VISIBLE_RIGHT, - SEEL_STATE_VISIBLE_LEFT, - SEEL_STATE_SUBMERGE_RIGHT, - SEEL_STATE_SUBMERGE_LEFT, - SEEL_STATE_HIT_RIGHT, - SEEL_STATE_HIT_LEFT, -}; - -struct SeelSwimmer -{ - u8 state; - u8 spriteId; - u16 xPos; - u16 yPos; - int counter; -}; - -#define NUM_SEELS 3 - -struct Seel -{ - bool32 completed; - struct SeelSwimmer swimmers[NUM_SEELS]; - u8 streak; - u8 score; - u8 emergingSwimmerIndex; - u8 emergingSwimmerCounter; - u8 sparkleSpriteId; -}; - -enum -{ - GHOST_DIR_RIGHT, - GHOST_DIR_LEFT, -}; - -enum -{ - GHOST_STATE_VISIBLE, - GHOST_STATE_HIT, - GHOST_STATE_INVISIBLE, - GHOST_STATE_FINISHED, -}; - -struct GraveyardGhost -{ - u8 state; - u8 spriteId; - u16 xPos; - u16 yPos; - u8 direction; - u8 leftBoundary; - u8 rightBoundary; - u8 counter; -}; - -enum -{ - GENGAR_STATE_STANDING, - GENGAR_STATE_STEP_LEFT, - GENGAR_STATE_STEP_RIGHT, - GENGAR_STATE_HIT, - GENGAR_STATE_LAST_HIT, - GENGAR_STATE_LEAVING, -}; - -struct GengarGhost -{ - u8 state; - u8 spriteId; - u16 xPos; - u16 yPos; - u8 nextFoot; - u32 counter; -}; - -enum -{ - GRAVEYARD_STATE_GASTLY, - GRAVEYARD_STATE_TO_HAUNTER, - GRAVEYARD_STATE_HAUNTER, - GRAVEYARD_STATE_TO_GENGAR, - GRAVEYARD_STATE_GENGAR, - GRAVEYARD_STATE_GENGAR_VICTORY, -}; - -#define NUM_GASTLY 3 -#define NUM_HAUNTER 2 - -struct Gengar -{ - bool32 completed; - u8 graveyardState; - u16 counter; - struct GraveyardGhost gastlyGhosts[NUM_GASTLY]; - struct GraveyardGhost haunterGhosts[NUM_HAUNTER]; - struct GengarGhost gengarGhost; - u8 numGastlyHits; - u8 numHaunterHits; - u8 numGengarHits; - u8 *collisionMap; -}; - -#define FLIPPER_LEFT 0 -#define FLIPPER_RIGHT 1 - -struct Flipper -{ - u8 type; - u8 spriteId; - u16 xPos; - u16 yPos; - int state; - int prevState; - int stateDelta; -}; - -struct Timer -{ - u32 ticks; - u8 minutesSpriteId; - u8 colonSpriteId; - u8 tensSpriteId; - u8 onesSpriteId; -}; - struct Tilt { u8 counter; @@ -401,142 +195,66 @@ struct Tilt struct PinballGame { u8 state; - u8 gameType; struct Ball ball; - struct Flipper leftFlipper; - struct Flipper rightFlipper; - struct Timer timer; bool8 gravityEnabled; u8 stageTileWidth; u8 stageTileHeight; u16 cameraScrollX; u16 cameraScrollY; - struct Meowth meowth; struct Diglett diglett; - struct Seel seel; - struct Gengar gengar; struct Tilt leftTilt; struct Tilt rightTilt; struct Tilt downTilt; bool8 doArtificialDownTilt; - bool8 ballIsEntering; - bool8 flippersDisabled; bool8 completed; u8 exitTimer; bool8 waitExitScene; MainCallback returnMainCallback; }; -static void PlayPinballGame(u8 gameType); +struct PachinkoLevel +{ + const u16* levelTilemap; + const u8* levelCollisionMap; + u32 mode; + u32 alloc; +}; + +static void PlayPinballGame(void); static void FadeToPinballScreen(u8 taskId); static void InitPinballScreen(void); static void InitPinballGame(void); -static u32 GetTimerTicks(u8 gameType); -static void LoadBgGfx(u8 gameType); -static void LoadSpriteGfx(u8 gameType); +static void LoadBgGfx(void); static void InitBallSprite(void); -static void InitFlipperSprites(void); -static void InitTimerSprites(void); -static bool32 GameTypeUsesTimer(u8 gameType); -static void GetTimerScreenCoords(u8 gameType, int *outX, int *outY); -static void InitGameType(u8 gameType); -static void InitMeowth(void); -static void InitDiglett(void); -static void InitSeel(void); -static void InitGengar(void); static void PinballVBlankCallback(void); static void PinballMainCallback(void); static void PinballMain(u8 taskId); static void StartNewBall(void); static void LoseBall(void); static bool32 PlayAnotherBall(void); -static void LostBall(u8 gameType); -static void LostBallMeowth(struct Meowth *meowth); -static void LostBallSeel(struct Seel *seel); -static void LostBallGengar(struct Gengar *gengar); -static void DrawMeowthScoreJewels(struct Meowth *meowth); -static void DrawSeelScoreJewels(struct Seel *seel); -static void OpenEntrance(u8 gameType); -static void OpenEntranceMeowth(void); -static void OpenEntranceDiglett(void); -static void OpenEntranceSeel(void); -static void OpenEntranceGengar(void); -static void CloseEntranceMeowth(void); -static void CloseEntranceDiglett(void); -static void CloseEntranceSeel(void); -static void CloseEntranceGengar(void); static void HandleBallPhysics(void); static void ApplyGravity(struct Ball *ball); static void LimitVelocity(struct Ball *ball); static void HandleTilts(struct Ball *ball); static void HandleTilt(struct Ball *ball, struct Tilt *tilt, int xDelta, int yDelta, u32 buttonMask, bool8 artificalEnabled); -static bool32 HandleFlippers(struct Ball *ball, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification); -static void UpdateFlipperState(struct Flipper *flipper); -static bool32 CheckFlipperCollision(struct Ball *ball, struct Flipper *flipper, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification); static void UpdatePosition(struct Ball *ball); -static bool32 CheckStaticCollision(u8 gameType, struct Ball *ball, bool32 ballIsEntering, int stageTileWidth, int stageTileHeight, u8 *outCollisionNormal, u16 *outYForce); -static u8 GetCollisionAttribute(u8 gameType, bool32 ballIsEntering, int index); -static u8 GetCollisionMaskRow(u8 gameType, int collisionAttribute, int row); -static void HandleStaticCollisionForGameType(u8 gameType, int x, int y, u8 collisionAttribute, u16 *outYForce); +static bool32 CheckStaticCollision(struct Ball *ball, int stageTileWidth, int stageTileHeight, u8 *outCollisionNormal, u16 *outYForce); +static u8 GetCollisionAttribute(int index); +static u8 GetCollisionMaskRow(int collisionAttribute, int row); static void HandleStaticCollisionDiglett(struct Diglett *diglett, int x, int y, u8 collisionAttribute, u16 *outYForce); -static void HandleStaticCollisionGengar(struct Gengar *gengar, u8 collisionAttribute, u16 *outYForce); static void ApplyTiltForces(struct Ball *ball, u8 collisionNormal); static void RotateVector(s16 *x, s16 *y, u8 angle); static u8 ReverseBits(u8 value); static void ApplyCollisionForces(struct Ball *ball, u16 flipperYForce, int collisionAmplification); static void UpdateCamera(void); -static void UpdateTimer(void); -static void HandleTimeRanOut(void); -static void DisableFlippers(void); static void StartExitPinballGame(void); static void ExitPinballGame(void); static void UpdateBallSprite(struct Sprite *sprite); -static void UpdateFlipperSprite(struct Sprite *sprite); -static void UpdateTimerDigitSprite(struct Sprite *sprite); -static bool32 UpdateGameType(u8 gameType); -static bool32 UpdateMeowth(struct Meowth *meowth); -static bool32 CheckObjectsCollision(u8 gameType, struct Ball *ball, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); -static bool32 CheckMeowthCollision(struct Ball *ball, struct Meowth *meowth, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); -static bool32 CheckJewelCollision(struct Ball *ball, struct MeowthJewel *jewel, u8 *outCollisionNormal); -static bool32 IsJewelSpaceOccupied(u16 xPos, u16 destYPos, struct MeowthJewel *jewels); -static bool32 CheckMeowthJewelsCollision(struct Ball *ball, struct Meowth *meowth, u8 *outCollisionNormal); -static int GetNumActiveJewels(struct Meowth *meowth); -static struct MeowthJewel *TryCreateNewJewel(struct Meowth *meowth, int ballXPos); -static void UpdateJewels(struct MeowthJewel *jewels); -static void UpdateMeowthSprite(struct Sprite *sprite); -static void UpdateMeowthJewelSprite(struct Sprite *sprite); -static void UpdateMeowthJewelMultiplierSprite(struct Sprite *sprite); -static void ResetMeowthJewels(struct Meowth *meowth); -static void UpdateMeowthJewelSparkleSprite(struct Sprite *sprite); -static bool32 UpdateDiglett(struct Diglett *diglett); -static void UpdateDiglettTiles(u16 *tilemap, int index, struct Diglett *diglett); -static void UpdateDiglettCollision(u8 *collisionMap, int index, bool32 solidCollision); -static void UpdateDugtrioSprite(struct Sprite *sprite); -static bool32 CheckSeelCollision(struct Ball *ball, struct Seel *seel, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); -static bool32 UpdateSeel(struct Seel *seel); -static void ResetSeels(struct Seel *seel); -static void ChooseNextEmergingSeel(int curSeelIndex, struct Seel *seel); -static u32 GetSeelVisibleTicks(int curStreak); -static void UpdateSeelSprite(struct Sprite *sprite); -static void UpdateSeelSparkleSprite(struct Sprite *sprite); -static void UpdateSeelMultiplierSprite(struct Sprite *sprite); -static bool32 CheckGhostsCollision(struct Ball *ball, u32 ticks, struct GraveyardGhost *ghosts, int numGhosts, const u8 *angles, int width, int height, u8 *outCollisionNormal, int *outCollisionAmplification); -static bool32 CheckGengarCollision(struct Ball *ball, struct Gengar *gengar, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification); -static bool32 UpdateGengar(struct Gengar *gengar); -static void UpdateGengarGhost(struct Gengar *gengar); -static void UpdateGhost(struct Gengar *gengar, struct GraveyardGhost *ghost, u8 *numGhostHits, u8 nextState, int numGhosts); -static void InitGhost(struct GraveyardGhost *ghost, const u8 *initialData, const struct SpriteTemplate *spriteTemplate, int ghostIndex); -static void UpdateGastlySprite(struct Sprite *sprite); -static void UpdateHaunterSprite(struct Sprite *sprite); -static void UpdateGhostSprite(struct Sprite *sprite, struct GraveyardGhost *ghost); -static void UpdateGengarSprite(struct Sprite *sprite); -static void CrumbleGravestones(struct Gengar *gengar); static const u8 sJackpotText[] = _("JACKPOT!\nYou won {STR_VAR_1} COINS!"); static const u8 sWinText[] = _("You won {STR_VAR_1} COINS!"); static const u8 sLoseText[] = _("Game over!"); -static EWRAM_DATA u8 sTextWindowId = 0; static EWRAM_DATA struct PinballGame *sPinballGame = NULL; static EWRAM_DATA struct Credits *sScore = NULL; @@ -589,70 +307,15 @@ static const u16 sCovergTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_cove static const u32 sBallPokeballGfx[] = INCBIN_U32("graphics/pinball/ball_pokeball.4bpp.lz"); static const u16 sBallPokeballPalette[] = INCBIN_U16("graphics/pinball/ball_pokeball.gbapal"); -static const u32 sFlipperGfx[] = INCBIN_U32("graphics/pinball/flipper.4bpp.lz"); static const u16 sFlipperPalette[] = INCBIN_U16("graphics/pinball/flipper.gbapal"); -static const u8 sFlipperLeftMinigameCollisionMasks[] = INCBIN_U8("graphics/pinball/flipper_left_masks_minigame.1bpp"); -static const u8 sFlipperRightMinigameCollisionMasks[] = INCBIN_U8("graphics/pinball/flipper_right_masks_minigame.1bpp"); -static const u32 sTimerDigitsGfx[] = INCBIN_U32("graphics/pinball/timer_digits.4bpp.lz"); -static const u16 sTimerDigitsPalette[] = INCBIN_U16("graphics/pinball/timer_digits.gbapal"); static const u8 sFlipperCollisionRadii[] = INCBIN_U8("data/pinball/flipper_radii.bin"); static const u8 sFlipperCollisionNormalAngles[] = INCBIN_U8("data/pinball/flipper_normal_angles.bin"); -static const u32 sMeowthStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_meowth.4bpp"); -static const u16 sMeowthStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_meowth.gbapal"); -static const u16 sMeowthStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_meowth.bin"); -static const u8 sMeowthStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_meowth.1bpp"); -static const u8 sMeowthStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_meowth.bin"); -static const u8 sMeowthStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_meowth_entrance.bin"); -static const u32 sMeowthAnimationGfx[] = INCBIN_U32("graphics/pinball/meowth_animation.4bpp.lz"); -static const u16 sMeowthAnimationPalette[] = INCBIN_U16("graphics/pinball/meowth_animation.gbapal"); -static const u32 sMeowthJewelGfx[] = INCBIN_U32("graphics/pinball/meowth_jewel_animation.4bpp.lz"); -static const u16 sMeowthJewelPalette[] = INCBIN_U16("graphics/pinball/meowth_jewel_animation.gbapal"); -static const u32 sMeowthJewelMultipliersGfx[] = INCBIN_U32("graphics/pinball/meowth_jewel_multipliers.4bpp.lz"); -static const u32 sMeowthJewelSparkleGfx[] = INCBIN_U32("graphics/pinball/meowth_sparkle.4bpp.lz"); -static const u16 sMeowthJewelMultipliersPalette[] = INCBIN_U16("graphics/pinball/meowth_jewel_multipliers.gbapal"); -static const u8 sMeowthCollisionNormalAngles[] = INCBIN_U8("data/pinball/meowth_normal_angles.bin"); -static const u8 sMeowthJewelCollisionNormalAngles[] = INCBIN_U8("data/pinball/meowth_jewel_normal_angles.bin"); - static const u32 sDiglettStageBgGfx[] = INCBIN_U32("graphics/pachinko/bgtiles.4bpp"); static const u16 sDiglettStageBgPalette[] = INCBIN_U16("graphics/pachinko/bg_indexed.gbapal"); -static const u16 sDiglettStageBgTilemap[] = INCBIN_U16("graphics/pachinko/pachinkobg1.bin"); static const u8 sDiglettStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_diglett.1bpp"); static const u8 sDiglettStageBgCollisionMap[] = INCBIN_U8("graphics/pachinko/collisionmap.bin"); -static const u8 sDiglettStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_diglett_entrance.bin"); -static const u32 sDugtrioAnimationGfx[] = INCBIN_U32("graphics/pinball/dugtrio_animation.4bpp.lz"); -static const u16 sDugtrioAnimationPalette[] = INCBIN_U16("graphics/pinball/dugtrio_animation.gbapal"); - -static const u32 sSeelStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_seel.4bpp"); -static const u16 sSeelStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_seel.gbapal"); -static const u16 sSeelStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_seel.bin"); -static const u8 sSeelStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_seel.1bpp"); -static const u8 sSeelStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_seel.bin"); -static const u8 sSeelStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_seel_entrance.bin"); -static const u32 sSeelAnimationGfx[] = INCBIN_U32("graphics/pinball/seel_animation.4bpp.lz"); -static const u16 sSeelAnimationPalette[] = INCBIN_U16("graphics/pinball/seel_animation.gbapal"); -static const u8 sSeelCollisionNormalAngles[] = INCBIN_U8("data/pinball/seel_normal_angles.bin"); -static const u32 sSeelSparkleGfx[] = INCBIN_U32("graphics/pinball/seel_sparkle.4bpp.lz"); -static const u16 sSeelSparklePalette[] = INCBIN_U16("graphics/pinball/seel_sparkle.gbapal"); -static const u32 sSeelMultipliersGfx[] = INCBIN_U32("graphics/pinball/seel_multipliers.4bpp.lz"); -static const u16 sSeelMultipliersPalette[] = INCBIN_U16("graphics/pinball/seel_multipliers.gbapal"); - -static const u32 sGengarStageBgGfx[] = INCBIN_U32("graphics/pinball/bg_tiles_gengar.4bpp"); -static const u16 sGengarStageBgPalette[] = INCBIN_U16("graphics/pinball/bg_tiles_gengar.gbapal"); -static const u16 sGengarStageBgTilemap[] = INCBIN_U16("graphics/pinball/bg_tilemap_gengar.bin"); -static const u8 sGengarStageBgCollisionMasks[] = INCBIN_U8("graphics/pinball/bg_collision_masks_gengar.1bpp"); -static const u8 sGengarStageBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_gengar.bin"); -static const u8 sGengarStageEntranceBgCollisionMap[] = INCBIN_U8("graphics/pinball/bg_collision_map_gengar_entrance.bin"); -static const u32 sGastlyAnimationGfx[] = INCBIN_U32("graphics/pinball/gastly_animation.4bpp.lz"); -static const u16 sGastlyAnimationPalette[] = INCBIN_U16("graphics/pinball/gastly_animation.gbapal"); -static const u8 sGastlyCollisionNormalAngles[] = INCBIN_U8("data/pinball/gastly_normal_angles.bin"); -static const u32 sHaunterAnimationGfx[] = INCBIN_U32("graphics/pinball/haunter_animation.4bpp.lz"); -static const u16 sHaunterAnimationPalette[] = INCBIN_U16("graphics/pinball/haunter_animation.gbapal"); -static const u8 sHaunterCollisionNormalAngles[] = INCBIN_U8("data/pinball/haunter_normal_angles.bin"); -static const u32 sGengarAnimationGfx[] = INCBIN_U32("graphics/pinball/gengar_animation.4bpp.lz"); -static const u16 sGengarAnimationPalette[] = INCBIN_U16("graphics/pinball/gengar_animation.gbapal"); -static const u8 sGengarCollisionNormalAngles[] = INCBIN_U8("data/pinball/gengar_normal_angles.bin"); static const u32 gPlayer_Gfx[] = INCBIN_U32("graphics/pachinko/input_numbers.4bpp.lz"); static const u16 sPlayer_Pal[] = INCBIN_U16("graphics/pachinko/input_numbers.gbapal"); @@ -755,70 +418,19 @@ static const u8 sLevel_22_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelC static const u16 sLevel_23_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_23.bin"); static const u8 sLevel_23_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_23.bin"); -//static const u16 sLevel_24_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_24.bin"); -//static const u8 sLevel_24_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_24.bin"); -// -//static const u16 sLevel_25_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_25.bin"); -//static const u8 sLevel_25_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_25.bin"); -// -//static const u16 sLevel_26_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_26.bin"); -//static const u8 sLevel_26_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_26.bin"); -// -//static const u16 sLevel_27_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_27.bin"); -//static const u8 sLevel_27_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_27.bin"); -// -//static const u16 sLevel_28_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_28.bin"); -//static const u8 sLevel_28_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_28.bin"); -// -//static const u16 sLevel_29_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_29.bin"); -//static const u8 sLevel_29_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_29.bin"); -// -//static const u16 sLevel_30_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_30.bin"); -//static const u8 sLevel_30_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_30.bin"); -// -//static const u16 sLevel_31_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_31.bin"); -//static const u8 sLevel_31_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_31.bin"); -// -//static const u16 sLevel_32_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_32.bin"); -//static const u8 sLevel_32_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_32.bin"); -// -//static const u16 sLevel_33_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_33.bin"); -//static const u8 sLevel_33_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_33.bin"); -// -//static const u16 sLevel_34_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_34.bin"); -//static const u8 sLevel_34_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_34.bin"); -// -//static const u16 sLevel_35_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_35.bin"); -//static const u8 sLevel_35_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_35.bin"); -// -//static const u16 sLevel_36_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_36.bin"); -//static const u8 sLevel_36_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_36.bin"); -// -//static const u16 sLevel_37_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_37.bin"); -//static const u8 sLevel_37_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_37.bin"); -// -//static const u16 sLevel_38_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_38.bin"); -//static const u8 sLevel_38_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_38.bin"); -// -//static const u16 sLevel_39_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_39.bin"); -//static const u8 sLevel_39_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_39.bin"); -// -//static const u16 sLevel_40_BgTilemap[] = INCBIN_U16("graphics/pachinko/LevelTilemaps/Level_40.bin"); -//static const u8 sLevel_40_BgCollisionMap[] = INCBIN_U8("graphics/pachinko/LevelCollision/Level_40.bin"); - static const struct SpritePalette sSpritePalettes2[] = { - { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, - { .data = SpinarakPAL, .tag = PALTAG_SPINARAK }, - { .data = SpeedPAL, .tag = PALTAG_SPEED }, - { .data = MultiplierPAL, .tag = PALTAG_MULTIPLIER }, - { .data = LivesPAL, .tag = PALTAG_LIVES }, - { .data = ArrowPAL, .tag = PALTAG_ARROW }, - { .data = TitlePAL, .tag = PALTAG_TITLE }, - { .data = GameOverPAL, .tag = PALTAG_GAMEOVER }, - { .data = WinPAL, .tag = PALTAG_WIN }, - { .data = NewLevelPAL, .tag = PALTAG_NEWLEVEL }, - {} + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = SpinarakPAL, .tag = PALTAG_SPINARAK }, + { .data = SpeedPAL, .tag = PALTAG_SPEED }, + { .data = MultiplierPAL, .tag = PALTAG_MULTIPLIER }, + { .data = LivesPAL, .tag = PALTAG_LIVES }, + { .data = ArrowPAL, .tag = PALTAG_ARROW }, + { .data = TitlePAL, .tag = PALTAG_TITLE }, + { .data = GameOverPAL, .tag = PALTAG_GAMEOVER }, + { .data = WinPAL, .tag = PALTAG_WIN }, + { .data = NewLevelPAL, .tag = PALTAG_NEWLEVEL }, + {} }; static const struct CompressedSpriteSheet sSpriteSheet_NewLevel = @@ -834,7 +446,7 @@ static const struct OamData sOamData_NewLevel = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -873,7 +485,7 @@ static const struct OamData sOamData_Win = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -912,7 +524,7 @@ static const struct OamData sOamData_GameOver = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -940,7 +552,7 @@ static const struct OamData sOamData_Title = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -968,7 +580,7 @@ static const struct OamData sOamData_Arrow = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -996,7 +608,7 @@ static const struct OamData sOamData_Lives = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(8x8), .size = SPRITE_SIZE(8x8), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1024,7 +636,7 @@ static const struct OamData sOamData_Multiplier = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1051,8 +663,8 @@ static const union AnimCmd sMultiplierAnimCmd_2[] = static const union AnimCmd *const sMultiplierAnimCmds[] = { sMultiplierAnimCmd_0, // Looping animation - sMultiplierAnimCmd_1, - sMultiplierAnimCmd_2, + sMultiplierAnimCmd_1, + sMultiplierAnimCmd_2, }; static const struct SpriteTemplate sSpriteTemplate_Multiplier = @@ -1079,7 +691,7 @@ static const struct OamData sOamData_Speed = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x16), .size = SPRITE_SIZE(64x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1107,7 +719,7 @@ static const struct OamData sOamData_Spinarak = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1185,97 +797,7 @@ static const struct CompressedSpriteSheet sBallPokeballSpriteSheet = { .tag = TAG_BALL_POKEBALL, }; -static const struct CompressedSpriteSheet sFlipperSpriteSheet = { - .data = sFlipperGfx, - .size = 0x600, - .tag = TAG_FLIPPER, -}; - -static const struct CompressedSpriteSheet sTimerDigitsSpriteSheet = { - .data = sTimerDigitsGfx, - .size = 0x2C0, - .tag = TAG_TIMER_DIGIT, -}; - -static const struct CompressedSpriteSheet sMeowthAnimationSpriteSheet = { - .data = sMeowthAnimationGfx, - .size = 0xA00, - .tag = TAG_MEOWTH, -}; - -static const struct CompressedSpriteSheet sMeowthJewelSpriteSheet = { - .data = sMeowthJewelGfx, - .size = 0x400, - .tag = TAG_MEOWTH_JEWEL, -}; - -static const struct CompressedSpriteSheet sMeowthJewelMultipliersSpriteSheet = { - .data = sMeowthJewelMultipliersGfx, - .size = 0x140, - .tag = TAG_MEOWTH_JEWEL_MUTLIPLIER, -}; - -static const struct CompressedSpriteSheet sMeowthSparkleSpriteSheet = { - .data = sMeowthJewelSparkleGfx, - .size = 0x40, - .tag = TAG_TILES_MEOWTH_JEWEL_SPARKLE, -}; - -static const struct CompressedSpriteSheet sDugtrioAnimationSpriteSheet = { - .data = sDugtrioAnimationGfx, - .size = 0x1A00, - .tag = TAG_DUGTRIO, -}; - -static const struct CompressedSpriteSheet sSeelAnimationSpriteSheet = { - .data = sSeelAnimationGfx, - .size = 0x1E00, - .tag = TAG_SEEL, -}; - -static const struct CompressedSpriteSheet sSeelSparkleSpriteSheet = { - .data = sSeelSparkleGfx, - .size = 0x40, - .tag = TAG_SEEL_SPARKLE, -}; - -static const struct CompressedSpriteSheet sSeelMultipliersSpriteSheet = { - .data = sSeelMultipliersGfx, - .size = 0x1C0, - .tag = TAG_SEEL_MULTIPLIER, -}; - -static const struct CompressedSpriteSheet sGastlyAnimationSpriteSheet = { - .data = sGastlyAnimationGfx, - .size = 0x600, - .tag = TAG_GASTLY, -}; - -static const struct CompressedSpriteSheet sHaunterAnimationSpriteSheet = { - .data = sHaunterAnimationGfx, - .size = 0x3000, - .tag = TAG_HAUNTER, -}; - -static const struct CompressedSpriteSheet sGengarAnimationSpriteSheet = { - .data = sGengarAnimationGfx, - .size = 0x4000, - .tag = TAG_GENGAR, -}; - static const struct SpritePalette sPinballSpritePalette = { sBallPokeballPalette, TAG_BALL_POKEBALL }; -static const struct SpritePalette sFlipperSpritePalette = { sFlipperPalette, TAG_FLIPPER }; -static const struct SpritePalette sTimerDigitsSpritePalette = { sTimerDigitsPalette, TAG_TIMER_DIGIT }; -static const struct SpritePalette sMeowthAnimationSpritePalette = { sMeowthAnimationPalette, TAG_MEOWTH }; -static const struct SpritePalette sMeowthJewelSpritePalette = { sMeowthJewelPalette, TAG_MEOWTH_JEWEL }; -static const struct SpritePalette sMeowthJewelMultipliersSpritePalette = { sMeowthJewelMultipliersPalette, TAG_MEOWTH_JEWEL_MUTLIPLIER }; -static const struct SpritePalette sDugtrioAnimationSpritePalette = { sDugtrioAnimationPalette, TAG_DUGTRIO }; -static const struct SpritePalette sSeelAnimationSpritePalette = { sSeelAnimationPalette, TAG_SEEL }; -static const struct SpritePalette sSeelSparkleSpritePalette = { sSeelSparklePalette, TAG_SEEL_SPARKLE }; -static const struct SpritePalette sSeelMultipliersSpritePalette = { sSeelMultipliersPalette, TAG_SEEL_MULTIPLIER }; -static const struct SpritePalette sGastlyAnimationSpritePalette = { sGastlyAnimationPalette, TAG_GASTLY }; -static const struct SpritePalette sHaunterAnimationSpritePalette = { sHaunterAnimationPalette, TAG_HAUNTER }; -static const struct SpritePalette sGengarAnimationSpritePalette = { sGengarAnimationPalette, TAG_GENGAR }; static const struct OamData sBallOamData = { .y = 0, @@ -1330,1367 +852,100 @@ static const struct SpriteTemplate sBallPokeballSpriteTemplate = { .callback = UpdateBallSprite, }; -static const struct OamData sFlipperOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -#define FLIPPER_FRAME_ANIMCMD(n, flip) \ -static const union AnimCmd sFlipperAnimCmd_##n[] =\ -{\ - ANIMCMD_FRAME(((n) % 3) * 16, 0, .hFlip = (flip)),\ - ANIMCMD_END,\ +static const s8 sCollisionTestPointOffsets[][2] = { + { 4, 0 }, + { 4, 1 }, + { 3, 3 }, + { 1, 4 }, + { 0, 4 }, + { -1, 4 }, + { -3, 3 }, + { -4, 1 }, + { -4, 0 }, + { -4, -1 }, + { -3, -3 }, + { -1, -4 }, + { 0, -4 }, + { 1, -4 }, + { 3, -3 }, + { 4, -1 }, }; -FLIPPER_FRAME_ANIMCMD(0, FALSE) -FLIPPER_FRAME_ANIMCMD(1, FALSE) -FLIPPER_FRAME_ANIMCMD(2, FALSE) -FLIPPER_FRAME_ANIMCMD(3, TRUE) -FLIPPER_FRAME_ANIMCMD(4, TRUE) -FLIPPER_FRAME_ANIMCMD(5, TRUE) - -static const union AnimCmd *const sFlipperAnimCmds[] = { - sFlipperAnimCmd_0, - sFlipperAnimCmd_1, - sFlipperAnimCmd_2, - sFlipperAnimCmd_3, - sFlipperAnimCmd_4, - sFlipperAnimCmd_5, +// This array is indexed by the start and end indexes of the 16 collision point tests. +// The values here are on a 256-degree'd unit circle, where an angle of 0x00 is pointing +// directly up, 0x40 is pointing directly right, 0x80 is pointing directly down, and +// 0xC0 is pointing directly left. +static const u8 sCollisionNormals[256] = { + 0xC0, 0xC5, 0xD0, 0xDB, 0xE0, 0xE5, 0xF0, 0xFB, 0x00, 0x05, 0x10, 0x1B, 0x20, 0x25, 0x30, 0x3B, // 0x0X + 0x45, 0xCA, 0xD5, 0xE0, 0xE5, 0xEA, 0xF5, 0x00, 0x05, 0x0A, 0x15, 0x20, 0x25, 0x2A, 0x35, 0x40, // 0x1X + 0x50, 0x55, 0xE0, 0xEB, 0xF0, 0xF5, 0x00, 0x0B, 0x10, 0x15, 0x20, 0x2B, 0x30, 0x35, 0x40, 0x4B, // 0x2X + 0x5B, 0x60, 0x6B, 0xF6, 0xFB, 0x00, 0x0B, 0x16, 0x1B, 0x20, 0x2B, 0x36, 0x3B, 0x40, 0x4B, 0x56, // 0x3X + 0x60, 0x65, 0x70, 0x7B, 0x00, 0x05, 0x10, 0x1B, 0x20, 0x25, 0x30, 0x3B, 0x40, 0x45, 0x50, 0x5B, // 0x4X + 0x65, 0x6A, 0x75, 0x80, 0x85, 0x0A, 0x15, 0x20, 0x25, 0x2A, 0x35, 0x40, 0x45, 0x4A, 0x55, 0x60, // 0x5X + 0x70, 0x75, 0x80, 0x8B, 0x90, 0x95, 0x20, 0x2B, 0x30, 0x35, 0x40, 0x4B, 0x50, 0x55, 0x60, 0x6B, // 0x6X + 0x7B, 0x80, 0x8B, 0x96, 0x9B, 0xA0, 0xAB, 0x36, 0x3B, 0x40, 0x4B, 0x56, 0x5B, 0x60, 0x6B, 0x76, // 0x7X + 0x80, 0x85, 0x90, 0x9B, 0xA0, 0xA5, 0xB0, 0xBB, 0x40, 0x45, 0x50, 0x5B, 0x60, 0x65, 0x70, 0x7B, // 0x8X + 0x85, 0x8A, 0x95, 0xA0, 0xA5, 0xAA, 0xB5, 0xC0, 0xC5, 0x4A, 0x55, 0x60, 0x65, 0x6A, 0x75, 0x80, // 0x9X + 0x90, 0x95, 0xA0, 0xAB, 0xB0, 0xB5, 0xC0, 0xCB, 0xD0, 0xD5, 0x60, 0x6B, 0x70, 0x75, 0x80, 0x8B, // 0xAX + 0x9B, 0xA0, 0xAB, 0xB6, 0xBB, 0xC0, 0xCB, 0xD6, 0xDB, 0xE0, 0xEB, 0x76, 0x7B, 0x80, 0x8B, 0x96, // 0xBX + 0xA0, 0xA5, 0xB0, 0xBB, 0xC0, 0xC5, 0xD0, 0xDB, 0xE0, 0xE5, 0xF0, 0xFB, 0x80, 0x85, 0x90, 0x9B, // 0xCX + 0xA5, 0xAA, 0xB5, 0xC0, 0xC5, 0xCA, 0xD5, 0xE0, 0xE5, 0xEA, 0xF5, 0x00, 0x05, 0x8A, 0x95, 0xA0, // 0xDX + 0xB0, 0xB5, 0xC0, 0xCB, 0xD0, 0xD5, 0xE0, 0xEB, 0xF0, 0xF5, 0x00, 0x0B, 0x10, 0x15, 0xA0, 0xAB, // 0xEX + 0xBB, 0xC0, 0xCB, 0xD6, 0xDB, 0xE0, 0xEB, 0xF6, 0xFB, 0x00, 0x0B, 0x16, 0x1B, 0x20, 0x2B, 0xB6, // 0xFX }; -static const struct SpriteTemplate sFlipperSpriteTemplate = { - .tileTag = TAG_FLIPPER, - .paletteTag = TAG_FLIPPER, - .oam = &sFlipperOamData, - .anims = sFlipperAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateFlipperSprite, +// This array is indexed by the start and end indexes of the 16 collision point tests. +// It is used to move the ball out of the the wall it's colliding with. +static const u16 sCollisionXDeltas[256] = { + 0xFF00, 0xFEFB, 0xFECC, 0xFE8C, 0xFE77, 0xFE71, 0xFEAD, 0xFF73, 0x0000, 0x00AC, 0x027F, 0x0497, 0x0589, 0x066D, 0x0808, 0x08E7, // 0x0X + 0x08E7, 0xFF08, 0xFF01, 0xFEE4, 0xFEDE, 0xFEE3, 0xFF32, 0x0000, 0x008D, 0x0137, 0x02FD, 0x04FD, 0x05E1, 0x06B6, 0x082C, 0x08E1, // 0x1X + 0x0808, 0x07B4, 0xFF4B, 0xFF70, 0xFF81, 0xFF99, 0x0000, 0x00CE, 0x0153, 0x01F0, 0x0389, 0x0547, 0x0608, 0x06B8, 0x07D4, 0x082C, // 0x2X + 0x066D, 0x05F6, 0x045D, 0xFFC2, 0xFFE0, 0x0000, 0x0067, 0x011D, 0x018F, 0x0214, 0x036C, 0x04D9, 0x0572, 0x05F8, 0x06B8, 0x06B6, // 0x3X + 0x0589, 0x0504, 0x0353, 0x0119, 0x0000, 0x0020, 0x007F, 0x0122, 0x0189, 0x0200, 0x0334, 0x0479, 0x04FF, 0x0572, 0x0608, 0x05E1, // 0x4X + 0x0497, 0x0406, 0x0243, 0x0000, 0xFEE7, 0x003E, 0x0090, 0x011C, 0x0174, 0x01DC, 0x02EB, 0x0407, 0x0479, 0x04D9, 0x0547, 0x04FD, // 0x5X + 0x027F, 0x01DC, 0x0000, 0xFDBD, 0xFCAD, 0xFBA3, 0x00B5, 0x00FF, 0x0134, 0x0176, 0x022B, 0x02EB, 0x0334, 0x036C, 0x0389, 0x02FD, // 0x6X + 0x00AC, 0x0000, 0xFE24, 0xFBFA, 0xFAFC, 0xFA0A, 0xF84C, 0x00F8, 0x0105, 0x011E, 0x0176, 0x01DC, 0x0200, 0x0214, 0x01F0, 0x0137, // 0x7X + 0x0000, 0xFF54, 0xFD81, 0xFB69, 0xFA77, 0xF993, 0xF7F8, 0xF719, 0x0100, 0x0105, 0x0134, 0x0174, 0x0189, 0x018F, 0x0153, 0x008D, // 0x8X + 0xFF73, 0xFEC9, 0xFD03, 0xFB03, 0xFA1F, 0xF94A, 0xF7D4, 0xF71F, 0xF719, 0x00F8, 0x00FF, 0x011C, 0x0122, 0x011D, 0x00CE, 0x0000, // 0x9X + 0xFEAD, 0xFE10, 0xFC77, 0xFAB9, 0xF9F8, 0xF948, 0xF82C, 0xF7D4, 0xF7F8, 0xF84C, 0x00B5, 0x0090, 0x007F, 0x0067, 0x0000, 0xFF32, // 0xAX + 0xFE71, 0xFDEC, 0xFC94, 0xFB27, 0xFA8E, 0xFA08, 0xF948, 0xF94A, 0xF993, 0xFA0A, 0xFBA3, 0x003E, 0x0020, 0x0000, 0xFF99, 0xFEE3, // 0xBX + 0xFE77, 0xFE00, 0xFCCC, 0xFB87, 0xFB01, 0xFA8E, 0xF9F8, 0xFA1F, 0xFA77, 0xFAFC, 0xFCAD, 0xFEE7, 0x0000, 0xFFE0, 0xFF81, 0xFEDE, // 0xCX + 0xFE8C, 0xFE24, 0xFD15, 0xFBF9, 0xFB87, 0xFB27, 0xFAB9, 0xFB03, 0xFB69, 0xFBFA, 0xFDBD, 0x0000, 0x0119, 0xFFC2, 0xFF70, 0xFEE4, // 0xDX + 0xFECC, 0xFE8A, 0xFDD5, 0xFD15, 0xFCCC, 0xFC94, 0xFC77, 0xFD03, 0xFD81, 0xFE24, 0x0000, 0x0243, 0x0353, 0x045D, 0xFF4B, 0xFF01, // 0xEX + 0xFEFB, 0xFEE2, 0xFE8A, 0xFE24, 0xFE00, 0xFDEC, 0xFE10, 0xFEC9, 0xFF54, 0x0000, 0x01DC, 0x0406, 0x0504, 0x05F6, 0x07B4, 0xFF08, // 0xFX }; -static const struct OamData sTimerDigitOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x16), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(8x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, +// This array is indexed by the start and end indexes of the 16 collision point tests. +// It is used to move the ball out of the the wall it's colliding with. +static const u16 sCollisionYDeltas[256] = { + 0x0000, 0xFFE0, 0xFF81, 0xFEDE, 0xFE77, 0xFE00, 0xFCCC, 0xFB87, 0xFB01, 0xFA8E, 0xF9F8, 0xFA1F, 0xFA77, 0xFAFC, 0xFCAD, 0xFEE7, // 0x0X + 0x0119, 0xFFC2, 0xFF70, 0xFEE4, 0xFE8C, 0xFE24, 0xFD15, 0xFBF9, 0xFB87, 0xFB27, 0xFAB9, 0xFB03, 0xFB69, 0xFBFA, 0xFDBD, 0x0000, // 0x1X + 0x0353, 0x045D, 0xFF4B, 0xFF01, 0xFECC, 0xFE8A, 0xFDD5, 0xFD15, 0xFCCC, 0xFC94, 0xFC77, 0xFD03, 0xFD81, 0xFE24, 0x0000, 0x0243, // 0x2X + 0x0504, 0x05F6, 0x07B4, 0xFF08, 0xFEFB, 0xFEE2, 0xFE8A, 0xFE24, 0xFE00, 0xFDEC, 0xFE10, 0xFEC9, 0xFF54, 0x0000, 0x01DC, 0x0406, // 0x3X + 0x0589, 0x066D, 0x0808, 0x08E7, 0xFF00, 0xFEFB, 0xFECC, 0xFE8C, 0xFE77, 0xFE71, 0xFEAD, 0xFF73, 0x0000, 0x00AC, 0x027F, 0x0497, // 0x4X + 0x05E1, 0x06B6, 0x082C, 0x08E1, 0x08E7, 0xFF08, 0xFF01, 0xFEE4, 0xFEDE, 0xFEE3, 0xFF32, 0x0000, 0x008D, 0x0137, 0x02FD, 0x04FD, // 0x5X + 0x0608, 0x06B8, 0x07D4, 0x082C, 0x0808, 0x07B4, 0xFF4B, 0xFF70, 0xFF81, 0xFF99, 0x0000, 0x00CE, 0x0153, 0x01F0, 0x0389, 0x0547, // 0x6X + 0x0572, 0x05F8, 0x06B8, 0x06B6, 0x066D, 0x05F6, 0x045D, 0xFFC2, 0xFFE0, 0x0000, 0x0067, 0x011D, 0x018F, 0x0214, 0x036C, 0x04D9, // 0x7X + 0x04FF, 0x0572, 0x0608, 0x05E1, 0x0589, 0x0504, 0x0353, 0x0119, 0x0000, 0x0020, 0x007F, 0x0122, 0x0189, 0x0200, 0x0334, 0x0479, // 0x8X + 0x0479, 0x04D9, 0x0547, 0x04FD, 0x0497, 0x0406, 0x0243, 0x0000, 0xFEE7, 0x003E, 0x0090, 0x011C, 0x0174, 0x01DC, 0x02EB, 0x0407, // 0x9X + 0x0334, 0x036C, 0x0389, 0x02FD, 0x027F, 0x01DC, 0x0000, 0xFDBD, 0xFCAD, 0xFBA3, 0x00B5, 0x00FF, 0x0134, 0x0176, 0x022B, 0x02EB, // 0xAX + 0x0200, 0x0214, 0x01F0, 0x0137, 0x00AC, 0x0000, 0xFE24, 0xFBFA, 0xFAFC, 0xFA0A, 0xF84C, 0x00F8, 0x0105, 0x011E, 0x0176, 0x01DC, // 0xBX + 0x0189, 0x018F, 0x0153, 0x008D, 0x0000, 0xFF54, 0xFD81, 0xFB69, 0xFA77, 0xF993, 0xF7F8, 0xF719, 0x0100, 0x0105, 0x0134, 0x0174, // 0xCX + 0x0122, 0x011D, 0x00CE, 0x0000, 0xFF73, 0xFEC9, 0xFD03, 0xFB03, 0xFA1F, 0xF94A, 0xF7D4, 0xF71F, 0xF719, 0x00F8, 0x00FF, 0x011C, // 0xDX + 0x007F, 0x0067, 0x0000, 0xFF32, 0xFEAD, 0xFE10, 0xFC77, 0xFAB9, 0xF9F8, 0xF948, 0xF82C, 0xF7D4, 0xF7F8, 0xF84C, 0x00B5, 0x0090, // 0xEX + 0x0020, 0x0000, 0xFF99, 0xFEE3, 0xFE71, 0xFDEC, 0xFC94, 0xFB27, 0xFA8E, 0xFA08, 0xF948, 0xF94A, 0xF993, 0xFA0A, 0xFBA3, 0x003E, // 0xFX }; -#define TIMER_DIGIT_FRAME_ANIMCMD(n) \ -static const union AnimCmd sTimerDigitAnimCmd_##n[] =\ -{\ - ANIMCMD_FRAME((n) * 2, 0),\ - ANIMCMD_END,\ -}; - -TIMER_DIGIT_FRAME_ANIMCMD(0) -TIMER_DIGIT_FRAME_ANIMCMD(1) -TIMER_DIGIT_FRAME_ANIMCMD(2) -TIMER_DIGIT_FRAME_ANIMCMD(3) -TIMER_DIGIT_FRAME_ANIMCMD(4) -TIMER_DIGIT_FRAME_ANIMCMD(5) -TIMER_DIGIT_FRAME_ANIMCMD(6) -TIMER_DIGIT_FRAME_ANIMCMD(7) -TIMER_DIGIT_FRAME_ANIMCMD(8) -TIMER_DIGIT_FRAME_ANIMCMD(9) -TIMER_DIGIT_FRAME_ANIMCMD(10) - -static const union AnimCmd *const sTimerDigitAnimCmds[] = { - sTimerDigitAnimCmd_0, - sTimerDigitAnimCmd_1, - sTimerDigitAnimCmd_2, - sTimerDigitAnimCmd_3, - sTimerDigitAnimCmd_4, - sTimerDigitAnimCmd_5, - sTimerDigitAnimCmd_6, - sTimerDigitAnimCmd_7, - sTimerDigitAnimCmd_8, - sTimerDigitAnimCmd_9, - sTimerDigitAnimCmd_10, -}; - -static const struct SpriteTemplate sTimerDigitSpriteTemplate = { - .tileTag = TAG_TIMER_DIGIT, - .paletteTag = TAG_TIMER_DIGIT, - .oam = &sTimerDigitOamData, - .anims = sTimerDigitAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateTimerDigitSprite, -}; - -static const struct OamData sMeowthOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sMeowthAnimCmd_WalkRight[] = { - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(16, 15), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sMeowthAnimCmd_WalkLeft[] = { - ANIMCMD_FRAME(0, 15, .hFlip = TRUE), - ANIMCMD_FRAME(16, 15, .hFlip = TRUE), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sMeowthAnimCmd_HitRight[] = { - ANIMCMD_FRAME(32, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sMeowthAnimCmd_HitLeft[] = { - ANIMCMD_FRAME(32, 0, .hFlip = TRUE), - ANIMCMD_END, -}; - -static const union AnimCmd sMeowthAnimCmd_Finish[] = { - ANIMCMD_FRAME(48, 30), - ANIMCMD_FRAME(64, 30), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd *const sMeowthAnimCmds[] = { - sMeowthAnimCmd_WalkRight, - sMeowthAnimCmd_WalkLeft, - sMeowthAnimCmd_HitRight, - sMeowthAnimCmd_HitLeft, - sMeowthAnimCmd_Finish, -}; - -static const struct SpriteTemplate sMeowthSpriteTemplate = { - .tileTag = TAG_MEOWTH, - .paletteTag = TAG_MEOWTH, - .oam = &sMeowthOamData, - .anims = sMeowthAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateMeowthSprite, -}; - -static const struct OamData sMeowthJewelOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sMeowthJewelAnimCmd_Create[] = { - ANIMCMD_FRAME(0, 15), - ANIMCMD_FRAME(4, 20), - ANIMCMD_FRAME(8, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sMeowthJewelAnimCmd_Sparkle[] = { - ANIMCMD_FRAME(8, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sMeowthJewelAnimCmd_Disappear[] = { - ANIMCMD_FRAME(12, 1), - ANIMCMD_FRAME(16, 1), - ANIMCMD_FRAME(20, 1), - ANIMCMD_FRAME(24, 1), - ANIMCMD_FRAME(28, 1), - ANIMCMD_FRAME(24, 1), - ANIMCMD_FRAME(20, 1), - ANIMCMD_FRAME(16, 1), - ANIMCMD_FRAME(12, 1), - ANIMCMD_END, -}; - -static const union AnimCmd *const sMeowthJewelAnimCmds[] = { - sMeowthJewelAnimCmd_Create, - sMeowthJewelAnimCmd_Sparkle, - sMeowthJewelAnimCmd_Disappear, -}; - -static const struct SpriteTemplate sMeowthJewelSpriteTemplate = { - .tileTag = TAG_MEOWTH_JEWEL, - .paletteTag = TAG_MEOWTH_JEWEL, - .oam = &sMeowthJewelOamData, - .anims = sMeowthJewelAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateMeowthJewelSprite, -}; - -static const struct OamData sMeowthJewelMultiplierOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sMeowthJewelMultiplierAnimCmd_2x[] = { - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sMeowthJewelMultiplierAnimCmd_3x[] = { - ANIMCMD_FRAME(2, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sMeowthJewelMultiplierAnimCmd_4x[] = { - ANIMCMD_FRAME(4, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sMeowthJewelMultiplierAnimCmd_5x[] = { - ANIMCMD_FRAME(6, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sMeowthJewelMultiplierAnimCmd_6x[] = { - ANIMCMD_FRAME(8, 0), - ANIMCMD_END, -}; - -static const union AnimCmd *const sMeowthJewelMultiplierAnimCmds[] = { - sMeowthJewelMultiplierAnimCmd_2x, - sMeowthJewelMultiplierAnimCmd_3x, - sMeowthJewelMultiplierAnimCmd_4x, - sMeowthJewelMultiplierAnimCmd_5x, - sMeowthJewelMultiplierAnimCmd_6x, -}; - -static const struct SpriteTemplate sMeowthJewelMultiplierSpriteTemplate = { - .tileTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, - .paletteTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, - .oam = &sMeowthJewelMultiplierOamData, - .anims = sMeowthJewelMultiplierAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateMeowthJewelMultiplierSprite, -}; - -static const struct OamData sMeowthJewelSparkleOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sMeowthJewelSparkleAnimCmd_0[] = { - ANIMCMD_FRAME(0, 11), - ANIMCMD_FRAME(1, 11), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd *const sMeowthJewelSparkleAnimCmds[] = { - sMeowthJewelSparkleAnimCmd_0, -}; - -static const struct SpriteTemplate sMeowthJewelSparkleSpriteTemplate = { - .tileTag = TAG_TILES_MEOWTH_JEWEL_SPARKLE, - .paletteTag = TAG_MEOWTH_JEWEL_MUTLIPLIER, - .oam = &sMeowthJewelSparkleOamData, - .anims = sMeowthJewelSparkleAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateMeowthJewelSparkleSprite, -}; - -static const u8 sDiglettStateTiles[][4] = { - [DIGLETT_STATE_INIT] = {0x4C, 0x4D, 0x4E, 0x4F}, - [DIGLETT_STATE_HIDDEN] = {0x4C, 0x4D, 0x4E, 0x4F}, - [DIGLETT_STATE_IDLE_0] = {0x3C, 0x3D, 0x3E, 0x3F}, - [DIGLETT_STATE_IDLE_1] = {0x44, 0x45, 0x46, 0x47}, - [DIGLETT_STATE_IDLE_2] = {0x3C, 0x3D, 0x3E, 0x3F}, - [DIGLETT_STATE_IDLE_3] = {0x40, 0x41, 0x42, 0x43}, - [DIGLETT_STATE_HIT_0] = {0x48, 0x49, 0x4A, 0x4B}, - [DIGLETT_STATE_HIT_1] = {0x48, 0x49, 0x4A, 0x4B}, - [DIGLETT_STATE_HIT_2] = {0x48, 0x49, 0x4A, 0x4B}, -}; - -static const u8 sDiglettCoords[NUM_DIGLETTS][2] = { - {1, 3}, - {1, 5}, - {1, 7}, - {3, 4}, - {3, 6}, - {3, 8}, - {5, 3}, - {5, 5}, - {5, 7}, - {5, 9}, - {7, 4}, - {7, 6}, - {7, 8}, - {7, 10}, - {9, 5}, - {9, 7}, - {9, 9}, - {11, 4}, - {11, 6}, - {11, 8}, - {11, 10}, - {13, 3}, - {13, 5}, - {13, 7}, - {13, 9}, - {15, 4}, - {15, 6}, - {15, 8}, - {17, 3}, - {17, 5}, - {17, 7}, -}; - -static const u8 sDiglettInitOrder[NUM_DIGLETTS] = { 0, 28, 1, 29, 3, 25, 6, 21, 2, 30, 4, 26, 7, 22, 10, 17, 5, 27, 8, 23, 11, 18, 14, 9, 24, 12, 19, 15, 13, 20, 16 }; - -static const struct OamData sDugtrioOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sDugtrioAnimCmd_Hidden[] = { - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sDugtrioAnimCmd_3Alive[] = { - ANIMCMD_FRAME(16, 14), - ANIMCMD_FRAME(32, 14), - ANIMCMD_FRAME(48, 14), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sDugtrioAnimCmd_3AliveHit[] = { - ANIMCMD_FRAME(64, 12), - ANIMCMD_END, -}; - -static const union AnimCmd sDugtrioAnimCmd_2Alive[] = { - ANIMCMD_FRAME(80, 14), - ANIMCMD_FRAME(96, 14), - ANIMCMD_FRAME(112, 14), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sDugtrioAnimCmd_2AliveHit[] = { - ANIMCMD_FRAME(128, 12), - ANIMCMD_END, -}; - -static const union AnimCmd sDugtrioAnimCmd_1Alive[] = { - ANIMCMD_FRAME(144, 14), - ANIMCMD_FRAME(160, 28), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sDugtrioAnimCmd_1AliveHit[] = { - ANIMCMD_FRAME(176, 12), - ANIMCMD_END, -}; - -static const union AnimCmd sDugtrioAnimCmd_0Alive[] = { - ANIMCMD_FRAME(192, 33), // We want a duration of 66 frames, but 63 is the maximum an ANIMCMD_FRAME can hold. - ANIMCMD_FRAME(192, 33), - ANIMCMD_END, -}; - -static const union AnimCmd *const sDugtrioAnimCmds[] = { - sDugtrioAnimCmd_Hidden, - sDugtrioAnimCmd_3Alive, - sDugtrioAnimCmd_3AliveHit, - sDugtrioAnimCmd_2Alive, - sDugtrioAnimCmd_2AliveHit, - sDugtrioAnimCmd_1Alive, - sDugtrioAnimCmd_1AliveHit, - sDugtrioAnimCmd_0Alive, -}; - -static const struct SpriteTemplate sDugtrioSpriteTemplate = { - .tileTag = TAG_DUGTRIO, - .paletteTag = TAG_DUGTRIO, - .oam = &sDugtrioOamData, - .anims = sDugtrioAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateDugtrioSprite, -}; - -static const struct OamData sSeelOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSeelAnimCmd_SwimRight[] = { - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(16, 13), - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(32, 12), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sSeelAnimCmd_TurnLeft[] = { - ANIMCMD_FRAME(48, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(64, 4, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(48, 4, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelAnimCmd_SwimLeft[] = { - ANIMCMD_FRAME(0, 8, .hFlip = TRUE), - ANIMCMD_FRAME(16, 13, .hFlip = TRUE), - ANIMCMD_FRAME(0, 8, .hFlip = TRUE), - ANIMCMD_FRAME(32, 12, .hFlip = TRUE), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sSeelAnimCmd_TurnRight[] = { - ANIMCMD_FRAME(48, 4, .hFlip = TRUE), - ANIMCMD_FRAME(64, 4, .hFlip = TRUE), - ANIMCMD_FRAME(80, 6, .hFlip = TRUE), - ANIMCMD_FRAME(64, 4, .vFlip = TRUE), - ANIMCMD_FRAME(48, 4, .vFlip = TRUE), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelAnimCmd_EmergeRight[] = { - ANIMCMD_FRAME(48, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(96, 5), - ANIMCMD_FRAME(112, 5), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(144, 8), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelAnimCmd_EmergeLeft[] = { - ANIMCMD_FRAME(48, 4, .hFlip = TRUE), - ANIMCMD_FRAME(64, 4, .hFlip = TRUE), - ANIMCMD_FRAME(96, 5), - ANIMCMD_FRAME(112, 5), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(144, 8), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelAnimCmd_Visible[] = { - ANIMCMD_FRAME(160, 30), - ANIMCMD_FRAME(176, 30), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sSeelAnimCmd_SubmergeRight[] = { - ANIMCMD_FRAME(144, 9), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(192, 6), - ANIMCMD_FRAME(224, 16), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(112, 5), - ANIMCMD_FRAME(96, 5), - ANIMCMD_FRAME(64, 4, .vFlip = TRUE), - ANIMCMD_FRAME(48, 4, .vFlip = TRUE), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelAnimCmd_SubmergeLeft[] = { - ANIMCMD_FRAME(144, 9), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(192, 6), - ANIMCMD_FRAME(224, 16), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(112, 5), - ANIMCMD_FRAME(96, 5), - ANIMCMD_FRAME(64, 4, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(48, 4, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelAnimCmd_HitRight[] = { - ANIMCMD_FRAME(208, 16), - ANIMCMD_FRAME(192, 6), - ANIMCMD_FRAME(224, 16), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(112, 5), - ANIMCMD_FRAME(96, 5), - ANIMCMD_FRAME(64, 4, .vFlip = TRUE), - ANIMCMD_FRAME(48, 4, .vFlip = TRUE), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelAnimCmd_HitLeft[] = { - ANIMCMD_FRAME(208, 16), - ANIMCMD_FRAME(192, 6), - ANIMCMD_FRAME(224, 16), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(80, 6), - ANIMCMD_FRAME(112, 5), - ANIMCMD_FRAME(96, 5), - ANIMCMD_FRAME(64, 4, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_FRAME(48, 4, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_END, -}; - -static const union AnimCmd *const sSeelAnimCmds[] = { - sSeelAnimCmd_SwimRight, - sSeelAnimCmd_TurnLeft, - sSeelAnimCmd_SwimLeft, - sSeelAnimCmd_TurnRight, - sSeelAnimCmd_EmergeRight, - sSeelAnimCmd_EmergeLeft, - sSeelAnimCmd_Visible, - sSeelAnimCmd_SubmergeRight, - sSeelAnimCmd_SubmergeLeft, - sSeelAnimCmd_HitRight, - sSeelAnimCmd_HitLeft, -}; - -static const struct SpriteTemplate sSeelSpriteTemplate = { - .tileTag = TAG_SEEL, - .paletteTag = TAG_SEEL, - .oam = &sSeelOamData, - .anims = sSeelAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateSeelSprite, -}; - -static const u8 sInitialSeelStates[NUM_SEELS] = { - SEEL_STATE_SWIM_RIGHT, - SEEL_STATE_SWIM_LEFT, - SEEL_STATE_SWIM_RIGHT, -}; - -static const u8 sInitialSeelCoords[NUM_SEELS][2] = { - {110, 30}, - {46, 56}, - {78, 82}, -}; - -static const struct OamData sSeelSparkleOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSeelSparkleAnimCmd_0[] = { - ANIMCMD_FRAME(0, 11), - ANIMCMD_FRAME(1, 11), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd *const sSeelSparkleAnimCmds[] = { - sSeelSparkleAnimCmd_0, -}; - -static const struct SpriteTemplate sSeelSparkleSpriteTemplate = { - .tileTag = TAG_SEEL_SPARKLE, - .paletteTag = TAG_SEEL_SPARKLE, - .oam = &sSeelSparkleOamData, - .anims = sSeelSparkleAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateSeelSparkleSprite, -}; - -static const struct OamData sSeelMultiplierOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(16x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x8), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSeelMultiplierAnimCmd_2x[] = { - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelMultiplierAnimCmd_3x[] = { - ANIMCMD_FRAME(2, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelMultiplierAnimCmd_4x[] = { - ANIMCMD_FRAME(4, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelMultiplierAnimCmd_5x[] = { - ANIMCMD_FRAME(6, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelMultiplierAnimCmd_6x[] = { - ANIMCMD_FRAME(8, 0), - ANIMCMD_END, +static const u16 sFlipperRadiusMagnitudes[32] = { + 0x0000, 0x000C, 0x001C, 0x0030, 0x0038, 0x0048, 0x005C, 0x006C, 0x0070, 0x0080, 0x0094, 0x00A4, 0x00B4, 0x00C4, 0x00D4, 0x00E4, + 0x00F8, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, }; -static const union AnimCmd sSeelMultiplierAnimCmd_7x[] = { - ANIMCMD_FRAME(10, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sSeelMultiplierAnimCmd_8x[] = { - ANIMCMD_FRAME(12, 0), - ANIMCMD_END, -}; - -static const union AnimCmd *const sSeelMultiplierAnimCmds[] = { - sSeelMultiplierAnimCmd_2x, - sSeelMultiplierAnimCmd_3x, - sSeelMultiplierAnimCmd_4x, - sSeelMultiplierAnimCmd_5x, - sSeelMultiplierAnimCmd_6x, - sSeelMultiplierAnimCmd_7x, - sSeelMultiplierAnimCmd_8x, -}; - -static const struct SpriteTemplate sSeelMultiplierSpriteTemplate = { - .tileTag = TAG_SEEL_MULTIPLIER, - .paletteTag = TAG_SEEL_MULTIPLIER, - .oam = &sSeelMultiplierOamData, - .anims = sSeelMultiplierAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateSeelMultiplierSprite, -}; - -static const struct OamData sGastlyOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sGastlyAnimCmd_Visible[] = { - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sGastlyAnimCmd_Hit[] = { - ANIMCMD_FRAME(16, 8), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(16, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(32, 3), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(32, 3), - ANIMCMD_FRAME(16, 2), - ANIMCMD_FRAME(32, 2), - ANIMCMD_FRAME(16, 2), - ANIMCMD_FRAME(32, 2), - ANIMCMD_FRAME(16, 1), - ANIMCMD_FRAME(32, 1), - ANIMCMD_FRAME(16, 1), - ANIMCMD_FRAME(32, 1), - ANIMCMD_END, -}; - -static const union AnimCmd *const sGastlyAnimCmds[] = { - sGastlyAnimCmd_Visible, - sGastlyAnimCmd_Hit, -}; - -static const struct SpriteTemplate sGastlySpriteTemplate = { - .tileTag = TAG_GASTLY, - .paletteTag = TAG_GASTLY, - .oam = &sGastlyOamData, - .anims = sGastlyAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateGastlySprite, -}; - -static const struct OamData sHaunterOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sHaunterAnimCmd_Visible[] = { - ANIMCMD_FRAME(0, 13), - ANIMCMD_FRAME(64, 13), - ANIMCMD_FRAME(128, 13), - ANIMCMD_FRAME(192, 13), - ANIMCMD_JUMP(0), -}; - -static const union AnimCmd sHaunterAnimCmd_Hit[] = { - ANIMCMD_FRAME(256, 8), - ANIMCMD_FRAME(320, 4), - ANIMCMD_FRAME(256, 4), - ANIMCMD_FRAME(320, 4), - ANIMCMD_FRAME(256, 3), - ANIMCMD_FRAME(320, 3), - ANIMCMD_FRAME(256, 3), - ANIMCMD_FRAME(320, 3), - ANIMCMD_FRAME(256, 2), - ANIMCMD_FRAME(320, 2), - ANIMCMD_FRAME(256, 2), - ANIMCMD_FRAME(320, 2), - ANIMCMD_FRAME(256, 1), - ANIMCMD_FRAME(320, 1), - ANIMCMD_FRAME(256, 1), - ANIMCMD_FRAME(320, 1), - ANIMCMD_END, -}; - -static const union AnimCmd *const sHaunterAnimCmds[] = { - sHaunterAnimCmd_Visible, - sHaunterAnimCmd_Hit, -}; - -static const struct SpriteTemplate sHaunterSpriteTemplate = { - .tileTag = TAG_HAUNTER, - .paletteTag = TAG_HAUNTER, - .oam = &sHaunterOamData, - .anims = sHaunterAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateHaunterSprite, -}; - -static const struct OamData sGengarOamData = { - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 0, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sGengarAnimCmd_Stand[] = { - ANIMCMD_FRAME(0, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sGengarAnimCmd_StepLeft[] = { - ANIMCMD_FRAME(64, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sGengarAnimCmd_StepRight[] = { - ANIMCMD_FRAME(128, 0), - ANIMCMD_END, -}; - -static const union AnimCmd sGengarAnimCmd_Hit[] = { - ANIMCMD_FRAME(192, 16), - ANIMCMD_FRAME(64, 32), - ANIMCMD_FRAME(0, 10), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 2), - ANIMCMD_END, -}; - -static const union AnimCmd sGengarAnimCmd_Leave[] = { - ANIMCMD_FRAME(192, 16), - ANIMCMD_FRAME(0, 16), - ANIMCMD_FRAME(320, 8), - ANIMCMD_FRAME(384, 12), - ANIMCMD_FRAME(320, 10), - ANIMCMD_FRAME(0, 16), - ANIMCMD_FRAME(320, 8), - ANIMCMD_FRAME(384, 12), - ANIMCMD_FRAME(320, 10), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(448, 4), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(0, 1), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 3), - ANIMCMD_FRAME(448, 3), - ANIMCMD_FRAME(128, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(128, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(128, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(128, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(64, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(0, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(128, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(128, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(128, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(128, 2), - ANIMCMD_FRAME(448, 2), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(128, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_FRAME(0, 1), - ANIMCMD_FRAME(448, 1), - ANIMCMD_END, -}; - -static const union AnimCmd *const sGengarAnimCmds[] = { - sGengarAnimCmd_Stand, - sGengarAnimCmd_StepLeft, - sGengarAnimCmd_StepRight, - sGengarAnimCmd_Hit, - sGengarAnimCmd_Leave, -}; - -static const struct SpriteTemplate sGengarSpriteTemplate = { - .tileTag = TAG_GENGAR, - .paletteTag = TAG_GENGAR, - .oam = &sGengarOamData, - .anims = sGengarAnimCmds, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateGengarSprite, -}; - -static const u8 sGengarGravestoneCollisionAttributes[] = {0x19, 0x1A, 0x1B, 0x1C, 0x27, 0x1D, 0x1E, 0x1F, 0x20}; - -static const u8 sGengarGravestoneCoords[][2] = { - {8, 5}, - {15, 4}, - {4, 8}, - {14, 9}, -}; - -static const u8 sInitialGastlyData[NUM_GASTLY][5] = { - {24, 24, GHOST_DIR_RIGHT, 24, 64}, - {96, 48, GHOST_DIR_RIGHT, 96, 136}, - {64, 72, GHOST_DIR_RIGHT, 64, 96}, -}; - -static const u8 sInitialHaunterData[NUM_HAUNTER][5] = { - {94, 30, GHOST_DIR_RIGHT, 94, 134}, - {30, 66, GHOST_DIR_RIGHT, 30, 70}, -}; - -static const s8 sCollisionTestPointOffsets[][2] = { - { 4, 0 }, - { 4, 1 }, - { 3, 3 }, - { 1, 4 }, - { 0, 4 }, - { -1, 4 }, - { -3, 3 }, - { -4, 1 }, - { -4, 0 }, - { -4, -1 }, - { -3, -3 }, - { -1, -4 }, - { 0, -4 }, - { 1, -4 }, - { 3, -3 }, - { 4, -1 }, -}; - -// This array is indexed by the start and end indexes of the 16 collision point tests. -// The values here are on a 256-degree'd unit circle, where an angle of 0x00 is pointing -// directly up, 0x40 is pointing directly right, 0x80 is pointing directly down, and -// 0xC0 is pointing directly left. -static const u8 sCollisionNormals[256] = { - 0xC0, 0xC5, 0xD0, 0xDB, 0xE0, 0xE5, 0xF0, 0xFB, 0x00, 0x05, 0x10, 0x1B, 0x20, 0x25, 0x30, 0x3B, // 0x0X - 0x45, 0xCA, 0xD5, 0xE0, 0xE5, 0xEA, 0xF5, 0x00, 0x05, 0x0A, 0x15, 0x20, 0x25, 0x2A, 0x35, 0x40, // 0x1X - 0x50, 0x55, 0xE0, 0xEB, 0xF0, 0xF5, 0x00, 0x0B, 0x10, 0x15, 0x20, 0x2B, 0x30, 0x35, 0x40, 0x4B, // 0x2X - 0x5B, 0x60, 0x6B, 0xF6, 0xFB, 0x00, 0x0B, 0x16, 0x1B, 0x20, 0x2B, 0x36, 0x3B, 0x40, 0x4B, 0x56, // 0x3X - 0x60, 0x65, 0x70, 0x7B, 0x00, 0x05, 0x10, 0x1B, 0x20, 0x25, 0x30, 0x3B, 0x40, 0x45, 0x50, 0x5B, // 0x4X - 0x65, 0x6A, 0x75, 0x80, 0x85, 0x0A, 0x15, 0x20, 0x25, 0x2A, 0x35, 0x40, 0x45, 0x4A, 0x55, 0x60, // 0x5X - 0x70, 0x75, 0x80, 0x8B, 0x90, 0x95, 0x20, 0x2B, 0x30, 0x35, 0x40, 0x4B, 0x50, 0x55, 0x60, 0x6B, // 0x6X - 0x7B, 0x80, 0x8B, 0x96, 0x9B, 0xA0, 0xAB, 0x36, 0x3B, 0x40, 0x4B, 0x56, 0x5B, 0x60, 0x6B, 0x76, // 0x7X - 0x80, 0x85, 0x90, 0x9B, 0xA0, 0xA5, 0xB0, 0xBB, 0x40, 0x45, 0x50, 0x5B, 0x60, 0x65, 0x70, 0x7B, // 0x8X - 0x85, 0x8A, 0x95, 0xA0, 0xA5, 0xAA, 0xB5, 0xC0, 0xC5, 0x4A, 0x55, 0x60, 0x65, 0x6A, 0x75, 0x80, // 0x9X - 0x90, 0x95, 0xA0, 0xAB, 0xB0, 0xB5, 0xC0, 0xCB, 0xD0, 0xD5, 0x60, 0x6B, 0x70, 0x75, 0x80, 0x8B, // 0xAX - 0x9B, 0xA0, 0xAB, 0xB6, 0xBB, 0xC0, 0xCB, 0xD6, 0xDB, 0xE0, 0xEB, 0x76, 0x7B, 0x80, 0x8B, 0x96, // 0xBX - 0xA0, 0xA5, 0xB0, 0xBB, 0xC0, 0xC5, 0xD0, 0xDB, 0xE0, 0xE5, 0xF0, 0xFB, 0x80, 0x85, 0x90, 0x9B, // 0xCX - 0xA5, 0xAA, 0xB5, 0xC0, 0xC5, 0xCA, 0xD5, 0xE0, 0xE5, 0xEA, 0xF5, 0x00, 0x05, 0x8A, 0x95, 0xA0, // 0xDX - 0xB0, 0xB5, 0xC0, 0xCB, 0xD0, 0xD5, 0xE0, 0xEB, 0xF0, 0xF5, 0x00, 0x0B, 0x10, 0x15, 0xA0, 0xAB, // 0xEX - 0xBB, 0xC0, 0xCB, 0xD6, 0xDB, 0xE0, 0xEB, 0xF6, 0xFB, 0x00, 0x0B, 0x16, 0x1B, 0x20, 0x2B, 0xB6, // 0xFX -}; - -// This array is indexed by the start and end indexes of the 16 collision point tests. -// It is used to move the ball out of the the wall it's colliding with. -static const u16 sCollisionXDeltas[256] = { - 0xFF00, 0xFEFB, 0xFECC, 0xFE8C, 0xFE77, 0xFE71, 0xFEAD, 0xFF73, 0x0000, 0x00AC, 0x027F, 0x0497, 0x0589, 0x066D, 0x0808, 0x08E7, // 0x0X - 0x08E7, 0xFF08, 0xFF01, 0xFEE4, 0xFEDE, 0xFEE3, 0xFF32, 0x0000, 0x008D, 0x0137, 0x02FD, 0x04FD, 0x05E1, 0x06B6, 0x082C, 0x08E1, // 0x1X - 0x0808, 0x07B4, 0xFF4B, 0xFF70, 0xFF81, 0xFF99, 0x0000, 0x00CE, 0x0153, 0x01F0, 0x0389, 0x0547, 0x0608, 0x06B8, 0x07D4, 0x082C, // 0x2X - 0x066D, 0x05F6, 0x045D, 0xFFC2, 0xFFE0, 0x0000, 0x0067, 0x011D, 0x018F, 0x0214, 0x036C, 0x04D9, 0x0572, 0x05F8, 0x06B8, 0x06B6, // 0x3X - 0x0589, 0x0504, 0x0353, 0x0119, 0x0000, 0x0020, 0x007F, 0x0122, 0x0189, 0x0200, 0x0334, 0x0479, 0x04FF, 0x0572, 0x0608, 0x05E1, // 0x4X - 0x0497, 0x0406, 0x0243, 0x0000, 0xFEE7, 0x003E, 0x0090, 0x011C, 0x0174, 0x01DC, 0x02EB, 0x0407, 0x0479, 0x04D9, 0x0547, 0x04FD, // 0x5X - 0x027F, 0x01DC, 0x0000, 0xFDBD, 0xFCAD, 0xFBA3, 0x00B5, 0x00FF, 0x0134, 0x0176, 0x022B, 0x02EB, 0x0334, 0x036C, 0x0389, 0x02FD, // 0x6X - 0x00AC, 0x0000, 0xFE24, 0xFBFA, 0xFAFC, 0xFA0A, 0xF84C, 0x00F8, 0x0105, 0x011E, 0x0176, 0x01DC, 0x0200, 0x0214, 0x01F0, 0x0137, // 0x7X - 0x0000, 0xFF54, 0xFD81, 0xFB69, 0xFA77, 0xF993, 0xF7F8, 0xF719, 0x0100, 0x0105, 0x0134, 0x0174, 0x0189, 0x018F, 0x0153, 0x008D, // 0x8X - 0xFF73, 0xFEC9, 0xFD03, 0xFB03, 0xFA1F, 0xF94A, 0xF7D4, 0xF71F, 0xF719, 0x00F8, 0x00FF, 0x011C, 0x0122, 0x011D, 0x00CE, 0x0000, // 0x9X - 0xFEAD, 0xFE10, 0xFC77, 0xFAB9, 0xF9F8, 0xF948, 0xF82C, 0xF7D4, 0xF7F8, 0xF84C, 0x00B5, 0x0090, 0x007F, 0x0067, 0x0000, 0xFF32, // 0xAX - 0xFE71, 0xFDEC, 0xFC94, 0xFB27, 0xFA8E, 0xFA08, 0xF948, 0xF94A, 0xF993, 0xFA0A, 0xFBA3, 0x003E, 0x0020, 0x0000, 0xFF99, 0xFEE3, // 0xBX - 0xFE77, 0xFE00, 0xFCCC, 0xFB87, 0xFB01, 0xFA8E, 0xF9F8, 0xFA1F, 0xFA77, 0xFAFC, 0xFCAD, 0xFEE7, 0x0000, 0xFFE0, 0xFF81, 0xFEDE, // 0xCX - 0xFE8C, 0xFE24, 0xFD15, 0xFBF9, 0xFB87, 0xFB27, 0xFAB9, 0xFB03, 0xFB69, 0xFBFA, 0xFDBD, 0x0000, 0x0119, 0xFFC2, 0xFF70, 0xFEE4, // 0xDX - 0xFECC, 0xFE8A, 0xFDD5, 0xFD15, 0xFCCC, 0xFC94, 0xFC77, 0xFD03, 0xFD81, 0xFE24, 0x0000, 0x0243, 0x0353, 0x045D, 0xFF4B, 0xFF01, // 0xEX - 0xFEFB, 0xFEE2, 0xFE8A, 0xFE24, 0xFE00, 0xFDEC, 0xFE10, 0xFEC9, 0xFF54, 0x0000, 0x01DC, 0x0406, 0x0504, 0x05F6, 0x07B4, 0xFF08, // 0xFX -}; - -// This array is indexed by the start and end indexes of the 16 collision point tests. -// It is used to move the ball out of the the wall it's colliding with. -static const u16 sCollisionYDeltas[256] = { - 0x0000, 0xFFE0, 0xFF81, 0xFEDE, 0xFE77, 0xFE00, 0xFCCC, 0xFB87, 0xFB01, 0xFA8E, 0xF9F8, 0xFA1F, 0xFA77, 0xFAFC, 0xFCAD, 0xFEE7, // 0x0X - 0x0119, 0xFFC2, 0xFF70, 0xFEE4, 0xFE8C, 0xFE24, 0xFD15, 0xFBF9, 0xFB87, 0xFB27, 0xFAB9, 0xFB03, 0xFB69, 0xFBFA, 0xFDBD, 0x0000, // 0x1X - 0x0353, 0x045D, 0xFF4B, 0xFF01, 0xFECC, 0xFE8A, 0xFDD5, 0xFD15, 0xFCCC, 0xFC94, 0xFC77, 0xFD03, 0xFD81, 0xFE24, 0x0000, 0x0243, // 0x2X - 0x0504, 0x05F6, 0x07B4, 0xFF08, 0xFEFB, 0xFEE2, 0xFE8A, 0xFE24, 0xFE00, 0xFDEC, 0xFE10, 0xFEC9, 0xFF54, 0x0000, 0x01DC, 0x0406, // 0x3X - 0x0589, 0x066D, 0x0808, 0x08E7, 0xFF00, 0xFEFB, 0xFECC, 0xFE8C, 0xFE77, 0xFE71, 0xFEAD, 0xFF73, 0x0000, 0x00AC, 0x027F, 0x0497, // 0x4X - 0x05E1, 0x06B6, 0x082C, 0x08E1, 0x08E7, 0xFF08, 0xFF01, 0xFEE4, 0xFEDE, 0xFEE3, 0xFF32, 0x0000, 0x008D, 0x0137, 0x02FD, 0x04FD, // 0x5X - 0x0608, 0x06B8, 0x07D4, 0x082C, 0x0808, 0x07B4, 0xFF4B, 0xFF70, 0xFF81, 0xFF99, 0x0000, 0x00CE, 0x0153, 0x01F0, 0x0389, 0x0547, // 0x6X - 0x0572, 0x05F8, 0x06B8, 0x06B6, 0x066D, 0x05F6, 0x045D, 0xFFC2, 0xFFE0, 0x0000, 0x0067, 0x011D, 0x018F, 0x0214, 0x036C, 0x04D9, // 0x7X - 0x04FF, 0x0572, 0x0608, 0x05E1, 0x0589, 0x0504, 0x0353, 0x0119, 0x0000, 0x0020, 0x007F, 0x0122, 0x0189, 0x0200, 0x0334, 0x0479, // 0x8X - 0x0479, 0x04D9, 0x0547, 0x04FD, 0x0497, 0x0406, 0x0243, 0x0000, 0xFEE7, 0x003E, 0x0090, 0x011C, 0x0174, 0x01DC, 0x02EB, 0x0407, // 0x9X - 0x0334, 0x036C, 0x0389, 0x02FD, 0x027F, 0x01DC, 0x0000, 0xFDBD, 0xFCAD, 0xFBA3, 0x00B5, 0x00FF, 0x0134, 0x0176, 0x022B, 0x02EB, // 0xAX - 0x0200, 0x0214, 0x01F0, 0x0137, 0x00AC, 0x0000, 0xFE24, 0xFBFA, 0xFAFC, 0xFA0A, 0xF84C, 0x00F8, 0x0105, 0x011E, 0x0176, 0x01DC, // 0xBX - 0x0189, 0x018F, 0x0153, 0x008D, 0x0000, 0xFF54, 0xFD81, 0xFB69, 0xFA77, 0xF993, 0xF7F8, 0xF719, 0x0100, 0x0105, 0x0134, 0x0174, // 0xCX - 0x0122, 0x011D, 0x00CE, 0x0000, 0xFF73, 0xFEC9, 0xFD03, 0xFB03, 0xFA1F, 0xF94A, 0xF7D4, 0xF71F, 0xF719, 0x00F8, 0x00FF, 0x011C, // 0xDX - 0x007F, 0x0067, 0x0000, 0xFF32, 0xFEAD, 0xFE10, 0xFC77, 0xFAB9, 0xF9F8, 0xF948, 0xF82C, 0xF7D4, 0xF7F8, 0xF84C, 0x00B5, 0x0090, // 0xEX - 0x0020, 0x0000, 0xFF99, 0xFEE3, 0xFE71, 0xFDEC, 0xFC94, 0xFB27, 0xFA8E, 0xFA08, 0xF948, 0xF94A, 0xF993, 0xFA0A, 0xFBA3, 0x003E, // 0xFX -}; - -static const u16 sFlipperRadiusMagnitudes[32] = { - 0x0000, 0x000C, 0x001C, 0x0030, 0x0038, 0x0048, 0x005C, 0x006C, 0x0070, 0x0080, 0x0094, 0x00A4, 0x00B4, 0x00C4, 0x00D4, 0x00E4, - 0x00F8, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, 0x00FC, -}; - -static const s16 sTiltLeftOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_left_deltas.bin"); -static const s16 sTiltRightOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_right_deltas.bin"); -static const s16 sTiltDownOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_deltas.bin"); -static const s16 sTiltDownRightVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_right_deltas.bin"); -static const s16 sTiltDownLeftVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_left_deltas.bin"); +static const s16 sTiltLeftOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_left_deltas.bin"); +static const s16 sTiltRightOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_right_deltas.bin"); +static const s16 sTiltDownOnlyVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_deltas.bin"); +static const s16 sTiltDownRightVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_right_deltas.bin"); +static const s16 sTiltDownLeftVelocityDeltas[] = INCBIN_S16("data/pinball/tilt_down_left_deltas.bin"); static const s16 *const sTiltVelocityDeltas[] = { NULL, @@ -2698,4134 +953,1380 @@ static const s16 *const sTiltVelocityDeltas[] = { sTiltRightOnlyVelocityDeltas, NULL, sTiltDownOnlyVelocityDeltas, - sTiltDownLeftVelocityDeltas, - sTiltDownRightVelocityDeltas, - sTiltDownOnlyVelocityDeltas, -}; - -//void PlayMeowthPinballGame(void) -//{ -// PlayPinballGame(GAME_TYPE_MEOWTH); -//} - -void PlayPachinko(void) -{ - PlayPinballGame(GAME_TYPE_DIGLETT); -} - -//void PlaySeelPinballGame(void) -//{ -// PlayPinballGame(GAME_TYPE_SEEL); -//} - -//void PlayGengarPinballGame(void) -//{ -// PlayPinballGame(GAME_TYPE_GENGAR); -//} - -static void SetPlayerDigits(u16 num) -{ - u8 i; - u16 d = 1000; // Start with the thousands place - - for (i = 0; i < 4; i++) // Always show 4 digits - { - u8 digit = num / d; - - // Show the digit (all digits are visible) - gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = FALSE; - - // If it's a smaller number, show 0 for the higher place values - if (i == 0 && num < 1000) { - digit = 0; // Force 0 for the thousands place if the number is less than 1000 - } - - // Set the tileNum based on the current digit - gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.tileNum = - gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].sheetTileStart + (digit * 2); - - gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; - - // Reduce num for the next digit - num = num % d; - d = d / 10; - } - - BuildOamBuffer(); -} - -static void CreatePlayerSprites(void) -{ - u8 i; - - for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PlayerInterface) - 1; i++) - { - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); - } - - for (i = 0; i < 4; i++) - { - sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS] = CreateSprite(&sSpriteTemplate_PlayerDigit, i * 7 + 198, 127, 2); - gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; - } -} - -static void PlayPinballGame(u8 gameType) -{ - u8 taskId; - - ScriptContext_Stop(); - sPinballGame = AllocZeroed(sizeof(*sPinballGame)); - sPinballGame->gameType = gameType; - sPinballGame->returnMainCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; - taskId = CreateTask(FadeToPinballScreen, 0); -} - -static void FadeToPinballScreen(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[taskId].data[0]++; - break; - case 1: - if (!gPaletteFade.active) - { - SetMainCallback2(InitPinballScreen); - DestroyTask(taskId); - } - break; - } -} - -static void RandomLevel(void) -{ - struct Diglett *diglett = &sPinballGame->diglett; - - if (sScore->Level == 1) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_01_BgTilemap, sizeof(sLevel_01_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_01_BgCollisionMap, ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); - } - else if (sScore->Level == 2) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_02_BgTilemap, sizeof(sLevel_02_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_02_BgCollisionMap) * sizeof(sLevel_02_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_02_BgCollisionMap, ARRAY_COUNT(sLevel_02_BgCollisionMap) * sizeof(sLevel_02_BgCollisionMap[0])); - } - else if (sScore->Level == 3) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_03_BgTilemap, sizeof(sLevel_03_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_03_BgCollisionMap) * sizeof(sLevel_03_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_03_BgCollisionMap, ARRAY_COUNT(sLevel_03_BgCollisionMap) * sizeof(sLevel_03_BgCollisionMap[0])); - } - else if (sScore->Level == 4) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_04_BgTilemap, sizeof(sLevel_04_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_04_BgCollisionMap) * sizeof(sLevel_04_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_04_BgCollisionMap, ARRAY_COUNT(sLevel_04_BgCollisionMap) * sizeof(sLevel_04_BgCollisionMap[0])); - } - else if (sScore->Level == 5) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_05_BgTilemap, sizeof(sLevel_05_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_05_BgCollisionMap) * sizeof(sLevel_05_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_05_BgCollisionMap, ARRAY_COUNT(sLevel_05_BgCollisionMap) * sizeof(sLevel_05_BgCollisionMap[0])); - } - else if (sScore->Level == 6) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_06_BgTilemap, sizeof(sLevel_06_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_06_BgCollisionMap) * sizeof(sLevel_06_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_06_BgCollisionMap, ARRAY_COUNT(sLevel_06_BgCollisionMap) * sizeof(sLevel_06_BgCollisionMap[0])); - } - else if (sScore->Level == 7) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_07_BgTilemap, sizeof(sLevel_07_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_07_BgCollisionMap) * sizeof(sLevel_07_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_07_BgCollisionMap, ARRAY_COUNT(sLevel_07_BgCollisionMap) * sizeof(sLevel_07_BgCollisionMap[0])); - } - else if (sScore->Level == 8) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_08_BgTilemap, sizeof(sLevel_08_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_08_BgCollisionMap) * sizeof(sLevel_08_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_08_BgCollisionMap, ARRAY_COUNT(sLevel_08_BgCollisionMap) * sizeof(sLevel_08_BgCollisionMap[0])); - } - else if (sScore->Level == 9) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_09_BgTilemap, sizeof(sLevel_09_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_09_BgCollisionMap) * sizeof(sLevel_09_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_09_BgCollisionMap, ARRAY_COUNT(sLevel_09_BgCollisionMap) * sizeof(sLevel_09_BgCollisionMap[0])); - } - else if (sScore->Level == 10) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_10_BgTilemap, sizeof(sLevel_10_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_10_BgCollisionMap) * sizeof(sLevel_10_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_10_BgCollisionMap, ARRAY_COUNT(sLevel_10_BgCollisionMap) * sizeof(sLevel_10_BgCollisionMap[0])); - } - else if (sScore->Level == 11) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_11_BgTilemap, sizeof(sLevel_11_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_11_BgCollisionMap) * sizeof(sLevel_11_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_11_BgCollisionMap, ARRAY_COUNT(sLevel_11_BgCollisionMap) * sizeof(sLevel_11_BgCollisionMap[0])); - } - else if (sScore->Level == 12) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_12_BgTilemap, sizeof(sLevel_12_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_12_BgCollisionMap) * sizeof(sLevel_12_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_12_BgCollisionMap, ARRAY_COUNT(sLevel_12_BgCollisionMap) * sizeof(sLevel_12_BgCollisionMap[0])); - } - else if (sScore->Level == 13) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_13_BgTilemap, sizeof(sLevel_13_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_13_BgCollisionMap) * sizeof(sLevel_13_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_13_BgCollisionMap, ARRAY_COUNT(sLevel_13_BgCollisionMap) * sizeof(sLevel_13_BgCollisionMap[0])); - } - else if (sScore->Level == 14) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_14_BgTilemap, sizeof(sLevel_14_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_14_BgCollisionMap) * sizeof(sLevel_14_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_14_BgCollisionMap, ARRAY_COUNT(sLevel_14_BgCollisionMap) * sizeof(sLevel_14_BgCollisionMap[0])); - } - else if (sScore->Level == 15) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_15_BgTilemap, sizeof(sLevel_15_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_15_BgCollisionMap) * sizeof(sLevel_15_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_15_BgCollisionMap, ARRAY_COUNT(sLevel_15_BgCollisionMap) * sizeof(sLevel_15_BgCollisionMap[0])); - } - else if (sScore->Level == 16) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_16_BgTilemap, sizeof(sLevel_16_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_16_BgCollisionMap) * sizeof(sLevel_16_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_16_BgCollisionMap, ARRAY_COUNT(sLevel_16_BgCollisionMap) * sizeof(sLevel_16_BgCollisionMap[0])); - } - else if (sScore->Level == 17) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_17_BgTilemap, sizeof(sLevel_17_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_17_BgCollisionMap) * sizeof(sLevel_17_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_17_BgCollisionMap, ARRAY_COUNT(sLevel_17_BgCollisionMap) * sizeof(sLevel_17_BgCollisionMap[0])); - } - else if (sScore->Level == 18) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_18_BgTilemap, sizeof(sLevel_18_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_18_BgCollisionMap) * sizeof(sLevel_18_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_18_BgCollisionMap, ARRAY_COUNT(sLevel_18_BgCollisionMap) * sizeof(sLevel_18_BgCollisionMap[0])); - } - else if (sScore->Level == 19) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_19_BgTilemap, sizeof(sLevel_19_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_19_BgCollisionMap) * sizeof(sLevel_19_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_19_BgCollisionMap, ARRAY_COUNT(sLevel_19_BgCollisionMap) * sizeof(sLevel_19_BgCollisionMap[0])); - } - else if (sScore->Level == 20) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_20_BgTilemap, sizeof(sLevel_20_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_20_BgCollisionMap) * sizeof(sLevel_20_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_20_BgCollisionMap, ARRAY_COUNT(sLevel_20_BgCollisionMap) * sizeof(sLevel_20_BgCollisionMap[0])); - } - else if (sScore->Level == 21) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_21_BgTilemap, sizeof(sLevel_21_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_21_BgCollisionMap) * sizeof(sLevel_21_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_21_BgCollisionMap, ARRAY_COUNT(sLevel_21_BgCollisionMap) * sizeof(sLevel_21_BgCollisionMap[0])); - } - else if (sScore->Level == 22) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_22_BgTilemap, sizeof(sLevel_22_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_22_BgCollisionMap) * sizeof(sLevel_22_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_22_BgCollisionMap, ARRAY_COUNT(sLevel_22_BgCollisionMap) * sizeof(sLevel_22_BgCollisionMap[0])); - } - else if (sScore->Level == 23) - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_23_BgTilemap, sizeof(sLevel_23_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_23_BgCollisionMap) * sizeof(sLevel_23_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_23_BgCollisionMap, ARRAY_COUNT(sLevel_23_BgCollisionMap) * sizeof(sLevel_23_BgCollisionMap[0])); - } - //else if (sScore->Level == 24) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_24_BgTilemap, sizeof(sLevel_24_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_24_BgCollisionMap) * sizeof(sLevel_24_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_24_BgCollisionMap, ARRAY_COUNT(sLevel_24_BgCollisionMap) * sizeof(sLevel_24_BgCollisionMap[0])); - //} - //else if (sScore->Level == 25) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_25_BgTilemap, sizeof(sLevel_25_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_25_BgCollisionMap) * sizeof(sLevel_25_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_25_BgCollisionMap, ARRAY_COUNT(sLevel_25_BgCollisionMap) * sizeof(sLevel_25_BgCollisionMap[0])); - //} - //else if (sScore->Level == 26) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_26_BgTilemap, sizeof(sLevel_26_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_26_BgCollisionMap) * sizeof(sLevel_26_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_26_BgCollisionMap, ARRAY_COUNT(sLevel_26_BgCollisionMap) * sizeof(sLevel_26_BgCollisionMap[0])); - //} - //else if (sScore->Level == 27) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_27_BgTilemap, sizeof(sLevel_27_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_27_BgCollisionMap) * sizeof(sLevel_27_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_27_BgCollisionMap, ARRAY_COUNT(sLevel_27_BgCollisionMap) * sizeof(sLevel_27_BgCollisionMap[0])); - //} - //else if (sScore->Level == 28) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_28_BgTilemap, sizeof(sLevel_28_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_28_BgCollisionMap) * sizeof(sLevel_28_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_28_BgCollisionMap, ARRAY_COUNT(sLevel_28_BgCollisionMap) * sizeof(sLevel_28_BgCollisionMap[0])); - //} - //else if (sScore->Level == 29) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_29_BgTilemap, sizeof(sLevel_29_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_29_BgCollisionMap) * sizeof(sLevel_29_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_29_BgCollisionMap, ARRAY_COUNT(sLevel_29_BgCollisionMap) * sizeof(sLevel_29_BgCollisionMap[0])); - //} - //else if (sScore->Level == 30) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_30_BgTilemap, sizeof(sLevel_30_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_30_BgCollisionMap) * sizeof(sLevel_30_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_30_BgCollisionMap, ARRAY_COUNT(sLevel_30_BgCollisionMap) * sizeof(sLevel_30_BgCollisionMap[0])); - //} - //else if (sScore->Level == 31) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_31_BgTilemap, sizeof(sLevel_31_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_31_BgCollisionMap) * sizeof(sLevel_31_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_31_BgCollisionMap, ARRAY_COUNT(sLevel_31_BgCollisionMap) * sizeof(sLevel_31_BgCollisionMap[0])); - //} - //else if (sScore->Level == 32) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_32_BgTilemap, sizeof(sLevel_32_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_32_BgCollisionMap) * sizeof(sLevel_32_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_32_BgCollisionMap, ARRAY_COUNT(sLevel_32_BgCollisionMap) * sizeof(sLevel_32_BgCollisionMap[0])); - //} - //else if (sScore->Level == 33) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_33_BgTilemap, sizeof(sLevel_33_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_33_BgCollisionMap) * sizeof(sLevel_33_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_33_BgCollisionMap, ARRAY_COUNT(sLevel_33_BgCollisionMap) * sizeof(sLevel_33_BgCollisionMap[0])); - //} - //else if (sScore->Level == 34) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_34_BgTilemap, sizeof(sLevel_34_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_34_BgCollisionMap) * sizeof(sLevel_34_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_34_BgCollisionMap, ARRAY_COUNT(sLevel_34_BgCollisionMap) * sizeof(sLevel_34_BgCollisionMap[0])); - //} - //else if (sScore->Level == 35) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_35_BgTilemap, sizeof(sLevel_35_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_35_BgCollisionMap) * sizeof(sLevel_35_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_35_BgCollisionMap, ARRAY_COUNT(sLevel_35_BgCollisionMap) * sizeof(sLevel_35_BgCollisionMap[0])); - //} - //else if (sScore->Level == 36) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_36_BgTilemap, sizeof(sLevel_36_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_36_BgCollisionMap) * sizeof(sLevel_36_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_36_BgCollisionMap, ARRAY_COUNT(sLevel_36_BgCollisionMap) * sizeof(sLevel_36_BgCollisionMap[0])); - //} - //else if (sScore->Level == 37) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_37_BgTilemap, sizeof(sLevel_37_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_37_BgCollisionMap) * sizeof(sLevel_37_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_37_BgCollisionMap, ARRAY_COUNT(sLevel_37_BgCollisionMap) * sizeof(sLevel_37_BgCollisionMap[0])); - //} - //else if (sScore->Level == 38) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_38_BgTilemap, sizeof(sLevel_38_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_38_BgCollisionMap) * sizeof(sLevel_38_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_38_BgCollisionMap, ARRAY_COUNT(sLevel_38_BgCollisionMap) * sizeof(sLevel_38_BgCollisionMap[0])); - //} - //else if (sScore->Level == 39) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_39_BgTilemap, sizeof(sLevel_39_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_39_BgCollisionMap) * sizeof(sLevel_39_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_39_BgCollisionMap, ARRAY_COUNT(sLevel_39_BgCollisionMap) * sizeof(sLevel_39_BgCollisionMap[0])); - //} - //else if (sScore->Level == 40) - //{ - // LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - // CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_40_BgTilemap, sizeof(sLevel_40_BgTilemap), 0); - // LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->completed = FALSE; - // diglett->numDiglettsHit = 0; - // diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_40_BgCollisionMap) * sizeof(sLevel_40_BgCollisionMap[0])); - // memcpy(diglett->collisionMap, sLevel_40_BgCollisionMap, ARRAY_COUNT(sLevel_40_BgCollisionMap) * sizeof(sLevel_40_BgCollisionMap[0])); - //} - else - { - LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sLevel_01_BgTilemap, sizeof(sLevel_01_BgTilemap), 0); - LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - diglett->completed = FALSE; - diglett->numDiglettsHit = 0; - diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); - memcpy(diglett->collisionMap, sLevel_01_BgCollisionMap, ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); - } -} - - -static void LevelChange(void) -{ - sScore->Multiplier = 1; - gSprites[sScore->MultiplierSpriteId].animNum = 0; - InitBgsFromTemplates(0, sPinballBgTemplates, ARRAY_COUNT(sPinballBgTemplates)); - SetBgTilemapBuffer(PINBALL_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - LoadBgGfx(sPinballGame->gameType); -} - -static void DestroyWin(void) -{ - DestroySpriteAndFreeResources(&gSprites[sScore->WinSpriteId]); -} - -static void DestroyTitle(void) -{ - DestroySpriteAndFreeResources(&gSprites[sScore->TitleSpriteId]); - sScore->TitleDestroyed = 1; -} - -static void DestroyNewLevel(void) -{ - DestroySpriteAndFreeResources(&gSprites[sScore->NewLevelSpriteId]); -} - -static void CreateNewLevel(void) -{ - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes2); - LoadCompressedSpriteSheet(&sSpriteSheet_NewLevel); - - sScore->NewLevelSpriteId = CreateSprite(&sSpriteTemplate_NewLevel, 92, 82, 0); - //gSprites[sScore->WinSpriteId].invisible = TRUE; -} - -static void CreateWin(void) -{ - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes2); - LoadCompressedSpriteSheet(&sSpriteSheet_Win); - - sScore->WinSpriteId = CreateSprite(&sSpriteTemplate_Win, 92, 82, 0); - //gSprites[sScore->WinSpriteId].invisible = TRUE; -} - -static void CreateGameOver(void) -{ - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes2); - LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); - - sScore->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 92, 82, 0); - //gSprites[sScore->GameOverSpriteId].invisible = TRUE; -} - -static void CreateTitle(void) -{ - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Title); - - sScore->TitleSpriteId = CreateSprite(&sSpriteTemplate_Title, 92, 82, 0); -} - -static void CreateArrow(void) -{ - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Arrow); - - sScore->ArrowSpriteId = CreateSprite(&sSpriteTemplate_Arrow, 36, 20, 0); -} - -static void CreateLives(void) -{ - - s16 x = 4; - s16 y = 156; - s16 x2 = x + 8; - s16 x3 = x + 16; - s16 x4 = x + 24; - s16 x5 = x + 32; - - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Lives); - - sScore->Live1SpriteId = CreateSprite(&sSpriteTemplate_Lives, x, y, 0); - sScore->Live2SpriteId = CreateSprite(&sSpriteTemplate_Lives, x2, y, 0); - sScore->Live3SpriteId = CreateSprite(&sSpriteTemplate_Lives, x3, y, 0); - sScore->Live4SpriteId = CreateSprite(&sSpriteTemplate_Lives, x4, y, 0); - sScore->Live5SpriteId = CreateSprite(&sSpriteTemplate_Lives, x5, y, 0); -} - -static void UpdateLives(void) -{ - if (sScore->Lives == 5) - { - gSprites[sScore->Live1SpriteId].invisible = FALSE; - gSprites[sScore->Live2SpriteId].invisible = FALSE; - gSprites[sScore->Live3SpriteId].invisible = FALSE; - gSprites[sScore->Live4SpriteId].invisible = FALSE; - gSprites[sScore->Live5SpriteId].invisible = FALSE; - } - else if (sScore->Lives == 4) - { - gSprites[sScore->Live1SpriteId].invisible = FALSE; - gSprites[sScore->Live2SpriteId].invisible = FALSE; - gSprites[sScore->Live3SpriteId].invisible = FALSE; - gSprites[sScore->Live4SpriteId].invisible = FALSE; - gSprites[sScore->Live5SpriteId].invisible = TRUE; - } - else if (sScore->Lives == 3) - { - gSprites[sScore->Live1SpriteId].invisible = FALSE; - gSprites[sScore->Live2SpriteId].invisible = FALSE; - gSprites[sScore->Live3SpriteId].invisible = FALSE; - gSprites[sScore->Live4SpriteId].invisible = TRUE; - gSprites[sScore->Live5SpriteId].invisible = TRUE; - } - else if (sScore->Lives == 2) - { - gSprites[sScore->Live1SpriteId].invisible = FALSE; - gSprites[sScore->Live2SpriteId].invisible = FALSE; - gSprites[sScore->Live3SpriteId].invisible = TRUE; - gSprites[sScore->Live4SpriteId].invisible = TRUE; - gSprites[sScore->Live5SpriteId].invisible = TRUE; - } - else if (sScore->Lives == 1) - { - gSprites[sScore->Live1SpriteId].invisible = FALSE; - gSprites[sScore->Live2SpriteId].invisible = TRUE; - gSprites[sScore->Live3SpriteId].invisible = TRUE; - gSprites[sScore->Live4SpriteId].invisible = TRUE; - gSprites[sScore->Live5SpriteId].invisible = TRUE; - } - else - { - gSprites[sScore->Live1SpriteId].invisible = TRUE; - gSprites[sScore->Live2SpriteId].invisible = TRUE; - gSprites[sScore->Live3SpriteId].invisible = TRUE; - gSprites[sScore->Live4SpriteId].invisible = TRUE; - gSprites[sScore->Live5SpriteId].invisible = TRUE; - } -} - -static void CreateSpinarak(void) -{ - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Spinarak); - - sScore->SpinarakSpriteId = CreateSprite(&sSpriteTemplate_Spinarak, 208, 48, 0); -} - -static void CreateSpeed(void) -{ - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Speed); - - sScore->SpeedSpriteId = CreateSprite(&sSpriteTemplate_Speed, 208, 160, 0); -} - -static void CreateMultiplier(void) -{ - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Multiplier); - - sScore->MultiplierSpriteId = CreateSprite(&sSpriteTemplate_Multiplier, 208, 96, 0); -} - -static void ShowJackpot(void) -{ - u16 bet; - struct WindowTemplate template; - - - SetWindowTemplateFields(&template, 3, 17, 10, 10, 2, 0xF, 0x194); - - sTextWindowId = AddWindow(&template); - FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); - PutWindowTilemap(sTextWindowId); - LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); - DrawStdWindowFrame(sTextWindowId, FALSE); - bet = 50 * sScore->Multiplier; - ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, 3); - //gStringVar4[0] = '\0'; - StringExpandPlaceholders(gStringVar4, sJackpotText); - AddTextPrinterParameterized(sTextWindowId, FONT_NARROW, gStringVar4, 0, 1, 0, 0); - CopyWindowToVram(sTextWindowId, 3); -} - -static void ShowWin(void) -{ - u16 bet; - struct WindowTemplate template; - - - SetWindowTemplateFields(&template, 3, 17, 10, 10, 2, 0xF, 0x194); - - sTextWindowId = AddWindow(&template); - FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); - PutWindowTilemap(sTextWindowId); - LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); - DrawStdWindowFrame(sTextWindowId, FALSE); - bet = 50 * sScore->Multiplier; - ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, 3); - //gStringVar4[0] = '\0'; - StringExpandPlaceholders(gStringVar4, sWinText); - AddTextPrinterParameterized(sTextWindowId, FONT_NARROW, gStringVar4, 0, 1, 0, 0); - CopyWindowToVram(sTextWindowId, 3); -} - -static void ShowLose(void) -{ - struct WindowTemplate template; - - - SetWindowTemplateFields(&template, 3, 17, 10, 10, 2, 0xF, 0x194); - - sTextWindowId = AddWindow(&template); - FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); - PutWindowTilemap(sTextWindowId); - LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); - DrawStdWindowFrame(sTextWindowId, FALSE); - AddTextPrinterParameterized(sTextWindowId, FONT_NARROW, sLoseText, 0, 1, 0, 0); - CopyWindowToVram(sTextWindowId, 3); -} - -static void ResetMessage(void) -{ - ClearStdWindowAndFrame(sTextWindowId, TRUE); - RemoveWindow(sTextWindowId); -} - -static void InitPinballScreen(void) -{ - switch (gMain.state) - { - case 0: - sScore = AllocZeroed(sizeof(struct Credits)); - SetVBlankCallback(NULL); - ResetAllBgsCoordinates(); - gMain.state++; - break; - case 1: - sScore->Level = ((Random() % 23) + 1); - sScore->LastLevel = sScore->Level; - ResetVramOamAndBgCntRegs(); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sPinballBgTemplates, ARRAY_COUNT(sPinballBgTemplates)); - //SetBgTilemapBuffer(PINBALL_BG_COVER, AllocZeroed(BG_SCREEN_SIZE)); - SetBgTilemapBuffer(PINBALL_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - LoadBgGfx(sPinballGame->gameType); - //InitWindows(sPinballWinTemplates); - //DeactivateAllTextPrinters(); - //LoadMessageBoxGfx(WIN_TEXT, 0x0, 0xF0); - //LoadUserWindowBorderGfx(WIN_TEXT, 0x14, 0xE0); - gMain.state++; - break; - case 2: - ResetSpriteData(); - FreeAllSpritePalettes(); - gMain.state++; - break; - case 3: - //CopyBgTilemapBufferToVram(PINBALL_BG_COVER); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG3_ON); - //ShowBg(PINBALL_BG_TEXT); - //ShowBg(PINBALL_BG_COVER); - ShowBg(PINBALL_BG_BASE); - ShowBg(3); - gMain.state++; - break; - case 4: - sScore->StartSpeed = 0; - sScore->Lives = 5; - sScore->Multiplier = 1; - sScore->GameStart = 0; - sScore->StartDelayMax = 2; - sScore->StartDelayTimer = sScore->StartDelayMax; - sScore->ArrowPosition = 0; - sScore->ArrowDirection = 0; - sScore->SecondDelay = 30; - LoadSpritePalettes(sSpritePalettes2); - CreateArrow(); - sScore->TitleDestroyed = 0; - sScore->TitleCounter = 140; - CreateTitle(); - //CreateGameOver(); - //CreateWin(); - CreateLives(); - CreateSpinarak(); - CreateSpeed(); - CreateMultiplier(); - CreatePlayerSprites(); - SetPlayerDigits(GetCoins()); - LoadCompressedSpriteSheet(&sBallPokeballSpriteSheet); - LoadSpritePalette(&sPinballSpritePalette); - //LoadCompressedSpriteSheet(&sFlipperSpriteSheet); - //LoadSpritePalette(&sFlipperSpritePalette); - LoadCompressedSpriteSheet(&sTimerDigitsSpriteSheet); - LoadSpritePalette(&sTimerDigitsSpritePalette); - LoadSpriteGfx(sPinballGame->gameType); - InitPinballGame(); - InitBallSprite(); - //InitFlipperSprites(); - InitTimerSprites(); - InitGameType(sPinballGame->gameType); - //StartNewBall(); - gMain.state++; - case 5: - // Center game in the middle of the screen - //SetGpuReg(REG_OFFSET_BG2HOFS, -40); - - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - SetVBlankCallback(PinballVBlankCallback); - SetMainCallback2(PinballMainCallback); - CreateTask(PinballMain, 0); - return; - } -} - -static void LoadBgGfx(u8 gameType) -{ - ResetPaletteFade(); - switch (gameType) - { - case GAME_TYPE_MEOWTH: - LoadBgTiles(PINBALL_BG_BASE, sMeowthStageBgGfx, sizeof(sMeowthStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sMeowthStageBgTilemap, sizeof(sMeowthStageBgTilemap), 0); - LoadPalette(sMeowthStageBgPalette, 0, sizeof(sMeowthStageBgPalette)); - break; - case GAME_TYPE_DIGLETT: - //DecompressAndLoadBgGfxUsingHeap(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0, 0); - RandomLevel(); - break; - case GAME_TYPE_SEEL: - LoadBgTiles(PINBALL_BG_BASE, sSeelStageBgGfx, sizeof(sSeelStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sSeelStageBgTilemap, sizeof(sSeelStageBgTilemap), 0); - LoadPalette(sSeelStageBgPalette, 0, sizeof(sSeelStageBgPalette)); - break; - case GAME_TYPE_GENGAR: - LoadBgTiles(PINBALL_BG_BASE, sGengarStageBgGfx, sizeof(sGengarStageBgGfx), 0); - CopyToBgTilemapBuffer(PINBALL_BG_BASE, sGengarStageBgTilemap, sizeof(sGengarStageBgTilemap), 0); - LoadPalette(sGengarStageBgPalette, 0, sizeof(sGengarStageBgPalette)); - break; - } - - //LoadBgTiles(PINBALL_BG_COVER, sCoverBgGfx, sizeof(sCoverBgGfx), 0); - //CopyToBgTilemapBuffer(PINBALL_BG_COVER, sCovergTilemap, sizeof(sCovergTilemap), 0); - //LoadPalette(sCoverBgPalette, 0x10, sizeof(sCoverBgPalette)); -} - -static void LoadSpriteGfx(u8 gameType) -{ - switch (gameType) - { - case GAME_TYPE_MEOWTH: - LoadCompressedSpriteSheet(&sMeowthAnimationSpriteSheet); - LoadSpritePalette(&sMeowthAnimationSpritePalette); - LoadCompressedSpriteSheet(&sMeowthJewelSpriteSheet); - LoadSpritePalette(&sMeowthJewelSpritePalette); - LoadCompressedSpriteSheet(&sMeowthJewelMultipliersSpriteSheet); - LoadCompressedSpriteSheet(&sMeowthSparkleSpriteSheet); - LoadSpritePalette(&sMeowthJewelMultipliersSpritePalette); - break; - case GAME_TYPE_DIGLETT: - //LoadCompressedSpriteSheet(&sDugtrioAnimationSpriteSheet); - //LoadSpritePalette(&sDugtrioAnimationSpritePalette); - break; - case GAME_TYPE_SEEL: - LoadCompressedSpriteSheet(&sSeelAnimationSpriteSheet); - LoadSpritePalette(&sSeelAnimationSpritePalette); - LoadCompressedSpriteSheet(&sSeelSparkleSpriteSheet); - LoadSpritePalette(&sSeelSparkleSpritePalette); - LoadCompressedSpriteSheet(&sSeelMultipliersSpriteSheet); - LoadSpritePalette(&sSeelMultipliersSpritePalette); - break; - case GAME_TYPE_GENGAR: - LoadCompressedSpriteSheet(&sGastlyAnimationSpriteSheet); - LoadSpritePalette(&sGastlyAnimationSpritePalette); - LoadCompressedSpriteSheet(&sHaunterAnimationSpriteSheet); - LoadSpritePalette(&sHaunterAnimationSpritePalette); - break; - } -} - -static void InitPinballGame(void) -{ - sPinballGame->stageTileWidth = 32; - sPinballGame->stageTileHeight = 32; - sPinballGame->gravityEnabled = TRUE; - //sPinballGame->rightFlipper.type = FLIPPER_RIGHT; - //sPinballGame->rightFlipper.xPos = 93; - //sPinballGame->rightFlipper.yPos = 122; - //sPinballGame->leftFlipper.type = FLIPPER_LEFT; - //sPinballGame->leftFlipper.xPos = 67; - //sPinballGame->leftFlipper.yPos = 122; - sPinballGame->timer.ticks = GetTimerTicks(sPinballGame->gameType); - //sPinballGame->flippersDisabled = FALSE; - sPinballGame->cameraScrollX = -40; - sPinballGame->cameraScrollY = 0; -} - -static u32 GetTimerTicks(u8 gameType) -{ - switch (gameType) - { - case GAME_TYPE_MEOWTH: - return 60 * 60 + 59; - case GAME_TYPE_SEEL: - return 90 * 60 + 59; - case GAME_TYPE_GENGAR: - return 90 * 60 + 59; - default: - return 1; - } -} - -static void InitBallSprite(void) -{ - sPinballGame->ball.spriteId = CreateSprite(&sBallPokeballSpriteTemplate, 0, 0, 3); - StartSpriteAnim(&gSprites[sPinballGame->ball.spriteId], 3); - gSprites[sPinballGame->ball.spriteId].invisible = TRUE; -} - -static void InitFlipperSprites(void) -{ - //sPinballGame->rightFlipper.spriteId = CreateSprite(&sFlipperSpriteTemplate, 0, 0, 4); - //sPinballGame->leftFlipper.spriteId = CreateSprite(&sFlipperSpriteTemplate, 0, 0, 4); - //gSprites[sPinballGame->leftFlipper.spriteId].data[0] = FLIPPER_LEFT; - //gSprites[sPinballGame->rightFlipper.spriteId].data[0] = FLIPPER_RIGHT; - //StartSpriteAnim(&gSprites[sPinballGame->leftFlipper.spriteId], 0); - //StartSpriteAnim(&gSprites[sPinballGame->rightFlipper.spriteId], 3); -} - -static void InitTimerSprites(void) -{ - if (GameTypeUsesTimer(sPinballGame->gameType)) - { - int x, y; - GetTimerScreenCoords(sPinballGame->gameType, &x, &y); - sPinballGame->timer.minutesSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x, y, 4); - sPinballGame->timer.colonSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 8, y, 4); - sPinballGame->timer.tensSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 16, y, 4); - sPinballGame->timer.onesSpriteId = CreateSprite(&sTimerDigitSpriteTemplate, x + 24, y, 4); - gSprites[sPinballGame->timer.minutesSpriteId].data[0] = 0; - gSprites[sPinballGame->timer.colonSpriteId].data[0] = 1; - gSprites[sPinballGame->timer.tensSpriteId].data[0] = 2; - gSprites[sPinballGame->timer.onesSpriteId].data[0] = 3; - StartSpriteAnim(&gSprites[sPinballGame->timer.minutesSpriteId], 0); - StartSpriteAnim(&gSprites[sPinballGame->timer.colonSpriteId], 10); - StartSpriteAnim(&gSprites[sPinballGame->timer.tensSpriteId], 0); - StartSpriteAnim(&gSprites[sPinballGame->timer.onesSpriteId], 0); - } -} - -static bool32 GameTypeUsesTimer(u8 gameType) -{ - switch (gameType) - { - case GAME_TYPE_DIGLETT: - return FALSE; - default: - return TRUE; - } -} - -static void GetTimerScreenCoords(u8 gameType, int *outX, int *outY) -{ - switch (gameType) - { - case GAME_TYPE_MEOWTH: - case GAME_TYPE_SEEL: - *outX = 131; - *outY = 109; - break; - case GAME_TYPE_GENGAR: - *outX = 131; - *outY = 8; - break; - default: - *outX = 0; - *outY = 0; - break; - } -} - -static void InitGameType(u8 gameType) -{ - switch (gameType) - { - case GAME_TYPE_MEOWTH: - InitMeowth(); - break; - case GAME_TYPE_DIGLETT: - InitDiglett(); - break; - case GAME_TYPE_SEEL: - InitSeel(); - break; - case GAME_TYPE_GENGAR: - InitGengar(); - break; - } -} - -static void InitMeowth(void) -{ - struct Meowth *meowth = &sPinballGame->meowth; - - meowth->xPos = 40; - meowth->yPos = 40; - meowth->state = MEOWTH_STATE_WALK; - meowth->facing = MEOWTH_FACING_RIGHT; - meowth->yMovement = 0; - meowth->score = 0; - meowth->jewelStreak = 0; - meowth->spriteId = CreateSprite(&sMeowthSpriteTemplate, 0, 0, 5); - meowth->sparkleSpriteId = CreateSprite(&sMeowthJewelSparkleSpriteTemplate, 0, 0, 6); - StartSpriteAnim(&gSprites[meowth->spriteId], 0); - StartSpriteAnim(&gSprites[meowth->sparkleSpriteId], 0); -} - -static void InitDiglett(void) -{ - //struct Diglett *diglett = &sPinballGame->diglett; - //diglett->completed = FALSE; - //diglett->numDiglettsHit = 0; - //diglett->collisionMap = Alloc(ARRAY_COUNT(sDiglettStageBgCollisionMap) * sizeof(sDiglettStageBgCollisionMap[0])); - //memcpy(diglett->collisionMap, sDiglettStageBgCollisionMap, ARRAY_COUNT(sDiglettStageBgCollisionMap) * sizeof(sDiglettStageBgCollisionMap[0])); - //diglett->dugtrioSpriteId = CreateSprite(&sDugtrioSpriteTemplate, 80, 16, 5); - //diglett->dugtrioState = DUGTRIO_STATE_HIDDEN; - //gSprites[diglett->dugtrioSpriteId].data[0] = DUGTRIO_STATE_HIDDEN; - //StartSpriteAnim(&gSprites[diglett->dugtrioSpriteId], 0); -} - -static void InitSeel(void) -{ - int i; - struct Seel *seel = &sPinballGame->seel; - seel->completed = FALSE; - seel->streak = 0; - seel->sparkleSpriteId = CreateSprite(&sSeelSparkleSpriteTemplate, 0, 0, 6); - StartSpriteAnim(&gSprites[seel->sparkleSpriteId], 0); - for (i = 0; i < NUM_SEELS; i++) - { - struct SeelSwimmer *swimmer = &seel->swimmers[i]; - swimmer->state = sInitialSeelStates[i]; - swimmer->xPos = sInitialSeelCoords[i][0] << 8; - swimmer->yPos = sInitialSeelCoords[i][1] << 8; - swimmer->spriteId = CreateSprite(&sSeelSpriteTemplate, swimmer->xPos >> 8, swimmer->yPos >> 8, 5); - gSprites[swimmer->spriteId].data[0] = swimmer->state; - gSprites[swimmer->spriteId].data[1] = i; - if (swimmer->state == SEEL_STATE_SWIM_RIGHT) - StartSpriteAnim(&gSprites[swimmer->spriteId], 0); - else - StartSpriteAnim(&gSprites[swimmer->spriteId], 2); - } -} - -static void InitGengar(void) -{ - int i; - struct Gengar *gengar = &sPinballGame->gengar; - gengar->completed = FALSE; - gengar->numGastlyHits = 0; - gengar->numHaunterHits = 0; - gengar->numGengarHits = 0; - gengar->graveyardState = GRAVEYARD_STATE_GASTLY; - gengar->collisionMap = Alloc(ARRAY_COUNT(sGengarStageBgCollisionMap) * sizeof(sGengarStageBgCollisionMap[0])); - memcpy(gengar->collisionMap, sGengarStageBgCollisionMap, ARRAY_COUNT(sGengarStageBgCollisionMap) * sizeof(sGengarStageBgCollisionMap[0])); - for (i = 0; i < NUM_GASTLY; i++) { - InitGhost(&gengar->gastlyGhosts[i], sInitialGastlyData[i], &sGastlySpriteTemplate, i); } - //SetWeather(WEATHER_FOG_HORIZONTAL); -} - -static void PinballVBlankCallback(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void PinballMainCallback(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - RunTextPrinters(); - UpdatePaletteFade(); -} - -static void Arrow(void) -{ - if (sScore->GameStart != 1) - { - if (sScore->StartDelayTimer != 0) - { - sScore->StartDelayTimer--; - return; - } - else - { - if ((sScore->ArrowPosition > 0) && (sScore->ArrowDirection == 0) && (sScore->ArrowPosition < 14)) // Right - { - sScore->ArrowPosition++; - gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x + 8); - } - else if ((sScore->ArrowPosition > 0) && (sScore->ArrowDirection == 1) && (sScore->ArrowPosition < 14)) // Left - { - sScore->ArrowPosition--; - gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x - 8); - } - else if (sScore->ArrowPosition == 0) // Turn Right - { - sScore->ArrowPosition++; - sScore->ArrowDirection = 0; - gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x + 8); - } - else if (sScore->ArrowPosition == 14) // Turn Left - { - sScore->ArrowPosition--; - sScore->ArrowDirection = 1; - gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x - 8); - } - sScore->StartDelayTimer = sScore->StartDelayMax; - return; - } - } -} - -static void AButton(void) -{ - if (GetCoins() > 2) - { - PlaySE(SE_TRUCK_DOOR); - if (sScore->TitleDestroyed == 0) - { - DestroyTitle(); - } - RemoveCoins(3); - SetPlayerDigits(GetCoins()); - sScore->GameStart = 1; - return; - } - else - { - PlaySE(SE_FAILURE); - return; - } -} - -static void DropSpeed(u8 direction) -{ - if (direction == 1) // Left - { - if (sScore->StartSpeed == 0) - { - PlaySE(SE_FAILURE); - return; - } - else if (sScore->StartSpeed == 1) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; - sScore->StartSpeed = 0; - return; - } - else if (sScore->StartSpeed == 5) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; - sScore->StartSpeed = 1; - return; - } - else if (sScore->StartSpeed == 10) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; - sScore->StartSpeed = 5; - return; - } - else if (sScore->StartSpeed == 15) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; - sScore->StartSpeed = 10; - return; - } - else if (sScore->StartSpeed == 20) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; - sScore->StartSpeed = 15; - return; - } - else if (sScore->StartSpeed == 25) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; - sScore->StartSpeed = 20; - return; - } - } - else if (direction == 0) // Right - { - if (sScore->StartSpeed == 0) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; - sScore->StartSpeed = 1; - return; - } - else if (sScore->StartSpeed == 1) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; - sScore->StartSpeed = 5; - return; - } - else if (sScore->StartSpeed == 5) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; - sScore->StartSpeed = 10; - return; - } - else if (sScore->StartSpeed == 10) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; - sScore->StartSpeed = 15; - return; - } - else if (sScore->StartSpeed == 15) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; - sScore->StartSpeed = 20; - return; - } - else if (sScore->StartSpeed == 20) - { - PlaySE(SE_BALL_TRAY_BALL); - gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; - sScore->StartSpeed = 25; - return; - } - else if (sScore->StartSpeed == 25) - { - PlaySE(SE_FAILURE); - return; - } - } - return; -} - -static void HandleInput(void) -{ - if (sScore->GameStart == 0) - { - if (JOY_NEW(A_BUTTON)) - { - AButton(); - } - else if (JOY_NEW(B_BUTTON)) - { - sPinballGame->state = PINBALL_STATE_START_EXIT; - } - else if (JOY_NEW(DPAD_RIGHT)) - { - DropSpeed(0); - } - else if (JOY_NEW(DPAD_LEFT)) - { - DropSpeed(1); - } - } -} - -static void PinballMain(u8 taskId) -{ - bool32 completed; - - switch (sPinballGame->state) - { - case PINBALL_STATE_INIT: - if (!gPaletteFade.active) - { - sPinballGame->state = PACHINKO_START_SCREEN; - } - break; - case PACHINKO_START_SCREEN: - HandleInput(); - //gSprites[sScore->WinSpriteId].invisible = TRUE; - gSprites[sScore->ArrowSpriteId].invisible = FALSE; - Arrow(); - if ((sScore->TitleCounter > 0) && (sScore->TitleDestroyed == 0)) - { - sScore->TitleCounter--; - } - else if ((sScore->TitleCounter == 0) && (sScore->TitleDestroyed == 0)) - { - DestroyTitle(); - sScore->TitleDestroyed = 1; - } - - if (sScore->GameStart == 1) - { - gSprites[sScore->ArrowSpriteId].invisible = TRUE; - sScore->SecondDelay--; - if (sScore->SecondDelay == 0) { - PlaySE(SE_BALL_TRADE); - StartNewBall(); - sScore->SecondDelay = 30; - sPinballGame->state = PINBALL_STATE_RUNNING; - } - } - break; - case PINBALL_STATE_RUNNING: - completed = UpdateGameType(sPinballGame->gameType); - if (!sPinballGame->completed && completed) - sPinballGame->completed = TRUE; - gSprites[sPinballGame->ball.spriteId].invisible = FALSE; - HandleBallPhysics(); - UpdateCamera(); - - if (!sPinballGame->waitExitScene) - UpdateTimer(); - break; - case PINBALL_LOST_BALL_FADE_OUT: - if (!gPaletteFade.active) - { - LostBall(sPinballGame->gameType); - //StartNewBall(); - gSprites[sPinballGame->ball.spriteId].invisible = TRUE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); - sPinballGame->state = PINBALL_LOST_BALL_FADE_IN; - } - break; - case PINBALL_LOST_BALL_FADE_IN: - if (!gPaletteFade.active) - sPinballGame->state = PACHINKO_START_SCREEN; - break; - case PACHINKO_START_JACKPOT: - if (!gPaletteFade.active) - { - gSprites[sPinballGame->ball.spriteId].invisible = TRUE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); - //ShowJackpot(); - PlayFanfare(MUS_OBTAIN_BADGE); - CreateWin(); - sPinballGame->state = PACHINKO_JACKPOT; - } - break; - case PACHINKO_JACKPOT: - if (IsFanfareTaskInactive()) - { - //ResetMessage(); - PlaySE(SE_SHOP); - AddCoins(50 * sScore->Multiplier); - sScore->Winnings = (sScore->Winnings + (50 * sScore->Multiplier)); - SetPlayerDigits(GetCoins()); - DestroyWin(); - if (sScore->Winnings < 30) - { - sPinballGame->state = PACHINKO_START_SCREEN; - } - else - { - sScore->LevelChangeTimer = 200; - sPinballGame->state = PACHINKO_LEVEL_CHANGE_START; - } - } - break; - case PACHINKO_START_WIN: - if (!gPaletteFade.active) - { - gSprites[sPinballGame->ball.spriteId].invisible = TRUE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); - //ShowWin(); - PlayFanfare(MUS_LEVEL_UP); - CreateWin(); - sPinballGame->state = PACHINKO_WIN; - } - break; - case PACHINKO_WIN: - if (IsFanfareTaskInactive()) - { - //ResetMessage(); - PlaySE(SE_SHOP); - AddCoins(6 * sScore->Multiplier); - sScore->Winnings = (sScore->Winnings + (6 * sScore->Multiplier)); - SetPlayerDigits(GetCoins()); - DestroyWin(); - if (sScore->Winnings < 30) - { - sPinballGame->state = PACHINKO_START_SCREEN; - } - else - { - sScore->LevelChangeTimer = 200; - sPinballGame->state = PACHINKO_LEVEL_CHANGE_START; - } - } - break; - case PACHINKO_LEVEL_CHANGE_START: - if (sScore->LevelChangeTimer == 200) - { - PlaySE(SE_SUCCESS); - CreateNewLevel(); - sScore->LevelChangeTimer--; - } - else if (sScore->LevelChangeTimer != 0) - { - sScore->LevelChangeTimer--; - } - else if (sScore->LevelChangeTimer == 0) - { - PlaySE(SE_LAVARIDGE_FALL_WARP); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sPinballGame->state = PACHINKO_LEVEL_FADE_OUT; - } - break; - case PACHINKO_LEVEL_FADE_OUT: - if (!gPaletteFade.active) - { - DestroyNewLevel(); - sPinballGame->state = PACHINKO_LEVEL_CHANGE; - } - break; - case PACHINKO_LEVEL_CHANGE: - sScore->Level = ((Random() % 23) + 1); - while (sScore->Level == sScore->LastLevel) - { - sScore->Level = ((Random() % 23) + 1); - } - sScore->LastLevel = sScore->Level; - sScore->Winnings = 0; - LevelChange(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - sPinballGame->state = PACHINKO_LEVEL_FADE_IN; - break; - case PACHINKO_LEVEL_FADE_IN: - if (!gPaletteFade.active) - { - sPinballGame->state = PACHINKO_START_SCREEN; - } - break; - case PINBALL_STATE_DELAY_START_EXIT: - if (--sPinballGame->exitTimer == 0) - { - //ShowLose(); - //gSprites[sScore->GameOverSpriteId].invisible = FALSE; - sPinballGame->state = PINBALL_STATE_START_EXIT; - } - break; - case PINBALL_STATE_START_EXIT: - StartExitPinballGame(); - break; - case PINBALL_STATE_EXIT: - ExitPinballGame(); - break; - } -} - -static void StartNewBall(void) -{ - u16 randomvel; - u8 LR; - s16 x; - - LR = (Random () % 100); - x = 36 + (sScore->ArrowPosition * 8); - randomvel = (Random() % 0x40); - if (randomvel == 0) - { - randomvel = 2; - } - if (LR < 51) - { - randomvel = (randomvel * (0 - 1)); - } - - sPinballGame->ball.xPos = x << 8; - sPinballGame->ball.yPos = 16 << 8; - sPinballGame->ball.xVelocity = randomvel; - sPinballGame->ball.yVelocity = (sScore->StartSpeed * 20); - sPinballGame->ball.spin = 0; - //OpenEntrance(sPinballGame->gameType); -} - -static void OpenEntrance(u8 gameType) -{ - sPinballGame->ballIsEntering = TRUE; - switch (gameType) - { - case GAME_TYPE_MEOWTH: - OpenEntranceMeowth(); - break; - case GAME_TYPE_DIGLETT: - //OpenEntranceDiglett(); - break; - case GAME_TYPE_SEEL: - OpenEntranceSeel(); - break; - case GAME_TYPE_GENGAR: - OpenEntranceGengar(); - break; - } -} - -static void OpenEntranceMeowth(void) -{ - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[0x113] = 0x415; - //tilemap[0x114] = 0x414; - tilemap[0x133] = 0x413; - tilemap[0x173] = 0x408; // 0x412 og - tilemap[0x152] = 0x413; // 0x400 og - tilemap[0x153] = 0x410; - tilemap[0x154] = 0x011; - tilemap[0x172] = 0x409; - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void OpenEntranceDiglett(void) -{ - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[0x113] = 0x55; - tilemap[0x114] = 0x56; - tilemap[0x133] = 0x0; - tilemap[0x134] = 0x54; - tilemap[0x152] = 0x0; - tilemap[0x153] = 0x52; - tilemap[0x154] = 0x53; - tilemap[0x172] = 0x50; - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void OpenEntranceSeel(void) -{ - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[0x113] = 0x41E; - tilemap[0x114] = 0x41D; - tilemap[0x133] = 0x41B; - tilemap[0x134] = 0x41A; - tilemap[0x152] = 0x400; - tilemap[0x153] = 0x418; - tilemap[0x154] = 0x417; - tilemap[0x172] = 0x414; - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void OpenEntranceGengar(void) -{ - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[0x113] = 0x0; - tilemap[0x132] = 0x1; - tilemap[0x133] = 0x2; - tilemap[0x152] = 0x5; - tilemap[0x153] = 0x3; - tilemap[0x172] = 0x4; - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void CloseEntrance(u8 gameType) -{ - sPinballGame->ballIsEntering = FALSE; - switch (gameType) - { - case GAME_TYPE_MEOWTH: - CloseEntranceMeowth(); - break; - case GAME_TYPE_DIGLETT: - //CloseEntranceDiglett(); - break; - case GAME_TYPE_SEEL: - CloseEntranceSeel(); - break; - case GAME_TYPE_GENGAR: - CloseEntranceGengar(); - break; - } -} - -static void CloseEntranceMeowth(void) -{ - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[0x113] = 0x403; - tilemap[0x173] = 0x40D; - tilemap[0x133] = 0x403; - //tilemap[0x134] = 0x401; - tilemap[0x152] = 0x40F; - tilemap[0x153] = 0x40E; - tilemap[0x154] = 0x002; - tilemap[0x172] = 0x40C; - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void CloseEntranceDiglett(void) -{ - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[0x113] = 0x24; - tilemap[0x114] = 0x2; - tilemap[0x133] = 0x22; - tilemap[0x134] = 0x1; - tilemap[0x152] = 0x1F; - tilemap[0x153] = 0x20; - tilemap[0x154] = 0x2; - tilemap[0x172] = 0x1B; - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void CloseEntranceSeel(void) -{ - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[0x113] = 0x41C; - tilemap[0x114] = 0x401; - tilemap[0x133] = 0x419; - tilemap[0x134] = 0x408; - tilemap[0x152] = 0x416; - tilemap[0x153] = 0x415; - tilemap[0x154] = 0x405; - tilemap[0x172] = 0x411; - tilemap[0x173] = 0x401; - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void CloseEntranceGengar(void) -{ - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[0x113] = 0x4D; - tilemap[0x132] = 0x41; - tilemap[0x133] = 0x42; - tilemap[0x152] = 0x36; - tilemap[0x153] = 0x37; - tilemap[0x172] = 0x2F; - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void DrawMeowthScoreJewels(struct Meowth *meowth) -{ - int i; - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - for (i = 0; i < 20; i++) - { - if (i < meowth->score) - tilemap[i] = i % 2 ? 0x41E : 0x1E; - else - tilemap[i] = sMeowthStageBgTilemap[i]; - } - - VarSet(GAME_CORNER_VAR_WINNINGS, (meowth->score * 3)); - SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void DrawSeelScoreJewels(struct Seel *seel) -{ - int i; - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - for (i = 0; i < 20; i++) - { - if (i < seel->score) - { - if (i == 0 || i == 19) - tilemap[i] = 0x28; - else if (i == 1) - tilemap[i] = 0x29; - else if (i == 18) - tilemap[i] = 0x2B; - else - tilemap[i] = 0x2A; - } - else - { - tilemap[i] = sSeelStageBgTilemap[i]; - } - } - VarSet(GAME_CORNER_VAR_WINNINGS, (seel->score * 4)); - SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); -} - -static void HandleBallPhysics(void) -{ - bool32 isFlipperColliding = FALSE; - bool32 isStaticColliding; - bool32 isObjectColliding = FALSE; - u8 flipperCollisionNormal = 0; - u8 objectCollisionNormal; - u8 staticCollisionNormal; - u8 collisionNormal; - u16 artificialYForce = 0; - int collisionAmplification = 0; - struct Ball *ball = &sPinballGame->ball; - - //if (sPinballGame->ballIsEntering && (ball->xPos >> 8) < 144) - //CloseEntrance(sPinballGame->gameType); - - if (sPinballGame->gravityEnabled) - ApplyGravity(ball); - - LimitVelocity(ball); - HandleTilts(ball); - //isFlipperColliding = HandleFlippers(ball, &artificialYForce, &flipperCollisionNormal, &collisionAmplification); - //if (!isFlipperColliding) - //isObjectColliding = CheckObjectsCollision(sPinballGame->gameType, ball, sPinballGame->timer.ticks, &objectCollisionNormal, &collisionAmplification); - - isStaticColliding = CheckStaticCollision(sPinballGame->gameType, ball, sPinballGame->ballIsEntering, sPinballGame->stageTileWidth, sPinballGame->stageTileHeight, &staticCollisionNormal, &artificialYForce); - if (isFlipperColliding) - collisionNormal = flipperCollisionNormal; - else if (isObjectColliding) - collisionNormal = objectCollisionNormal; - else - collisionNormal = staticCollisionNormal; - - if (isObjectColliding || isStaticColliding) - { - ApplyTiltForces(ball, collisionNormal); - RotateVector(&ball->xVelocity, &ball->yVelocity, collisionNormal); - ApplyCollisionForces(ball, artificialYForce, collisionAmplification); - RotateVector(&ball->xVelocity, &ball->yVelocity, -collisionNormal); - - if ((isStaticColliding) && ((ball->yVelocity > 100) || (ball->xVelocity > 100))) // Wall or static object collision - { - PlaySE(SE_WALL_HIT); // Trigger the sound effect for wall collision - } - } - - UpdatePosition(ball); - - if ((ball->yPos >> 8) > 168) - { - ball->yPos == 170 << 8; - LoseBall(); - } -} + sTiltDownLeftVelocityDeltas, + sTiltDownRightVelocityDeltas, + sTiltDownOnlyVelocityDeltas, +}; -static void LoseBall(void) +static const struct PachinkoLevel sPachinkoLevels[PACHINKO_LEVEL_COUNT] = { - sScore->Lives--; - if (PlayAnotherBall()) + [PACHINKO_LEVEL_1] = { - PlaySE(SE_FAINT); - sScore->Multiplier = 1; - sScore->GameStart = 0; - sScore->StartDelayMax = 2; - sScore->StartDelayTimer = sScore->StartDelayMax; - sScore->SecondDelay = 30; - gSprites[sScore->MultiplierSpriteId].animNum = 0; - gSprites[sPinballGame->ball.spriteId].invisible = TRUE; - UpdateLives(); - sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); - } - else + .levelTilemap = sLevel_01_BgTilemap, + .levelCollisionMap = sLevel_01_BgCollisionMap, + }, + [PACHINKO_LEVEL_2] = { - if (!sPinballGame->waitExitScene) - { - PlayFanfare(MUS_TOO_BAD); - sScore->Multiplier = 1; - sScore->GameStart = 0; - sScore->StartDelayMax = 2; - sScore->StartDelayTimer = sScore->StartDelayMax; - sScore->SecondDelay = 30; - gSprites[sScore->MultiplierSpriteId].animNum = 0; - gSprites[sPinballGame->ball.spriteId].invisible = TRUE; - CreateGameOver(); - UpdateLives(); - sPinballGame->exitTimer = 2 * 60; - sPinballGame->state = PINBALL_STATE_DELAY_START_EXIT; - } - - gSpecialVar_Result = sPinballGame->completed; - } -} - -static bool32 PlayAnotherBall(void) -{ - switch (sPinballGame->gameType) + .levelTilemap = sLevel_02_BgTilemap, + .levelCollisionMap = sLevel_02_BgCollisionMap, + }, + [PACHINKO_LEVEL_3] = { - case GAME_TYPE_MEOWTH: - case GAME_TYPE_SEEL: - case GAME_TYPE_GENGAR: - return sPinballGame->timer.ticks > 0 && !sPinballGame->completed; - case GAME_TYPE_DIGLETT: - if (sScore->Lives > 0) - { - return TRUE; - } - else - { - return FALSE; - } - default: - return TRUE; - } -} - -static void LostBall(u8 gameType) -{ - switch (gameType) + .levelTilemap = sLevel_03_BgTilemap, + .levelCollisionMap = sLevel_03_BgCollisionMap, + }, + [PACHINKO_LEVEL_4] = { - case GAME_TYPE_MEOWTH: - LostBallMeowth(&sPinballGame->meowth); - PlaySE(SE_FAINT); - break; - case GAME_TYPE_DIGLETT: - - break; - case GAME_TYPE_SEEL: - LostBallSeel(&sPinballGame->seel); - PlaySE(SE_FAINT); - break; - case GAME_TYPE_GENGAR: - LostBallGengar(&sPinballGame->gengar); - PlaySE(SE_FAINT); - break; - } -} - -#define JEWEL_SPARKLE_DURATION 180 - -static void LostBallMeowth(struct Meowth *meowth) -{ - struct Sprite *sparkleSprite = &gSprites[sPinballGame->meowth.sparkleSpriteId]; - if (meowth->score > 4) + .levelTilemap = sLevel_04_BgTilemap, + .levelCollisionMap = sLevel_04_BgCollisionMap, + }, + [PACHINKO_LEVEL_5] = { - meowth->score -= 4; - sparkleSprite->data[0] = JEWEL_SPARKLE_DURATION; - sparkleSprite->data[1] = meowth->score; - } - else + .levelTilemap = sLevel_05_BgTilemap, + .levelCollisionMap = sLevel_05_BgCollisionMap, + }, + [PACHINKO_LEVEL_6] = { - meowth->score = 0; - sparkleSprite->data[0] = 0; - sparkleSprite->data[1] = 0; - } - - meowth->jewelStreak = 0; - ResetMeowthJewels(meowth); - DrawMeowthScoreJewels(meowth); -} - -#define SEEL_SPARKLE_DURATION 180 - -static void LostBallSeel(struct Seel *seel) -{ - struct Sprite *sparkleSprite = &gSprites[sPinballGame->seel.sparkleSpriteId]; - if (seel->score > 4) + .levelTilemap = sLevel_06_BgTilemap, + .levelCollisionMap = sLevel_06_BgCollisionMap, + }, + [PACHINKO_LEVEL_7] = { - seel->score -= 4; - sparkleSprite->data[0] = SEEL_SPARKLE_DURATION; - sparkleSprite->data[1] = seel->score; - } - else + .levelTilemap = sLevel_07_BgTilemap, + .levelCollisionMap = sLevel_07_BgCollisionMap, + }, + [PACHINKO_LEVEL_8] = { - seel->score = 0; - sparkleSprite->data[0] = 0; - sparkleSprite->data[1] = 0; - } - - seel->streak = 0; - ResetSeels(seel); - DrawSeelScoreJewels(seel); -} - -static void LostBallGengar(struct Gengar *gengar) -{ -} - -#define GRAVITY 0x08 - -static void ApplyGravity(struct Ball *ball) -{ - ball->yVelocity += GRAVITY; -} - -#define MAX_VELOCITY 0x07FF - -static void LimitVelocity(struct Ball *ball) -{ - // Limit each velocity axis independently. This means - // the ball can move diagonally at a higher speed. - if (ball->xVelocity > MAX_VELOCITY) - ball->xVelocity = MAX_VELOCITY; - else if (ball->xVelocity < -MAX_VELOCITY) - ball->xVelocity = -MAX_VELOCITY; - - if (ball->yVelocity > MAX_VELOCITY) - ball->yVelocity = MAX_VELOCITY; - else if (ball->yVelocity < -MAX_VELOCITY) - ball->yVelocity = -MAX_VELOCITY; -} - -static void HandleTilts(struct Ball *ball) -{ - HandleTilt(ball, &sPinballGame->rightTilt, 1, 0, DPAD_RIGHT, FALSE); - HandleTilt(ball, &sPinballGame->leftTilt, -1, 0, DPAD_LEFT, FALSE); - HandleTilt(ball, &sPinballGame->downTilt, 0, 1, DPAD_UP | DPAD_DOWN, TRUE); -} - -static void HandleTilt(struct Ball *ball, struct Tilt *tilt, int xDelta, int yDelta, u32 buttonMask, bool8 artificalEnabled) -{ - if ((!tilt->reset && (gMain.newKeys & buttonMask))) - { - PlaySE(SE_BREAKABLE_DOOR); - } - - if ((artificalEnabled && sPinballGame->doArtificialDownTilt) || (!tilt->reset && (gMain.heldKeys & buttonMask))) + .levelTilemap = sLevel_08_BgTilemap, + .levelCollisionMap = sLevel_08_BgCollisionMap, + }, + [PACHINKO_LEVEL_9] = { - if (++tilt->counter >= 3) - { - if (artificalEnabled) - sPinballGame->doArtificialDownTilt = FALSE; - - tilt->pushing = FALSE; - tilt->reset = TRUE; - } - else - { - ball->xPos += (xDelta << 8); - ball->yPos += (yDelta << 8); - tilt->pushing = TRUE; - } - } - else + .levelTilemap = sLevel_09_BgTilemap, + .levelCollisionMap = sLevel_09_BgCollisionMap, + }, + [PACHINKO_LEVEL_10] = { - tilt->pushing = FALSE; - if (tilt->counter > 0) - tilt->counter--; - else if (!(gMain.heldKeys & buttonMask)) - tilt->reset = FALSE; + .levelTilemap = sLevel_10_BgTilemap, + .levelCollisionMap = sLevel_10_BgCollisionMap, + }, + [PACHINKO_LEVEL_11] = + { + .levelTilemap = sLevel_11_BgTilemap, + .levelCollisionMap = sLevel_11_BgCollisionMap, + }, + [PACHINKO_LEVEL_12] = + { + .levelTilemap = sLevel_12_BgTilemap, + .levelCollisionMap = sLevel_12_BgCollisionMap, + }, + [PACHINKO_LEVEL_13] = + { + .levelTilemap = sLevel_13_BgTilemap, + .levelCollisionMap = sLevel_13_BgCollisionMap, + }, + [PACHINKO_LEVEL_14] = + { + .levelTilemap = sLevel_14_BgTilemap, + .levelCollisionMap = sLevel_14_BgCollisionMap, + }, + [PACHINKO_LEVEL_15] = + { + .levelTilemap = sLevel_15_BgTilemap, + .levelCollisionMap = sLevel_15_BgCollisionMap, + }, + [PACHINKO_LEVEL_16] = + { + .levelTilemap = sLevel_16_BgTilemap, + .levelCollisionMap = sLevel_16_BgCollisionMap, + }, + [PACHINKO_LEVEL_17] = + { + .levelTilemap = sLevel_17_BgTilemap, + .levelCollisionMap = sLevel_17_BgCollisionMap, + }, + [PACHINKO_LEVEL_18] = + { + .levelTilemap = sLevel_18_BgTilemap, + .levelCollisionMap = sLevel_18_BgCollisionMap, + }, + [PACHINKO_LEVEL_19] = + { + .levelTilemap = sLevel_19_BgTilemap, + .levelCollisionMap = sLevel_19_BgCollisionMap, + }, + [PACHINKO_LEVEL_20] = + { + .levelTilemap = sLevel_20_BgTilemap, + .levelCollisionMap = sLevel_20_BgCollisionMap, + }, + [PACHINKO_LEVEL_21] = + { + .levelTilemap = sLevel_21_BgTilemap, + .levelCollisionMap = sLevel_21_BgCollisionMap, + }, + [PACHINKO_LEVEL_22] = + { + .levelTilemap = sLevel_22_BgTilemap, + .levelCollisionMap = sLevel_22_BgCollisionMap, + }, + [PACHINKO_LEVEL_23] = + { + .levelTilemap = sLevel_23_BgTilemap, + .levelCollisionMap = sLevel_23_BgCollisionMap, } -} - -static bool32 HandleFlippers(struct Ball *ball, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification) -{ - //bool32 collided; - //struct Flipper *flipper; - - //UpdateFlipperState(&sPinballGame->rightFlipper); - //UpdateFlipperState(&sPinballGame->leftFlipper); - - //collided = CheckFlipperCollision(ball, &sPinballGame->rightFlipper, outYForce, outCollisionNormal, outCollisionAmplification); - //if (!collided) - // collided = CheckFlipperCollision(ball, &sPinballGame->leftFlipper, outYForce, outCollisionNormal, outCollisionAmplification); - - //return collided; - return FALSE; -} - -#define FLIPPER_STATE_DELTA 0x0333 - -static void UpdateFlipperState(struct Flipper *flipper) -{ - //int stateDelta; - - //flipper->prevState = flipper->state; - - //if (!sPinballGame->flippersDisabled && (gMain.newKeys & A_BUTTON)) // A button rising edge - //{ - // PlaySE(SE_VEND); // Play sound effect - //} - //else if (!sPinballGame->flippersDisabled && (gMain.newKeys & B_BUTTON)) // A button rising edge - //{ - // PlaySE(SE_VEND); // Play sound effect - //} - // - //if (!sPinballGame->flippersDisabled && (gMain.heldKeys & (A_BUTTON | B_BUTTON))) - //{ - // if (flipper->state == 0x0FFF) - // stateDelta = 0; - // else - // stateDelta = FLIPPER_STATE_DELTA; - //} - //else - //{ - // if (flipper->state == 0) - // stateDelta = 0; - // else - // stateDelta = -FLIPPER_STATE_DELTA; - //} - - //flipper->stateDelta = stateDelta; - //flipper->state += stateDelta; -} - -static bool32 CheckFlipperCollision(struct Ball *ball, struct Flipper *flipper, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification) -{ - //int curState, stateDelta; - //int offset; - //u32 collisionRadius, magnitude; - //u8 collisionNormal; - //int ballXPos = (ball->xPos >> 8); - //int ballYPos = (ball->yPos >> 8); - //int xOffset = ballXPos - flipper->xPos + 24; - //int yOffset = ballYPos - flipper->yPos + 16; - // - //if (xOffset < 0 || xOffset >= 48 || yOffset < 0 || yOffset >= 32) - // return FALSE; - // - //*outYForce = 0; - //*outCollisionAmplification = 0; - // - //if (flipper->type == FLIPPER_RIGHT) - // xOffset = 48 - xOffset; - // - //offset = xOffset * 32 + yOffset; - //collisionRadius = 0; - // - //stateDelta = flipper->prevState < flipper->state ? 1 : -1; - //curState = flipper->prevState >> 8; - //while (1) - ////{ - //// collisionRadius = sFlipperCollisionRadii[curState * 0x600 + offset]; - // if (collisionRadius != 0) - // break; - // - // if (curState == (flipper->state >> 8)) - // return FALSE; - // - // curState += stateDelta; - //} - // - //collisionNormal = sFlipperCollisionNormalAngles[curState * 0x600 + offset]; - //magnitude = sFlipperRadiusMagnitudes[collisionRadius]; - //*outYForce = ((flipper->stateDelta * 4) * magnitude) >> 8; - //*outCollisionNormal = flipper->type == FLIPPER_LEFT ? collisionNormal : -collisionNormal; - //*outCollisionAmplification = 1; - // - //// Don't apply any y force if the ball is being forced downwards into the flipper - //if ((*outYForce) & 0x8000) - //{ - // *outYForce = 0; - // *outCollisionAmplification = 0; - //} - // - return TRUE; -} - -#define MAX_POS_UPDATE 0x04FF +}; -static void UpdatePosition(struct Ball *ball) +void PlayPachinko(void) { - // Moves the ball's position according to its velocity. - // The amount it's moved is artificially limited at a lower - // threshold than the maximum velocity. - if (ball->xVelocity > MAX_POS_UPDATE) - ball->xPos += MAX_POS_UPDATE; - else if (ball->xVelocity < -MAX_POS_UPDATE) - ball->xPos -= MAX_POS_UPDATE; - else - ball->xPos += ball->xVelocity; - - if (ball->yVelocity > MAX_POS_UPDATE) - ball->yPos += MAX_POS_UPDATE; - else if (ball->yVelocity < -MAX_POS_UPDATE) - ball->yPos -= MAX_POS_UPDATE; - else - ball->yPos += ball->yVelocity; - - if (ball->xPos & 0x80000000) - ball->xPos = 0; - if (ball->yPos & 0x80000000) - ball->yPos = 0; - + PlayPinballGame(); } -static bool32 CheckStaticCollision(u8 gameType, struct Ball *ball, bool32 ballIsEntering, int stageTileWidth, int stageTileHeight, u8 *outCollisionNormal, u16 *outYForce) -{ - int i; - u16 xDelta, yDelta; - int collisionIndex; - int maxStringStart, maxStringEnd, curStringStart, curStringLength, maxStringLength; - u8 collisionTestAttributes[ARRAY_COUNT(sCollisionTestPointOffsets)]; - u8 collisionTestCoords[ARRAY_COUNT(sCollisionTestPointOffsets)][2]; - u8 collisionTests[ARRAY_COUNT(sCollisionTestPointOffsets)]; - - // Check each of the test points around the ball's origin - // to see if they are colliding with the static collision masks. - for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) - { - int testX, testY; - int tileX, tileY, tileIndex; - int collisionAttribute, row, column; - u8 collisionMaskRow; - int xPos = ball->xPos >> 8; - int yPos = ball->yPos >> 8; - - collisionTests[i] = 0; - testX = xPos + sCollisionTestPointOffsets[i][0]; - testY = yPos + sCollisionTestPointOffsets[i][1]; - if (testX < 0 || testY < 0) - { - collisionTests[i] = 1; - continue; - } - - tileX = testX / 8; - tileY = testY / 8; - row = testY % 8; - column = testX % 8; - tileIndex = (tileY * stageTileWidth) + tileX; - collisionAttribute = GetCollisionAttribute(gameType, ballIsEntering, tileIndex); - collisionMaskRow = GetCollisionMaskRow(gameType, collisionAttribute, row); - collisionTests[i] = (collisionMaskRow & (1 << column)) != 0; - collisionTestCoords[i][0] = testX; - collisionTestCoords[i][1] = testY; - collisionTestAttributes[i] = collisionAttribute; - } - - // Find the largest string of consecutive colliding test points. - maxStringStart = 0; - maxStringEnd = 0; - maxStringLength = 0; - curStringStart = -1; - curStringLength = 0; - for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) - { - if (collisionTests[i]) - { - if (curStringStart == -1) - curStringStart = i; - - curStringLength++; - if (curStringLength > maxStringLength) - { - maxStringLength = curStringLength; - maxStringStart = curStringStart; - maxStringEnd = i; - } - } - else - { - curStringLength = 0; - curStringStart = -1; - } - } - - // If all of the test points are colliding, then the ball - // is inside a wall. Just early exit with no collision. - if (maxStringLength == 0 || maxStringLength == 16) - return FALSE; +static void SetPlayerDigits(u16 num) +{ + u8 i; + u16 d = 1000; // Start with the thousands place - // Check if the maximum string loops around to the front of - // the collision tests array. - if (curStringStart != -1) + for (i = 0; i < 4; i++) // Always show 4 digits { - for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) - { - if (!collisionTests[i]) - break; + u8 digit = num / d; - curStringLength++; - if (curStringLength > maxStringLength) - { - maxStringLength = curStringLength; - maxStringStart = curStringStart; - maxStringEnd = i; - } - } - } - - collisionIndex = ((maxStringStart & 0xF) << 4) | (maxStringEnd & 0xF); + // Show the digit (all digits are visible) + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = FALSE; - // Treat the delta values as signed. - xDelta = sCollisionXDeltas[collisionIndex]; - if (xDelta > 0x8000) - ball->xPos -= 0x10000 - xDelta; - else - ball->xPos += xDelta; + // If it's a smaller number, show 0 for the higher place values + if (i == 0 && num < 1000) { + digit = 0; // Force 0 for the thousands place if the number is less than 1000 + } - yDelta = sCollisionYDeltas[collisionIndex]; - if (yDelta > 0x8000) - ball->yPos -= 0x10000 - yDelta; - else - ball->yPos += yDelta; + // Set the tileNum based on the current digit + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.tileNum = + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].sheetTileStart + (digit * 2); - *outCollisionNormal = sCollisionNormals[collisionIndex]; - HandleStaticCollisionForGameType( - gameType, - collisionTestCoords[maxStringStart][0], - collisionTestCoords[maxStringStart][1], - collisionTestAttributes[maxStringStart], - outYForce - ); + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; - return TRUE; + // Reduce num for the next digit + num = num % d; + d = d / 10; + } + + BuildOamBuffer(); } -static u8 GetCollisionAttribute(u8 gameType, bool32 ballIsEntering, int index) +static void CreatePlayerSprites(void) { - const u8 *entranceCollisionMap; - const u8 *collisionMap; + u8 i; - switch (gameType) + for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PlayerInterface) - 1; i++) { - default: - case GAME_TYPE_MEOWTH: - entranceCollisionMap = sMeowthStageEntranceBgCollisionMap; - collisionMap = sMeowthStageBgCollisionMap; - break; - case GAME_TYPE_DIGLETT: - entranceCollisionMap = sDiglettStageEntranceBgCollisionMap; - collisionMap = sPinballGame->diglett.collisionMap; - break; - case GAME_TYPE_SEEL: - entranceCollisionMap = sSeelStageEntranceBgCollisionMap; - collisionMap = sSeelStageBgCollisionMap; - break; - case GAME_TYPE_GENGAR: - entranceCollisionMap = sGengarStageEntranceBgCollisionMap; - collisionMap = sPinballGame->gengar.collisionMap; - break; + LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); } - if (ballIsEntering) - return entranceCollisionMap[index]; - - return collisionMap[index]; + for (i = 0; i < 4; i++) + { + sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS] = CreateSprite(&sSpriteTemplate_PlayerDigit, i * 7 + 198, 127, 2); + gSprites[sScore->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 0; + } } -static u8 GetCollisionMaskRow(u8 gameType, int collisionAttribute, int row) +static void PlayPinballGame(void) { - struct Flipper *flipper; - int state; - int offset; - const u8 *flipperStateMasks; - u8 mask = 0; + ScriptContext_Stop(); + sPinballGame = AllocZeroed(sizeof(*sPinballGame)); + sPinballGame->returnMainCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; + CreateTask(FadeToPinballScreen, 0); +} - if (collisionAttribute < 0xE0) +static void FadeToPinballScreen(u8 taskId) +{ + switch (gTasks[taskId].data[0]) { - const u8 *masks; - switch (gameType) + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gPaletteFade.active) { - default: - case GAME_TYPE_MEOWTH: - masks = sMeowthStageBgCollisionMasks; - break; - case GAME_TYPE_DIGLETT: - masks = sDiglettStageBgCollisionMasks; - break; - case GAME_TYPE_SEEL: - masks = sSeelStageBgCollisionMasks; - break; - case GAME_TYPE_GENGAR: - masks = sGengarStageBgCollisionMasks; - break; + SetMainCallback2(InitPinballScreen); + DestroyTask(taskId); } - - // Reverse the bits because my tooling is backwards. - return ReverseBits(masks[(collisionAttribute * 0x8) + row]); + break; } +} - // Collision attribute from 0xE0 - 0xFF are special - // static flipper collision masks. - //if (collisionAttribute < 0xF0) - // flipper = &sPinballGame->leftFlipper; - //else - // flipper = &sPinballGame->rightFlipper; - - //state = flipper->state >> 8; - //if (state < 7) - // offset = 0; - //else if (state < 14) - // offset = 1; - //else - // offset = 2; - - //if (collisionAttribute < 0xF0) - // flipperStateMasks = sFlipperLeftMinigameCollisionMasks[offset]; - //else - // flipperStateMasks = sFlipperRightMinigameCollisionMasks[offset]; - - // mask = flipperStateMasks[(collisionAttribute % 0x10) * 0x8 + row]; - - // Reverse the bits because my tooling is backwards. - return ReverseBits(mask); +static void RandomLevel(void) +{ + struct Diglett *diglett = &sPinballGame->diglett; + const u16 * levelTilemap; + const u8 * levelCollisionMap; + u32 level = sScore->Level; + + if (level >= PACHINKO_LEVEL_COUNT) + level = PACHINKO_LEVEL_1; + + levelTilemap = sPachinkoLevels[level].levelTilemap; + levelCollisionMap = sPachinkoLevels[level].levelCollisionMap; + + LoadBgTiles(PINBALL_BG_BASE, sDiglettStageBgGfx, sizeof(sDiglettStageBgGfx), 0); + CopyToBgTilemapBuffer(PINBALL_BG_BASE, levelTilemap, sizeof(sLevel_01_BgTilemap), 0); + LoadPalette(sDiglettStageBgPalette, 0, sizeof(sDiglettStageBgPalette)); + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + diglett->completed = FALSE; + diglett->numDiglettsHit = 0; + diglett->collisionMap = Alloc(ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); + memcpy(diglett->collisionMap, levelCollisionMap, ARRAY_COUNT(sLevel_01_BgCollisionMap) * sizeof(sLevel_01_BgCollisionMap[0])); } -static u8 ReverseBits(u8 b) + +static void LevelChange(void) { - b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; - b = (b & 0xCC) >> 2 | (b & 0x33) << 2; - b = (b & 0xAA) >> 1 | (b & 0x55) << 1; - return b; + sScore->Multiplier = 1; + gSprites[sScore->MultiplierSpriteId].animNum = 0; + InitBgsFromTemplates(0, sPinballBgTemplates, ARRAY_COUNT(sPinballBgTemplates)); + SetBgTilemapBuffer(PINBALL_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + LoadBgGfx(); } -static void ApplyTiltForces(struct Ball *ball, u8 collisionNormal) +static void DestroyWin(void) { - u32 index = (sPinballGame->downTilt.pushing << 2) | - (sPinballGame->rightTilt.pushing << 1) | - (sPinballGame->leftTilt.pushing << 0); - const s16 *deltas = sTiltVelocityDeltas[index]; - if (deltas != NULL) - { - ball->xVelocity += deltas[collisionNormal * 2]; - ball->yVelocity += deltas[collisionNormal * 2 + 1]; - } + DestroySpriteAndFreeResources(&gSprites[sScore->WinSpriteId]); } -static void RotateVector(s16 *x, s16 *y, u8 angle) +static void DestroyTitle(void) { - // Rotate a vector by an angle with a 2D rotation matrix calculation. - // rotatedX = xComponent * cos(angle) + yComponent * sin(angle) - // rotatedY = yComponent * cos(angle) - xComponent * sin(angle) - s16 sin = gSineTable[angle]; - s16 cos = gSineTable[angle + 64]; - s16 newX = ((*x * cos) / 256) + ((*y * sin) / 256); - s16 newY = ((*y * cos) / 256) - ((*x * sin) / 256); - *x = newX; - *y = newY; + DestroySpriteAndFreeResources(&gSprites[sScore->TitleSpriteId]); + sScore->TitleDestroyed = 1; } -static void HandleStaticCollisionForGameType(u8 gameType, int x, int y, u8 collisionAttribute, u16 *outYForce) +static void DestroyNewLevel(void) { - switch (gameType) - { - case GAME_TYPE_MEOWTH: - case GAME_TYPE_SEEL: - break; - case GAME_TYPE_GENGAR: - HandleStaticCollisionGengar(&sPinballGame->gengar, collisionAttribute, outYForce); - break; - case GAME_TYPE_DIGLETT: - HandleStaticCollisionDiglett(&sPinballGame->diglett, x, y, collisionAttribute, outYForce); - break; - } + DestroySpriteAndFreeResources(&gSprites[sScore->NewLevelSpriteId]); } -static void HandleStaticCollisionDiglett(struct Diglett *diglett, int x, int y, u8 collisionAttribute, u16 *outYForce) +static void CreateNewLevel(void) { - if (collisionAttribute == 0x1C) - { - // If the ball hit a Diglett, remove the Diglett's solid collision from the map. - int tileX = x / 8; // Convert pixel x to tile x - int tileY = y / 8; // Convert pixel y to tile y - - // Update the collision map with the new coordinates (tileX, tileY) - u16 *tilemap; - int tileIndex = tileY * 32 + tileX; // Convert tile coordinates to index (assuming 32 tiles per row) - - // Remove the collision at this position by setting it back to 0x2 in the collision map - diglett->collisionMap[tileIndex] = 0x2; - //diglett->collisionMap[tileIndex + 1] = 0x2; - //diglett->collisionMap[tileIndex + 32] = 0x2; - //diglett->collisionMap[tileIndex + 33] = 0x2; - - // Update the tilemap at this position to 0x28 (new tile after collision) - tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - tilemap[tileIndex] = 0x28; - - PlaySE(SE_SWITCH); - // Copy the updated tilemap to VRAM - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - } + LoadSpritePalettes(sSpritePalettes2); + LoadCompressedSpriteSheet(&sSpriteSheet_NewLevel); - else if (collisionAttribute == 0x19) // Jackpot - { - PlaySE(SE_UNLOCK); - sScore->GameStart = 0; - sScore->StartDelayMax = 2; - sScore->StartDelayTimer = sScore->StartDelayMax; - sScore->SecondDelay = 30; - sPinballGame->state = PACHINKO_START_JACKPOT; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); - } - else if (collisionAttribute == 0x1F) // x2 - { - PlaySE(SE_UNLOCK); - PlaySE(SE_M_STAT_INCREASE); - if (sScore->Multiplier != 3) - { - sScore->Multiplier = 2; - gSprites[sScore->MultiplierSpriteId].animNum = 1; - } - sScore->GameStart = 0; - sScore->StartDelayMax = 2; - sScore->StartDelayTimer = sScore->StartDelayMax; - sScore->SecondDelay = 30; - gSprites[sPinballGame->ball.spriteId].invisible = TRUE; - sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); - } - else if (collisionAttribute == 0x22) // x3 - { - PlaySE(SE_UNLOCK); - PlaySE(SE_M_STAT_INCREASE); - sScore->Multiplier = 3; - sScore->GameStart = 0; - sScore->StartDelayMax = 2; - sScore->StartDelayTimer = sScore->StartDelayMax; - sScore->SecondDelay = 30; - gSprites[sScore->MultiplierSpriteId].animNum = 2; - gSprites[sPinballGame->ball.spriteId].invisible = TRUE; - sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); - } - else if (collisionAttribute == 0x25) // Win - { - PlaySE(SE_UNLOCK); - sScore->GameStart = 0; - sScore->StartDelayMax = 2; - sScore->StartDelayTimer = sScore->StartDelayMax; - sScore->SecondDelay = 30; - sPinballGame->state = PACHINKO_START_WIN; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); - } - else if (collisionAttribute == 0x28) // Bounce - { - PlaySE(SE_LEDGE); - *outYForce = 0x100; - } -} + sScore->NewLevelSpriteId = CreateSprite(&sSpriteTemplate_NewLevel, 92, 82, 0); + //gSprites[sScore->WinSpriteId].invisible = TRUE; +} -static void HandleStaticCollisionGengar(struct Gengar *gengar, u8 collisionAttribute, u16 *outYForce) +static void CreateWin(void) { - int i; - for (i = 0; i < ARRAY_COUNT(sGengarGravestoneCollisionAttributes); i++) - { - if (collisionAttribute == sGengarGravestoneCollisionAttributes[i]) - { - // If the ball hit a gravestone, apply some artificial force to - // make the ball bounce harder. - *outYForce = 0x100; - return; - } - } + LoadSpritePalettes(sSpritePalettes2); + LoadCompressedSpriteSheet(&sSpriteSheet_Win); + + sScore->WinSpriteId = CreateSprite(&sSpriteTemplate_Win, 92, 82, 0); + //gSprites[sScore->WinSpriteId].invisible = TRUE; } -static void ApplyCollisionForces(struct Ball *ball, u16 flipperYForce, int collisionAmplification) +static void CreateGameOver(void) { - // Only apply the collision forces if the ball is moving - // towards the wall it collided with, which can only be - // true if the y velocity is traveling downward in the rotated - // coordinate system. - if (ball->yVelocity < 0) - return; + LoadSpritePalettes(sSpritePalettes2); + LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); - // Apply dampening to the vertical velocity component, and - // negate it so that the ball bounces off the wall. - ball->yVelocity = -(((2 + collisionAmplification) * ball->yVelocity) / 8); - ball->xVelocity += ball->spin / 2; - ball->spin = (ball->xVelocity * 4) >> 8; + sScore->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 92, 82, 0); + //gSprites[sScore->GameOverSpriteId].invisible = TRUE; +} - ball->yVelocity -= flipperYForce; +static void CreateTitle(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Title); + sScore->TitleSpriteId = CreateSprite(&sSpriteTemplate_Title, 92, 82, 0); } -static void UpdateCamera(void) +static void CreateArrow(void) { - int scrollX, scrollY; - int stagePixelWidth = sPinballGame->stageTileWidth * 8; - int stagePixelHeight = sPinballGame->stageTileHeight * 8; - struct Ball *ball = &sPinballGame->ball; + LoadCompressedSpriteSheet(&sSpriteSheet_Arrow); + sScore->ArrowSpriteId = CreateSprite(&sSpriteTemplate_Arrow, 36, 20, 0); +} - // scrollX = (ball->xPos >> 8) - (DISPLAY_WIDTH / 2); - // if (scrollX < 0) - // scrollX = 0; - // if (scrollX > stagePixelWidth - DISPLAY_WIDTH) - // scrollX = stagePixelWidth - DISPLAY_WIDTH; +static void CreateLives(void) +{ + s16 x = 4; + s16 y = 156; + s16 x2 = x + 8; + s16 x3 = x + 16; + s16 x4 = x + 24; + s16 x5 = x + 32; - // scrollY = (ball->yPos >> 8) - (DISPLAY_HEIGHT / 2); - // if (scrollY < 0) - // scrollY = 0; - // if (scrollY > stagePixelHeight - DISPLAY_HEIGHT) - // scrollY = stagePixelHeight - DISPLAY_HEIGHT; + LoadCompressedSpriteSheet(&sSpriteSheet_Lives); - scrollX = 0; // Center the game in the middle of the screen - scrollY = 0; + sScore->Live1SpriteId = CreateSprite(&sSpriteTemplate_Lives, x, y, 0); + sScore->Live2SpriteId = CreateSprite(&sSpriteTemplate_Lives, x2, y, 0); + sScore->Live3SpriteId = CreateSprite(&sSpriteTemplate_Lives, x3, y, 0); + sScore->Live4SpriteId = CreateSprite(&sSpriteTemplate_Lives, x4, y, 0); + sScore->Live5SpriteId = CreateSprite(&sSpriteTemplate_Lives, x5, y, 0); +} - scrollX += sPinballGame->leftTilt.counter; - scrollX -= sPinballGame->rightTilt.counter; - scrollY += sPinballGame->downTilt.counter; +static void UpdateLives(void) +{ + if (sScore->Lives == 5) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = FALSE; + gSprites[sScore->Live3SpriteId].invisible = FALSE; + gSprites[sScore->Live4SpriteId].invisible = FALSE; + gSprites[sScore->Live5SpriteId].invisible = FALSE; + } + else if (sScore->Lives == 4) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = FALSE; + gSprites[sScore->Live3SpriteId].invisible = FALSE; + gSprites[sScore->Live4SpriteId].invisible = FALSE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } + else if (sScore->Lives == 3) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = FALSE; + gSprites[sScore->Live3SpriteId].invisible = FALSE; + gSprites[sScore->Live4SpriteId].invisible = TRUE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } + else if (sScore->Lives == 2) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = FALSE; + gSprites[sScore->Live3SpriteId].invisible = TRUE; + gSprites[sScore->Live4SpriteId].invisible = TRUE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } + else if (sScore->Lives == 1) + { + gSprites[sScore->Live1SpriteId].invisible = FALSE; + gSprites[sScore->Live2SpriteId].invisible = TRUE; + gSprites[sScore->Live3SpriteId].invisible = TRUE; + gSprites[sScore->Live4SpriteId].invisible = TRUE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } + else + { + gSprites[sScore->Live1SpriteId].invisible = TRUE; + gSprites[sScore->Live2SpriteId].invisible = TRUE; + gSprites[sScore->Live3SpriteId].invisible = TRUE; + gSprites[sScore->Live4SpriteId].invisible = TRUE; + gSprites[sScore->Live5SpriteId].invisible = TRUE; + } +} - sPinballGame->cameraScrollX = scrollX; - sPinballGame->cameraScrollY = scrollY; +static void CreateSpinarak(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Spinarak); + sScore->SpinarakSpriteId = CreateSprite(&sSpriteTemplate_Spinarak, 208, 48, 0); +} - SetGpuReg(REG_OFFSET_BG2HOFS, scrollX); - SetGpuReg(REG_OFFSET_BG2VOFS, scrollY); +static void CreateSpeed(void) +{ + LoadCompressedSpriteSheet(&sSpriteSheet_Speed); + sScore->SpeedSpriteId = CreateSprite(&sSpriteTemplate_Speed, 208, 160, 0); } -static void UpdateTimer(void) +static void CreateMultiplier(void) { - if (GameTypeUsesTimer(sPinballGame->gameType) && sPinballGame->timer.ticks > 0) - { - if (--sPinballGame->timer.ticks == 0) - { - // Time has completely run out. - // Disable the flippers, and play any ending - // animation stuff. - DisableFlippers(); - HandleTimeRanOut(); - } - } + LoadCompressedSpriteSheet(&sSpriteSheet_Multiplier); + sScore->MultiplierSpriteId = CreateSprite(&sSpriteTemplate_Multiplier, 208, 96, 0); } -static void HandleTimeRanOut(void) +static void InitPinballScreen(void) { - switch (sPinballGame->gameType) + switch (gMain.state) { - case GAME_TYPE_MEOWTH: - sPinballGame->meowth.state = MEOWTH_STATE_FINISH; + case 0: + sScore = AllocZeroed(sizeof(struct Credits)); + SetVBlankCallback(NULL); + ResetAllBgsCoordinates(); + gMain.state++; break; - case GAME_TYPE_DIGLETT: + case 1: + sScore->Level = (Random() % PACHINKO_LEVEL_COUNT); + sScore->LastLevel = sScore->Level; + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sPinballBgTemplates, ARRAY_COUNT(sPinballBgTemplates)); + SetBgTilemapBuffer(PINBALL_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + LoadBgGfx(); + gMain.state++; break; - case GAME_TYPE_SEEL: + case 2: + ResetSpriteData(); + FreeAllSpritePalettes(); + gMain.state++; break; - case GAME_TYPE_GENGAR: + case 3: + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG3_ON); + ShowBg(PINBALL_BG_BASE); + ShowBg(3); + gMain.state++; break; + case 4: + sScore->StartSpeed = 0; + sScore->Lives = 5; + sScore->Multiplier = 1; + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->ArrowPosition = 0; + sScore->ArrowDirection = 0; + sScore->SecondDelay = 30; + LoadSpritePalettes(sSpritePalettes2); + CreateArrow(); + sScore->TitleDestroyed = 0; + sScore->TitleCounter = 140; + CreateTitle(); + CreateLives(); + CreateSpinarak(); + CreateSpeed(); + CreateMultiplier(); + CreatePlayerSprites(); + SetPlayerDigits(GetCoins()); + LoadCompressedSpriteSheet(&sBallPokeballSpriteSheet); + LoadSpritePalette(&sPinballSpritePalette); + InitPinballGame(); + InitBallSprite(); + gMain.state++; + case 5: + // Center game in the middle of the screen + //SetGpuReg(REG_OFFSET_BG2HOFS, -40); + + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + SetVBlankCallback(PinballVBlankCallback); + SetMainCallback2(PinballMainCallback); + CreateTask(PinballMain, 0); + return; } } -static void DisableFlippers(void) +static void LoadBgGfx(void) { - //int flipperPaletteIndex; - //sPinballGame->flippersDisabled = TRUE; - - // Change the flippers' color to red. - //flipperPaletteIndex = IndexOfSpritePaletteTag(TAG_FLIPPER); - //gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 1] = RGB(16, 16, 16); - //gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 2] = RGB(22, 22, 22); - //gPlttBufferUnfaded[0x100 + flipperPaletteIndex * 0x10 + 3] = RGB(12, 12, 12); - //gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 1] = RGB(16, 16, 16); - //gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 2] = RGB(22, 22, 22); - //gPlttBufferFaded[0x100 + flipperPaletteIndex * 0x10 + 3] = RGB(12, 12, 12); + ResetPaletteFade(); + RandomLevel(); } -static void StartExitPinballGame(void) +static void InitPinballGame(void) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sPinballGame->state = PINBALL_STATE_EXIT; - //SetWeather(WEATHER_NONE); + sPinballGame->stageTileWidth = 32; + sPinballGame->stageTileHeight = 32; + sPinballGame->gravityEnabled = TRUE; + sPinballGame->cameraScrollX = -40; + sPinballGame->cameraScrollY = 0; } -static void ExitPinballGame(void) +static void InitBallSprite(void) { - if (!gPaletteFade.active) - { - if (sPinballGame->gameType == GAME_TYPE_DIGLETT) - FREE_AND_SET_NULL(sPinballGame->diglett.collisionMap); - - SetMainCallback2(sPinballGame->returnMainCallback); - FREE_AND_SET_NULL(sPinballGame); - FREE_AND_SET_NULL(sScore); - } + sPinballGame->ball.spriteId = CreateSprite(&sBallPokeballSpriteTemplate, 0, 0, 3); + StartSpriteAnim(&gSprites[sPinballGame->ball.spriteId], 3); + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; } -static void UpdateBallSprite(struct Sprite *sprite) +static void PinballVBlankCallback(void) { - int ballAnim; - struct Ball *ball = &sPinballGame->ball; - sprite->x = (ball->xPos >> 8) - sPinballGame->cameraScrollX; - sprite->y = (ball->yPos >> 8) - sPinballGame->cameraScrollY; - - ball->rotation += ball->spin; - ballAnim = (ball->rotation >> 4) % 8; - StartSpriteAnim(sprite, ballAnim); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); } -static void UpdateFlipperSprite(struct Sprite *sprite) +static void PinballMainCallback(void) { - //int anim; - //struct Flipper *flipper; - //if (sprite->data[0] == FLIPPER_RIGHT) - // flipper = &sPinballGame->rightFlipper; - //else - // flipper = &sPinballGame->leftFlipper; - - //sprite->x = flipper->xPos - sPinballGame->cameraScrollX; - //sprite->y = flipper->yPos - sPinballGame->cameraScrollY; - - //anim = (flipper->type * 3) + ((flipper->state >> 8) / 6); - //StartSpriteAnim(sprite, anim); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); } -static void UpdateTimerDigitSprite(struct Sprite *sprite) +static void Arrow(void) { - int minutes, tensDigit, onesDigit; - int type = sprite->data[0]; - - sprite->x2 = -sPinballGame->cameraScrollX; - sprite->y2 = -sPinballGame->cameraScrollY; - - switch (type) + if (sScore->GameStart != 1) { - case 0: // Minutes ones digit - minutes = (sPinballGame->timer.ticks / 3600) % 10; - StartSpriteAnim(sprite, minutes); - break; - case 2: // Seconds tens digit - tensDigit = ((sPinballGame->timer.ticks / 60) % 60) / 10; - StartSpriteAnim(sprite, tensDigit); - break; - case 3: // Seconds ones digit - onesDigit = ((sPinballGame->timer.ticks / 60) % 60) % 10; - StartSpriteAnim(sprite, onesDigit); - break; + if (sScore->StartDelayTimer != 0) + { + sScore->StartDelayTimer--; + return; + } + else + { + if ((sScore->ArrowPosition > 0) && (sScore->ArrowDirection == 0) && (sScore->ArrowPosition < 14)) // Right + { + sScore->ArrowPosition++; + gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x + 8); + } + else if ((sScore->ArrowPosition > 0) && (sScore->ArrowDirection == 1) && (sScore->ArrowPosition < 14)) // Left + { + sScore->ArrowPosition--; + gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x - 8); + } + else if (sScore->ArrowPosition == 0) // Turn Right + { + sScore->ArrowPosition++; + sScore->ArrowDirection = 0; + gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x + 8); + } + else if (sScore->ArrowPosition == 14) // Turn Left + { + sScore->ArrowPosition--; + sScore->ArrowDirection = 1; + gSprites[sScore->ArrowSpriteId].x = (gSprites[sScore->ArrowSpriteId].x - 8); + } + sScore->StartDelayTimer = sScore->StartDelayMax; + return; + } } } -static bool32 UpdateGameType(u8 gameType) +static void AButton(void) { - switch (gameType) + if (GetCoins() > 2) { - case GAME_TYPE_MEOWTH: - return UpdateMeowth(&sPinballGame->meowth); - case GAME_TYPE_DIGLETT: - return UpdateDiglett(&sPinballGame->diglett); - case GAME_TYPE_SEEL: - return UpdateSeel(&sPinballGame->seel); - case GAME_TYPE_GENGAR: - return UpdateGengar(&sPinballGame->gengar); - default: - return FALSE; + PlaySE(SE_TRUCK_DOOR); + if (sScore->TitleDestroyed == 0) + { + DestroyTitle(); + } + RemoveCoins(3); + SetPlayerDigits(GetCoins()); + sScore->GameStart = 1; + return; + } + else + { + PlaySE(SE_FAILURE); + return; } } -#define MEOWTH_HORIZONTAL_SPEED 1 -#define MEOWTH_VERTICAL_SPEED 1 - -static bool32 UpdateMeowth(struct Meowth *meowth) +static void DropSpeed(u8 direction) { - if (meowth->state == MEOWTH_STATE_WALK) + if (direction == 1) // Left { - if (meowth->facing == MEOWTH_FACING_RIGHT) - meowth->xPos += MEOWTH_HORIZONTAL_SPEED; - else - meowth->xPos -= MEOWTH_HORIZONTAL_SPEED; - - meowth->yPos += meowth->yMovement; - - if (meowth->xPos > 136) + if (sScore->StartSpeed == 0) { - meowth->facing = MEOWTH_FACING_LEFT; - meowth->xPos = 136; + PlaySE(SE_FAILURE); + return; } - else if (meowth->xPos < 24) + else if (sScore->StartSpeed == 1) { - meowth->facing = MEOWTH_FACING_RIGHT; - meowth->xPos = 24; + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 0; + return; } - else if (gMain.vblankCounter1 % 64 == 0) + else if (sScore->StartSpeed == 5) { - meowth->facing = Random() % 2 ? MEOWTH_FACING_RIGHT : MEOWTH_FACING_LEFT; + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 1; + return; } - - if (meowth->yPos > 48) + else if (sScore->StartSpeed == 10) { - meowth->yPos = 48; - meowth->yMovement = 0; + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 5; + return; } - else if (meowth->yPos < 32) + else if (sScore->StartSpeed == 15) { - meowth->yPos = 32; - meowth->yMovement = 0; + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 10; + return; } - else if (gMain.vblankCounter1 % 64 == 0) + else if (sScore->StartSpeed == 20) { - meowth->yMovement = Random() % 2 ? -MEOWTH_VERTICAL_SPEED : MEOWTH_VERTICAL_SPEED; + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 15; + return; } - } - - UpdateJewels(meowth->jewels); - return meowth->completed; -} - -static bool32 CheckObjectsCollision(u8 gameType, struct Ball *ball, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) -{ - bool32 isColliding = FALSE; - - switch (gameType) - { - case GAME_TYPE_MEOWTH: - isColliding = CheckMeowthCollision(ball, &sPinballGame->meowth, ticks, outCollisionNormal, outCollisionAmplification); - if (!isColliding) - isColliding = CheckMeowthJewelsCollision(ball, &sPinballGame->meowth, outCollisionNormal); - break; - case GAME_TYPE_SEEL: - isColliding = CheckSeelCollision(ball, &sPinballGame->seel, ticks, outCollisionNormal, outCollisionAmplification); - break; - case GAME_TYPE_GENGAR: - switch (sPinballGame->gengar.graveyardState) + else if (sScore->StartSpeed == 25) { - case GRAVEYARD_STATE_GASTLY: - isColliding = CheckGhostsCollision( - ball, - ticks, - sPinballGame->gengar.gastlyGhosts, - NUM_GASTLY, - sGastlyCollisionNormalAngles, - 32, - 32, - outCollisionNormal, - outCollisionAmplification); - break; - case GRAVEYARD_STATE_HAUNTER: - isColliding = CheckGhostsCollision( - ball, - ticks, - sPinballGame->gengar.haunterGhosts, - NUM_HAUNTER, - sHaunterCollisionNormalAngles, - 32, - 40, - outCollisionNormal, - outCollisionAmplification); - break; - case GRAVEYARD_STATE_GENGAR: - isColliding = CheckGengarCollision(ball, &sPinballGame->gengar, ticks, outCollisionNormal, outCollisionAmplification); - break; + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum -= 16; + sScore->StartSpeed = 20; + return; } - break; - } - - return isColliding; -} - -static bool32 CheckMeowthCollision(struct Ball *ball, struct Meowth *meowth, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) -{ - int x, y; - u8 collisionNormal; - int ballXPos = (ball->xPos >> 8); - int ballYPos = (ball->yPos >> 8); - - if (ticks <= 0) - return FALSE; - - if (ballXPos < meowth->xPos - 24 || ballXPos >= meowth->xPos + 24 - || ballYPos < meowth->yPos - 20 || ballYPos >= meowth->yPos + 20) - return FALSE; - - x = ballXPos - meowth->xPos + 24; - y = ballYPos - meowth->yPos + 20; - collisionNormal = sMeowthCollisionNormalAngles[y * 48 + x]; - if (collisionNormal == 0xFF) - return FALSE; - - // Multiply normal by two because the original data is stored halved. - *outCollisionNormal = collisionNormal * 2; - //*outCollisionAmplification = 1; - - if (meowth->state == MEOWTH_STATE_WALK) - { - meowth->state = MEOWTH_STATE_HIT; - meowth->hitDuration = 30; - TryCreateNewJewel(meowth, ballXPos); - PlaySE(SE_EFFECTIVE); } - - return TRUE; -} - -static bool32 CheckMeowthJewelsCollision(struct Ball *ball, struct Meowth *meowth, u8 *outCollisionNormal) -{ - int i; - struct Sprite *sparkleSprite = &gSprites[meowth->sparkleSpriteId]; - - for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + else if (direction == 0) // Right { - struct MeowthJewel *jewel = &meowth->jewels[i]; - if (jewel->state == JEWEL_STATE_LANDED) + if (sScore->StartSpeed == 0) { - if (CheckJewelCollision(ball, jewel, outCollisionNormal)) - { - if (++meowth->jewelStreak > 6) - meowth->jewelStreak = 6; - - meowth->score += meowth->jewelStreak; - if (!meowth->completed && meowth->score >= 20) - meowth->completed = TRUE; - - sparkleSprite->data[0] = JEWEL_SPARKLE_DURATION; - sparkleSprite->data[1] = min(20, meowth->score); - DrawMeowthScoreJewels(meowth); - if (meowth->jewelStreak > 1) - { - int y = (jewel->yPos >> 8) - 8; - u8 spriteId = CreateSprite(&sMeowthJewelMultiplierSpriteTemplate, jewel->xPos, y, 4); - gSprites[spriteId].data[2] = y; - StartSpriteAnim(&gSprites[spriteId], meowth->jewelStreak - 2); - } - PlaySE(SE_M_PAY_DAY); - return TRUE; - } + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 1; + return; + } + else if (sScore->StartSpeed == 1) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 5; + return; + } + else if (sScore->StartSpeed == 5) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 10; + return; + } + else if (sScore->StartSpeed == 10) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 15; + return; + } + else if (sScore->StartSpeed == 15) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 20; + return; + } + else if (sScore->StartSpeed == 20) + { + PlaySE(SE_BALL_TRAY_BALL); + gSprites[sScore->SpeedSpriteId].oam.tileNum += 16; + sScore->StartSpeed = 25; + return; + } + else if (sScore->StartSpeed == 25) + { + PlaySE(SE_FAILURE); + return; } } - - return FALSE; + return; } -static int GetNumActiveJewels(struct Meowth *meowth) +static void HandleInput(void) { - int i, count; - for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + if (sScore->GameStart == 0) { - if (meowth->jewels[i].state != JEWEL_STATE_HIDDEN) - count++; + if (JOY_NEW(A_BUTTON)) + { + AButton(); + } + else if (JOY_NEW(B_BUTTON)) + { + sPinballGame->state = PINBALL_STATE_START_EXIT; + } + else if (JOY_NEW(DPAD_RIGHT)) + { + DropSpeed(0); + } + else if (JOY_NEW(DPAD_LEFT)) + { + DropSpeed(1); + } } - return count; } -static struct MeowthJewel *TryCreateNewJewel(struct Meowth *meowth, int ballXPos) +static void PinballMain(u8 taskId) { - int i, count; - for (i = 0; i < MAX_MEOWTH_JEWELS; i++) - { - if (meowth->jewels[i].state == JEWEL_STATE_HIDDEN) - break; - } - - if (i == MAX_MEOWTH_JEWELS) - return NULL; - - meowth->jewelStreak = 0; - - meowth->jewels[i].state = JEWEL_STATE_FALLING; - meowth->jewels[i].xPos = meowth->xPos; - meowth->jewels[i].yPos = (meowth->yPos - 12) << 8; - meowth->jewels[i].spriteId = CreateSprite(&sMeowthJewelSpriteTemplate, meowth->jewels[i].xPos, meowth->jewels[i].yPos, 4); - meowth->jewels[i].xVelocity = ballXPos < meowth->xPos ? 2 : -2; - meowth->jewels[i].yVelocity = -2 << 8; - meowth->jewels[i].destYPos = meowth->yPos < 40 ? 72 : 88; - gSprites[meowth->jewels[i].spriteId].data[0] = i; - gSprites[meowth->jewels[i].spriteId].data[1] = JEWEL_STATE_HIDDEN; - - PlaySE(SE_M_PAY_DAY); - return &meowth->jewels[i]; -} + bool32 completed; -static void UpdateJewels(struct MeowthJewel *jewels) -{ - int i; - for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + switch (sPinballGame->state) { - struct MeowthJewel *jewel = &jewels[i]; - if (jewel->state == JEWEL_STATE_FALLING) + case PINBALL_STATE_INIT: + if (!gPaletteFade.active) { - jewel->xPos += jewel->xVelocity; - if (jewel->xPos < 16) - { - jewel->xPos = 16; - jewel->xVelocity *= -1; + sPinballGame->state = PACHINKO_START_SCREEN; + } + break; + case PACHINKO_START_SCREEN: + HandleInput(); + //gSprites[sScore->WinSpriteId].invisible = TRUE; + gSprites[sScore->ArrowSpriteId].invisible = FALSE; + Arrow(); + if ((sScore->TitleCounter > 0) && (sScore->TitleDestroyed == 0)) + { + sScore->TitleCounter--; + } + else if ((sScore->TitleCounter == 0) && (sScore->TitleDestroyed == 0)) + { + DestroyTitle(); + sScore->TitleDestroyed = 1; + } + + if (sScore->GameStart == 1) + { + gSprites[sScore->ArrowSpriteId].invisible = TRUE; + sScore->SecondDelay--; + if (sScore->SecondDelay == 0) { + PlaySE(SE_BALL_TRADE); + StartNewBall(); + sScore->SecondDelay = 30; + sPinballGame->state = PINBALL_STATE_RUNNING; } - else if (jewel->xPos >= 148) + } + break; + case PINBALL_STATE_RUNNING: + completed = FALSE; + if (!sPinballGame->completed && completed) + sPinballGame->completed = TRUE; + gSprites[sPinballGame->ball.spriteId].invisible = FALSE; + HandleBallPhysics(); + UpdateCamera(); + break; + case PINBALL_LOST_BALL_FADE_OUT: + if (!gPaletteFade.active) + { + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); + sPinballGame->state = PINBALL_LOST_BALL_FADE_IN; + } + break; + case PINBALL_LOST_BALL_FADE_IN: + if (!gPaletteFade.active) + sPinballGame->state = PACHINKO_START_SCREEN; + break; + case PACHINKO_START_JACKPOT: + if (!gPaletteFade.active) + { + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); + PlayFanfare(MUS_OBTAIN_BADGE); + CreateWin(); + sPinballGame->state = PACHINKO_JACKPOT; + } + break; + case PACHINKO_JACKPOT: + if (IsFanfareTaskInactive()) { - jewel->xPos = 148; - jewel->xVelocity *= -1; + PlaySE(SE_SHOP); + AddCoins(50 * sScore->Multiplier); + sScore->Winnings = (sScore->Winnings + (50 * sScore->Multiplier)); + SetPlayerDigits(GetCoins()); + DestroyWin(); + if (sScore->Winnings < 30) + { + sPinballGame->state = PACHINKO_START_SCREEN; + } + else + { + sScore->LevelChangeTimer = 200; + sPinballGame->state = PACHINKO_LEVEL_CHANGE_START; + } } - - jewel->yPos += jewel->yVelocity; - jewel->yVelocity += 0x40; - if ((jewel->yPos >> 8) >= jewel->destYPos) + break; + case PACHINKO_START_WIN: + if (!gPaletteFade.active) + { + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITE); + PlayFanfare(MUS_LEVEL_UP); + CreateWin(); + sPinballGame->state = PACHINKO_WIN; + } + break; + case PACHINKO_WIN: + if (IsFanfareTaskInactive()) { - if (IsJewelSpaceOccupied(jewel->xPos, jewel->destYPos, jewels)) + PlaySE(SE_SHOP); + AddCoins(6 * sScore->Multiplier); + sScore->Winnings = (sScore->Winnings + (6 * sScore->Multiplier)); + SetPlayerDigits(GetCoins()); + DestroyWin(); + if (sScore->Winnings < 30) { - jewel->yVelocity = -1 << 8; + sPinballGame->state = PACHINKO_START_SCREEN; } else { - jewel->yPos = jewel->destYPos << 8; - jewel->state = JEWEL_STATE_LANDED; - } + sScore->LevelChangeTimer = 200; + sPinballGame->state = PACHINKO_LEVEL_CHANGE_START; + } } + break; + case PACHINKO_LEVEL_CHANGE_START: + if (sScore->LevelChangeTimer == 200) + { + PlaySE(SE_SUCCESS); + CreateNewLevel(); + sScore->LevelChangeTimer--; + } + else if (sScore->LevelChangeTimer != 0) + { + sScore->LevelChangeTimer--; + } + else if (sScore->LevelChangeTimer == 0) + { + PlaySE(SE_LAVARIDGE_FALL_WARP); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sPinballGame->state = PACHINKO_LEVEL_FADE_OUT; + } + break; + case PACHINKO_LEVEL_FADE_OUT: + if (!gPaletteFade.active) + { + DestroyNewLevel(); + sPinballGame->state = PACHINKO_LEVEL_CHANGE; + } + break; + case PACHINKO_LEVEL_CHANGE: + sScore->Level = (Random() % PACHINKO_LEVEL_COUNT); + while (sScore->Level == sScore->LastLevel) + { + sScore->Level = (Random() % PACHINKO_LEVEL_COUNT); + } + sScore->LastLevel = sScore->Level; + sScore->Winnings = 0; + LevelChange(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sPinballGame->state = PACHINKO_LEVEL_FADE_IN; + break; + case PACHINKO_LEVEL_FADE_IN: + if (!gPaletteFade.active) + { + sPinballGame->state = PACHINKO_START_SCREEN; + } + break; + case PINBALL_STATE_DELAY_START_EXIT: + if (--sPinballGame->exitTimer == 0) + { + sPinballGame->state = PINBALL_STATE_START_EXIT; } + break; + case PINBALL_STATE_START_EXIT: + StartExitPinballGame(); + break; + case PINBALL_STATE_EXIT: + ExitPinballGame(); + break; } } -static bool32 IsJewelSpaceOccupied(u16 xPos, u16 destYPos, struct MeowthJewel *jewels) +static void StartNewBall(void) { - int i; - struct MeowthJewel *jewel; - for (i = 0; i < MAX_MEOWTH_JEWELS; i++) + u16 randomvel; + u8 LR; + s16 x; + + LR = (Random () % 100); + x = 36 + (sScore->ArrowPosition * 8); + randomvel = (Random() % 0x40); + if (randomvel == 0) { - jewel = &jewels[i]; - if (jewel->state == JEWEL_STATE_LANDED && jewel->destYPos == destYPos && abs(xPos - jewel->xPos) < 16) - return TRUE; + randomvel = 2; } - - return FALSE; + if (LR < 51) + { + randomvel = (randomvel * (0 - 1)); + } + + sPinballGame->ball.xPos = x << 8; + sPinballGame->ball.yPos = 16 << 8; + sPinballGame->ball.xVelocity = randomvel; + sPinballGame->ball.yVelocity = (sScore->StartSpeed * 20); + sPinballGame->ball.spin = 0; } -static bool32 CheckJewelCollision(struct Ball *ball, struct MeowthJewel *jewel, u8 *outCollisionNormal) +static void HandleBallPhysics(void) { - int x, y; + bool32 isStaticColliding; + bool32 isObjectColliding = FALSE; + u8 objectCollisionNormal = 0; + u8 staticCollisionNormal = 0; u8 collisionNormal; - int ballXPos = (ball->xPos >> 8); - int ballYPos = (ball->yPos >> 8); - int jewelXPos = jewel->xPos; - int jewelYPos = jewel->yPos >> 8; - if (ballXPos < jewelXPos - 12 || ballXPos >= jewelXPos + 12 - || ballYPos < jewelYPos - 12 || ballYPos >= jewelYPos + 12) - return FALSE; + u16 artificialYForce = 0; + int collisionAmplification = 0; + struct Ball *ball = &sPinballGame->ball; - x = ballXPos - jewelXPos + 12; - y = ballYPos - jewelYPos + 12; - collisionNormal = sMeowthJewelCollisionNormalAngles[y * 24 + x]; - if (collisionNormal == 0xFF) - return FALSE; + if (sPinballGame->gravityEnabled) + ApplyGravity(ball); - // Multiply normal by two because the original data is stored halved. - *outCollisionNormal = collisionNormal * 2; - jewel->state = JEWEL_STATE_CONSUMED; - return TRUE; -} + LimitVelocity(ball); + HandleTilts(ball); -static void UpdateMeowthSprite(struct Sprite *sprite) -{ - int animNum; - struct Meowth *meowth = &sPinballGame->meowth; - int prevState = sprite->data[0]; - int prevFacing = sprite->data[1]; - int curState = meowth->state; - int curFacing = meowth->facing; - sprite->x = meowth->xPos - sPinballGame->cameraScrollX; - sprite->y = meowth->yPos - sPinballGame->cameraScrollY; - - // Check if Meowth's state changed, and start the appropriate - // sprite animation. - if (prevState != curState || prevFacing != curFacing) + isStaticColliding = CheckStaticCollision(ball, sPinballGame->stageTileWidth, sPinballGame->stageTileHeight, &staticCollisionNormal, &artificialYForce); + + if (isObjectColliding) + collisionNormal = objectCollisionNormal; + else + collisionNormal = staticCollisionNormal; + + if (isObjectColliding || isStaticColliding) { - sprite->data[0] = curState; - sprite->data[1] = curFacing; - switch (curState) + ApplyTiltForces(ball, collisionNormal); + RotateVector(&ball->xVelocity, &ball->yVelocity, collisionNormal); + ApplyCollisionForces(ball, artificialYForce, collisionAmplification); + RotateVector(&ball->xVelocity, &ball->yVelocity, -collisionNormal); + + if ((isStaticColliding) && ((ball->yVelocity > 100) || (ball->xVelocity > 100))) // Wall or static object collision { - case MEOWTH_STATE_WALK: - animNum = curFacing == MEOWTH_FACING_RIGHT ? 0 : 1; - StartSpriteAnim(sprite, animNum); - break; - case MEOWTH_STATE_HIT: - animNum = curFacing == MEOWTH_FACING_RIGHT ? 2 : 3; - StartSpriteAnim(sprite, animNum); - break; - case MEOWTH_STATE_FINISH: - StartSpriteAnim(sprite, 4); - break; + PlaySE(SE_WALL_HIT); // Trigger the sound effect for wall collision } } - if (curState == MEOWTH_STATE_HIT) + UpdatePosition(ball); + + if ((ball->yPos >> 8) > 168) { - if (--meowth->hitDuration == 0) - meowth->state = MEOWTH_STATE_WALK; + ball->yPos = 170 << 8; + LoseBall(); } } -static void UpdateMeowthJewelSprite(struct Sprite *sprite) +static void LoseBall(void) { - int jewelId = sprite->data[0]; - struct MeowthJewel *jewel = &sPinballGame->meowth.jewels[jewelId]; - int prevState = sprite->data[1]; - int curState = jewel->state; - sprite->x = jewel->xPos - sPinballGame->cameraScrollX; - sprite->y = (jewel->yPos >> 8) - sPinballGame->cameraScrollY; - if (prevState != curState) - { - sprite->data[1] = curState; - switch (curState) - { - case JEWEL_STATE_HIDDEN: - DestroySprite(sprite); - break; - case JEWEL_STATE_FALLING: - StartSpriteAnim(sprite, 0); - break; - case JEWEL_STATE_LANDED: - StartSpriteAnim(sprite, 1); - break; - case JEWEL_STATE_CONSUMED: - StartSpriteAnim(sprite, 2); - break; - } - } - - if (curState == JEWEL_STATE_CONSUMED && sprite->animEnded) + sScore->Lives--; + if (PlayAnotherBall()) { - sPinballGame->meowth.jewels[jewelId].state = JEWEL_STATE_HIDDEN; - DestroySprite(sprite); + PlaySE(SE_FAINT); + sScore->Multiplier = 1; + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + gSprites[sScore->MultiplierSpriteId].animNum = 0; + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + UpdateLives(); + sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); } -} - -static void UpdateMeowthJewelMultiplierSprite(struct Sprite *sprite) -{ - // data[0] = state - // data[1] = state counter - // data[2] = original y position - sprite->x2 = -sPinballGame->cameraScrollX; - sprite->y2 = -sPinballGame->cameraScrollY; - switch (sprite->data[0]) + else { - case 0: - sprite->y--; - if (++sprite->data[1] == 5) - { - sprite->data[0] = 1; - sprite->data[1] = 0; - sprite->y = sprite->data[2]; - } - break; - case 1: - if (++sprite->data[1] >= 22) - { - sprite->data[0] = 2; - sprite->data[1] = 0; - } - break; - case 2: - if (++sprite->data[1] >= 24) + if (!sPinballGame->waitExitScene) { - DestroySprite(sprite); - return; + PlayFanfare(MUS_TOO_BAD); + sScore->Multiplier = 1; + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + gSprites[sScore->MultiplierSpriteId].animNum = 0; + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + CreateGameOver(); + UpdateLives(); + sPinballGame->exitTimer = 2 * 60; + sPinballGame->state = PINBALL_STATE_DELAY_START_EXIT; } - if (sprite->data[1] % 8 < 4) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - break; + gSpecialVar_Result = sPinballGame->completed; } } -static void ResetMeowthJewels(struct Meowth *meowth) +static bool32 PlayAnotherBall(void) { - int i; - for (i = 0; i < MAX_MEOWTH_JEWELS; i++) - { - struct MeowthJewel *jewel = &meowth->jewels[i]; - if (jewel->state != JEWEL_STATE_HIDDEN) - { - DestroySprite(&gSprites[jewel->spriteId]); - jewel->state = JEWEL_STATE_HIDDEN; - } - } + if (sScore->Lives > 0) + return TRUE; + else + return FALSE; } -static void UpdateMeowthJewelSparkleSprite(struct Sprite *sprite) +#define GRAVITY 0x08 + +static void ApplyGravity(struct Ball *ball) { - // data[0] is visibility counter timer - // data[1] is the player's score, capped at 20. - if (sprite->data[0] == 0) - { - sprite->invisible = TRUE; - } - else - { - sprite->data[0]--; - sprite->x = ((sprite->data[1] - 1) * 8 + 4) - sPinballGame->cameraScrollX; - sprite->y = 4 - sPinballGame->cameraScrollY; - sprite->invisible = FALSE; - } + ball->yVelocity += GRAVITY; } -static bool32 UpdateDiglett(struct Diglett *diglett) +#define MAX_VELOCITY 0x07FF + +static void LimitVelocity(struct Ball *ball) { - u16 *tilemap; - - // if (!diglett->initialized) - // { - // if (gMain.vblankCounter1 & 1) - // { - // int index = sDiglettInitOrder[diglett->curInitIndex]; - // diglett->states[index] = DIGLETT_STATE_IDLE_0 + (Random() % 4); - - // tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - // UpdateDiglettTiles(tilemap, index, diglett); - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // UpdateDiglettCollision(diglett->collisionMap, index, TRUE); - // - // if (++diglett->curInitIndex == NUM_DIGLETTS) - // diglett->initialized = TRUE; - // } - // } - // else if (diglett->numDiglettsHit < NUM_DIGLETTS) - // { - // // Update 4 digletts each frame. - // int i; - // for (i = 0; i < 4; i++) - // { - // int index = (diglett->curUpdateIndex + i) % NUM_DIGLETTS; - // switch (diglett->states[index]) - // { - // case DIGLETT_STATE_INIT: - // case DIGLETT_STATE_HIDDEN: - // break; - // case DIGLETT_STATE_IDLE_0: - // diglett->states[index] = DIGLETT_STATE_IDLE_1; - // break; - // case DIGLETT_STATE_IDLE_1: - // diglett->states[index] = DIGLETT_STATE_IDLE_2; - // break; - // case DIGLETT_STATE_IDLE_2: - // diglett->states[index] = DIGLETT_STATE_IDLE_3; - // break; - // case DIGLETT_STATE_IDLE_3: - // diglett->states[index] = DIGLETT_STATE_IDLE_0; - // break; - // case DIGLETT_STATE_HIT_0: - // diglett->states[index] = DIGLETT_STATE_HIT_1; - // PlaySE(SE_BALLOON_YELLOW); - // break; - // case DIGLETT_STATE_HIT_1: - // diglett->states[index] = DIGLETT_STATE_HIT_2; - // //PlaySE(SE_BALLOON_YELLOW); - // break; - // case DIGLETT_STATE_HIT_2: - // diglett->states[index] = DIGLETT_STATE_HIDDEN; - // UpdateDiglettCollision(diglett->collisionMap, index, FALSE); - // if (++diglett->numDiglettsHit == NUM_DIGLETTS) - // { - // diglett->dugtrioState = DUGTRIO_STATE_3ALIVE; - // - // // Update the colision tilemap for the Dugtrio-occupied tiles. - // tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - // diglett->collisionMap[0x48] = 0x14; - // diglett->collisionMap[0x49] = 0x14; - // diglett->collisionMap[0x4A] = 0x14; - // diglett->collisionMap[0x4B] = 0x14; - // diglett->collisionMap[0x68] = 0x15; - // diglett->collisionMap[0x69] = 0x16; - // diglett->collisionMap[0x6A] = 0x17; - // diglett->collisionMap[0x6B] = 0x18; - // } - // VarSet(VAR_FLIP_WINNINGS, (diglett->numDiglettsHit * 3)); - // SetPlayerDigits(VarGet(VAR_FLIP_WINNINGS)); - // break; - // } - // - // // Update bg tilemap for the new diglett states. - // tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - // UpdateDiglettTiles(tilemap, index, diglett); - // } - // - // CopyBgTilemapBufferToVram(PINBALL_BG_BASE); - // diglett->curUpdateIndex = (diglett->curUpdateIndex + 4) % NUM_DIGLETTS; - // } - // else - // { - // // At this point, all the Digletts are hidden and Dugtrio is visible. - // //struct Sprite *dugtrioSprite = &gSprites[diglett->dugtrioSpriteId]; - // //VarSet(VAR_FLIP_WINNINGS, 100); - // //SetPlayerDigits(VarGet(VAR_FLIP_WINNINGS)); - // //switch (diglett->dugtrioState) - // //{ - // //case DUGTRIO_STATE_3ALIVE_HIT: - // // if (dugtrioSprite->animEnded) - // // diglett->dugtrioState = DUGTRIO_STATE_2ALIVE; - // // break; - //case DUGTRIO_STATE_2ALIVE_HIT: - // if (dugtrioSprite->animEnded) - // diglett->dugtrioState = DUGTRIO_STATE_1ALIVE; - // break; - //case DUGTRIO_STATE_1ALIVE_HIT: - // if (dugtrioSprite->animEnded) - // { - // diglett->dugtrioState = DUGTRIO_STATE_0ALIVE; - // StartSpriteAnim(dugtrioSprite, 7); - // // DisableFlippers(); - // // diglett->completed = TRUE; - // // return TRUE; - // // } - // // break; - // //case DUGTRIO_STATE_0ALIVE: - // // if (dugtrioSprite->animEnded) - // // diglett->dugtrioState = DUGTRIO_STATE_COMPLETE; - // // return TRUE; - // //} - //} - // - return FALSE; + // Limit each velocity axis independently. This means + // the ball can move diagonally at a higher speed. + if (ball->xVelocity > MAX_VELOCITY) + ball->xVelocity = MAX_VELOCITY; + else if (ball->xVelocity < -MAX_VELOCITY) + ball->xVelocity = -MAX_VELOCITY; + + if (ball->yVelocity > MAX_VELOCITY) + ball->yVelocity = MAX_VELOCITY; + else if (ball->yVelocity < -MAX_VELOCITY) + ball->yVelocity = -MAX_VELOCITY; } -static void UpdateDiglettTiles(u16 *tilemap, int index, struct Diglett *diglett) +static void HandleTilts(struct Ball *ball) { - //int tileIndex = sDiglettCoords[index][0] + sDiglettCoords[index][1] * 32; - //tilemap[tileIndex] = sDiglettStateTiles[diglett->states[index]][0]; - //tilemap[tileIndex + 1] = sDiglettStateTiles[diglett->states[index]][1]; - //tilemap[tileIndex + 32] = sDiglettStateTiles[diglett->states[index]][2]; - //tilemap[tileIndex + 33] = sDiglettStateTiles[diglett->states[index]][3]; -} - -static void UpdateDiglettCollision(u8 *collisionMap, int index, bool32 solidCollision) + HandleTilt(ball, &sPinballGame->rightTilt, 1, 0, DPAD_RIGHT, FALSE); + HandleTilt(ball, &sPinballGame->leftTilt, -1, 0, DPAD_LEFT, FALSE); + HandleTilt(ball, &sPinballGame->downTilt, 0, 1, DPAD_UP | DPAD_DOWN, TRUE); +} + +static void HandleTilt(struct Ball *ball, struct Tilt *tilt, int xDelta, int yDelta, u32 buttonMask, bool8 artificalEnabled) { - int tileIndex = sDiglettCoords[index][0] + sDiglettCoords[index][1] * 32; - if (solidCollision) + if ((!tilt->reset && (gMain.newKeys & buttonMask))) { - collisionMap[tileIndex] = 0x19; - collisionMap[tileIndex + 1] = 0x19; - collisionMap[tileIndex + 32] = 0x1A; - collisionMap[tileIndex + 33] = 0x1B; + PlaySE(SE_BREAKABLE_DOOR); + } + + if ((artificalEnabled && sPinballGame->doArtificialDownTilt) || (!tilt->reset && (gMain.heldKeys & buttonMask))) + { + if (++tilt->counter >= 3) + { + if (artificalEnabled) + sPinballGame->doArtificialDownTilt = FALSE; + + tilt->pushing = FALSE; + tilt->reset = TRUE; + } + else + { + ball->xPos += (xDelta << 8); + ball->yPos += (yDelta << 8); + tilt->pushing = TRUE; + } } else { - collisionMap[tileIndex] = 0x2; - collisionMap[tileIndex + 1] = 0x2; - collisionMap[tileIndex + 32] = 0x2; - collisionMap[tileIndex + 33] = 0x2; + tilt->pushing = FALSE; + if (tilt->counter > 0) + tilt->counter--; + else if (!(gMain.heldKeys & buttonMask)) + tilt->reset = FALSE; } } -static void UpdateDugtrioSprite(struct Sprite *sprite) -{ - //// data[0] = previous state - //struct Diglett *diglett = &sPinballGame->diglett; - //int prevState = sprite->data[0]; - //int curState = diglett->dugtrioState; - // - //sprite->x2 = -sPinballGame->cameraScrollX; - //sprite->y2 = -sPinballGame->cameraScrollY; - // - //// Check if Dugtrio's state changed, and start the appropriate - //// sprite animation. - //if (prevState != curState) - //{ - // sprite->data[0] = curState; - // switch (curState) - // { - // case DUGTRIO_STATE_HIDDEN: - // StartSpriteAnim(sprite, 0); - // break; - // case DUGTRIO_STATE_3ALIVE: - // StartSpriteAnim(sprite, 1); - // PlayBGM(MUS_RG_ROCKET_HIDEOUT); - // PlayCry_Normal(SPECIES_DUGTRIO, 0); - // break; - // case DUGTRIO_STATE_3ALIVE_HIT: - // StartSpriteAnim(sprite, 2); - // PlaySE(SE_EFFECTIVE); - // break; - // case DUGTRIO_STATE_2ALIVE: - // StartSpriteAnim(sprite, 3); - // break; - // case DUGTRIO_STATE_2ALIVE_HIT: - // StartSpriteAnim(sprite, 4); - // PlaySE(SE_EFFECTIVE); - // break; - // case DUGTRIO_STATE_1ALIVE: - // StartSpriteAnim(sprite, 5); - // break; - // case DUGTRIO_STATE_1ALIVE_HIT: - // StartSpriteAnim(sprite, 6); - // PlayBGM(MUS_NONE); - // VarSet(VAR_FLIP_WINNINGS, 200); - // SetPlayerDigits(VarGet(VAR_FLIP_WINNINGS)); - // PlaySE(SE_SUPER_EFFECTIVE); - // break; - // case DUGTRIO_STATE_0ALIVE: - // StartSpriteAnim(sprite, 7); - // break; - // case DUGTRIO_STATE_COMPLETE: - // StartSpriteAnim(sprite, 0); - // break; - // } - //} -} +#define MAX_POS_UPDATE 0x04FF -static bool32 CheckSeelCollision(struct Ball *ball, struct Seel *seel, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) +static void UpdatePosition(struct Ball *ball) { - int x, y; - u8 collisionNormal; - struct Sprite *sparkleSprite = &gSprites[seel->sparkleSpriteId]; - struct SeelSwimmer *swimmer = &seel->swimmers[seel->emergingSwimmerIndex]; - int ballXPos = (ball->xPos >> 8); - int ballYPos = (ball->yPos >> 8); - int swimmerXPos = (swimmer->xPos >> 8); - int swimmerYPos = (swimmer->yPos >> 8); - - if (ticks <= 0) - return FALSE; - - if (swimmer->state != SEEL_STATE_VISIBLE_RIGHT && swimmer->state != SEEL_STATE_VISIBLE_LEFT) - return FALSE; + // Moves the ball's position according to its velocity. + // The amount it's moved is artificially limited at a lower + // threshold than the maximum velocity. + if (ball->xVelocity > MAX_POS_UPDATE) + ball->xPos += MAX_POS_UPDATE; + else if (ball->xVelocity < -MAX_POS_UPDATE) + ball->xPos -= MAX_POS_UPDATE; + else + ball->xPos += ball->xVelocity; - if (ballXPos < swimmerXPos - 16 || ballXPos >= swimmerXPos + 16 - || ballYPos < swimmerYPos - 16 || ballYPos >= swimmerYPos + 16) - return FALSE; + if (ball->yVelocity > MAX_POS_UPDATE) + ball->yPos += MAX_POS_UPDATE; + else if (ball->yVelocity < -MAX_POS_UPDATE) + ball->yPos -= MAX_POS_UPDATE; + else + ball->yPos += ball->yVelocity; - x = ballXPos - swimmerXPos + 16; - y = ballYPos - swimmerYPos + 16; - collisionNormal = sSeelCollisionNormalAngles[y * 32 + x]; - if (collisionNormal == 0xFF) - return FALSE; + if (ball->xPos & 0x80000000) + ball->xPos = 0; + if (ball->yPos & 0x80000000) + ball->yPos = 0; - // Multiply normal by two because the original data is stored halved. - *outCollisionNormal = collisionNormal * 2; - //*outCollisionAmplification = 1; +} - if (swimmer->state == SEEL_STATE_VISIBLE_RIGHT) - swimmer->state = SEEL_STATE_HIT_RIGHT; - else - swimmer->state = SEEL_STATE_HIT_LEFT; +static bool32 CheckStaticCollision(struct Ball *ball, int stageTileWidth, int stageTileHeight, u8 *outCollisionNormal, u16 *outYForce) +{ + int i; + u16 xDelta, yDelta; + int collisionIndex; + int maxStringStart, maxStringEnd, curStringStart, curStringLength, maxStringLength; + u8 collisionTestAttributes[ARRAY_COUNT(sCollisionTestPointOffsets)]; + u8 collisionTestCoords[ARRAY_COUNT(sCollisionTestPointOffsets)][2]; + u8 collisionTests[ARRAY_COUNT(sCollisionTestPointOffsets)]; - seel->score += seel->streak + 1; - if (!seel->completed && seel->score >= 20) - seel->completed = TRUE; + // Check each of the test points around the ball's origin + // to see if they are colliding with the static collision masks. + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) + { + int testX, testY; + int tileX, tileY, tileIndex; + int collisionAttribute, row, column; + u8 collisionMaskRow; + int xPos = ball->xPos >> 8; + int yPos = ball->yPos >> 8; - if (++seel->streak >= 9) - seel->streak = 0; + collisionTests[i] = 0; + testX = xPos + sCollisionTestPointOffsets[i][0]; + testY = yPos + sCollisionTestPointOffsets[i][1]; + if (testX < 0 || testY < 0) + { + collisionTests[i] = 1; + continue; + } - sparkleSprite->data[0] = SEEL_SPARKLE_DURATION; - sparkleSprite->data[1] = min(20, seel->score); - DrawSeelScoreJewels(seel); - if (seel->streak > 1) - { - int y = swimmerYPos - 16; - u8 spriteId = CreateSprite(&sSeelMultiplierSpriteTemplate, swimmerXPos, y, 4); - gSprites[spriteId].data[2] = y; - StartSpriteAnim(&gSprites[spriteId], seel->streak - 2); + tileX = testX / 8; + tileY = testY / 8; + row = testY % 8; + column = testX % 8; + tileIndex = (tileY * stageTileWidth) + tileX; + collisionAttribute = GetCollisionAttribute(tileIndex); + collisionMaskRow = GetCollisionMaskRow(collisionAttribute, row); + collisionTests[i] = (collisionMaskRow & (1 << column)) != 0; + collisionTestCoords[i][0] = testX; + collisionTestCoords[i][1] = testY; + collisionTestAttributes[i] = collisionAttribute; } - return TRUE; -} + // Find the largest string of consecutive colliding test points. + maxStringStart = 0; + maxStringEnd = 0; + maxStringLength = 0; + curStringStart = -1; + curStringLength = 0; + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) + { + if (collisionTests[i]) + { + if (curStringStart == -1) + curStringStart = i; -#define SEEL_SWIMMER_SPEED 0x34 + curStringLength++; + if (curStringLength > maxStringLength) + { + maxStringLength = curStringLength; + maxStringStart = curStringStart; + maxStringEnd = i; + } + } + else + { + curStringLength = 0; + curStringStart = -1; + } + } -static bool32 UpdateSeel(struct Seel *seel) -{ - int i; + // If all of the test points are colliding, then the ball + // is inside a wall. Just early exit with no collision. + if (maxStringLength == 0 || maxStringLength == 16) + return FALSE; - for (i = 0; i < NUM_SEELS; i++) + // Check if the maximum string loops around to the front of + // the collision tests array. + if (curStringStart != -1) { - struct SeelSwimmer *swimmer = &seel->swimmers[i]; - struct Sprite *swimmerSprite = &gSprites[swimmer->spriteId]; - switch (swimmer->state) + for (i = 0; i < ARRAY_COUNT(sCollisionTestPointOffsets); i++) { - case SEEL_STATE_SWIM_RIGHT: - swimmer->xPos += SEEL_SWIMMER_SPEED; - if ((swimmer->xPos >> 8) > 136) - { - swimmer->state = SEEL_STATE_TURN_LEFT; - swimmer->xPos = 136 << 8; - } - else if (seel->emergingSwimmerIndex == i) - { - if (--seel->emergingSwimmerCounter == 0) - swimmer->state = SEEL_STATE_EMERGE_RIGHT; - } - break; - case SEEL_STATE_TURN_LEFT: - if (swimmerSprite->animEnded) - swimmer->state = SEEL_STATE_SWIM_LEFT; - break; - case SEEL_STATE_SWIM_LEFT: - swimmer->xPos -= SEEL_SWIMMER_SPEED; - if ((swimmer->xPos >> 8) < 24) - { - swimmer->state = SEEL_STATE_TURN_RIGHT; - swimmer->xPos = 24 << 8; - } - else if (seel->emergingSwimmerIndex == i) - { - if (--seel->emergingSwimmerCounter == 0) - swimmer->state = SEEL_STATE_EMERGE_LEFT; - } - break; - case SEEL_STATE_TURN_RIGHT: - if (swimmerSprite->animEnded) - swimmer->state = SEEL_STATE_SWIM_RIGHT; - break; - case SEEL_STATE_EMERGE_RIGHT: - if (swimmerSprite->animEnded) - { - swimmer->state = SEEL_STATE_VISIBLE_RIGHT; - swimmer->counter = GetSeelVisibleTicks(seel->streak); - } - break; - case SEEL_STATE_EMERGE_LEFT: - if (swimmerSprite->animEnded) - { - swimmer->state = SEEL_STATE_VISIBLE_LEFT; - swimmer->counter = GetSeelVisibleTicks(seel->streak); - } - break; - case SEEL_STATE_VISIBLE_RIGHT: - case SEEL_STATE_VISIBLE_LEFT: - if (--swimmer->counter == 0) - { - swimmer->state = (Random() & 1) ? SEEL_STATE_SUBMERGE_RIGHT : SEEL_STATE_SUBMERGE_LEFT; - seel->streak = 0; - } - break; - case SEEL_STATE_SUBMERGE_RIGHT: - case SEEL_STATE_HIT_RIGHT: - if (swimmerSprite->animEnded) - { - swimmer->state = SEEL_STATE_SWIM_RIGHT; - ChooseNextEmergingSeel(i, seel); - } - break; - case SEEL_STATE_SUBMERGE_LEFT: - case SEEL_STATE_HIT_LEFT: - if (swimmerSprite->animEnded) + if (!collisionTests[i]) + break; + + curStringLength++; + if (curStringLength > maxStringLength) { - swimmer->state = SEEL_STATE_SWIM_LEFT; - ChooseNextEmergingSeel(i, seel); + maxStringLength = curStringLength; + maxStringStart = curStringStart; + maxStringEnd = i; } - break; } } + + collisionIndex = ((maxStringStart & 0xF) << 4) | (maxStringEnd & 0xF); + + // Treat the delta values as signed. + xDelta = sCollisionXDeltas[collisionIndex]; + if (xDelta > 0x8000) + ball->xPos -= 0x10000 - xDelta; + else + ball->xPos += xDelta; - return seel->completed; -} + yDelta = sCollisionYDeltas[collisionIndex]; + if (yDelta > 0x8000) + ball->yPos -= 0x10000 - yDelta; + else + ball->yPos += yDelta; -static void ChooseNextEmergingSeel(int curSeelIndex, struct Seel *seel) -{ - int index; - do { - index = Random() % NUM_SEELS; - } while (index == curSeelIndex); + *outCollisionNormal = sCollisionNormals[collisionIndex]; + HandleStaticCollisionDiglett(&sPinballGame->diglett, + collisionTestCoords[maxStringStart][0], + collisionTestCoords[maxStringStart][1], + collisionTestAttributes[maxStringStart], + outYForce); - seel->emergingSwimmerIndex = index; - seel->emergingSwimmerCounter = Random() % 60; + return TRUE; } -static u32 GetSeelVisibleTicks(int curStreak) +static u8 GetCollisionAttribute(int index) { - if (curStreak < 2) - return 3 * 60; - - if (curStreak < 6) - return 2 * 60; - - return 1 * 60; + return sPinballGame->diglett.collisionMap[index]; } -static void ResetSeels(struct Seel *seel) +static u8 GetCollisionMaskRow(int collisionAttribute, int row) { - int i; - bool32 isSeelVisible = FALSE; + u8 mask = 0; - for (i = 0; i < NUM_SEELS; i++) + if (collisionAttribute < 0xE0) { - struct SeelSwimmer *swimmer = &seel->swimmers[i]; - if (swimmer->state == SEEL_STATE_VISIBLE_RIGHT || swimmer->state == SEEL_STATE_VISIBLE_LEFT) - { - isSeelVisible = TRUE; - break; - } + // Reverse the bits because my tooling is backwards. + return ReverseBits(sDiglettStageBgCollisionMasks[(collisionAttribute * 0x8) + row]); } - for (i = 0; i < NUM_SEELS; i++) - { - struct SeelSwimmer *swimmer = &seel->swimmers[i]; - if (isSeelVisible) - { - // Reset to original positions. - // The original game does this for some reason. - swimmer->state = sInitialSeelStates[i]; - swimmer->xPos = sInitialSeelCoords[i][0] << 8; - swimmer->yPos = sInitialSeelCoords[i][1] << 8; - } - else - { - // Revert the seel back to a swimming state, depending on - // its current direction. - swimmer->state = (swimmer->state == SEEL_STATE_SWIM_RIGHT || - swimmer->state == SEEL_STATE_TURN_LEFT || - swimmer->state == SEEL_STATE_EMERGE_RIGHT || - swimmer->state == SEEL_STATE_SUBMERGE_RIGHT || - swimmer->state == SEEL_STATE_HIT_RIGHT) - ? SEEL_STATE_SWIM_RIGHT - : SEEL_STATE_SWIM_LEFT; - } - } + return ReverseBits(mask); } -static void UpdateSeelSprite(struct Sprite *sprite) +static u8 ReverseBits(u8 b) { - // data[0] = previous state - // data[1] = seel swimmer index - struct SeelSwimmer *swimmer = &sPinballGame->seel.swimmers[sprite->data[1]]; - int prevState = sprite->data[0]; - int curState = swimmer->state; - sprite->x = (swimmer->xPos >> 8) - sPinballGame->cameraScrollX; - sprite->y = (swimmer->yPos >> 8) - sPinballGame->cameraScrollY; - - // Check if this Seel's state changed, and start the appropriate - // sprite animation. - if (prevState != curState) - { - sprite->data[0] = curState; - switch (curState) - { - case SEEL_STATE_SWIM_RIGHT: - StartSpriteAnim(sprite, 0); - break; - case SEEL_STATE_TURN_LEFT: - StartSpriteAnim(sprite, 1); - break; - case SEEL_STATE_SWIM_LEFT: - StartSpriteAnim(sprite, 2); - break; - case SEEL_STATE_TURN_RIGHT: - StartSpriteAnim(sprite, 3); - break; - case SEEL_STATE_EMERGE_RIGHT: - StartSpriteAnim(sprite, 4); - PlaySE(SE_M_DIVE); - break; - case SEEL_STATE_EMERGE_LEFT: - StartSpriteAnim(sprite, 5); - PlaySE(SE_M_DIVE); - break; - case SEEL_STATE_VISIBLE_RIGHT: - case SEEL_STATE_VISIBLE_LEFT: - StartSpriteAnim(sprite, 6); - break; - case SEEL_STATE_SUBMERGE_RIGHT: - StartSpriteAnim(sprite, 7); - PlaySE(SE_M_DIVE); - break; - case SEEL_STATE_SUBMERGE_LEFT: - StartSpriteAnim(sprite, 8); - PlaySE(SE_M_DIVE); - break; - case SEEL_STATE_HIT_RIGHT: - StartSpriteAnim(sprite, 9); - PlaySE(SE_BALLOON_YELLOW); - break; - case SEEL_STATE_HIT_LEFT: - StartSpriteAnim(sprite, 10); - PlaySE(SE_BALLOON_YELLOW); - break; - } - } + b = (b & 0xF0) >> 4 | (b & 0x0F) << 4; + b = (b & 0xCC) >> 2 | (b & 0x33) << 2; + b = (b & 0xAA) >> 1 | (b & 0x55) << 1; + return b; } -static void UpdateSeelSparkleSprite(struct Sprite *sprite) +static void ApplyTiltForces(struct Ball *ball, u8 collisionNormal) { - // data[0] is visibility counter timer - // data[1] is the player's score, capped at 20. - if (sprite->data[0] == 0) - { - sprite->invisible = TRUE; - } - else + u32 index = (sPinballGame->downTilt.pushing << 2) | + (sPinballGame->rightTilt.pushing << 1) | + (sPinballGame->leftTilt.pushing << 0); + const s16 *deltas = sTiltVelocityDeltas[index]; + if (deltas != NULL) { - sprite->data[0]--; - sprite->x = ((sprite->data[1] - 1) * 8 + 4) - sPinballGame->cameraScrollX; - sprite->y = 4 - sPinballGame->cameraScrollY; - sprite->invisible = FALSE; + ball->xVelocity += deltas[collisionNormal * 2]; + ball->yVelocity += deltas[collisionNormal * 2 + 1]; } } -static void UpdateSeelMultiplierSprite(struct Sprite *sprite) +static void RotateVector(s16 *x, s16 *y, u8 angle) { - // data[0] = state - // data[1] = state counter - // data[2] = original y position - sprite->x2 = -sPinballGame->cameraScrollX; - sprite->y2 = -sPinballGame->cameraScrollY; - switch (sprite->data[0]) - { - case 0: - sprite->y--; - if (++sprite->data[1] == 5) - { - sprite->data[0] = 1; - sprite->data[1] = 0; - sprite->y = sprite->data[2]; - } - break; - case 1: - if (++sprite->data[1] >= 22) - { - sprite->data[0] = 2; - sprite->data[1] = 0; - } - break; - case 2: - if (++sprite->data[1] >= 24) - { - DestroySprite(sprite); - return; - } - - if (sprite->data[1] % 8 < 4) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - break; - } + // Rotate a vector by an angle with a 2D rotation matrix calculation. + s16 sin = gSineTable[angle]; + s16 cos = gSineTable[angle + 64]; + s16 newX = ((*x * cos) / 256) + ((*y * sin) / 256); + s16 newY = ((*y * cos) / 256) - ((*x * sin) / 256); + *x = newX; + *y = newY; } -static bool32 CheckGhostsCollision(struct Ball *ball, u32 ticks, struct GraveyardGhost *ghosts, int numGhosts, const u8 *angles, int width, int height, u8 *outCollisionNormal, int *outCollisionAmplification) +static void HandleStaticCollisionDiglett(struct Diglett *diglett, int x, int y, u8 collisionAttribute, u16 *outYForce) { - int i; - int x, y; - u8 collisionNormal; - int ballXPos = (ball->xPos >> 8); - int ballYPos = (ball->yPos >> 8); - - if (ticks <= 0) - return FALSE; - - for (i = 0; i < numGhosts; i++) + if (collisionAttribute == 0x1C) { - struct GraveyardGhost *ghost = &ghosts[i]; - int ghostXPos = (ghost->xPos >> 8); - int ghostYPos = (ghost->yPos >> 8); + // If the ball hit a Diglett, remove the Diglett's solid collision from the map. + int tileX = x / 8; // Convert pixel x to tile x + int tileY = y / 8; // Convert pixel y to tile y - if (ghost->state != GHOST_STATE_VISIBLE) - continue; + // Update the collision map with the new coordinates (tileX, tileY) + u16 *tilemap; + int tileIndex = tileY * 32 + tileX; // Convert tile coordinates to index (assuming 32 tiles per row) - if (ballXPos < ghostXPos - (width / 2) || ballXPos >= ghostXPos + (width / 2) - || ballYPos < ghostYPos - (height / 2) || ballYPos >= ghostYPos + (height / 2)) - continue; + // Remove the collision at this position by setting it back to 0x2 in the collision map + diglett->collisionMap[tileIndex] = 0x2; - x = ballXPos - ghostXPos + (width / 2); - y = ballYPos - ghostYPos + (height / 2); - collisionNormal = angles[y * width + x]; - if (collisionNormal == 0xFF) - continue; + // Update the tilemap at this position to 0x28 (new tile after collision) + tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); + tilemap[tileIndex] = 0x28; - // Multiply normal by two because the original data is stored halved. - *outCollisionNormal = collisionNormal * 2; - ghost->state = GHOST_STATE_HIT; - PlaySE(SE_M_COMET_PUNCH); - return TRUE; + PlaySE(SE_SWITCH); + // Copy the updated tilemap to VRAM + CopyBgTilemapBufferToVram(PINBALL_BG_BASE); } - return FALSE; -} - -#define GHOST_SPEED 0x35 -#define REQUIRED_GHOST_HITS 10 -#define REQUIRED_GENGAR_HITS 5 - -static bool32 CheckGengarCollision(struct Ball *ball, struct Gengar *gengar, u32 ticks, u8 *outCollisionNormal, int *outCollisionAmplification) -{ - int x, y; - u8 collisionNormal; - struct GengarGhost *gengarGhost = &gengar->gengarGhost; - int gengarXPos = (gengarGhost->xPos >> 8); - int gengarYPos = (gengarGhost->yPos >> 8); - int ballXPos = (ball->xPos >> 8); - int ballYPos = (ball->yPos >> 8); - - if (ticks <= 0) - return FALSE; - - if (ballXPos < gengarXPos - 24 || ballXPos >= gengarXPos + 24 - || ballYPos < gengarYPos - 32 || ballYPos >= gengarYPos + 32) - return FALSE; - - x = ballXPos - gengarXPos + 24; - y = ballYPos - gengarYPos + 32; - collisionNormal = sGengarCollisionNormalAngles[y * 48 + x]; - if (collisionNormal == 0xFF) - return FALSE; - - // Multiply normal by two because the original data is stored halved. - *outCollisionNormal = collisionNormal * 2; - - if (gengarGhost->state == GENGAR_STATE_STANDING || gengarGhost->state == GENGAR_STATE_STEP_LEFT || - gengarGhost->state == GENGAR_STATE_STEP_RIGHT) + else if (collisionAttribute == 0x19) // Jackpot + { + PlaySE(SE_UNLOCK); + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + sPinballGame->state = PACHINKO_START_JACKPOT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else if (collisionAttribute == 0x1F) // x2 { - gengarGhost->state = GENGAR_STATE_HIT; - gengarGhost->counter = 0; - gengar->numGengarHits++; - if (gengar->numGengarHits >= REQUIRED_GENGAR_HITS) + PlaySE(SE_UNLOCK); + PlaySE(SE_M_STAT_INCREASE); + if (sScore->Multiplier != 3) { - gengar->completed = TRUE; - DisableFlippers(); - gengarGhost->state = GENGAR_STATE_LEAVING; - sPinballGame->waitExitScene = TRUE; + sScore->Multiplier = 2; + gSprites[sScore->MultiplierSpriteId].animNum = 1; } - } - - return TRUE; -} + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else if (collisionAttribute == 0x22) // x3 + { + PlaySE(SE_UNLOCK); + PlaySE(SE_M_STAT_INCREASE); + sScore->Multiplier = 3; + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + gSprites[sScore->MultiplierSpriteId].animNum = 2; + gSprites[sPinballGame->ball.spriteId].invisible = TRUE; + sPinballGame->state = PINBALL_LOST_BALL_FADE_OUT; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else if (collisionAttribute == 0x25) // Win + { + PlaySE(SE_UNLOCK); + sScore->GameStart = 0; + sScore->StartDelayMax = 2; + sScore->StartDelayTimer = sScore->StartDelayMax; + sScore->SecondDelay = 30; + sPinballGame->state = PACHINKO_START_WIN; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE); + } + else if (collisionAttribute == 0x28) // Bounce + { + PlaySE(SE_LEDGE); + *outYForce = 0x100; + } +} -static bool32 UpdateGengar(struct Gengar *gengar) +static void ApplyCollisionForces(struct Ball *ball, u16 flipperYForce, int collisionAmplification) { - int i; + // Only apply the collision forces if the ball is moving + // towards the wall it collided with, which can only be + // true if the y velocity is traveling downward in the rotated + // coordinate system. + if (ball->yVelocity < 0) + return; - switch (gengar->graveyardState) - { - case GRAVEYARD_STATE_GASTLY: - for (i = 0; i < NUM_GASTLY; i++) - UpdateGhost(gengar, &gengar->gastlyGhosts[i], &gengar->numGastlyHits, GRAVEYARD_STATE_TO_HAUNTER, NUM_GASTLY); - break; - case GRAVEYARD_STATE_TO_HAUNTER: - if (--gengar->counter == 0) - { - gengar->graveyardState = GRAVEYARD_STATE_HAUNTER; - PlayBGM(MUS_RG_POKE_MANSION); - for (i = 0; i < NUM_HAUNTER; i++) - InitGhost(&gengar->haunterGhosts[i], sInitialHaunterData[i], &sHaunterSpriteTemplate, i); - } - break; - case GRAVEYARD_STATE_HAUNTER: - for (i = 0; i < NUM_HAUNTER; i++) - UpdateGhost(gengar, &gengar->haunterGhosts[i], &gengar->numHaunterHits, GRAVEYARD_STATE_TO_GENGAR, NUM_HAUNTER); - break; - case GRAVEYARD_STATE_TO_GENGAR: - gengar->counter--; - if (gengar->counter == 60) - { - CrumbleGravestones(gengar); - } - else if (gengar->counter == 0) - { - struct GengarGhost *gengarGhost = &gengar->gengarGhost; - FreeSpriteTilesByTag(TAG_HAUNTER); - FreeSpritePaletteByTag(TAG_HAUNTER); - LoadCompressedSpriteSheet(&sGengarAnimationSpriteSheet); - LoadSpritePalette(&sGengarAnimationSpritePalette); - gengar->graveyardState = GRAVEYARD_STATE_GENGAR; - gengarGhost->state = GENGAR_STATE_STANDING; - gengarGhost->counter = 60; - gengarGhost->xPos = 80 << 8; - gengarGhost->yPos = 20 << 8; - gengarGhost->spriteId = CreateSprite(&sGengarSpriteTemplate, 80, 20, 5); - gSprites[gengarGhost->spriteId].data[0] = gengarGhost->state; - StartSpriteAnim(&gSprites[gengarGhost->spriteId], 0); - PlayCry_Normal(SPECIES_GENGAR, 0); - } - case GRAVEYARD_STATE_GENGAR: - UpdateGengarGhost(gengar); - break; - } + // Apply dampening to the vertical velocity component, and + // negate it so that the ball bounces off the wall. + ball->yVelocity = -(((2 + collisionAmplification) * ball->yVelocity) / 8); + ball->xVelocity += ball->spin / 2; + ball->spin = (ball->xVelocity * 4) >> 8; - return gengar->completed; + ball->yVelocity -= flipperYForce; } -static void UpdateGengarGhost(struct Gengar *gengar) +static void UpdateCamera(void) { - struct GengarGhost *gengarGhost = &gengar->gengarGhost; - struct Sprite *sprite = &gSprites[gengarGhost->spriteId]; - - switch (gengarGhost->state) - { - case GENGAR_STATE_STANDING: - if (--gengarGhost->counter == 0) - { - gengarGhost->state = gengarGhost->nextFoot ? GENGAR_STATE_STEP_RIGHT : GENGAR_STATE_STEP_LEFT; - gengarGhost->counter = 64; - if ((gengarGhost->yPos >> 8) < 64) - gengarGhost->yPos += (3 << 8); - - sPinballGame->doArtificialDownTilt = TRUE; - PlaySE(SE_M_STRENGTH); - } - break; - case GENGAR_STATE_STEP_LEFT: - case GENGAR_STATE_STEP_RIGHT: - if (--gengarGhost->counter == 0) - { - gengarGhost->state = GENGAR_STATE_STANDING; - gengarGhost->counter = 12; - gengarGhost->nextFoot = !gengarGhost->nextFoot; - if ((gengarGhost->yPos >> 8) < 64) { - gengarGhost->yPos += (1 << 8); - } - } - break; - case GENGAR_STATE_HIT: - gengarGhost->counter++; - if (gengarGhost->counter == 1) - { - if ((gengarGhost->yPos >> 8) > 16) { - gengarGhost->yPos -= (4 << 8); - PlaySE(SE_EFFECTIVE); - } - } - else if (gengarGhost->counter == 21) - { - if ((gengarGhost->yPos >> 8) > 16) - gengarGhost->yPos -= (4 << 8); - } - else if (sprite->animEnded) - { - gengarGhost->state = GENGAR_STATE_STANDING; - gengarGhost->counter = 10; - } - break; - case GENGAR_STATE_LEAVING: - if (sprite->animEnded) - { - PlaySE(SE_M_TELEPORT); - sPinballGame->waitExitScene = FALSE; - sPinballGame->state = PINBALL_STATE_START_EXIT; - sprite->invisible = TRUE; - } - else if (++gengarGhost->counter >= 108) - { - int leaveIndex = gengarGhost->counter - 108; - //PlaySE(SE_M_STRENGTH); - if (leaveIndex % 82 == 0) - { - gengarGhost->yPos -= (3 << 8); - } - else if (leaveIndex % 82 == 64) - { - gengarGhost->yPos -= (1 << 8); - } - } - break; - } -}; + int scrollX, scrollY; -static void UpdateGhost(struct Gengar *gengar, struct GraveyardGhost *ghost, u8 *numGhostHits, u8 nextState, int numGhosts) -{ - u8 multiplier = 0; - struct Sprite *sprite = &gSprites[ghost->spriteId]; - - if (numGhostHits == &gengar->numGastlyHits) - { - multiplier = 3; // Gastly - } - else if (numGhostHits == &gengar->numHaunterHits) - { - multiplier = 7; // Haunter - } - - switch (ghost->state) - { - case GHOST_STATE_VISIBLE: - if (ghost->direction == GHOST_DIR_RIGHT) - { - ghost->xPos += GHOST_SPEED; - if ((ghost->xPos >> 8) >= ghost->rightBoundary) - { - ghost->xPos = ghost->rightBoundary << 8; - ghost->direction = GHOST_DIR_LEFT; - } - } - else - { - ghost->xPos -= GHOST_SPEED; - if ((ghost->xPos >> 8) < ghost->leftBoundary) - { - ghost->xPos = ghost->leftBoundary << 8; - ghost->direction = GHOST_DIR_RIGHT; - } - } + scrollX = 0; // Center the game in the middle of the screen + scrollY = 0; - if (++ghost->counter >= 52) - ghost->counter = 0; - break; - case GHOST_STATE_HIT: - if (sprite->animEnded) - { - (*numGhostHits)++; - VarSet(GAME_CORNER_VAR_WINNINGS, (VarGet(GAME_CORNER_VAR_WINNINGS) + multiplier)); - SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); - PlaySE(SE_M_TELEPORT); - if (*numGhostHits >= REQUIRED_GHOST_HITS - (numGhosts - 1)) - { - ghost->state = GHOST_STATE_FINISHED; - if (*numGhostHits >= REQUIRED_GHOST_HITS) - { - gengar->graveyardState = nextState; - gengar->counter = 2 * 60; - } - } - else - { - ghost->state = GHOST_STATE_INVISIBLE; - ghost->counter = 0; - } - } - break; - case GHOST_STATE_INVISIBLE: - if (++ghost->counter >= 130) - { - ghost->state = GHOST_STATE_VISIBLE; - ghost->counter = 0; - } - break; - } -} + scrollX += sPinballGame->leftTilt.counter; + scrollX -= sPinballGame->rightTilt.counter; + scrollY += sPinballGame->downTilt.counter; -static void InitGhost(struct GraveyardGhost *ghost, const u8 *initialData, const struct SpriteTemplate *spriteTemplate, int ghostIndex) -{ - ghost->state = GHOST_STATE_VISIBLE; - ghost->xPos = initialData[0] << 8; - ghost->yPos = initialData[1] << 8; - ghost->direction = initialData[2]; - ghost->leftBoundary = initialData[3]; - ghost->rightBoundary = initialData[4]; - ghost->spriteId = CreateSprite(spriteTemplate, ghost->xPos >> 8, ghost->yPos >> 8, 5); - gSprites[ghost->spriteId].data[0] = ghost->state; - gSprites[ghost->spriteId].data[1] = ghostIndex; - PlaySE(SE_M_TELEPORT); - if (ghost->direction == GHOST_DIR_RIGHT) - StartSpriteAnim(&gSprites[ghost->spriteId], 0); - else - StartSpriteAnim(&gSprites[ghost->spriteId], 1); -} + sPinballGame->cameraScrollX = scrollX; + sPinballGame->cameraScrollY = scrollY; -static void UpdateGastlySprite(struct Sprite *sprite) -{ - // data[0] = previous state - // data[1] = gastly index - struct GraveyardGhost *gastly = &sPinballGame->gengar.gastlyGhosts[sprite->data[1]]; - UpdateGhostSprite(sprite, gastly); + SetGpuReg(REG_OFFSET_BG2HOFS, scrollX); + SetGpuReg(REG_OFFSET_BG2VOFS, scrollY); } -static void UpdateHaunterSprite(struct Sprite *sprite) +static void StartExitPinballGame(void) { - // data[0] = previous state - // data[1] = haunter index - struct GraveyardGhost *haunter = &sPinballGame->gengar.haunterGhosts[sprite->data[1]]; - UpdateGhostSprite(sprite, haunter); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sPinballGame->state = PINBALL_STATE_EXIT; } -static void UpdateGhostSprite(struct Sprite *sprite, struct GraveyardGhost *ghost) +static void ExitPinballGame(void) { - // data[0] = previous state - // data[1] = ghost index - int prevState = sprite->data[0]; - int curState = ghost->state; - sprite->x = (ghost->xPos >> 8) - sPinballGame->cameraScrollX; - sprite->y = (ghost->yPos >> 8) - sPinballGame->cameraScrollY; - switch ((ghost->counter % 52) / 13) - { - case 0: - case 2: - sprite->y2 = 0; - break; - case 1: - sprite->y2 = 1; - break; - case 3: - sprite->y2 = -1; - break; - } - - // Check if this Haunter's state changed, and start the appropriate - // sprite animation. - if (prevState != curState) + if (!gPaletteFade.active) { - sprite->data[0] = curState; - switch (curState) - { - case GHOST_STATE_VISIBLE: - sprite->invisible = FALSE; - StartSpriteAnim(sprite, 0); - PlaySE(SE_M_TELEPORT); - break; - case GHOST_STATE_HIT: - sprite->invisible = FALSE; - StartSpriteAnim(sprite, 1); - break; - case GHOST_STATE_INVISIBLE: - sprite->invisible = TRUE; - break; - case GHOST_STATE_FINISHED: - DestroySprite(sprite); - ghost->spriteId = 0xFF; - break; - } - } -} + FREE_AND_SET_NULL(sPinballGame->diglett.collisionMap); -static void UpdateGengarSprite(struct Sprite *sprite) -{ - // data[0] = previous state - struct GengarGhost *gengarGhost = &sPinballGame->gengar.gengarGhost; - int prevState = sprite->data[0]; - int curState = gengarGhost->state; - sprite->x = (gengarGhost->xPos >> 8) - sPinballGame->cameraScrollX; - sprite->y = (gengarGhost->yPos >> 8) - sPinballGame->cameraScrollY; - - // Check if Gengar's state changed, and start the appropriate - // sprite animation. - if (prevState != curState) - { - sprite->data[0] = curState; - switch (curState) - { - case GENGAR_STATE_STANDING: - StartSpriteAnim(sprite, 0); - break; - case GENGAR_STATE_STEP_LEFT: - StartSpriteAnim(sprite, 1); - break; - case GENGAR_STATE_STEP_RIGHT: - StartSpriteAnim(sprite, 2); - break; - case GENGAR_STATE_HIT: - StartSpriteAnim(sprite, 3); - break; - case GENGAR_STATE_LEAVING: - StartSpriteAnim(sprite, 4); - PlayBGM(MUS_NONE); - VarSet(GAME_CORNER_VAR_WINNINGS, 250); - SetPlayerDigits(VarGet(GAME_CORNER_VAR_WINNINGS)); - PlaySE(SE_SUPER_EFFECTIVE); - break; - } + SetMainCallback2(sPinballGame->returnMainCallback); + FREE_AND_SET_NULL(sPinballGame); + FREE_AND_SET_NULL(sScore); } } -static void CrumbleGravestones(struct Gengar *gengar) +static void UpdateBallSprite(struct Sprite *sprite) { - int i; - - // Draw the 4 crumbled gravestone tiles to the background tilemap. - u16 *tilemap = GetBgTilemapBuffer(PINBALL_BG_BASE); - PlayBGM(MUS_RG_SILPH); - PlaySE(SE_M_ROCK_THROW); - tilemap[0x67] = 0x5; - tilemap[0x68] = 0x5; - tilemap[0x69] = 0x5; - tilemap[0x87] = 0x5; - tilemap[0x88] = 0x5; - tilemap[0x89] = 0x5; - tilemap[0xA7] = 0xA0; - tilemap[0xA8] = 0xA1; - tilemap[0xA9] = 0xA2; - tilemap[0xC7] = 0xA3; - tilemap[0xC8] = 0xA4; - tilemap[0xC9] = 0xA5; - - tilemap[0x6E] = 0x5; - tilemap[0x6F] = 0x5; - tilemap[0x70] = 0x5; - tilemap[0x8E] = 0xA0; - tilemap[0x8F] = 0xA1; - tilemap[0x90] = 0xA2; - tilemap[0xAE] = 0xA3; - tilemap[0xAF] = 0xA4; - tilemap[0xB0] = 0xA5; - - tilemap[0xE3] = 0x7; - tilemap[0xE4] = 0x64; - tilemap[0xE5] = 0x65; - tilemap[0x103] = 0xA6; - tilemap[0x104] = 0xA7; - tilemap[0x105] = 0xA8; - tilemap[0x123] = 0xA9; - tilemap[0x124] = 0xAA; - tilemap[0x125] = 0xAB; - - tilemap[0xED] = 0x5; - tilemap[0xEE] = 0x5; - tilemap[0xEF] = 0x5; - tilemap[0x10D] = 0x5; - tilemap[0x10E] = 0x5; - tilemap[0x10F] = 0x5; - tilemap[0x12D] = 0xA0; - tilemap[0x12E] = 0xA1; - tilemap[0x12F] = 0xA2; - tilemap[0x14D] = 0xA3; - tilemap[0x14E] = 0xA4; - tilemap[0x14F] = 0xA5; - - CopyBgTilemapBufferToVram(PINBALL_BG_BASE); + int ballAnim; + struct Ball *ball = &sPinballGame->ball; + sprite->x = (ball->xPos >> 8) - sPinballGame->cameraScrollX; + sprite->y = (ball->yPos >> 8) - sPinballGame->cameraScrollY; - // Update the collision map so the pinball can't collide with the - // crumbled gravestones. - for (i = 0; i < ARRAY_COUNT(sGengarGravestoneCoords); i++) - { - int index = sGengarGravestoneCoords[i][0] + sGengarGravestoneCoords[i][1] * 0x20; - gengar->collisionMap[index - 0x21] = 0x0; - gengar->collisionMap[index - 0x20] = 0x0; - gengar->collisionMap[index - 0x1F] = 0x0; - gengar->collisionMap[index - 0x01] = 0x0; - gengar->collisionMap[index] = 0x0; - gengar->collisionMap[index + 0x01] = 0x0; - gengar->collisionMap[index + 0x1F] = 0x0; - gengar->collisionMap[index + 0x20] = 0x0; - gengar->collisionMap[index + 0x21] = 0x0; - } + ball->rotation += ball->spin; + ballAnim = (ball->rotation >> 4) % 8; + StartSpriteAnim(sprite, ballAnim); } From 28769f8b92eace4008704d3939f0e5560bb9c776 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 29 Apr 2025 21:12:25 -0400 Subject: [PATCH 004/429] Map-related stuff --- data/layouts/MauvilleCity_GameCorner/map.bin | Bin 484 -> 1320 bytes data/layouts/layouts.json | 4 +- data/maps/MauvilleCity_GameCorner/map.json | 616 ++++++++-- data/maps/MauvilleCity_GameCorner/scripts.inc | 1064 +++++++++++++++++ .../metatile_attributes.bin | Bin 192 -> 544 bytes .../mauville_game_corner/metatiles.bin | Bin 1536 -> 4352 bytes .../mauville_game_corner/palettes/06.pal | 20 +- .../mauville_game_corner/palettes/08.pal | 28 +- .../mauville_game_corner/palettes/09.pal | 2 +- .../mauville_game_corner/palettes/10.pal | 28 +- .../mauville_game_corner/palettes/11.pal | 30 +- .../mauville_game_corner/palettes/12.pal | 28 +- .../secondary/mauville_game_corner/tiles.png | Bin 1608 -> 7136 bytes include/tileset_anims.h | 1 + src/data/tilesets/headers.h | 2 +- src/tileset_anims.c | 37 + 16 files changed, 1710 insertions(+), 150 deletions(-) diff --git a/data/layouts/MauvilleCity_GameCorner/map.bin b/data/layouts/MauvilleCity_GameCorner/map.bin index ce3f9bf7398c215d028fc0165f3e37e5d44441c2..a6fc8965d225c007881fc8eb63981717be66bf89 100644 GIT binary patch literal 1320 zcmZvbXJ{2c6ovDW=h?&<6N1>Ww^&GWRzU@g-59}!y%&PL_XhS@z&zAw?7gE=qec{o zKLTQJL2TGH_O7w(z4PA2XOzS2y|c`B&z;#>m)qrzKqSifMkFE-f>3#u!&iL6_q=&o zvqo1s?_I)%BOKKbEn}J}8pRQeJ~I0O7k>g~9u2o!*F4XAUlPg|MKP>IX(VtC=3pR7 zpcKNaru1sRnWv)+Z}Tvo;W&@_q-+cmSeNx!pRFW2#gUkfj)+4iQ5?F+Y$C4m5Hr}2 zPw0W^BRfLbYIXnH^-7khesS@xtgSKAE0BAl^78 zu(ecCRuv$OQr=mXa2eu#hYh569k-3|X`bkR4

i=!Wh{kvdLRo^RytdVAh0`*nK0$j;_Y z#-Xs)8&OQ<5-t^K_f8hY>&Rv{ujJEpJi;z|)fTbFZxvRfD{hh+rMjh!{ zeVuFvZ~C!OTp`YSzRU7r5~H{eYp@wxuvOw(Y{Pb}leiBzghh-MqrS0N4?SJ~ku0bG E8@dg8!~g&Q literal 484 zcmaKoPfx-?5XF;reMCeE6(!U}69r6AA$f{kKo9=mV)bI-Lh<{53umU?wBgYFGMSfs zZ??0I5bd$R5-$a><{hFb9HEU4Vq*p+#ydXoA*HO$>Dt5z&d|pcj*ibz9KZ0!gx^vL ze{dkqz$VTSiaupf;TLP9Rw*`UiF3hAtFV&FC$`MEGcx{Bvpu=b@k#CtIOM39C{^`K zUWXj>4)?f`bg6Rp3fDN6bKmQ-6WrRqzSm`m2g~}d*+>hq~&JI#AM9_+NVn{+$QCan<_}Q!C%HuutLx*%&5lD+4Blw(CPfjWn=DP2i%9ZI$SN|jf S^)Q_BF`UKr2#3KsHQC>{=nX{x diff --git a/data/tilesets/secondary/mauville_game_corner/metatiles.bin b/data/tilesets/secondary/mauville_game_corner/metatiles.bin index 07cf8c1c975701aac4a1fabe29548f2a3554fb08..b71363d940b03f8c1ada5e7570695d5405440173 100644 GIT binary patch literal 4352 zcmZWsX^>UL6~2K%F-sL9W~sO!i~GXvu7Kjc42ni@@2+}-phkF9OpHrlEJaW=+%sVm zTwt)~;S7V?XS|mT&J1%ePAbtDV9+2$D>1u7%OpQys*;p_ZojYZeUsbOGxfdG-QPK< zPoLA>p||Mm`VAcfSL<8s-&n<}Lv@sb>bE~RkbImROn}?cN*bkcTEzb^&&N+LO)AYQ z%`63VLEXNFJ$lVR)4;}o4Ff^lV*A_T(kL~hG**pKhnX*%WAw3lw3@BP*^c!)pkIAZ zKgzb*YIMnt@cOl-2a+hw`9$9$o}?zLnQE2__)9#B59gtHlsa6ERmXY$DHb15#iBz| z?r^TJ;LX+_wf5Kgs~jzj8lx4_SU!#?@nl|V%4UUWG&6Y?*YjL1@`?T9t-e!5-|FY} z^>~7{XPTGGdOtGD&8g+n%IB5OFRu++}r*9!ZDMH|bmC{2ixtdW0UMkJP{;Ds`13 zD`P4ye&Tc-kLM{om9byr<8krScuKrQb*eX1kGDtGZ%sBOyOQ0>ZW@XttVH4DfB{c5|=!uE)2STg~0(9s~Q}&&R9#yM&kWa$dpMZ(!MbX~3;< zYiy5i+}zi^y*Y07@z`tn%sb{+2L5>1JYt?UKlb=R^N@McJZ0uDTChmE#FDhF4V?|W z4LuEe<3Sc50uRP}YcV@Ha~Df*?xVium}1xq|1Yb?Gce*i$If5C!no=em~-=q8e{w}12^nKePzl#>p59k4M{#kBn`G={l*u*>I zl!aRw{EYndQoPCPXX0U*e#4cCyEx^Y4E-LX$7wCKc>a~NlAf^*@+W8&Jxl8>{}P)& za(;=2ZFWPQ|8G+B)q<=KR{h%)SrIhc)>9XkX;y+WagEf?wM%`&ZPbIA44;&#sU41b6GLy4%(p#DC8JH_Q1S z1N@2k)cn`{&*Q&Fe~JDbeI7ynXUqLB+xM#j>SJ|KO$?6@r-w5_;1j|V!!yIPJU%Hr zIXpW&Cw$BDOT9yW#Ck!{W%+m3*!!j#sKG}^M@99mb6e}JzrJF*zioS)uIOz#)^oy3 zLa|S9WbvipWi|Nn@QMs~TK*o(zq+)lw7#^il=JVk{D1KFzH8nye>8vc__XNM==|tB zZ~rNl`&`>mACfQ)_k@EX@G<6CbGkVrn_u*Q&L`UD^H1he_#8gh=f}l-H~)|y^!OgW zmmlJXJwBb!;0yRd#`*gw{C)V3@SmZxuUB7SE;QGeYb}2sPr`@ug#3%~SMZg*fNy5t z)%+x{=jS|ril64^`2~-!;cNLezMY*tE?#AQ;ZxQ46)f>s#NbE#0n1qVaNZmWf@WKP zq#go`ycWB9naibq)s8P>;S&t|fiWNX1@!{@AzpzIKd!zWOdtn_TKWDtALJOH%iVa$ged${oVcI=F5HFeX_pf8({eB*6f$7 ztR-7)&*cuc`|&cr-8RgZdNLGCeaYpbPc5!pzgbCMo=lsq;yW9-?WyPsep$bG-|tSlYwrJo zC7!Y0L+wNSV7<t^MxX zY+g3o%uhWo>SJ#gs)#G9QiI#a37xUV4|ke?)%OUHP`8^#aCKK`ojfZ22rT}Rgw?%}}D H3;(|WZrydK literal 1536 zcmb`H-A>d%6o6~n1q4Z8*#!hmmfgjlL=)Iu{7Ezc0*ZHln zcmPly0F-M3$^(G%Kz7M#c#Esd5xFy-lNV1pU z475NVdTqQF+Mo~mE%STaXJHbG;mtf5KAZN7vq3l`U^cF#&*YNi5g3JWm;i?^Q5SX7 zdFFMvuRu5Sz>xKIg!!; z*?cXR!~N83+yy_}aoX<(4fY*}eeJSC4#+{t+);0@57r0j>}l5X{1)A+dv%{?Zqt`_ zzrL#DdVAnghH{iA=8W=HUgcC=4G)S`q6$^X3*5lmB~?^aRZ-2nJkGuw`li08?_2*Z zeOo`!4=tBzm})d;>pQHzmQf z^lSab@)S+eEX`T}w3ZuYrU9o-+=|J3R<`T3EISY4=|aj%;8P2*5G6{}}{w^0)y&xOrT%zHWWqSnZmhkK9#fKPMNt5Favt zfW;*}SpxX~5khkQrE|WM3e0Wvo!+(-)`~(O7V}$FlY4UG==kXC=gb?<>k3<>r_9^c zB%Y|Sl6Yk8$wtBPLI^_lX+Kv&;k#$GML$z6o2}NQ@$7HRokSJCq4}iGwc4!bH;0ez zf14T1(VTkH5bGw;>7oDPMMcXaN|m&SL6){{WenSml?iMNKLYDoJ# z=0rCE^=G_LK4C}3HXH~svBjQYN7<*P1GZMshgZAtVk+&&#N!ghlP+X8pEJy!lkfdR z9F}G2-zxo5?HUclj_{X0%0D^O|GIwmj>njFk?4|(ZF$>}Ab((aZoDOL)ayRCO1G*MX@ujv&vcT3Em1}>Zu zk)p|8drQ@jl~pFsKp`^rTP1sLx1xJ16DLX^_1KhB>t^J+Tt!R2m;6>a2$z`StLiz= z8MDmOf5E~?y-#zHl)pItOzDA9FR|{_l2SXfSbQ;0N=Q;$ws^c1yZ=0g%?Cjo-=xhmVV!sF}{v3*n2sCkbf@n9Ug>KqPSncX76v@Kz}lO z#Cl?4c1V8JeR`!i{K-_RLWxS_qntv&D-Y@#*#bICh@q54$znG}^~xz>ZrU7uKv%=7 z=IgoVUUF>kxy{^4(JB9J3IO+n-yCTyfQ_ zsrlxIHMIU5s*%I`DDQmyO5>}|o2x^cnlg1;dk0-{r`tk;Ft6tBZr>=oKI<^<)-*Jz z212yrfK;}C!|xHGk9NQ%a))VsnINKy-5PXdy>gz5-a#9S4v`m58jrg zUZjV9?r~Fuwu|WekH#UYWp7%d= zgX7V*m;j_>(;-msxHF95Ds85H5or)Z{w&*vXdAmsV4|w`mgfy2Bs-mV6q38;8neGg zPuDR3lBzdpQb6@!Q4SD8bwG%~;>+7)D+?`9|CkH@v~!II$v>Jh_FgvjrEsH{`xool zJ*khUtD*%;gb=0JU$SS9jd@V^DtV}Jr%-U135z7X?gxg5i>^R(*@uOZ;_evYf?eeG z&lkvsnk#K0rC_QGh?&NrqUX-7#n#=3R1QUf>jKA>&LEf*?{}~EG@2^13&OjaDS!S7 z!N(n|Fnu?Lsc47l=@{@F(WtFBg##f)5^Am1O&%pMo`N17sLymdNX%k`eI5&-6&|N9 z+JZN@Q{Ya&$Z>WG-uJxq8CN1D_G)Is$BI?CJu69Rp zed?6%4H{y;K)0h0iSw3g2qE|xNC|{l2HIUdBnkx(B**hf$*WA%5FO(LHV#LFODuDU zJt;V8HLPfEIcG)_o}jiriGAI{#z@nGR!uVSdH}JgX1c9R9R~Lf!^RM#Jse;s2}{L% zz*0F;w6}W@BKtFuD1Hi0N6`r&ePVt>mAaW_qkP79jXh6|2vVoViJYhq%AbY>oswn+ z!IsRC$VW>Jr&rz>hOF!ZPg?JxjqIB;z@KTf#?SI)B?1;0wpBOHhNNT=6g87;3(pQD zsoyR|;!=%Ay(k;8wse_jO+@vL&5=D6;80!SAG~>-^b7awby?@iWZThn!YvyjU_ZtV zs-T+0mF~h>haJw!XC^OpDrav;Le^3DI=(_0)d)4B0$uZYqnDx^oD``Vfo$ZyWjn@w zTn*zsv|hUpMlHWF&_0y@{qZ((os+g#w||0S@s*vncF=SvTnH&#Ddv(~U^bF}&@;Gs zx$$_*ElpITJwM~x$`o1Y_MJ=Rj^Z!!M;~t61zIAv&HbD<5Oj!TF(|X?xN@eZ;~&PG zuYr{HtH%uWL{lH9MYgW%VN$MYg*Zr1`OU03|H*qYOmuz?jC&rr%B#*>SC!06u1K7M zH62j(lh}G35Ei6LfxB?b)s9m3co1BP(6~9SeUYw=9h5jD>W%!s1!TPf%mqZLQ)#;@ z&~ry`ir6+UsS4&WtAshoYmwpN8lzx0;=7$tG~|wL$E*f%0BsAp)}!K0GTy~u09Bx=sd$c+!Hd7anF6RoUUOF zIAmt$w!qid7{rAa1DNPsB zn^x7pmYwPbvqAMdo`=pp6fra4a0)jtnCrur^bu{O;KWBcU`}%H;GSVCF+VoSJTFCd zapyeE`LeB9oYxYt#=0M!+e{Rp=T6?Nr1!4y2KtA*@ZxU}+VLtT?@Tc8OzLo_C3n2# zH`F?$Ps#G>2^`n#G?yCgU`x3z&VvD5rGH{nRd=v(=bhoyToF1EwW$Bvlbb9wKf2gG z$wEC&Jt&pQKEXB;o83Z@2TGjez*vL&O1v`|*@5v5L%eCWaMsSa&Hg!@4E#X|14&F) zLQ!3*5)Zr9AYzR64%I*3Ng!n}GGw#-mNLg0{aU0luf%Q0$Xvvk3zo0OcX3tk-s;sD z<10beAKs|Ogd4NPFn~^pd-z+zol6g!{^QP9Wk@UfQ;`wwiER}C?nF;VF=W~yEk_*1 z1G?9sFA>}QGu!ZMCZa0;NsXY9^XI!(wSCNUgnkm8iSCY>8H)uWBD;^|WdM_(HTYNy z2pnO7*G4Kv6Z5rS7J|kpbNd={NxUtR5RWC=APJ8#LAJmrhp+weFvn+8YbW;3Cf#d7vXIim5DS93Mn7E^;4OMHb&n6eL?xm5 zr#?B%0Z>HZ4Oht@ylG$_BPzI)r+ll}AXAW4lc6C1BB$XE_%z&?nAahXTg?X_8;uSd zYcuzQ*bo~m5)bF+6#E@ctA^QN;l6Hq2$9DW$pSZWeYJPL{C%|QWcv4xakjDCrGy?f zI@Kd@%v=Af$J5XSkUp+EloPIopx3-1_Z{btQO||Lh}H<4p54)Vrc(OX){4~b{H0b< zYzV*bAv|lc6%6gVbz8C1zyI*uro)A!9;W(f3a=wf?RNONa$-Yfzhu(#lV9DAAA0mf z-R9zMmRpUo@akD)5Ax&^Ia6VCzXH?0MCfyVQr3v`{EB4Kc_(xFdH8c5nNUzA=S(apGyVD_I(Jdy^U z2n22F9TQt{$=Ye4k4$41JVo_q2CwUsXc5c$wE5F5m)(H#Uwgedbx?J5%QA)M7=i7# zKB$~~wdm&!l4-IY8Y*YVNUck}AA^m~QU=A)rz8)= z=wInbjDkrychOQ-Qd(0>blG3`){0F&xn-*)D0n9y;%6j11?C6Z==v(j^2JvN*r$D| z0BPmDFc|8((_jm03P0CDf4oxQB6ym5fK4b9fIhE5!95H2uK0(RYR=-B=spf?OK-W9 z3#@H6((4-dAshWdB3P2j%LUBffICZZr2^VzuX&|PGS0wm7zKRaZlf0de{^`F=q?hu zh_Pk7-cwiQ;9q&Y$Etfdl~+(Uy?IPxKzt6ZG;}w$=HxyW*0e@b7iV^9XzFBSk6hqm z)0H+w&=*q&Dfz6OfY9d@WvO~R_g?7|j+nFITca<6f3V4^YbhWI=Nkgj#tRlT;iN}w zz(fEEX=*NyfAEdya*=gL0hCGZvZ{UY7jB^~X(pyP15yd*RLaL1Q`ixeoD^r&O`Z^I zARYP+dl20PF(S)nDIw#LW-(=E1TC05Qi4AfSE})^OObR?o_(L$MoUl|7BH=H(yq=& zU8J+<(Eedt7;(`6**wn~$v`cCK3EWq)+;Rc?t1-hPNH;zvdyNh6q;{0GW^M4GsLu^w1%94Oa zoz(@=oL8>{`#USpA)6!wgN7pbJ9%MmK~jF}5f_SVf0(C3a6qRlEzELmI3I%uwmm`o zLeAKVn7LRv752RaC!}NrBLGYyh3T$IIOCVPFh>sEAr9P3K(bh~ImcpGdnYP?XWe$} zjE|f^%h`J7%yJj6Nc{)G^tP+ODMYfkBK+8S-$jU(v3e{GkzD@-{V~;Xt2hqZNRL3E zw2n6VRcPT%W=a2s?tjG*a=rT>*sK{#H9NYabQSu@crE&!IM6y$W`=9=wOGsN5Obb_ z2*STP>}dIp1^m=M1arY^Y5lB&>f;lX#^~S(h369!yBNY{?=v{f`#+MHQ!++aBCyPy z5evs%KkYh>!@HR3s11CHYkA2^Nc9P~-01&wptNETU@d1)va|^ljYbxjBa=mR zXw>u80arq5flk3>EUzFK2~B$}m0gVw_P%@U^VvIu33QTl@0`I7!(d=3Bh}Uzh7{^3 z`;I)jOyQ|Hi#n((rJ-|4^-OvpQ=Jp38%7gr-avze%7z?&LSrN8(VqKWgp)|TUXZf} z44hgUz2<&%>ubc2jwt_Su#lfP6t>R#^M2uhtcs@)tNj<5f{>KMBH^XfkvNC%Y!VCJa${RmKPT3JxfB4J7Z|G~cRLFq`)YQJvWAK>SzS;82 zF9Y&^gtkap-<&O6W(<8B+=>dXgOcrbLV)fllfvp^>fC8q&TBN2 z3qi7)p}Es?ZocO?VWF(p;;79cs%W#FJJcO#NM$J(P#>Yxekh>`t3O+$Zzi!9aW(my zgYR5CV5$Knkp*)js8kLC8?`+7!bCIktHne}Q1TuiR@r zO~4dI3#Jy$TR=->(OO4I`fLEA#qUZG-;#@r>AHTuM#rd}`5LC>|8RC1I$`ohMB_-} z9CUqZb&SEM*udn#Uy|7db-l^HE>~)G?LE4lDTFuyC+;+|D*1kl^@1oobn>78JQew# zq|gY0qy_ozuEzzD^LD-oEBQ(cUh-&D=`+y}q;w`;gj2*ox%5g-ksoA-VQ%RahA0;o zGw%7Hv6DA_=gD`)k^r!PR*kL}IhD1bNaB+r->zdo6(Mo z`vZng5J)kMekPqxwnQ?lLrCVEe1yubV7qzz%B!a`EobZjgGnKNswt*>mj|7;V;6kt z*UwPA8J4}HAA_akcv3?XF0C$dP{UdVXVNit$Oqx*w1dxlwfxJ10utbsrNUdV$Q8)A zlyHXuPUM@?5NNK68Ne>_Ysf!b4Vby;f)EiYeU;bed~ydMnr)=HQKzr4o??ism1G4C zSxRp(^i(Rkb;w`rMF7XSzdl>|`N7SqGiATJLxd+|hf~eNZSwol$#}qb@ z4b>x8qGkQS=ud%pB;I}Z16_!?0HN>SO=!yjlD4xGNeOPSXH+4c+E0}KS;Q7Sk7R?3 z(C#+V3v%}zL9^TEU%!<}i$||MjZ1sc@<5VpbYGn-E;4QQ`5q3=%JHTLi%~+|Hf`%!t7?8V$Xrrcrwb&!PbUeU3gUH{eKT_Uyjlp z2#tU)}meg`+z1;h~x zt7z1+NH^p>y%gVQI0?Y8teQik^R0<1jE+@m3V^LUDuE{GVx2{_ps#TdYR>L zWAORi+utXFQM|7*EpLK!lRj0Sqr)raLe{kyh}=l6^zv;d3r3M$|FoTsi`so*bZ9mG zrLeO){AvE-UVB#5@5Bj_rp5&)i@cq#^t<77q@ja$=FTHr{r29|{W>t|8`sOa_dGq* z%pM**8sb=QF8E|2`HBd61NeLh3Vt68CP#n+8(Hr!1Xt4ZVLx1@wp4CT5a{>>S~NFO zYm66%(4T;z(lUjziku`(%3-chIZ0e4r8(4JDlgsm4AQv<1K-MqIr42^pNN3S2y$k5 zl*PIisEok_X$MjN*@5G&yZ^K|i-v5hAK*uRoN7`#;sFP~0q@4wP0-sHkm_s=KrMxo zg$V*X;U!PBC*n&Nlf7z_{;6Pbcj%Q8*~p8YIYas9{(EwsV@~bMOdJ}7RCV!y_xlsJ8JooYMiG9&VRR1GV5QI8bvcF z&${phGxp)i=Fr~7($MOCS^2*MDrSQtk%Bz;yblefT?r-%$4`?r)O3z9l6zH9_Rgg> zlzXXcB{%Qq-Y$DVzpZJ|-xRUji`(@_9uxc#CTFWYBL@i*M_m(B{OqdTF7HH_?qGv9 zzx%_>&CwxFk+=33J}K#alDfeZP2tV&U$6T?lbhX2ahGu`kd=nM5Uk#^Zp5B4e%jpm zT^zmoE30X}(Z;A0k??RW(Hos67F8=fzpZ%vT0`y$B(k+37f_i z z@HqJ3xTnqGe*Sf%T=LO1jwwVMYnVv&zBYQhgyk!=ZKHU9-l6ODDhomzBU?Vl5?@_w6GD9b?1)y7R3Xzk?uIqH z+07+f3pXVKa@9C7;Qn>$;^H(gE@U}6`@UTWCNib2O9Rcw8R_?*m?&DGw~v%zwe|po zuMZ~1un&mMmOnR6hlRKMEei*i$1Hf*(>b;5R@Z(QSd{dc68q*+W;Py(sfh|h69rLu z$7+6r_m-MlplL^!&ul&7IB907w+oS0d+;*j3~jrR_nmi4)BKK)-#KjUM|li1w0qp4 zqijdt_N9M?x}W;x#Vil_Vu+o3*mmj;zCz0ZG#|MAJ2o9()2qdq!D5n>rc}R{{9H>n znj!7C!$71X7ouO^((gd`+-TI*?BEeMATgc0msKfn`DcVr#1poI{irLCNQ;!P%cuW+ Py8*+qCc3pcjxqlSKX$Z-7=Hu<0000wGI2Qo001yhOjJex|Nrjp?%v+s&CSidy}higtel*j zi;IhMb8}*1Vp394K|w(=F)<(@AP^7`0000(^x^sd00q-YL_t(&f$iHpZyPrl2k<+O zokX2%OHL5vs91(F1h6hkMyDE*Yz`oFjt5;kHiKj|Kmh?pO@C)GRAdkp0j)Awhb%>b z4z<5PYJG|NQ+NpAl1EbHy+}2W0kZHP$1jrar-!dP>uks2!6fHALy$<#xlP8i@$BOA z;&MX%5Bq9*dcc?hZ_btcbvr;b0lz0rc+*v)3*dslq6xFfr6Djb2FNDh_gX+(iND?< z*)JCd*ud)n0e{b93a}&e0LbHgSwLeZW`M)v^01qT9uOi_)>@6?y9Dq(0dOiSfew!f ztUMqcvFaHRqEHtQJ;i`SbZ7=38UvtL6gWI)04fNOj_Vl#WaxhJl+{=q;A=q>h{ygo z2H2d^1>&(s9@!HL0=(zQf+_@{o+*I7AOP9QhFXAFjekBl@>jmOXaQm^&~07oKoPN_ zSik@f+j?O@Jh2o8Y;0_7Y;0_7Y;0_7Y;0_7Y;0_7Y-|kU0su;xTlp*Cs}290Md0iNpi&k9PXTy9d-2{*420+!osu>j za3B=G$r-NZ0&PIv93Oy?0T3Ysd)*(BfK$aYJbxSH^npi*k$h;w)qqRB#7Z}o*%cDs zDF*-qzEc5>Fwul&vJaf<3C1I(f-;*(1ZV|8odA9#q!Ve;i8wh5qz^{qpDdwVMI(#` zzT>u9^?J#vz(z=?vKYn#0jvvPgwTl!)ZV>&j)xMcH(s#{*hFe_KrE)(m|k3*4V4O> zwSPxw&nFYGRVSlJfS(xI!E1;vE0Lt{T|2`YvlCmGfKz0;d7z9b69t154cs^junePWn zny^+50{?zaCpwiD4AlLgIk}rR3bdQm-%t?Go(_F#+Ew?17|8a4vj(A3fb!((#P8*P zuxu@)lCvLN2_SbKWB{=m7l6N|0Dsw0$X3Ajg9Y&Dp=kw?0_2QB2H1h*O#xt})rp(0 zA?(8)3BWB5j3b%<1!M(Y`(Y%vb$N=jq6y^io!1Lsi#_CYJqheDuYf)2{#=np^ z1)W5epC4}a={!<^e^><@$@9b&eUJwJ)@}mb4%p77&+^ie3dE^(@GK#J_#+ z{0X|9R5XFz4MQLRX22O50DoYx76^chf%r6Cz6_)n1@QHLNjD3u-8Te^#R3-ik^m4J zYSGn*#2*CF&%X|E#EySf7(lXsg22(DfPw%O*zuac3zUf#;Em4=fhUn65M)cx0^A^5 zf*z1lf*#-pPhJ?EU>taX*57btfUX}vlXE1ud*B%YUEdTqFgibQ`8-vW!WFEMvpl17 zB*!-eNC{>DDZvm}Gdt0A;#U|AhS7;%VJtq3{{eO~Ll;jebo>AS002ovPDHLkV1hs& Bz{>yt diff --git a/include/tileset_anims.h b/include/tileset_anims.h index 9e07bdcbeeec..901437729ae6 100755 --- a/include/tileset_anims.h +++ b/include/tileset_anims.h @@ -29,6 +29,7 @@ void InitTilesetAnim_Underwater(void); void InitTilesetAnim_SootopolisGym(void); void InitTilesetAnim_MauvilleGym(void); void InitTilesetAnim_EliteFour(void); +void InitTilesetAnim_MauvilleGameCorner(void); void InitTilesetAnim_BattleDome(void); void InitTilesetAnim_BattlePyramid(void); diff --git a/src/data/tilesets/headers.h b/src/data/tilesets/headers.h index 2eae1be1ea78..b60092d84171 100644 --- a/src/data/tilesets/headers.h +++ b/src/data/tilesets/headers.h @@ -534,7 +534,7 @@ const struct Tileset gTileset_MauvilleGameCorner = .palettes = gTilesetPalettes_MauvilleGameCorner, .metatiles = gMetatiles_MauvilleGameCorner, .metatileAttributes = gMetatileAttributes_MauvilleGameCorner, - .callback = NULL, + .callback = InitTilesetAnim_MauvilleGameCorner, }; const struct Tileset gTileset_RustboroGym = diff --git a/src/tileset_anims.c b/src/tileset_anims.c index 595ba08a6f51..67fe387180c6 100644 --- a/src/tileset_anims.c +++ b/src/tileset_anims.c @@ -33,6 +33,7 @@ static void TilesetAnim_Lavaridge(u16); static void TilesetAnim_EverGrande(u16); static void TilesetAnim_Pacifidlog(u16); static void TilesetAnim_Sootopolis(u16); +static void TilesetAnim_Mauville_Game_Corner(u16); static void TilesetAnim_BattleFrontierOutsideWest(u16); static void TilesetAnim_BattleFrontierOutsideEast(u16); static void TilesetAnim_Underwater(u16); @@ -73,6 +74,23 @@ static void QueueAnimTiles_MauvilleGym_ElectricGates(u16); static void QueueAnimTiles_SootopolisGym_Waterfalls(u16); static void QueueAnimTiles_EliteFour_GroundLights(u16); static void QueueAnimTiles_EliteFour_WallLights(u16); +static void QueueAnimTiles_Mauville_Game_Corner_Lights(u16); + +const u16 gTilesetAnims_MauvilleGameCorner_Lights_Frame0[] = INCBIN_U16("data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_0.4bpp"); +const u16 gTilesetAnims_MauvilleGameCorner_Lights_Frame1[] = INCBIN_U16("data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_1.4bpp"); +const u16 gTilesetAnims_MauvilleGameCorner_Lights_Frame2[] = INCBIN_U16("data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_2.4bpp"); +const u16 gTilesetAnims_MauvilleGameCorner_Lights_Frame3[] = INCBIN_U16("data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_3.4bpp"); +const u16 gTilesetAnims_MauvilleGameCorner_Lights_Frame4[] = INCBIN_U16("data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_4.4bpp"); +const u16 gTilesetAnims_MauvilleGameCorner_Lights_Frame5[] = INCBIN_U16("data/tilesets/secondary/mauville_game_corner/anim/lights/light_anim_5.4bpp"); + +const u16 *const gTilesetAnims_Mauville_Game_Corner_Lights[] = { + gTilesetAnims_MauvilleGameCorner_Lights_Frame0, + gTilesetAnims_MauvilleGameCorner_Lights_Frame1, + gTilesetAnims_MauvilleGameCorner_Lights_Frame2, + gTilesetAnims_MauvilleGameCorner_Lights_Frame3, + gTilesetAnims_MauvilleGameCorner_Lights_Frame4, + gTilesetAnims_MauvilleGameCorner_Lights_Frame5 +}; const u16 gTilesetAnims_General_Flower_Frame1[] = INCBIN_U16("data/tilesets/primary/general/anim/flower/1.4bpp"); const u16 gTilesetAnims_General_Flower_Frame0[] = INCBIN_U16("data/tilesets/primary/general/anim/flower/0.4bpp"); @@ -673,6 +691,12 @@ static void QueueAnimTiles_General_Waterfall(u16 timer) AppendTilesetAnimToBuffer(gTilesetAnims_General_Waterfall[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(496)), 6 * TILE_SIZE_4BPP); } +static void QueueAnimTiles_Mauville_Game_Corner_Lights(u16 timer) +{ + u16 i = timer % 6; + AppendTilesetAnimToBuffer(gTilesetAnims_Mauville_Game_Corner_Lights[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(521)), 0x40); +} + void InitTilesetAnim_Petalburg(void) { sSecondaryTilesetAnimCounter = 0; @@ -792,6 +816,13 @@ void InitTilesetAnim_SootopolisGym(void) sSecondaryTilesetAnimCallback = TilesetAnim_SootopolisGym; } +void InitTilesetAnim_MauvilleGameCorner(void) +{ + sSecondaryTilesetAnimCounter = 0; + sSecondaryTilesetAnimCounterMax = 128; + sSecondaryTilesetAnimCallback = TilesetAnim_Mauville_Game_Corner; +} + void InitTilesetAnim_Cave(void) { sSecondaryTilesetAnimCounter = 0; @@ -917,6 +948,12 @@ static void TilesetAnim_EverGrande(u16 timer) QueueAnimTiles_EverGrande_Flowers(timer / 8, 7); } +static void TilesetAnim_Mauville_Game_Corner(u16 timer) +{ + if (timer % 16 == 0) + QueueAnimTiles_Mauville_Game_Corner_Lights(timer / 16); +} + static void TilesetAnim_Pacifidlog(u16 timer) { if (timer % 16 == 0) From 00ed87a6fb2bad34e4e08123280825b79e1450fd Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 29 Apr 2025 21:29:19 -0400 Subject: [PATCH 005/429] Updated the README --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ed1ab827eb4d..7ad894b1fab4 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,17 @@ # Pokémon Emerald Game Corner Expansion -Hello! This is an an all-in-one package to expand the Mauville Game Corner, that, in its current state, isn't configurable. -It uses several unused Emerald flags, vars, and FR/LG tracks to make things work... Please keep this in mind if you would like to use this for your own hack. - -More specifically, this adds 4 pinball mini-games, Flappy Bird, Block Stacker, Snake, Blackjack, Voltorb Flip, Plinko, Mauville Derby, and Gacha Machines into the Game Corner. +Hello! This is a tweaked version of Chris Piche's Game Corner Expansion feature branch made by me, AGSMGMaster64. +Currently, this adds a new config file that uses some flags by default but can be configured to other flags if necessary. +Some new music and changes to the Mauville Corner have been made as well, so keep that in mind if you plan to merge this into your +existing project. Credits to AsparagusEduardo for the basis of this merge here, I just mainly tweaked things around to help +out any developers who may want to use this as well. Updated to pokeemerald-expansion v1.11.1 +Below is the rest of the original description from Chris Piche himself: + +More specifically, this adds 4 pinball mini-games, Flappy Bird, Block Stacker, Snake, Blackjack, Voltorb Flip, Plinko, Mauville Derby, and Gacha Machines into the Game Corner. + Big thank you to huderlem (Pokemon Pinball to Emerald), and Pokeabbie (Voltorb Flip from Emerald Rogue). All I really did for these was some graphics, music, and code to work with coins. They deserve the real credits here. Also thank you to Viperio, who made an initial Snake for Pokemon Emerald that I based my code on. From efa3085c61f8eee30908a7d55a72842350dc0f3f Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 29 Apr 2025 21:34:41 -0400 Subject: [PATCH 006/429] instructions for pulling branch --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 7ad894b1fab4..90c55ce8946d 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,13 @@ out any developers who may want to use this as well. Updated to pokeemerald-expansion v1.11.1 +To pull from this branch here, just simply use these commands here: +``` +git remote add AGSMG https://github.com/agsmgmaster64/worldlinkdeluxe-ame/ +git pull AGSMG gacha-expansion +``` + + Below is the rest of the original description from Chris Piche himself: More specifically, this adds 4 pinball mini-games, Flappy Bird, Block Stacker, Snake, Blackjack, Voltorb Flip, Plinko, Mauville Derby, and Gacha Machines into the Game Corner. From 6cdd4afde91652054d9e945466685af75ca87759 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Wed, 30 Apr 2025 18:56:51 -0400 Subject: [PATCH 007/429] Gacha Dex bug fix --- src/game_corner_gacha.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game_corner_gacha.c b/src/game_corner_gacha.c index db3f1d7992d3..e7a4a397897b 100644 --- a/src/game_corner_gacha.c +++ b/src/game_corner_gacha.c @@ -3307,8 +3307,8 @@ static void GachaMain(u8 taskId) { CreateMon(&gEnemyParty[0], sGacha->CalculatedSpecies, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); GiveMonToPlayer(&gEnemyParty[0]); - GetSetPokedexFlag(sGacha->CalculatedSpecies, FLAG_SET_SEEN); - HandleSetPokedexFlag(sGacha->CalculatedSpecies, FLAG_SET_CAUGHT, GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY)); + GetSetPokedexFlag(SpeciesToNationalPokedexNum(sGacha->CalculatedSpecies), FLAG_SET_SEEN); + HandleSetPokedexFlag(SpeciesToNationalPokedexNum(sGacha->CalculatedSpecies), FLAG_SET_CAUGHT, GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY)); LoadCompressedPalette(GetMonFrontSpritePal(&gEnemyParty[0]), OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); SetMultiuseSpriteTemplateToPokemon(sGacha->CalculatedSpecies, pos); sGacha->monSpriteId = CreateMonPicSprite_Affine(sGacha->CalculatedSpecies, GetMonData(&gEnemyParty[0], MON_DATA_IS_SHINY), GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY), MON_PIC_AFFINE_FRONT, 120, 60, 14, TAG_NONE); From 280700ab3debf7381827c58502c75175a18cfaad Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Sat, 3 May 2025 21:14:38 -0400 Subject: [PATCH 008/429] Derby Refactor --- src/derby.c | 5043 +++++++++++++++++---------------------------------- 1 file changed, 1655 insertions(+), 3388 deletions(-) diff --git a/src/derby.c b/src/derby.c index 62c2b6c95a61..70a77ec37701 100644 --- a/src/derby.c +++ b/src/derby.c @@ -49,19 +49,19 @@ enum { DERBY_STATE_INIT, - DERBY_STATE_PROCESS_INPUT, - DERBY_STATE_BET_2_START, - DERBY_STATE_BET_2, - DERBY_STATE_RACE_DELAY, - DERBY_STATE_START_FADE, - DERBY_STATE_FADEIN, - DERBY_STATE_DELAY_2, - DERBY_STATE_COUNTDOWN, - DERBY_STATE_RACE_START, - DERBY_STATE_RACE_MID, - DERBY_STATE_FINAL_DELAY, - DERBY_STATE_START_EXIT, - DERBY_STATE_EXIT, + DERBY_STATE_PROCESS_INPUT, + DERBY_STATE_BET_2_START, + DERBY_STATE_BET_2, + DERBY_STATE_RACE_DELAY, + DERBY_STATE_START_FADE, + DERBY_STATE_FADEIN, + DERBY_STATE_DELAY_2, + DERBY_STATE_COUNTDOWN, + DERBY_STATE_RACE_START, + DERBY_STATE_RACE_MID, + DERBY_STATE_FINAL_DELAY, + DERBY_STATE_START_EXIT, + DERBY_STATE_EXIT, }; enum { @@ -74,17 +74,60 @@ enum { enum { SPR_BET_DIG_1, SPR_BET_DIG_10, - SPR_BET_DIG_100, - SPR_BET_DIG_1000, + SPR_BET_DIG_100, + SPR_BET_DIG_1000, }; enum { SPR_POT_DIG_1, SPR_POT_DIG_10, - SPR_POT_DIG_100, - SPR_POT_DIG_1000, + SPR_POT_DIG_100, + SPR_POT_DIG_1000, }; +enum { + DERBY_RACER_1, + DERBY_RACER_2, + DERBY_RACER_3, + DERBY_RACER_4, + DERBY_RACER_5, + DERBY_RACER_6, + DERBY_RACER_COUNT, +}; + +enum { + CONDITION_1_STAR, + CONDITION_2_STAR, + CONDITION_3_STAR, + CONDITION_4_STAR, + CONDITION_5_STAR, +}; + +enum { + DERBY_SPECIES_PONYTA_1, + DERBY_SPECIES_PONYTA_2, + DERBY_SPECIES_PONYTA_3, + DERBY_SPECIES_PONYTA_4, + DERBY_SPECIES_PONYTA_5, + DERBY_SPECIES_RATTATA, + DERBY_SPECIES_RAPIDASH, + DERBY_SPECIES_FEEBAS, + DERBY_SPECIES_COUNT, +}; + +enum { + BET_MULTIPLIER_NONE, + BET_MULTIPLIER_1_1, + BET_MULTIPLIER_1_2, + BET_MULTIPLIER_1_3, + BET_MULTIPLIER_1_5, + BET_MULTIPLIER_2_0, + BET_MULTIPLIER_3_0, + BET_MULTIPLIER_JACKPOT, +}; + +#define DERBY_SPECIES_PONYTA_COUNT DERBY_SPECIES_RATTATA + #define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 #define SPR_BET_DIGITS SPR_BET_DIG_1 #define SPR_POTENTIAL_DIGITS SPR_POT_DIG_1 @@ -94,92 +137,56 @@ enum { #define MAX_SPRITES_POTENTIAL 4 struct Derby { - u8 state; - u8 Species_1; - u8 Shiny_1; - u8 Condition_1; - u8 Species_2; - u8 Shiny_2; - u8 Condition_2; - u8 Species_3; - u8 Shiny_3; - u8 Condition_3; - u8 Species_4; - u8 Shiny_4; - u8 Condition_4; - u8 Species_5; - u8 Shiny_5; - u8 Condition_5; - u8 Species_6; - u8 Shiny_6; - u8 Condition_6; - u8 SpeciesSpriteId_1; - u8 SpeciesSpriteId_2; - u8 SpeciesSpriteId_3; - u8 SpeciesSpriteId_4; - u8 SpeciesSpriteId_5; - u8 SpeciesSpriteId_6; - u8 MenuPosition; // 0-5 - u8 exitToggle; - u8 SpeciesNameSpriteId; - u8 ConditionSpriteId; - u8 PayoutSpriteId; - float Racer1sSpeed; - float Racer2sSpeed; - float Racer3sSpeed; - float Racer4sSpeed; - float Racer5sSpeed; - float Racer6sSpeed; - float Racer1rSpeed; - float Racer2rSpeed; - float Racer3rSpeed; - float Racer4rSpeed; - float Racer5rSpeed; - float Racer6rSpeed; - u8 Racer1SpeedPay; - u8 Racer2SpeedPay; - u8 Racer3SpeedPay; - u8 Racer4SpeedPay; - u8 Racer5SpeedPay; - u8 Racer6SpeedPay; - u8 uiSpriteId; - u8 Arrow1SpriteId; - u8 Arrow2SpriteId; - u8 CreditIconSpriteId; - u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; - u8 BetSpriteIds[MAX_SPRITES_BET]; - u8 PotentialSpriteIds[MAX_SPRITES_POTENTIAL]; - u8 Menu; - u8 RacerSelected; - u8 Swap1; - u8 P10SpriteId; - u32 Bet; - u32 PotentialWin; - u32 delay; - u8 RacerSprite1; - u8 RacerSprite2; - u8 RacerSprite3; - u8 RacerSprite4; - u8 RacerSprite5; - u8 RacerSprite6; - u8 CursorSpriteId; - u8 Timer; - u8 Swap2; - s16 CountdownX; - s16 CountdownY; - u8 CountdownSpriteId; - u32 frames; - u8 place1; - u8 place2; - u8 place3; - u8 place4; - u8 place5; - u8 place6; - u8 ClefSpriteId; -}; + u8 state; + u8 racerSpecies[DERBY_RACER_COUNT]; + u8 racerShiny[DERBY_RACER_COUNT]; + u8 racerCondition[DERBY_RACER_COUNT]; + u8 racerSpeciesSpriteId[DERBY_RACER_COUNT]; + u8 racerSpeedPay[DERBY_RACER_COUNT]; + float racerSpeedStart[DERBY_RACER_COUNT]; + float racerSpeedRace[DERBY_RACER_COUNT]; + u8 MenuPosition; // 0-5 + u8 exitToggle; + u8 SpeciesNameSpriteId; + u8 ConditionSpriteId; + u8 PayoutSpriteId; + u8 uiSpriteId; + u8 Arrow1SpriteId; + u8 Arrow2SpriteId; + u8 CreditIconSpriteId; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 BetSpriteIds[MAX_SPRITES_BET]; + u8 PotentialSpriteIds[MAX_SPRITES_POTENTIAL]; + u8 Menu; + u8 RacerSelected; + u8 Swap1; + u8 P10SpriteId; + u32 Bet; + u32 PotentialWin; + u32 delay; + u8 RacerSprite1; + u8 RacerSprite2; + u8 RacerSprite3; + u8 RacerSprite4; + u8 RacerSprite5; + u8 RacerSprite6; + u8 CursorSpriteId; + u8 Timer; + u8 Swap2; + s16 CountdownX; + s16 CountdownY; + u8 CountdownSpriteId; + u32 frames; + u8 place1; + u8 place2; + u8 place3; + u8 place4; + u8 place5; + u8 place6; + u8 ClefSpriteId; +}; static EWRAM_DATA struct Derby *sDerby = NULL; -static EWRAM_DATA u8 sTextWindowId = 0; static void FadeToDerbyScreen(u8 taskId); static void InitDerbyScreen(void); @@ -336,15 +343,15 @@ static const struct BgTemplate sDerbyBGtemplates[] = { }; static const struct WindowTemplate sDerbyWinTemplates[] = { - { + { .bg = DERBY_MENUS, .tilemapLeft = 6, .tilemapTop = 5, .width = 9, .height = 2, .paletteNum = 0xF, - .baseBlock = 0x194, - }, + .baseBlock = 0x194, + }, DUMMY_WIN_TEMPLATE, }; @@ -417,27 +424,27 @@ static const struct WindowTemplate sDerbyWinTemplates[] = { static const struct SpritePalette sSpritePalettes[] = { { .data = Derby_BG_Bet_Pal, .tag = PAL_BG_BETTING }, - { .data = PonytaNormalPAL, .tag = PAL_PONYTA }, - { .data = PonytaShinyPAL, .tag = PAL_PONYTA_SHINY }, - { .data = RapidashNormalPAL, .tag = PAL_RAPIDASH }, - { .data = RapidashShinyPAL, .tag = PAL_RAPIDASH_SHINY }, - { .data = RattataNormalPAL, .tag = PAL_RATTATA }, - { .data = RattataShinyPAL, .tag = PAL_RATTATA_SHINY }, - { .data = FeebasNormalPAL, .tag = PAL_FEEBAS }, - { .data = FeebasShinyPAL, .tag = PAL_FEEBAS_SHINY }, - { .data = TextPAL, .tag = PAL_BET_MENU_TEXT }, - { .data = ConditionPAL, .tag = PAL_CONDITION }, - { .data = BetMenuUIPAL, .tag = PAL_UI }, - { .data = Credit_Icon_PAL, .tag = PAL_CREDIT_ICON }, - { .data = Digits_Pal, .tag = PAL_DIGITS }, - { .data = Cursor_PAL, .tag = PAL_CURSOR }, - { .data = Countdown_PAL, .tag = PAL_COUNTDOWN }, + { .data = PonytaNormalPAL, .tag = PAL_PONYTA }, + { .data = PonytaShinyPAL, .tag = PAL_PONYTA_SHINY }, + { .data = RapidashNormalPAL, .tag = PAL_RAPIDASH }, + { .data = RapidashShinyPAL, .tag = PAL_RAPIDASH_SHINY }, + { .data = RattataNormalPAL, .tag = PAL_RATTATA }, + { .data = RattataShinyPAL, .tag = PAL_RATTATA_SHINY }, + { .data = FeebasNormalPAL, .tag = PAL_FEEBAS }, + { .data = FeebasShinyPAL, .tag = PAL_FEEBAS_SHINY }, + { .data = TextPAL, .tag = PAL_BET_MENU_TEXT }, + { .data = ConditionPAL, .tag = PAL_CONDITION }, + { .data = BetMenuUIPAL, .tag = PAL_UI }, + { .data = Credit_Icon_PAL, .tag = PAL_CREDIT_ICON }, + { .data = Digits_Pal, .tag = PAL_DIGITS }, + { .data = Cursor_PAL, .tag = PAL_CURSOR }, + { .data = Countdown_PAL, .tag = PAL_COUNTDOWN }, {} }; static const struct SpritePalette sSpritePalettes2[] = { - { .data = Clef_PAL, .tag = PAL_CLEFAIRY }, + { .data = Clef_PAL, .tag = PAL_CLEFAIRY }, {} }; @@ -454,7 +461,7 @@ static const struct OamData sOamData_Clefairy = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -462,8 +469,8 @@ static const union AnimCmd sClefAnimCmd_0[] = { ANIMCMD_FRAME(0, 20), ANIMCMD_FRAME(32, 20), - ANIMCMD_FRAME(64, 20), - ANIMCMD_FRAME(96, 20), + ANIMCMD_FRAME(64, 20), + ANIMCMD_FRAME(96, 20), ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) }; @@ -495,7 +502,7 @@ static const struct OamData sOamData_Countdown = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -577,7 +584,7 @@ static const struct OamData sOamData_Horse_OW = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -591,13 +598,13 @@ static const union AnimCmd sHorseAnimCmd_1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(16, 5), - ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(32, 5), ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) }; static const union AnimCmd *const sHorseAnimCmds[] = { sHorseAnimCmd_0, - sHorseAnimCmd_1, + sHorseAnimCmd_1, }; static const struct SpriteTemplate sSpriteTemplate_Ponyta_OW_Normal = @@ -664,7 +671,7 @@ static const struct OamData sOamData_RatFish_OW = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -683,7 +690,7 @@ static const union AnimCmd sRattataAnimCmd_1[] = static const union AnimCmd *const sRattataAnimCmds[] = { sRattataAnimCmd_0, - sRattataAnimCmd_1, + sRattataAnimCmd_1, }; static const struct SpriteTemplate sSpriteTemplate_Rattata_OW_Normal = @@ -833,7 +840,7 @@ static const struct OamData sOamData_P10 = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -879,7 +886,7 @@ static const struct OamData sOamData_Credit_Icon = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -918,7 +925,7 @@ static const struct OamData sOamData_Menu_Data = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -937,7 +944,7 @@ static const struct CompressedSpriteSheet sSpriteSheet_Name_Rapidash = { .data = Name_RapidashGFX, .size = 0x400, - .tag = GFX_NAME_RATTATA, + .tag = GFX_NAME_RAPIDASH, }; static const struct SpriteTemplate sSpriteTemplate_Name_Rapidash = @@ -1234,7 +1241,7 @@ static const struct OamData sOamData_Arrows = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1399,7 +1406,7 @@ static const struct OamData sOamData_Pokemon = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1514,31 +1521,31 @@ static const struct SpriteTemplate sSpriteTemplate_FeebasShiny = void StartDerby(void) { - u8 taskId = 0; sDerby = AllocZeroed(sizeof(struct Derby)); - taskId = CreateTask(FadeToDerbyScreen, 0); + CreateTask(FadeToDerbyScreen, 0); } typedef struct { int SpeciesId; // 0-4 Ponyta, 5 Rattata, 6 Rapidash, 7 Feebas u8 StartSpeed; - u8 RaceSpeed; + u8 RaceSpeed; } RaceSpeeds; -static const RaceSpeeds RaceSpeedsValues[] = { - {0, 4, 5}, // Ponyta 1 - {1, 3, 5}, // Ponyta 2 - {2, 5, 4}, // Ponyta 3 - {3, 5, 5}, // Ponyta 4 - {4, 3, 6}, // Ponyta 5 - {5, 5, 4}, // Rattata - {6, 4, 7}, // Rapidash - {7, 0, 0}, // Feebas +static const RaceSpeeds RaceSpeedsValues[] = +{ + {DERBY_SPECIES_PONYTA_1, 4, 5}, // Ponyta 1 + {DERBY_SPECIES_PONYTA_2, 3, 5}, // Ponyta 2 + {DERBY_SPECIES_PONYTA_3, 5, 4}, // Ponyta 3 + {DERBY_SPECIES_PONYTA_4, 5, 5}, // Ponyta 4 + {DERBY_SPECIES_PONYTA_5, 3, 6}, // Ponyta 5 + {DERBY_SPECIES_RATTATA, 5, 4}, // Rattata + {DERBY_SPECIES_RAPIDASH, 4, 7}, // Rapidash + {DERBY_SPECIES_FEEBAS, 0, 0}, // Feebas }; typedef struct { int ID; - u8 NameString[16]; + u8 NameString[16]; } RattataNames; static const RattataNames RattataNamesValues[] = { @@ -1548,58 +1555,58 @@ static const RattataNames RattataNamesValues[] = { {3, _("DASH")}, {4, _("SCURRIER")}, {5, _("CHASE")}, - {6, _("BRIAN")}, + {6, _("BRIAN")}, {7, _("TAILSPIN")}, - {8, _("WHISKERS")}, - {9, _("RUSH")}, - {10, _("ZOOMER")}, - {11, _("ZOOMIE")}, - {12, _("JOEY'S RATTATA")}, - {13, _("RATNADO")}, - {14, _("RATICATOR")}, - {15, _("RATTY")}, - {16, _("NYOINK")}, - {17, _("RATSUPREME")}, - {18, _("REMY")}, - {19, _("RATRON")}, - {20, _("EL RATTO")}, - {21, _("TURBO")}, - {22, _("RATTHEW")}, - {23, _("RATTEUS")}, - {24, _("RATTINA")}, - {25, _("RATABELLA")}, - {26, _("RATTONIO")}, - {27, _("RATFORD")}, - {28, _("WISCONSIN")}, - {29, _("STEVE")}, - {30, _("RATALIE")}, - {31, _("RATALIA")}, - {32, _("RATALINA")}, - {33, _("RATIGAIL")}, - {34, _("RATASHA")}, - {35, _("MR. DIRTY")}, - {36, _("RATILDA")}, - {37, _("RATRICIA")}, - {38, _("RATRICK")}, - {39, _("RATISON")}, - {40, _("RATATHAN")}, - {41, _("RATOPHER")}, - {42, _("RATSON")}, - {43, _("CHEESER")}, - {44, _("SQUIRBY")}, - {45, _("BUCKY")}, - {46, _("CHOMPY")}, - {47, _("SCABBY")}, - {48, _("HAMELIN")}, - {49, _("CHUBBS")}, - {50, _("CHEDDAR")}, - {51, _("PIP")}, - {52, _("SQUEAKER")}, + {8, _("WHISKERS")}, + {9, _("RUSH")}, + {10, _("ZOOMER")}, + {11, _("ZOOMIE")}, + {12, _("JOEY'S RATTATA")}, + {13, _("RATNADO")}, + {14, _("RATICATOR")}, + {15, _("RATTY")}, + {16, _("NYOINK")}, + {17, _("RATSUPREME")}, + {18, _("REMY")}, + {19, _("RATRON")}, + {20, _("EL RATTO")}, + {21, _("TURBO")}, + {22, _("RATTHEW")}, + {23, _("RATTEUS")}, + {24, _("RATTINA")}, + {25, _("RATABELLA")}, + {26, _("RATTONIO")}, + {27, _("RATFORD")}, + {28, _("WISCONSIN")}, + {29, _("STEVE")}, + {30, _("RATALIE")}, + {31, _("RATALIA")}, + {32, _("RATALINA")}, + {33, _("RATIGAIL")}, + {34, _("RATASHA")}, + {35, _("MR. DIRTY")}, + {36, _("RATILDA")}, + {37, _("RATRICIA")}, + {38, _("RATRICK")}, + {39, _("RATISON")}, + {40, _("RATATHAN")}, + {41, _("RATOPHER")}, + {42, _("RATSON")}, + {43, _("CHEESER")}, + {44, _("SQUIRBY")}, + {45, _("BUCKY")}, + {46, _("CHOMPY")}, + {47, _("SCABBY")}, + {48, _("HAMELIN")}, + {49, _("CHUBBS")}, + {50, _("CHEDDAR")}, + {51, _("PIP")}, + {52, _("SQUEAKER")}, }; typedef struct { int ID; - u8 NameString[16]; + u8 NameString[16]; } PonytaNames; static const PonytaNames PonytaNamesValues[] = { @@ -1609,58 +1616,58 @@ static const PonytaNames PonytaNamesValues[] = { {3, _("TROT")}, {4, _("BURNOUT")}, {5, _("STRIDER")}, - {6, _("RUBY")}, + {6, _("RUBY")}, {7, _("STUD MUFFIN")}, - {8, _("FIERYDASH")}, - {9, _("MOON ROCKS")}, - {10, _("WILDFIRE")}, - {11, _("FIRESPIN")}, - {12, _("CHAMP")}, - {13, _("POMPOM")}, - {14, _("PIPPIN")}, - {15, _("DANDELION")}, - {16, _("CINNAMON")}, - {17, _("STARDUST")}, - {18, _("HOT STREAK")}, - {19, _("COLT")}, - {20, _("HOPE")}, - {21, _("LUCKY")}, - {22, _("JACKPOT")}, - {23, _("BIGBUCKS")}, - {24, _("CHACHING")}, - {25, _("PONY SOPRANO")}, - {26, _("HOTBET")}, - {27, _("TAPONE")}, - {28, _("LIL SPEEDY")}, - {29, _("LEONIE")}, - {30, _("RISKITALL")}, - {31, _("FASTFIRE")}, - {32, _("LUCKYDASH")}, - {33, _("HOT GLUE")}, - {34, _("FLICKER")}, - {35, _("BREADWINNER")}, - {36, _("LUCKY CHARM")}, - {37, _("GOLDEN RUN")}, - {38, _("SCARLET")}, - {39, _("DYNAMITE")}, - {40, _("SUNSET")}, - {41, _("ON THE DOT")}, - {42, _("FASTFORTUNE")}, - {43, _("STEADYSTRIDE")}, - {44, _("MARSCAPONE")}, - {45, _("HONSE")}, - {46, _("HERO")}, - {47, _("GOLDEN HOPE")}, - {48, _("RAPIDASH")}, - {49, _("FLASHFIRE")}, - {50, _("CROWN JEWEL")}, - {51, _("WHINNEY")}, - {52, _("MAJESTY")}, + {8, _("FIERYDASH")}, + {9, _("MOON ROCKS")}, + {10, _("WILDFIRE")}, + {11, _("FIRESPIN")}, + {12, _("CHAMP")}, + {13, _("POMPOM")}, + {14, _("PIPPIN")}, + {15, _("DANDELION")}, + {16, _("CINNAMON")}, + {17, _("STARDUST")}, + {18, _("HOT STREAK")}, + {19, _("COLT")}, + {20, _("HOPE")}, + {21, _("LUCKY")}, + {22, _("JACKPOT")}, + {23, _("BIGBUCKS")}, + {24, _("CHACHING")}, + {25, _("PONY SOPRANO")}, + {26, _("HOTBET")}, + {27, _("TAPONE")}, + {28, _("LIL SPEEDY")}, + {29, _("LEONIE")}, + {30, _("RISKITALL")}, + {31, _("FASTFIRE")}, + {32, _("LUCKYDASH")}, + {33, _("HOT GLUE")}, + {34, _("FLICKER")}, + {35, _("BREADWINNER")}, + {36, _("LUCKY CHARM")}, + {37, _("GOLDEN RUN")}, + {38, _("SCARLET")}, + {39, _("DYNAMITE")}, + {40, _("SUNSET")}, + {41, _("ON THE DOT")}, + {42, _("FASTFORTUNE")}, + {43, _("STEADYSTRIDE")}, + {44, _("MARSCAPONE")}, + {45, _("HONSE")}, + {46, _("HERO")}, + {47, _("GOLDEN HOPE")}, + {48, _("RAPIDASH")}, + {49, _("FLASHFIRE")}, + {50, _("CROWN JEWEL")}, + {51, _("WHINNEY")}, + {52, _("MAJESTY")}, }; typedef struct { int ID; - u8 NameString[16]; + u8 NameString[16]; } RapidashNames; static const RapidashNames RapidashNamesValues[] = { @@ -1670,58 +1677,58 @@ static const RapidashNames RapidashNamesValues[] = { {3, _("ON-A-ROLLA")}, {4, _("TRILLIONAIRE")}, {5, _("HOT PURSUIT")}, - {6, _("BURNING GLORY")}, + {6, _("BURNING GLORY")}, {7, _("APOLLO")}, - {8, _("BIG HONSE")}, - {9, _("GREASE FIRE")}, - {10, _("WILD BLAZE")}, - {11, _("RED FORTUNE")}, - {12, _("CRIMSON")}, - {13, _("VICTORY")}, - {14, _("PONYTA")}, - {15, _("FIREBALL")}, - {16, _("BLAST BURN")}, - {17, _("FLAMEY")}, - {18, _("SPARKLE")}, - {19, _("DAPIRASH")}, - {20, _("BURNTOUT")}, - {21, _("MISFIRE")}, - {22, _("HUFFN'PUFF")}, - {23, _("HEATCRASH")}, - {24, _("FITYFIFTY")}, - {25, _("COMET")}, - {26, _("SUNSHINE")}, - {27, _("GOLDENGALLOP")}, - {28, _("GOLDMINE")}, - {29, _("PEGASUS")}, - {30, _("X SPEED")}, - {31, _("WISH")}, - {32, _("BIG JAMES")}, - {33, _("VELVET CROWN")}, - {34, _("LUCKY STRIKE")}, - {35, _("RED BULLET")}, - {36, _("BLAZING STAR")}, - {37, _("HOOF")}, - {38, _("BURNING SKY")}, - {39, _("IRON WILL")}, - {40, _("EMBER DAWN")}, - {41, _("NOBLE VICTORY")}, - {42, _("GOLDRUSH")}, - {43, _("BEEF")}, - {44, _("BOJACK")}, - {45, _("SCARLET WIND")}, - {46, _("BOSS")}, - {47, _("BUTTER")}, - {48, _("PORKCHOP")}, - {49, _("HOT PANTS")}, - {50, _("POT ROAST")}, - {51, _("PAPRIKA")}, - {52, _("EPONA")}, + {8, _("BIG HONSE")}, + {9, _("GREASE FIRE")}, + {10, _("WILD BLAZE")}, + {11, _("RED FORTUNE")}, + {12, _("CRIMSON")}, + {13, _("VICTORY")}, + {14, _("PONYTA")}, + {15, _("FIREBALL")}, + {16, _("BLAST BURN")}, + {17, _("FLAMEY")}, + {18, _("SPARKLE")}, + {19, _("DAPIRASH")}, + {20, _("BURNTOUT")}, + {21, _("MISFIRE")}, + {22, _("HUFFN'PUFF")}, + {23, _("HEATCRASH")}, + {24, _("FITYFIFTY")}, + {25, _("COMET")}, + {26, _("SUNSHINE")}, + {27, _("GOLDENGALLOP")}, + {28, _("GOLDMINE")}, + {29, _("PEGASUS")}, + {30, _("X SPEED")}, + {31, _("WISH")}, + {32, _("BIG JAMES")}, + {33, _("VELVET CROWN")}, + {34, _("LUCKY STRIKE")}, + {35, _("RED BULLET")}, + {36, _("BLAZING STAR")}, + {37, _("HOOF")}, + {38, _("BURNING SKY")}, + {39, _("IRON WILL")}, + {40, _("EMBER DAWN")}, + {41, _("NOBLE VICTORY")}, + {42, _("GOLDRUSH")}, + {43, _("BEEF")}, + {44, _("BOJACK")}, + {45, _("SCARLET WIND")}, + {46, _("BOSS")}, + {47, _("BUTTER")}, + {48, _("PORKCHOP")}, + {49, _("HOT PANTS")}, + {50, _("POT ROAST")}, + {51, _("PAPRIKA")}, + {52, _("EPONA")}, }; typedef struct { int ID; - u8 NameString[16]; + u8 NameString[16]; } FeebasNames; static const FeebasNames FeebasNamesValues[] = { @@ -1731,1227 +1738,313 @@ static const FeebasNames FeebasNamesValues[] = { {3, _("BASSINGA")}, {4, _("BEEFAS")}, {5, _("SKIPPER")}, - {6, _("BONES")}, + {6, _("BONES")}, {7, _("KELPSTER")}, - {8, _("LOOPDELOOP")}, - {9, _("FINN")}, - {10, _("TROUT TROUBLE")}, - {11, _("THROTTLE")}, - {12, _("STINKY")}, - {13, _("MANOWAR")}, - {14, _("NEPTUNE")}, - {15, _("MIRAKLE B.")}, - {16, _("FISH")}, - {17, _("FREDDI FISH")}, - {18, _("SWIMMY MCFLOP")}, - {19, _("SOGGY")}, - {20, _("WIGGLY")}, - {21, _("GUPPY")}, - {22, _("WATERLOG")}, - {23, _("FLOUNDER")}, - {24, _("THE DRIP")}, - {25, _("WIGGLES")}, - {26, _("BOOGERFISH")}, - {27, _("THE BLOB")}, - {28, _("DRIPDROP")}, - {29, _("FEEBUS")}, - {30, _("BIG HOSS")}, - {31, _("SPLISHY")}, - {32, _("BLOOP")}, - {33, _("FLOPSTER")}, - {34, _("WET TOWEL")}, - {35, _("DISASTER")}, - {36, _("MR. FIASCO")}, - {37, _("SPLOOSH")}, - {38, _("SKIDOOSH")}, - {39, _("BELLYFLOP BOB")}, - {40, _("GURGLES")}, - {41, _("WIBBLE")}, - {42, _("NOTSOFAST")}, - {43, _("BLOOPMCSPLASH")}, - {44, _("WET SHAME")}, - {45, _("NOODLE")}, - {46, _("MEATLOAF")}, - {47, _("THEBIGSPLASH")}, - {48, _("CANNONBALL")}, - {49, _("GLUBGLUB")}, - {50, _("FLOPSTAR")}, - {51, _("PUDDLEHOPPER")}, - {52, _("DR. FUME")}, + {8, _("LOOPDELOOP")}, + {9, _("FINN")}, + {10, _("TROUT TROUBLE")}, + {11, _("THROTTLE")}, + {12, _("STINKY")}, + {13, _("MANOWAR")}, + {14, _("NEPTUNE")}, + {15, _("MIRAKLE B.")}, + {16, _("FISH")}, + {17, _("FREDDI FISH")}, + {18, _("SWIMMY MCFLOP")}, + {19, _("SOGGY")}, + {20, _("WIGGLY")}, + {21, _("GUPPY")}, + {22, _("WATERLOG")}, + {23, _("FLOUNDER")}, + {24, _("THE DRIP")}, + {25, _("WIGGLES")}, + {26, _("BOOGERFISH")}, + {27, _("THE BLOB")}, + {28, _("DRIPDROP")}, + {29, _("FEEBUS")}, + {30, _("BIG HOSS")}, + {31, _("SPLISHY")}, + {32, _("BLOOP")}, + {33, _("FLOPSTER")}, + {34, _("WET TOWEL")}, + {35, _("DISASTER")}, + {36, _("MR. FIASCO")}, + {37, _("SPLOOSH")}, + {38, _("SKIDOOSH")}, + {39, _("BELLYFLOP BOB")}, + {40, _("GURGLES")}, + {41, _("WIBBLE")}, + {42, _("NOTSOFAST")}, + {43, _("BLOOPMCSPLASH")}, + {44, _("WET SHAME")}, + {45, _("NOODLE")}, + {46, _("MEATLOAF")}, + {47, _("THEBIGSPLASH")}, + {48, _("CANNONBALL")}, + {49, _("GLUBGLUB")}, + {50, _("FLOPSTAR")}, + {51, _("PUDDLEHOPPER")}, + {52, _("DR. FUME")}, }; #define MAX_NAMES 53 -static void GetRacerSpeeds(u8 num, u8 racer) -{ - u8 sSpeed; - u8 rSpeed; - u8 condition; - int i; - - for (i = 0; i < 8; i++) { - if (RaceSpeedsValues[i].SpeciesId == num) { - sSpeed = RaceSpeedsValues[i].StartSpeed; - rSpeed = RaceSpeedsValues[i].RaceSpeed; - } - } - - if (racer == 0) - { - sDerby->Racer1sSpeed = sSpeed * (1 + (sDerby->Condition_1 / 10.0f)); - sDerby->Racer1rSpeed = rSpeed * (1 + (sDerby->Condition_1 / 10.0f)); - condition = sDerby->Condition_1 + 1; - if (sDerby->Species_1 != 7) // If it's not Feebas - { - if ((num == 6) && (condition >= 4)) // Highest - { - sDerby->Racer1SpeedPay = 1; // x1.1 - } - else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) - { - sDerby->Racer1SpeedPay = 2; // x1.2 - } - else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) - { - sDerby->Racer1SpeedPay = 3; // x1.3 - } - else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) - { - sDerby->Racer1SpeedPay = 4; // x1.5 - } - else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) - { - sDerby->Racer1SpeedPay = 5; // x2.0 - } - else if ((num == 5) && (condition == 1)) // Lowest - { - sDerby->Racer1SpeedPay = 6; // x5.0 - } - } - else // Feebas (never wins) - { - sDerby->Racer1SpeedPay = 7; // Jackpot - } - } - else if (racer == 1) - { - sDerby->Racer2sSpeed = sSpeed * (1 + (sDerby->Condition_2 / 10.0f)); - sDerby->Racer2rSpeed = rSpeed * (1 + (sDerby->Condition_2 / 10.0f)); - condition = sDerby->Condition_2 + 1; - if (sDerby->Species_2 != 7) // If it's not Feebas - { - if ((num == 6) && (condition >= 4)) // Highest - { - sDerby->Racer2SpeedPay = 1; // x1.1 - } - else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) - { - sDerby->Racer2SpeedPay = 2; // x1.2 - } - else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) - { - sDerby->Racer2SpeedPay = 3; // x1.3 - } - else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) - { - sDerby->Racer2SpeedPay = 4; // x1.5 - } - else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) - { - sDerby->Racer2SpeedPay = 5; // x2.0 - } - else if ((num == 5) && (condition == 1)) // Lowest - { - sDerby->Racer2SpeedPay = 6; // x5.0 - } - } - else // Feebas (never wins) - { - sDerby->Racer2SpeedPay = 7; // Jackpot - } - } - else if (racer == 2) - { - sDerby->Racer3sSpeed = sSpeed * (1 + (sDerby->Condition_3 / 10.0f)); - sDerby->Racer3rSpeed = rSpeed * (1 + (sDerby->Condition_3 / 10.0f)); - condition = sDerby->Condition_3 + 1; - if (sDerby->Species_3 != 7) // If it's not Feebas - { - if ((num == 6) && (condition >= 4)) // Highest - { - sDerby->Racer3SpeedPay = 1; // x1.1 - } - else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) - { - sDerby->Racer3SpeedPay = 2; // x1.2 - } - else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) - { - sDerby->Racer3SpeedPay = 3; // x1.3 - } - else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) - { - sDerby->Racer3SpeedPay = 4; // x1.5 - } - else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) - { - sDerby->Racer3SpeedPay = 5; // x2.0 - } - else if ((num == 5) && (condition == 1)) // Lowest - { - sDerby->Racer3SpeedPay = 6; // x5.0 - } - } - else // Feebas (never wins) - { - sDerby->Racer3SpeedPay = 7; // Jackpot - } - } - else if (racer == 3) - { - sDerby->Racer4sSpeed = sSpeed * (1 + (sDerby->Condition_4 / 10.0f)); - sDerby->Racer4rSpeed = rSpeed * (1 + (sDerby->Condition_4 / 10.0f)); - condition = sDerby->Condition_4 + 1; - if (sDerby->Species_4 != 7) // If it's not Feebas - { - if ((num == 6) && (condition >= 4)) // Highest - { - sDerby->Racer4SpeedPay = 1; // x1.1 - } - else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) - { - sDerby->Racer4SpeedPay = 2; // x1.2 - } - else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) - { - sDerby->Racer4SpeedPay = 3; // x1.3 - } - else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) - { - sDerby->Racer4SpeedPay = 4; // x1.5 - } - else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) - { - sDerby->Racer4SpeedPay = 5; // x2.0 - } - else if ((num == 5) && (condition == 1)) // Lowest - { - sDerby->Racer4SpeedPay = 6; // x5.0 - } - } - else // Feebas (never wins) - { - sDerby->Racer4SpeedPay = 7; // Jackpot - } - } - else if (racer == 4) - { - sDerby->Racer5sSpeed = sSpeed * (1 + (sDerby->Condition_5 / 10.0f)); - sDerby->Racer5rSpeed = rSpeed * (1 + (sDerby->Condition_5 / 10.0f)); - condition = sDerby->Condition_5 + 1; - if (sDerby->Species_5 != 7) // If it's not Feebas - { - if ((num == 6) && (condition >= 4)) // Highest - { - sDerby->Racer5SpeedPay = 1; // x1.1 - } - else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) - { - sDerby->Racer5SpeedPay = 2; // x1.2 - } - else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) - { - sDerby->Racer5SpeedPay = 3; // x1.3 - } - else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) - { - sDerby->Racer5SpeedPay = 4; // x1.5 - } - else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) - { - sDerby->Racer5SpeedPay = 5; // x2.0 - } - else if ((num == 5) && (condition == 1)) // Lowest - { - sDerby->Racer5SpeedPay = 6; // x5.0 - } - } - else // Feebas (never wins) - { - sDerby->Racer5SpeedPay = 7; // Jackpot - } - } - else if (racer == 5) - { - sDerby->Racer6sSpeed = sSpeed * (1 + (sDerby->Condition_6 / 10.0f)); - sDerby->Racer6rSpeed = rSpeed * (1 + (sDerby->Condition_6 / 10.0f)); - condition = sDerby->Condition_6 + 1; - if (sDerby->Species_6 != 7) // If it's not Feebas - { - if ((num == 6) && (condition >= 4)) // Highest - { - sDerby->Racer6SpeedPay = 1; // x1.1 - } - else if (((num < 5) && (condition == 5)) || ((num == 6) && (condition < 4))) - { - sDerby->Racer6SpeedPay = 2; // x1.2 - } - else if (((num < 5) && (condition == 4)) || ((num == 5) && (condition == 5))) - { - sDerby->Racer6SpeedPay = 3; // x1.3 - } - else if (((num < 5) && (condition < 4) && (condition > 1)) || ((num == 5) && (condition < 5) && (condition > 2))) - { - sDerby->Racer6SpeedPay = 4; // x1.5 - } - else if (((num < 5) && (condition == 1)) || ((num == 5) && (condition == 2))) - { - sDerby->Racer6SpeedPay = 5; // x2.0 - } - else if ((num == 5) && (condition == 1)) // Lowest - { - sDerby->Racer6SpeedPay = 6; // x5.0 - } - } - else // Feebas (never wins) - { - sDerby->Racer6SpeedPay = 7; // Jackpot - } - } +typedef struct { + u16 racerVar; + u16 racerNicknameVar; +} DerbyRacerVars; + +static const DerbyRacerVars sDerbyRacerVars[] = +{ + [DERBY_RACER_1] = + { + .racerVar = DERBY_VAR_RACER_1, + .racerNicknameVar = DERBY_VAR_RACER_NAME_1, + }, + [DERBY_RACER_2] = + { + .racerVar = DERBY_VAR_RACER_2, + .racerNicknameVar = DERBY_VAR_RACER_NAME_2, + }, + [DERBY_RACER_3] = + { + .racerVar = DERBY_VAR_RACER_3, + .racerNicknameVar = DERBY_VAR_RACER_NAME_3, + }, + [DERBY_RACER_4] = + { + .racerVar = DERBY_VAR_RACER_4, + .racerNicknameVar = DERBY_VAR_RACER_NAME_4, + }, + [DERBY_RACER_5] = + { + .racerVar = DERBY_VAR_RACER_5, + .racerNicknameVar = DERBY_VAR_RACER_NAME_5, + }, + [DERBY_RACER_6] = + { + .racerVar = DERBY_VAR_RACER_6, + .racerNicknameVar = DERBY_VAR_RACER_NAME_6, + }, +}; + +static inline u32 GetDerbySpeciesSpeedPay(u32 species, u32 condition) +{ + switch (species) + { + case DERBY_SPECIES_FEEBAS: + return BET_MULTIPLIER_JACKPOT; // Will never actually win lol + case DERBY_SPECIES_RAPIDASH: + if (condition >= CONDITION_4_STAR) + return BET_MULTIPLIER_1_1; + return BET_MULTIPLIER_1_2; + case DERBY_SPECIES_RATTATA: + if (condition == CONDITION_5_STAR) + return BET_MULTIPLIER_1_3; + else if ((condition == CONDITION_4_STAR) || (condition == CONDITION_3_STAR)) + return BET_MULTIPLIER_1_5; + else if (condition == CONDITION_2_STAR) + return BET_MULTIPLIER_2_0; + return BET_MULTIPLIER_3_0; + default: + if (condition == CONDITION_5_STAR) + return BET_MULTIPLIER_1_2; + else if (condition == CONDITION_4_STAR) + return BET_MULTIPLIER_1_3; + else if ((condition == CONDITION_3_STAR) || (condition == CONDITION_2_STAR)) + return BET_MULTIPLIER_1_5; + return BET_MULTIPLIER_2_0; + } +} + +static void GetRacerSpeeds(u8 racerSpecies, u8 racer) +{ + u8 sSpeed; + u8 rSpeed; + u8 condition; + int i; + + for (i = 0; i < DERBY_RACER_COUNT; i++) + { + if (RaceSpeedsValues[i].SpeciesId == racerSpecies) + { + sSpeed = RaceSpeedsValues[i].StartSpeed; + rSpeed = RaceSpeedsValues[i].RaceSpeed; + } + } + + sDerby->racerSpeedStart[racer] = sSpeed * (1 + (sDerby->racerCondition[racer] / 10.0f)); + sDerby->racerSpeedRace[racer] = rSpeed * (1 + (sDerby->racerCondition[racer] / 10.0f)); + condition = sDerby->racerCondition[racer] + 1; + sDerby->racerSpeedPay[racer] = GetDerbySpeciesSpeedPay(racerSpecies, condition); +} + +static inline bool32 GetDerbyShinyChance(void) +{ + if ((Random() % 8192) == 777) // Shiny + return TRUE; + return FALSE; } void GetNewDerby(void) { - u8 num100_1; - u8 num10_1; - u8 num1_1; - u8 num100_2; - u8 num10_2; - u8 num1_2; - u8 num100_3; - u8 num10_3; - u8 num1_3; - u8 num100_4; - u8 num10_4; - u8 num1_4; - u8 num100_5; - u8 num10_5; - u8 num1_5; - u8 num100_6; - u8 num10_6; - u8 num1_6; - u32 odds; - u8 odd_one; - u32 sOdds; - - int i; - int j; - int temp; - u8 conditions[6]; - int condition4Index; - int condition3Index; - int condition2Index; - - odds = (Random() % 100); // Feebas: 0-99 - if (odds != 99) // No Feebas - { - odds = (Random() % 300); // Ponyta/Rapidash/Rattata 0-2 - if (odds < 100) // All Ponyta - { - num100_1 = (Random() % 5); // Ponyta 0-4 - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_1 = 1; - } - else - { - num10_1 = 0; - } - num1_1 = (Random() % 5); // 0-4 - - num100_2 = (Random() % 5); // Ponyta 0-4 - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_2 = 1; - } - else - { - num10_2 = 0; - } - num1_2 = (Random() % 5); // 0-4 - - num100_3 = (Random() % 5); // Ponyta 0-4 - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_3 = 1; - } - else - { - num10_3 = 0; - } - num1_3 = (Random() % 5); // 0-4 - - num100_4 = (Random() % 5); // Ponyta 0-4 - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_4 = 1; - } - else - { - num10_4 = 0; - } - num1_4 = (Random() % 5); // 0-4 - - num100_5 = (Random() % 5); // Ponyta 0-4 - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_5 = 1; - } - else - { - num10_5 = 0; - } - num1_5 = (Random() % 5); // 0-4 - - num100_6 = (Random() % 5); // Ponyta 0-4 - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_6 = 1; - } - else - { - num10_6 = 0; - } - num1_6 = (Random() % 5); // 0-4 - } - else if ((odds >= 100) && (odds < 200)) // Rattata - { - odd_one = (Random() % 6); // 0-7; Pick the extra mon - if (odd_one != 0) - { - num100_1 = (Random() % 5); // Ponyta 0-4 - } - else // Rat! - { - num100_1 = 5; // Rattata - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_1 = 1; - } - else - { - num10_1 = 0; - } - num1_1 = (Random() % 5); // 0-4 - - - if (odd_one != 1) - { - num100_2 = (Random() % 5); // Ponyta 0-4 - } - else // Rat! - { - num100_2 = 5; // Rattata - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_2 = 1; - } - else - { - num10_2 = 0; - } - num1_2 = (Random() % 5); // 0-4 - - - if (odd_one != 2) - { - num100_3 = (Random() % 5); // Ponyta 0-4 - } - else // Rat! - { - num100_3 = 5; // Rattata - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_3 = 1; - } - else - { - num10_3 = 0; - } - num1_3 = (Random() % 5); // 0-4 - - - if (odd_one != 3) - { - num100_4 = (Random() % 5); // Ponyta 0-4 - } - else // Rat! - { - num100_4 = 5; // Rattata - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_4 = 1; - } - else - { - num10_4 = 0; - } - num1_4 = (Random() % 5); // 0-4 - - - if (odd_one != 4) - { - num100_5 = (Random() % 5); // Ponyta 0-4 - } - else // Rat! - { - num100_5 = 5; // Rattata - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_5 = 1; - } - else - { - num10_5 = 0; - } - num1_5 = (Random() % 5); // 0-4 - - - if (odd_one != 5) - { - num100_6 = (Random() % 5); // Ponyta 0-4 - } - else // Rat! - { - num100_6 = 5; // Rattata - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_6 = 1; - } - else - { - num10_6 = 0; - } - num1_6 = (Random() % 5); // 0-4 - } - else // Rapidash - { - odd_one = (Random() % 6); // 0-7; Pick the extra mon - if (odd_one != 0) - { - num100_1 = (Random() % 5); // Ponyta 0-4 - } - else // Horse! - { - num100_1 = 6; // Rapidash - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_1 = 1; - } - else - { - num10_1 = 0; - } - num1_1 = (Random() % 5); // 0-4 - - - if (odd_one != 1) - { - num100_2 = (Random() % 5); // Ponyta 0-4 - } - else // Horse! - { - num100_2 = 6; // Rapidash - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_2 = 1; - } - else - { - num10_2 = 0; - } - num1_2 = (Random() % 5); // 0-4 - - - if (odd_one != 2) - { - num100_3 = (Random() % 5); // Ponyta 0-4 - } - else // Horse! - { - num100_3 = 6; // Rapidash - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_3 = 1; - } - else - { - num10_3 = 0; - } - num1_3 = (Random() % 5); // 0-4 - - - if (odd_one != 3) - { - num100_4 = (Random() % 5); // Ponyta 0-4 - } - else // Horse! - { - num100_4 = 6; // Rapidash - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_4 = 1; - } - else - { - num10_4 = 0; - } - num1_4 = (Random() % 5); // 0-4 - - - if (odd_one != 4) - { - num100_5 = (Random() % 5); // Ponyta 0-4 - } - else // Horse! - { - num100_5 = 6; // Rapidash - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_5 = 1; - } - else - { - num10_5 = 0; - } - num1_5 = (Random() % 5); // 0-4 - - - if (odd_one != 5) - { - num100_6 = (Random() % 5); // Ponyta 0-4 - } - else // Horse! - { - num100_6 = 6; // Rapidash - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_6 = 1; - } - else - { - num10_6 = 0; - } - num1_6 = (Random() % 5); // 0-4 - } - } - else // Feebas - { - odd_one = (Random() % 6); // 0-7; Pick the extra mon - if (odd_one != 0) - { - num100_1 = (Random() % 5); // Ponyta 0-4 - } - else // Fish! - { - num100_1 = 7; // Feebas - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_1 = 1; - } - else - { - num10_1 = 0; - } - num1_1 = (Random() % 5); // 0-4 - - - if (odd_one != 1) - { - num100_2 = (Random() % 5); // Ponyta 0-4 - } - else // Fish! - { - num100_2 = 7; // Feebas - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_2 = 1; - } - else - { - num10_2 = 0; - } - num1_2 = (Random() % 5); // 0-4 - - - if (odd_one != 2) - { - num100_3 = (Random() % 5); // Ponyta 0-4 - } - else // Fish! - { - num100_3 = 7; // Feebas - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_3 = 1; - } - else - { - num10_3 = 0; - } - num1_3 = (Random() % 5); // 0-4 - - - if (odd_one != 3) - { - num100_4 = (Random() % 5); // Ponyta 0-4 - } - else // Fish! - { - num100_4 = 7; // Feebas - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_4 = 1; - } - else - { - num10_4 = 0; - } - num1_4 = (Random() % 5); // 0-4 - - - if (odd_one != 4) - { - num100_5 = (Random() % 5); // Ponyta 0-4 - } - else // Fish! - { - num100_5 = 7; // Feebas - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_5 = 1; - } - else - { - num10_5 = 0; - } - num1_5 = (Random() % 5); // 0-4 - - - if (odd_one != 5) - { - num100_6 = (Random() % 5); // Ponyta 0-4 - } - else // Fish! - { - num100_6 = 7; // Feebas - } - sOdds = (Random() % 8192); - if (sOdds == 777) // Shiny - { - num10_6 = 1; - } - else - { - num10_6 = 0; - } - num1_6 = (Random() % 5); // 0-4 - } - - for (i = 0; i < 6; i++) { - conditions[i] = Random() % 2; + u32 odds; + u8 odd_one; + + int i; + u8 conditions[DERBY_RACER_COUNT]; + u8 derbySpecies[DERBY_RACER_COUNT]; + u8 derbyShiny[DERBY_RACER_COUNT]; + u16 racerVar; + int condition4Index; + int condition3Index; + int condition2Index; + + // Generate all derby species with random Ponyta by default + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + derbySpecies[i] = (Random() % DERBY_SPECIES_PONYTA_COUNT); // Ponyta 0-4 } - condition4Index = Random() % 6; - conditions[condition4Index] = 4; + odds = (Random() % 100); // Feebas: 0-99 + if (odds != 99) // No Feebas + { + odds = (Random() % 300); // Ponyta/Rapidash/Rattata 0-2 + + if ((odds >= 100) && (odds < 200)) // Rattata + { + odd_one = (Random() % DERBY_RACER_COUNT); // Picks a random racer + derbySpecies[odd_one] = DERBY_SPECIES_RATTATA; + } + else if (odds >= 200) // Rapidash + { + odd_one = (Random() % DERBY_RACER_COUNT); // Picks a random racer + derbySpecies[odd_one] = DERBY_SPECIES_RAPIDASH; + } + } + else // Feebas + { + odd_one = (Random() % DERBY_RACER_COUNT); // Picks a random racer + derbySpecies[odd_one] = DERBY_SPECIES_FEEBAS; + } + + // Generate all derby species with random Ponyta by default + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + derbyShiny[i] = GetDerbyShinyChance(); + } + + // Generate all racers with low stars by default + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + conditions[i] = Random() % CONDITION_3_STAR; + } + + condition4Index = Random() % DERBY_RACER_COUNT; + conditions[condition4Index] = CONDITION_5_STAR; do { - condition3Index = Random() % 6; + condition3Index = Random() % DERBY_RACER_COUNT; } while (condition3Index == condition4Index); - conditions[condition3Index] = 3; + conditions[condition3Index] = CONDITION_4_STAR; do { - condition2Index = Random() % 6; + condition2Index = Random() % DERBY_RACER_COUNT; } while (condition2Index == condition4Index || condition2Index == condition3Index); - conditions[condition2Index] = 2; - - num1_1 = conditions[0]; - num1_2 = conditions[1]; - num1_3 = conditions[2]; - num1_4 = conditions[3]; - num1_5 = conditions[4]; - num1_6 = conditions[5]; - - VarSet(DERBY_VAR_RACER_1, (num100_1 * 100) + (num10_1 * 10) + num1_1); - VarSet(DERBY_VAR_RACER_2, (num100_2 * 100) + (num10_2 * 10) + num1_2); - VarSet(DERBY_VAR_RACER_3, (num100_3 * 100) + (num10_3 * 10) + num1_3); - VarSet(DERBY_VAR_RACER_4, (num100_4 * 100) + (num10_4 * 10) + num1_4); - VarSet(DERBY_VAR_RACER_5, (num100_5 * 100) + (num10_5 * 10) + num1_5); - VarSet(DERBY_VAR_RACER_6, (num100_6 * 100) + (num10_6 * 10) + num1_6); - - FlagSet(DERBY_FLAG_RESET); + conditions[condition2Index] = CONDITION_3_STAR; + + // Generate all racers with low stars by default + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + racerVar = sDerbyRacerVars[i].racerVar; + VarSet(racerVar, (derbySpecies[i] * 100) + (derbyShiny[i] * 10) + conditions[i]); + } + + FlagSet(DERBY_FLAG_RESET); } void InitiateRacers(void) { - u32 number; - - // Species 1 - number = VarGet(DERBY_VAR_RACER_1); - sDerby->Species_1 = number / 100; // Hundreds place - sDerby->Shiny_1 = (number / 10) % 10; // Tens place - sDerby->Condition_1 = number % 10; // Ones place - - // Species 2 - number = VarGet(DERBY_VAR_RACER_2); - sDerby->Species_2 = number / 100; // Hundreds place - sDerby->Shiny_2 = (number / 10) % 10; // Tens place - sDerby->Condition_2 = number % 10; // Ones place - - // Species 3 - number = VarGet(DERBY_VAR_RACER_3); - sDerby->Species_3 = number / 100; // Hundreds place - sDerby->Shiny_3 = (number / 10) % 10; // Tens place - sDerby->Condition_3 = number % 10; // Ones place - - // Species 4 - number = VarGet(DERBY_VAR_RACER_4); - sDerby->Species_4 = number / 100; // Hundreds place - sDerby->Shiny_4 = (number / 10) % 10; // Tens place - sDerby->Condition_4 = number % 10; // Ones place - - // Species 5 - number = VarGet(DERBY_VAR_RACER_5); - sDerby->Species_5 = number / 100; // Hundreds place - sDerby->Shiny_5 = (number / 10) % 10; // Tens place - sDerby->Condition_5 = number % 10; // Ones place - - // Species 6 - number = VarGet(DERBY_VAR_RACER_6); - sDerby->Species_6 = number / 100; // Hundreds place - sDerby->Shiny_6 = (number / 10) % 10; // Tens place - sDerby->Condition_6 = number % 10; // Ones place + u32 number; + u32 i; + u16 racerVar; + + // Generate all racers with low stars by default + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + racerVar = sDerbyRacerVars[i].racerVar; + number = VarGet(racerVar); + sDerby->racerSpecies[i] = number / 100; // Hundreds place + sDerby->racerShiny[i] = (number / 10) % 10; // Tens place + sDerby->racerCondition[i] = number % 10; // Ones place + } +} + +static inline u32 CreatePonytaSprite(u32 shiny, u32 x, u32 y) +{ + if (shiny) + return CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); + return CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); +} + +static inline u32 CreateRattataSprite(u32 shiny, u32 x, u32 y) +{ + if (shiny) + return CreateSprite(&sSpriteTemplate_RattataShiny, x, y, 0); + return CreateSprite(&sSpriteTemplate_RattataNormal, x, y, 0); +} + +static inline u32 CreateRapidashSprite(u32 shiny, u32 x, u32 y) +{ + if (shiny) + return CreateSprite(&sSpriteTemplate_RapidashShiny, x, y, 0); + return CreateSprite(&sSpriteTemplate_RapidashNormal, x, y, 0); +} + +static inline u32 CreateFeebasSprite(u32 shiny, u32 x, u32 y) +{ + if (shiny) + return CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); + return CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); +} + +static inline u32 CreateDerbyMonSprite(u32 species, u32 shiny, u32 x) +{ + switch (species) + { + default: + return CreatePonytaSprite(shiny, x, 96); + case DERBY_SPECIES_RATTATA: + return CreateRattataSprite(shiny, x, 100); + case DERBY_SPECIES_RAPIDASH: + return CreateRapidashSprite(shiny, x, 88); + case DERBY_SPECIES_FEEBAS: + return CreateFeebasSprite(shiny, x, 96); + } } static void CreatePokemonSprites(void) { - s16 x; - s16 y; - struct SpriteSheet s; - - x = 64; - y = 96; - - if (sDerby->Species_1 < 5) // Ponyta - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); - - if (sDerby->Shiny_1 == 0) // Normal - { - sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - } - } - else if (sDerby->Species_1 == 5) // Rattata - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); - - if (sDerby->Shiny_1 == 0) // Normal - { - sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - } - } - else if (sDerby->Species_1 == 6) // Rapidash - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); - - if (sDerby->Shiny_1 == 0) // Normal - { - sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - } - } - else // Feebas - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); - - if (sDerby->Shiny_1 == 0) // Normal - { - sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_1 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - } - } - - if (sDerby->Species_2 < 5) // Ponyta - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); - - if (sDerby->Shiny_2 == 0) // Normal - { - sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - } - } - else if (sDerby->Species_2 == 5) // Rattata - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); - - if (sDerby->Shiny_2 == 0) // Normal - { - sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - } - } - else if (sDerby->Species_2 == 6) // Rapidash - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); - - if (sDerby->Shiny_2 == 0) // Normal - { - sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_2].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - } - } - else // Feebas - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); - - if (sDerby->Shiny_1 == 0) // Normal - { - sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_2 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - } - } - - if (sDerby->Species_3 < 5) // Ponyta - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); - - if (sDerby->Shiny_3 == 0) // Normal - { - sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - } - } - else if (sDerby->Species_3 == 5) // Rattata - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); - - if (sDerby->Shiny_3 == 0) // Normal - { - sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - } - } - else if (sDerby->Species_3 == 6) // Rapidash - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); - - if (sDerby->Shiny_3 == 0) // Normal - { - sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_3].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - } - } - else // Feebas - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); - - if (sDerby->Shiny_3 == 0) // Normal - { - sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_3 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - } - } - - if (sDerby->Species_4 < 5) // Ponyta - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); - - if (sDerby->Shiny_4 == 0) // Normal - { - sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - } - } - else if (sDerby->Species_4 == 5) // Rattata - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); - - if (sDerby->Shiny_4 == 0) // Normal - { - sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - } - } - else if (sDerby->Species_4 == 6) // Rapidash - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); - - if (sDerby->Shiny_4 == 0) // Normal - { - sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_4].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - } - } - else // Feebas - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); - - if (sDerby->Shiny_4 == 0) // Normal - { - sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_4 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - } - } - - if (sDerby->Species_5 < 5) // Ponyta - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); - - if (sDerby->Shiny_5 == 0) // Normal - { - sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - } - } - else if (sDerby->Species_5 == 5) // Rattata - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); - - if (sDerby->Shiny_5 == 0) // Normal - { - sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - } - } - else if (sDerby->Species_5 == 6) // Rapidash - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); - - if (sDerby->Shiny_5 == 0) // Normal - { - sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_5].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - } - } - else // Feebas - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); - - if (sDerby->Shiny_5 == 0) // Normal - { - sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_5 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - } - } - - if (sDerby->Species_6 < 5) // Ponyta - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); - - if (sDerby->Shiny_6 == 0) // Normal - { - sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_PonytaNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_PonytaShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - } - else if (sDerby->Species_6 == 5) // Rattata - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); - - if (sDerby->Shiny_6 == 0) // Normal - { - sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_RattataNormal, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_RattataShiny, x, 100, 0); - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - } - else if (sDerby->Species_6 == 6) // Rapidash - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); - - if (sDerby->Shiny_6 == 0) // Normal - { - sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_RapidashNormal, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_6].invisible = FALSE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_RapidashShiny, x, 88, 0); - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - } - else // Feebas - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); - - if (sDerby->Shiny_6 == 0) // Normal - { - sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_FeebasNormal, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - else // Shiny - { - sDerby->SpeciesSpriteId_6 = CreateSprite(&sSpriteTemplate_FeebasShiny, x, y, 0); - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - } + s16 x; + u32 i; + + x = 64; + + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta); + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata); + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash); + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas); + + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + sDerby->racerSpeciesSpriteId[i] = CreateDerbyMonSprite(sDerby->racerSpecies[i], sDerby->racerShiny[i], x); + gSprites[sDerby->racerSpeciesSpriteId[i]].invisible = FALSE; + } } static void FadeToDerbyScreen(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].data[0]) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -2969,375 +2062,211 @@ static void FadeToDerbyScreen(u8 taskId) static void UpdatePokemonSprites(void) { - if (sDerby->MenuPosition == 0) - { - gSprites[sDerby->SpeciesSpriteId_1].invisible = FALSE; - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - else if (sDerby->MenuPosition == 1) - { - gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_2].invisible = FALSE; - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - else if (sDerby->MenuPosition == 2) - { - gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_3].invisible = FALSE; - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - else if (sDerby->MenuPosition == 3) - { - gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_4].invisible = FALSE; - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - else if (sDerby->MenuPosition == 4) - { - gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_5].invisible = FALSE; - gSprites[sDerby->SpeciesSpriteId_6].invisible = TRUE; - } - else if (sDerby->MenuPosition == 5) - { - gSprites[sDerby->SpeciesSpriteId_1].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_2].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_3].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_4].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_5].invisible = TRUE; - gSprites[sDerby->SpeciesSpriteId_6].invisible = FALSE; - } + u32 i; + // Generate all racers with low stars by default + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + gSprites[sDerby->racerSpeciesSpriteId[i]].invisible = TRUE; + } + + gSprites[sDerby->racerSpeciesSpriteId[sDerby->MenuPosition]].invisible = FALSE; } static void CreateMenuData(void) { - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Name_Ponyta); - - sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Ponyta, 164, 60, 0); - - LoadCompressedSpriteSheet(&sSpriteSheet_Condition_1); - - sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_1, 164, 93, 0); - - LoadCompressedSpriteSheet(&sSpriteSheet_Payout_1); - - sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_1, 164, 124, 0); - - LoadCompressedSpriteSheet(&sSpriteSheet_UI_1); - - sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_1, 64, 64, 0); + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Ponyta); + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Ponyta, 164, 60, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_1); + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_1, 164, 93, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_1); + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_1, 164, 124, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_UI_1); + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_1, 64, 64, 0); } static void UpdatePokemonSpeciesNames(void) { - u8 species = 0; - struct SpriteSheet s; - - if (sDerby->MenuPosition == 0) - { - species = sDerby->Species_1; - } - else if (sDerby->MenuPosition == 1) - { - species = sDerby->Species_2; - } - else if (sDerby->MenuPosition == 2) - { - species = sDerby->Species_3; - } - else if (sDerby->MenuPosition == 3) - { - species = sDerby->Species_4; - } - else if (sDerby->MenuPosition == 4) - { - species = sDerby->Species_5; - } - else if (sDerby->MenuPosition == 5) - { - species = sDerby->Species_6; - } - - DestroySpriteAndFreeResources(&gSprites[sDerby->SpeciesNameSpriteId]); - LoadSpritePalettes(sSpritePalettes); - - if (species < 5) // Ponyta - { - LoadCompressedSpriteSheet(&sSpriteSheet_Name_Ponyta); - - sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Ponyta, 164, 60, 0); - } - else if (species == 5) // Rattata - { - LoadCompressedSpriteSheet(&sSpriteSheet_Name_Rattata); - - sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Rattata, 164, 60, 0); - } - else if (species == 6) // Rapidash - { - LoadCompressedSpriteSheet(&sSpriteSheet_Name_Rapidash); - - sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Rapidash, 164, 60, 0); - } - else // Feebas - { - LoadCompressedSpriteSheet(&sSpriteSheet_Name_Feebas); - - sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Feebas, 164, 60, 0); - } + u8 species = 0; + + species = sDerby->racerSpecies[sDerby->MenuPosition]; + + DestroySpriteAndFreeResources(&gSprites[sDerby->SpeciesNameSpriteId]); + LoadSpritePalettes(sSpritePalettes); + + switch (species) + { + default: + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Ponyta); + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Ponyta, 164, 60, 0); + break; + case DERBY_SPECIES_RATTATA: + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Rattata); + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Rattata, 164, 60, 0); + break; + case DERBY_SPECIES_RAPIDASH: + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Rapidash); + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Rapidash, 164, 60, 0); + break; + case DERBY_SPECIES_FEEBAS: + LoadCompressedSpriteSheet(&sSpriteSheet_Name_Feebas); + sDerby->SpeciesNameSpriteId = CreateSprite(&sSpriteTemplate_Name_Feebas, 164, 60, 0); + break; + } } static void UpdateCondition(void) { - u8 stars = 0; - struct SpriteSheet s; - - if (sDerby->MenuPosition == 0) - { - stars = sDerby->Condition_1; - } - else if (sDerby->MenuPosition == 1) - { - stars = sDerby->Condition_2; - } - else if (sDerby->MenuPosition == 2) - { - stars = sDerby->Condition_3; - } - else if (sDerby->MenuPosition == 3) - { - stars = sDerby->Condition_4; - } - else if (sDerby->MenuPosition == 4) - { - stars = sDerby->Condition_5; - } - else if (sDerby->MenuPosition == 5) - { - stars = sDerby->Condition_6; - } - - DestroySpriteAndFreeResources(&gSprites[sDerby->ConditionSpriteId]); - LoadSpritePalettes(sSpritePalettes); - - if (stars == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Condition_1); - - sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_1, 164, 93, 0); - } - else if (stars == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Condition_2); - - sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_2, 164, 93, 0); - } - else if (stars == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Condition_3); - - sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_3, 164, 93, 0); - } - else if (stars == 3) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Condition_4); - - sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_4, 164, 93, 0); - } - else if (stars == 4) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Condition_5); - - sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_5, 164, 93, 0); - } + u8 stars = 0; + + stars = sDerby->racerCondition[sDerby->MenuPosition]; + + DestroySpriteAndFreeResources(&gSprites[sDerby->ConditionSpriteId]); + LoadSpritePalettes(sSpritePalettes); + + switch (stars) + { + case CONDITION_1_STAR: + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_1); + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_1, 164, 93, 0); + break; + case CONDITION_2_STAR: + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_2); + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_2, 164, 93, 0); + break; + case CONDITION_3_STAR: + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_3); + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_3, 164, 93, 0); + break; + case CONDITION_4_STAR: + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_4); + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_4, 164, 93, 0); + break; + case CONDITION_5_STAR: + LoadCompressedSpriteSheet(&sSpriteSheet_Condition_5); + sDerby->ConditionSpriteId = CreateSprite(&sSpriteTemplate_Condition_5, 164, 93, 0); + break; + } } static void UpdatePayout(void) { - u8 multi = 0; - s16 y; - struct SpriteSheet s; - - y = 124; - - if (sDerby->MenuPosition == 0) - { - multi = sDerby->Racer1SpeedPay - 1; - } - else if (sDerby->MenuPosition == 1) - { - multi = sDerby->Racer2SpeedPay - 1; - } - else if (sDerby->MenuPosition == 2) - { - multi = sDerby->Racer3SpeedPay - 1; - } - else if (sDerby->MenuPosition == 3) - { - multi = sDerby->Racer4SpeedPay - 1; - } - else if (sDerby->MenuPosition == 4) - { - multi = sDerby->Racer5SpeedPay - 1; - } - else if (sDerby->MenuPosition == 5) - { - multi = sDerby->Racer6SpeedPay - 1; - } - - DestroySpriteAndFreeResources(&gSprites[sDerby->PayoutSpriteId]); - LoadSpritePalettes(sSpritePalettes); - - if (multi == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Payout_1); - - sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_1, 164, y, 0); - } - else if (multi == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Payout_2); - - sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_2, 164, y, 0); - } - else if (multi == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Payout_3); - - sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_3, 164, y, 0); - } - else if (multi == 3) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Payout_4); - - sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_4, 164, y, 0); - } - else if (multi == 4) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Payout_5); - - sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_5, 164, y, 0); - } - else if (multi == 5) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Payout_6); - - sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_6, 164, y, 0); - } - else if (multi == 6) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Payout_7); - - sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_7, 164, y, 0); - } + u8 multi = 0; + s16 y; + + y = 124; + + multi = sDerby->racerSpeedPay[sDerby->MenuPosition]; + + DestroySpriteAndFreeResources(&gSprites[sDerby->PayoutSpriteId]); + LoadSpritePalettes(sSpritePalettes); + switch (multi) + { + case BET_MULTIPLIER_1_1: + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_1); + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_1, 164, y, 0); + break; + case BET_MULTIPLIER_1_2: + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_2); + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_2, 164, y, 0); + break; + case BET_MULTIPLIER_1_3: + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_3); + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_3, 164, y, 0); + break; + case BET_MULTIPLIER_1_5: + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_4); + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_4, 164, y, 0); + break; + case BET_MULTIPLIER_2_0: + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_5); + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_5, 164, y, 0); + break; + case BET_MULTIPLIER_3_0: + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_6); + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_6, 164, y, 0); + break; + case BET_MULTIPLIER_JACKPOT: + LoadCompressedSpriteSheet(&sSpriteSheet_Payout_7); + sDerby->PayoutSpriteId = CreateSprite(&sSpriteTemplate_Payout_7, 164, y, 0); + break; + } } static void UpdateUI(void) { - struct SpriteSheet s; - - DestroySpriteAndFreeResources(&gSprites[sDerby->uiSpriteId]); - LoadSpritePalettes(sSpritePalettes); - - if (sDerby->MenuPosition == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_UI_1); - - sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_1, 64, 64, 0); - } - else if (sDerby->MenuPosition == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_UI_2); - - sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_2, 64, 64, 0); - } - else if (sDerby->MenuPosition == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_UI_3); - - sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_3, 64, 64, 0); - } - else if (sDerby->MenuPosition == 3) - { - LoadCompressedSpriteSheet(&sSpriteSheet_UI_4); - - sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_4, 64, 64, 0); - } - else if (sDerby->MenuPosition == 4) - { - LoadCompressedSpriteSheet(&sSpriteSheet_UI_5); - - sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_5, 64, 64, 0); - } - else if (sDerby->MenuPosition == 5) - { - LoadCompressedSpriteSheet(&sSpriteSheet_UI_6); - - sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_6, 64, 64, 0); - } + DestroySpriteAndFreeResources(&gSprites[sDerby->uiSpriteId]); + LoadSpritePalettes(sSpritePalettes); + + if (sDerby->MenuPosition == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_1); + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_1, 64, 64, 0); + } + else if (sDerby->MenuPosition == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_2); + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_2, 64, 64, 0); + } + else if (sDerby->MenuPosition == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_3); + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_3, 64, 64, 0); + } + else if (sDerby->MenuPosition == 3) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_4); + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_4, 64, 64, 0); + } + else if (sDerby->MenuPosition == 4) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_5); + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_5, 64, 64, 0); + } + else if (sDerby->MenuPosition == 5) + { + LoadCompressedSpriteSheet(&sSpriteSheet_UI_6); + sDerby->uiSpriteId = CreateSprite(&sSpriteTemplate_UI_6, 64, 64, 0); + } } static void CreateP10(void) { - struct SpriteSheet s; - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_P10); - - sDerby->P10SpriteId = CreateSprite(&sSpriteTemplate_P10, 172, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_P10); + sDerby->P10SpriteId = CreateSprite(&sSpriteTemplate_P10, 172, 80, 0); } static void CreateCreditIcon(void) { - struct SpriteSheet s; - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Credit_Icon); - - sDerby->CreditIconSpriteId = CreateSprite(&sSpriteTemplate_Credit_Icon, 28, 126, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Credit_Icon); + sDerby->CreditIconSpriteId = CreateSprite(&sSpriteTemplate_Credit_Icon, 28, 126, 0); } static void CreateCreditIconRed(void) { - struct SpriteSheet s; - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Credit_Icon_Red); - - sDerby->CreditIconSpriteId = CreateSprite(&sSpriteTemplate_Credit_Icon_Red, 28, 126, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Credit_Icon_Red); + sDerby->CreditIconSpriteId = CreateSprite(&sSpriteTemplate_Credit_Icon_Red, 28, 126, 0); } static void CreateArrows(void) { - s16 x; - s16 y; - struct SpriteSheet s; - - x = 32; - y = 88; - - LoadCompressedSpriteSheet(&sSpriteSheet_Arrow_1); - - sDerby->Arrow1SpriteId = CreateSprite(&sSpriteTemplate_Arrow_1, x, y, 0); - - LoadCompressedSpriteSheet(&sSpriteSheet_Arrow_2); - - sDerby->Arrow2SpriteId = CreateSprite(&sSpriteTemplate_Arrow_2, x + 64, y, 0); + s16 x; + s16 y; + + x = 32; + y = 88; + + LoadCompressedSpriteSheet(&sSpriteSheet_Arrow_1); + sDerby->Arrow1SpriteId = CreateSprite(&sSpriteTemplate_Arrow_1, x, y, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_Arrow_2); + sDerby->Arrow2SpriteId = CreateSprite(&sSpriteTemplate_Arrow_2, x + 64, y, 0); } static void ShowName(const u8 *str) @@ -3352,240 +2281,66 @@ static void ShowName(const u8 *str) static void UpdateNicknames(void) { - int i; - - //ClearStdWindowAndFrame(DERBY_MENUS, TRUE); - //RemoveWindow(DERBY_MENUS); - - InitWindows(sDerbyWinTemplates); + int i; + u32 racerSpecies = 0; + u16 racerNicknameVar; + + InitWindows(sDerbyWinTemplates); DeactivateAllTextPrinters(); - LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); - - if (sDerby->MenuPosition == 0) - { - if (sDerby->Species_1 < 5) // Ponyta - { - for (i = 0; i < MAX_NAMES; i++) { - if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_1))) { - ShowName(PonytaNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_1 == 5) // Rattata - { - for (i = 0; i < MAX_NAMES; i++) { - if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_1))) { - ShowName(RattataNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_1 == 6) // Rapidash - { - for (i = 0; i < MAX_NAMES; i++) { - if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_1))) { - ShowName(RapidashNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_1 == 7) // Feebas - { - for (i = 0; i < MAX_NAMES; i++) { - if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_1))) { - ShowName(FeebasNamesValues[i].NameString); - } - } - } - } - else if (sDerby->MenuPosition == 1) - { - if (sDerby->Species_2 < 5) // Ponyta - { - for (i = 0; i < MAX_NAMES; i++) { - if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_2))) { - ShowName(PonytaNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_2 == 5) // Rattata - { - for (i = 0; i < MAX_NAMES; i++) { - if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_2))) { - ShowName(RattataNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_2 == 6) // Rapidash - { - for (i = 0; i < MAX_NAMES; i++) { - if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_2))) { - ShowName(RapidashNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_2 == 7) // Feebas - { - for (i = 0; i < MAX_NAMES; i++) { - if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_2))) { - ShowName(FeebasNamesValues[i].NameString); - } - } - } - } - else if (sDerby->MenuPosition == 2) - { - if (sDerby->Species_3 < 5) // Ponyta - { - for (i = 0; i < MAX_NAMES; i++) { - if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_3))) { - ShowName(PonytaNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_3 == 5) // Rattata - { - for (i = 0; i < MAX_NAMES; i++) { - if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_3))) { - ShowName(RattataNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_3 == 6) // Rapidash - { - for (i = 0; i < MAX_NAMES; i++) { - if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_3))) { - ShowName(RapidashNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_3 == 7) // Feebas - { - for (i = 0; i < MAX_NAMES; i++) { - if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_3))) { - ShowName(FeebasNamesValues[i].NameString); - } - } - } - } - else if (sDerby->MenuPosition == 3) - { - if (sDerby->Species_4 < 5) // Ponyta - { - for (i = 0; i < MAX_NAMES; i++) { - if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_4))) { - ShowName(PonytaNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_4 == 5) // Rattata - { - for (i = 0; i < MAX_NAMES; i++) { - if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_4))) { - ShowName(RattataNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_4 == 6) // Rapidash - { - for (i = 0; i < MAX_NAMES; i++) { - if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_4))) { - ShowName(RapidashNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_4 == 7) // Feebas - { - for (i = 0; i < MAX_NAMES; i++) { - if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_4))) { - ShowName(FeebasNamesValues[i].NameString); - } - } - } - } - else if (sDerby->MenuPosition == 4) - { - if (sDerby->Species_5 < 5) // Ponyta - { - for (i = 0; i < MAX_NAMES; i++) { - if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_5))) { - ShowName(PonytaNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_5 == 5) // Rattata - { - for (i = 0; i < MAX_NAMES; i++) { - if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_5))) { - ShowName(RattataNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_5 == 6) // Rapidash - { - for (i = 0; i < MAX_NAMES; i++) { - if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_5))) { - ShowName(RapidashNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_5 == 7) // Feebas - { - for (i = 0; i < MAX_NAMES; i++) { - if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_5))) { - ShowName(FeebasNamesValues[i].NameString); - } - } - } - } - else if (sDerby->MenuPosition == 5) - { - if (sDerby->Species_6 < 5) // Ponyta - { - for (i = 0; i < MAX_NAMES; i++) { - if (PonytaNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_6))) { - ShowName(PonytaNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_6 == 5) // Rattata - { - for (i = 0; i < MAX_NAMES; i++) { - if (RattataNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_6))) { - ShowName(RattataNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_6 == 6) // Rapidash - { - for (i = 0; i < MAX_NAMES; i++) { - if (RapidashNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_6))) { - ShowName(RapidashNamesValues[i].NameString); - } - } - } - else if (sDerby->Species_6 == 7) // Feebas - { - for (i = 0; i < MAX_NAMES; i++) { - if (FeebasNamesValues[i].ID == (VarGet(DERBY_VAR_RACER_NAME_6))) { - ShowName(FeebasNamesValues[i].NameString); - } - } - } - } - + LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); + + racerSpecies = sDerby->racerSpecies[sDerby->MenuPosition]; + racerNicknameVar = sDerbyRacerVars[sDerby->MenuPosition].racerNicknameVar; + + switch (racerSpecies) + { + default: + for (i = 0; i < MAX_NAMES; i++) + { + if (PonytaNamesValues[i].ID == (VarGet(racerNicknameVar))) + ShowName(PonytaNamesValues[i].NameString); + } + break; + case DERBY_SPECIES_RATTATA: + for (i = 0; i < MAX_NAMES; i++) + { + if (RattataNamesValues[i].ID == (VarGet(racerNicknameVar))) + ShowName(RattataNamesValues[i].NameString); + } + break; + case DERBY_SPECIES_RAPIDASH: + for (i = 0; i < MAX_NAMES; i++) + { + if (RapidashNamesValues[i].ID == (VarGet(racerNicknameVar))) + ShowName(RapidashNamesValues[i].NameString); + } + break; + case DERBY_SPECIES_FEEBAS: + for (i = 0; i < MAX_NAMES; i++) + { + if (FeebasNamesValues[i].ID == (VarGet(racerNicknameVar))) + ShowName(FeebasNamesValues[i].NameString); + } + break; + } } -u8 GetUniquePonytaName(u8 currentSpecies, u8 previousNames[]) { +u8 GetUniquePonytaName(u8 currentSpecies, u8 previousNames[]) +{ u8 newName; - + // Only apply uniqueness check for Ponyta (species < 5) - if (currentSpecies < 5) { + if (currentSpecies < DERBY_SPECIES_PONYTA_COUNT) + { do { newName = Random() % MAX_NAMES; // Generate a random nickname index } while (previousNames[newName] != 0); // Check if this name has already been taken // Mark this name as taken previousNames[newName] = 1; - } else { + } + else + { // For non-Ponyta species, no need to check for uniqueness newName = Random() % MAX_NAMES; } @@ -3595,46 +2350,38 @@ u8 GetUniquePonytaName(u8 currentSpecies, u8 previousNames[]) { static void SetNicknames(void) { - u8 previousNames[MAX_NAMES] = {0}; // Array to track taken nicknames (0 = available, 1 = taken) - u8 name1; - u8 name2; - u8 name3; - u8 name4; - u8 name5; - u8 name6; - - // Get the nickname for each racer and ensure uniqueness for Ponyta - name1 = GetUniquePonytaName(sDerby->Species_1, previousNames); - name2 = GetUniquePonytaName(sDerby->Species_2, previousNames); - name3 = GetUniquePonytaName(sDerby->Species_3, previousNames); - name4 = GetUniquePonytaName(sDerby->Species_4, previousNames); - name5 = GetUniquePonytaName(sDerby->Species_5, previousNames); - name6 = GetUniquePonytaName(sDerby->Species_6, previousNames); - - // Assign the unique names to the VARs - VarSet(DERBY_VAR_RACER_NAME_1, name1); - VarSet(DERBY_VAR_RACER_NAME_2, name2); - VarSet(DERBY_VAR_RACER_NAME_3, name3); - VarSet(DERBY_VAR_RACER_NAME_4, name4); - VarSet(DERBY_VAR_RACER_NAME_5, name5); - VarSet(DERBY_VAR_RACER_NAME_6, name6); - - FlagSet(DERBY_FLAG_NICKNAME); + u8 previousNames[MAX_NAMES] = {0}; // Array to track taken nicknames (0 = available, 1 = taken) + u8 names[DERBY_RACER_COUNT]; + u32 i; + u16 racerNicknameVar; + + // Generate all racers with low stars by default + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + names[i] = GetUniquePonytaName(sDerby->racerSpecies[i], previousNames); + } + + // Generate all racers with low stars by default + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + racerNicknameVar = sDerbyRacerVars[i].racerNicknameVar; + VarSet(racerNicknameVar, names[i]); + } + + FlagSet(DERBY_FLAG_NICKNAME); } static void UpdatePokemonData(void) { - UpdatePokemonSprites(); - UpdatePokemonSpeciesNames(); - UpdateCondition(); - UpdatePayout(); - UpdateUI(); - if (FlagGet(DERBY_FLAG_NICKNAME)) - { - SetNicknames(); - } - UpdateNicknames(); - + UpdatePokemonSprites(); + UpdatePokemonSpeciesNames(); + UpdateCondition(); + UpdatePayout(); + UpdateUI(); + if (!FlagGet(DERBY_FLAG_NICKNAME)) + SetNicknames(); + UpdateNicknames(); + } static void SetBetDigits(u16 num) @@ -3664,7 +2411,7 @@ static void SetBetDigits(u16 num) num = num % d; d = d / 10; } - + BuildOamBuffer(); } @@ -3674,15 +2421,14 @@ static void CreateBetSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_BetInterface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_BetInterface[i]); } for (i = 0; i < 4; i++) { sDerby->BetSpriteIds[i + SPR_BET_DIGITS] = CreateSprite(&sSpriteTemplate_BetDigit, i * 5 + 148, 103, 2); - gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].oam.priority = 0; - gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].oam.priority = 0; + gSprites[sDerby->BetSpriteIds[i + SPR_BET_DIGITS]].invisible = TRUE; } } @@ -3713,7 +2459,7 @@ static void SetPotentialDigits(u16 num) num = num % d; d = d / 10; } - + BuildOamBuffer(); } @@ -3723,15 +2469,14 @@ static void CreatePotentialSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PotentialInterface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_PotentialInterface[i]); } for (i = 0; i < 4; i++) { sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS] = CreateSprite(&sSpriteTemplate_PotentialDigit, i * 6 + 186, 125, 2); - gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].oam.priority = 0; - gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].invisible = TRUE; + gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].oam.priority = 0; + gSprites[sDerby->PotentialSpriteIds[i + SPR_POTENTIAL_DIGITS]].invisible = TRUE; } } @@ -3762,7 +2507,7 @@ static void SetCreditDigits(u16 num) num = num % d; d = d / 10; } - + BuildOamBuffer(); } @@ -3772,14 +2517,13 @@ static void CreateCreditSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); } for (i = 0; i < 4; i++) { sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 8 + 50, 136, 2); - gSprites[sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + gSprites[sDerby->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; } } @@ -3816,353 +2560,273 @@ static void ExitDerby(void) static void ShiftData(u8 direction) { - // 1 = Right, 0 = Left - - if (direction == 1) // Right - { - PlaySE(SE_SELECT); - if (sDerby->MenuPosition > 4) - { - sDerby->MenuPosition = 0; - } - else - { - sDerby->MenuPosition++; - } - } - else if (direction == 0) // Left - { - PlaySE(SE_SELECT); - if (sDerby->MenuPosition < 1) - { - sDerby->MenuPosition = 5; - } - else - { - sDerby->MenuPosition--; - } - } - UpdatePokemonData(); + // 1 = Right, 0 = Left + + if (direction == 1) // Right + { + PlaySE(SE_SELECT); + if (sDerby->MenuPosition >= DERBY_RACER_6) + { + sDerby->MenuPosition = DERBY_RACER_1; + } + else + { + sDerby->MenuPosition++; + } + } + else if (direction == 0) // Left + { + PlaySE(SE_SELECT); + if (sDerby->MenuPosition <= DERBY_RACER_1) + { + sDerby->MenuPosition = DERBY_RACER_6; + } + else + { + sDerby->MenuPosition--; + } + } + UpdatePokemonData(); } static void HandleInput(void) { - if (JOY_NEW(A_BUTTON)) - { - PlaySE(SE_SELECT); - sDerby->state = DERBY_STATE_BET_2_START; - } - else if (JOY_NEW(B_BUTTON)) - { - if (sDerby->exitToggle == 0) { - PlaySE(SE_SELECT); - sDerby->state = DERBY_STATE_START_EXIT; - } - } - else if (JOY_NEW(DPAD_RIGHT)) - { - ShiftData(1); - } - else if (JOY_NEW(DPAD_LEFT)) - { - ShiftData(0); - } + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sDerby->state = DERBY_STATE_BET_2_START; + } + else if (JOY_NEW(B_BUTTON)) + { + if (sDerby->exitToggle == 0) { + PlaySE(SE_SELECT); + sDerby->state = DERBY_STATE_START_EXIT; + } + } + else if (JOY_NEW(DPAD_RIGHT)) + { + ShiftData(1); + } + else if (JOY_NEW(DPAD_LEFT)) + { + ShiftData(0); + } } static void UpdateBetBG(void) { - if (sDerby->Menu == 0) - { - InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); - SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img_2, 0x1940, 0, 0); - CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap_2, 0, 0); - ResetPaletteFade(); - LoadPalette(Derby_BG_Bet_Pal_2, 0, sizeof(Derby_BG_Bet_Pal_2)); // Load the second palette - CopyBgTilemapBufferToVram(DERBY_BG_BASE); - return; - } - else if (sDerby->Menu == 1) - { - InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); - SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img, 0x1940, 0, 0); - CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Derby_BG_Bet_Pal, 0, sizeof(Derby_BG_Bet_Pal)); // Load the second palette - CopyBgTilemapBufferToVram(DERBY_BG_BASE); - return; - } + if (sDerby->Menu == 0) + { + InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); + SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img_2, 0x1940, 0, 0); + CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap_2, 0, 0); + ResetPaletteFade(); + LoadPalette(Derby_BG_Bet_Pal_2, 0, sizeof(Derby_BG_Bet_Pal_2)); // Load the second palette + CopyBgTilemapBufferToVram(DERBY_BG_BASE); + return; + } + else if (sDerby->Menu == 1) + { + InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); + SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img, 0x1940, 0, 0); + CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Derby_BG_Bet_Pal, 0, sizeof(Derby_BG_Bet_Pal)); // Load the second palette + CopyBgTilemapBufferToVram(DERBY_BG_BASE); + return; + } } static void HideBetSprites(void) { - if (sDerby->Menu == 0) - { - DestroySpriteAndFreeResources(&gSprites[sDerby->CreditIconSpriteId]); - CreateCreditIconRed(); - CreateP10(); - - gSprites[sDerby->SpeciesNameSpriteId].invisible = TRUE; - gSprites[sDerby->ConditionSpriteId].invisible = TRUE; - gSprites[sDerby->PayoutSpriteId].invisible = TRUE; - gSprites[sDerby->Arrow1SpriteId].invisible = TRUE; - gSprites[sDerby->Arrow2SpriteId].invisible = TRUE; - gSprites[sDerby->uiSpriteId].invisible = TRUE; - - gSprites[sDerby->PotentialSpriteIds[0]].invisible = FALSE; - gSprites[sDerby->PotentialSpriteIds[1]].invisible = FALSE; - gSprites[sDerby->PotentialSpriteIds[2]].invisible = FALSE; - gSprites[sDerby->PotentialSpriteIds[3]].invisible = FALSE; - gSprites[sDerby->BetSpriteIds[0]].invisible = FALSE; - gSprites[sDerby->BetSpriteIds[1]].invisible = FALSE; - gSprites[sDerby->BetSpriteIds[2]].invisible = FALSE; - gSprites[sDerby->BetSpriteIds[3]].invisible = FALSE; - } - else if (sDerby->Menu == 1) - { - DestroySpriteAndFreeResources(&gSprites[sDerby->P10SpriteId]); - DestroySpriteAndFreeResources(&gSprites[sDerby->CreditIconSpriteId]); - CreateCreditIcon(); - - gSprites[sDerby->PotentialSpriteIds[0]].invisible = TRUE; - gSprites[sDerby->PotentialSpriteIds[1]].invisible = TRUE; - gSprites[sDerby->PotentialSpriteIds[2]].invisible = TRUE; - gSprites[sDerby->PotentialSpriteIds[3]].invisible = TRUE; - gSprites[sDerby->BetSpriteIds[0]].invisible = TRUE; - gSprites[sDerby->BetSpriteIds[1]].invisible = TRUE; - gSprites[sDerby->BetSpriteIds[2]].invisible = TRUE; - gSprites[sDerby->BetSpriteIds[3]].invisible = TRUE; - - gSprites[sDerby->SpeciesNameSpriteId].invisible = FALSE; - gSprites[sDerby->ConditionSpriteId].invisible = FALSE; - gSprites[sDerby->PayoutSpriteId].invisible = FALSE; - gSprites[sDerby->Arrow1SpriteId].invisible = FALSE; - gSprites[sDerby->Arrow2SpriteId].invisible = FALSE; - gSprites[sDerby->uiSpriteId].invisible = FALSE; - } + if (sDerby->Menu == 0) + { + DestroySpriteAndFreeResources(&gSprites[sDerby->CreditIconSpriteId]); + CreateCreditIconRed(); + CreateP10(); + + gSprites[sDerby->SpeciesNameSpriteId].invisible = TRUE; + gSprites[sDerby->ConditionSpriteId].invisible = TRUE; + gSprites[sDerby->PayoutSpriteId].invisible = TRUE; + gSprites[sDerby->Arrow1SpriteId].invisible = TRUE; + gSprites[sDerby->Arrow2SpriteId].invisible = TRUE; + gSprites[sDerby->uiSpriteId].invisible = TRUE; + + gSprites[sDerby->PotentialSpriteIds[0]].invisible = FALSE; + gSprites[sDerby->PotentialSpriteIds[1]].invisible = FALSE; + gSprites[sDerby->PotentialSpriteIds[2]].invisible = FALSE; + gSprites[sDerby->PotentialSpriteIds[3]].invisible = FALSE; + gSprites[sDerby->BetSpriteIds[0]].invisible = FALSE; + gSprites[sDerby->BetSpriteIds[1]].invisible = FALSE; + gSprites[sDerby->BetSpriteIds[2]].invisible = FALSE; + gSprites[sDerby->BetSpriteIds[3]].invisible = FALSE; + } + else if (sDerby->Menu == 1) + { + DestroySpriteAndFreeResources(&gSprites[sDerby->P10SpriteId]); + DestroySpriteAndFreeResources(&gSprites[sDerby->CreditIconSpriteId]); + CreateCreditIcon(); + + gSprites[sDerby->PotentialSpriteIds[0]].invisible = TRUE; + gSprites[sDerby->PotentialSpriteIds[1]].invisible = TRUE; + gSprites[sDerby->PotentialSpriteIds[2]].invisible = TRUE; + gSprites[sDerby->PotentialSpriteIds[3]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[0]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[1]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[2]].invisible = TRUE; + gSprites[sDerby->BetSpriteIds[3]].invisible = TRUE; + + gSprites[sDerby->SpeciesNameSpriteId].invisible = FALSE; + gSprites[sDerby->ConditionSpriteId].invisible = FALSE; + gSprites[sDerby->PayoutSpriteId].invisible = FALSE; + gSprites[sDerby->Arrow1SpriteId].invisible = FALSE; + gSprites[sDerby->Arrow2SpriteId].invisible = FALSE; + gSprites[sDerby->uiSpriteId].invisible = FALSE; + } } static void AddBet(void) { - u8 PayoutId = 0; - - if (sDerby->MenuPosition == 0) - { - PayoutId = sDerby->Racer1SpeedPay; - } - else if (sDerby->MenuPosition == 1) - { - PayoutId = sDerby->Racer2SpeedPay; - } - else if (sDerby->MenuPosition == 2) - { - PayoutId = sDerby->Racer3SpeedPay; - } - else if (sDerby->MenuPosition == 3) - { - PayoutId = sDerby->Racer4SpeedPay; - } - else if (sDerby->MenuPosition == 4) - { - PayoutId = sDerby->Racer5SpeedPay; - } - else if (sDerby->MenuPosition == 5) - { - PayoutId = sDerby->Racer6SpeedPay; - } - - if ((sDerby->Bet + 10) <= GetCoins()) - { - PlaySE(SE_BALL_TRAY_BALL); - sDerby->Bet = (sDerby->Bet + 10); - SetBetDigits(sDerby->Bet); - - if (PayoutId == 1) - { - sDerby->PotentialWin = (sDerby->Bet * 1.1); - } - else if (PayoutId == 2) - { - sDerby->PotentialWin = (sDerby->Bet * 1.2); - } - else if (PayoutId == 3) - { - sDerby->PotentialWin = (sDerby->Bet * 1.3); - } - else if (PayoutId == 4) - { - sDerby->PotentialWin = (sDerby->Bet * 1.5); - } - else if (PayoutId == 5) - { - sDerby->PotentialWin = (sDerby->Bet * 2); - } - else if (PayoutId == 6) - { - sDerby->PotentialWin = (sDerby->Bet * 3); - } - else if (PayoutId == 7) - { - sDerby->PotentialWin = 9999; - } - - if (sDerby->PotentialWin > 9999) - { - sDerby->PotentialWin = 9999; - } - SetPotentialDigits(sDerby->PotentialWin); - } - else - { - PlaySE(SE_FAILURE); - } + u8 PayoutId; + + PayoutId = sDerby->racerSpeedPay[sDerby->MenuPosition]; + + if ((sDerby->Bet + 10) <= GetCoins()) + { + PlaySE(SE_BALL_TRAY_BALL); + sDerby->Bet = (sDerby->Bet + 10); + SetBetDigits(sDerby->Bet); + + switch (PayoutId) + { + case BET_MULTIPLIER_1_1: + sDerby->PotentialWin = (sDerby->Bet * 1.1); + break; + case BET_MULTIPLIER_1_2: + sDerby->PotentialWin = (sDerby->Bet * 1.2); + break; + case BET_MULTIPLIER_1_3: + sDerby->PotentialWin = (sDerby->Bet * 1.3); + break; + case BET_MULTIPLIER_1_5: + sDerby->PotentialWin = (sDerby->Bet * 1.5); + break; + case BET_MULTIPLIER_2_0: + sDerby->PotentialWin = (sDerby->Bet * 2); + break; + case BET_MULTIPLIER_3_0: + sDerby->PotentialWin = (sDerby->Bet * 3); + break; + case BET_MULTIPLIER_JACKPOT: + sDerby->PotentialWin = 9999; + break; + } + + if (sDerby->PotentialWin > 9999) + { + sDerby->PotentialWin = 9999; + } + SetPotentialDigits(sDerby->PotentialWin); + } + else + { + PlaySE(SE_FAILURE); + } } static void SubBet(void) { - u8 PayoutId = 0; - - if (sDerby->MenuPosition == 0) - { - PayoutId = sDerby->Racer1SpeedPay; - } - else if (sDerby->MenuPosition == 1) - { - PayoutId = sDerby->Racer2SpeedPay; - } - else if (sDerby->MenuPosition == 2) - { - PayoutId = sDerby->Racer3SpeedPay; - } - else if (sDerby->MenuPosition == 3) - { - PayoutId = sDerby->Racer4SpeedPay; - } - else if (sDerby->MenuPosition == 4) - { - PayoutId = sDerby->Racer5SpeedPay; - } - else if (sDerby->MenuPosition == 5) - { - PayoutId = sDerby->Racer6SpeedPay; - } - - if (sDerby->Bet > 0) - { - PlaySE(SE_BALL_TRAY_BALL); - sDerby->Bet = (sDerby->Bet - 10); - SetBetDigits(sDerby->Bet); - - if (PayoutId == 1) - { - sDerby->PotentialWin = (sDerby->Bet * 1.1); - } - else if (PayoutId == 2) - { - sDerby->PotentialWin = (sDerby->Bet * 1.2); - } - else if (PayoutId == 3) - { - sDerby->PotentialWin = (sDerby->Bet * 1.3); - } - else if (PayoutId == 4) - { - sDerby->PotentialWin = (sDerby->Bet * 1.5); - } - else if (PayoutId == 5) - { - sDerby->PotentialWin = (sDerby->Bet * 2); - } - else if (PayoutId == 6) - { - sDerby->PotentialWin = (sDerby->Bet * 3); - } - else if (PayoutId == 7) - { - if (sDerby->Bet > 0) - { - sDerby->PotentialWin = 9999; - } - else - { - sDerby->PotentialWin = 0; - } - } - - SetPotentialDigits(sDerby->PotentialWin); - } - else - { - PlaySE(SE_FAILURE); - } + u8 PayoutId = 0; + + PayoutId = sDerby->racerSpeedPay[sDerby->MenuPosition]; + + if (sDerby->Bet > 0) + { + PlaySE(SE_BALL_TRAY_BALL); + sDerby->Bet = (sDerby->Bet - 10); + SetBetDigits(sDerby->Bet); + + switch (PayoutId) + { + case BET_MULTIPLIER_1_1: + sDerby->PotentialWin = (sDerby->Bet * 1.1); + break; + case BET_MULTIPLIER_1_2: + sDerby->PotentialWin = (sDerby->Bet * 1.2); + break; + case BET_MULTIPLIER_1_3: + sDerby->PotentialWin = (sDerby->Bet * 1.3); + break; + case BET_MULTIPLIER_1_5: + sDerby->PotentialWin = (sDerby->Bet * 1.5); + break; + case BET_MULTIPLIER_2_0: + sDerby->PotentialWin = (sDerby->Bet * 2); + break; + case BET_MULTIPLIER_3_0: + sDerby->PotentialWin = (sDerby->Bet * 3); + break; + case BET_MULTIPLIER_JACKPOT: + if (sDerby->Bet > 0) + sDerby->PotentialWin = 9999; + else + sDerby->PotentialWin = 0; + break; + } + + SetPotentialDigits(sDerby->PotentialWin); + } + else + { + PlaySE(SE_FAILURE); + } } static void AdjustByRandom(void) { - int i; - u8 chance; - - for (i = 1; i <= 6; i++) { - + int i; + u8 chance; + + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { chance = Random() % 55; - if (chance < 50) { - + if (chance < 50) + { float randomAdjustment = (Random() % 251) / 100.0f; - if (Random() % 2 == 0) { + if (Random() % 2 == 0) + { // Add the random value - switch (i) { - case 1: sDerby->Racer1rSpeed += randomAdjustment; break; - case 2: sDerby->Racer2rSpeed += randomAdjustment; break; - case 3: sDerby->Racer3rSpeed += randomAdjustment; break; - case 4: sDerby->Racer4rSpeed += randomAdjustment; break; - case 5: sDerby->Racer5rSpeed += randomAdjustment; break; - case 6: sDerby->Racer6rSpeed += randomAdjustment; break; - } - } else { + sDerby->racerSpeedRace[i] += randomAdjustment; + } + else + { // Subtract the random value - switch (i) { - case 1: sDerby->Racer1rSpeed -= randomAdjustment; break; - case 2: sDerby->Racer2rSpeed -= randomAdjustment; break; - case 3: sDerby->Racer3rSpeed -= randomAdjustment; break; - case 4: sDerby->Racer4rSpeed -= randomAdjustment; break; - case 5: sDerby->Racer5rSpeed -= randomAdjustment; break; - case 6: sDerby->Racer6rSpeed -= randomAdjustment; break; - } + sDerby->racerSpeedRace[i] -= randomAdjustment; } } } - - for (i = 1; i <= 6; i++) { - + + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { chance = Random() % 65; - - if (chance < 50) { - + + if (chance < 50) + { float randomAdjustment = (Random() % 51) / 100.0f; - if (Random() % 2 == 0) { + if (Random() % 2 == 0) + { // Add the random value - switch (i) { - case 1: sDerby->Racer1sSpeed += randomAdjustment; break; - case 2: sDerby->Racer2sSpeed += randomAdjustment; break; - case 3: sDerby->Racer3sSpeed += randomAdjustment; break; - case 4: sDerby->Racer4sSpeed += randomAdjustment; break; - case 5: sDerby->Racer5sSpeed += randomAdjustment; break; - case 6: sDerby->Racer6sSpeed += randomAdjustment; break; - } - } else { + sDerby->racerSpeedStart[i] += randomAdjustment; + } + else + { // Subtract the random value - switch (i) { - case 1: sDerby->Racer1sSpeed -= randomAdjustment; break; - case 2: sDerby->Racer2sSpeed -= randomAdjustment; break; - case 3: sDerby->Racer3sSpeed -= randomAdjustment; break; - case 4: sDerby->Racer4sSpeed -= randomAdjustment; break; - case 5: sDerby->Racer5sSpeed -= randomAdjustment; break; - case 6: sDerby->Racer6sSpeed -= randomAdjustment; break; - } + sDerby->racerSpeedStart[i] -= randomAdjustment; } } } @@ -4170,521 +2834,198 @@ static void AdjustByRandom(void) static void HandleInput2(void) { - if (JOY_NEW(A_BUTTON)) - { - if (sDerby->Bet > 0) - { - PlaySE(SE_SHOP); - DestroySpriteAndFreeResources(&gSprites[sDerby->P10SpriteId]); - PlayBGM(MUS_NONE); - SetCoins((GetCoins() - sDerby->Bet)); - SetCreditDigits(GetCoins()); - sDerby->delay = 30; - AdjustByRandom(); - sDerby->state = DERBY_STATE_RACE_DELAY; - } - else - { - PlaySE(SE_FAILURE); - } - } - else if (JOY_NEW(B_BUTTON)) - { - if (sDerby->exitToggle == 0) { - PlaySE(SE_SELECT); - sDerby->Bet = 0; - sDerby->PotentialWin = 0; - SetBetDigits(0); - SetPotentialDigits(0); - HideBetSprites(); - UpdateBetBG(); - sDerby->Menu = 0; - sDerby->state = DERBY_STATE_PROCESS_INPUT; - } - } - else if (JOY_NEW(DPAD_UP)) - { - AddBet(); - } - else if (JOY_NEW(DPAD_DOWN)) - { - SubBet(); - } + if (JOY_NEW(A_BUTTON)) + { + if (sDerby->Bet > 0) + { + PlaySE(SE_SHOP); + DestroySpriteAndFreeResources(&gSprites[sDerby->P10SpriteId]); + PlayBGM(MUS_NONE); + SetCoins((GetCoins() - sDerby->Bet)); + SetCreditDigits(GetCoins()); + sDerby->delay = 30; + AdjustByRandom(); + sDerby->state = DERBY_STATE_RACE_DELAY; + } + else + { + PlaySE(SE_FAILURE); + } + } + else if (JOY_NEW(B_BUTTON)) + { + if (sDerby->exitToggle == 0) { + PlaySE(SE_SELECT); + sDerby->Bet = 0; + sDerby->PotentialWin = 0; + SetBetDigits(0); + SetPotentialDigits(0); + HideBetSprites(); + UpdateBetBG(); + sDerby->Menu = 0; + sDerby->state = DERBY_STATE_PROCESS_INPUT; + } + } + else if (JOY_NEW(DPAD_UP)) + { + AddBet(); + } + else if (JOY_NEW(DPAD_DOWN)) + { + SubBet(); + } +} + +static inline u32 CreatePonytaOWSprite(u32 shiny, u32 x, u32 y, u32 position) +{ + if (shiny) + return CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, x, y, position); + return CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, x, y, position); +} + +static inline u32 CreateRattataOWSprite(u32 shiny, u32 x, u32 y, u32 position) +{ + if (shiny) + return CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, x, y, position); + return CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, x, y, position); +} + +static inline u32 CreateRapidashOWSprite(u32 shiny, u32 x, u32 y, u32 position) +{ + if (shiny) + return CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, x, y, position); + return CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, x, y, position); +} + +static inline u32 CreateFeebasOWSprite(u32 shiny, u32 x, u32 y, u32 position) +{ + if (shiny) + return CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, x, y, position); + return CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, x, y, position); +} + +static inline u32 CreateDerbyMonOWSprite(u32 species, u32 shiny, u32 x, u32 yAdd, u32 position) +{ + u32 speciesY = 48; + switch (species) + { + default: + return CreatePonytaOWSprite(shiny, x, speciesY + yAdd, position); + case DERBY_SPECIES_RATTATA: + speciesY = 56; + return CreateRattataOWSprite(shiny, x, speciesY + yAdd, position); + case DERBY_SPECIES_RAPIDASH: + return CreateRapidashOWSprite(shiny, x, speciesY + yAdd, position); + case DERBY_SPECIES_FEEBAS: + speciesY = 56; + return CreateFeebasOWSprite(shiny, x, speciesY + yAdd, position); + } } static void CreateRacers(void) { - u8 horseY; - u8 ratfishY; - u8 horseAdd; - u8 ratfishAdd; - u8 position; - struct SpriteSheet s; - - horseY = 48; - ratfishY = 56; - horseAdd = 16; - ratfishAdd = 16; - position = 11; - LoadSpritePalettes(sSpritePalettes); - - if (sDerby->Species_1 < 5) // Ponyta - { - if (sDerby->Shiny_1 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_1 == 5) // Rattata - { - if (sDerby->Shiny_1 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); - } - } - else if (sDerby->Species_1 == 6) // Rapidash - { - if (sDerby->Shiny_1 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_1 == 7) // Feebas - { - if (sDerby->Shiny_1 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite1 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); - } - } - - horseY = horseY + horseAdd; - ratfishY = ratfishY + ratfishAdd; - position = position - 2; - - if (sDerby->Species_2 < 5) // Ponyta - { - if (sDerby->Shiny_2 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_2 == 5) // Rattata - { - if (sDerby->Shiny_2 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); - } - } - else if (sDerby->Species_2 == 6) // Rapidash - { - if (sDerby->Shiny_2 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_2 == 7) // Feebas - { - if (sDerby->Shiny_2 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite2 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); - } - } - - horseY = horseY + horseAdd; - ratfishY = ratfishY + ratfishAdd; - position = position - 2; - - if (sDerby->Species_3 < 5) // Ponyta - { - if (sDerby->Shiny_3 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_3 == 5) // Rattata - { - if (sDerby->Shiny_3 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); - } - } - else if (sDerby->Species_3 == 6) // Rapidash - { - if (sDerby->Shiny_3 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_3 == 7) // Feebas - { - if (sDerby->Shiny_3 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite3 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); - } - } - - horseY = horseY + horseAdd; - ratfishY = ratfishY + ratfishAdd; - position = position - 2; - - if (sDerby->Species_4 < 5) // Ponyta - { - if (sDerby->Shiny_4 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_4 == 5) // Rattata - { - if (sDerby->Shiny_4 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); - } - } - else if (sDerby->Species_4 == 6) // Rapidash - { - if (sDerby->Shiny_4 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_4 == 7) // Feebas - { - if (sDerby->Shiny_4 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite4 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); - } - } - - horseY = horseY + horseAdd; - ratfishY = ratfishY + ratfishAdd; - position = position - 2; - - if (sDerby->Species_5 < 5) // Ponyta - { - if (sDerby->Shiny_5 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_5 == 5) // Rattata - { - if (sDerby->Shiny_5 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); - } - } - else if (sDerby->Species_5 == 6) // Rapidash - { - if (sDerby->Shiny_5 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_5 == 7) // Feebas - { - if (sDerby->Shiny_5 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite5 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); - } - } - - horseY = horseY + horseAdd; - ratfishY = ratfishY + ratfishAdd; - position = position - 2; - - if (sDerby->Species_6 < 5) // Ponyta - { - if (sDerby->Shiny_6 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); - - sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Ponyta_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_6 == 5) // Rattata - { - if (sDerby->Shiny_6 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Rattata_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); - - sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Rattata_OW_Shiny, 224, ratfishY, position); - } - } - else if (sDerby->Species_6 == 6) // Rapidash - { - if (sDerby->Shiny_6 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Normal, 224, horseY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); - - sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Rapidash_OW_Shiny, 224, horseY, position); - } - } - else if (sDerby->Species_6 == 7) // Feebas - { - if (sDerby->Shiny_6 == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Feebas_OW_Normal, 224, ratfishY, position); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); - - sDerby->RacerSprite6 = CreateSprite(&sSpriteTemplate_Feebas_OW_Shiny, 224, ratfishY, position); - } - } + u8 position = 11; + u32 yAdd = 0; + + LoadSpritePalettes(sSpritePalettes); + + LoadCompressedSpriteSheet(&sSpriteSheet_Ponyta_OW); + LoadCompressedSpriteSheet(&sSpriteSheet_Rattata_OW); + LoadCompressedSpriteSheet(&sSpriteSheet_Rapidash_OW); + LoadCompressedSpriteSheet(&sSpriteSheet_Feebas_OW); + + sDerby->RacerSprite1 = CreateDerbyMonOWSprite(sDerby->racerSpecies[DERBY_RACER_1], sDerby->racerShiny[DERBY_RACER_1], 224, yAdd, position); + + yAdd = yAdd + 16; + position = position - 2; + sDerby->RacerSprite2 = CreateDerbyMonOWSprite(sDerby->racerSpecies[DERBY_RACER_2], sDerby->racerShiny[DERBY_RACER_2], 224, yAdd, position); + + yAdd = yAdd + 16; + position = position - 2; + sDerby->RacerSprite3 = CreateDerbyMonOWSprite(sDerby->racerSpecies[DERBY_RACER_3], sDerby->racerShiny[DERBY_RACER_3], 224, yAdd, position); + + yAdd = yAdd + 16; + position = position - 2; + sDerby->RacerSprite4 = CreateDerbyMonOWSprite(sDerby->racerSpecies[DERBY_RACER_4], sDerby->racerShiny[DERBY_RACER_4], 224, yAdd, position); + + yAdd = yAdd + 16; + position = position - 2; + sDerby->RacerSprite5 = CreateDerbyMonOWSprite(sDerby->racerSpecies[DERBY_RACER_5], sDerby->racerShiny[DERBY_RACER_5], 224, yAdd, position); + + yAdd = yAdd + 16; + position = position - 2; + sDerby->RacerSprite6 = CreateDerbyMonOWSprite(sDerby->racerSpecies[DERBY_RACER_6], sDerby->racerShiny[DERBY_RACER_6], 224, yAdd, position); } static void CreateCursor(void) { - u8 y = 0; - u8 position = 0; - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - - if (sDerby->RacerSelected == 1) - { - position = 10; - y = 40; - } - else if (sDerby->RacerSelected == 2) - { - position = 8; - y = 40 + 16; - } - else if (sDerby->RacerSelected == 3) - { - position = 6; - y = 40 + 16 + 16; - } - else if (sDerby->RacerSelected == 4) - { - position = 4; - y = 40 + 16 + 16 + 16; - } - else if (sDerby->RacerSelected == 5) - { - position = 2; - y = 40 + 16 + 16 + 16 + 16; - } - else if (sDerby->RacerSelected == 6) - { - position = 0; - y = 40 + 16 + 16 + 16 + 16 + 16; - } - - LoadCompressedSpriteSheet(&sSpriteSheet_Cursor); - - sDerby->CursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, 224, y, position); + u8 y = 0; + u8 position = 0; + + LoadSpritePalettes(sSpritePalettes); + + if (sDerby->RacerSelected == 1) + { + position = 10; + y = 40; + } + else if (sDerby->RacerSelected == 2) + { + position = 8; + y = 40 + 16; + } + else if (sDerby->RacerSelected == 3) + { + position = 6; + y = 40 + 16 + 16; + } + else if (sDerby->RacerSelected == 4) + { + position = 4; + y = 40 + 16 + 16 + 16; + } + else if (sDerby->RacerSelected == 5) + { + position = 2; + y = 40 + 16 + 16 + 16 + 16; + } + else if (sDerby->RacerSelected == 6) + { + position = 0; + y = 40 + 16 + 16 + 16 + 16 + 16; + } + LoadCompressedSpriteSheet(&sSpriteSheet_Cursor); + + sDerby->CursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, 224, y, position); } static void InitRacetrack(void) { - ResetVramOamAndBgCntRegs(); + ResetVramOamAndBgCntRegs(); ResetBgsAndClearDma3BusyFlags(0); ResetTempTileDataBuffers(); - InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); - SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_Race_Img, 0x1940, 0, 0); - CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_Race_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Derby_Race_Pal, 0, sizeof(Derby_Race_Pal)); - ResetSpriteData(); + InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); + SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_Race_Img, 0x1940, 0, 0); + CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_Race_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Derby_Race_Pal, 0, sizeof(Derby_Race_Pal)); + ResetSpriteData(); FreeAllSpritePalettes(); - LoadSpritePalettes(sSpritePalettes); - - CreateRacers(); - CreateCursor(); - - CopyBgTilemapBufferToVram(DERBY_BG_BASE); - CopyBgTilemapBufferToVram(DERBY_MENUS); + LoadSpritePalettes(sSpritePalettes); + + CreateRacers(); + CreateCursor(); + + CopyBgTilemapBufferToVram(DERBY_BG_BASE); + CopyBgTilemapBufferToVram(DERBY_MENUS); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); ShowBg(DERBY_BG_BASE); - ShowBg(DERBY_MENUS); + ShowBg(DERBY_MENUS); } -int ScaleSpeedToInt(float speed) { +int ScaleSpeedToInt(float speed) +{ float originalMin = 0.0f; float originalMax = 13.2f; float newMin = 1.0f; @@ -4697,7 +3038,8 @@ int ScaleSpeedToInt(float speed) { return roundedValue; } -void AssignRacerPlacements(void) { +void AssignRacerPlacements(void) +{ struct Racer { int xValue; int index; @@ -4711,15 +3053,18 @@ void AssignRacerPlacements(void) { {gSprites[sDerby->RacerSprite5].x, 5}, {gSprites[sDerby->RacerSprite6].x, 6} }; - - int i; - int j; - struct Racer temp; - u8 places[6] = {0, 0, 0, 0, 0, 0}; - - for (i = 0; i < 5; i++) { - for (j = i + 1; j < 6; j++) { - if (racers[i].xValue > racers[j].xValue) { + + int i; + int j; + struct Racer temp; + u8 places[DERBY_RACER_COUNT] = {0, 0, 0, 0, 0, 0}; + + for (i = 0; i < 5; i++) + { + for (j = i + 1; j < 6; j++) + { + if (racers[i].xValue > racers[j].xValue) + { temp = racers[i]; racers[i] = racers[j]; racers[j] = temp; @@ -4727,12 +3072,12 @@ void AssignRacerPlacements(void) { } } - for (i = 0; i < 6; i++) { - if (i > 0 && racers[i].xValue == racers[i - 1].xValue) { + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + if (i > 0 && racers[i].xValue == racers[i - 1].xValue) places[racers[i].index - 1] = places[racers[i - 1].index - 1]; - } else { + else places[racers[i].index - 1] = i == 0 ? 2 : (i == 1 ? 1 : 0); - } } sDerby->place1 = places[0]; @@ -4745,441 +3090,385 @@ void AssignRacerPlacements(void) { static void DerbyMain(u8 taskId) { - s16 finalX; - struct SpriteSheet s; - - finalX = 16; - switch (sDerby->state) { case DERBY_STATE_INIT: - if (!gPaletteFade.active) { + if (!gPaletteFade.active) sDerby->state = DERBY_STATE_PROCESS_INPUT; - } break; case DERBY_STATE_PROCESS_INPUT: HandleInput(); break; - case DERBY_STATE_BET_2_START: - UpdateBetBG(); - HideBetSprites(); - sDerby->Menu = 1; - sDerby->RacerSelected = sDerby->MenuPosition + 1; - sDerby->state = DERBY_STATE_BET_2; - break; - case DERBY_STATE_BET_2: - HandleInput2(); - break; - case DERBY_STATE_RACE_DELAY: - if (sDerby->delay != 0) - { - sDerby->delay--; - } - else - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sDerby->state = DERBY_STATE_START_FADE; - } - break; - case DERBY_STATE_START_FADE: - if (!gPaletteFade.active) - { - PlayBGM(MUS_RG_CYCLING); - InitRacetrack(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - sDerby->state = DERBY_STATE_FADEIN; - } - break; - case DERBY_STATE_FADEIN: - if (!gPaletteFade.active) - { - sDerby->delay = 30; - sDerby->state = DERBY_STATE_DELAY_2; - } - break; - case DERBY_STATE_DELAY_2: - if (sDerby->delay != 0) - { - sDerby->delay--; - } - else - { - sDerby->delay = 60; - sDerby->Timer = 3; - sDerby->Swap1 = 1; - sDerby->Swap2 = 0; - sDerby->CountdownX = 120; - sDerby->CountdownY = 76; - PlaySE(SE_CONTEST_PLACE); // 3 - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_3); - - sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_3, sDerby->CountdownX, sDerby->CountdownY, 0); - - sDerby->state = DERBY_STATE_COUNTDOWN; - } - break; - case DERBY_STATE_COUNTDOWN: - if ((sDerby->Timer > 0) && (sDerby->Swap1 == 1) && (sDerby->Swap2 == 0)) - { - if (sDerby->delay > 0) - { - sDerby->delay--; - } - else if (sDerby->delay == 0) - { - sDerby->Timer--; // 2 - sDerby->Swap2 = 1; - } - } - else if ((sDerby->Timer > 0) && (sDerby->Swap1 > 0) && (sDerby->Swap2 > 0)) - { - PlaySE(SE_CONTEST_PLACE); // 2 - - DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_2); - - sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_2, sDerby->CountdownX, sDerby->CountdownY, 0); - - sDerby->delay = 60; - sDerby->Swap1 = 0; - sDerby->Swap2 = 0; - } - else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 0) && (sDerby->Swap2 == 0)) - { - if (sDerby->delay > 0) - { - sDerby->delay--; - } - else if (sDerby->delay == 0) - { - sDerby->Timer--; // 1 - sDerby->Swap2 = 1; - } - } - else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 0) && (sDerby->Swap2 == 1)) - { - PlaySE(SE_CONTEST_PLACE); // 1 - - DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_1); - - sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_1, sDerby->CountdownX, sDerby->CountdownY, 0); - - sDerby->delay = 60; - sDerby->Swap1 = 2; - sDerby->Swap2 = 0; - } - else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 2) && (sDerby->Swap2 == 0)) - { - if (sDerby->delay > 0) - { - sDerby->delay--; - } - else if (sDerby->delay == 0) - { - sDerby->Timer--; // 1 - sDerby->Swap2 = 3; - } - } - else if (sDerby->Timer == 0) - { - if ((sDerby->Swap2 == 3) && (sDerby->delay == 0)) - { - PlaySE(SE_EXP_MAX); - - DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Go); - - sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Go, sDerby->CountdownX, sDerby->CountdownY, 0); - - sDerby->Swap2 = 4; - sDerby->delay = 60; - - } - else if (sDerby->delay > 0) - { - sDerby->delay--; - } - else if (sDerby->delay == 0) - { - DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); - if (sDerby->Species_1 != 7) - { - gSprites[sDerby->RacerSprite1].animNum = 1; - } - if (sDerby->Species_2 != 7) - { - gSprites[sDerby->RacerSprite2].animNum = 1; - } - if (sDerby->Species_3 != 7) - { - gSprites[sDerby->RacerSprite3].animNum = 1; - } - if (sDerby->Species_4 != 7) - { - gSprites[sDerby->RacerSprite4].animNum = 1; - } - if (sDerby->Species_5 != 7) - { - gSprites[sDerby->RacerSprite5].animNum = 1; - } - if (sDerby->Species_6 != 7) - { - gSprites[sDerby->RacerSprite6].animNum = 1; - } - sDerby->frames = 3; - sDerby->delay = 15; - sDerby->state = DERBY_STATE_RACE_START; - } - } - break; - case DERBY_STATE_RACE_START: - if (sDerby->frames == 0) - { - if (sDerby->Species_1 != 7) - { - gSprites[sDerby->RacerSprite1].x = gSprites[sDerby->RacerSprite1].x - (sDerby->Racer1sSpeed / 2); - } - if (sDerby->Species_2 != 7) - { - gSprites[sDerby->RacerSprite2].x = gSprites[sDerby->RacerSprite2].x - (sDerby->Racer2sSpeed / 2); - } - if (sDerby->Species_3 != 7) - { - gSprites[sDerby->RacerSprite3].x = gSprites[sDerby->RacerSprite3].x - (sDerby->Racer3sSpeed / 2); - } - if (sDerby->Species_4 != 7) - { - gSprites[sDerby->RacerSprite4].x = gSprites[sDerby->RacerSprite4].x - (sDerby->Racer4sSpeed / 2); - } - if (sDerby->Species_5 != 7) - { - gSprites[sDerby->RacerSprite5].x = gSprites[sDerby->RacerSprite5].x - (sDerby->Racer5sSpeed / 2); - } - if (sDerby->Species_6 != 7) - { - gSprites[sDerby->RacerSprite6].x = gSprites[sDerby->RacerSprite6].x - (sDerby->Racer6sSpeed / 2); - } - - if (sDerby->RacerSelected == 1) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite1].x; - } - else if (sDerby->RacerSelected == 2) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite2].x; - } - else if (sDerby->RacerSelected == 3) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite3].x; - } - else if (sDerby->RacerSelected == 4) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite4].x; - } - else if (sDerby->RacerSelected == 5) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite5].x; - } - else if (sDerby->RacerSelected == 6) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite6].x; - } - - sDerby->frames = 3; - sDerby->delay--; - } - else if (sDerby->delay == 0) - { - sDerby->state = DERBY_STATE_RACE_MID; - } - sDerby->frames--; - break; - case DERBY_STATE_RACE_MID: - if ((gSprites[sDerby->RacerSprite1].x > 16) && - (gSprites[sDerby->RacerSprite2].x > 16) && - (gSprites[sDerby->RacerSprite3].x > 16) && - (gSprites[sDerby->RacerSprite4].x > 16) && - (gSprites[sDerby->RacerSprite5].x > 16) && - (gSprites[sDerby->RacerSprite6].x > 16)) - { - if (sDerby->frames == 0) - { - if (sDerby->Species_1 != 7) - { - gSprites[sDerby->RacerSprite1].x = gSprites[sDerby->RacerSprite1].x - (sDerby->Racer1rSpeed / 2); - } - if (sDerby->Species_2 != 7) - { - gSprites[sDerby->RacerSprite2].x = gSprites[sDerby->RacerSprite2].x - (sDerby->Racer2rSpeed / 2); - } - if (sDerby->Species_3 != 7) - { - gSprites[sDerby->RacerSprite3].x = gSprites[sDerby->RacerSprite3].x - (sDerby->Racer3rSpeed / 2); - } - if (sDerby->Species_4 != 7) - { - gSprites[sDerby->RacerSprite4].x = gSprites[sDerby->RacerSprite4].x - (sDerby->Racer4rSpeed / 2); - } - if (sDerby->Species_5 != 7) - { - gSprites[sDerby->RacerSprite5].x = gSprites[sDerby->RacerSprite5].x - (sDerby->Racer5rSpeed / 2); - } - if (sDerby->Species_6 != 7) - { - gSprites[sDerby->RacerSprite6].x = gSprites[sDerby->RacerSprite6].x - (sDerby->Racer6rSpeed / 2); - } - - if (sDerby->RacerSelected == 1) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite1].x; - } - else if (sDerby->RacerSelected == 2) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite2].x; - } - else if (sDerby->RacerSelected == 3) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite3].x; - } - else if (sDerby->RacerSelected == 4) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite4].x; - } - else if (sDerby->RacerSelected == 5) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite5].x; - } - else if (sDerby->RacerSelected == 6) - { - gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite6].x; - } - - sDerby->frames = 3; - } - sDerby->frames--; - } - else - { - PlayBGM(MUS_NONE); - AssignRacerPlacements(); - if (sDerby->RacerSelected == 1) - { - if (sDerby->place1 == 2) // Win - { - VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); - } - else if (sDerby->place1 == 1) // Second - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose - } - else - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); - } - } - else if (sDerby->RacerSelected == 2) - { - if (sDerby->place2 == 2) // Win - { - VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); - } - else if (sDerby->place2 == 1) // Second - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose - } - else - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); - } - } - else if (sDerby->RacerSelected == 3) - { - if (sDerby->place3 == 2) // Win - { - VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); - } - else if (sDerby->place3 == 1) // Second - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose - } - else - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); - } - } - else if (sDerby->RacerSelected == 4) - { - if (sDerby->place4 == 2) // Win - { - VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); - } - else if (sDerby->place4 == 1) // Second - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose - } - else - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); - } - } - else if (sDerby->RacerSelected == 5) - { - if (sDerby->place5 == 2) // Win - { - VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); - } - else if (sDerby->place5 == 1) // Second - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose - } - else - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); - } - } - else if (sDerby->RacerSelected == 6) - { - if (sDerby->place6 == 2) // Win - { - VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); - } - else if (sDerby->place6 == 1) // Second - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); // Lose - } - else - { - VarSet(GAME_CORNER_VAR_WINNINGS, 0); - } - } - PlaySE(SE_APPLAUSE); - - LoadSpritePalettes(sSpritePalettes2); - LoadCompressedSpriteSheet(&sSpriteSheet_Clefairy); - - sDerby->ClefSpriteId = CreateSprite(&sSpriteTemplate_Clefairy, sDerby->CountdownX, sDerby->CountdownY, 0); - FlagClear(DERBY_FLAG_RESET); - FlagClear(DERBY_FLAG_NICKNAME); - sDerby->delay = 120; - sDerby->state = DERBY_STATE_FINAL_DELAY; - } - break; - case DERBY_STATE_FINAL_DELAY: - if (sDerby->delay == 0) - { - sDerby->state = DERBY_STATE_START_EXIT; - } - else - { - sDerby->delay--; - } - break; + case DERBY_STATE_BET_2_START: + UpdateBetBG(); + HideBetSprites(); + sDerby->Menu = 1; + sDerby->RacerSelected = sDerby->MenuPosition + 1; + sDerby->state = DERBY_STATE_BET_2; + break; + case DERBY_STATE_BET_2: + HandleInput2(); + break; + case DERBY_STATE_RACE_DELAY: + if (sDerby->delay != 0) + { + sDerby->delay--; + } + else + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sDerby->state = DERBY_STATE_START_FADE; + } + break; + case DERBY_STATE_START_FADE: + if (!gPaletteFade.active) + { + PlayBGM(MUS_RG_CYCLING); + InitRacetrack(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sDerby->state = DERBY_STATE_FADEIN; + } + break; + case DERBY_STATE_FADEIN: + if (!gPaletteFade.active) + { + sDerby->delay = 30; + sDerby->state = DERBY_STATE_DELAY_2; + } + break; + case DERBY_STATE_DELAY_2: + if (sDerby->delay != 0) + { + sDerby->delay--; + } + else + { + sDerby->delay = 60; + sDerby->Timer = 3; + sDerby->Swap1 = 1; + sDerby->Swap2 = 0; + sDerby->CountdownX = 120; + sDerby->CountdownY = 76; + PlaySE(SE_CONTEST_PLACE); // 3 + + LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_3); + sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_3, sDerby->CountdownX, sDerby->CountdownY, 0); + + sDerby->state = DERBY_STATE_COUNTDOWN; + } + break; + case DERBY_STATE_COUNTDOWN: + if ((sDerby->Timer > 0) && (sDerby->Swap1 == 1) && (sDerby->Swap2 == 0)) + { + if (sDerby->delay > 0) + { + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + sDerby->Timer--; // 2 + sDerby->Swap2 = 1; + } + } + else if ((sDerby->Timer > 0) && (sDerby->Swap1 > 0) && (sDerby->Swap2 > 0)) + { + PlaySE(SE_CONTEST_PLACE); // 2 + + DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_2); + + sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_2, sDerby->CountdownX, sDerby->CountdownY, 0); + + sDerby->delay = 60; + sDerby->Swap1 = 0; + sDerby->Swap2 = 0; + } + else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 0) && (sDerby->Swap2 == 0)) + { + if (sDerby->delay > 0) + { + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + sDerby->Timer--; // 1 + sDerby->Swap2 = 1; + } + } + else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 0) && (sDerby->Swap2 == 1)) + { + PlaySE(SE_CONTEST_PLACE); // 1 + + DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Countdown_1); + + sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Countdown_1, sDerby->CountdownX, sDerby->CountdownY, 0); + + sDerby->delay = 60; + sDerby->Swap1 = 2; + sDerby->Swap2 = 0; + } + else if ((sDerby->Timer > 0) && (sDerby->Swap1 == 2) && (sDerby->Swap2 == 0)) + { + if (sDerby->delay > 0) + { + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + sDerby->Timer--; // 1 + sDerby->Swap2 = 3; + } + } + else if (sDerby->Timer == 0) + { + if ((sDerby->Swap2 == 3) && (sDerby->delay == 0)) + { + PlaySE(SE_EXP_MAX); + + DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Go); + + sDerby->CountdownSpriteId = CreateSprite(&sSpriteTemplate_Go, sDerby->CountdownX, sDerby->CountdownY, 0); + + sDerby->Swap2 = 4; + sDerby->delay = 60; + + } + else if (sDerby->delay > 0) + { + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + DestroySpriteAndFreeResources(&gSprites[sDerby->CountdownSpriteId]); + if (sDerby->racerSpecies[DERBY_RACER_1] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite1].animNum = 1; + } + if (sDerby->racerSpecies[DERBY_RACER_2] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite2].animNum = 1; + } + if (sDerby->racerSpecies[DERBY_RACER_3] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite3].animNum = 1; + } + if (sDerby->racerSpecies[DERBY_RACER_4] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite4].animNum = 1; + } + if (sDerby->racerSpecies[DERBY_RACER_5] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite5].animNum = 1; + } + if (sDerby->racerSpecies[DERBY_RACER_6] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite6].animNum = 1; + } + sDerby->frames = 3; + sDerby->delay = 15; + sDerby->state = DERBY_STATE_RACE_START; + } + } + break; + case DERBY_STATE_RACE_START: + if (sDerby->frames == 0) + { + if (sDerby->racerSpecies[DERBY_RACER_1] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite1].x = gSprites[sDerby->RacerSprite1].x - (sDerby->racerSpeedStart[DERBY_RACER_1] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_2] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite2].x = gSprites[sDerby->RacerSprite2].x - (sDerby->racerSpeedStart[DERBY_RACER_2] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_3] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite3].x = gSprites[sDerby->RacerSprite3].x - (sDerby->racerSpeedStart[DERBY_RACER_3] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_4] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite4].x = gSprites[sDerby->RacerSprite4].x - (sDerby->racerSpeedStart[DERBY_RACER_4] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_5] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite5].x = gSprites[sDerby->RacerSprite5].x - (sDerby->racerSpeedStart[DERBY_RACER_5] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_6] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite6].x = gSprites[sDerby->RacerSprite6].x - (sDerby->racerSpeedStart[DERBY_RACER_6] / 2); + } + + if (sDerby->RacerSelected == 1) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite1].x; + } + else if (sDerby->RacerSelected == 2) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite2].x; + } + else if (sDerby->RacerSelected == 3) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite3].x; + } + else if (sDerby->RacerSelected == 4) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite4].x; + } + else if (sDerby->RacerSelected == 5) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite5].x; + } + else if (sDerby->RacerSelected == 6) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite6].x; + } + + sDerby->frames = 3; + sDerby->delay--; + } + else if (sDerby->delay == 0) + { + sDerby->state = DERBY_STATE_RACE_MID; + } + sDerby->frames--; + break; + case DERBY_STATE_RACE_MID: + if ((gSprites[sDerby->RacerSprite1].x > 16) && + (gSprites[sDerby->RacerSprite2].x > 16) && + (gSprites[sDerby->RacerSprite3].x > 16) && + (gSprites[sDerby->RacerSprite4].x > 16) && + (gSprites[sDerby->RacerSprite5].x > 16) && + (gSprites[sDerby->RacerSprite6].x > 16)) + { + if (sDerby->frames == 0) + { + if (sDerby->racerSpecies[DERBY_RACER_1] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite1].x = gSprites[sDerby->RacerSprite1].x - (sDerby->racerSpeedRace[DERBY_RACER_1] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_2] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite2].x = gSprites[sDerby->RacerSprite2].x - (sDerby->racerSpeedRace[DERBY_RACER_2] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_3] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite3].x = gSprites[sDerby->RacerSprite3].x - (sDerby->racerSpeedRace[DERBY_RACER_3] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_4] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite4].x = gSprites[sDerby->RacerSprite4].x - (sDerby->racerSpeedRace[DERBY_RACER_4] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_5] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite5].x = gSprites[sDerby->RacerSprite5].x - (sDerby->racerSpeedRace[DERBY_RACER_5] / 2); + } + if (sDerby->racerSpecies[DERBY_RACER_6] != DERBY_SPECIES_FEEBAS) + { + gSprites[sDerby->RacerSprite6].x = gSprites[sDerby->RacerSprite6].x - (sDerby->racerSpeedRace[DERBY_RACER_6] / 2); + } + + if (sDerby->RacerSelected == 1) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite1].x; + } + else if (sDerby->RacerSelected == 2) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite2].x; + } + else if (sDerby->RacerSelected == 3) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite3].x; + } + else if (sDerby->RacerSelected == 4) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite4].x; + } + else if (sDerby->RacerSelected == 5) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite5].x; + } + else if (sDerby->RacerSelected == 6) + { + gSprites[sDerby->CursorSpriteId].x = gSprites[sDerby->RacerSprite6].x; + } + + sDerby->frames = 3; + } + sDerby->frames--; + } + else + { + PlayBGM(MUS_NONE); + AssignRacerPlacements(); + if (sDerby->RacerSelected == 1) + { + if (sDerby->place1 == 2) // Win + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + else + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + else if (sDerby->RacerSelected == 2) + { + if (sDerby->place2 == 2) // Win + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + else + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + else if (sDerby->RacerSelected == 3) + { + if (sDerby->place3 == 2) // Win + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + else + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + else if (sDerby->RacerSelected == 4) + { + if (sDerby->place4 == 2) // Win + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + else + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + else if (sDerby->RacerSelected == 5) + { + if (sDerby->place5 == 2) // Win + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + else + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + else if (sDerby->RacerSelected == 6) + { + if (sDerby->place6 == 2) // Win + VarSet(GAME_CORNER_VAR_WINNINGS, sDerby->PotentialWin); + else + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + } + PlaySE(SE_APPLAUSE); + + LoadSpritePalettes(sSpritePalettes2); + LoadCompressedSpriteSheet(&sSpriteSheet_Clefairy); + + sDerby->ClefSpriteId = CreateSprite(&sSpriteTemplate_Clefairy, sDerby->CountdownX, sDerby->CountdownY, 0); + FlagClear(DERBY_FLAG_RESET); + FlagClear(DERBY_FLAG_NICKNAME); + sDerby->delay = 120; + sDerby->state = DERBY_STATE_FINAL_DELAY; + } + break; + case DERBY_STATE_FINAL_DELAY: + if (sDerby->delay == 0) + { + sDerby->state = DERBY_STATE_START_EXIT; + } + else + { + sDerby->delay--; + } + break; case DERBY_STATE_START_EXIT: StartExitDerby(); break; @@ -5190,74 +3479,52 @@ static void DerbyMain(u8 taskId) } static void InitDerbyScreen(void) -{ - int i; +{ + int i; SetVBlankCallback(NULL); ResetAllBgsCoordinates(); ResetVramOamAndBgCntRegs(); ResetBgsAndClearDma3BusyFlags(0); ResetTempTileDataBuffers(); - InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); - SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img, 0x1940, 0, 0); - CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Derby_BG_Bet_Pal, 0, sizeof(Derby_BG_Bet_Pal)); - ResetSpriteData(); + InitBgsFromTemplates(0, sDerbyBGtemplates, ARRAY_COUNT(sDerbyBGtemplates)); + SetBgTilemapBuffer(DERBY_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(DERBY_BG_BASE, Derby_BG_Bet_Img, 0x1940, 0, 0); + CopyToBgTilemapBuffer(DERBY_BG_BASE, Derby_BG_Bet_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Derby_BG_Bet_Pal, 0, sizeof(Derby_BG_Bet_Pal)); + ResetSpriteData(); FreeAllSpritePalettes(); - - if (FlagGet(DERBY_FLAG_RESET) == 0) - { - GetNewDerby(); - } - InitiateRacers(); - for (i = 0; i < 6; i++) { - if (i == 0) - { - GetRacerSpeeds(sDerby->Species_1, i); - } - else if (i == 1) - { - GetRacerSpeeds(sDerby->Species_2, i); - } - else if (i == 2) - { - GetRacerSpeeds(sDerby->Species_3, i); - } - else if (i == 3) - { - GetRacerSpeeds(sDerby->Species_4, i); - } - else if (i == 4) - { - GetRacerSpeeds(sDerby->Species_5, i); - } - else if (i == 5) - { - GetRacerSpeeds(sDerby->Species_6, i); - } - } - - LoadSpritePalettes(sSpritePalettes); - CreatePokemonSprites(); - CreateMenuData(); - CreateArrows(); - CreateCreditIcon(); - CreateCreditSprites(); - SetCreditDigits(GetCoins()); - CreateBetSprites(); - SetBetDigits(0); - CreatePotentialSprites(); - SetPotentialDigits(0); - - UpdatePokemonData(); - - CopyBgTilemapBufferToVram(DERBY_BG_BASE); - CopyBgTilemapBufferToVram(DERBY_MENUS); + + if (!FlagGet(DERBY_FLAG_RESET)) + { + GetNewDerby(); + } + InitiateRacers(); + for (i = DERBY_RACER_1; i < DERBY_RACER_COUNT; i++) + { + GetRacerSpeeds(sDerby->racerSpecies[i], i); + } + + LoadSpritePalettes(sSpritePalettes); + CreatePokemonSprites(); + CreateMenuData(); + CreateArrows(); + CreateCreditIcon(); + CreateCreditSprites(); + SetCreditDigits(GetCoins()); + CreateBetSprites(); + SetBetDigits(0); + CreatePotentialSprites(); + SetPotentialDigits(0); + + UpdatePokemonData(); + + CopyBgTilemapBufferToVram(DERBY_BG_BASE); + CopyBgTilemapBufferToVram(DERBY_MENUS); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); ShowBg(DERBY_BG_BASE); - ShowBg(DERBY_MENUS); + ShowBg(DERBY_MENUS); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetVBlankCallback(DerbyVBlankCallback); SetMainCallback2(DerbyMainCallback); From d83ec9c19327ffd4d5ad2e37e2eece7b68326e97 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 6 May 2025 18:14:36 -0400 Subject: [PATCH 009/429] Blackjack edit --- include/config/game_corner_expansion.h | 11 - include/game_corner_blackjack.h | 6 - src/game_corner_blackjack.c | 2581 +++++++++++++----------- 3 files changed, 1371 insertions(+), 1227 deletions(-) diff --git a/include/config/game_corner_expansion.h b/include/config/game_corner_expansion.h index 897207941421..0f5d4a0c1c11 100644 --- a/include/config/game_corner_expansion.h +++ b/include/config/game_corner_expansion.h @@ -6,17 +6,6 @@ #define FLAPPY_VAR_HIGH_SCORE VAR_ROUTE113_STATE -#define BLACKJACK_FLAG_INSURANCE FLAG_UNUSED_0x020 -#define BLACKJACK_FLAG_RESET FLAG_UNUSED_0x021 -#define BLACKJACK_FLAG_BLACKJACK FLAG_UNUSED_0x022 -#define BLACKJACK_VAR_PLAYER VAR_UNUSED_0x40F7 -#define BLACKJACK_VAR_DEALER VAR_UNUSED_0x40F8 -#define BLACKJACK_VAR_BET VAR_UNUSED_0x40F9 -#define BLACKJACK_VAR_OPTIONS VAR_UNUSED_0x40FA -#define BLACKJACK_VAR_OPTION1_TILE VAR_UNUSED_0x40FB -#define BLACKJACK_VAR_OPTION2_TILE VAR_UNUSED_0x40FC -#define BLACKJACK_VAR_OPTION3_TILE VAR_UNUSED_0x40FD - #define DERBY_FLAG_NICKNAME FLAG_UNUSED_0x023 #define DERBY_FLAG_RESET FLAG_UNUSED_0x024 #define DERBY_VAR_RACER_NAME_1 VAR_ROUTE105_STATE diff --git a/include/game_corner_blackjack.h b/include/game_corner_blackjack.h index b991249995ae..33df5f914128 100644 --- a/include/game_corner_blackjack.h +++ b/include/game_corner_blackjack.h @@ -2,11 +2,5 @@ #define GUARD_BLACKJACK_H void StartBlackJack(void); -static void BJMainCallback(void); -void ResetAllPicSprites(void); -void MainCB2_ReturnToField(void); -void ResetAllBgsCoordinatesAndBgCntRegs(void); -static void LoadCasinoSpriteGfx(void); -static void InitCasinoSprites(void); #endif // GUARD_BLACKJACK_H diff --git a/src/game_corner_blackjack.c b/src/game_corner_blackjack.c index 1e914f319cf9..51146e2dfbfe 100644 --- a/src/game_corner_blackjack.c +++ b/src/game_corner_blackjack.c @@ -38,67 +38,67 @@ enum { - HIT_0, - HIT_1, - HIT_2, + HIT_PLAY_CARD, + HIT_1, + HIT_CHECK_SCORE, }; enum { DOUBLE_0, - DOUBLE_1, - DOUBLE_2, - DOUBLE_3, - DOUBLE_4, + DOUBLE_1, + DOUBLE_2, + DOUBLE_3, + DOUBLE_4, }; enum { hitBJ_0, - hitBJ_1, - hitBJ_2, + hitBJ_1, + hitBJ_2, }; enum { STAND_0, - STAND_1, - STAND_2, - STAND_3, - STAND_4, - STAND_5, + STAND_1, + STAND_CHECK_INSURANCE, + STAND_3, + STAND_4, + STAND_5, }; enum { WIN_0, - WIN_1, - WIN_2, - WIN_3, - WIN_4, + WIN_1, + WIN_2, + WIN_3, + WIN_4, }; enum { LOSE_0, - LOSE_1, - LOSE_2, + LOSE_1, + LOSE_2, }; enum { BUST_0, - BUST_1, - BUST_2, + BUST_1, + BUST_2, }; enum { PUSH_0, - PUSH_1, - PUSH_2, - PUSH_3, - PUSH_4, + PUSH_1, + PUSH_2, + PUSH_3, + PUSH_4, }; enum @@ -124,9 +124,74 @@ enum { }; enum { - SPR_DEALER_DIG_1, + SPR_DEALER_DIG_1, SPR_DEALER_DIG_10, }; +// 0 = Bet, 1 = Hit, 2 = Double, 3 = Insurance, 4 = None +enum +{ + OPTION_BET, + OPTION_HIT, + OPTION_DOUBLE, + OPTION_INSURANCE, + OPTION_NONE, +}; + +enum { + CARD_HEARTS_2, + CARD_HEARTS_3, + CARD_HEARTS_4, + CARD_HEARTS_5, + CARD_HEARTS_6, + CARD_HEARTS_7, + CARD_HEARTS_8, + CARD_HEARTS_9, + CARD_HEARTS_10, + CARD_HEARTS_JACK, + CARD_HEARTS_QUEEN, + CARD_HEARTS_KING, + CARD_HEARTS_ACE, + CARD_CLUBS_2, + CARD_CLUBS_3, + CARD_CLUBS_4, + CARD_CLUBS_5, + CARD_CLUBS_6, + CARD_CLUBS_7, + CARD_CLUBS_8, + CARD_CLUBS_9, + CARD_CLUBS_10, + CARD_CLUBS_JACK, + CARD_CLUBS_QUEEN, + CARD_CLUBS_KING, + CARD_CLUBS_ACE, + CARD_DIAMONDS_2, + CARD_DIAMONDS_3, + CARD_DIAMONDS_4, + CARD_DIAMONDS_5, + CARD_DIAMONDS_6, + CARD_DIAMONDS_7, + CARD_DIAMONDS_8, + CARD_DIAMONDS_9, + CARD_DIAMONDS_10, + CARD_DIAMONDS_JACK, + CARD_DIAMONDS_QUEEN, + CARD_DIAMONDS_KING, + CARD_DIAMONDS_ACE, + CARD_SPADES_2, + CARD_SPADES_3, + CARD_SPADES_4, + CARD_SPADES_5, + CARD_SPADES_6, + CARD_SPADES_7, + CARD_SPADES_8, + CARD_SPADES_9, + CARD_SPADES_10, + CARD_SPADES_JACK, + CARD_SPADES_QUEEN, + CARD_SPADES_KING, + CARD_SPADES_ACE, + CARD_COUNT, +}; #define SPR_CREDIT_DIGITS SPR_CREDIT_DIG_1 #define SPR_PLAYER_DIGITS SPR_PLAYER_DIG_1 @@ -137,15 +202,6 @@ enum { #define SPR_CREDIT_DIG_100 2 #define SPR_CREDIT_DIG_1000 3 -#define hitState HIT_0 -#define doubleState DOUBLE_0 -#define hitBJState hitBJ_0 -#define standState STAND_0 -#define winState WIN_0 -#define loseState LOSE_0 -#define bustState BUST_0 -#define pushState PUSH_0 - #define MAX_SPRITES_CREDIT 4 #define MAX_SPRITES_PLAYER 2 #define MAX_SPRITES_DEALER 2 @@ -153,57 +209,68 @@ enum { #define MAX_PLAYER_CARDS 9 #define MAX_DEALER_CARDS 9 +#define CARD_SCORE_2 2 +#define CARD_SCORE_3 3 +#define CARD_SCORE_4 4 +#define CARD_SCORE_5 5 +#define CARD_SCORE_6 6 +#define CARD_SCORE_7 7 +#define CARD_SCORE_8 8 +#define CARD_SCORE_9 9 +#define CARD_SCORE_10 10 +#define CARD_SCORE_FACE 10 +#define CARD_SCORE_ACE 0 + +#define CARD_SCORE_ACE_EXPANDED 11 +#define CARD_SCORE_ACE_SHURNK 1 +#define CARD_SCORE_BLACK_JACK 21 + struct BlackJack { u8 state; - // + // u8 numPlayerCards; u8 numDealerCards; - // - u8 cursorSpriteId; - // - u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; - u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; - u8 DealerSpriteIds[MAX_SPRITES_DEALER]; - // - u8 option1SpriteId; - u8 option2SpriteId; - u8 option3SpriteId; - // Player card IDs and numbers (to store their sprites and values) - u8 playerCardIds[MAX_PLAYER_CARDS]; - u8 playerCardNumbers[MAX_PLAYER_CARDS]; - - // Dealer card IDs and numbers - u8 dealerCardIds[MAX_DEALER_CARDS]; - u8 dealerCardNumbers[MAX_DEALER_CARDS]; - // Facedown Sprite ID - u8 DealerFaceDownId; - // - u8 CurrentLoadedSuit; - // - u8 LogoId; - - // Ace Values (1 or 11) - u8 AceHearts; - u8 AceDiamonds; - u8 AceClubs; - u8 AceSpades; - // - u8 AceAdjustPlayer; - u8 AceAdjustDealer; - // - u32 waitTimer; - // - u8 hitState; - u8 doubleState; - u8 hitBJState; - u8 standState; - u8 winState; - u8 loseState; - u8 bustState; - u8 pushState; - // - u8 exitToggle; - // + u8 cursorSpriteId; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 PlayerSpriteIds[MAX_SPRITES_PLAYER]; + u8 DealerSpriteIds[MAX_SPRITES_DEALER]; + u8 option1SpriteId; + u8 option2SpriteId; + u8 option3SpriteId; + // Player card IDs and numbers (to store their sprites and values) + u8 playerCardIds[MAX_PLAYER_CARDS]; + u8 playerCardNumbers[MAX_PLAYER_CARDS]; + + // Dealer card IDs and numbers + u8 dealerCardIds[MAX_DEALER_CARDS]; + u8 dealerCardNumbers[MAX_DEALER_CARDS]; + // Facedown Sprite ID + u8 DealerFaceDownId; + u8 LogoId; + + u32 waitTimer; + u8 hitState; + u8 doubleState; + u8 hitBJState; + u8 standState; + u8 winState; + u8 loseState; + u8 bustState; + u8 pushState; + u8 hasBlackJack:1; + u8 clearBlackJack:1; + u8 insuranceBet:1; + u8 AceAdjustPlayer:1; + u8 AceAdjustDealer:1; + u8 optionMode:3; + u8 exitToggle:1; + u8 unused:7; + u8 dealerScore; + u8 playerScore; + u16 betBlackJack; + u16 optionTileNum1; + u16 optionTileNum2; + u16 optionTileNum3; }; static EWRAM_DATA struct BlackJack *sBlackJack = NULL; @@ -216,10 +283,6 @@ static void CreateCursorSprite(void); static void CreateOptions(void); static void AdjustCards(void); static void CreateFacedown(void); -static void LoadHeartsSpriteSheet(void); -static void LoadDiamondsSpriteSheet(void); -static void LoadClubsSpriteSheet(void); -static void LoadSpadesSpriteSheet(void); static void ShuffleCards(void); static void UpdateCards(void); static void SetCardSprite(u8 cardId, u8 cardNum, u8 cardIndex, u8 isPlayerCard); @@ -240,7 +303,7 @@ static const u8 sText_Push[] = _("PUSH!"); static const u8 sText_BlackJack[] = _("BLACKJACK!"); static const u8 sText_Betting[] = _("Your current\nbet is ¥{STR_VAR_1}."); static const u8 sText_NoBetting[] = _("Your current\nbet is ¥0."); -static const u8 sText_NoMoney[] = _("You do not have\nenough COINS."); +static const u8 sText_NoCoins[] = _("You do not have\nenough Coins."); static const u8 sHelpBarHitStandText[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}SELECT {B_BUTTON}EXIT"); static const u32 sBJBackgroundGfx[] = INCBIN_U32("graphics/blackjack/background_tiles.4bpp.lz"); @@ -323,13 +386,6 @@ static const u16 sCursorTiles_Pal[] = INCBIN_U16("graphics/blackjack/cursor.gbap static const u32 sPopup_Gfx[] = INCBIN_U32("graphics/blackjack/popup.4bpp.lz"); static void ShowHelpBar(const u8 *str); -static void ShowHit(const u8 *str); -static void ShowStand(const u8 *str); -static void ShowDouble(const u8 *str); -static void ShowInsurance(const u8 *str); -static void ShowPlus(const u8 *str); -static void ShowMinus(const u8 *str); -static void ShowBet(const u8 *str); static void SetCreditDigits(u16); static void SetPlayerDigits(u16); static void SetDealerDigits(u16); @@ -341,11 +397,10 @@ static void CreatePopUpSprite(); #define BJ_BG_BASE 1 #define BJ_WIN_MENU 2 -static const u8 cardPoints[52] = { - 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 0, // Hearts (0-12) - 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 0, // Diamonds (13-25) - 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 0, // Clubs (26-38) - 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 0, // Spades (39-51) +struct PlayingCard { + u8 points; + const struct CompressedSpriteSheet sheet; + const struct SpriteTemplate template; }; struct CardPosition { @@ -395,15 +450,15 @@ static const struct WindowTemplate sBJWinTemplates[] = { .paletteNum = 11, .baseBlock = 0x73, }, - { + { .bg = BJ_WIN_MENU, .tilemapLeft = 3, .tilemapTop = 15, .width = 14, .height = 4, .paletteNum = 0xF, - .baseBlock = 0x194, - }, + .baseBlock = 0x194, + }, DUMMY_WIN_TEMPLATE, }; @@ -494,18 +549,18 @@ static const struct WindowTemplate sBJWinTemplates[] = { static const struct SpritePalette sSpritePalettes[] = { { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, - { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, - { .data = sDealer_Pal, .tag = PALTAG_INTERFACEDEALER }, - { .data = sCursorTiles_Pal, .tag = PALTAG_CURSOR }, - { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION1 }, - { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION2 }, - { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION3 }, - { .data = sCards_Pal, .tag = PALTAG_CARDS_HEARTS }, - { .data = sCards_Pal, .tag = PALTAG_FACEDOWN }, - { .data = sCards_Pal, .tag = PALTAG_CARDS_CLUBS }, - { .data = sCards_Pal, .tag = PALTAG_CARDS_DIAMONDS }, - { .data = sCards_Pal, .tag = PALTAG_CARDS_SPADES }, - { .data = sCursorTiles_Pal, .tag = PALTAG_POPUP }, + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = sDealer_Pal, .tag = PALTAG_INTERFACEDEALER }, + { .data = sCursorTiles_Pal, .tag = PALTAG_CURSOR }, + { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION1 }, + { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION2 }, + { .data = sCursorTiles_Pal, .tag = PALTAG_OPTION3 }, + { .data = sCards_Pal, .tag = PALTAG_CARDS_HEARTS }, + { .data = sCards_Pal, .tag = PALTAG_FACEDOWN }, + { .data = sCards_Pal, .tag = PALTAG_CARDS_CLUBS }, + { .data = sCards_Pal, .tag = PALTAG_CARDS_DIAMONDS }, + { .data = sCards_Pal, .tag = PALTAG_CARDS_SPADES }, + { .data = sCursorTiles_Pal, .tag = PALTAG_POPUP }, {} }; @@ -921,7 +976,7 @@ static const struct OamData sOamData_Cards_Hearts = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -931,7 +986,7 @@ static const struct OamData sOamData_Cards_Diamonds = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -941,7 +996,7 @@ static const struct OamData sOamData_Cards_Clubs = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -951,7 +1006,7 @@ static const struct OamData sOamData_Cards_Spades = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -961,7 +1016,7 @@ static const struct OamData sOamData_Facedown = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x64), .size = SPRITE_SIZE(32x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -971,7 +1026,7 @@ static const struct OamData sOamData_Cursor = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -981,7 +1036,7 @@ static const struct OamData sOamData_Popup = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -991,7 +1046,7 @@ static const struct OamData sOamData_Option1 = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1001,7 +1056,7 @@ static const struct OamData sOamData_Option2 = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1011,7 +1066,7 @@ static const struct OamData sOamData_Option3 = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -1653,16 +1708,331 @@ static const struct SpriteTemplate sSpriteTemplate_Option3 = .callback = SpriteCallbackDummy, }; +const struct PlayingCard sPlayingCards[CARD_COUNT] = +{ + [CARD_HEARTS_2] = + { + .points = CARD_SCORE_2, + .sheet = sSpriteSheet_Cards_Hearts_2, + .template = sSpriteTemplate_Cards_Hearts_2, + }, + [CARD_HEARTS_3] = + { + .points = CARD_SCORE_3, + .sheet = sSpriteSheet_Cards_Hearts_3, + .template = sSpriteTemplate_Cards_Hearts_3, + }, + [CARD_HEARTS_4] = + { + .points = CARD_SCORE_4, + .sheet = sSpriteSheet_Cards_Hearts_4, + .template = sSpriteTemplate_Cards_Hearts_4, + }, + [CARD_HEARTS_5] = + { + .points = CARD_SCORE_5, + .sheet = sSpriteSheet_Cards_Hearts_5, + .template = sSpriteTemplate_Cards_Hearts_5, + }, + [CARD_HEARTS_6] = + { + .points = CARD_SCORE_6, + .sheet = sSpriteSheet_Cards_Hearts_6, + .template = sSpriteTemplate_Cards_Hearts_6, + }, + [CARD_HEARTS_7] = + { + .points = CARD_SCORE_7, + .sheet = sSpriteSheet_Cards_Hearts_7, + .template = sSpriteTemplate_Cards_Hearts_7, + }, + [CARD_HEARTS_8] = + { + .points = CARD_SCORE_8, + .sheet = sSpriteSheet_Cards_Hearts_8, + .template = sSpriteTemplate_Cards_Hearts_8, + }, + [CARD_HEARTS_9] = + { + .points = CARD_SCORE_9, + .sheet = sSpriteSheet_Cards_Hearts_9, + .template = sSpriteTemplate_Cards_Hearts_9, + }, + [CARD_HEARTS_10] = + { + .points = CARD_SCORE_10, + .sheet = sSpriteSheet_Cards_Hearts_10, + .template = sSpriteTemplate_Cards_Hearts_10, + }, + [CARD_HEARTS_JACK] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Hearts_J, + .template = sSpriteTemplate_Cards_Hearts_J, + }, + [CARD_HEARTS_QUEEN] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Hearts_Q, + .template = sSpriteTemplate_Cards_Hearts_Q, + }, + [CARD_HEARTS_KING] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Hearts_K, + .template = sSpriteTemplate_Cards_Hearts_K, + }, + [CARD_HEARTS_ACE] = + { + .points = CARD_SCORE_ACE, + .sheet = sSpriteSheet_Cards_Hearts_A, + .template = sSpriteTemplate_Cards_Hearts_A, + }, + [CARD_CLUBS_2] = + { + .points = CARD_SCORE_2, + .sheet = sSpriteSheet_Cards_Clubs_2, + .template = sSpriteTemplate_Cards_Clubs_2, + }, + [CARD_CLUBS_3] = + { + .points = CARD_SCORE_3, + .sheet = sSpriteSheet_Cards_Clubs_3, + .template = sSpriteTemplate_Cards_Clubs_3, + }, + [CARD_CLUBS_4] = + { + .points = CARD_SCORE_4, + .sheet = sSpriteSheet_Cards_Clubs_4, + .template = sSpriteTemplate_Cards_Clubs_4, + }, + [CARD_CLUBS_5] = + { + .points = CARD_SCORE_5, + .sheet = sSpriteSheet_Cards_Clubs_5, + .template = sSpriteTemplate_Cards_Clubs_5, + }, + [CARD_CLUBS_6] = + { + .points = CARD_SCORE_6, + .sheet = sSpriteSheet_Cards_Clubs_6, + .template = sSpriteTemplate_Cards_Clubs_6, + }, + [CARD_CLUBS_7] = + { + .points = CARD_SCORE_7, + .sheet = sSpriteSheet_Cards_Clubs_7, + .template = sSpriteTemplate_Cards_Clubs_7, + }, + [CARD_CLUBS_8] = + { + .points = CARD_SCORE_8, + .sheet = sSpriteSheet_Cards_Clubs_8, + .template = sSpriteTemplate_Cards_Clubs_8, + }, + [CARD_CLUBS_9] = + { + .points = CARD_SCORE_9, + .sheet = sSpriteSheet_Cards_Clubs_9, + .template = sSpriteTemplate_Cards_Clubs_9, + }, + [CARD_CLUBS_10] = + { + .points = CARD_SCORE_10, + .sheet = sSpriteSheet_Cards_Clubs_10, + .template = sSpriteTemplate_Cards_Clubs_10, + }, + [CARD_CLUBS_JACK] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Clubs_J, + .template = sSpriteTemplate_Cards_Clubs_J, + }, + [CARD_CLUBS_QUEEN] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Clubs_Q, + .template = sSpriteTemplate_Cards_Clubs_Q, + }, + [CARD_CLUBS_KING] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Clubs_K, + .template = sSpriteTemplate_Cards_Clubs_K, + }, + [CARD_CLUBS_ACE] = + { + .points = CARD_SCORE_ACE, + .sheet = sSpriteSheet_Cards_Clubs_A, + .template = sSpriteTemplate_Cards_Clubs_A, + }, + [CARD_DIAMONDS_2] = + { + .points = CARD_SCORE_2, + .sheet = sSpriteSheet_Cards_Diamonds_2, + .template = sSpriteTemplate_Cards_Diamonds_2, + }, + [CARD_DIAMONDS_3] = + { + .points = CARD_SCORE_3, + .sheet = sSpriteSheet_Cards_Diamonds_3, + .template = sSpriteTemplate_Cards_Diamonds_3, + }, + [CARD_DIAMONDS_4] = + { + .points = CARD_SCORE_4, + .sheet = sSpriteSheet_Cards_Diamonds_4, + .template = sSpriteTemplate_Cards_Diamonds_4, + }, + [CARD_DIAMONDS_5] = + { + .points = CARD_SCORE_5, + .sheet = sSpriteSheet_Cards_Diamonds_5, + .template = sSpriteTemplate_Cards_Diamonds_5, + }, + [CARD_DIAMONDS_6] = + { + .points = CARD_SCORE_6, + .sheet = sSpriteSheet_Cards_Diamonds_6, + .template = sSpriteTemplate_Cards_Diamonds_6, + }, + [CARD_DIAMONDS_7] = + { + .points = CARD_SCORE_7, + .sheet = sSpriteSheet_Cards_Diamonds_7, + .template = sSpriteTemplate_Cards_Diamonds_7, + }, + [CARD_DIAMONDS_8] = + { + .points = CARD_SCORE_8, + .sheet = sSpriteSheet_Cards_Diamonds_8, + .template = sSpriteTemplate_Cards_Diamonds_8, + }, + [CARD_DIAMONDS_9] = + { + .points = CARD_SCORE_9, + .sheet = sSpriteSheet_Cards_Diamonds_9, + .template = sSpriteTemplate_Cards_Diamonds_9, + }, + [CARD_DIAMONDS_10] = + { + .points = CARD_SCORE_10, + .sheet = sSpriteSheet_Cards_Diamonds_10, + .template = sSpriteTemplate_Cards_Diamonds_10, + }, + [CARD_DIAMONDS_JACK] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Diamonds_J, + .template = sSpriteTemplate_Cards_Diamonds_J, + }, + [CARD_DIAMONDS_QUEEN] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Diamonds_Q, + .template = sSpriteTemplate_Cards_Diamonds_Q, + }, + [CARD_DIAMONDS_KING] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Diamonds_K, + .template = sSpriteTemplate_Cards_Diamonds_K, + }, + [CARD_DIAMONDS_ACE] = + { + .points = CARD_SCORE_ACE, + .sheet = sSpriteSheet_Cards_Diamonds_A, + .template = sSpriteTemplate_Cards_Diamonds_A, + }, + [CARD_SPADES_2] = + { + .points = CARD_SCORE_2, + .sheet = sSpriteSheet_Cards_Spades_2, + .template = sSpriteTemplate_Cards_Spades_2, + }, + [CARD_SPADES_3] = + { + .points = CARD_SCORE_3, + .sheet = sSpriteSheet_Cards_Spades_3, + .template = sSpriteTemplate_Cards_Spades_3, + }, + [CARD_SPADES_4] = + { + .points = CARD_SCORE_4, + .sheet = sSpriteSheet_Cards_Spades_4, + .template = sSpriteTemplate_Cards_Spades_4, + }, + [CARD_SPADES_5] = + { + .points = CARD_SCORE_5, + .sheet = sSpriteSheet_Cards_Spades_5, + .template = sSpriteTemplate_Cards_Spades_5, + }, + [CARD_SPADES_6] = + { + .points = CARD_SCORE_6, + .sheet = sSpriteSheet_Cards_Spades_6, + .template = sSpriteTemplate_Cards_Spades_6, + }, + [CARD_SPADES_7] = + { + .points = CARD_SCORE_7, + .sheet = sSpriteSheet_Cards_Spades_7, + .template = sSpriteTemplate_Cards_Spades_7, + }, + [CARD_SPADES_8] = + { + .points = CARD_SCORE_8, + .sheet = sSpriteSheet_Cards_Spades_8, + .template = sSpriteTemplate_Cards_Spades_8, + }, + [CARD_SPADES_9] = + { + .points = CARD_SCORE_9, + .sheet = sSpriteSheet_Cards_Spades_9, + .template = sSpriteTemplate_Cards_Spades_9, + }, + [CARD_SPADES_10] = + { + .points = CARD_SCORE_10, + .sheet = sSpriteSheet_Cards_Spades_10, + .template = sSpriteTemplate_Cards_Spades_10, + }, + [CARD_SPADES_JACK] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Spades_J, + .template = sSpriteTemplate_Cards_Spades_J, + }, + [CARD_SPADES_QUEEN] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Spades_Q, + .template = sSpriteTemplate_Cards_Spades_Q, + }, + [CARD_SPADES_KING] = + { + .points = CARD_SCORE_FACE, + .sheet = sSpriteSheet_Cards_Spades_K, + .template = sSpriteTemplate_Cards_Spades_K, + }, + [CARD_SPADES_ACE] = + { + .points = CARD_SCORE_ACE, + .sheet = sSpriteSheet_Cards_Spades_A, + .template = sSpriteTemplate_Cards_Spades_A, + }, +}; + void StartBlackJack(void) { - u8 taskId = 0; sBlackJack = AllocZeroed(sizeof(struct BlackJack)); - taskId = CreateTask(FadeToBJScreen, 0); + CreateTask(FadeToBJScreen, 0); } static void FadeToBJScreen(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].data[0]) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -1769,22 +2139,18 @@ static void SetCreditDigits(u16 num) u8 digit = num / d; gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; - gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.tileNum = - gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart + (digit * 2); - + gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].sheetTileStart + (digit * 2); gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 2; num = num % d; d = d / 10; } - for (i = 0; i < 4; i++) { - if (gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible == FALSE) { - - } else { + for (i = 0; i < 4; i++) + { + if (gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible) gSprites[sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].invisible = FALSE; - } } BuildOamBuffer(); @@ -1802,27 +2168,20 @@ static void SetPlayerDigits(u16 num) gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = FALSE; - if (i == 0 && isSingleDigit) { + if (i == 0 && isSingleDigit) digit = 0; - } - - else if (i == 1 && isSingleDigit) { + else if (i == 1 && isSingleDigit) digit = num; - } gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.tileNum = - gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].sheetTileStart + (digit * 2); + gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].sheetTileStart + (digit * 2); gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].oam.priority = 2; num = num % d; d = d / 10; - - if (isSingleDigit && i == 1) { - //gSprites[sBlackJack->PlayerSpriteIds[i + SPR_PLAYER_DIGITS]].invisible = TRUE; - } } - BuildOamBuffer(); + BuildOamBuffer(); } static void SetDealerDigits(u16 num) @@ -1837,27 +2196,20 @@ static void SetDealerDigits(u16 num) gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].invisible = FALSE; - if (i == 0 && isSingleDigit) { + if (i == 0 && isSingleDigit) digit = 0; - } - - else if (i == 1 && isSingleDigit) { + else if (i == 1 && isSingleDigit) digit = num; - } gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].oam.tileNum = - gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].sheetTileStart + (digit * 2); + gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].sheetTileStart + (digit * 2); gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].oam.priority = 2; num = num % d; d = d / 10; - - if (isSingleDigit && i == 1) { - //gSprites[sBlackJack->DealerSpriteIds[i + SPR_DEALER_DIGITS]].invisible = TRUE; - } } - BuildOamBuffer(); + BuildOamBuffer(); } static void CreateCreditSprites(void) @@ -1871,18 +2223,14 @@ static void CreateCreditSprites(void) for (i = 0; i < MAX_COIN_DIGITS; i++) { - if (i == 0){ - sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 188, 39, 2); - } - if (i == 1){ - sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 8 + 188, 39, 2); - } - if (i == 2){ - sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 16 + 188, 39, 2); - } - if (i == 3){ - sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 24 + 188, 39, 2); - } + if (i == 0) + sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 188, 39, 2); + if (i == 1) + sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 8 + 188, 39, 2); + if (i == 2) + sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 16 + 188, 39, 2); + if (i == 3) + sBlackJack->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, 24 + 188, 39, 2); } } @@ -1916,67 +2264,74 @@ static void CreateDealerSprites(void) } } -static void SetMode(u16 num) -{ - gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE)); - gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE)); - gSprites[sBlackJack->option3SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION3_TILE)); - - if (num == 0) // +100, -100, BET - { - gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE)); - gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE)); - gSprites[sBlackJack->option3SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION3_TILE)); - gSprites[sBlackJack->cursorSpriteId].y = 57; - gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; - gSprites[sBlackJack->option1SpriteId].invisible = FALSE; - gSprites[sBlackJack->option2SpriteId].invisible = FALSE; - gSprites[sBlackJack->option3SpriteId].invisible = FALSE; - } - if (num == 1) // HIT, STAND, NONE - { - gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE) + 8); - gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE) + 8); - gSprites[sBlackJack->cursorSpriteId].y = 57; - gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; - gSprites[sBlackJack->option1SpriteId].invisible = FALSE; - gSprites[sBlackJack->option2SpriteId].invisible = FALSE; - gSprites[sBlackJack->option3SpriteId].invisible = TRUE; - } - if (num == 2) // HIT, STAND, DOUBLE - { - gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE) + 8); - gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE) + 8); - gSprites[sBlackJack->option3SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION3_TILE) + 8); - gSprites[sBlackJack->cursorSpriteId].y = 57; - gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; - gSprites[sBlackJack->option1SpriteId].invisible = FALSE; - gSprites[sBlackJack->option2SpriteId].invisible = FALSE; - gSprites[sBlackJack->option3SpriteId].invisible = FALSE; - } - if (num == 3) // HIT, STAND, INSURE - { - gSprites[sBlackJack->option1SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION1_TILE) + 8); - gSprites[sBlackJack->option2SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION2_TILE) + 8); - gSprites[sBlackJack->option3SpriteId].oam.tileNum = (VarGet(BLACKJACK_VAR_OPTION3_TILE) + 16); - gSprites[sBlackJack->cursorSpriteId].y = 57; - gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; - gSprites[sBlackJack->option1SpriteId].invisible = FALSE; - gSprites[sBlackJack->option2SpriteId].invisible = FALSE; - gSprites[sBlackJack->option3SpriteId].invisible = FALSE; - } - if (num >= 4) // NONE, NONE, NONE - { - gSprites[sBlackJack->cursorSpriteId].invisible = TRUE; - gSprites[sBlackJack->option1SpriteId].invisible = TRUE; - gSprites[sBlackJack->option2SpriteId].invisible = TRUE; - gSprites[sBlackJack->option3SpriteId].invisible = TRUE; - } +static void SetMode(void) +{ + u32 num = sBlackJack->optionMode; + + gSprites[sBlackJack->option1SpriteId].oam.tileNum = sBlackJack->optionTileNum1; + gSprites[sBlackJack->option2SpriteId].oam.tileNum = sBlackJack->optionTileNum2; + gSprites[sBlackJack->option3SpriteId].oam.tileNum = sBlackJack->optionTileNum3; + + if (num == 0) // +100, -100, BET + { + gSprites[sBlackJack->option1SpriteId].oam.tileNum = sBlackJack->optionTileNum1; + gSprites[sBlackJack->option2SpriteId].oam.tileNum = sBlackJack->optionTileNum2; + gSprites[sBlackJack->option3SpriteId].oam.tileNum = sBlackJack->optionTileNum3; + gSprites[sBlackJack->cursorSpriteId].y = 57; + gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; + gSprites[sBlackJack->option1SpriteId].invisible = FALSE; + gSprites[sBlackJack->option2SpriteId].invisible = FALSE; + gSprites[sBlackJack->option3SpriteId].invisible = FALSE; + } + if (num == 1) // HIT, STAND, NONE + { + gSprites[sBlackJack->option1SpriteId].oam.tileNum = sBlackJack->optionTileNum1 + 8; + gSprites[sBlackJack->option2SpriteId].oam.tileNum = sBlackJack->optionTileNum2 + 8; + gSprites[sBlackJack->cursorSpriteId].y = 57; + gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; + gSprites[sBlackJack->option1SpriteId].invisible = FALSE; + gSprites[sBlackJack->option2SpriteId].invisible = FALSE; + gSprites[sBlackJack->option3SpriteId].invisible = TRUE; + } + if (num == 2) // HIT, STAND, DOUBLE + { + gSprites[sBlackJack->option1SpriteId].oam.tileNum = sBlackJack->optionTileNum1 + 8; + gSprites[sBlackJack->option2SpriteId].oam.tileNum = sBlackJack->optionTileNum2 + 8; + gSprites[sBlackJack->option3SpriteId].oam.tileNum = sBlackJack->optionTileNum3 + 8; + gSprites[sBlackJack->cursorSpriteId].y = 57; + gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; + gSprites[sBlackJack->option1SpriteId].invisible = FALSE; + gSprites[sBlackJack->option2SpriteId].invisible = FALSE; + gSprites[sBlackJack->option3SpriteId].invisible = FALSE; + } + if (num == 3) // HIT, STAND, INSURE + { + gSprites[sBlackJack->option1SpriteId].oam.tileNum = sBlackJack->optionTileNum1 + 8; + gSprites[sBlackJack->option2SpriteId].oam.tileNum = sBlackJack->optionTileNum2 + 8; + gSprites[sBlackJack->option3SpriteId].oam.tileNum = sBlackJack->optionTileNum3 + 16; + gSprites[sBlackJack->cursorSpriteId].y = 57; + gSprites[sBlackJack->cursorSpriteId].invisible = FALSE; + gSprites[sBlackJack->option1SpriteId].invisible = FALSE; + gSprites[sBlackJack->option2SpriteId].invisible = FALSE; + gSprites[sBlackJack->option3SpriteId].invisible = FALSE; + } + if (num >= 4) // NONE, NONE, NONE + { + gSprites[sBlackJack->cursorSpriteId].invisible = TRUE; + gSprites[sBlackJack->option1SpriteId].invisible = TRUE; + gSprites[sBlackJack->option2SpriteId].invisible = TRUE; + gSprites[sBlackJack->option3SpriteId].invisible = TRUE; + } } -static void InitBJScreen(void) -{ +static inline void SetOptionMode(u16 optionMode) +{ + sBlackJack->optionMode = optionMode; + SetMode(); +} +static void InitBJScreen(void) +{ SetVBlankCallback(NULL); ResetAllBgsCoordinates(); ResetVramOamAndBgCntRegs(); @@ -1990,79 +2345,70 @@ static void InitBJScreen(void) ResetPaletteFade(); LoadPalette(sBJBackgroundPalette, 0, sizeof(sBJBackgroundPalette)); - ResetSpriteData(); + ResetSpriteData(); FreeAllSpritePalettes(); - LoadSpritePalettes(sSpritePalettes); - - FlagClear(BLACKJACK_FLAG_INSURANCE); - VarSet(BLACKJACK_VAR_PLAYER, 0); - VarSet(BLACKJACK_VAR_DEALER, 0); - - if ((GetCoins()) >= 10) // If you can afford to play - { - VarSet(BLACKJACK_VAR_OPTIONS, 0); // 0 = Bet, 1 = Hit, 2 = Double, 3 = Insurance, 4 = None - } - else // Not enough coins - { - VarSet(BLACKJACK_VAR_OPTIONS, 4); // 0 = Bet, 1 = Hit, 2 = Double, 3 = Insurance, 4 = None - } - - FlagClear(BLACKJACK_FLAG_BLACKJACK); - CreateCreditSprites(); - - CreatePlayerSprites(); - CreateDealerSprites(); - SetCreditDigits(GetCoins()); - SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); - SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); - CreateCursorSprite(); - CreateOptions(); - VarSet(BLACKJACK_VAR_OPTION1_TILE, (gSprites[sBlackJack->option1SpriteId].oam.tileNum)); - VarSet(BLACKJACK_VAR_OPTION2_TILE, (gSprites[sBlackJack->option2SpriteId].oam.tileNum)); - VarSet(BLACKJACK_VAR_OPTION3_TILE, (gSprites[sBlackJack->option3SpriteId].oam.tileNum)); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - CreatePopUpSprite(); - - CreateFacedown(); - sBlackJack->numPlayerCards = 0; - sBlackJack->numDealerCards = 0; - sBlackJack->AceHearts = 11; - sBlackJack->AceDiamonds = 11; - sBlackJack->AceClubs = 11; - sBlackJack->AceSpades = 11; - sBlackJack->AceAdjustPlayer = 0; - sBlackJack->AceAdjustDealer = 0; - sBlackJack->exitToggle = 0; - AdjustCards(); - ShuffleCards(); - - gSprites[sBlackJack->CreditSpriteIds[0 + SPR_CREDIT_DIGITS]].x = 188; - - DeactivateAllTextPrinters(); - - - + LoadSpritePalettes(sSpritePalettes); + + sBlackJack->insuranceBet = FALSE; + sBlackJack->betBlackJack = 0; + sBlackJack->playerScore = 0; + sBlackJack->dealerScore = 0; + + if ((GetCoins()) >= 10) // If you can afford to play + sBlackJack->optionMode = OPTION_BET; + else // Not enough coins + sBlackJack->optionMode = OPTION_NONE; + + sBlackJack->hasBlackJack = FALSE; + CreateCreditSprites(); + + CreatePlayerSprites(); + CreateDealerSprites(); + SetCreditDigits(GetCoins()); + SetPlayerDigits(sBlackJack->playerScore); + SetDealerDigits(sBlackJack->dealerScore); + CreateCursorSprite(); + CreateOptions(); + sBlackJack->optionTileNum1 = gSprites[sBlackJack->option1SpriteId].oam.tileNum; + sBlackJack->optionTileNum2 = gSprites[sBlackJack->option2SpriteId].oam.tileNum; + sBlackJack->optionTileNum3 = gSprites[sBlackJack->option3SpriteId].oam.tileNum; + SetMode(); + CreatePopUpSprite(); + + CreateFacedown(); + sBlackJack->numPlayerCards = 0; + sBlackJack->numDealerCards = 0; + sBlackJack->AceAdjustPlayer = FALSE; + sBlackJack->AceAdjustDealer = FALSE; + sBlackJack->exitToggle = FALSE; + AdjustCards(); + ShuffleCards(); + + gSprites[sBlackJack->CreditSpriteIds[0 + SPR_CREDIT_DIGITS]].x = 188; + + DeactivateAllTextPrinters(); + InitWindows(sBJWinTemplates); - - LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); + + LoadPalette(GetTextWindowPalette(2), 11 * 16, 32); ShowHelpBar(sHelpBarHitStandText); - PrintInitMessage(); - - CopyBgTilemapBufferToVram(BJ_BG_BASE); - CopyBgTilemapBufferToVram(BJ_WIN_MENU); + PrintInitMessage(); + + CopyBgTilemapBufferToVram(BJ_BG_BASE); + CopyBgTilemapBufferToVram(BJ_WIN_MENU); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); ShowBg(BJ_BG_BASE); - ShowBg(BJ_WIN_MENU); + ShowBg(BJ_WIN_MENU); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetVBlankCallback(BJVBlankCallback); SetMainCallback2(BJMainCallback); CreateTask(BJMain, 1); } -static void BGrefresh(void) +static void RefreshBlackJackBG(void) { - //HideBg(BJ_WIN_MENU); - ClearStdWindowAndFrame(sTextWindowId, TRUE); + //HideBg(BJ_WIN_MENU); + ClearStdWindowAndFrame(sTextWindowId, TRUE); RemoveWindow(sTextWindowId); } @@ -2071,9 +2417,8 @@ static void BJMain(u8 taskId) switch (sBlackJack->state) { case BJ_STATE_INIT: - if (!gPaletteFade.active) { + if (!gPaletteFade.active) sBlackJack->state = BJ_STATE_PROCESS_INPUT; - } break; case BJ_STATE_PROCESS_INPUT: HandleInput(); @@ -2081,7 +2426,6 @@ static void BJMain(u8 taskId) case BJ_STATE_COMPLETED_WAIT_FOR_SOUND: if (IsSEPlaying()) break; - PlayFanfare(MUS_SLOTS_WIN); sBlackJack->state = BJ_STATE_PROCESS_COMPLETED_INPUT; case BJ_STATE_PROCESS_COMPLETED_INPUT: @@ -2098,31 +2442,32 @@ static void BJMain(u8 taskId) static void ShowMessage(const u8 *str) { - struct WindowTemplate template; - SetWindowTemplateFields(&template, BJ_WIN_MENU, 3, 15, 14, 4, 0xF, 0x194); - + struct WindowTemplate template; + SetWindowTemplateFields(&template, BJ_WIN_MENU, 3, 15, 14, 4, 0xF, 0x194); + sTextWindowId = AddWindow(&template); FillWindowPixelBuffer(sTextWindowId, PIXEL_FILL(0)); PutWindowTilemap(sTextWindowId); LoadUserWindowBorderGfx(sTextWindowId, 0x214, BG_PLTT_ID(14)); - DrawStdWindowFrame(sTextWindowId, FALSE); + DrawStdWindowFrame(sTextWindowId, FALSE); AddTextPrinterParameterized(sTextWindowId, FONT_NORMAL, str, 0, 1, 0, 0); - CopyWindowToVram(sTextWindowId, 3); + CopyWindowToVram(sTextWindowId, 3); } static void PrintInitMessage(void) { - u8 bet; - bet = VarGet(BLACKJACK_VAR_BET); - - if (GetCoins() > 9) { // You can play - ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEFT_ALIGN, 3); - ShowMessage(sText_NoBetting); - } - else - { - ShowMessage(sText_NoMoney); - } + u8 bet; + bet = sBlackJack->betBlackJack; + + if (GetCoins() > 9) + { // You can play + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEFT_ALIGN, 3); + ShowMessage(sText_NoBetting); + } + else + { + ShowMessage(sText_NoCoins); + } } static void HandleInput_BJComplete(void) @@ -2142,14 +2487,13 @@ static void HandleInput(void) if (JOY_NEW(A_BUTTON)) { AButton(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - FlagClear(BLACKJACK_FLAG_RESET); } + if (sBlackJack->clearBlackJack) + sBlackJack->clearBlackJack = FALSE; } else if (JOY_NEW(B_BUTTON)) { - if (sBlackJack->exitToggle == 0) { - sBlackJack->state = BJ_STATE_START_EXIT; - } + if (sBlackJack->exitToggle == FALSE) + sBlackJack->state = BJ_STATE_START_EXIT; } else if (JOY_NEW(DPAD_UP)) { @@ -2164,24 +2508,28 @@ static void HandleInput(void) static void UpdateCardVisibility(void) { int i; - - for (i = 0; i < sBlackJack->numPlayerCards; i++) { + + for (i = 0; i < sBlackJack->numPlayerCards; i++) + { gSprites[sBlackJack->playerCardIds[i]].invisible = FALSE; } - for (i = sBlackJack->numPlayerCards; i < MAX_PLAYER_CARDS; i++) { + for (i = sBlackJack->numPlayerCards; i < MAX_PLAYER_CARDS; i++) + { gSprites[sBlackJack->playerCardIds[i]].invisible = TRUE; } - for (i = 0; i < sBlackJack->numDealerCards; i++) { + for (i = 0; i < sBlackJack->numDealerCards; i++) + { gSprites[sBlackJack->dealerCardIds[i]].invisible = FALSE; } - for (i = sBlackJack->numDealerCards; i < MAX_DEALER_CARDS; i++) { + for (i = sBlackJack->numDealerCards; i < MAX_DEALER_CARDS; i++) + { gSprites[sBlackJack->dealerCardIds[i]].invisible = TRUE; } - - BuildOamBuffer(); + + BuildOamBuffer(); } static void HideAllCards(void) @@ -2201,49 +2549,48 @@ static void DeleteCards(void) { u8 i; // Loop through and destroy all player cards - for (i = 0; i < MAX_PLAYER_CARDS; i++) { - if (sBlackJack->playerCardIds[i] != 0) { + for (i = 0; i < MAX_PLAYER_CARDS; i++) + { + if (sBlackJack->playerCardIds[i] != 0) DestroySpriteAndFreeResources(&gSprites[sBlackJack->playerCardIds[i]]); - } } // Loop through and destroy all dealer cards - for (i = 0; i < MAX_DEALER_CARDS; i++) { - if (sBlackJack->dealerCardIds[i] != 0) { + for (i = 0; i < MAX_DEALER_CARDS; i++) + { + if (sBlackJack->dealerCardIds[i] != 0) DestroySpriteAndFreeResources(&gSprites[sBlackJack->dealerCardIds[i]]); - } } } -static void Reset(void) -{ - HideAllCards(); - BuildOamBuffer(); - BGrefresh(); - FlagClear(BLACKJACK_FLAG_BLACKJACK); - VarSet(BLACKJACK_VAR_BET, 0); - VarSet(BLACKJACK_VAR_DEALER, 0); - VarSet(BLACKJACK_VAR_PLAYER, 0); - sBlackJack->numDealerCards = 0; - sBlackJack->numPlayerCards = 0; - sBlackJack->AceAdjustPlayer = 0; - sBlackJack->AceAdjustDealer = 0; - gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; - gSprites[sBlackJack->LogoId].invisible = FALSE; - SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); - SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); - SetCreditDigits(GetCoins()); - DeleteCards(); - LoadSpritePalettes(sSpritePalettes); - ShuffleCards(); - AdjustCards(); - VarSet(BLACKJACK_VAR_OPTIONS, 0); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - sBlackJack->exitToggle = 0; - FlagSet(BLACKJACK_FLAG_RESET); - DeactivateAllTextPrinters(); - PrintInitMessage(); - return; +static void ResetBlackJack(void) +{ + HideAllCards(); + BuildOamBuffer(); + RefreshBlackJackBG(); + sBlackJack->hasBlackJack = FALSE; + sBlackJack->betBlackJack = 0; + sBlackJack->dealerScore = 0; + sBlackJack->playerScore = 0; + sBlackJack->numDealerCards = 0; + sBlackJack->numPlayerCards = 0; + sBlackJack->AceAdjustPlayer = FALSE; + sBlackJack->AceAdjustDealer = FALSE; + gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; + gSprites[sBlackJack->LogoId].invisible = FALSE; + SetDealerDigits(sBlackJack->dealerScore); + SetPlayerDigits(sBlackJack->playerScore); + SetCreditDigits(GetCoins()); + DeleteCards(); + LoadSpritePalettes(sSpritePalettes); + ShuffleCards(); + AdjustCards(); + SetOptionMode(OPTION_BET); + sBlackJack->exitToggle = FALSE; + sBlackJack->clearBlackJack = TRUE; + DeactivateAllTextPrinters(); + PrintInitMessage(); + return; } static void Push(void) @@ -2251,894 +2598,776 @@ static void Push(void) switch (sBlackJack->pushState) { case PUSH_0: - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + SetOptionMode(OPTION_NONE); PlaySE(SE_BOO); - ShowMessage(sText_Push); + ShowMessage(sText_Push); sBlackJack->waitTimer = 100000; - sBlackJack->pushState = 1; + sBlackJack->pushState = PUSH_1; break; - case PUSH_1: - if (sBlackJack->waitTimer > 0) { + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { - sBlackJack->pushState = 2; - } + else + sBlackJack->pushState = PUSH_2; break; - case PUSH_2: - PlaySE(SE_SHOP); - AddCoins(VarGet(BLACKJACK_VAR_BET)); + AddCoins(sBlackJack->betBlackJack); SetCreditDigits(GetCoins()); sBlackJack->waitTimer = 30; - sBlackJack->pushState = 3; + sBlackJack->pushState = PUSH_3; break; - case PUSH_3: - if (sBlackJack->waitTimer > 0) { + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { - sBlackJack->pushState = 4; - } + else + sBlackJack->pushState = PUSH_4; break; - case PUSH_4: - BGrefresh(); - Reset(); - return; + RefreshBlackJackBG(); + ResetBlackJack(); + return; } } static void ProcessPush(void) { - sBlackJack->pushState = PUSH_0; - while (sBlackJack->pushState != PUSH_4) - { - Push(); - } - Push(); + sBlackJack->pushState = PUSH_0; + while (sBlackJack->pushState != PUSH_4) + { + Push(); + } + Push(); } static void Bust(void) -{ - switch (sBlackJack->bustState) - { - case BUST_0: - - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - PlaySE(SE_FAILURE); - ShowMessage(sText_Bust); - sBlackJack->waitTimer = 100000; +{ + switch (sBlackJack->bustState) + { + case BUST_0: + SetOptionMode(OPTION_NONE); + PlaySE(SE_FAILURE); + ShowMessage(sText_Bust); + sBlackJack->waitTimer = 100000; sBlackJack->bustState = BUST_1; break; - case BUST_1: - - if (sBlackJack->waitTimer > 0) { + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { + else sBlackJack->bustState = BUST_2; - } - break; - - case BUST_2: - BGrefresh(); - Reset(); - return; - } + break; + case BUST_2: + RefreshBlackJackBG(); + ResetBlackJack(); + return; + } } static void ProcessBust(void) { - sBlackJack->bustState = BUST_0; - while (sBlackJack->bustState != BUST_2) - { - Bust(); - } - Bust(); + sBlackJack->bustState = BUST_0; + while (sBlackJack->bustState != BUST_2) + { + Bust(); + } + Bust(); } static void Lose(void) -{ - switch (sBlackJack->loseState) - { - case LOSE_0: - - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - PlaySE(SE_FAILURE); - ShowMessage(sText_YouLose); - sBlackJack->waitTimer = 100000; +{ + switch (sBlackJack->loseState) + { + case LOSE_0: + SetOptionMode(OPTION_NONE); + PlaySE(SE_FAILURE); + ShowMessage(sText_YouLose); + sBlackJack->waitTimer = 100000; sBlackJack->loseState = LOSE_1; break; - case LOSE_1: - - if (sBlackJack->waitTimer > 0) { + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { + else sBlackJack->loseState = LOSE_2; - } break; - - case LOSE_2: - BGrefresh(); - Reset(); - return; - } + case LOSE_2: + RefreshBlackJackBG(); + ResetBlackJack(); + return; + } } static void ProcessLose(void) { - sBlackJack->loseState = LOSE_0; - while (sBlackJack->loseState != LOSE_2) - { - Lose(); - } - Lose(); + sBlackJack->loseState = LOSE_0; + while (sBlackJack->loseState != LOSE_2) + { + Lose(); + } + Lose(); } static void Win(void) { - u16 winnings; - - switch (sBlackJack->winState) - { - case WIN_0: - - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - PlaySE(SE_RG_POKE_JUMP_SUCCESS); - ShowMessage(sText_YouWin); - sBlackJack->waitTimer = 100000; + u16 winnings; + + switch (sBlackJack->winState) + { + case WIN_0: + SetOptionMode(OPTION_NONE); + PlaySE(SE_RG_POKE_JUMP_SUCCESS); + ShowMessage(sText_YouWin); + sBlackJack->waitTimer = 100000; sBlackJack->winState = WIN_1; break; - - case WIN_1: - - if (sBlackJack->waitTimer > 0) { + case WIN_1: + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { + else sBlackJack->winState = WIN_2; + break; + case WIN_2: + PlaySE(SE_SHOP); + if (((sBlackJack->betBlackJack * 2) + GetCoins()) < 9999) + { + if (sBlackJack->hasBlackJack) + { + winnings = (sBlackJack->betBlackJack * 3) / 2; // 3:2 payout + } + else + { + // Regular 1:1 payout + winnings = sBlackJack->betBlackJack * 2; + } + if ((GetCoins() + winnings) <= 9999) + AddCoins(winnings); + else + SetCoins(9999); + } + else + { + SetCoins(9999); } + SetCreditDigits(GetCoins()); + sBlackJack->waitTimer = 30; + sBlackJack->winState = WIN_3; break; - - case WIN_2: - - PlaySE(SE_SHOP); - if (((VarGet(BLACKJACK_VAR_BET) * 2) + GetCoins()) < 9999) - { - if (FlagGet(BLACKJACK_FLAG_BLACKJACK) == TRUE) - { - // 3:2 payout - winnings = (VarGet(BLACKJACK_VAR_BET) * 3) / 2; - - if ((GetCoins() + winnings) <= 9999) - { - AddCoins(winnings); - } - else - { - SetCoins(9999); - } - } - else - { - // Regular 1:1 payout - winnings = VarGet(BLACKJACK_VAR_BET) * 2; - - if ((GetCoins() + winnings) <= 9999) - { - AddCoins(winnings); - } - else - { - SetCoins(9999); - } - } - } - else - { - SetCoins(9999); - } - SetCreditDigits(GetCoins()); - sBlackJack->waitTimer = 30; - sBlackJack->winState = WIN_3; - break; - - case WIN_3: - - if (sBlackJack->waitTimer > 0) { + case WIN_3: + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { - + else sBlackJack->winState = WIN_4; - } - break; - - case WIN_4: - BGrefresh(); - Reset(); - return; - } + break; + case WIN_4: + RefreshBlackJackBG(); + ResetBlackJack(); + return; + } } static void ProcessWin(void) { - sBlackJack->winState = WIN_0; - while (sBlackJack->winState != WIN_4) - { - Win(); - } - Win(); + sBlackJack->winState = WIN_0; + while (sBlackJack->winState != WIN_4) + { + Win(); + } + Win(); } static void Stand(void) { - u8 DCardPoints; - - switch (sBlackJack->standState) - { - case STAND_0: - - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - PlaySE(SE_REPEL); - sBlackJack->numDealerCards = 2; - gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; - UpdateCardVisibility(); - AdjustCards(); - DCardPoints = cardPoints[sBlackJack->dealerCardNumbers[1]]; - if (DCardPoints == 0) - { - if (VarGet(BLACKJACK_VAR_DEALER) == 11) - { - DCardPoints = 1; - } - else - { - DCardPoints = 11; - } - } - VarSet(BLACKJACK_VAR_DEALER, (VarGet(BLACKJACK_VAR_DEALER) + DCardPoints)); - SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); - sBlackJack->waitTimer = 100000; + u8 DCardPoints; + + switch (sBlackJack->standState) + { + case STAND_0: + SetOptionMode(OPTION_NONE); + PlaySE(SE_REPEL); + sBlackJack->numDealerCards = 2; + gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; + UpdateCardVisibility(); + AdjustCards(); + DCardPoints = sPlayingCards[sBlackJack->dealerCardNumbers[1]].points; + if (DCardPoints == CARD_SCORE_ACE) + { + if (sBlackJack->dealerScore == CARD_SCORE_ACE_EXPANDED) + DCardPoints = CARD_SCORE_ACE_SHURNK; + else + DCardPoints = CARD_SCORE_ACE_EXPANDED; + } + sBlackJack->dealerScore += DCardPoints; + SetDealerDigits(sBlackJack->dealerScore); + sBlackJack->waitTimer = 100000; sBlackJack->standState = STAND_1; break; - - case STAND_1: - - if (sBlackJack->waitTimer > 0) { + case STAND_1: + if (sBlackJack->waitTimer > 0) + { sBlackJack->waitTimer--; - } else { - - if (FlagGet(BLACKJACK_FLAG_BLACKJACK) == FALSE) { - sBlackJack->standState = STAND_2; - } - else { - FlagClear(BLACKJACK_FLAG_BLACKJACK); - sBlackJack->standState = STAND_5; - } + } + else + { + if (sBlackJack->hasBlackJack == FALSE) + { + sBlackJack->standState = STAND_CHECK_INSURANCE; + } + else + { + sBlackJack->hasBlackJack = FALSE; + sBlackJack->standState = STAND_5; + } } break; - - case STAND_2: - - if (FlagGet(BLACKJACK_FLAG_INSURANCE) == TRUE) - { - if (VarGet(BLACKJACK_VAR_DEALER) == 21) - { - AddCoins(VarGet(BLACKJACK_VAR_BET)); - FlagClear(BLACKJACK_FLAG_INSURANCE); - } - else { - FlagClear(BLACKJACK_FLAG_INSURANCE); - } - } - - sBlackJack->standState = STAND_3; + case STAND_CHECK_INSURANCE: + if (sBlackJack->insuranceBet == TRUE) + { + if (sBlackJack->dealerScore == CARD_SCORE_BLACK_JACK) + AddCoins(sBlackJack->betBlackJack); + sBlackJack->insuranceBet = FALSE; + } + sBlackJack->standState = STAND_3; break; - - case STAND_3: - - if (VarGet(BLACKJACK_VAR_DEALER) < 17) { - - PlaySE(SE_REPEL); - sBlackJack->numDealerCards++; - UpdateCardVisibility(); - AdjustCards(); - DCardPoints = cardPoints[sBlackJack->dealerCardNumbers[(sBlackJack->numDealerCards - 1)]]; - if (DCardPoints == 0) - { - if ((VarGet(BLACKJACK_VAR_DEALER) + 11) > 21) - { - DCardPoints = 1; - } - else - { - DCardPoints = 11; - } - } - VarSet(BLACKJACK_VAR_DEALER, (VarGet(BLACKJACK_VAR_DEALER) + DCardPoints)); - if (VarGet(BLACKJACK_VAR_DEALER) > 21) - { - if (cardPoints[sBlackJack->dealerCardNumbers[0]] == 0) { - if (sBlackJack->AceAdjustDealer == 0) { - VarSet(BLACKJACK_VAR_DEALER, (VarGet(BLACKJACK_VAR_DEALER) - 10)); - sBlackJack->AceAdjustDealer = 1; - } - } - else if (cardPoints[sBlackJack->dealerCardNumbers[1]] == 0) { - if (sBlackJack->AceAdjustDealer == 0) { - VarSet(BLACKJACK_VAR_DEALER, (VarGet(BLACKJACK_VAR_DEALER) - 10)); - sBlackJack->AceAdjustDealer = 1; - } - } - } - SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); - sBlackJack->waitTimer = 100000; - sBlackJack->standState = STAND_4; - break; - } - else { - sBlackJack->standState = STAND_5; - break; - } - - case STAND_4: - - if (sBlackJack->waitTimer > 0) { + case STAND_3: + if (sBlackJack->dealerScore < 17) + { + PlaySE(SE_REPEL); + sBlackJack->numDealerCards++; + UpdateCardVisibility(); + AdjustCards(); + DCardPoints = sPlayingCards[sBlackJack->dealerCardNumbers[(sBlackJack->numDealerCards - 1)]].points; + if (DCardPoints == CARD_SCORE_ACE) + { + if ((sBlackJack->dealerScore + CARD_SCORE_ACE_EXPANDED) > CARD_SCORE_BLACK_JACK) + DCardPoints = CARD_SCORE_ACE_SHURNK; + else + DCardPoints = CARD_SCORE_ACE_EXPANDED; + } + sBlackJack->dealerScore += DCardPoints; + if (sBlackJack->dealerScore > CARD_SCORE_BLACK_JACK) + { + if (sPlayingCards[sBlackJack->dealerCardNumbers[0]].points == CARD_SCORE_ACE) + { + if (sBlackJack->AceAdjustDealer == FALSE) + { + sBlackJack->dealerScore -= (CARD_SCORE_ACE_EXPANDED - CARD_SCORE_ACE_SHURNK); + sBlackJack->AceAdjustDealer = TRUE; + } + } + else if (sPlayingCards[sBlackJack->dealerCardNumbers[1]].points == CARD_SCORE_ACE) + { + if (sBlackJack->AceAdjustDealer == FALSE) + { + sBlackJack->dealerScore -= (CARD_SCORE_ACE_EXPANDED - CARD_SCORE_ACE_SHURNK); + sBlackJack->AceAdjustDealer = TRUE; + } + } + } + SetDealerDigits(sBlackJack->dealerScore); + sBlackJack->waitTimer = 100000; + sBlackJack->standState = STAND_4; + break; + } + else + { + sBlackJack->standState = STAND_5; + break; + } + case STAND_4: + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { - + else sBlackJack->standState = STAND_3; - } break; - - case STAND_5: - - BGrefresh(); - - if (VarGet(BLACKJACK_VAR_DEALER) < 22) - { - if (VarGet(BLACKJACK_VAR_DEALER) > VarGet(BLACKJACK_VAR_PLAYER)) // Dealer Wins - { - ProcessLose(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; } - } - else if (VarGet(BLACKJACK_VAR_DEALER) < VarGet(BLACKJACK_VAR_PLAYER)) // Player Wins - { - ProcessWin(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; } - } - if (VarGet(BLACKJACK_VAR_DEALER) == VarGet(BLACKJACK_VAR_PLAYER)) // Push - { - ProcessPush(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; } - } - } - else if (VarGet(BLACKJACK_VAR_DEALER) > 21) // Dealer Busts - { - ProcessWin(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; } - } - return; - } + case STAND_5: + RefreshBlackJackBG(); + + if (sBlackJack->dealerScore < 22) + { + if (sBlackJack->dealerScore > sBlackJack->playerScore) // Dealer Wins + { + ProcessLose(); + if (sBlackJack->clearBlackJack) + return; + } + else if (sBlackJack->dealerScore < sBlackJack->playerScore) // Player Wins + { + ProcessWin(); + if (sBlackJack->clearBlackJack) + return; + } + if (sBlackJack->dealerScore == sBlackJack->playerScore) // Push + { + ProcessPush(); + if (sBlackJack->clearBlackJack) + return; + } + } + else if (sBlackJack->dealerScore > CARD_SCORE_BLACK_JACK) // Dealer Busts + { + ProcessWin(); + if (sBlackJack->clearBlackJack) + return; + } + return; + } } static void ProcessStand(void) { - sBlackJack->standState = STAND_0; - while (sBlackJack->standState != STAND_5) - { - Stand(); - } - Stand(); + sBlackJack->standState = STAND_0; + while (sBlackJack->standState != STAND_5) + { + Stand(); + } + Stand(); } static void HitBlackJack(void) -{ - switch (sBlackJack->hitBJState) - { - case hitBJ_0: - - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - PlaySE(SE_APPLAUSE); - ShowMessage(sText_BlackJack); - sBlackJack->waitTimer = 300000; +{ + switch (sBlackJack->hitBJState) + { + case hitBJ_0: + SetOptionMode(OPTION_NONE); + PlaySE(SE_APPLAUSE); + ShowMessage(sText_BlackJack); + sBlackJack->waitTimer = 300000; sBlackJack->hitBJState = hitBJ_1; break; - - case 1: - - if (sBlackJack->waitTimer > 0) { + case hitBJ_1: + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { + else sBlackJack->hitBJState = hitBJ_2; - } break; - - case 2: - - BGrefresh(); - FlagSet(BLACKJACK_FLAG_BLACKJACK); - ProcessStand(); - return; - } + case hitBJ_2: + RefreshBlackJackBG(); + sBlackJack->hasBlackJack = TRUE; + ProcessStand(); + return; + } } static void ProcessHitBJ(void) { - sBlackJack->hitBJState = hitBJ_0; - while (sBlackJack->hitBJState != hitBJ_2) - { - HitBlackJack(); - } - HitBlackJack(); + sBlackJack->hitBJState = hitBJ_0; + while (sBlackJack->hitBJState != hitBJ_2) + { + HitBlackJack(); + } + HitBlackJack(); } static void Double(void) { - u8 playerCardPoints; - - switch (sBlackJack->doubleState) - { - case DOUBLE_0: - - PlaySE(SE_SHOP); - SetCoins(GetCoins() - VarGet(BLACKJACK_VAR_BET)); - VarSet(BLACKJACK_VAR_BET, (VarGet(BLACKJACK_VAR_BET) * 2)); - SetCreditDigits(GetCoins()); - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - sBlackJack->waitTimer = 100000; + u8 playerCardPoints; + + switch (sBlackJack->doubleState) + { + case DOUBLE_0: + PlaySE(SE_SHOP); + SetCoins(GetCoins() - sBlackJack->betBlackJack); + sBlackJack->betBlackJack = sBlackJack->betBlackJack * 2; + SetCreditDigits(GetCoins()); + SetOptionMode(OPTION_NONE); + sBlackJack->waitTimer = 100000; sBlackJack->doubleState = DOUBLE_1; break; - - case DOUBLE_1: - - if (sBlackJack->waitTimer > 0) { + case DOUBLE_1: + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { + else sBlackJack->doubleState = DOUBLE_2; - } break; - - case DOUBLE_2: - - PlaySE(SE_REPEL); - sBlackJack->numPlayerCards = (sBlackJack->numPlayerCards + 1); - UpdateCardVisibility(); - AdjustCards(); - playerCardPoints = cardPoints[sBlackJack->playerCardNumbers[(sBlackJack->numPlayerCards - 1)]]; - if (playerCardPoints == 0){ - if ((VarGet(BLACKJACK_VAR_PLAYER) + 11) > 21) - { - playerCardPoints = 1; - } + case DOUBLE_2: + PlaySE(SE_REPEL); + sBlackJack->numPlayerCards = (sBlackJack->numPlayerCards + 1); + UpdateCardVisibility(); + AdjustCards(); + playerCardPoints = sPlayingCards[sBlackJack->playerCardNumbers[(sBlackJack->numPlayerCards - 1)]].points; + if (playerCardPoints == CARD_SCORE_ACE) + { + if ((sBlackJack->playerScore + CARD_SCORE_ACE_EXPANDED) > CARD_SCORE_BLACK_JACK) + playerCardPoints = CARD_SCORE_ACE_SHURNK; else - { - playerCardPoints = 11; - } - } - VarSet(BLACKJACK_VAR_PLAYER, (VarGet(BLACKJACK_VAR_PLAYER) + playerCardPoints)); - SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); - sBlackJack->waitTimer = 100000; + playerCardPoints = CARD_SCORE_ACE_EXPANDED; + } + sBlackJack->playerScore += playerCardPoints; + SetPlayerDigits(sBlackJack->playerScore); + sBlackJack->waitTimer = 100000; sBlackJack->doubleState = DOUBLE_3; break; - - case DOUBLE_3: - - if (sBlackJack->waitTimer > 0) { + case DOUBLE_3: + if (sBlackJack->waitTimer > 0) sBlackJack->waitTimer--; - } else { + else sBlackJack->doubleState = DOUBLE_4; - } break; - - case DOUBLE_4: - - BGrefresh(); - if (VarGet(BLACKJACK_VAR_PLAYER) > 21) - { - ProcessBust(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; } - } - else - { - ProcessStand(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; } - } - return; - } + case DOUBLE_4: + RefreshBlackJackBG(); + if (sBlackJack->playerScore > CARD_SCORE_BLACK_JACK) + { + ProcessBust(); + if (sBlackJack->clearBlackJack == TRUE) + return; + } + else + { + ProcessStand(); + if (sBlackJack->clearBlackJack == TRUE) + return; + } + return; + } } static void ProcessDouble(void) { - sBlackJack->doubleState = DOUBLE_0; - while (sBlackJack->doubleState != DOUBLE_4) - { - Double(); - } - Double(); + sBlackJack->doubleState = DOUBLE_0; + while (sBlackJack->doubleState != DOUBLE_4) + { + Double(); + } + Double(); } static void Hit(void) { u8 playerCardPoints; - int i; + int i; switch (sBlackJack->hitState) { - case HIT_0: - PlaySE(SE_REPEL); - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - sBlackJack->numPlayerCards = (sBlackJack->numPlayerCards + 1); - AdjustCards(); - UpdateCardVisibility(); - playerCardPoints = cardPoints[sBlackJack->playerCardNumbers[(sBlackJack->numPlayerCards - 1)]]; - if (playerCardPoints == 0) + case HIT_PLAY_CARD: + PlaySE(SE_REPEL); + SetOptionMode(OPTION_NONE); + sBlackJack->numPlayerCards = (sBlackJack->numPlayerCards + 1); + AdjustCards(); + UpdateCardVisibility(); + playerCardPoints = sPlayingCards[sBlackJack->playerCardNumbers[(sBlackJack->numPlayerCards - 1)]].points; + if (playerCardPoints == CARD_SCORE_ACE) + { + if ((sBlackJack->playerScore + CARD_SCORE_ACE_EXPANDED) > CARD_SCORE_BLACK_JACK) + playerCardPoints = CARD_SCORE_ACE_SHURNK; + else + playerCardPoints = CARD_SCORE_ACE_EXPANDED; + } + sBlackJack->playerScore += playerCardPoints; + if (sBlackJack->playerScore > CARD_SCORE_BLACK_JACK) + { + for (i = 0; i < sBlackJack->numPlayerCards; i++) { - if ((VarGet(BLACKJACK_VAR_PLAYER) + 11) > 21) - { - playerCardPoints = 1; - } - else + if (sPlayingCards[sBlackJack->playerCardNumbers[i]].points == CARD_SCORE_ACE) { - playerCardPoints = 11; + if (sBlackJack->AceAdjustPlayer == FALSE) + { + sBlackJack->playerScore -= 10; + sBlackJack->AceAdjustPlayer = TRUE; + } } } - VarSet(BLACKJACK_VAR_PLAYER, (VarGet(BLACKJACK_VAR_PLAYER) + playerCardPoints)); - if (VarGet(BLACKJACK_VAR_PLAYER) > 21) - { - for (i = 0; i < sBlackJack->numPlayerCards; i++) - { - if (cardPoints[sBlackJack->playerCardNumbers[i]] == 0) - { - if (sBlackJack->AceAdjustPlayer == 0) - { - VarSet(BLACKJACK_VAR_PLAYER, (VarGet(BLACKJACK_VAR_PLAYER) - 10)); - sBlackJack->AceAdjustPlayer = 1; - } - } - } - } - SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); - sBlackJack->waitTimer = 100000; - sBlackJack->hitState = HIT_1; - break; + } + SetPlayerDigits(sBlackJack->playerScore); + sBlackJack->waitTimer = 100000; + sBlackJack->hitState = HIT_1; + break; + case HIT_1: + if (sBlackJack->waitTimer > 0) + sBlackJack->waitTimer--; + else + sBlackJack->hitState = HIT_CHECK_SCORE; + break; + case HIT_CHECK_SCORE: + if (sBlackJack->playerScore > CARD_SCORE_BLACK_JACK) + { + ProcessBust(); + if (sBlackJack->clearBlackJack == TRUE) + return; + } + else if (sBlackJack->playerScore == CARD_SCORE_BLACK_JACK) + { + ProcessStand(); + if (sBlackJack->clearBlackJack == TRUE) + return; + } + else if (sBlackJack->numPlayerCards == 9) + { + ProcessStand(); + if (sBlackJack->clearBlackJack == TRUE) + return; + } + else + { + SetOptionMode(OPTION_HIT); + } + return; + } +} - case HIT_1: - if (sBlackJack->waitTimer > 0) { - sBlackJack->waitTimer--; - } else { - sBlackJack->hitState = HIT_2; - } - break; - - case HIT_2: - if (VarGet(BLACKJACK_VAR_PLAYER) > 21) +static void AButton(void) +{ + u32 bet; + u8 num; + u8 playerCard1Points; + u8 playerCard2Points; + u8 dealerCard1Points; + + if (sBlackJack->optionMode != OPTION_NONE) + { + if (gSprites[sBlackJack->cursorSpriteId].y == 57) // Top + { + if (sBlackJack->optionMode == OPTION_BET) // +100 { - ProcessBust(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; + if ((GetCoins()) > 9) // enough + { + RefreshBlackJackBG(); + PlaySE(SE_VEND); + RemoveCoins(10); + sBlackJack->betBlackJack += 10; + bet = sBlackJack->betBlackJack; + num = CountDigits(sBlackJack->betBlackJack); + SetCreditDigits(GetCoins()); + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, num); + gStringVar4[0] = '\0'; + StringExpandPlaceholders(gStringVar4, sText_Betting); + ShowMessage(gStringVar4); + } + else // Not Enough + { + PlaySE(SE_FAILURE); } } - else if (VarGet(BLACKJACK_VAR_PLAYER) == 21) + if ((sBlackJack->optionMode == OPTION_HIT) + || (sBlackJack->optionMode == OPTION_DOUBLE) + || (sBlackJack->optionMode == OPTION_INSURANCE)) { - ProcessStand(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + if (sBlackJack->betBlackJack > 9) // Enough + { + PlaySE(SE_CARD); + //delay? + + sBlackJack->hitState = HIT_PLAY_CARD; + while (sBlackJack->hitState != HIT_CHECK_SCORE) + { + Hit(); + } + Hit(); return; } + else + { + PlaySE(SE_FAILURE); + } } - else if (sBlackJack->numPlayerCards == 9) + return; + } + if (gSprites[sBlackJack->cursorSpriteId].y == (57 + 16)) // Middle + { + if (sBlackJack->optionMode == OPTION_BET) // -100 { + if (sBlackJack->betBlackJack > 0) // Existing Bet + { + RefreshBlackJackBG(); + PlaySE(SE_VEND); + AddCoins(10); + sBlackJack->betBlackJack -= 10; + bet = sBlackJack->betBlackJack; + num = CountDigits(sBlackJack->betBlackJack); + SetCreditDigits(GetCoins()); + ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, num); + gStringVar4[0] = '\0'; + StringExpandPlaceholders(gStringVar4, sText_Betting); + ShowMessage(gStringVar4); + } + else // No existing bet + { + PlaySE(SE_FAILURE); + } + } + if ((sBlackJack->optionMode == OPTION_HIT) + || (sBlackJack->optionMode == OPTION_DOUBLE) + || (sBlackJack->optionMode == OPTION_INSURANCE)) + { + PlaySE(SE_CARD); + // delay? + ProcessStand(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { + if (sBlackJack->clearBlackJack == TRUE) return; + } + return; + } + if (gSprites[sBlackJack->cursorSpriteId].y == (57 + 32)) // Bottom + { + if (sBlackJack->optionMode == OPTION_BET) // Bet + { + if (sBlackJack->betBlackJack > 9) // Enough + { + sBlackJack->exitToggle = TRUE; + PlaySE(SE_SHOP); + SetOptionMode(OPTION_NONE); + // delay? + + gSprites[sBlackJack->LogoId].invisible = TRUE; + RefreshBlackJackBG(); + sBlackJack->numPlayerCards = 2; + sBlackJack->numDealerCards = 1; + AdjustCards(); + UpdateCardVisibility(); + gSprites[sBlackJack->DealerFaceDownId].invisible = FALSE; + PlaySE(SE_REPEL); + // delay? + + playerCard1Points = sPlayingCards[sBlackJack->playerCardNumbers[0]].points; + playerCard2Points = sPlayingCards[sBlackJack->playerCardNumbers[1]].points; + + if (playerCard1Points != CARD_SCORE_ACE && playerCard2Points != CARD_SCORE_ACE) + sBlackJack->playerScore = playerCard1Points + playerCard2Points; + else if (playerCard1Points == CARD_SCORE_ACE && playerCard2Points == CARD_SCORE_ACE) + sBlackJack->playerScore = 12; + else if (playerCard1Points == CARD_SCORE_ACE && playerCard2Points != CARD_SCORE_ACE) + sBlackJack->playerScore = CARD_SCORE_ACE_EXPANDED + playerCard2Points; + else if (playerCard1Points != CARD_SCORE_ACE && playerCard2Points == CARD_SCORE_ACE) + sBlackJack->playerScore = playerCard1Points + CARD_SCORE_ACE_EXPANDED; + + dealerCard1Points = sPlayingCards[sBlackJack->dealerCardNumbers[0]].points; + + if (dealerCard1Points == CARD_SCORE_ACE) + sBlackJack->dealerScore = CARD_SCORE_ACE_EXPANDED; + else + sBlackJack->dealerScore = dealerCard1Points; + SetPlayerDigits(sBlackJack->playerScore); + SetDealerDigits(sBlackJack->dealerScore); + if (sBlackJack->playerScore == CARD_SCORE_BLACK_JACK) + { + ProcessHitBJ(); + return; + } + + if ((sBlackJack->playerScore != 9) && (sBlackJack->playerScore != 10) && (sBlackJack->playerScore != 11) && + (sBlackJack->dealerScore != 11)) + { + SetOptionMode(OPTION_HIT); + return; + } + + if ((sBlackJack->playerScore >= 9) && (sBlackJack->playerScore <= 11) && + (sBlackJack->dealerScore != 11)) + { + if (GetCoins() > sBlackJack->betBlackJack) + SetOptionMode(OPTION_DOUBLE); + else + SetOptionMode(OPTION_HIT); + return; + } + + if (sBlackJack->dealerScore == 11) + { + if (GetCoins() > (sBlackJack->betBlackJack / 2)) + SetOptionMode(OPTION_INSURANCE); + else + SetOptionMode(OPTION_HIT); + return; + } + } + else + { + PlaySE(SE_FAILURE); + } } + if (sBlackJack->optionMode == OPTION_DOUBLE) // Double + { + PlaySE(SE_SHOP); + SetOptionMode(OPTION_NONE); + // delay? + + ProcessDouble(); + if (sBlackJack->clearBlackJack == TRUE) + return; } - else + if (sBlackJack->optionMode == OPTION_INSURANCE) // Insurance { - VarSet(BLACKJACK_VAR_OPTIONS, 1); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); + PlaySE(SE_SHOP); + SetOptionMode(OPTION_NONE); + RemoveCoins(sBlackJack->betBlackJack / 2); + SetCreditDigits(GetCoins()); + // delay? + sBlackJack->insuranceBet = TRUE; + SetOptionMode(OPTION_HIT); } return; + } + } + else + { + PlaySE(SE_FAILURE); + return; } -} - -static void AButton(void) -{ - u32 bet; - u8 num; - u8 playerCard1Points; - u8 playerCard2Points; - u8 dealerCard1Points; - u8 taskId1; - u8 taskId2; - - if (VarGet(BLACKJACK_VAR_OPTIONS) != 4) - { - if (gSprites[sBlackJack->cursorSpriteId].y == 57) // Top - { - if (VarGet(BLACKJACK_VAR_OPTIONS) == 0) // +100 - { - if ((GetCoins()) > 9) // enough - { - BGrefresh(); - PlaySE(SE_VEND); - RemoveCoins(10); - VarSet(BLACKJACK_VAR_BET, (VarGet(BLACKJACK_VAR_BET) + 10)); - bet = VarGet(BLACKJACK_VAR_BET); - num = CountDigits(VarGet(BLACKJACK_VAR_BET)); - SetCreditDigits(GetCoins()); - ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, num); - gStringVar4[0] = '\0'; - StringExpandPlaceholders(gStringVar4, sText_Betting); - ShowMessage(gStringVar4); - } - else // Not Enough - { - PlaySE(SE_FAILURE); - } - } - if ((VarGet(BLACKJACK_VAR_OPTIONS) == 1) || (VarGet(BLACKJACK_VAR_OPTIONS) == 2) || (VarGet(BLACKJACK_VAR_OPTIONS) == 3)) { // Hit - if ((VarGet(BLACKJACK_VAR_BET)) > 9) // Enough - { - PlaySE(SE_CARD); - //delay? - - sBlackJack->hitState = HIT_0; - while (sBlackJack->hitState != HIT_2) - { - Hit(); - } - Hit(); - return; - } - else - { - PlaySE(SE_FAILURE); - } - } - return; - } - if (gSprites[sBlackJack->cursorSpriteId].y == (57 + 16)) // Middle - { - if (VarGet(BLACKJACK_VAR_OPTIONS) == 0) // -100 - { - if (VarGet(BLACKJACK_VAR_BET) > 0) // Existing Bet - { - BGrefresh(); - PlaySE(SE_VEND); - AddCoins(10); - VarSet(BLACKJACK_VAR_BET, (VarGet(BLACKJACK_VAR_BET) - 10)); - bet = VarGet(BLACKJACK_VAR_BET); - num = CountDigits(VarGet(BLACKJACK_VAR_BET)); - SetCreditDigits(GetCoins()); - ConvertUIntToDecimalStringN(gStringVar1, bet, STR_CONV_MODE_LEADING_ZEROS, num); - gStringVar4[0] = '\0'; - StringExpandPlaceholders(gStringVar4, sText_Betting); - ShowMessage(gStringVar4); - } - else // No existing bet - { - PlaySE(SE_FAILURE); - } - } - if ((VarGet(BLACKJACK_VAR_OPTIONS) == 1) || (VarGet(BLACKJACK_VAR_OPTIONS) == 2) || (VarGet(BLACKJACK_VAR_OPTIONS) == 3)) { // Stand - PlaySE(SE_CARD); - // delay? - - ProcessStand(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; } - } - return; - } - if (gSprites[sBlackJack->cursorSpriteId].y == (57 + 32)) // Bottom - { - if (VarGet(BLACKJACK_VAR_OPTIONS) == 0) // Bet - { - if ((VarGet(BLACKJACK_VAR_BET)) > 9) // Enough - { - sBlackJack->exitToggle = 1; - PlaySE(SE_SHOP); - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - // delay? - - gSprites[sBlackJack->LogoId].invisible = TRUE; - BGrefresh(); - sBlackJack->numPlayerCards = 2; - sBlackJack->numDealerCards = 1; - AdjustCards(); - UpdateCardVisibility(); - gSprites[sBlackJack->DealerFaceDownId].invisible = FALSE; - PlaySE(SE_REPEL); - // delay? - - playerCard1Points = cardPoints[sBlackJack->playerCardNumbers[0]]; - playerCard2Points = cardPoints[sBlackJack->playerCardNumbers[1]]; - - if (playerCard1Points != 0 && playerCard2Points != 0) - { - VarSet(BLACKJACK_VAR_PLAYER, playerCard1Points + playerCard2Points); - } - else if (playerCard1Points == 0 && playerCard2Points == 0) - { - VarSet(BLACKJACK_VAR_PLAYER, 12); - } - else if (playerCard1Points == 0 && playerCard2Points != 0) - { - VarSet(BLACKJACK_VAR_PLAYER, 11 + playerCard2Points); - } - else if (playerCard1Points != 0 && playerCard2Points == 0) - { - VarSet(BLACKJACK_VAR_PLAYER, playerCard1Points + 11); - } - - dealerCard1Points = cardPoints[sBlackJack->dealerCardNumbers[0]]; - - if (dealerCard1Points == 0) - { - VarSet(BLACKJACK_VAR_DEALER, 11); - } - else - { - VarSet(BLACKJACK_VAR_DEALER, dealerCard1Points); - } - SetPlayerDigits(VarGet(BLACKJACK_VAR_PLAYER)); - SetDealerDigits(VarGet(BLACKJACK_VAR_DEALER)); - if (VarGet(BLACKJACK_VAR_PLAYER) == 21) - { - ProcessHitBJ(); - return; - } - - if ((VarGet(BLACKJACK_VAR_PLAYER) != 9) && (VarGet(BLACKJACK_VAR_PLAYER) != 10) && (VarGet(BLACKJACK_VAR_PLAYER) != 11) && - (VarGet(BLACKJACK_VAR_DEALER) != 11)) - { - VarSet(BLACKJACK_VAR_OPTIONS, 1); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - return; - } - - if ((VarGet(BLACKJACK_VAR_PLAYER) >= 9) && (VarGet(BLACKJACK_VAR_PLAYER) <= 11) && - (VarGet(BLACKJACK_VAR_DEALER) != 11)) - { - if (GetCoins() > VarGet(BLACKJACK_VAR_BET)) { - VarSet(BLACKJACK_VAR_OPTIONS, 2); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - } - else - { - VarSet(BLACKJACK_VAR_OPTIONS, 1); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - } - return; - } - - if ((VarGet(BLACKJACK_VAR_DEALER) == 11)) - { - if (GetCoins() > (VarGet(BLACKJACK_VAR_BET) / 2)) { - VarSet(BLACKJACK_VAR_OPTIONS, 3); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - } - else - { - VarSet(BLACKJACK_VAR_OPTIONS, 1); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - } - return; - } - } - else - { - PlaySE(SE_FAILURE); - } - } - if (VarGet(BLACKJACK_VAR_OPTIONS) == 2) // Double - { - PlaySE(SE_SHOP); - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - // delay? - - ProcessDouble(); - if (FlagGet(BLACKJACK_FLAG_RESET) == TRUE) { - return; } - } - if (VarGet(BLACKJACK_VAR_OPTIONS) == 3) // Insurance - { - PlaySE(SE_SHOP); - VarSet(BLACKJACK_VAR_OPTIONS, 4); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - RemoveCoins(VarGet(BLACKJACK_VAR_BET) / 2); - SetCreditDigits(GetCoins()); - // delay? - FlagSet(BLACKJACK_FLAG_INSURANCE); - VarSet(BLACKJACK_VAR_OPTIONS, 1); - SetMode(VarGet(BLACKJACK_VAR_OPTIONS)); - } - return; - } - } - else - { - PlaySE(SE_FAILURE); - return; - } } static void MoveCursor(int direction) { - struct Sprite *cursorSprite = &gSprites[sBlackJack->cursorSpriteId]; int curY; int destY; - curY = gSprites[sBlackJack->cursorSpriteId].y; - destY = curY; - - if (((VarGet(BLACKJACK_VAR_OPTIONS)) != 1) && (VarGet(BLACKJACK_VAR_OPTIONS) != 4)) { - switch (direction) - { - case 0: if (curY > 57) destY = curY - 16; break; - case 2: if (curY < 89) destY = curY + 16; break; - } - } - if (VarGet(BLACKJACK_VAR_OPTIONS) == 1){ - switch (direction) - { - case 0: if (curY > 57) destY = curY - 16; break; - case 2: if (curY < 73) destY = curY + 16; break; - } - } - if (VarGet(BLACKJACK_VAR_OPTIONS) == 4){ - return; - } - if (curY == destY) { - PlaySE(SE_WALL_HIT); + curY = gSprites[sBlackJack->cursorSpriteId].y; + destY = curY; + + if ((sBlackJack->optionMode != OPTION_HIT) && (sBlackJack->optionMode != OPTION_NONE)) + { + switch (direction) + { + case 0: if (curY > 57) destY = curY - 16; break; + case 2: if (curY < 89) destY = curY + 16; break; + } + } + if (sBlackJack->optionMode == OPTION_HIT) + { + switch (direction) + { + case 0: if (curY > 57) destY = curY - 16; break; + case 2: if (curY < 73) destY = curY + 16; break; + } + } + if (sBlackJack->optionMode == OPTION_NONE) + { + return; + } + if (curY == destY) + { + PlaySE(SE_WALL_HIT); return; - } - gSprites[sBlackJack->cursorSpriteId].y = destY; - PlaySE(SE_CLICK); + } + gSprites[sBlackJack->cursorSpriteId].y = destY; + PlaySE(SE_CLICK); } -#define TOTAL_CARDS 52 - static void ShuffleCards(void) { - unsigned int allCardNumbers[TOTAL_CARDS]; - unsigned int temp; - unsigned int i, j; + u32 allCardNumbers[CARD_COUNT]; + u32 temp; + u32 i, j; - for (i = 0; i < TOTAL_CARDS; i++) { + for (i = 0; i < CARD_COUNT; i++) + { allCardNumbers[i] = i; } - for (i = 0; i < TOTAL_CARDS; i++) { - j = Random() % TOTAL_CARDS; + for (i = 0; i < CARD_COUNT; i++) + { + j = Random() % CARD_COUNT; temp = allCardNumbers[i]; allCardNumbers[i] = allCardNumbers[j]; allCardNumbers[j] = temp; } - for (i = 0; i < MAX_PLAYER_CARDS; i++) { + for (i = 0; i < MAX_PLAYER_CARDS; i++) + { sBlackJack->playerCardNumbers[i] = allCardNumbers[i]; } - for (i = 0; i < MAX_DEALER_CARDS; i++) { + for (i = 0; i < MAX_DEALER_CARDS; i++) + { sBlackJack->dealerCardNumbers[i] = allCardNumbers[MAX_PLAYER_CARDS + i]; } @@ -3147,179 +3376,111 @@ static void ShuffleCards(void) static void UpdateCards(void) { - u8 i; + u8 i; // Update player cards - for (i = 0; i < MAX_PLAYER_CARDS; i++) { + for (i = 0; i < MAX_PLAYER_CARDS; i++) + { SetCardSprite(sBlackJack->playerCardIds[i], sBlackJack->playerCardNumbers[i], i, 1); } // Update dealer cards - for (i = 0; i < MAX_DEALER_CARDS; i++) { + for (i = 0; i < MAX_DEALER_CARDS; i++) + { SetCardSprite(sBlackJack->dealerCardIds[i], sBlackJack->dealerCardNumbers[i], i + MAX_PLAYER_CARDS, 0); } } static void SetCardSprite(u8 cardId, u8 cardNum, u8 cardIndex, u8 isPlayerCard) { - unsigned int tileNum = cardNum % 13; s16 x = cardPositions[cardIndex].x; s16 y = cardPositions[cardIndex].y; u8 subpriority = cardPositions[cardIndex].priority; - const struct CompressedSpriteSheet* sheet = NULL; - const struct SpriteTemplate* template = NULL; - struct SpriteSheet spriteSheet; - - switch (cardNum) - { - case 0: sheet = &sSpriteSheet_Cards_Hearts_2; template = &sSpriteTemplate_Cards_Hearts_2; break; - case 1: sheet = &sSpriteSheet_Cards_Hearts_3; template = &sSpriteTemplate_Cards_Hearts_3; break; - case 2: sheet = &sSpriteSheet_Cards_Hearts_4; template = &sSpriteTemplate_Cards_Hearts_4; break; - case 3: sheet = &sSpriteSheet_Cards_Hearts_5; template = &sSpriteTemplate_Cards_Hearts_5; break; - case 4: sheet = &sSpriteSheet_Cards_Hearts_6; template = &sSpriteTemplate_Cards_Hearts_6; break; - case 5: sheet = &sSpriteSheet_Cards_Hearts_7; template = &sSpriteTemplate_Cards_Hearts_7; break; - case 6: sheet = &sSpriteSheet_Cards_Hearts_8; template = &sSpriteTemplate_Cards_Hearts_8; break; - case 7: sheet = &sSpriteSheet_Cards_Hearts_9; template = &sSpriteTemplate_Cards_Hearts_9; break; - case 8: sheet = &sSpriteSheet_Cards_Hearts_10; template = &sSpriteTemplate_Cards_Hearts_10; break; - case 9: sheet = &sSpriteSheet_Cards_Hearts_J; template = &sSpriteTemplate_Cards_Hearts_J; break; - case 10: sheet = &sSpriteSheet_Cards_Hearts_Q; template = &sSpriteTemplate_Cards_Hearts_Q; break; - case 11: sheet = &sSpriteSheet_Cards_Hearts_K; template = &sSpriteTemplate_Cards_Hearts_K; break; - case 12: sheet = &sSpriteSheet_Cards_Hearts_A; template = &sSpriteTemplate_Cards_Hearts_A; break; - case 13: sheet = &sSpriteSheet_Cards_Clubs_2; template = &sSpriteTemplate_Cards_Clubs_2; break; - case 14: sheet = &sSpriteSheet_Cards_Clubs_3; template = &sSpriteTemplate_Cards_Clubs_3; break; - case 15: sheet = &sSpriteSheet_Cards_Clubs_4; template = &sSpriteTemplate_Cards_Clubs_4; break; - case 16: sheet = &sSpriteSheet_Cards_Clubs_5; template = &sSpriteTemplate_Cards_Clubs_5; break; - case 17: sheet = &sSpriteSheet_Cards_Clubs_6; template = &sSpriteTemplate_Cards_Clubs_6; break; - case 18: sheet = &sSpriteSheet_Cards_Clubs_7; template = &sSpriteTemplate_Cards_Clubs_7; break; - case 19: sheet = &sSpriteSheet_Cards_Clubs_8; template = &sSpriteTemplate_Cards_Clubs_8; break; - case 20: sheet = &sSpriteSheet_Cards_Clubs_9; template = &sSpriteTemplate_Cards_Clubs_9; break; - case 21: sheet = &sSpriteSheet_Cards_Clubs_10; template = &sSpriteTemplate_Cards_Clubs_10; break; - case 22: sheet = &sSpriteSheet_Cards_Clubs_J; template = &sSpriteTemplate_Cards_Clubs_J; break; - case 23: sheet = &sSpriteSheet_Cards_Clubs_Q; template = &sSpriteTemplate_Cards_Clubs_Q; break; - case 24: sheet = &sSpriteSheet_Cards_Clubs_K; template = &sSpriteTemplate_Cards_Clubs_K; break; - case 25: sheet = &sSpriteSheet_Cards_Clubs_A; template = &sSpriteTemplate_Cards_Clubs_A; break; - case 26: sheet = &sSpriteSheet_Cards_Diamonds_2; template = &sSpriteTemplate_Cards_Diamonds_2; break; - case 27: sheet = &sSpriteSheet_Cards_Diamonds_3; template = &sSpriteTemplate_Cards_Diamonds_3; break; - case 28: sheet = &sSpriteSheet_Cards_Diamonds_4; template = &sSpriteTemplate_Cards_Diamonds_4; break; - case 29: sheet = &sSpriteSheet_Cards_Diamonds_5; template = &sSpriteTemplate_Cards_Diamonds_5; break; - case 30: sheet = &sSpriteSheet_Cards_Diamonds_6; template = &sSpriteTemplate_Cards_Diamonds_6; break; - case 31: sheet = &sSpriteSheet_Cards_Diamonds_7; template = &sSpriteTemplate_Cards_Diamonds_7; break; - case 32: sheet = &sSpriteSheet_Cards_Diamonds_8; template = &sSpriteTemplate_Cards_Diamonds_8; break; - case 33: sheet = &sSpriteSheet_Cards_Diamonds_9; template = &sSpriteTemplate_Cards_Diamonds_9; break; - case 34: sheet = &sSpriteSheet_Cards_Diamonds_10; template = &sSpriteTemplate_Cards_Diamonds_10; break; - case 35: sheet = &sSpriteSheet_Cards_Diamonds_J; template = &sSpriteTemplate_Cards_Diamonds_J; break; - case 36: sheet = &sSpriteSheet_Cards_Diamonds_Q; template = &sSpriteTemplate_Cards_Diamonds_Q; break; - case 37: sheet = &sSpriteSheet_Cards_Diamonds_K; template = &sSpriteTemplate_Cards_Diamonds_K; break; - case 38: sheet = &sSpriteSheet_Cards_Diamonds_A; template = &sSpriteTemplate_Cards_Diamonds_A; break; - case 39: sheet = &sSpriteSheet_Cards_Spades_2; template = &sSpriteTemplate_Cards_Spades_2; break; - case 40: sheet = &sSpriteSheet_Cards_Spades_3; template = &sSpriteTemplate_Cards_Spades_3; break; - case 41: sheet = &sSpriteSheet_Cards_Spades_4; template = &sSpriteTemplate_Cards_Spades_4; break; - case 42: sheet = &sSpriteSheet_Cards_Spades_5; template = &sSpriteTemplate_Cards_Spades_5; break; - case 43: sheet = &sSpriteSheet_Cards_Spades_6; template = &sSpriteTemplate_Cards_Spades_6; break; - case 44: sheet = &sSpriteSheet_Cards_Spades_7; template = &sSpriteTemplate_Cards_Spades_7; break; - case 45: sheet = &sSpriteSheet_Cards_Spades_8; template = &sSpriteTemplate_Cards_Spades_8; break; - case 46: sheet = &sSpriteSheet_Cards_Spades_9; template = &sSpriteTemplate_Cards_Spades_9; break; - case 47: sheet = &sSpriteSheet_Cards_Spades_10; template = &sSpriteTemplate_Cards_Spades_10; break; - case 48: sheet = &sSpriteSheet_Cards_Spades_J; template = &sSpriteTemplate_Cards_Spades_J; break; - case 49: sheet = &sSpriteSheet_Cards_Spades_Q; template = &sSpriteTemplate_Cards_Spades_Q; break; - case 50: sheet = &sSpriteSheet_Cards_Spades_K; template = &sSpriteTemplate_Cards_Spades_K; break; - case 51: sheet = &sSpriteSheet_Cards_Spades_A; template = &sSpriteTemplate_Cards_Spades_A; break; - default: return; // Invalid card number - } - - LoadCompressedSpriteSheet(sheet); - - cardId = CreateSprite(template, x, y, subpriority); - gSprites[cardId].oam.priority = 1; + LoadCompressedSpriteSheet(&sPlayingCards[cardNum].sheet); + + cardId = CreateSprite(&sPlayingCards[cardNum].template, x, y, subpriority); + gSprites[cardId].oam.priority = 1; gSprites[cardId].invisible = TRUE; - - if (isPlayerCard == 1) { + + if (isPlayerCard == 1) + { sBlackJack->playerCardIds[cardIndex] = cardId; sBlackJack->playerCardNumbers[cardIndex] = cardNum; - } else { + } + else + { sBlackJack->dealerCardIds[cardIndex - MAX_PLAYER_CARDS] = cardId; sBlackJack->dealerCardNumbers[cardIndex - MAX_PLAYER_CARDS] = cardNum; } } -static void LoadHeartsSpriteSheet(void) -{ - LoadCompressedSpriteSheet(&sSpriteSheet_Cards_Hearts_A); -} - static void CreateFacedown(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Facedown); - - sBlackJack->DealerFaceDownId = CreateSprite(&sSpriteTemplate_Facedown, 48, 56, 0); + sBlackJack->DealerFaceDownId = CreateSprite(&sSpriteTemplate_Facedown, 48, 56, 0); gSprites[sBlackJack->DealerFaceDownId].oam.priority = 0; - gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; + gSprites[sBlackJack->DealerFaceDownId].invisible = TRUE; } static void CreateCursorSprite(void) -{ +{ LoadCompressedSpriteSheet(&sSpriteSheet_Cursor); - - sBlackJack->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, 173, 57, 9); + sBlackJack->cursorSpriteId = CreateSprite(&sSpriteTemplate_Cursor, 173, 57, 9); gSprites[sBlackJack->cursorSpriteId].oam.priority = 3; } static void CreatePopUpSprite(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Popup); - - sBlackJack->LogoId = CreateSprite(&sSpriteTemplate_Popup, 80, 72, 1); + sBlackJack->LogoId = CreateSprite(&sSpriteTemplate_Popup, 80, 72, 1); gSprites[sBlackJack->LogoId].oam.priority = 3; } static void CreateOptions(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Option1); - - sBlackJack->option1SpriteId = CreateSprite(&sSpriteTemplate_Option1, 219, 58, 9); + sBlackJack->option1SpriteId = CreateSprite(&sSpriteTemplate_Option1, 219, 58, 9); gSprites[sBlackJack->option1SpriteId].oam.priority = 2; - + LoadCompressedSpriteSheet(&sSpriteSheet_Option2); - - sBlackJack->option2SpriteId = CreateSprite(&sSpriteTemplate_Option2, 219, 74, 9); + sBlackJack->option2SpriteId = CreateSprite(&sSpriteTemplate_Option2, 219, 74, 9); gSprites[sBlackJack->option2SpriteId].oam.priority = 2; - + LoadCompressedSpriteSheet(&sSpriteSheet_Option3); - - sBlackJack->option3SpriteId = CreateSprite(&sSpriteTemplate_Option3, 219, 90, 9); - gSprites[sBlackJack->option3SpriteId].oam.priority = 2; + sBlackJack->option3SpriteId = CreateSprite(&sSpriteTemplate_Option3, 219, 90, 9); + gSprites[sBlackJack->option3SpriteId].oam.priority = 2; } static void AdjustCards(void) { - if (sBlackJack->numPlayerCards > 5) - { - gSprites[sBlackJack->playerCardIds[1]].x = 128; - gSprites[sBlackJack->playerCardIds[2]].x = 112; - gSprites[sBlackJack->playerCardIds[3]].x = 96; - gSprites[sBlackJack->playerCardIds[4]].x = 80; - } - else - { - gSprites[sBlackJack->playerCardIds[1]].x = 112; - gSprites[sBlackJack->playerCardIds[2]].x = 80; - gSprites[sBlackJack->playerCardIds[3]].x = 48; - gSprites[sBlackJack->playerCardIds[4]].x = 16; - } - if (sBlackJack->numDealerCards > 5) - { - gSprites[sBlackJack->dealerCardIds[1]].x = 32; - gSprites[sBlackJack->dealerCardIds[2]].x = 48; - gSprites[sBlackJack->dealerCardIds[3]].x = 64; - gSprites[sBlackJack->dealerCardIds[4]].x = 80; - } - else - { - gSprites[sBlackJack->dealerCardIds[1]].x = 48; - gSprites[sBlackJack->dealerCardIds[2]].x = 80; - gSprites[sBlackJack->dealerCardIds[3]].x = 112; - gSprites[sBlackJack->dealerCardIds[4]].x = 144; - } + if (sBlackJack->numPlayerCards > 5) + { + gSprites[sBlackJack->playerCardIds[1]].x = 128; + gSprites[sBlackJack->playerCardIds[2]].x = 112; + gSprites[sBlackJack->playerCardIds[3]].x = 96; + gSprites[sBlackJack->playerCardIds[4]].x = 80; + } + else + { + gSprites[sBlackJack->playerCardIds[1]].x = 112; + gSprites[sBlackJack->playerCardIds[2]].x = 80; + gSprites[sBlackJack->playerCardIds[3]].x = 48; + gSprites[sBlackJack->playerCardIds[4]].x = 16; + } + if (sBlackJack->numDealerCards > 5) + { + gSprites[sBlackJack->dealerCardIds[1]].x = 32; + gSprites[sBlackJack->dealerCardIds[2]].x = 48; + gSprites[sBlackJack->dealerCardIds[3]].x = 64; + gSprites[sBlackJack->dealerCardIds[4]].x = 80; + } + else + { + gSprites[sBlackJack->dealerCardIds[1]].x = 48; + gSprites[sBlackJack->dealerCardIds[2]].x = 80; + gSprites[sBlackJack->dealerCardIds[3]].x = 112; + gSprites[sBlackJack->dealerCardIds[4]].x = 144; + } } static void BJVBlankCallback(void) @@ -3334,7 +3495,7 @@ static void ShowHelpBar(const u8 *str) const u8 color[3] = { TEXT_COLOR_TRANSPARENT, 1, 2 }; FillWindowPixelBuffer(0, 0xFF); - DeactivateAllTextPrinters(); + DeactivateAllTextPrinters(); AddTextPrinterParameterized3(0, 0, GetStringRightAlignXOffset(0, str, 240) - 4, 0, color, 0, str); PutWindowTilemap(0); CopyWindowToVram(0, 3); @@ -3342,11 +3503,11 @@ static void ShowHelpBar(const u8 *str) static void StartExitBJ(void) { - if (VarGet(BLACKJACK_VAR_BET) > 0) - { - AddCoins(VarGet(BLACKJACK_VAR_BET)); - VarSet(BLACKJACK_VAR_BET, 0); - } + if (sBlackJack->betBlackJack) + { + AddCoins(sBlackJack->betBlackJack); + sBlackJack->betBlackJack = 0; + } BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); sBlackJack->state = BJ_STATE_EXIT; } From 495c88648542f6e24a9e0dee6c42731d0145cf98 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Mon, 12 May 2025 07:35:56 -0400 Subject: [PATCH 010/429] fix modern warnings with snake --- src/snake.c | 2384 +++++++++++++++++++++++++-------------------------- 1 file changed, 1145 insertions(+), 1239 deletions(-) diff --git a/src/snake.c b/src/snake.c index 284dcc0501e5..a2f27c4cf655 100644 --- a/src/snake.c +++ b/src/snake.c @@ -49,16 +49,16 @@ enum { SNAKE_STATE_INIT, - SNAKE_ONIX_CRY, - SNAKE_START_TEXT, - SNAKE_STATE_MOVEMENT_LOOP, - SNAKE_STATE_PROCESS_INPUT, - SNAKE_STATE_SPRITE_UPDATE, - SNAKE_STATE_GAMEOVER_LOOP, - SNAKE_STATE_GAMEOVER, - SNAKE_STATE_START_EXIT, - SNAKE_STATE_EXIT, - SNAKE_EXIT, + SNAKE_ONIX_CRY, + SNAKE_START_TEXT, + SNAKE_STATE_MOVEMENT_LOOP, + SNAKE_STATE_PROCESS_INPUT, + SNAKE_STATE_SPRITE_UPDATE, + SNAKE_STATE_GAMEOVER_LOOP, + SNAKE_STATE_GAMEOVER, + SNAKE_STATE_START_EXIT, + SNAKE_STATE_EXIT, + SNAKE_EXIT, }; enum { @@ -78,39 +78,39 @@ enum { SPR_BODY_2, SPR_BODY_3, SPR_BODY_4, - SPR_BODY_5, + SPR_BODY_5, SPR_BODY_6, SPR_BODY_7, SPR_BODY_8, - SPR_BODY_9, + SPR_BODY_9, SPR_BODY_10, SPR_BODY_11, SPR_BODY_12, - SPR_BODY_13, + SPR_BODY_13, SPR_BODY_14, SPR_BODY_15, SPR_BODY_16, - SPR_BODY_17, + SPR_BODY_17, SPR_BODY_18, SPR_BODY_19, SPR_BODY_20, - SPR_BODY_21, + SPR_BODY_21, SPR_BODY_22, SPR_BODY_23, SPR_BODY_24, - SPR_BODY_25, + SPR_BODY_25, SPR_BODY_26, SPR_BODY_27, SPR_BODY_28, - SPR_BODY_29, + SPR_BODY_29, SPR_BODY_30, SPR_BODY_31, SPR_BODY_32, - SPR_BODY_33, + SPR_BODY_33, SPR_BODY_34, SPR_BODY_35, SPR_BODY_36, - SPR_BODY_37, + SPR_BODY_37, SPR_BODY_38, SPR_BODY_39, SPR_BODY_40, @@ -121,39 +121,39 @@ enum { X_BODY_2, X_BODY_3, X_BODY_4, - X_BODY_5, + X_BODY_5, X_BODY_6, X_BODY_7, X_BODY_8, - X_BODY_9, + X_BODY_9, X_BODY_10, X_BODY_11, X_BODY_12, - X_BODY_13, + X_BODY_13, X_BODY_14, X_BODY_15, X_BODY_16, - X_BODY_17, + X_BODY_17, X_BODY_18, X_BODY_19, X_BODY_20, - X_BODY_21, + X_BODY_21, X_BODY_22, X_BODY_23, X_BODY_24, - X_BODY_25, + X_BODY_25, X_BODY_26, X_BODY_27, X_BODY_28, - X_BODY_29, + X_BODY_29, X_BODY_30, X_BODY_31, X_BODY_32, - X_BODY_33, + X_BODY_33, X_BODY_34, X_BODY_35, X_BODY_36, - X_BODY_37, + X_BODY_37, X_BODY_38, X_BODY_39, X_BODY_40, @@ -164,39 +164,39 @@ enum { Y_BODY_2, Y_BODY_3, Y_BODY_4, - Y_BODY_5, + Y_BODY_5, Y_BODY_6, Y_BODY_7, Y_BODY_8, - Y_BODY_9, + Y_BODY_9, Y_BODY_10, Y_BODY_11, Y_BODY_12, - Y_BODY_13, + Y_BODY_13, Y_BODY_14, Y_BODY_15, Y_BODY_16, - Y_BODY_17, + Y_BODY_17, Y_BODY_18, Y_BODY_19, Y_BODY_20, - Y_BODY_21, + Y_BODY_21, Y_BODY_22, Y_BODY_23, Y_BODY_24, - Y_BODY_25, + Y_BODY_25, Y_BODY_26, Y_BODY_27, Y_BODY_28, - Y_BODY_29, + Y_BODY_29, Y_BODY_30, Y_BODY_31, Y_BODY_32, - Y_BODY_33, + Y_BODY_33, Y_BODY_34, Y_BODY_35, Y_BODY_36, - Y_BODY_37, + Y_BODY_37, Y_BODY_38, Y_BODY_39, Y_BODY_40, @@ -207,39 +207,39 @@ enum { DIR_BODY_2, DIR_BODY_3, DIR_BODY_4, - DIR_BODY_5, + DIR_BODY_5, DIR_BODY_6, DIR_BODY_7, DIR_BODY_8, - DIR_BODY_9, + DIR_BODY_9, DIR_BODY_10, DIR_BODY_11, DIR_BODY_12, - DIR_BODY_13, + DIR_BODY_13, DIR_BODY_14, DIR_BODY_15, DIR_BODY_16, - DIR_BODY_17, + DIR_BODY_17, DIR_BODY_18, DIR_BODY_19, DIR_BODY_20, - DIR_BODY_21, + DIR_BODY_21, DIR_BODY_22, DIR_BODY_23, DIR_BODY_24, - DIR_BODY_25, + DIR_BODY_25, DIR_BODY_26, DIR_BODY_27, DIR_BODY_28, - DIR_BODY_29, + DIR_BODY_29, DIR_BODY_30, DIR_BODY_31, DIR_BODY_32, - DIR_BODY_33, + DIR_BODY_33, DIR_BODY_34, DIR_BODY_35, DIR_BODY_36, - DIR_BODY_37, + DIR_BODY_37, DIR_BODY_38, DIR_BODY_39, DIR_BODY_40, @@ -250,39 +250,39 @@ enum { DIR_LAST_BODY_2, DIR_LAST_BODY_3, DIR_LAST_BODY_4, - DIR_LAST_BODY_5, + DIR_LAST_BODY_5, DIR_LAST_BODY_6, DIR_LAST_BODY_7, DIR_LAST_BODY_8, - DIR_LAST_BODY_9, + DIR_LAST_BODY_9, DIR_LAST_BODY_10, DIR_LAST_BODY_11, DIR_LAST_BODY_12, - DIR_LAST_BODY_13, + DIR_LAST_BODY_13, DIR_LAST_BODY_14, DIR_LAST_BODY_15, DIR_LAST_BODY_16, - DIR_LAST_BODY_17, + DIR_LAST_BODY_17, DIR_LAST_BODY_18, DIR_LAST_BODY_19, DIR_LAST_BODY_20, - DIR_LAST_BODY_21, + DIR_LAST_BODY_21, DIR_LAST_BODY_22, DIR_LAST_BODY_23, DIR_LAST_BODY_24, - DIR_LAST_BODY_25, + DIR_LAST_BODY_25, DIR_LAST_BODY_26, DIR_LAST_BODY_27, DIR_LAST_BODY_28, - DIR_LAST_BODY_29, + DIR_LAST_BODY_29, DIR_LAST_BODY_30, DIR_LAST_BODY_31, DIR_LAST_BODY_32, - DIR_LAST_BODY_33, + DIR_LAST_BODY_33, DIR_LAST_BODY_34, DIR_LAST_BODY_35, DIR_LAST_BODY_36, - DIR_LAST_BODY_37, + DIR_LAST_BODY_37, DIR_LAST_BODY_38, DIR_LAST_BODY_39, DIR_LAST_BODY_40, @@ -310,52 +310,50 @@ enum { #define LEFT 3 struct Snake { - u8 state; - u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; - u8 NumberSpriteIds[MAX_SPRITES_NUM]; - u8 ToggleButtons; - u8 OnixSpriteId; - u8 OnixTileX; - u8 OnixTileY; - u8 BodySprite1Id; - u8 Body1x; - u8 Body1y; - u8 Body1Direction; - u8 Body1LastDirection; - u8 BodySprite2Id; - u8 Body2x; - u8 Body2y; - u8 Body2Direction; - u8 Body2LastDirection; - u8 BodySpriteIds[MAX_SPRITES_BODY]; - u8 BodySpritesX[MAX_X_BODY]; - u8 BodySpritesY[MAX_Y_BODY]; - u8 BodySpritesDirection[MAX_DIR_BODY]; - u8 BodySpritesLastDirection[MAX_DIR_LAST_BODY]; - u8 BodyCount; - u8 Direction; // 0 = Down, 1 = Up, 2 = Right, 3 = Left - u8 LastDirection; - u32 FrameCount; - u32 delay; - u8 CanMove; - u8 GameOver; - u8 Loop; - u8 BerrySpriteId; - u8 BerryX; - u8 BerryY; - u8 StartSpriteId; - u8 GameOverSpriteId; - u32 timer; - u8 MenuSpriteId; - u32 Total; -}; + u8 state; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 NumberSpriteIds[MAX_SPRITES_NUM]; + u8 ToggleButtons; + u8 OnixSpriteId; + u8 OnixTileX; + u8 OnixTileY; + u8 BodySprite1Id; + u8 Body1x; + u8 Body1y; + u8 Body1Direction; + u8 Body1LastDirection; + u8 BodySprite2Id; + u8 Body2x; + u8 Body2y; + u8 Body2Direction; + u8 Body2LastDirection; + u8 BodySpriteIds[MAX_SPRITES_BODY]; + u8 BodySpritesX[MAX_X_BODY]; + u8 BodySpritesY[MAX_Y_BODY]; + u8 BodySpritesDirection[MAX_DIR_BODY]; + u8 BodySpritesLastDirection[MAX_DIR_LAST_BODY]; + u8 BodyCount; + u8 Direction; // 0 = Down, 1 = Up, 2 = Right, 3 = Left + u8 LastDirection; + u32 FrameCount; + u32 delay; + u8 CanMove; + u8 GameOver; + u8 Loop; + u8 BerrySpriteId; + u8 BerryX; + u8 BerryY; + u8 StartSpriteId; + u8 GameOverSpriteId; + u32 timer; + u8 MenuSpriteId; + u32 Total; +}; static EWRAM_DATA struct Snake *sSnake = NULL; -static EWRAM_DATA u8 sTextWindowId = 0; static void FadeToSnakeScreen(u8 taskId); static void InitSnakeScreen(void); -static void DerbyVBlankCallback(void); static const u8 sTestText[] = _("TEST"); @@ -425,15 +423,15 @@ static const struct BgTemplate sSnakeBGtemplates[] = { }; static const struct WindowTemplate sSnakeWinTemplates[] = { - { + { .bg = SNAKE_MENUS, .tilemapLeft = 6, .tilemapTop = 5, .width = 9, .height = 2, .paletteNum = 0xF, - .baseBlock = 0x194, - }, + .baseBlock = 0x194, + }, DUMMY_WIN_TEMPLATE, }; @@ -461,10 +459,10 @@ static const struct WindowTemplate sSnakeWinTemplates[] = { static const struct SpritePalette sSpritePalettes[] = { { .data = OnixPAL, .tag = PAL_ONIX }, - { .data = BerryPAL, .tag = PAL_BERRY }, - { .data = TextPAL, .tag = PAL_TEXT }, - { .data = MenuPAL, .tag = PAL_MENU }, - { .data = Digits_Pal, .tag = PAL_DIGITS }, + { .data = BerryPAL, .tag = PAL_BERRY }, + { .data = TextPAL, .tag = PAL_TEXT }, + { .data = MenuPAL, .tag = PAL_MENU }, + { .data = Digits_Pal, .tag = PAL_DIGITS }, {} }; @@ -511,7 +509,7 @@ static const struct OamData sOamData_Menu = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -546,7 +544,7 @@ static const struct OamData sOamData_Text = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -610,7 +608,7 @@ static const struct OamData sOamData_Berry = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x32), .size = SPRITE_SIZE(16x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -660,7 +658,7 @@ static const struct OamData sOamData_Onix = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x32), .size = SPRITE_SIZE(16x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -694,9 +692,9 @@ static const union AnimCmd sOnixAnimCmd_3[] = static const union AnimCmd *const sOnixAnimCmds[] = { sOnixAnimCmd_0, // Down - sOnixAnimCmd_1, // Up - sOnixAnimCmd_2, // Right - sOnixAnimCmd_3, // Left + sOnixAnimCmd_1, // Up + sOnixAnimCmd_2, // Right + sOnixAnimCmd_3, // Left }; static const struct SpriteTemplate sSpriteTemplate_Onix = @@ -795,10 +793,10 @@ static const struct SpriteTemplate sSpriteTemplate_Onix_Body_3 = typedef struct { int TileID; - s16 xReal; - s16 yReal; - u8 y; - u8 x; + s16 xReal; + s16 yReal; + u8 y; + u8 x; } SnakeTiles; #define MAX_X 8 @@ -806,99 +804,98 @@ typedef struct { #define MAX_TILES 72 static const SnakeTiles SnakeTilesArray[] = { - + {0, 56, 16, 0, 0}, // Row 1 - {1, 72, 16, 0, 1}, - {2, 88, 16, 0, 2}, - {3, 104, 16, 0, 3}, - {4, 120, 16, 0, 4}, - {5, 136, 16, 0, 5}, - {6, 152, 16, 0, 6}, - {7, 168, 16, 0, 7}, - {8, 184, 16, 0, 8}, - - {9, 56, 32, 1, 0}, // Row 2 - {10, 72, 32, 1, 1}, - {11, 88, 32, 1, 2}, - {12, 104, 32, 1, 3}, - {13, 120, 32, 1, 4}, - {14, 136, 32, 1, 5}, - {15, 152, 32, 1, 6}, - {16, 168, 32, 1, 7}, - {17, 184, 32, 1, 8}, - - {18, 56, 48, 2, 0}, // Row 3 - {19, 72, 48, 2, 1}, - {20, 88, 48, 2, 2}, - {21, 104, 48, 2, 3}, - {22, 120, 48, 2, 4}, - {23, 136, 48, 2, 5}, - {24, 152, 48, 2, 6}, - {25, 168, 48, 2, 7}, - {26, 184, 48, 2, 8}, - - {27, 56, 64, 3, 0}, // Row 4 - {28, 72, 64, 3, 1}, - {29, 88, 64, 3, 2}, - {30, 104, 64, 3, 3}, - {31, 120, 64, 3, 4}, - {32, 136, 64, 3, 5}, - {33, 152, 64, 3, 6}, - {34, 168, 64, 3, 7}, - {35, 184, 64, 3, 8}, - - {36, 56, 80, 4, 0}, // Row 5 - {37, 72, 80, 4, 1}, - {38, 88, 80, 4, 2}, - {39, 104, 80, 4, 3}, - {40, 120, 80, 4, 4}, - {41, 136, 80, 4, 5}, - {42, 152, 80, 4, 6}, - {43, 168, 80, 4, 7}, - {44, 184, 80, 4, 8}, - - {45, 56, 96, 5, 0}, // Row 6 - {46, 72, 96, 5, 1}, - {47, 88, 96, 5, 2}, - {48, 104, 96, 5, 3}, - {49, 120, 96, 5, 4}, - {50, 136, 96, 5, 5}, - {51, 152, 96, 5, 6}, - {52, 168, 96, 5, 7}, - {53, 184, 96, 5, 8}, - - {54, 56, 112, 6, 0}, // Row 7 - {55, 72, 112, 6, 1}, - {56, 88, 112, 6, 2}, - {57, 104, 112, 6, 3}, - {58, 120, 112, 6, 4}, - {59, 136, 112, 6, 5}, - {60, 152, 112, 6, 6}, - {61, 168, 112, 6, 7}, - {62, 184, 112, 6, 8}, - - {63, 56, 128, 7, 0}, // Row 8 - {64, 72, 128, 7, 1}, - {65, 88, 128, 7, 2}, - {66, 104, 128, 7, 3}, - {67, 120, 128, 7, 4}, - {68, 136, 128, 7, 5}, - {69, 152, 128, 7, 6}, - {70, 168, 128, 7, 7}, - {71, 184, 128, 7, 8}, + {1, 72, 16, 0, 1}, + {2, 88, 16, 0, 2}, + {3, 104, 16, 0, 3}, + {4, 120, 16, 0, 4}, + {5, 136, 16, 0, 5}, + {6, 152, 16, 0, 6}, + {7, 168, 16, 0, 7}, + {8, 184, 16, 0, 8}, + + {9, 56, 32, 1, 0}, // Row 2 + {10, 72, 32, 1, 1}, + {11, 88, 32, 1, 2}, + {12, 104, 32, 1, 3}, + {13, 120, 32, 1, 4}, + {14, 136, 32, 1, 5}, + {15, 152, 32, 1, 6}, + {16, 168, 32, 1, 7}, + {17, 184, 32, 1, 8}, + + {18, 56, 48, 2, 0}, // Row 3 + {19, 72, 48, 2, 1}, + {20, 88, 48, 2, 2}, + {21, 104, 48, 2, 3}, + {22, 120, 48, 2, 4}, + {23, 136, 48, 2, 5}, + {24, 152, 48, 2, 6}, + {25, 168, 48, 2, 7}, + {26, 184, 48, 2, 8}, + + {27, 56, 64, 3, 0}, // Row 4 + {28, 72, 64, 3, 1}, + {29, 88, 64, 3, 2}, + {30, 104, 64, 3, 3}, + {31, 120, 64, 3, 4}, + {32, 136, 64, 3, 5}, + {33, 152, 64, 3, 6}, + {34, 168, 64, 3, 7}, + {35, 184, 64, 3, 8}, + + {36, 56, 80, 4, 0}, // Row 5 + {37, 72, 80, 4, 1}, + {38, 88, 80, 4, 2}, + {39, 104, 80, 4, 3}, + {40, 120, 80, 4, 4}, + {41, 136, 80, 4, 5}, + {42, 152, 80, 4, 6}, + {43, 168, 80, 4, 7}, + {44, 184, 80, 4, 8}, + + {45, 56, 96, 5, 0}, // Row 6 + {46, 72, 96, 5, 1}, + {47, 88, 96, 5, 2}, + {48, 104, 96, 5, 3}, + {49, 120, 96, 5, 4}, + {50, 136, 96, 5, 5}, + {51, 152, 96, 5, 6}, + {52, 168, 96, 5, 7}, + {53, 184, 96, 5, 8}, + + {54, 56, 112, 6, 0}, // Row 7 + {55, 72, 112, 6, 1}, + {56, 88, 112, 6, 2}, + {57, 104, 112, 6, 3}, + {58, 120, 112, 6, 4}, + {59, 136, 112, 6, 5}, + {60, 152, 112, 6, 6}, + {61, 168, 112, 6, 7}, + {62, 184, 112, 6, 8}, + + {63, 56, 128, 7, 0}, // Row 8 + {64, 72, 128, 7, 1}, + {65, 88, 128, 7, 2}, + {66, 104, 128, 7, 3}, + {67, 120, 128, 7, 4}, + {68, 136, 128, 7, 5}, + {69, 152, 128, 7, 6}, + {70, 168, 128, 7, 7}, + {71, 184, 128, 7, 8}, }; void StartSnake(void) { - u8 taskId = 0; sSnake = AllocZeroed(sizeof(struct Snake)); - taskId = CreateTask(FadeToSnakeScreen, 0); + CreateTask(FadeToSnakeScreen, 0); } static void FadeToSnakeScreen(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].data[0]) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -930,21 +927,6 @@ static void SnakeMainCallback(void) UpdatePaletteFade(); } -static void HandleInput(void) -{ - if (sSnake->ToggleButtons == 1) - { - if (JOY_NEW(A_BUTTON)) - { - - } - else if (JOY_NEW(B_BUTTON)) - { - - } - } -} - static void ExitSnake(void) { if (!gPaletteFade.active) @@ -962,113 +944,50 @@ static void StartExitSnake(void) static void CreateOnix(void) { - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Onix); - - sSnake->OnixSpriteId = CreateSprite(&sSpriteTemplate_Onix, 120, 64, 0); // 5, 4 -} - -static void CreateBody(s16 x, s16 y) -{ - u8 Body; - struct SpriteSheet s; - - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[(sSnake->BodyCount - 3)] = CreateSprite(&sSpriteTemplate_Onix_Body, x, y, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[(sSnake->BodyCount - 3)] = CreateSprite(&sSpriteTemplate_Onix_Body_2, x, y, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[(sSnake->BodyCount - 3)] = CreateSprite(&sSpriteTemplate_Onix_Body_3, x, y, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[(sSnake->BodyCount - 3)] = CreateSprite(&sSpriteTemplate_Onix_Body_4, x, y, sSnake->BodyCount); - } + LoadCompressedSpriteSheet(&sSpriteSheet_Onix); + + sSnake->OnixSpriteId = CreateSprite(&sSpriteTemplate_Onix, 120, 64, 0); // 5, 4 } static void CreateBody1(void) { - s16 x = 120; - s16 y = 48; - u8 Body; - struct SpriteSheet s; - - Body = 3; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body, x, y, 1); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body_2, x, y, 1); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body_3, x, y, 1); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body_4, x, y, 1); - } + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySprite1Id = CreateSprite(&sSpriteTemplate_Onix_Body_4, 120, 48, 1); } static void CreateBody2(void) { - s16 x = 120; - s16 y = 32; - u8 Body; - struct SpriteSheet s; - - Body = Random() % 4; - - if (Body == 0) - { + s16 x = 120; + s16 y = 32; + u8 Body; + + Body = Random() % 4; + + if (Body == 0) + { LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body, x, y, 2); - } - else if (Body == 1) - { + + sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body, x, y, 2); + } + else if (Body == 1) + { LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_2, x, y, 2); - } - else if (Body == 2) - { + + sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_2, x, y, 2); + } + else if (Body == 2) + { LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_3, x, y, 2); - } - else - { + + sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_3, x, y, 2); + } + else + { LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_4, x, y, 2); - } + + sSnake->BodySprite2Id = CreateSprite(&sSpriteTemplate_Onix_Body_4, x, y, 2); + } } #define MAX_FRAME_COUNT 8 @@ -1076,267 +995,267 @@ static void CreateBody2(void) static void HandleMovement(void) { - - u8 Count = sSnake->BodyCount - 3; - int j; - int i; - - if (sSnake->Direction == DOWN) - { - if (sSnake->OnixTileY < MAX_Y) - { - sSnake->CanMove = 0; - gSprites[sSnake->OnixSpriteId].y += 2; - } - else - { - sSnake->CanMove = 1; - } - } - else if (sSnake->Direction == UP) - { - if (sSnake->OnixTileY > 0) - { - sSnake->CanMove = 0; - gSprites[sSnake->OnixSpriteId].y -= 2; - } - else - { - sSnake->CanMove = 1; - } - } - else if (sSnake->Direction == LEFT) - { - if (sSnake->OnixTileX > 0) - { - sSnake->CanMove = 0; - gSprites[sSnake->OnixSpriteId].x -= 2; - } - else - { - sSnake->CanMove = 1; - } - } - else if (sSnake->Direction == RIGHT) - { - if (sSnake->OnixTileX < MAX_X) - { - sSnake->CanMove = 0; - gSprites[sSnake->OnixSpriteId].x += 2; - } - else - { - sSnake->CanMove = 1; - } - } - - if (sSnake->Body1Direction == DOWN) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySprite1Id].y += 2; - } - } - else if (sSnake->Body1Direction == UP) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySprite1Id].y -= 2; - } - } - else if (sSnake->Body1Direction == LEFT) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySprite1Id].x -= 2; - } - } - else if (sSnake->Body1Direction == RIGHT) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySprite1Id].x += 2; - } - } - - if (sSnake->Body2Direction == DOWN) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySprite2Id].y += 2; - } - } - else if (sSnake->Body2Direction == UP) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySprite2Id].y -= 2; - } - } - else if (sSnake->Body2Direction == LEFT) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySprite2Id].x -= 2; - } - } - else if (sSnake->Body2Direction == RIGHT) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySprite2Id].x += 2; - } - } - - for (i = Count, j = 0; i > 0; i--, j++) { - if (sSnake->BodySpritesDirection[j] == DOWN) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySpriteIds[j]].y += 2; - } - } - else if (sSnake->BodySpritesDirection[j] == UP) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySpriteIds[j]].y -= 2; - } - } - else if (sSnake->BodySpritesDirection[j] == LEFT) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySpriteIds[j]].x -= 2; - } - } - else if (sSnake->BodySpritesDirection[j] == RIGHT) - { - if (sSnake->CanMove == 0) - { - gSprites[sSnake->BodySpriteIds[j]].x += 2; - } - } - } - + + u8 Count = sSnake->BodyCount - 3; + int j; + int i; + + if (sSnake->Direction == DOWN) + { + if (sSnake->OnixTileY < MAX_Y) + { + sSnake->CanMove = 0; + gSprites[sSnake->OnixSpriteId].y += 2; + } + else + { + sSnake->CanMove = 1; + } + } + else if (sSnake->Direction == UP) + { + if (sSnake->OnixTileY > 0) + { + sSnake->CanMove = 0; + gSprites[sSnake->OnixSpriteId].y -= 2; + } + else + { + sSnake->CanMove = 1; + } + } + else if (sSnake->Direction == LEFT) + { + if (sSnake->OnixTileX > 0) + { + sSnake->CanMove = 0; + gSprites[sSnake->OnixSpriteId].x -= 2; + } + else + { + sSnake->CanMove = 1; + } + } + else if (sSnake->Direction == RIGHT) + { + if (sSnake->OnixTileX < MAX_X) + { + sSnake->CanMove = 0; + gSprites[sSnake->OnixSpriteId].x += 2; + } + else + { + sSnake->CanMove = 1; + } + } + + if (sSnake->Body1Direction == DOWN) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite1Id].y += 2; + } + } + else if (sSnake->Body1Direction == UP) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite1Id].y -= 2; + } + } + else if (sSnake->Body1Direction == LEFT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite1Id].x -= 2; + } + } + else if (sSnake->Body1Direction == RIGHT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite1Id].x += 2; + } + } + + if (sSnake->Body2Direction == DOWN) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite2Id].y += 2; + } + } + else if (sSnake->Body2Direction == UP) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite2Id].y -= 2; + } + } + else if (sSnake->Body2Direction == LEFT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite2Id].x -= 2; + } + } + else if (sSnake->Body2Direction == RIGHT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySprite2Id].x += 2; + } + } + + for (i = Count, j = 0; i > 0; i--, j++) { + if (sSnake->BodySpritesDirection[j] == DOWN) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySpriteIds[j]].y += 2; + } + } + else if (sSnake->BodySpritesDirection[j] == UP) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySpriteIds[j]].y -= 2; + } + } + else if (sSnake->BodySpritesDirection[j] == LEFT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySpriteIds[j]].x -= 2; + } + } + else if (sSnake->BodySpritesDirection[j] == RIGHT) + { + if (sSnake->CanMove == 0) + { + gSprites[sSnake->BodySpriteIds[j]].x += 2; + } + } + } + } static void HandleMovementMinus(u8 num) { - - u8 Count = sSnake->BodyCount - 3; - int j; - int i; - - if (sSnake->Direction == DOWN) - { - gSprites[sSnake->OnixSpriteId].y += (2 * num); - } - else if (sSnake->Direction == UP) - { - gSprites[sSnake->OnixSpriteId].y -= (2 * num); - } - else if (sSnake->Direction == LEFT) - { - gSprites[sSnake->OnixSpriteId].x -= (2 * num); - } - else if (sSnake->Direction == RIGHT) - { - gSprites[sSnake->OnixSpriteId].x += (2 * num); - } - - if (sSnake->Body1Direction == DOWN) - { - gSprites[sSnake->BodySprite1Id].y += (2 * num); - } - else if (sSnake->Body1Direction == UP) - { - gSprites[sSnake->BodySprite1Id].y -= (2 * num); - } - else if (sSnake->Body1Direction == LEFT) - { - gSprites[sSnake->BodySprite1Id].x -= (2 * num); - } - else if (sSnake->Body1Direction == RIGHT) - { - gSprites[sSnake->BodySprite1Id].x += (2 * num); - } - - if (sSnake->Body2Direction == DOWN) - { - gSprites[sSnake->BodySprite2Id].y += (2 * num); - } - else if (sSnake->Body2Direction == UP) - { - gSprites[sSnake->BodySprite2Id].y -= (2 * num); - } - else if (sSnake->Body2Direction == LEFT) - { - gSprites[sSnake->BodySprite2Id].x -= (2 * num); - } - else if (sSnake->Body2Direction == RIGHT) - { - gSprites[sSnake->BodySprite2Id].x += (2 * num); - } - - for (i = Count, j = 0; i > 0; i--, j++) { - if (sSnake->BodySpritesDirection[j] == DOWN) - { - gSprites[sSnake->BodySpriteIds[j]].y += (2 * num); - } - else if (sSnake->BodySpritesDirection[j] == UP) - { - gSprites[sSnake->BodySpriteIds[j]].y -= (2 * num); - } - else if (sSnake->BodySpritesDirection[j] == LEFT) - { - gSprites[sSnake->BodySpriteIds[j]].x -= (2 * num); - } - else if (sSnake->BodySpritesDirection[j] == RIGHT) - { - gSprites[sSnake->BodySpriteIds[j]].x += (2 * num); - } - } - + + u8 Count = sSnake->BodyCount - 3; + int j; + int i; + + if (sSnake->Direction == DOWN) + { + gSprites[sSnake->OnixSpriteId].y += (2 * num); + } + else if (sSnake->Direction == UP) + { + gSprites[sSnake->OnixSpriteId].y -= (2 * num); + } + else if (sSnake->Direction == LEFT) + { + gSprites[sSnake->OnixSpriteId].x -= (2 * num); + } + else if (sSnake->Direction == RIGHT) + { + gSprites[sSnake->OnixSpriteId].x += (2 * num); + } + + if (sSnake->Body1Direction == DOWN) + { + gSprites[sSnake->BodySprite1Id].y += (2 * num); + } + else if (sSnake->Body1Direction == UP) + { + gSprites[sSnake->BodySprite1Id].y -= (2 * num); + } + else if (sSnake->Body1Direction == LEFT) + { + gSprites[sSnake->BodySprite1Id].x -= (2 * num); + } + else if (sSnake->Body1Direction == RIGHT) + { + gSprites[sSnake->BodySprite1Id].x += (2 * num); + } + + if (sSnake->Body2Direction == DOWN) + { + gSprites[sSnake->BodySprite2Id].y += (2 * num); + } + else if (sSnake->Body2Direction == UP) + { + gSprites[sSnake->BodySprite2Id].y -= (2 * num); + } + else if (sSnake->Body2Direction == LEFT) + { + gSprites[sSnake->BodySprite2Id].x -= (2 * num); + } + else if (sSnake->Body2Direction == RIGHT) + { + gSprites[sSnake->BodySprite2Id].x += (2 * num); + } + + for (i = Count, j = 0; i > 0; i--, j++) { + if (sSnake->BodySpritesDirection[j] == DOWN) + { + gSprites[sSnake->BodySpriteIds[j]].y += (2 * num); + } + else if (sSnake->BodySpritesDirection[j] == UP) + { + gSprites[sSnake->BodySpriteIds[j]].y -= (2 * num); + } + else if (sSnake->BodySpritesDirection[j] == LEFT) + { + gSprites[sSnake->BodySpriteIds[j]].x -= (2 * num); + } + else if (sSnake->BodySpritesDirection[j] == RIGHT) + { + gSprites[sSnake->BodySpriteIds[j]].x += (2 * num); + } + } + } static void UpdateLocations(void) { - u8 Count = sSnake->BodyCount - 3; - int i; - int j; - int k; - - for (i = 0; i < MAX_TILES; i++) { - if ((SnakeTilesArray[i].xReal == gSprites[sSnake->OnixSpriteId].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->OnixSpriteId].y)) { - sSnake->OnixTileX = SnakeTilesArray[i].x; - sSnake->OnixTileY = SnakeTilesArray[i].y; - } - } - - for (i = 0; i < MAX_TILES; i++) { - if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySprite1Id].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySprite1Id].y)) { - sSnake->Body1x = SnakeTilesArray[i].x; - sSnake->Body1y = SnakeTilesArray[i].y; - } - } - - for (i = 0; i < MAX_TILES; i++) { - if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySprite2Id].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySprite2Id].y)) { - sSnake->Body2x = SnakeTilesArray[i].x; - sSnake->Body2y = SnakeTilesArray[i].y; - } - } - - for (k = Count, j = 0; k >= 0; k--, j++) { - - for (i = 0; i < MAX_TILES; i++) { - if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySpriteIds[j]].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySpriteIds[j]].y)) { - sSnake->BodySpritesX[j] = SnakeTilesArray[i].x; - sSnake->BodySpritesY[j] = SnakeTilesArray[i].y; - } - } - } + u8 Count = sSnake->BodyCount - 3; + int i; + int j; + int k; + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].xReal == gSprites[sSnake->OnixSpriteId].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->OnixSpriteId].y)) { + sSnake->OnixTileX = SnakeTilesArray[i].x; + sSnake->OnixTileY = SnakeTilesArray[i].y; + } + } + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySprite1Id].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySprite1Id].y)) { + sSnake->Body1x = SnakeTilesArray[i].x; + sSnake->Body1y = SnakeTilesArray[i].y; + } + } + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySprite2Id].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySprite2Id].y)) { + sSnake->Body2x = SnakeTilesArray[i].x; + sSnake->Body2y = SnakeTilesArray[i].y; + } + } + + for (k = Count, j = 0; k >= 0; k--, j++) { + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].xReal == gSprites[sSnake->BodySpriteIds[j]].x) && (SnakeTilesArray[i].yReal == gSprites[sSnake->BodySpriteIds[j]].y)) { + sSnake->BodySpritesX[j] = SnakeTilesArray[i].x; + sSnake->BodySpritesY[j] = SnakeTilesArray[i].y; + } + } + } } static void UpdateDirections(void) @@ -1362,81 +1281,81 @@ static void UpdateDirections(void) static int CheckBoundaries(void) { - u8 Count = sSnake->BodyCount - 3; - int j; - int i; - - if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == MAX_X)) - { - return 1; - } - else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == 0)) - { - return 1; - } - else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == 0)) - { - return 1; - } - else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == MAX_Y)) - { - return 1; - } - - if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->Body1x - 1) && (sSnake->OnixTileY == sSnake->Body1y)) - { - return 1; - } - else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->Body1x + 1) && (sSnake->OnixTileY == sSnake->Body1y)) - { - return 1; - } - else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->Body1y + 1) && (sSnake->OnixTileX == sSnake->Body1x)) - { - return 1; - } - else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->Body1y - 1) && (sSnake->OnixTileX == sSnake->Body1x)) - { - return 1; - } - - if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->Body2x - 1) && (sSnake->OnixTileY == sSnake->Body2y)) - { - return 1; - } - else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->Body2x + 1) && (sSnake->OnixTileY == sSnake->Body2y)) - { - return 1; - } - else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->Body2y + 1) && (sSnake->OnixTileX == sSnake->Body2x)) - { - return 1; - } - else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->Body2y - 1) && (sSnake->OnixTileX == sSnake->Body2x)) - { - return 1; - } - - for (i = Count, j = 0; i > 0; i--, j++) { - if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->BodySpritesX[j] - 1) && (sSnake->OnixTileY == sSnake->BodySpritesY[j])) - { - return 1; - } - else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->BodySpritesX[j] + 1) && (sSnake->OnixTileY == sSnake->BodySpritesY[j])) - { - return 1; - } - else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->BodySpritesY[j] + 1) && (sSnake->OnixTileX == sSnake->BodySpritesX[j])) - { - return 1; - } - else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->BodySpritesY[j] - 1) && (sSnake->OnixTileX == sSnake->BodySpritesX[j])) - { - return 1; - } - } - - return 0; + u8 Count = sSnake->BodyCount - 3; + int j; + int i; + + if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == MAX_X)) + { + return 1; + } + else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == 0)) + { + return 1; + } + else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == 0)) + { + return 1; + } + else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == MAX_Y)) + { + return 1; + } + + if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->Body1x - 1) && (sSnake->OnixTileY == sSnake->Body1y)) + { + return 1; + } + else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->Body1x + 1) && (sSnake->OnixTileY == sSnake->Body1y)) + { + return 1; + } + else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->Body1y + 1) && (sSnake->OnixTileX == sSnake->Body1x)) + { + return 1; + } + else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->Body1y - 1) && (sSnake->OnixTileX == sSnake->Body1x)) + { + return 1; + } + + if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->Body2x - 1) && (sSnake->OnixTileY == sSnake->Body2y)) + { + return 1; + } + else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->Body2x + 1) && (sSnake->OnixTileY == sSnake->Body2y)) + { + return 1; + } + else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->Body2y + 1) && (sSnake->OnixTileX == sSnake->Body2x)) + { + return 1; + } + else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->Body2y - 1) && (sSnake->OnixTileX == sSnake->Body2x)) + { + return 1; + } + + for (i = Count, j = 0; i > 0; i--, j++) { + if ((sSnake->Direction == RIGHT) && (sSnake->OnixTileX == sSnake->BodySpritesX[j] - 1) && (sSnake->OnixTileY == sSnake->BodySpritesY[j])) + { + return 1; + } + else if ((sSnake->Direction == LEFT) && (sSnake->OnixTileX == sSnake->BodySpritesX[j] + 1) && (sSnake->OnixTileY == sSnake->BodySpritesY[j])) + { + return 1; + } + else if ((sSnake->Direction == UP) && (sSnake->OnixTileY == sSnake->BodySpritesY[j] + 1) && (sSnake->OnixTileX == sSnake->BodySpritesX[j])) + { + return 1; + } + else if ((sSnake->Direction == DOWN) && (sSnake->OnixTileY == sSnake->BodySpritesY[j] - 1) && (sSnake->OnixTileX == sSnake->BodySpritesX[j])) + { + return 1; + } + } + + return 0; } #define TRUE 1 @@ -1444,80 +1363,79 @@ static int CheckBoundaries(void) static void CreateBerry(void) { - s16 xf = 0; - s16 yf = 0; - u8 Berry; - u8 Count = sSnake->BodyCount - 3; - int i; - int j; - struct SpriteSheet s; + s16 xf = 0; + s16 yf = 0; + u8 Berry; + u8 Count = sSnake->BodyCount - 3; + int i; + int j; while (1) - { - u8 x; - u8 y; - u8 occupied = FALSE; - - i = Random() % MAX_TILES; - x = SnakeTilesArray[i].x; - y = SnakeTilesArray[i].y; - - if ((x == 0 && y == 0) || - (x == 1 && y == 0) || - (x == 0 && y == 1)) - continue; - - if ((sSnake->OnixTileX == x && sSnake->OnixTileY == y) || - (sSnake->Body1x == x && sSnake->Body1y == y) || - (sSnake->Body2x == x && sSnake->Body2y == y)) - { - continue; - } - - for (j = 0; j < Count; j++) { - if (sSnake->BodySpritesX[j] == x && sSnake->BodySpritesY[j] == y) { - occupied = TRUE; - break; - } - } - - if (!occupied) { - sSnake->BerryX = x; - sSnake->BerryY = y; - break; - } - } - - for (i = 0; i < MAX_TILES; i++) { - if ((SnakeTilesArray[i].x == sSnake->BerryX) && (SnakeTilesArray[i].y == sSnake->BerryY)) { - xf = SnakeTilesArray[i].xReal; - yf = SnakeTilesArray[i].yReal; - } - } - - Berry = Random() % 3; - - if (Berry == 0) - { - LoadSpritePalettes(sSpritePalettes); + { + u8 x; + u8 y; + u8 occupied = FALSE; + + i = Random() % MAX_TILES; + x = SnakeTilesArray[i].x; + y = SnakeTilesArray[i].y; + + if ((x == 0 && y == 0) || + (x == 1 && y == 0) || + (x == 0 && y == 1)) + continue; + + if ((sSnake->OnixTileX == x && sSnake->OnixTileY == y) || + (sSnake->Body1x == x && sSnake->Body1y == y) || + (sSnake->Body2x == x && sSnake->Body2y == y)) + { + continue; + } + + for (j = 0; j < Count; j++) { + if (sSnake->BodySpritesX[j] == x && sSnake->BodySpritesY[j] == y) { + occupied = TRUE; + break; + } + } + + if (!occupied) { + sSnake->BerryX = x; + sSnake->BerryY = y; + break; + } + } + + for (i = 0; i < MAX_TILES; i++) { + if ((SnakeTilesArray[i].x == sSnake->BerryX) && (SnakeTilesArray[i].y == sSnake->BerryY)) { + xf = SnakeTilesArray[i].xReal; + yf = SnakeTilesArray[i].yReal; + } + } + + Berry = Random() % 3; + + if (Berry == 0) + { + LoadSpritePalettes(sSpritePalettes); LoadCompressedSpriteSheet(&sSpriteSheet_Berry_1); - - sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_1, xf, yf, 45); - } - else if (Berry == 1) - { - LoadSpritePalettes(sSpritePalettes); + + sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_1, xf, yf, 45); + } + else if (Berry == 1) + { + LoadSpritePalettes(sSpritePalettes); LoadCompressedSpriteSheet(&sSpriteSheet_Berry_2); - - sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_2, xf, yf, 45); - } - else - { - LoadSpritePalettes(sSpritePalettes); + + sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_2, xf, yf, 45); + } + else + { + LoadSpritePalettes(sSpritePalettes); LoadCompressedSpriteSheet(&sSpriteSheet_Berry_3); - - sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_3, xf, yf, 45); - } + + sSnake->BerrySpriteId = CreateSprite(&sSpriteTemplate_Berry_3, xf, yf, 45); + } } static void SetCreditDigits(u16 num) @@ -1543,7 +1461,7 @@ static void SetCreditDigits(u16 num) num = num % d; d = d / 10; } - + BuildOamBuffer(); } @@ -1570,7 +1488,7 @@ static void SetNumberDigits(u16 num) num = num % d; d = d / 10; } - + BuildOamBuffer(); } @@ -1580,14 +1498,13 @@ static void CreateCreditSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); } for (i = 0; i < 4; i++) { sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 5 + 21, 14, 0); - gSprites[sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + gSprites[sSnake->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; } } @@ -1597,577 +1514,566 @@ static void CreateNumberSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); } for (i = 0; i < 2; i++) { sSnake->NumberSpriteIds[i + SPR_NUM_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 5 + 26, 30, 0); - gSprites[sSnake->CreditSpriteIds[i + SPR_NUM_DIGITS]].oam.priority = 0; + gSprites[sSnake->CreditSpriteIds[i + SPR_NUM_DIGITS]].oam.priority = 0; } } static void CheckBerry(void) { - u8 NewDirection; - u8 Count = sSnake->BodyCount - 3; - u8 index = Count; - u8 Body; - s16 xf; - s16 yf; - int i; - struct SpriteSheet s; - - if ((sSnake->OnixTileX == sSnake->BerryX) && (sSnake->OnixTileY == sSnake->BerryY)) - { - PlaySE(SE_USE_ITEM); - if (GetCoins() < 9998) - { - SetCoins(GetCoins() + 2); - SetCreditDigits(GetCoins()); - } - else - { - SetCoins(9999); - SetCreditDigits(GetCoins()); - } - if (sSnake->Total < 99) - { - sSnake->Total++; - SetNumberDigits(sSnake->Total); - } - DestroySpriteAndFreeResources(&gSprites[sSnake->BerrySpriteId]); - LoadSpritePalettes(sSpritePalettes); - if ((Count < MAX_SPRITES_BODY) && (sSnake->BodyCount < MAX_SPRITES_BODY)) - { - if (Count == 0) // New Body - { - NewDirection = sSnake->Body2LastDirection; - - if (NewDirection == UP) - { - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); - } - } - else if (NewDirection == DOWN) - { - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); - } - } - else if (NewDirection == LEFT) - { - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); - } - } - else if (NewDirection == RIGHT) - { - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); - } - } - - NewDirection = sSnake->Body2LastDirection; - sSnake->BodySpritesDirection[index] = NewDirection; - if (sSnake->BodyCount < MAX_SPRITES_BODY) { - sSnake->BodyCount++; } - } - else if (Count > 0) - { - NewDirection = sSnake->BodySpritesLastDirection[index - 1]; - - if (NewDirection == UP) - { - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); - } - } - else if (NewDirection == DOWN) - { - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); - } - } - else if (NewDirection == LEFT) - { - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); - } - } - else if (NewDirection == RIGHT) - { - Body = Random() % 4; - - if (Body == 0) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); - } - else if (Body == 1) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); - } - else if (Body == 2) - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); - } - else - { - LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); - - sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); - } - } - - NewDirection = sSnake->BodySpritesLastDirection[index - 1]; - sSnake->BodySpritesDirection[index] = NewDirection; - if (sSnake->BodyCount < MAX_SPRITES_BODY) { - sSnake->BodyCount++; } - } - - - } - CreateBerry(); - } + u8 NewDirection; + u8 Count = sSnake->BodyCount - 3; + u8 index = Count; + u8 Body; + + if ((sSnake->OnixTileX == sSnake->BerryX) && (sSnake->OnixTileY == sSnake->BerryY)) + { + PlaySE(SE_USE_ITEM); + if (GetCoins() < 9998) + { + SetCoins(GetCoins() + 2); + SetCreditDigits(GetCoins()); + } + else + { + SetCoins(9999); + SetCreditDigits(GetCoins()); + } + if (sSnake->Total < 99) + { + sSnake->Total++; + SetNumberDigits(sSnake->Total); + } + DestroySpriteAndFreeResources(&gSprites[sSnake->BerrySpriteId]); + LoadSpritePalettes(sSpritePalettes); + if ((Count < MAX_SPRITES_BODY) && (sSnake->BodyCount < MAX_SPRITES_BODY)) + { + if (Count == 0) // New Body + { + NewDirection = sSnake->Body2LastDirection; + + if (NewDirection == UP) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y + 16, sSnake->BodyCount); + } + } + else if (NewDirection == DOWN) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x, gSprites[sSnake->BodySprite2Id].y - 16, sSnake->BodyCount); + } + } + else if (NewDirection == LEFT) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x + 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + } + else if (NewDirection == RIGHT) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySprite2Id].x - 16, gSprites[sSnake->BodySprite2Id].y, sSnake->BodyCount); + } + } + + NewDirection = sSnake->Body2LastDirection; + sSnake->BodySpritesDirection[index] = NewDirection; + if (sSnake->BodyCount < MAX_SPRITES_BODY) { + sSnake->BodyCount++; } + } + else if (Count > 0) + { + NewDirection = sSnake->BodySpritesLastDirection[index - 1]; + + if (NewDirection == UP) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y + 16, sSnake->BodyCount); + } + } + else if (NewDirection == DOWN) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x, gSprites[sSnake->BodySpriteIds[index - 1]].y - 16, sSnake->BodyCount); + } + } + else if (NewDirection == LEFT) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x + 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + } + else if (NewDirection == RIGHT) + { + Body = Random() % 4; + + if (Body == 0) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else if (Body == 1) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_2); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_2, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else if (Body == 2) + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_3); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_3, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + else + { + LoadCompressedSpriteSheet(&sSpriteSheet_Onix_Body_4); + + sSnake->BodySpriteIds[index] = CreateSprite(&sSpriteTemplate_Onix_Body_4, gSprites[sSnake->BodySpriteIds[index - 1]].x - 16, gSprites[sSnake->BodySpriteIds[index - 1]].y, sSnake->BodyCount); + } + } + + NewDirection = sSnake->BodySpritesLastDirection[index - 1]; + sSnake->BodySpritesDirection[index] = NewDirection; + if (sSnake->BodyCount < MAX_SPRITES_BODY) { + sSnake->BodyCount++; } + } + + + } + CreateBerry(); + } } static void CreateStartMenu(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Start); - - sSnake->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 120, 120, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Start); + + sSnake->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 120, 120, 0); } static void CreateGameOver(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); - - sSnake->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 120, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); + + sSnake->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 120, 80, 0); } static void CreateMenu(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); + LoadSpritePalettes(sSpritePalettes); LoadCompressedSpriteSheet(&sSpriteSheet_Menu); - - sSnake->MenuSpriteId = CreateSprite(&sSpriteTemplate_Menu, 40, 24, 1); + + sSnake->MenuSpriteId = CreateSprite(&sSpriteTemplate_Menu, 40, 24, 1); } static void SnakeMain(u8 taskId) { - u8 Count = sSnake->BodyCount - 3; - int j; - int i; - - switch (sSnake->state) - { - case SNAKE_STATE_INIT: - if (!gPaletteFade.active) - { - PlayCry_Normal(SPECIES_ONIX, 0); - sSnake->timer = 75; - sSnake->state = SNAKE_ONIX_CRY; - } - break; - case SNAKE_ONIX_CRY: - if (sSnake->timer == 0) - { - PlaySE(SE_POKENAV_ON); - CreateStartMenu(); - sSnake->timer = 50; - sSnake->state = SNAKE_START_TEXT; - } - else - { - sSnake->timer--; - } - break; - case SNAKE_START_TEXT: - if (sSnake->timer == 0) - { - DestroySpriteAndFreeResources(&gSprites[sSnake->StartSpriteId]); - PlayBGM(MUS_RG_VICTORY_ROAD); - sSnake->state = SNAKE_STATE_MOVEMENT_LOOP; - } - else - { - sSnake->timer--; - } - break; - case SNAKE_STATE_MOVEMENT_LOOP: - if (sSnake->delay == 0) - { - if (sSnake->FrameCount == 0) - { - sSnake->delay = 0; - sSnake->LastDirection = sSnake->Direction; - sSnake->Body1LastDirection = sSnake->Body1Direction; - sSnake->Body2LastDirection = sSnake->Body2Direction; - - for (i = Count, j = 0; i > 0; i--, j++) { - sSnake->BodySpritesLastDirection[j] = sSnake->BodySpritesDirection[j]; - } - sSnake->state = SNAKE_STATE_PROCESS_INPUT; - } - else - { - sSnake->GameOver = CheckBoundaries(); - if (sSnake->GameOver == 1) - { - PlayBGM(MUS_NONE); - sSnake->FrameCount = sSnake->Loop; - sSnake->delay = MAX_DELAY; - PlaySE(SE_WALL_HIT); - sSnake->state = SNAKE_STATE_GAMEOVER_LOOP; - } - HandleMovement(); - sSnake->FrameCount--; - sSnake->delay = MAX_DELAY; - } - } - else - { - sSnake->delay--; - } - break; - case SNAKE_STATE_PROCESS_INPUT: - if (sSnake->delay == 0) - { - UpdateLocations(); - if (((JOY_HELD(DPAD_UP)) || (JOY_NEW(DPAD_UP))) && sSnake->LastDirection != DOWN) - { - sSnake->Direction = UP; - } - else if (((JOY_HELD(DPAD_DOWN)) || (JOY_NEW(DPAD_DOWN))) && sSnake->LastDirection != UP) - { - sSnake->Direction = DOWN; - } - else if (((JOY_HELD(DPAD_LEFT)) || (JOY_NEW(DPAD_LEFT))) && sSnake->LastDirection != RIGHT) - { - sSnake->Direction = LEFT; - } - else if (((JOY_HELD(DPAD_RIGHT)) || (JOY_NEW(DPAD_RIGHT))) && sSnake->LastDirection != LEFT) - { - sSnake->Direction = RIGHT; - } - sSnake->state = SNAKE_STATE_SPRITE_UPDATE; - } - else - { - UpdateLocations(); - if (((JOY_HELD(DPAD_UP)) || (JOY_NEW(DPAD_UP))) && sSnake->LastDirection != DOWN) - { - sSnake->Direction = UP; - } - else if (((JOY_HELD(DPAD_DOWN)) || (JOY_NEW(DPAD_DOWN))) && sSnake->LastDirection != UP) - { - sSnake->Direction = DOWN; - } - else if (((JOY_HELD(DPAD_LEFT)) || (JOY_NEW(DPAD_LEFT))) && sSnake->LastDirection != RIGHT) - { - sSnake->Direction = LEFT; - } - else if (((JOY_HELD(DPAD_RIGHT)) || (JOY_NEW(DPAD_RIGHT))) && sSnake->LastDirection != LEFT) - { - sSnake->Direction = RIGHT; - } - sSnake->delay--; - } - break; - case SNAKE_STATE_SPRITE_UPDATE: - if (sSnake->Direction == DOWN) - { - gSprites[sSnake->OnixSpriteId].animNum = 0; - } - else if (sSnake->Direction == UP) - { - gSprites[sSnake->OnixSpriteId].animNum = 1; - } - else if (sSnake->Direction == RIGHT) - { - gSprites[sSnake->OnixSpriteId].animNum = 2; - } - else if (sSnake->Direction == LEFT) - { - gSprites[sSnake->OnixSpriteId].animNum = 3; - } - - UpdateDirections(); - CheckBerry(); - HandleMovement(); - sSnake->FrameCount = MAX_FRAME_COUNT - 1; - sSnake->delay = MAX_DELAY; - sSnake->state = SNAKE_STATE_MOVEMENT_LOOP; - break; - case SNAKE_STATE_GAMEOVER_LOOP: - if (sSnake->delay == 0) - { - if ((sSnake->FrameCount == 0) && (sSnake->Loop > 0)) - { - HandleMovementMinus((0 - 1)); - sSnake->Loop--; - sSnake->delay = MAX_DELAY; - } - else if (sSnake->Loop > 0) - { - HandleMovementMinus(1); - sSnake->FrameCount--; - sSnake->delay = MAX_DELAY; - } - else if (sSnake->Loop == 0) - { - sSnake->timer = 140; - PlayFanfare(MUS_TOO_BAD); - CreateGameOver(); - sSnake->state = SNAKE_STATE_GAMEOVER; - } - } - else - { - sSnake->delay--; - } - break; - case SNAKE_STATE_GAMEOVER: - if (sSnake->timer == 0) - { - SetCoins(GetCoins() - (sSnake->Total + sSnake->Total)); - VarSet(GAME_CORNER_VAR_WINNINGS, (sSnake->Total + sSnake->Total)); - StartExitSnake(); - } - else - { - sSnake->timer--; - } - break; - case SNAKE_EXIT: - ExitSnake(); - break; - } + u8 Count = sSnake->BodyCount - 3; + int j; + int i; + + switch (sSnake->state) + { + case SNAKE_STATE_INIT: + if (!gPaletteFade.active) + { + PlayCry_Normal(SPECIES_ONIX, 0); + sSnake->timer = 75; + sSnake->state = SNAKE_ONIX_CRY; + } + break; + case SNAKE_ONIX_CRY: + if (sSnake->timer == 0) + { + PlaySE(SE_POKENAV_ON); + CreateStartMenu(); + sSnake->timer = 50; + sSnake->state = SNAKE_START_TEXT; + } + else + { + sSnake->timer--; + } + break; + case SNAKE_START_TEXT: + if (sSnake->timer == 0) + { + DestroySpriteAndFreeResources(&gSprites[sSnake->StartSpriteId]); + PlayBGM(MUS_RG_VICTORY_ROAD); + sSnake->state = SNAKE_STATE_MOVEMENT_LOOP; + } + else + { + sSnake->timer--; + } + break; + case SNAKE_STATE_MOVEMENT_LOOP: + if (sSnake->delay == 0) + { + if (sSnake->FrameCount == 0) + { + sSnake->delay = 0; + sSnake->LastDirection = sSnake->Direction; + sSnake->Body1LastDirection = sSnake->Body1Direction; + sSnake->Body2LastDirection = sSnake->Body2Direction; + + for (i = Count, j = 0; i > 0; i--, j++) { + sSnake->BodySpritesLastDirection[j] = sSnake->BodySpritesDirection[j]; + } + sSnake->state = SNAKE_STATE_PROCESS_INPUT; + } + else + { + sSnake->GameOver = CheckBoundaries(); + if (sSnake->GameOver == 1) + { + PlayBGM(MUS_NONE); + sSnake->FrameCount = sSnake->Loop; + sSnake->delay = MAX_DELAY; + PlaySE(SE_WALL_HIT); + sSnake->state = SNAKE_STATE_GAMEOVER_LOOP; + } + HandleMovement(); + sSnake->FrameCount--; + sSnake->delay = MAX_DELAY; + } + } + else + { + sSnake->delay--; + } + break; + case SNAKE_STATE_PROCESS_INPUT: + if (sSnake->delay == 0) + { + UpdateLocations(); + if (((JOY_HELD(DPAD_UP)) || (JOY_NEW(DPAD_UP))) && sSnake->LastDirection != DOWN) + { + sSnake->Direction = UP; + } + else if (((JOY_HELD(DPAD_DOWN)) || (JOY_NEW(DPAD_DOWN))) && sSnake->LastDirection != UP) + { + sSnake->Direction = DOWN; + } + else if (((JOY_HELD(DPAD_LEFT)) || (JOY_NEW(DPAD_LEFT))) && sSnake->LastDirection != RIGHT) + { + sSnake->Direction = LEFT; + } + else if (((JOY_HELD(DPAD_RIGHT)) || (JOY_NEW(DPAD_RIGHT))) && sSnake->LastDirection != LEFT) + { + sSnake->Direction = RIGHT; + } + sSnake->state = SNAKE_STATE_SPRITE_UPDATE; + } + else + { + UpdateLocations(); + if (((JOY_HELD(DPAD_UP)) || (JOY_NEW(DPAD_UP))) && sSnake->LastDirection != DOWN) + { + sSnake->Direction = UP; + } + else if (((JOY_HELD(DPAD_DOWN)) || (JOY_NEW(DPAD_DOWN))) && sSnake->LastDirection != UP) + { + sSnake->Direction = DOWN; + } + else if (((JOY_HELD(DPAD_LEFT)) || (JOY_NEW(DPAD_LEFT))) && sSnake->LastDirection != RIGHT) + { + sSnake->Direction = LEFT; + } + else if (((JOY_HELD(DPAD_RIGHT)) || (JOY_NEW(DPAD_RIGHT))) && sSnake->LastDirection != LEFT) + { + sSnake->Direction = RIGHT; + } + sSnake->delay--; + } + break; + case SNAKE_STATE_SPRITE_UPDATE: + if (sSnake->Direction == DOWN) + { + gSprites[sSnake->OnixSpriteId].animNum = 0; + } + else if (sSnake->Direction == UP) + { + gSprites[sSnake->OnixSpriteId].animNum = 1; + } + else if (sSnake->Direction == RIGHT) + { + gSprites[sSnake->OnixSpriteId].animNum = 2; + } + else if (sSnake->Direction == LEFT) + { + gSprites[sSnake->OnixSpriteId].animNum = 3; + } + + UpdateDirections(); + CheckBerry(); + HandleMovement(); + sSnake->FrameCount = MAX_FRAME_COUNT - 1; + sSnake->delay = MAX_DELAY; + sSnake->state = SNAKE_STATE_MOVEMENT_LOOP; + break; + case SNAKE_STATE_GAMEOVER_LOOP: + if (sSnake->delay == 0) + { + if ((sSnake->FrameCount == 0) && (sSnake->Loop > 0)) + { + HandleMovementMinus((0 - 1)); + sSnake->Loop--; + sSnake->delay = MAX_DELAY; + } + else if (sSnake->Loop > 0) + { + HandleMovementMinus(1); + sSnake->FrameCount--; + sSnake->delay = MAX_DELAY; + } + else if (sSnake->Loop == 0) + { + sSnake->timer = 140; + PlayFanfare(MUS_TOO_BAD); + CreateGameOver(); + sSnake->state = SNAKE_STATE_GAMEOVER; + } + } + else + { + sSnake->delay--; + } + break; + case SNAKE_STATE_GAMEOVER: + if (sSnake->timer == 0) + { + SetCoins(GetCoins() - (sSnake->Total + sSnake->Total)); + VarSet(GAME_CORNER_VAR_WINNINGS, (sSnake->Total + sSnake->Total)); + StartExitSnake(); + } + else + { + sSnake->timer--; + } + break; + case SNAKE_EXIT: + ExitSnake(); + break; + } } static void InitSnakeScreen(void) -{ +{ SetVBlankCallback(NULL); ResetAllBgsCoordinates(); ResetVramOamAndBgCntRegs(); ResetBgsAndClearDma3BusyFlags(0); ResetTempTileDataBuffers(); - InitBgsFromTemplates(0, sSnakeBGtemplates, ARRAY_COUNT(sSnakeBGtemplates)); - SetBgTilemapBuffer(SNAKE_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(SNAKE_BG_BASE, Snake_BG_Img, 0x800, 0, 0); - CopyToBgTilemapBuffer(SNAKE_BG_BASE, Snake_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(Snake_BG_Pal, 0, sizeof(Snake_BG_Pal)); - ResetSpriteData(); + InitBgsFromTemplates(0, sSnakeBGtemplates, ARRAY_COUNT(sSnakeBGtemplates)); + SetBgTilemapBuffer(SNAKE_BG_BASE, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(SNAKE_BG_BASE, Snake_BG_Img, 0x800, 0, 0); + CopyToBgTilemapBuffer(SNAKE_BG_BASE, Snake_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(Snake_BG_Pal, 0, sizeof(Snake_BG_Pal)); + ResetSpriteData(); FreeAllSpritePalettes(); - LoadSpritePalettes(sSpritePalettes); - CreateMenu(); - CreateCreditSprites(); - SetCreditDigits(GetCoins()); - CreateNumberSprites(); - SetNumberDigits(0); - CreateOnix(); - CreateBody1(); - CreateBody2(); - - sSnake->BodyCount = 3; - sSnake->OnixTileX = 3; - sSnake->OnixTileY = 4; - sSnake->Body1x = 3; - sSnake->Body1y = 3; - sSnake->Body2x = 3; - sSnake->Body2y = 2; - sSnake->delay = MAX_DELAY; - sSnake->FrameCount = MAX_FRAME_COUNT; - sSnake->Direction = DOWN; - sSnake->Body1Direction = DOWN; - sSnake->Body2Direction = DOWN; - sSnake->Loop = 2; - - CreateBerry(); - - CopyBgTilemapBufferToVram(SNAKE_BG_BASE); - //CopyBgTilemapBufferToVram(BLOCKSTACKER_TEXT_MENUS); + LoadSpritePalettes(sSpritePalettes); + CreateMenu(); + CreateCreditSprites(); + SetCreditDigits(GetCoins()); + CreateNumberSprites(); + SetNumberDigits(0); + CreateOnix(); + CreateBody1(); + CreateBody2(); + + sSnake->BodyCount = 3; + sSnake->OnixTileX = 3; + sSnake->OnixTileY = 4; + sSnake->Body1x = 3; + sSnake->Body1y = 3; + sSnake->Body2x = 3; + sSnake->Body2y = 2; + sSnake->delay = MAX_DELAY; + sSnake->FrameCount = MAX_FRAME_COUNT; + sSnake->Direction = DOWN; + sSnake->Body1Direction = DOWN; + sSnake->Body2Direction = DOWN; + sSnake->Loop = 2; + + CreateBerry(); + + CopyBgTilemapBufferToVram(SNAKE_BG_BASE); + //CopyBgTilemapBufferToVram(BLOCKSTACKER_TEXT_MENUS); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); ShowBg(SNAKE_BG_BASE); - //ShowBg(BLOCKSTACKER_TEXT_MENUS); + //ShowBg(BLOCKSTACKER_TEXT_MENUS); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetVBlankCallback(SnakeVBlankCallback); SetMainCallback2(SnakeMainCallback); From 580b8e9f83dbffdd8e44d6f423f3f0b285e7c259 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 13 May 2025 19:03:03 -0400 Subject: [PATCH 011/429] No modern warnings for block stacker --- src/block_stacker.c | 2858 +++++++++++++++++++++---------------------- 1 file changed, 1429 insertions(+), 1429 deletions(-) diff --git a/src/block_stacker.c b/src/block_stacker.c index 4adb87e24c43..44d905114194 100644 --- a/src/block_stacker.c +++ b/src/block_stacker.c @@ -46,37 +46,37 @@ #include "field_specials.h" enum { - STACKER_HIGHLIGHT, - STACKER_HIGHLIGHT_END, - STACKER_GO_DELAY, - STACKER_GO, - STACKER_LEVEL_SETUP, - STACKER_INPUT, - STACKER_CHECK_POS, - STACKER_ROW_DELAY, - STACKER_KEEP_GOING, - STACKER_POST_DELAY, - STACKER_WIN, - STACKER_GAME_OVER, - STACKER_START_EXIT, - STACKER_EXIT, + STACKER_HIGHLIGHT, + STACKER_HIGHLIGHT_END, + STACKER_GO_DELAY, + STACKER_GO, + STACKER_LEVEL_SETUP, + STACKER_INPUT, + STACKER_CHECK_POS, + STACKER_ROW_DELAY, + STACKER_KEEP_GOING, + STACKER_POST_DELAY, + STACKER_WIN, + STACKER_GAME_OVER, + STACKER_START_EXIT, + STACKER_EXIT, }; enum { - HighlightSpriteId_1a, - HighlightSpriteId_2a, - HighlightSpriteId_3a, - HighlightSpriteId_4a, - HighlightSpriteId_5a, - HighlightSpriteId_6a, - HighlightSpriteId_7a, - HighlightSpriteId_1b, - HighlightSpriteId_2b, - HighlightSpriteId_3b, - HighlightSpriteId_4b, - HighlightSpriteId_5b, - HighlightSpriteId_6b, - HighlightSpriteId_7b, + HighlightSpriteId_1a, + HighlightSpriteId_2a, + HighlightSpriteId_3a, + HighlightSpriteId_4a, + HighlightSpriteId_5a, + HighlightSpriteId_6a, + HighlightSpriteId_7a, + HighlightSpriteId_1b, + HighlightSpriteId_2b, + HighlightSpriteId_3b, + HighlightSpriteId_4b, + HighlightSpriteId_5b, + HighlightSpriteId_6b, + HighlightSpriteId_7b, }; enum { @@ -93,28 +93,28 @@ enum { #define MAX_SPRITES_CREDIT 4 struct BlockStacker { - u8 state; - u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; - u8 RhydonSpriteId; - u8 CommandsSpriteId; - u8 ToggleButtons; - u8 CurrentRow; // 1-8 - u8 Row1Block1Position; // 1-7 - u8 Row1Block2Position; - u8 Row1Block3Position; - u8 Row2Block1Position; + u8 state; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 RhydonSpriteId; + u8 CommandsSpriteId; + u8 ToggleButtons; + u8 CurrentRow; // 1-8 + u8 Row1Block1Position; // 1-7 + u8 Row1Block2Position; + u8 Row1Block3Position; + u8 Row2Block1Position; u8 Row2Block2Position; u8 Row2Block3Position; - u8 Row3Block1Position; + u8 Row3Block1Position; u8 Row3Block2Position; - u8 Row4Block1Position; + u8 Row4Block1Position; u8 Row4Block2Position; - u8 Row5BlockPosition; - u8 Row6BlockPosition; - u8 Row7BlockPosition; - u8 Row8BlockPosition; - u8 BlocksLeft; // 0-3 - u8 Row1Block1SpriteId; + u8 Row5BlockPosition; + u8 Row6BlockPosition; + u8 Row7BlockPosition; + u8 Row8BlockPosition; + u8 BlocksLeft; // 0-3 + u8 Row1Block1SpriteId; u8 Row1Block2SpriteId; u8 Row1Block3SpriteId; u8 Row2Block1SpriteId; @@ -128,37 +128,37 @@ struct BlockStacker { u8 Row6Block1SpriteId; u8 Row7Block1SpriteId; u8 Row8Block1SpriteId; - u8 HighlightSpriteIds[MAX_SPRITES_HIGHLIGHT]; - u8 DestroyedHighlights; - u8 HighlightNum; - u8 HighlightRow; - u8 TitleSpriteId; - u16 GoDelay; - u8 StartSpriteId; - u8 ArrowSpriteId; - u8 xSpeed; - u8 xSpeedDelay; - u8 xDirection; - u8 exitToggle; - u8 LastLives; - u8 x1SpriteId; - u8 x2SpriteId; - u8 x3SpriteId; - u8 x1Active; - u8 x2Active; - u8 x3Active; - u8 GameOverSpriteId; - u32 Winnings; - u8 KeepGoingSpriteId; - u8 YesSpriteId; - u8 NoSpriteId; - u8 YesNo; - u8 WinnerSpriteId; - u8 Win; - u8 LivesSpriteId; - u8 Rhydon2SpriteId; - u8 RhydonBlockSpriteId; -}; + u8 HighlightSpriteIds[MAX_SPRITES_HIGHLIGHT]; + u8 DestroyedHighlights; + u8 HighlightNum; + u8 HighlightRow; + u8 TitleSpriteId; + u16 GoDelay; + u8 StartSpriteId; + u8 ArrowSpriteId; + u8 xSpeed; + u8 xSpeedDelay; + u8 xDirection; + u8 exitToggle; + u8 LastLives; + u8 x1SpriteId; + u8 x2SpriteId; + u8 x3SpriteId; + u8 x1Active; + u8 x2Active; + u8 x3Active; + u8 GameOverSpriteId; + u32 Winnings; + u8 KeepGoingSpriteId; + u8 YesSpriteId; + u8 NoSpriteId; + u8 YesNo; + u8 WinnerSpriteId; + u8 Win; + u8 LivesSpriteId; + u8 Rhydon2SpriteId; + u8 RhydonBlockSpriteId; +}; static EWRAM_DATA struct BlockStacker *sBlockStacker = NULL; static EWRAM_DATA u8 sTextWindowId = 0; @@ -251,15 +251,15 @@ static const struct BgTemplate sBlockStackerBGtemplates[] = { }; static const struct WindowTemplate sBlockStackerWinTemplates[] = { - { + { .bg = BLOCKSTACKER_TEXT_MENUS, .tilemapLeft = 16, .tilemapTop = 9, .width = 14, .height = 2, .paletteNum = 0xF, - .baseBlock = 0x194, - }, + .baseBlock = 0x194, + }, DUMMY_WIN_TEMPLATE, }; @@ -294,15 +294,15 @@ static const struct WindowTemplate sBlockStackerWinTemplates[] = { static const struct SpritePalette sSpritePalettes[] = { { .data = RhydonPAL, .tag = RHYDON_PALTAG }, - { .data = HighlightPAL, .tag = HIGHLIGHT_PALTAG }, - { .data = TitlePAL, .tag = TITLE_PALTAG }, - { .data = CommandsPAL, .tag = COMMANDS_PALTAG }, - { .data = ArrowPAL, .tag = ARROW_PALTAG }, - { .data = BlockPAL, .tag = BLOCK_PALTAG }, - { .data = XPAL, .tag = X_PALTAG }, - { .data = YesNoPAL, .tag = YESNO_PALTAG }, - { .data = LivesPAL, .tag = LIVES_PALTAG }, - { .data = RhydonBlockPAL, .tag = RHYDONBLOCK_PALTAG }, + { .data = HighlightPAL, .tag = HIGHLIGHT_PALTAG }, + { .data = TitlePAL, .tag = TITLE_PALTAG }, + { .data = CommandsPAL, .tag = COMMANDS_PALTAG }, + { .data = ArrowPAL, .tag = ARROW_PALTAG }, + { .data = BlockPAL, .tag = BLOCK_PALTAG }, + { .data = XPAL, .tag = X_PALTAG }, + { .data = YesNoPAL, .tag = YESNO_PALTAG }, + { .data = LivesPAL, .tag = LIVES_PALTAG }, + { .data = RhydonBlockPAL, .tag = RHYDONBLOCK_PALTAG }, {} }; @@ -319,7 +319,7 @@ static const struct OamData sOamData_RhydonBlock = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -347,7 +347,7 @@ static const struct OamData sOamData_Lives = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x8), .size = SPRITE_SIZE(16x8), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -382,7 +382,7 @@ static const struct OamData sOamData_YesNo = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -421,7 +421,7 @@ static const struct OamData sOamData_X = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -449,7 +449,7 @@ static const struct OamData sOamData_Block = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -477,7 +477,7 @@ static const struct OamData sOamData_Arrow = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -485,8 +485,8 @@ static const union AnimCmd sArrowAnimCmd_0[] = { ANIMCMD_FRAME(0, 60), ANIMCMD_FRAME(4, 10), - ANIMCMD_FRAME(8, 10), - ANIMCMD_FRAME(12, 10), + ANIMCMD_FRAME(8, 10), + ANIMCMD_FRAME(12, 10), ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) }; @@ -518,7 +518,7 @@ static const struct OamData sOamData_Commands = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -574,7 +574,7 @@ static const struct OamData sOamData_Winner = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -584,7 +584,7 @@ static const struct OamData sOamData_KeepGoing = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -594,7 +594,7 @@ static const struct OamData sOamData_GameOver = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -604,7 +604,7 @@ static const struct OamData sOamData_Start = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -669,7 +669,7 @@ static const struct OamData sOamData_Title = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -697,40 +697,40 @@ static const struct OamData sOamData_Highlight = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; static const union AnimCmd sHighlightAnimCmd_0[] = { - ANIMCMD_FRAME(16, 10), - ANIMCMD_FRAME(12, 10), - ANIMCMD_FRAME(8, 10), - ANIMCMD_FRAME(4, 10), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(16, 10), + ANIMCMD_FRAME(12, 10), + ANIMCMD_FRAME(8, 10), + ANIMCMD_FRAME(4, 10), + ANIMCMD_FRAME(0, 10), ANIMCMD_END }; static const union AnimCmd sHighlightAnimCmd_1[] = { - ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(0, 5), ANIMCMD_END }; static const union AnimCmd sHighlightAnimCmd_2[] = { - ANIMCMD_FRAME(0, 5), - ANIMCMD_FRAME(4, 5), - ANIMCMD_FRAME(8, 5), - ANIMCMD_FRAME(12, 5), - ANIMCMD_FRAME(16, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(12, 5), + ANIMCMD_FRAME(16, 5), ANIMCMD_END }; static const union AnimCmd *const sHighlightAnimCmds[] = { sHighlightAnimCmd_0, // Light Up - sHighlightAnimCmd_1, // Still - sHighlightAnimCmd_2, // Light Down + sHighlightAnimCmd_1, // Still + sHighlightAnimCmd_2, // Light Down }; static const struct SpriteTemplate sSpriteTemplate_Highlight = @@ -764,7 +764,7 @@ static const struct OamData sOamData_Rhydon2 = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -774,7 +774,7 @@ static const struct OamData sOamData_Rhydon = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -786,7 +786,7 @@ static const union AnimCmd sRhydon2AnimCmd_0[] = ANIMCMD_FRAME(192, 10), ANIMCMD_FRAME(256, 10), ANIMCMD_FRAME(320, 10), - ANIMCMD_FRAME(384, 10), + ANIMCMD_FRAME(384, 10), ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) }; @@ -802,8 +802,8 @@ static const union AnimCmd sRhydonAnimCmd_0[] = ANIMCMD_FRAME(192, 10), ANIMCMD_FRAME(256, 10), ANIMCMD_FRAME(320, 10), - ANIMCMD_FRAME(384, 10), - ANIMCMD_FRAME(448, 10), + ANIMCMD_FRAME(384, 10), + ANIMCMD_FRAME(448, 10), ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) }; @@ -835,14 +835,14 @@ static const struct SpriteTemplate sSpriteTemplate_Rhydon = void StartBlockStacker(void) { - u8 taskId = 0; + u8 taskId = 0; sBlockStacker = AllocZeroed(sizeof(struct BlockStacker)); taskId = CreateTask(FadeToBlockStackerScreen, 0); } static void FadeToBlockStackerScreen(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].data[0]) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -876,1211 +876,1211 @@ static void BlockStackerMainCallback(void) static void CreateHighlight(u8 num, u8 row) { - if ((sBlockStacker->HighlightSpriteIds[num] == 0) && (sBlockStacker->HighlightRow != 8)) - { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Highlight); - if (num < 7) - { - sBlockStacker->HighlightSpriteIds[num] = CreateSprite(&sSpriteTemplate_Highlight, 32 + (16 * num), 136 - (16 * row), 1); - } - else - { - sBlockStacker->HighlightSpriteIds[num] = CreateSprite(&sSpriteTemplate_Highlight, ((32 + (16 * num)) - (16 * 7)), 136 - (16 * row), 1); - } - gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum = 0; // Light Up - } - else if ((gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum == 0) && (gSprites[sBlockStacker->HighlightSpriteIds[num]].animCmdIndex == 0)) - { - gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum = 2; // Light Down - - if ((sBlockStacker->HighlightNum != 6) && (sBlockStacker->HighlightNum != 13) && (sBlockStacker->HighlightRow != 8)) - { - sBlockStacker->HighlightNum++; // 0-6 - } - else if ((sBlockStacker->HighlightNum == 6) && (sBlockStacker->HighlightRow != 8)) - { - sBlockStacker->HighlightNum ++; // 0-13 - sBlockStacker->HighlightRow++; // 0-7 - } - else if ((sBlockStacker->HighlightNum == 13) && (sBlockStacker->HighlightRow != 8)) - { - sBlockStacker->HighlightNum = 0; // 0-13 - sBlockStacker->HighlightRow++; // 0-7 - } - } + if ((sBlockStacker->HighlightSpriteIds[num] == 0) && (sBlockStacker->HighlightRow != 8)) + { + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Highlight); + if (num < 7) + { + sBlockStacker->HighlightSpriteIds[num] = CreateSprite(&sSpriteTemplate_Highlight, 32 + (16 * num), 136 - (16 * row), 1); + } + else + { + sBlockStacker->HighlightSpriteIds[num] = CreateSprite(&sSpriteTemplate_Highlight, ((32 + (16 * num)) - (16 * 7)), 136 - (16 * row), 1); + } + gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum = 0; // Light Up + } + else if ((gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum == 0) && (gSprites[sBlockStacker->HighlightSpriteIds[num]].animCmdIndex == 0)) + { + gSprites[sBlockStacker->HighlightSpriteIds[num]].animNum = 2; // Light Down + + if ((sBlockStacker->HighlightNum != 6) && (sBlockStacker->HighlightNum != 13) && (sBlockStacker->HighlightRow != 8)) + { + sBlockStacker->HighlightNum++; // 0-6 + } + else if ((sBlockStacker->HighlightNum == 6) && (sBlockStacker->HighlightRow != 8)) + { + sBlockStacker->HighlightNum ++; // 0-13 + sBlockStacker->HighlightRow++; // 0-7 + } + else if ((sBlockStacker->HighlightNum == 13) && (sBlockStacker->HighlightRow != 8)) + { + sBlockStacker->HighlightNum = 0; // 0-13 + sBlockStacker->HighlightRow++; // 0-7 + } + } } static void DestroyHighlights(void) { - int i; - - for (i = 0; i < MAX_SPRITES_HIGHLIGHT; i++) { - if ((gSprites[sBlockStacker->HighlightSpriteIds[i]].animNum == 2) && (gSprites[sBlockStacker->HighlightSpriteIds[i]].animCmdIndex > 3)) - { - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->HighlightSpriteIds[i]]); - sBlockStacker->HighlightSpriteIds[i] = 0; - sBlockStacker->DestroyedHighlights++; - } - } + int i; + + for (i = 0; i < MAX_SPRITES_HIGHLIGHT; i++) { + if ((gSprites[sBlockStacker->HighlightSpriteIds[i]].animNum == 2) && (gSprites[sBlockStacker->HighlightSpriteIds[i]].animCmdIndex > 3)) + { + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->HighlightSpriteIds[i]]); + sBlockStacker->HighlightSpriteIds[i] = 0; + sBlockStacker->DestroyedHighlights++; + } + } } static void SwapFromBlock(void) { - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Rhydon2SpriteId]); - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->RhydonBlockSpriteId]); - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon); - - sBlockStacker->RhydonSpriteId = CreateSprite(&sSpriteTemplate_Rhydon, 183, 112, 0); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Rhydon2SpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->RhydonBlockSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon); + + sBlockStacker->RhydonSpriteId = CreateSprite(&sSpriteTemplate_Rhydon, 183, 112, 0); } static void SwapToBlock(void) { - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->RhydonSpriteId]); - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon2); - - sBlockStacker->Rhydon2SpriteId = CreateSprite(&sSpriteTemplate_Rhydon2, 183, 112, 0); - - LoadCompressedSpriteSheet(&sSpriteSheet_RhydonBlock); - - sBlockStacker->RhydonBlockSpriteId = CreateSprite(&sSpriteTemplate_RhydonBlock, 177, 122, 0); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->RhydonSpriteId]); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon2); + + sBlockStacker->Rhydon2SpriteId = CreateSprite(&sSpriteTemplate_Rhydon2, 183, 112, 0); + + LoadCompressedSpriteSheet(&sSpriteSheet_RhydonBlock); + + sBlockStacker->RhydonBlockSpriteId = CreateSprite(&sSpriteTemplate_RhydonBlock, 177, 122, 0); } static void CreateRhydon(void) { - LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon); - - sBlockStacker->RhydonSpriteId = CreateSprite(&sSpriteTemplate_Rhydon, 183, 112, 0); + LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon); + + sBlockStacker->RhydonSpriteId = CreateSprite(&sSpriteTemplate_Rhydon, 183, 112, 0); } static void CreateArrow(void) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Arrow); - - sBlockStacker->ArrowSpriteId = CreateSprite(&sSpriteTemplate_Arrow, 14, 137, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Arrow); + + sBlockStacker->ArrowSpriteId = CreateSprite(&sSpriteTemplate_Arrow, 14, 137, 0); } static void CreateCommands(void) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Commands); - - sBlockStacker->CommandsSpriteId = CreateSprite(&sSpriteTemplate_Commands, 196, 50, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Commands); + + sBlockStacker->CommandsSpriteId = CreateSprite(&sSpriteTemplate_Commands, 196, 50, 0); } static void CreateX1(s16 x, s16 y) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_X); - - sBlockStacker->x1SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_X); + + sBlockStacker->x1SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); } static void CreateX2(s16 x, s16 y) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_X); - - sBlockStacker->x2SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_X); + + sBlockStacker->x2SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); } static void CreateX3(s16 x, s16 y) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_X); - - sBlockStacker->x3SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_X); + + sBlockStacker->x3SpriteId = CreateSprite(&sSpriteTemplate_X, x, y, 0); } static void CreateYesNo(void) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Yes); - - sBlockStacker->YesSpriteId = CreateSprite(&sSpriteTemplate_Yes, 50, 110, 0); - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_No); - - sBlockStacker->NoSpriteId = CreateSprite(&sSpriteTemplate_No, 104, 110, 0); - gSprites[sBlockStacker->NoSpriteId].oam.tileNum += 32; - - sBlockStacker->YesNo = 0; // Yes + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Yes); + + sBlockStacker->YesSpriteId = CreateSprite(&sSpriteTemplate_Yes, 50, 110, 0); + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_No); + + sBlockStacker->NoSpriteId = CreateSprite(&sSpriteTemplate_No, 104, 110, 0); + gSprites[sBlockStacker->NoSpriteId].oam.tileNum += 32; + + sBlockStacker->YesNo = 0; // Yes } static void UpdateLives(void) { - if ((sBlockStacker->BlocksLeft == 2) && (sBlockStacker->LastLives == 3)) - { - gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 2; - } - else if ((sBlockStacker->BlocksLeft == 1) && (sBlockStacker->LastLives == 3)) - { - gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 4; - } - else if ((sBlockStacker->BlocksLeft == 1) && (sBlockStacker->LastLives == 2)) - { - gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 2; - } + if ((sBlockStacker->BlocksLeft == 2) && (sBlockStacker->LastLives == 3)) + { + gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 2; + } + else if ((sBlockStacker->BlocksLeft == 1) && (sBlockStacker->LastLives == 3)) + { + gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 4; + } + else if ((sBlockStacker->BlocksLeft == 1) && (sBlockStacker->LastLives == 2)) + { + gSprites[sBlockStacker->LivesSpriteId].oam.tileNum -= 2; + } } static void CreateLives(void) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Lives); - - sBlockStacker->LivesSpriteId = CreateSprite(&sSpriteTemplate_Lives, 204, 24, 0); - gSprites[sBlockStacker->LivesSpriteId].oam.tileNum += 4; + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Lives); + + sBlockStacker->LivesSpriteId = CreateSprite(&sSpriteTemplate_Lives, 204, 24, 0); + gSprites[sBlockStacker->LivesSpriteId].oam.tileNum += 4; } static void CreateKeepGoing(void) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_KeepGoing); - - sBlockStacker->KeepGoingSpriteId = CreateSprite(&sSpriteTemplate_KeepGoing, 80, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_KeepGoing); + + sBlockStacker->KeepGoingSpriteId = CreateSprite(&sSpriteTemplate_KeepGoing, 80, 80, 0); } static void CreateGameOver(void) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); - - sBlockStacker->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 80, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); + + sBlockStacker->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 80, 80, 0); } static void CreateStart(void) { - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Start); - - sBlockStacker->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 80, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Start); + + sBlockStacker->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 80, 80, 0); } static void DestroyKeepGoing(void) { - gSprites[sBlockStacker->KeepGoingSpriteId].invisible = TRUE; - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->KeepGoingSpriteId]); + gSprites[sBlockStacker->KeepGoingSpriteId].invisible = TRUE; + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->KeepGoingSpriteId]); } static void DestroyStart(void) { - gSprites[sBlockStacker->StartSpriteId].invisible = TRUE; - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->StartSpriteId]); + gSprites[sBlockStacker->StartSpriteId].invisible = TRUE; + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->StartSpriteId]); } static void DestroyLives(void) { - gSprites[sBlockStacker->LivesSpriteId].invisible = TRUE; - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->LivesSpriteId]); + gSprites[sBlockStacker->LivesSpriteId].invisible = TRUE; + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->LivesSpriteId]); } static void CreateWinner(void) { - LoadCompressedSpriteSheet(&sSpriteSheet_Winner); - - sBlockStacker->WinnerSpriteId = CreateSprite(&sSpriteTemplate_Winner, 80, 80, 0); + LoadCompressedSpriteSheet(&sSpriteSheet_Winner); + + sBlockStacker->WinnerSpriteId = CreateSprite(&sSpriteTemplate_Winner, 80, 80, 0); } static void CreateTitle(void) { - LoadCompressedSpriteSheet(&sSpriteSheet_Title); - - sBlockStacker->TitleSpriteId = CreateSprite(&sSpriteTemplate_Title, 80, 80, 0); + LoadCompressedSpriteSheet(&sSpriteSheet_Title); + + sBlockStacker->TitleSpriteId = CreateSprite(&sSpriteTemplate_Title, 80, 80, 0); } static void DestroyTitle(void) { - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->TitleSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->TitleSpriteId]); } static void CreateLevel_1(void) { - u8 LR; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Block); - - LR = (Random() % 100); - - if (LR < 50) // Right Side - { - sBlockStacker->Row1Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96, 136, 1); - sBlockStacker->Row1Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 136, 1); - sBlockStacker->Row1Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 136, 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row1Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32, 136, 1); - sBlockStacker->Row1Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 136, 1); - sBlockStacker->Row1Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 136, 1); - - sBlockStacker->xDirection = 0; // Move Right - } - - //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; - - sBlockStacker->xSpeed = 10; - sBlockStacker->xSpeedDelay = 0; + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row1Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96, 136, 1); + sBlockStacker->Row1Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 136, 1); + sBlockStacker->Row1Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 136, 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row1Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32, 136, 1); + sBlockStacker->Row1Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 136, 1); + sBlockStacker->Row1Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 136, 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 10; + sBlockStacker->xSpeedDelay = 0; } static void CreateLevel_2(void) { - u8 LR; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Block); - - LR = (Random() % 100); - - if (sBlockStacker->BlocksLeft == 3) - { - if (LR < 50) // Right Side - { - sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row2Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row2Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - } - else if (sBlockStacker->BlocksLeft == 2) - { - if (LR < 50) // Right Side - { - sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - } - else if (sBlockStacker->BlocksLeft == 1) - { - if (LR < 50) // Right Side - { - sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - } - - //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; - - sBlockStacker->xSpeed = 9; - sBlockStacker->xSpeedDelay = 0; + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (sBlockStacker->BlocksLeft == 3) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block3SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + else if (sBlockStacker->BlocksLeft == 2) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row2Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + else if (sBlockStacker->BlocksLeft == 1) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row2Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 9; + sBlockStacker->xSpeedDelay = 0; } static void CreateLevel_3(void) { - u8 LR; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Block); - - LR = (Random() % 100); - - if (sBlockStacker->BlocksLeft == 2) - { - if (LR < 50) // Right Side - { - sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row3Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row3Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - } - else if (sBlockStacker->BlocksLeft == 1) - { - if (LR < 50) // Right Side - { - sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - } - - //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; - - sBlockStacker->xSpeed = 8; - sBlockStacker->xSpeedDelay = 0; + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (sBlockStacker->BlocksLeft == 2) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row3Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row3Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + else if (sBlockStacker->BlocksLeft == 1) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row3Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 8; + sBlockStacker->xSpeedDelay = 0; } static void CreateLevel_4(void) { - u8 LR; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Block); - - LR = (Random() % 100); - - if (sBlockStacker->BlocksLeft == 2) - { - if (LR < 50) // Right Side - { - sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row4Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); - sBlockStacker->Row4Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - } - else if (sBlockStacker->BlocksLeft == 1) - { - if (LR < 50) // Right Side - { - sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - } - - //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; - - sBlockStacker->xSpeed = 7; - sBlockStacker->xSpeedDelay = 0; + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (sBlockStacker->BlocksLeft == 2) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row4Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 16, 152 - (16 * sBlockStacker->CurrentRow), 1); + sBlockStacker->Row4Block2SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + else if (sBlockStacker->BlocksLeft == 1) + { + if (LR < 50) // Right Side + { + sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row4Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 7; + sBlockStacker->xSpeedDelay = 0; } static void CreateLevel_5(void) { - u8 LR; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Block); - - LR = (Random() % 100); - - if (LR < 50) // Right Side - { - sBlockStacker->Row5Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row5Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - - //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; - - sBlockStacker->xSpeed = 5; - sBlockStacker->xSpeedDelay = 0; + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row5Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row5Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 5; + sBlockStacker->xSpeedDelay = 0; } static void CreateLevel_6(void) { - u8 LR; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Block); - - LR = (Random() % 100); - - if (LR < 50) // Right Side - { - sBlockStacker->Row6Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row6Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - - //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; - - sBlockStacker->xSpeed = 4; - sBlockStacker->xSpeedDelay = 0; + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row6Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row6Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 4; + sBlockStacker->xSpeedDelay = 0; } static void CreateLevel_7(void) { - u8 LR; - - LoadSpritePalettes(sSpritePalettes); + u8 LR; + + LoadSpritePalettes(sSpritePalettes); LoadCompressedSpriteSheet(&sSpriteSheet_Block); - - LR = (Random() % 100); - - if (LR < 50) // Right Side - { - sBlockStacker->Row7Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row7Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - - //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; - - sBlockStacker->xSpeed = 3; - sBlockStacker->xSpeedDelay = 0; + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row7Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row7Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 3; + sBlockStacker->xSpeedDelay = 0; } static void CreateLevel_8(void) { - u8 LR; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Block); - - LR = (Random() % 100); - - if (LR < 50) // Right Side - { - sBlockStacker->Row8Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 1; // Move Left - } - else // Left Side - { - sBlockStacker->Row8Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); - - sBlockStacker->xDirection = 0; // Move Right - } - - //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; - - sBlockStacker->xSpeed = 2; - sBlockStacker->xSpeedDelay = 0; + u8 LR; + + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Block); + + LR = (Random() % 100); + + if (LR < 50) // Right Side + { + sBlockStacker->Row8Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 96 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 1; // Move Left + } + else // Left Side + { + sBlockStacker->Row8Block1SpriteId = CreateSprite(&sSpriteTemplate_Block, 32 + 32, 152 - (16 * sBlockStacker->CurrentRow), 1); + + sBlockStacker->xDirection = 0; // Move Right + } + + //gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 16; + + sBlockStacker->xSpeed = 2; + sBlockStacker->xSpeedDelay = 0; } static void UpdateBlockPosition(void) { - if (sBlockStacker->xSpeedDelay == 0) - { - sBlockStacker->xSpeedDelay = sBlockStacker->xSpeed; - - // Per Level and Lives - - if ((sBlockStacker->CurrentRow == 1) && (sBlockStacker->BlocksLeft == 3)) // Level 1, 3 Lives - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row1Block3SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row1Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row1Block3SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row1Block1SpriteId].x = (gSprites[sBlockStacker->Row1Block1SpriteId].x + 16); - gSprites[sBlockStacker->Row1Block2SpriteId].x = (gSprites[sBlockStacker->Row1Block2SpriteId].x + 16); - gSprites[sBlockStacker->Row1Block3SpriteId].x = (gSprites[sBlockStacker->Row1Block3SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row1Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row1Block1SpriteId].x = (gSprites[sBlockStacker->Row1Block1SpriteId].x - 16); - gSprites[sBlockStacker->Row1Block2SpriteId].x = (gSprites[sBlockStacker->Row1Block2SpriteId].x - 16); - gSprites[sBlockStacker->Row1Block3SpriteId].x = (gSprites[sBlockStacker->Row1Block3SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 3)) // Level 2, 3 Lives - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block3SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block3SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); - gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x + 16); - gSprites[sBlockStacker->Row2Block3SpriteId].x = (gSprites[sBlockStacker->Row2Block3SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); - gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x - 16); - gSprites[sBlockStacker->Row2Block3SpriteId].x = (gSprites[sBlockStacker->Row2Block3SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 2)) // Level 2, 2 Lives - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block2SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block2SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); - gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); - gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 1)) // Level 2, 1 Live - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 2)) // Level 3, 2 Lives - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block2SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block2SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x + 16); - gSprites[sBlockStacker->Row3Block2SpriteId].x = (gSprites[sBlockStacker->Row3Block2SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x - 16); - gSprites[sBlockStacker->Row3Block2SpriteId].x = (gSprites[sBlockStacker->Row3Block2SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 1)) // Level 3, 1 Lives - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 2)) // Level 4, 2 Lives - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block2SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block2SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x + 16); - gSprites[sBlockStacker->Row4Block2SpriteId].x = (gSprites[sBlockStacker->Row4Block2SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x - 16); - gSprites[sBlockStacker->Row4Block2SpriteId].x = (gSprites[sBlockStacker->Row4Block2SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 1)) // Level 4, 1 Live - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 5) && (sBlockStacker->BlocksLeft == 1)) // Level 5, 1 Live - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row5Block1SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row5Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row5Block1SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row5Block1SpriteId].x = (gSprites[sBlockStacker->Row5Block1SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row5Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row5Block1SpriteId].x = (gSprites[sBlockStacker->Row5Block1SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 6) && (sBlockStacker->BlocksLeft == 1)) // Level 6, 1 Live - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row6Block1SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row6Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row6Block1SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row6Block1SpriteId].x = (gSprites[sBlockStacker->Row6Block1SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row6Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row6Block1SpriteId].x = (gSprites[sBlockStacker->Row6Block1SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 7) && (sBlockStacker->BlocksLeft == 1)) // Level 7, 1 Live - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row7Block1SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row7Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row7Block1SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row7Block1SpriteId].x = (gSprites[sBlockStacker->Row7Block1SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row7Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row7Block1SpriteId].x = (gSprites[sBlockStacker->Row7Block1SpriteId].x - 16); - } - } - else if ((sBlockStacker->CurrentRow == 8) && (sBlockStacker->BlocksLeft == 1)) // Level 8, 1 Live - { - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row8Block1SpriteId].x == 128)) // Right, against right side - { - sBlockStacker->xDirection = 1; - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row8Block1SpriteId].x == 32)) // Left, against left side - { - sBlockStacker->xDirection = 0; - } - - if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row8Block1SpriteId].x != 128)) // Right, not against right side - { - gSprites[sBlockStacker->Row8Block1SpriteId].x = (gSprites[sBlockStacker->Row8Block1SpriteId].x + 16); - } - else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row8Block1SpriteId].x != 32)) // Left, not against left side - { - gSprites[sBlockStacker->Row8Block1SpriteId].x = (gSprites[sBlockStacker->Row8Block1SpriteId].x - 16); - } - } - } - sBlockStacker->xSpeedDelay--; + if (sBlockStacker->xSpeedDelay == 0) + { + sBlockStacker->xSpeedDelay = sBlockStacker->xSpeed; + + // Per Level and Lives + + if ((sBlockStacker->CurrentRow == 1) && (sBlockStacker->BlocksLeft == 3)) // Level 1, 3 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row1Block3SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row1Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row1Block3SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row1Block1SpriteId].x = (gSprites[sBlockStacker->Row1Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row1Block2SpriteId].x = (gSprites[sBlockStacker->Row1Block2SpriteId].x + 16); + gSprites[sBlockStacker->Row1Block3SpriteId].x = (gSprites[sBlockStacker->Row1Block3SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row1Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row1Block1SpriteId].x = (gSprites[sBlockStacker->Row1Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row1Block2SpriteId].x = (gSprites[sBlockStacker->Row1Block2SpriteId].x - 16); + gSprites[sBlockStacker->Row1Block3SpriteId].x = (gSprites[sBlockStacker->Row1Block3SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 3)) // Level 2, 3 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block3SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block3SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x + 16); + gSprites[sBlockStacker->Row2Block3SpriteId].x = (gSprites[sBlockStacker->Row2Block3SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x - 16); + gSprites[sBlockStacker->Row2Block3SpriteId].x = (gSprites[sBlockStacker->Row2Block3SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 2)) // Level 2, 2 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block2SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block2SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row2Block2SpriteId].x = (gSprites[sBlockStacker->Row2Block2SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 1)) // Level 2, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row2Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row2Block1SpriteId].x = (gSprites[sBlockStacker->Row2Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 2)) // Level 3, 2 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block2SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block2SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row3Block2SpriteId].x = (gSprites[sBlockStacker->Row3Block2SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row3Block2SpriteId].x = (gSprites[sBlockStacker->Row3Block2SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 1)) // Level 3, 1 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row3Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row3Block1SpriteId].x = (gSprites[sBlockStacker->Row3Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 2)) // Level 4, 2 Lives + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block2SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block2SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x + 16); + gSprites[sBlockStacker->Row4Block2SpriteId].x = (gSprites[sBlockStacker->Row4Block2SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x - 16); + gSprites[sBlockStacker->Row4Block2SpriteId].x = (gSprites[sBlockStacker->Row4Block2SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 1)) // Level 4, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row4Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row4Block1SpriteId].x = (gSprites[sBlockStacker->Row4Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 5) && (sBlockStacker->BlocksLeft == 1)) // Level 5, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row5Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row5Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row5Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row5Block1SpriteId].x = (gSprites[sBlockStacker->Row5Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row5Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row5Block1SpriteId].x = (gSprites[sBlockStacker->Row5Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 6) && (sBlockStacker->BlocksLeft == 1)) // Level 6, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row6Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row6Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row6Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row6Block1SpriteId].x = (gSprites[sBlockStacker->Row6Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row6Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row6Block1SpriteId].x = (gSprites[sBlockStacker->Row6Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 7) && (sBlockStacker->BlocksLeft == 1)) // Level 7, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row7Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row7Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row7Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row7Block1SpriteId].x = (gSprites[sBlockStacker->Row7Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row7Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row7Block1SpriteId].x = (gSprites[sBlockStacker->Row7Block1SpriteId].x - 16); + } + } + else if ((sBlockStacker->CurrentRow == 8) && (sBlockStacker->BlocksLeft == 1)) // Level 8, 1 Live + { + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row8Block1SpriteId].x == 128)) // Right, against right side + { + sBlockStacker->xDirection = 1; + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row8Block1SpriteId].x == 32)) // Left, against left side + { + sBlockStacker->xDirection = 0; + } + + if ((sBlockStacker->xDirection == 0) && (gSprites[sBlockStacker->Row8Block1SpriteId].x != 128)) // Right, not against right side + { + gSprites[sBlockStacker->Row8Block1SpriteId].x = (gSprites[sBlockStacker->Row8Block1SpriteId].x + 16); + } + else if ((sBlockStacker->xDirection == 1) && (gSprites[sBlockStacker->Row8Block1SpriteId].x != 32)) // Left, not against left side + { + gSprites[sBlockStacker->Row8Block1SpriteId].x = (gSprites[sBlockStacker->Row8Block1SpriteId].x - 16); + } + } + } + sBlockStacker->xSpeedDelay--; } static void AButton(void) { - PlaySE(SE_M_STRENGTH); - //SwapFromBlock(); - sBlockStacker->ToggleButtons = 0; - - if ((sBlockStacker->CurrentRow == 1) && (sBlockStacker->BlocksLeft == 3)) // Level 1, 3 Lives - { - gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 4; - gSprites[sBlockStacker->Row1Block2SpriteId].oam.tileNum += 4; - gSprites[sBlockStacker->Row1Block3SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 3)) // Level 2, 3 Lives - { - gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; - gSprites[sBlockStacker->Row2Block2SpriteId].oam.tileNum += 4; - gSprites[sBlockStacker->Row2Block3SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 2)) // Level 2, 2 Lives - { - gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; - gSprites[sBlockStacker->Row2Block2SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 1)) // Level 2, 1 Live - { - gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 2)) // Level 3, 2 Lives - { - gSprites[sBlockStacker->Row3Block1SpriteId].oam.tileNum += 4; - gSprites[sBlockStacker->Row3Block2SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 1)) // Level 3, 1 Live - { - gSprites[sBlockStacker->Row3Block1SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 2)) // Level 4, 2 Lives - { - gSprites[sBlockStacker->Row4Block1SpriteId].oam.tileNum += 4; - gSprites[sBlockStacker->Row4Block2SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 1)) // Level 4, 1 Live - { - gSprites[sBlockStacker->Row4Block1SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 5) && (sBlockStacker->BlocksLeft == 1)) // Level 5, 1 Live - { - gSprites[sBlockStacker->Row5Block1SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 6) && (sBlockStacker->BlocksLeft == 1)) // Level 6, 1 Live - { - gSprites[sBlockStacker->Row6Block1SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 7) && (sBlockStacker->BlocksLeft == 1)) // Level 7, 1 Live - { - gSprites[sBlockStacker->Row7Block1SpriteId].oam.tileNum += 4; - } - else if ((sBlockStacker->CurrentRow == 8) && (sBlockStacker->BlocksLeft == 1)) // Level 8, 1 Live - { - gSprites[sBlockStacker->Row8Block1SpriteId].oam.tileNum += 4; - } - sBlockStacker->state = STACKER_CHECK_POS; + PlaySE(SE_M_STRENGTH); + //SwapFromBlock(); + sBlockStacker->ToggleButtons = 0; + + if ((sBlockStacker->CurrentRow == 1) && (sBlockStacker->BlocksLeft == 3)) // Level 1, 3 Lives + { + gSprites[sBlockStacker->Row1Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row1Block2SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row1Block3SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 3)) // Level 2, 3 Lives + { + gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row2Block2SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row2Block3SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 2)) // Level 2, 2 Lives + { + gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row2Block2SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 2) && (sBlockStacker->BlocksLeft == 1)) // Level 2, 1 Live + { + gSprites[sBlockStacker->Row2Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 2)) // Level 3, 2 Lives + { + gSprites[sBlockStacker->Row3Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row3Block2SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 3) && (sBlockStacker->BlocksLeft == 1)) // Level 3, 1 Live + { + gSprites[sBlockStacker->Row3Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 2)) // Level 4, 2 Lives + { + gSprites[sBlockStacker->Row4Block1SpriteId].oam.tileNum += 4; + gSprites[sBlockStacker->Row4Block2SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 4) && (sBlockStacker->BlocksLeft == 1)) // Level 4, 1 Live + { + gSprites[sBlockStacker->Row4Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 5) && (sBlockStacker->BlocksLeft == 1)) // Level 5, 1 Live + { + gSprites[sBlockStacker->Row5Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 6) && (sBlockStacker->BlocksLeft == 1)) // Level 6, 1 Live + { + gSprites[sBlockStacker->Row6Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 7) && (sBlockStacker->BlocksLeft == 1)) // Level 7, 1 Live + { + gSprites[sBlockStacker->Row7Block1SpriteId].oam.tileNum += 4; + } + else if ((sBlockStacker->CurrentRow == 8) && (sBlockStacker->BlocksLeft == 1)) // Level 8, 1 Live + { + gSprites[sBlockStacker->Row8Block1SpriteId].oam.tileNum += 4; + } + sBlockStacker->state = STACKER_CHECK_POS; } static void CheckLevel_2(void) { - s16 curX1; - s16 curX2; - s16 curX3; - s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; - - curX1 = gSprites[sBlockStacker->Row2Block1SpriteId].x; - curX2 = gSprites[sBlockStacker->Row2Block2SpriteId].x; - curX3 = gSprites[sBlockStacker->Row2Block3SpriteId].x; - - preX1 = gSprites[sBlockStacker->Row1Block1SpriteId].x; - preX2 = gSprites[sBlockStacker->Row1Block2SpriteId].x; - preX3 = gSprites[sBlockStacker->Row1Block3SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - - if ((curX1 != preX1) && (curX1 != preX2) && (curX1 != preX3)) // Block 1 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x1Active = 1; - CreateX1(gSprites[sBlockStacker->Row2Block1SpriteId].x, gSprites[sBlockStacker->Row2Block1SpriteId].y); - gSprites[sBlockStacker->Row2Block1SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row2Block1SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block1SpriteId]); - } - if (Lives > 1) - { - if ((curX2 != preX1) && (curX2 != preX2) && (curX2 != preX3)) // Block 2 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x2Active = 1; - CreateX2(gSprites[sBlockStacker->Row2Block2SpriteId].x, gSprites[sBlockStacker->Row2Block2SpriteId].y); - gSprites[sBlockStacker->Row2Block2SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row2Block2SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block2SpriteId]); - } - } - if (Lives > 2) - { - if ((curX3 != preX1) && (curX3 != preX2) && (curX3 != preX3)) // Block 3 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x3Active = 1; - CreateX3(gSprites[sBlockStacker->Row2Block3SpriteId].x, gSprites[sBlockStacker->Row2Block3SpriteId].y); - gSprites[sBlockStacker->Row2Block3SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row2Block3SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block3SpriteId]); - } - } + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row2Block1SpriteId].x; + curX2 = gSprites[sBlockStacker->Row2Block2SpriteId].x; + curX3 = gSprites[sBlockStacker->Row2Block3SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row1Block1SpriteId].x; + preX2 = gSprites[sBlockStacker->Row1Block2SpriteId].x; + preX3 = gSprites[sBlockStacker->Row1Block3SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1) && (curX1 != preX2) && (curX1 != preX3)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row2Block1SpriteId].x, gSprites[sBlockStacker->Row2Block1SpriteId].y); + gSprites[sBlockStacker->Row2Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row2Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block1SpriteId]); + } + if (Lives > 1) + { + if ((curX2 != preX1) && (curX2 != preX2) && (curX2 != preX3)) // Block 2 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x2Active = 1; + CreateX2(gSprites[sBlockStacker->Row2Block2SpriteId].x, gSprites[sBlockStacker->Row2Block2SpriteId].y); + gSprites[sBlockStacker->Row2Block2SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row2Block2SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block2SpriteId]); + } + } + if (Lives > 2) + { + if ((curX3 != preX1) && (curX3 != preX2) && (curX3 != preX3)) // Block 3 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x3Active = 1; + CreateX3(gSprites[sBlockStacker->Row2Block3SpriteId].x, gSprites[sBlockStacker->Row2Block3SpriteId].y); + gSprites[sBlockStacker->Row2Block3SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row2Block3SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row2Block3SpriteId]); + } + } } static void CheckLevel_3(void) { - s16 curX1; - s16 curX2; - s16 curX3; - s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; - - curX1 = gSprites[sBlockStacker->Row3Block1SpriteId].x; - curX2 = gSprites[sBlockStacker->Row3Block2SpriteId].x; - - preX1 = gSprites[sBlockStacker->Row2Block1SpriteId].x; - preX2 = gSprites[sBlockStacker->Row2Block2SpriteId].x; - preX3 = gSprites[sBlockStacker->Row2Block3SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - - if ((curX1 != preX1) && (curX1 != preX2) && (curX1 != preX3)) // Block 1 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x1Active = 1; - CreateX1(gSprites[sBlockStacker->Row3Block1SpriteId].x, gSprites[sBlockStacker->Row3Block1SpriteId].y); - gSprites[sBlockStacker->Row3Block1SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row3Block1SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row3Block1SpriteId]); - } - if (Lives > 1) - { - if ((curX2 != preX1) && (curX2 != preX2) && (curX2 != preX3)) // Block 2 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x2Active = 1; - CreateX2(gSprites[sBlockStacker->Row3Block2SpriteId].x, gSprites[sBlockStacker->Row3Block2SpriteId].y); - gSprites[sBlockStacker->Row3Block2SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row3Block2SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row3Block2SpriteId]); - } - } + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row3Block1SpriteId].x; + curX2 = gSprites[sBlockStacker->Row3Block2SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row2Block1SpriteId].x; + preX2 = gSprites[sBlockStacker->Row2Block2SpriteId].x; + preX3 = gSprites[sBlockStacker->Row2Block3SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1) && (curX1 != preX2) && (curX1 != preX3)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row3Block1SpriteId].x, gSprites[sBlockStacker->Row3Block1SpriteId].y); + gSprites[sBlockStacker->Row3Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row3Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row3Block1SpriteId]); + } + if (Lives > 1) + { + if ((curX2 != preX1) && (curX2 != preX2) && (curX2 != preX3)) // Block 2 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x2Active = 1; + CreateX2(gSprites[sBlockStacker->Row3Block2SpriteId].x, gSprites[sBlockStacker->Row3Block2SpriteId].y); + gSprites[sBlockStacker->Row3Block2SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row3Block2SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row3Block2SpriteId]); + } + } } static void CheckLevel_4(void) { - s16 curX1; - s16 curX2; - s16 curX3; - s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; - - curX1 = gSprites[sBlockStacker->Row4Block1SpriteId].x; - curX2 = gSprites[sBlockStacker->Row4Block2SpriteId].x; - - preX1 = gSprites[sBlockStacker->Row3Block1SpriteId].x; - preX2 = gSprites[sBlockStacker->Row3Block2SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - - if ((curX1 != preX1) && (curX1 != preX2)) // Block 1 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x1Active = 1; - CreateX1(gSprites[sBlockStacker->Row4Block1SpriteId].x, gSprites[sBlockStacker->Row4Block1SpriteId].y); - gSprites[sBlockStacker->Row4Block1SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row4Block1SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row4Block1SpriteId]); - } - if (Lives > 1) - { - if ((curX2 != preX1) && (curX2 != preX2)) // Block 2 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x2Active = 1; - CreateX2(gSprites[sBlockStacker->Row4Block2SpriteId].x, gSprites[sBlockStacker->Row4Block2SpriteId].y); - gSprites[sBlockStacker->Row4Block2SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row4Block2SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row4Block2SpriteId]); - } - } + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row4Block1SpriteId].x; + curX2 = gSprites[sBlockStacker->Row4Block2SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row3Block1SpriteId].x; + preX2 = gSprites[sBlockStacker->Row3Block2SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1) && (curX1 != preX2)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row4Block1SpriteId].x, gSprites[sBlockStacker->Row4Block1SpriteId].y); + gSprites[sBlockStacker->Row4Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row4Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row4Block1SpriteId]); + } + if (Lives > 1) + { + if ((curX2 != preX1) && (curX2 != preX2)) // Block 2 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x2Active = 1; + CreateX2(gSprites[sBlockStacker->Row4Block2SpriteId].x, gSprites[sBlockStacker->Row4Block2SpriteId].y); + gSprites[sBlockStacker->Row4Block2SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row4Block2SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row4Block2SpriteId]); + } + } } static void CheckLevel_5(void) { - s16 curX1; - s16 curX2; - s16 curX3; - s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; - - curX1 = gSprites[sBlockStacker->Row5Block1SpriteId].x; - - preX1 = gSprites[sBlockStacker->Row4Block1SpriteId].x; - preX2 = gSprites[sBlockStacker->Row4Block2SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - - if ((curX1 != preX1) && (curX1 != preX2)) // Block 1 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x1Active = 1; - CreateX1(gSprites[sBlockStacker->Row5Block1SpriteId].x, gSprites[sBlockStacker->Row5Block1SpriteId].y); - gSprites[sBlockStacker->Row5Block1SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row5Block1SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row5Block1SpriteId]); - } + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row5Block1SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row4Block1SpriteId].x; + preX2 = gSprites[sBlockStacker->Row4Block2SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1) && (curX1 != preX2)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row5Block1SpriteId].x, gSprites[sBlockStacker->Row5Block1SpriteId].y); + gSprites[sBlockStacker->Row5Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row5Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row5Block1SpriteId]); + } } static void CheckLevel_6(void) { - s16 curX1; - s16 curX2; - s16 curX3; - s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; - - curX1 = gSprites[sBlockStacker->Row6Block1SpriteId].x; - - preX1 = gSprites[sBlockStacker->Row5Block1SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - - if ((curX1 != preX1)) // Block 1 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x1Active = 1; - CreateX1(gSprites[sBlockStacker->Row6Block1SpriteId].x, gSprites[sBlockStacker->Row6Block1SpriteId].y); - gSprites[sBlockStacker->Row6Block1SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row6Block1SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row6Block1SpriteId]); - } + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row6Block1SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row5Block1SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row6Block1SpriteId].x, gSprites[sBlockStacker->Row6Block1SpriteId].y); + gSprites[sBlockStacker->Row6Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row6Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row6Block1SpriteId]); + } } static void CheckLevel_7(void) { - s16 curX1; - s16 curX2; - s16 curX3; - s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; - - curX1 = gSprites[sBlockStacker->Row7Block1SpriteId].x; - - preX1 = gSprites[sBlockStacker->Row6Block1SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - - if ((curX1 != preX1)) // Block 1 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x1Active = 1; - CreateX1(gSprites[sBlockStacker->Row7Block1SpriteId].x, gSprites[sBlockStacker->Row7Block1SpriteId].y); - gSprites[sBlockStacker->Row7Block1SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row7Block1SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row7Block1SpriteId]); - } + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row7Block1SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row6Block1SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row7Block1SpriteId].x, gSprites[sBlockStacker->Row7Block1SpriteId].y); + gSprites[sBlockStacker->Row7Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row7Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row7Block1SpriteId]); + } } static void CheckLevel_8(void) { - s16 curX1; - s16 curX2; - s16 curX3; - s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; - - curX1 = gSprites[sBlockStacker->Row8Block1SpriteId].x; - - preX1 = gSprites[sBlockStacker->Row7Block1SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - - if ((curX1 != preX1)) // Block 1 Off - { - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - sBlockStacker->BlocksLeft--; - sBlockStacker->x1Active = 1; - CreateX1(gSprites[sBlockStacker->Row8Block1SpriteId].x, gSprites[sBlockStacker->Row8Block1SpriteId].y); - gSprites[sBlockStacker->Row8Block1SpriteId].invisible = TRUE; - gSprites[sBlockStacker->Row8Block1SpriteId].x = 200; - //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row8Block1SpriteId]); - } + s16 curX1; + s16 curX2; + s16 curX3; + s16 preX1; + s16 preX2; + s16 preX3; + u8 Lives; + + curX1 = gSprites[sBlockStacker->Row8Block1SpriteId].x; + + preX1 = gSprites[sBlockStacker->Row7Block1SpriteId].x; + + Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + if ((curX1 != preX1)) // Block 1 Off + { + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + sBlockStacker->BlocksLeft--; + sBlockStacker->x1Active = 1; + CreateX1(gSprites[sBlockStacker->Row8Block1SpriteId].x, gSprites[sBlockStacker->Row8Block1SpriteId].y); + gSprites[sBlockStacker->Row8Block1SpriteId].invisible = TRUE; + gSprites[sBlockStacker->Row8Block1SpriteId].x = 200; + //DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Row8Block1SpriteId]); + } } static void HandleInput(void) { - if (sBlockStacker->ToggleButtons == 1) - { - if (JOY_NEW(A_BUTTON)) - { - AButton(); - } - else if (JOY_NEW(B_BUTTON)) - { - if (sBlockStacker->exitToggle == 0) { - PlaySE(SE_SELECT); - sBlockStacker->state = STACKER_START_EXIT; - } - } - } + if (sBlockStacker->ToggleButtons == 1) + { + if (JOY_NEW(A_BUTTON)) + { + AButton(); + } + else if (JOY_NEW(B_BUTTON)) + { + if (sBlockStacker->exitToggle == 0) { + PlaySE(SE_SELECT); + sBlockStacker->state = STACKER_START_EXIT; + } + } + } } static void HandleInput2(void) { - if (JOY_NEW(A_BUTTON)) - { - if (sBlockStacker->YesNo == 0) // Yes - { - PlaySE(SE_POKENAV_ON); - gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; - gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; - DestroyKeepGoing(); - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); - sBlockStacker->GoDelay = 30; - sBlockStacker->state = STACKER_POST_DELAY; - return; - } - else - { - PlaySE(SE_POKENAV_OFF); - sBlockStacker->YesNo = 1; - gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; - gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; - DestroyKeepGoing(); - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); - sBlockStacker->GoDelay = 30; - sBlockStacker->state = STACKER_POST_DELAY; - return; - } - } - else if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_POKENAV_OFF); - gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; - gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; - DestroyKeepGoing(); - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); - sBlockStacker->GoDelay = 30; - sBlockStacker->state = STACKER_POST_DELAY; - return; - } - else if (JOY_NEW(DPAD_RIGHT)) - { - if (sBlockStacker->YesNo == 0) - { - PlaySE(SE_SELECT); - sBlockStacker->YesNo = 1; // No - gSprites[sBlockStacker->YesSpriteId].oam.tileNum += 32; - gSprites[sBlockStacker->NoSpriteId].oam.tileNum -= 32; - } - return; - } - else if (JOY_NEW(DPAD_LEFT)) - { - if (sBlockStacker->YesNo == 1) - { - PlaySE(SE_SELECT); - sBlockStacker->YesNo = 0; // Yes - gSprites[sBlockStacker->YesSpriteId].oam.tileNum -= 32; - gSprites[sBlockStacker->NoSpriteId].oam.tileNum += 32; - } - return; - } + if (JOY_NEW(A_BUTTON)) + { + if (sBlockStacker->YesNo == 0) // Yes + { + PlaySE(SE_POKENAV_ON); + gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; + gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; + DestroyKeepGoing(); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); + sBlockStacker->GoDelay = 30; + sBlockStacker->state = STACKER_POST_DELAY; + return; + } + else + { + PlaySE(SE_POKENAV_OFF); + sBlockStacker->YesNo = 1; + gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; + gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; + DestroyKeepGoing(); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); + sBlockStacker->GoDelay = 30; + sBlockStacker->state = STACKER_POST_DELAY; + return; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_POKENAV_OFF); + gSprites[sBlockStacker->YesSpriteId].invisible = TRUE; + gSprites[sBlockStacker->NoSpriteId].invisible = TRUE; + DestroyKeepGoing(); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->YesSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->NoSpriteId]); + sBlockStacker->GoDelay = 30; + sBlockStacker->state = STACKER_POST_DELAY; + return; + } + else if (JOY_NEW(DPAD_RIGHT)) + { + if (sBlockStacker->YesNo == 0) + { + PlaySE(SE_SELECT); + sBlockStacker->YesNo = 1; // No + gSprites[sBlockStacker->YesSpriteId].oam.tileNum += 32; + gSprites[sBlockStacker->NoSpriteId].oam.tileNum -= 32; + } + return; + } + else if (JOY_NEW(DPAD_LEFT)) + { + if (sBlockStacker->YesNo == 1) + { + PlaySE(SE_SELECT); + sBlockStacker->YesNo = 0; // Yes + gSprites[sBlockStacker->YesSpriteId].oam.tileNum -= 32; + gSprites[sBlockStacker->NoSpriteId].oam.tileNum += 32; + } + return; + } } static void ExitBlockStacker(void) @@ -2100,280 +2100,280 @@ static void StartExitBlockStacker(void) static void BlockStackerMain(u8 taskId) { - switch (sBlockStacker->state) - { - case STACKER_HIGHLIGHT: - CreateHighlight(sBlockStacker->HighlightNum, sBlockStacker->HighlightRow); - DestroyHighlights(); - if (sBlockStacker->DestroyedHighlights > 55) - { - sBlockStacker->state = STACKER_HIGHLIGHT_END; - } - break; - case STACKER_HIGHLIGHT_END: - sBlockStacker->GoDelay = 50; - sBlockStacker->state = STACKER_GO_DELAY; - break; - case STACKER_GO_DELAY: - sBlockStacker->GoDelay--; - if (sBlockStacker->GoDelay == 0) - { - DestroyTitle(); - sBlockStacker->GoDelay = 100; - sBlockStacker->state = STACKER_GO; - } - break; - case STACKER_GO: - if (sBlockStacker->GoDelay == 100) - { - PlaySE(SE_POKENAV_ON); - CreateStart(); - } - sBlockStacker->GoDelay--; - if (sBlockStacker->GoDelay == 0) - { - PlaySE(SE_EGG_HATCH); - DestroyStart(); - CreateCommands(); - CreateArrow(); - CreateLives(); - //SwapToBlock(); - sBlockStacker->state = STACKER_LEVEL_SETUP; - } - break; - case STACKER_LEVEL_SETUP: - gSprites[sBlockStacker->ArrowSpriteId].y = 153 - (16 * sBlockStacker->CurrentRow); - - if (sBlockStacker->CurrentRow == 1) - { - CreateLevel_1(); - } - else if (sBlockStacker->CurrentRow == 2) - { - CreateLevel_2(); - } - else if (sBlockStacker->CurrentRow == 3) - { - if (sBlockStacker->BlocksLeft > 2) - { - sBlockStacker->BlocksLeft = 2; - } - CreateLevel_3(); - } - else if (sBlockStacker->CurrentRow == 4) - { - CreateLevel_4(); - } - else if (sBlockStacker->CurrentRow == 5) - { - if (sBlockStacker->BlocksLeft > 1) - { - sBlockStacker->BlocksLeft = 1; - } - CreateLevel_5(); - } - else if (sBlockStacker->CurrentRow == 6) - { - CreateLevel_6(); - } - else if (sBlockStacker->CurrentRow == 7) - { - CreateLevel_7(); - PlayBGM(MUS_RG_TRAINER_TOWER); - } - else if (sBlockStacker->CurrentRow == 8) - { - CreateLevel_8(); - PlayBGM(MUS_RG_SEVII_ROUTE); - } - UpdateLives(); - sBlockStacker->ToggleButtons = 1; - sBlockStacker->state = STACKER_INPUT; - break; - case STACKER_INPUT: - UpdateBlockPosition(); - HandleInput(); - break; - case STACKER_CHECK_POS: - if (sBlockStacker->CurrentRow == 2) - { - CheckLevel_2(); - } - else if (sBlockStacker->CurrentRow == 3) - { - CheckLevel_3(); - } - else if (sBlockStacker->CurrentRow == 4) - { - CheckLevel_4(); - } - else if (sBlockStacker->CurrentRow == 5) - { - CheckLevel_5(); - } - else if (sBlockStacker->CurrentRow == 6) - { - CheckLevel_6(); - } - else if (sBlockStacker->CurrentRow == 7) - { - CheckLevel_7(); - } - else if (sBlockStacker->CurrentRow == 8) - { - CheckLevel_8(); - } - - sBlockStacker->GoDelay = 30; - sBlockStacker->state = STACKER_ROW_DELAY; - break; - case STACKER_ROW_DELAY: - sBlockStacker->GoDelay--; - if (sBlockStacker->GoDelay == 15 && ((sBlockStacker->x1Active != 0) || (sBlockStacker->x2Active != 0) || (sBlockStacker->x3Active != 0))) - { - PlaySE(SE_FAILURE); - } - if (sBlockStacker->GoDelay == 0) - { - if (sBlockStacker->x1Active != 0) - { - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x1SpriteId]); - sBlockStacker->x1Active = 0; - } - if (sBlockStacker->x2Active != 0) - { - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x2SpriteId]); - sBlockStacker->x2Active = 0; - } - if (sBlockStacker->x3Active != 0) - { - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x3SpriteId]); - sBlockStacker->x3Active = 0; - } - if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow != 6) && (sBlockStacker->CurrentRow != 7) && (sBlockStacker->CurrentRow != 8)) - { - //sBlockStacker->ToggleButtons = 1; - sBlockStacker->CurrentRow++; - PlaySE(SE_EGG_HATCH); - //SwapToBlock(); - sBlockStacker->state = STACKER_LEVEL_SETUP; - } - else if (sBlockStacker->BlocksLeft == 0) - { - sBlockStacker->GoDelay = 140; - PlayFanfare(MUS_TOO_BAD); - CreateGameOver(); - DestroyLives(); - sBlockStacker->state = STACKER_GAME_OVER; - } - else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 6)) - { - sBlockStacker->Winnings = 50; - sBlockStacker->CurrentRow++; - CreateKeepGoing(); - CreateYesNo(); - PlayFanfare(MUS_LEVEL_UP); - sBlockStacker->state = STACKER_KEEP_GOING; - } - else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 7)) - { - sBlockStacker->Winnings = 250; - sBlockStacker->CurrentRow++; - CreateKeepGoing(); - CreateYesNo(); - PlayFanfare(MUS_LEVEL_UP); - sBlockStacker->state = STACKER_KEEP_GOING; - } - else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 8)) - { - sBlockStacker->Winnings = 1000; - sBlockStacker->CurrentRow++; - PlayFanfare(MUS_OBTAIN_BADGE); - sBlockStacker->GoDelay = 330; - CreateWinner(); - sBlockStacker->state = STACKER_WIN; - } - } - break; - case STACKER_KEEP_GOING: - HandleInput2(); - break; - case STACKER_POST_DELAY: - sBlockStacker->GoDelay--; - if (sBlockStacker->GoDelay == 0) - { - if (sBlockStacker->YesNo == 1) // No - { - VarSet(GAME_CORNER_VAR_WINNINGS, sBlockStacker->Winnings); - sBlockStacker->state = STACKER_START_EXIT; - } - else - { - PlaySE(SE_EGG_HATCH); - //SwapToBlock(); - sBlockStacker->state = STACKER_LEVEL_SETUP; - } - } - break; - case STACKER_WIN: - sBlockStacker->GoDelay--; - if (sBlockStacker->GoDelay == 0) - { - VarSet(GAME_CORNER_VAR_WINNINGS, sBlockStacker->Winnings); - sBlockStacker->state = STACKER_START_EXIT; - } - break; - case STACKER_GAME_OVER: - sBlockStacker->GoDelay--; - if (sBlockStacker->GoDelay == 0) - { - sBlockStacker->state = STACKER_START_EXIT; - } - break; - case STACKER_START_EXIT: - StartExitBlockStacker(); - break; - case STACKER_EXIT: - ExitBlockStacker(); - break; - } + switch (sBlockStacker->state) + { + case STACKER_HIGHLIGHT: + CreateHighlight(sBlockStacker->HighlightNum, sBlockStacker->HighlightRow); + DestroyHighlights(); + if (sBlockStacker->DestroyedHighlights > 55) + { + sBlockStacker->state = STACKER_HIGHLIGHT_END; + } + break; + case STACKER_HIGHLIGHT_END: + sBlockStacker->GoDelay = 50; + sBlockStacker->state = STACKER_GO_DELAY; + break; + case STACKER_GO_DELAY: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + DestroyTitle(); + sBlockStacker->GoDelay = 100; + sBlockStacker->state = STACKER_GO; + } + break; + case STACKER_GO: + if (sBlockStacker->GoDelay == 100) + { + PlaySE(SE_POKENAV_ON); + CreateStart(); + } + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + PlaySE(SE_EGG_HATCH); + DestroyStart(); + CreateCommands(); + CreateArrow(); + CreateLives(); + //SwapToBlock(); + sBlockStacker->state = STACKER_LEVEL_SETUP; + } + break; + case STACKER_LEVEL_SETUP: + gSprites[sBlockStacker->ArrowSpriteId].y = 153 - (16 * sBlockStacker->CurrentRow); + + if (sBlockStacker->CurrentRow == 1) + { + CreateLevel_1(); + } + else if (sBlockStacker->CurrentRow == 2) + { + CreateLevel_2(); + } + else if (sBlockStacker->CurrentRow == 3) + { + if (sBlockStacker->BlocksLeft > 2) + { + sBlockStacker->BlocksLeft = 2; + } + CreateLevel_3(); + } + else if (sBlockStacker->CurrentRow == 4) + { + CreateLevel_4(); + } + else if (sBlockStacker->CurrentRow == 5) + { + if (sBlockStacker->BlocksLeft > 1) + { + sBlockStacker->BlocksLeft = 1; + } + CreateLevel_5(); + } + else if (sBlockStacker->CurrentRow == 6) + { + CreateLevel_6(); + } + else if (sBlockStacker->CurrentRow == 7) + { + CreateLevel_7(); + PlayBGM(MUS_RG_TRAINER_TOWER); + } + else if (sBlockStacker->CurrentRow == 8) + { + CreateLevel_8(); + PlayBGM(MUS_RG_SEVII_ROUTE); + } + UpdateLives(); + sBlockStacker->ToggleButtons = 1; + sBlockStacker->state = STACKER_INPUT; + break; + case STACKER_INPUT: + UpdateBlockPosition(); + HandleInput(); + break; + case STACKER_CHECK_POS: + if (sBlockStacker->CurrentRow == 2) + { + CheckLevel_2(); + } + else if (sBlockStacker->CurrentRow == 3) + { + CheckLevel_3(); + } + else if (sBlockStacker->CurrentRow == 4) + { + CheckLevel_4(); + } + else if (sBlockStacker->CurrentRow == 5) + { + CheckLevel_5(); + } + else if (sBlockStacker->CurrentRow == 6) + { + CheckLevel_6(); + } + else if (sBlockStacker->CurrentRow == 7) + { + CheckLevel_7(); + } + else if (sBlockStacker->CurrentRow == 8) + { + CheckLevel_8(); + } + + sBlockStacker->GoDelay = 30; + sBlockStacker->state = STACKER_ROW_DELAY; + break; + case STACKER_ROW_DELAY: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 15 && ((sBlockStacker->x1Active != 0) || (sBlockStacker->x2Active != 0) || (sBlockStacker->x3Active != 0))) + { + PlaySE(SE_FAILURE); + } + if (sBlockStacker->GoDelay == 0) + { + if (sBlockStacker->x1Active != 0) + { + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x1SpriteId]); + sBlockStacker->x1Active = 0; + } + if (sBlockStacker->x2Active != 0) + { + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x2SpriteId]); + sBlockStacker->x2Active = 0; + } + if (sBlockStacker->x3Active != 0) + { + DestroySpriteAndFreeResources(&gSprites[sBlockStacker->x3SpriteId]); + sBlockStacker->x3Active = 0; + } + if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow != 6) && (sBlockStacker->CurrentRow != 7) && (sBlockStacker->CurrentRow != 8)) + { + //sBlockStacker->ToggleButtons = 1; + sBlockStacker->CurrentRow++; + PlaySE(SE_EGG_HATCH); + //SwapToBlock(); + sBlockStacker->state = STACKER_LEVEL_SETUP; + } + else if (sBlockStacker->BlocksLeft == 0) + { + sBlockStacker->GoDelay = 140; + PlayFanfare(MUS_TOO_BAD); + CreateGameOver(); + DestroyLives(); + sBlockStacker->state = STACKER_GAME_OVER; + } + else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 6)) + { + sBlockStacker->Winnings = 50; + sBlockStacker->CurrentRow++; + CreateKeepGoing(); + CreateYesNo(); + PlayFanfare(MUS_LEVEL_UP); + sBlockStacker->state = STACKER_KEEP_GOING; + } + else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 7)) + { + sBlockStacker->Winnings = 250; + sBlockStacker->CurrentRow++; + CreateKeepGoing(); + CreateYesNo(); + PlayFanfare(MUS_LEVEL_UP); + sBlockStacker->state = STACKER_KEEP_GOING; + } + else if ((sBlockStacker->BlocksLeft > 0) && (sBlockStacker->CurrentRow == 8)) + { + sBlockStacker->Winnings = 1000; + sBlockStacker->CurrentRow++; + PlayFanfare(MUS_OBTAIN_BADGE); + sBlockStacker->GoDelay = 330; + CreateWinner(); + sBlockStacker->state = STACKER_WIN; + } + } + break; + case STACKER_KEEP_GOING: + HandleInput2(); + break; + case STACKER_POST_DELAY: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + if (sBlockStacker->YesNo == 1) // No + { + VarSet(GAME_CORNER_VAR_WINNINGS, sBlockStacker->Winnings); + sBlockStacker->state = STACKER_START_EXIT; + } + else + { + PlaySE(SE_EGG_HATCH); + //SwapToBlock(); + sBlockStacker->state = STACKER_LEVEL_SETUP; + } + } + break; + case STACKER_WIN: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + VarSet(GAME_CORNER_VAR_WINNINGS, sBlockStacker->Winnings); + sBlockStacker->state = STACKER_START_EXIT; + } + break; + case STACKER_GAME_OVER: + sBlockStacker->GoDelay--; + if (sBlockStacker->GoDelay == 0) + { + sBlockStacker->state = STACKER_START_EXIT; + } + break; + case STACKER_START_EXIT: + StartExitBlockStacker(); + break; + case STACKER_EXIT: + ExitBlockStacker(); + break; + } } static void InitBlockStackerScreen(void) -{ +{ SetVBlankCallback(NULL); ResetAllBgsCoordinates(); ResetVramOamAndBgCntRegs(); ResetBgsAndClearDma3BusyFlags(0); ResetTempTileDataBuffers(); - InitBgsFromTemplates(0, sBlockStackerBGtemplates, ARRAY_COUNT(sBlockStackerBGtemplates)); - SetBgTilemapBuffer(BLOCKSTACKER_BG, AllocZeroed(BG_SCREEN_SIZE)); - DecompressAndLoadBgGfxUsingHeap(BLOCKSTACKER_BG, BlockStacker_BG_Img, 0x1140, 0, 0); - CopyToBgTilemapBuffer(BLOCKSTACKER_BG, BlockStacker_Tilemap, 0, 0); - ResetPaletteFade(); - LoadPalette(BlockStacker_BG_Pal, 0, sizeof(BlockStacker_BG_Pal)); - ResetSpriteData(); + InitBgsFromTemplates(0, sBlockStackerBGtemplates, ARRAY_COUNT(sBlockStackerBGtemplates)); + SetBgTilemapBuffer(BLOCKSTACKER_BG, AllocZeroed(BG_SCREEN_SIZE)); + DecompressAndLoadBgGfxUsingHeap(BLOCKSTACKER_BG, BlockStacker_BG_Img, 0x1140, 0, 0); + CopyToBgTilemapBuffer(BLOCKSTACKER_BG, BlockStacker_Tilemap, 0, 0); + ResetPaletteFade(); + LoadPalette(BlockStacker_BG_Pal, 0, sizeof(BlockStacker_BG_Pal)); + ResetSpriteData(); FreeAllSpritePalettes(); - LoadSpritePalettes(sSpritePalettes); - - CreateRhydon(); - CreateTitle(); - sBlockStacker->HighlightNum = 0; // 0-13 - sBlockStacker->HighlightRow = 0; // 0-7 - sBlockStacker->DestroyedHighlights = 0; - sBlockStacker->ToggleButtons = 0; - sBlockStacker->CurrentRow = 1; - sBlockStacker->BlocksLeft = 3; - sBlockStacker->LastLives = sBlockStacker->BlocksLeft; - - CopyBgTilemapBufferToVram(BLOCKSTACKER_BG); - //CopyBgTilemapBufferToVram(BLOCKSTACKER_TEXT_MENUS); + LoadSpritePalettes(sSpritePalettes); + + CreateRhydon(); + CreateTitle(); + sBlockStacker->HighlightNum = 0; // 0-13 + sBlockStacker->HighlightRow = 0; // 0-7 + sBlockStacker->DestroyedHighlights = 0; + sBlockStacker->ToggleButtons = 0; + sBlockStacker->CurrentRow = 1; + sBlockStacker->BlocksLeft = 3; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; + + CopyBgTilemapBufferToVram(BLOCKSTACKER_BG); + //CopyBgTilemapBufferToVram(BLOCKSTACKER_TEXT_MENUS); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON); ShowBg(BLOCKSTACKER_BG); - //ShowBg(BLOCKSTACKER_TEXT_MENUS); + //ShowBg(BLOCKSTACKER_TEXT_MENUS); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); SetVBlankCallback(BlockStackerVBlankCallback); SetMainCallback2(BlockStackerMainCallback); - PlaySE(SE_MUGSHOT); + PlaySE(SE_MUGSHOT); CreateTask(BlockStackerMain, 1); } From f664d07625865ace8d72fd53c40374ae924e61eb Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 13 May 2025 19:03:16 -0400 Subject: [PATCH 012/429] Derby pay fix --- src/derby.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/derby.c b/src/derby.c index 70a77ec37701..b5803b72cf7f 100644 --- a/src/derby.c +++ b/src/derby.c @@ -1875,7 +1875,7 @@ static void GetRacerSpeeds(u8 racerSpecies, u8 racer) sDerby->racerSpeedStart[racer] = sSpeed * (1 + (sDerby->racerCondition[racer] / 10.0f)); sDerby->racerSpeedRace[racer] = rSpeed * (1 + (sDerby->racerCondition[racer] / 10.0f)); - condition = sDerby->racerCondition[racer] + 1; + condition = sDerby->racerCondition[racer]; sDerby->racerSpeedPay[racer] = GetDerbySpeciesSpeedPay(racerSpecies, condition); } From 8646eeeeeac0e25dce88a52adcf9810cfc2bda11 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 13 May 2025 19:19:03 -0400 Subject: [PATCH 013/429] fix modern errors for flappy bird --- src/flappybird.c | 1119 ++++++++++++++++++++++------------------------ 1 file changed, 545 insertions(+), 574 deletions(-) diff --git a/src/flappybird.c b/src/flappybird.c index a773631fced6..4d2f0cfda4b0 100644 --- a/src/flappybird.c +++ b/src/flappybird.c @@ -47,15 +47,15 @@ #include "field_specials.h" enum { - FLAPPY_INIT, - - FLAPPY_INPUT, - FLAPPY_STOP, - FLAPPY_ROTATION, - FLAPPY_GAMEOVER, - FLAPPY_HISCORE, - FLAPPY_START_EXIT, - FLAPPY_EXIT, + FLAPPY_INIT, + + FLAPPY_INPUT, + FLAPPY_STOP, + FLAPPY_ROTATION, + FLAPPY_GAMEOVER, + FLAPPY_HISCORE, + FLAPPY_START_EXIT, + FLAPPY_EXIT, }; enum { @@ -79,57 +79,56 @@ enum { #define MAX_SPRITES_HISCORE 4 struct FlappyBird { - u8 state; - u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; - u8 ButterfreeSpriteId; - u8 ButterfreeHitboxSpriteId; - u16 scroll_fg_x_int; - u16 scroll_bg_x_int; - u16 scroll_fg_x_frac; - u16 scroll_bg_x_frac; - u16 pos_y; // Bird's vertical position + u8 state; + u8 CreditSpriteIds[MAX_SPRITES_CREDIT]; + u8 ButterfreeSpriteId; + u8 ButterfreeHitboxSpriteId; + u16 scroll_fg_x_int; + u16 scroll_bg_x_int; + u16 scroll_fg_x_frac; + u16 scroll_bg_x_frac; + u16 pos_y; // Bird's vertical position s16 speed_y; // Bird's vertical speed (falling speed) u8 flap_strength; // Strength of the flap (negative speed change when flap occurs) - u32 delay; - u16 bg2ScrollX; //0 -256 - u8 Obstacle1Id; - u8 Obstacle2Id; - u16 MAX_Y; - u16 MIN_Y; - u8 TrailSpriteId; - s16 TrailoffsetX, TrailoffsetY; - u16 timerDelay; - u8 isFlapping; - u8 SFX; - u8 timer; - u8 BorderSpriteId; - u8 DamageSpriteId; - u8 RotateToggle; - s16 DamageSpriteRotation; - u8 yUpdate; - s16 DamageSpriteY; - u8 jumping; - s16 jumpHeight; - s16 jumpSpeed; - s16 fallSpeed; - s16 originalY; - s16 velocity; - u8 BorderSprite2Id; - u8 StartSpriteId; - u8 GameOverSpriteId; - u8 OneSpriteId; - u8 TwoSpriteId; - u8 ThreeSpriteId; - u8 HiScoreSpriteId; - u32 Points; - u8 FlapSpriteId; - u8 ScoreSpriteId; - u8 Score2SpriteId; - u8 ScoreSpriteIds[MAX_SPRITES_HISCORE]; -}; + u32 delay; + u16 bg2ScrollX; //0 -256 + u8 Obstacle1Id; + u8 Obstacle2Id; + u16 MAX_Y; + u16 MIN_Y; + u8 TrailSpriteId; + s16 TrailoffsetX, TrailoffsetY; + u16 timerDelay; + u8 isFlapping; + u8 SFX; + u8 timer; + u8 BorderSpriteId; + u8 DamageSpriteId; + u8 RotateToggle; + s16 DamageSpriteRotation; + u8 yUpdate; + s16 DamageSpriteY; + u8 jumping; + s16 jumpHeight; + s16 jumpSpeed; + s16 fallSpeed; + s16 originalY; + s16 velocity; + u8 BorderSprite2Id; + u8 StartSpriteId; + u8 GameOverSpriteId; + u8 OneSpriteId; + u8 TwoSpriteId; + u8 ThreeSpriteId; + u8 HiScoreSpriteId; + u32 Points; + u8 FlapSpriteId; + u8 ScoreSpriteId; + u8 Score2SpriteId; + u8 ScoreSpriteIds[MAX_SPRITES_HISCORE]; +}; static EWRAM_DATA struct FlappyBird *sFlappy = NULL; -static EWRAM_DATA u8 sTextWindowId = 0; #define MAX_Y_POSITION 10 // The highest point the bird can reach (lower is higher on the screen) #define MIN_Y_POSITION 140 // The ground level (Y position of the ground) @@ -241,15 +240,15 @@ static const struct BgTemplate sFlappyBGtemplates[] = { }; static const struct WindowTemplate sFlappyWinTemplates[] = { - { + { .bg = FlappyBird_TEXT_MENUS, .tilemapLeft = 16, .tilemapTop = 9, .width = 14, .height = 2, .paletteNum = 0xF, - .baseBlock = 0x194, - }, + .baseBlock = 0x194, + }, DUMMY_WIN_TEMPLATE, }; @@ -279,12 +278,12 @@ static const struct WindowTemplate sFlappyWinTemplates[] = { static const struct SpritePalette sSpritePalettes[] = { - { .data = ButterfreePAL, .tag = BUTTERFREE_PALTAG }, - { .data = ButterfreeHitboxPAL, .tag = BUTTERFREE_HITBOX_PALTAG }, - { .data = TrailPAL, .tag = TRAIL_PALTAG }, - { .data = Arcade_FG_Pal, .tag = BORDER_PALTAG }, - { .data = TextPAL, .tag = TEXT_PALTAG }, - { .data = FlapPAL, .tag = FLAP_PALTAG }, + { .data = ButterfreePAL, .tag = BUTTERFREE_PALTAG }, + { .data = ButterfreeHitboxPAL, .tag = BUTTERFREE_HITBOX_PALTAG }, + { .data = TrailPAL, .tag = TRAIL_PALTAG }, + { .data = Arcade_FG_Pal, .tag = BORDER_PALTAG }, + { .data = TextPAL, .tag = TEXT_PALTAG }, + { .data = FlapPAL, .tag = FLAP_PALTAG }, {} }; @@ -338,7 +337,7 @@ static const struct OamData sOamData_Score = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -377,7 +376,7 @@ static const struct OamData sOamData_Flap = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x8), .size = SPRITE_SIZE(32x8), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -440,7 +439,7 @@ static const struct OamData sOamData_Text = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -534,7 +533,7 @@ static const struct OamData sOamData_Damage = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -553,8 +552,8 @@ static const union AnimCmd sDamageAnimCmd_1[] = }; static const union AnimCmd *const sDamageAnimCmds[] = { - sDamageAnimCmd_0, - sDamageAnimCmd_1, + sDamageAnimCmd_0, + sDamageAnimCmd_1, }; static const struct SpriteTemplate sSpriteTemplate_Damage = @@ -581,7 +580,7 @@ static const struct OamData sOamData_Border = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x32), .size = SPRITE_SIZE(64x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -627,7 +626,7 @@ static const struct OamData sOamData_Trail = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(32x32), .size = SPRITE_SIZE(32x32), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -635,12 +634,12 @@ static const union AnimCmd sTrailAnimCmd_0[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(16, 5), - ANIMCMD_FRAME(32, 5), - ANIMCMD_FRAME(48, 5), - ANIMCMD_FRAME(64, 5), - ANIMCMD_FRAME(80, 5), - ANIMCMD_FRAME(96, 5), - ANIMCMD_FRAME(112, 5), + ANIMCMD_FRAME(32, 5), + ANIMCMD_FRAME(48, 5), + ANIMCMD_FRAME(64, 5), + ANIMCMD_FRAME(80, 5), + ANIMCMD_FRAME(96, 5), + ANIMCMD_FRAME(112, 5), ANIMCMD_JUMP(0) // Loop back to the first frame (Frame 0) }; @@ -672,13 +671,13 @@ static const struct OamData sOamData_Butterfree = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(64x64), .size = SPRITE_SIZE(64x64), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; static const union AnimCmd sButterfreeAnimCmd_0[] = { - ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 1), ANIMCMD_END }; @@ -686,13 +685,13 @@ static const union AnimCmd sButterfreeAnimCmd_1[] = { ANIMCMD_FRAME(64, 10), ANIMCMD_FRAME(128, 10), - ANIMCMD_FRAME(64, 10), - ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(64, 10), + ANIMCMD_FRAME(0, 10), ANIMCMD_END }; static const union AnimCmd *const sButterfreeAnimCmds[] = { - sButterfreeAnimCmd_0, + sButterfreeAnimCmd_0, sButterfreeAnimCmd_1, }; @@ -720,7 +719,7 @@ static const struct OamData sOamData_Butterfree_Hitbox = .objMode = ST_OAM_OBJ_NORMAL, .shape = SPRITE_SHAPE(16x16), .size = SPRITE_SIZE(16x16), - .tileNum = 0, + .tileNum = 0, .priority = 0, }; @@ -737,14 +736,13 @@ static const struct SpriteTemplate sSpriteTemplate_Butterfree_Hitbox = void StartFlappyBird(void) { - u8 taskId = 0; sFlappy = AllocZeroed(sizeof(struct FlappyBird)); - taskId = CreateTask(FadeToFlappyBirdScreen, 0); + CreateTask(FadeToFlappyBirdScreen, 0); } static void FadeToFlappyBirdScreen(u8 taskId) { - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].data[0]) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -850,7 +848,7 @@ static void SetCreditDigits(u16 num) num = num % d; d = d / 10; } - + BuildOamBuffer(); } @@ -860,14 +858,13 @@ static void CreateCreditSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); } for (i = 0; i < 4; i++) { sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 6 + 72, 144, 0); - gSprites[sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; + gSprites[sFlappy->CreditSpriteIds[i + SPR_CREDIT_DIGITS]].oam.priority = 0; } } @@ -898,7 +895,7 @@ static void SetScoreDigits(u16 num) num = num % d; d = d / 10; } - + BuildOamBuffer(); } @@ -908,173 +905,143 @@ static void CreateHiScoreSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_CreditsInterface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_CreditsInterface[i]); } for (i = 0; i < 4; i++) { sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS] = CreateSprite(&sSpriteTemplate_CreditDigit, i * 6 + 152, 144, 0); - gSprites[sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS]].oam.priority = 0; + gSprites[sFlappy->ScoreSpriteIds[i + SPR_HISCORE_DIGITS]].oam.priority = 0; } } static void CreateScore(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Score); - - sFlappy->ScoreSpriteId = CreateSprite(&sSpriteTemplate_Score, 80, 138, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Score); + + sFlappy->ScoreSpriteId = CreateSprite(&sSpriteTemplate_Score, 80, 138, 0); } static void CreateScore2(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Score2); - - sFlappy->Score2SpriteId = CreateSprite(&sSpriteTemplate_Score2, 160, 138, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Score2); + + sFlappy->Score2SpriteId = CreateSprite(&sSpriteTemplate_Score2, 160, 138, 0); } static void CreateFlap(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Flap); - - sFlappy->FlapSpriteId = CreateSprite(&sSpriteTemplate_Flap, 204, 20, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Flap); + + sFlappy->FlapSpriteId = CreateSprite(&sSpriteTemplate_Flap, 204, 20, 0); } static void CreateOne(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_One); - - sFlappy->OneSpriteId = CreateSprite(&sSpriteTemplate_One, 120, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_One); + + sFlappy->OneSpriteId = CreateSprite(&sSpriteTemplate_One, 120, 80, 0); } static void CreateTwo(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Two); - - sFlappy->TwoSpriteId = CreateSprite(&sSpriteTemplate_Two, 120, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Two); + + sFlappy->TwoSpriteId = CreateSprite(&sSpriteTemplate_Two, 120, 80, 0); } static void CreateThree(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Three); - - sFlappy->ThreeSpriteId = CreateSprite(&sSpriteTemplate_Three, 120, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Three); + + sFlappy->ThreeSpriteId = CreateSprite(&sSpriteTemplate_Three, 120, 80, 0); } static void CreateStart(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Start); - - sFlappy->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 120, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Start); + + sFlappy->StartSpriteId = CreateSprite(&sSpriteTemplate_Start, 120, 80, 0); } static void CreateHiScore(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_HiScore); - - sFlappy->HiScoreSpriteId = CreateSprite(&sSpriteTemplate_HiScore, 120, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_HiScore); + + sFlappy->HiScoreSpriteId = CreateSprite(&sSpriteTemplate_HiScore, 120, 80, 0); } static void CreateGameOver(void) { - struct SpriteSheet s; - - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); - - sFlappy->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 120, 80, 0); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_GameOver); + + sFlappy->GameOverSpriteId = CreateSprite(&sSpriteTemplate_GameOver, 120, 80, 0); } static void CreateHitbox(void) { - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Butterfree_Hitbox); - - sFlappy->ButterfreeHitboxSpriteId = CreateSprite(&sSpriteTemplate_Butterfree_Hitbox, 40, 64, 0); + LoadCompressedSpriteSheet(&sSpriteSheet_Butterfree_Hitbox); + + sFlappy->ButterfreeHitboxSpriteId = CreateSprite(&sSpriteTemplate_Butterfree_Hitbox, 40, 64, 0); } static void CreateBorder(void) { - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Border); - - sFlappy->BorderSpriteId = CreateSprite(&sSpriteTemplate_Border, 32, 16, 0); + LoadCompressedSpriteSheet(&sSpriteSheet_Border); + + sFlappy->BorderSpriteId = CreateSprite(&sSpriteTemplate_Border, 32, 16, 0); } static void CreateBorder2(void) { - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Border_2); - - sFlappy->BorderSprite2Id = CreateSprite(&sSpriteTemplate_Border_2, 32, 16 + 128, 0); + LoadCompressedSpriteSheet(&sSpriteSheet_Border_2); + + sFlappy->BorderSprite2Id = CreateSprite(&sSpriteTemplate_Border_2, 32, 16 + 128, 0); } static void CreateButterfree(void) { - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Butterfree); - - sFlappy->ButterfreeSpriteId = CreateSprite(&sSpriteTemplate_Butterfree, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5, gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6, 1); + LoadCompressedSpriteSheet(&sSpriteSheet_Butterfree); + + sFlappy->ButterfreeSpriteId = CreateSprite(&sSpriteTemplate_Butterfree, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5, gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6, 1); } static void CreateDamage(void) { - struct SpriteSheet s; - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Damage); - - sFlappy->DamageSpriteId = CreateSprite(&sSpriteTemplate_Damage, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5, gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6, 1); + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sSpriteSheet_Damage); + + sFlappy->DamageSpriteId = CreateSprite(&sSpriteTemplate_Damage, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5, gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6, 1); } static void CreateTrail(void) { - struct SpriteSheet s; - LoadCompressedSpriteSheet(&sSpriteSheet_Trail); - - sFlappy->TrailSpriteId = CreateSprite(&sSpriteTemplate_Trail, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 16, gSprites[sFlappy->ButterfreeHitboxSpriteId].y, 3); + LoadCompressedSpriteSheet(&sSpriteSheet_Trail); + + sFlappy->TrailSpriteId = CreateSprite(&sSpriteTemplate_Trail, gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 16, gSprites[sFlappy->ButterfreeHitboxSpriteId].y, 3); } static void SpriteCB_FlappyDamage(struct Sprite *sprite) { - s16 sine; - s16 cosine; s16 rotation; struct ObjAffineSrcData affine; struct OamMatrix matrix; sFlappy->DamageSpriteRotation += 8; - sFlappy->DamageSpriteRotation %= 360; + sFlappy->DamageSpriteRotation %= 360; rotation = sFlappy->DamageSpriteRotation; - sine = Sin2(rotation); - cosine = Cos2(rotation); - affine.xScale = 256; affine.yScale = 256; affine.rotation = rotation * 256; @@ -1093,28 +1060,30 @@ static void ApplyGravity(void) sFlappy->pos_y += sFlappy->speed_y; - if (sFlappy->pos_y > sFlappy->MIN_Y) { + if (sFlappy->pos_y > sFlappy->MIN_Y) + { sFlappy->speed_y = 0; - PlayBGM(MUS_NONE); - PlaySE(SE_SUPER_EFFECTIVE); - DestroySpriteAndFreeResources(&gSprites[sFlappy->TrailSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sFlappy->ButterfreeSpriteId]); - CreateDamage(); - sFlappy->timerDelay = 15; - sFlappy->yUpdate = 4; - sFlappy->state = FLAPPY_STOP; + PlayBGM(MUS_NONE); + PlaySE(SE_SUPER_EFFECTIVE); + DestroySpriteAndFreeResources(&gSprites[sFlappy->TrailSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sFlappy->ButterfreeSpriteId]); + CreateDamage(); + sFlappy->timerDelay = 15; + sFlappy->yUpdate = 4; + sFlappy->state = FLAPPY_STOP; } - if (sFlappy->pos_y < sFlappy->MAX_Y) { + if (sFlappy->pos_y < sFlappy->MAX_Y) + { sFlappy->speed_y = 0; - PlayBGM(MUS_NONE); - PlaySE(SE_SUPER_EFFECTIVE); - DestroySpriteAndFreeResources(&gSprites[sFlappy->TrailSpriteId]); - DestroySpriteAndFreeResources(&gSprites[sFlappy->ButterfreeSpriteId]); - CreateDamage(); - sFlappy->timerDelay = 15; - sFlappy->yUpdate = 4; - sFlappy->state = FLAPPY_STOP; + PlayBGM(MUS_NONE); + PlaySE(SE_SUPER_EFFECTIVE); + DestroySpriteAndFreeResources(&gSprites[sFlappy->TrailSpriteId]); + DestroySpriteAndFreeResources(&gSprites[sFlappy->ButterfreeSpriteId]); + CreateDamage(); + sFlappy->timerDelay = 15; + sFlappy->yUpdate = 4; + sFlappy->state = FLAPPY_STOP; } if (sFlappy->speed_y > 4) { @@ -1124,14 +1093,16 @@ static void ApplyGravity(void) static void Flap(void) { - PlaySE(SE_M_WING_ATTACK); - if (gSprites[sFlappy->ButterfreeSpriteId].animNum == 0) { - gSprites[sFlappy->ButterfreeSpriteId].animNum = 1; - } - else { - gSprites[sFlappy->ButterfreeSpriteId].animCmdIndex = 0; - gSprites[sFlappy->ButterfreeSpriteId].animPaused = FALSE; - } + PlaySE(SE_M_WING_ATTACK); + if (gSprites[sFlappy->ButterfreeSpriteId].animNum == 0) + { + gSprites[sFlappy->ButterfreeSpriteId].animNum = 1; + } + else + { + gSprites[sFlappy->ButterfreeSpriteId].animCmdIndex = 0; + gSprites[sFlappy->ButterfreeSpriteId].animPaused = FALSE; + } sFlappy->speed_y = FLAP_STRENGTH; } @@ -1256,9 +1227,9 @@ void ChangeObstacle1() { int startX = 12; int startY = 0; - int y; - int x; - u16 tilemapIndex; + int y; + int x; + u16 tilemapIndex; for (y = 0; y < 20; ++y) { for (x = 0; x < 4; ++x) { @@ -1390,9 +1361,9 @@ void ChangeObstacle2() { int startX = 28; int startY = 0; - int y; - int x; - u16 tilemapIndex; + int y; + int x; + u16 tilemapIndex; for (y = 0; y < 20; ++y) { for (x = 0; x < 4; ++x) { @@ -1416,7 +1387,7 @@ void UpdateTrailSprite(s16 butterfreeX, s16 butterfreeY) { if (sFlappy->speed_y > 0) { sFlappy->TrailoffsetY = sFlappy->TrailoffsetY + ((butterfreeY - 8) - sFlappy->TrailoffsetY) / SMOOTHING_FACTOR; - sFlappy->isFlapping = 0; + sFlappy->isFlapping = 0; } else { sFlappy->TrailoffsetY = sFlappy->TrailoffsetY + ((butterfreeY - 8) - sFlappy->TrailoffsetY) / SMOOTHING_FACTOR; } @@ -1427,346 +1398,346 @@ void UpdateTrailSprite(s16 butterfreeX, s16 butterfreeY) { static void SoundEffect(u8 sfx) { - switch (sfx) - { - case 0: - PlaySE(SE_NOTE_C); - sFlappy->SFX++; - break; - case 1: - PlaySE(SE_NOTE_D); - sFlappy->SFX++; - break; - case 2: - PlaySE(SE_NOTE_E); - sFlappy->SFX++; - break; - case 3: - PlaySE(SE_NOTE_F); - sFlappy->SFX++; - break; - case 4: - PlaySE(SE_NOTE_G); - sFlappy->SFX++; - break; - case 5: - PlaySE(SE_NOTE_A); - sFlappy->SFX++; - break; - case 6: - PlaySE(SE_NOTE_B); - sFlappy->SFX++; - break; - case 7: - PlaySE(SE_NOTE_C_HIGH); - sFlappy->SFX = 0; - break; - } + switch (sfx) + { + case 0: + PlaySE(SE_NOTE_C); + sFlappy->SFX++; + break; + case 1: + PlaySE(SE_NOTE_D); + sFlappy->SFX++; + break; + case 2: + PlaySE(SE_NOTE_E); + sFlappy->SFX++; + break; + case 3: + PlaySE(SE_NOTE_F); + sFlappy->SFX++; + break; + case 4: + PlaySE(SE_NOTE_G); + sFlappy->SFX++; + break; + case 5: + PlaySE(SE_NOTE_A); + sFlappy->SFX++; + break; + case 6: + PlaySE(SE_NOTE_B); + sFlappy->SFX++; + break; + case 7: + PlaySE(SE_NOTE_C_HIGH); + sFlappy->SFX = 0; + break; + } } static void FlappyBirdMain(u8 taskId) { - - switch (sFlappy->state) - { - case FLAPPY_INIT: - if ((sFlappy->timer == 5) && (sFlappy->timerDelay == 75)) // Butterfree - { - PlayCry_Normal(SPECIES_BUTTERFREE, 0); - gSprites[sFlappy->ButterfreeSpriteId].animNum = 1; - sFlappy->timerDelay--; - } - if ((sFlappy->timer == 4) && (sFlappy->timerDelay == 60)) // 3 - { - CreateThree(); - PlaySE(SE_CONTEST_PLACE); - sFlappy->timerDelay--; - } - else if ((sFlappy->timer == 3) && (sFlappy->timerDelay == 60)) // 2 - { - DestroySpriteAndFreeResources(&gSprites[sFlappy->ThreeSpriteId]); - CreateTwo(); - PlaySE(SE_CONTEST_PLACE); - sFlappy->timerDelay--; - } - else if ((sFlappy->timer == 2) && (sFlappy->timerDelay == 60)) // 1 - { - DestroySpriteAndFreeResources(&gSprites[sFlappy->TwoSpriteId]); - CreateOne(); - PlaySE(SE_CONTEST_PLACE); - sFlappy->timerDelay--; - } - else if ((sFlappy->timer == 1) && (sFlappy->timerDelay == 60)) // Go - { - DestroySpriteAndFreeResources(&gSprites[sFlappy->OneSpriteId]); - CreateStart(); - PlaySE(SE_POKENAV_ON); - sFlappy->timerDelay--; - } - else if ((sFlappy->timer > 0) && (sFlappy->timerDelay > 0)) - { - sFlappy->timerDelay--; - } - else if ((sFlappy->timer > 1) && (sFlappy->timerDelay == 0)) - { - sFlappy->timer--; - sFlappy->timerDelay = 60; - } - else if ((sFlappy->timer == 1) && (sFlappy->timerDelay == 0)) - { - sFlappy->timer--; - } - else if ((sFlappy->timer == 0) && (sFlappy->timerDelay == 0)) - { - DestroySpriteAndFreeResources(&gSprites[sFlappy->StartSpriteId]); - gSprites[sFlappy->TrailSpriteId].invisible = FALSE; - PlayBGM(MUS_RG_CELADON); - sFlappy->state = FLAPPY_INPUT; - } - break; - case FLAPPY_INPUT: - + + switch (sFlappy->state) + { + case FLAPPY_INIT: + if ((sFlappy->timer == 5) && (sFlappy->timerDelay == 75)) // Butterfree + { + PlayCry_Normal(SPECIES_BUTTERFREE, 0); + gSprites[sFlappy->ButterfreeSpriteId].animNum = 1; + sFlappy->timerDelay--; + } + if ((sFlappy->timer == 4) && (sFlappy->timerDelay == 60)) // 3 + { + CreateThree(); + PlaySE(SE_CONTEST_PLACE); + sFlappy->timerDelay--; + } + else if ((sFlappy->timer == 3) && (sFlappy->timerDelay == 60)) // 2 + { + DestroySpriteAndFreeResources(&gSprites[sFlappy->ThreeSpriteId]); + CreateTwo(); + PlaySE(SE_CONTEST_PLACE); + sFlappy->timerDelay--; + } + else if ((sFlappy->timer == 2) && (sFlappy->timerDelay == 60)) // 1 + { + DestroySpriteAndFreeResources(&gSprites[sFlappy->TwoSpriteId]); + CreateOne(); + PlaySE(SE_CONTEST_PLACE); + sFlappy->timerDelay--; + } + else if ((sFlappy->timer == 1) && (sFlappy->timerDelay == 60)) // Go + { + DestroySpriteAndFreeResources(&gSprites[sFlappy->OneSpriteId]); + CreateStart(); + PlaySE(SE_POKENAV_ON); + sFlappy->timerDelay--; + } + else if ((sFlappy->timer > 0) && (sFlappy->timerDelay > 0)) + { + sFlappy->timerDelay--; + } + else if ((sFlappy->timer > 1) && (sFlappy->timerDelay == 0)) + { + sFlappy->timer--; + sFlappy->timerDelay = 60; + } + else if ((sFlappy->timer == 1) && (sFlappy->timerDelay == 0)) + { + sFlappy->timer--; + } + else if ((sFlappy->timer == 0) && (sFlappy->timerDelay == 0)) + { + DestroySpriteAndFreeResources(&gSprites[sFlappy->StartSpriteId]); + gSprites[sFlappy->TrailSpriteId].invisible = FALSE; + PlayBGM(MUS_RG_CELADON); + sFlappy->state = FLAPPY_INPUT; + } + break; + case FLAPPY_INPUT: + ScrollX(); - sFlappy->bg2ScrollX = sFlappy->scroll_fg_x_int; - - if (sFlappy->bg2ScrollX == 126) // Change Obstacle 1 - { - sFlappy->Obstacle1Id = (Random() % 5) + 1; - ChangeObstacle1(); - } - - if (sFlappy->bg2ScrollX == 252) // Change Obstacle 2 - { - sFlappy->Obstacle2Id = (Random() % 5) + 1; - ChangeObstacle2(); - } - - if ((sFlappy->bg2ScrollX > 48) && (sFlappy->bg2ScrollX < 97)) // Within Collision Range - { - if (sFlappy->Obstacle1Id == 1) - { - sFlappy->MAX_Y = 26; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else if (sFlappy->Obstacle1Id == 2) - { - sFlappy->MAX_Y = 34; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else if (sFlappy->Obstacle1Id == 3) - { - sFlappy->MAX_Y = 42; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else if (sFlappy->Obstacle1Id == 4) - { - sFlappy->MAX_Y = 50; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else if (sFlappy->Obstacle1Id == 5) - { - sFlappy->MAX_Y = 58; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else - { - sFlappy->MAX_Y = MAX_Y_POSITION; - sFlappy->MIN_Y = MIN_Y_POSITION; - } - } - else if ((sFlappy->bg2ScrollX > 176) && (sFlappy->bg2ScrollX < 224)) // Within Collision Range 2 - { - if (sFlappy->Obstacle2Id == 1) - { - sFlappy->MAX_Y = 26; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else if (sFlappy->Obstacle2Id == 2) - { - sFlappy->MAX_Y = 34; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else if (sFlappy->Obstacle2Id == 3) - { - sFlappy->MAX_Y = 42; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else if (sFlappy->Obstacle2Id == 4) - { - sFlappy->MAX_Y = 50; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else if (sFlappy->Obstacle2Id == 5) - { - sFlappy->MAX_Y = 58; - sFlappy->MIN_Y = sFlappy->MAX_Y + 42; - } - else - { - sFlappy->MAX_Y = MAX_Y_POSITION; - sFlappy->MIN_Y = MIN_Y_POSITION; - } - } - else - { - sFlappy->MAX_Y = MAX_Y_POSITION; - sFlappy->MIN_Y = MIN_Y_POSITION; - } + sFlappy->bg2ScrollX = sFlappy->scroll_fg_x_int; + + if (sFlappy->bg2ScrollX == 126) // Change Obstacle 1 + { + sFlappy->Obstacle1Id = (Random() % 5) + 1; + ChangeObstacle1(); + } + + if (sFlappy->bg2ScrollX == 252) // Change Obstacle 2 + { + sFlappy->Obstacle2Id = (Random() % 5) + 1; + ChangeObstacle2(); + } + + if ((sFlappy->bg2ScrollX > 48) && (sFlappy->bg2ScrollX < 97)) // Within Collision Range + { + if (sFlappy->Obstacle1Id == 1) + { + sFlappy->MAX_Y = 26; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle1Id == 2) + { + sFlappy->MAX_Y = 34; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle1Id == 3) + { + sFlappy->MAX_Y = 42; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle1Id == 4) + { + sFlappy->MAX_Y = 50; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle1Id == 5) + { + sFlappy->MAX_Y = 58; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else + { + sFlappy->MAX_Y = MAX_Y_POSITION; + sFlappy->MIN_Y = MIN_Y_POSITION; + } + } + else if ((sFlappy->bg2ScrollX > 176) && (sFlappy->bg2ScrollX < 224)) // Within Collision Range 2 + { + if (sFlappy->Obstacle2Id == 1) + { + sFlappy->MAX_Y = 26; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle2Id == 2) + { + sFlappy->MAX_Y = 34; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle2Id == 3) + { + sFlappy->MAX_Y = 42; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle2Id == 4) + { + sFlappy->MAX_Y = 50; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else if (sFlappy->Obstacle2Id == 5) + { + sFlappy->MAX_Y = 58; + sFlappy->MIN_Y = sFlappy->MAX_Y + 42; + } + else + { + sFlappy->MAX_Y = MAX_Y_POSITION; + sFlappy->MIN_Y = MIN_Y_POSITION; + } + } + else + { + sFlappy->MAX_Y = MAX_Y_POSITION; + sFlappy->MIN_Y = MIN_Y_POSITION; + } if (gMain.newKeys & A_BUTTON) { Flap(); } - if ((sFlappy->bg2ScrollX == 225) || ((sFlappy->bg2ScrollX == 98) && (sFlappy->Obstacle1Id != 0))) // Point - { - SoundEffect(sFlappy->SFX); - if (VarGet(GAME_CORNER_VAR_WINNINGS) < 9998) { - VarSet(GAME_CORNER_VAR_WINNINGS, VarGet(GAME_CORNER_VAR_WINNINGS) + 2); } - else - { - VarSet(GAME_CORNER_VAR_WINNINGS, 9999); - } - if (sFlappy->Points < 9999) { - sFlappy->Points++; } - SetCreditDigits(sFlappy->Points); - } + if ((sFlappy->bg2ScrollX == 225) || ((sFlappy->bg2ScrollX == 98) && (sFlappy->Obstacle1Id != 0))) // Point + { + SoundEffect(sFlappy->SFX); + if (VarGet(GAME_CORNER_VAR_WINNINGS) < 9998) { + VarSet(GAME_CORNER_VAR_WINNINGS, VarGet(GAME_CORNER_VAR_WINNINGS) + 2); } + else + { + VarSet(GAME_CORNER_VAR_WINNINGS, 9999); + } + if (sFlappy->Points < 9999) { + sFlappy->Points++; } + SetCreditDigits(sFlappy->Points); + } gSprites[sFlappy->ButterfreeHitboxSpriteId].y = sFlappy->pos_y; - gSprites[sFlappy->ButterfreeSpriteId].x = gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5; - gSprites[sFlappy->ButterfreeSpriteId].y = gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6; + gSprites[sFlappy->ButterfreeSpriteId].x = gSprites[sFlappy->ButterfreeHitboxSpriteId].x - 5; + gSprites[sFlappy->ButterfreeSpriteId].y = gSprites[sFlappy->ButterfreeHitboxSpriteId].y - 6; if (sFlappy->delay == 0) { - UpdateTrailSprite(gSprites[sFlappy->ButterfreeHitboxSpriteId].x, gSprites[sFlappy->ButterfreeHitboxSpriteId].y); - ApplyGravity(); - sFlappy->delay = 1; - } - else { - sFlappy->delay--; - } + UpdateTrailSprite(gSprites[sFlappy->ButterfreeHitboxSpriteId].x, gSprites[sFlappy->ButterfreeHitboxSpriteId].y); + ApplyGravity(); + sFlappy->delay = 1; + } + else { + sFlappy->delay--; + } + + break; + case FLAPPY_STOP: + if (sFlappy->timerDelay > 0) + { + if (sFlappy->yUpdate == 4) + { + gSprites[sFlappy->DamageSpriteId].y -= 1; + sFlappy->yUpdate = 2; + } + else if (sFlappy->yUpdate == 2) + { + gSprites[sFlappy->DamageSpriteId].y += sFlappy->yUpdate; + sFlappy->yUpdate = 12; + } + else if (sFlappy->yUpdate == 12) + { + gSprites[sFlappy->DamageSpriteId].y -= 2; + sFlappy->yUpdate = 2; + } + sFlappy->timerDelay--; + } + else if ((sFlappy->timerDelay == 0) && (sFlappy->RotateToggle == 0)) + { + gSprites[sFlappy->DamageSpriteId].animNum = 1; + gSprites[sFlappy->DamageSpriteId].animCmdIndex = 0; + sFlappy->RotateToggle = 1; + } + else if ((sFlappy->timerDelay == 0) && (sFlappy->RotateToggle == 1)) + { + sFlappy->DamageSpriteY = gSprites[sFlappy->DamageSpriteId].y; + gSprites[sFlappy->DamageSpriteId].callback = SpriteCB_FlappyDamage; + AnimateSprites(); + PlaySE(SE_FAINT); + sFlappy->state = FLAPPY_ROTATION; + } + break; + case FLAPPY_ROTATION: + if ((sFlappy->jumping != 1) && (sFlappy->jumpHeight == 0)) { + sFlappy->jumping = 1; + sFlappy->jumpHeight = 20; + + sFlappy->jumpSpeed = 0; + sFlappy->fallSpeed = 0; + + sFlappy->velocity = 0; + + sFlappy->originalY = sFlappy->DamageSpriteY; + } + if (sFlappy->jumping == 1) { + sFlappy->velocity += 64; + + sFlappy->DamageSpriteY -= sFlappy->velocity / 256; + + if (sFlappy->DamageSpriteY < 0) { + sFlappy->DamageSpriteY = 0; + sFlappy->jumping = 0; + sFlappy->velocity = 0; + } + + if (sFlappy->DamageSpriteY <= (sFlappy->originalY - sFlappy->jumpHeight) && sFlappy->DamageSpriteY > 0) { + sFlappy->jumping = 0; + sFlappy->velocity = 0; + } + } + + else { + sFlappy->fallSpeed += 128; + + sFlappy->DamageSpriteY += sFlappy->fallSpeed / 256; + + if (sFlappy->DamageSpriteY > DISPLAY_HEIGHT + 15) { + sFlappy->DamageSpriteY = DISPLAY_HEIGHT + 16; + DestroySpriteAndFreeResources(&gSprites[sFlappy->DamageSpriteId]); + sFlappy->timerDelay = 140; + PlayFanfare(MUS_TOO_BAD); + CreateGameOver(); + sFlappy->state = FLAPPY_GAMEOVER; + } + } + + gSprites[sFlappy->DamageSpriteId].y = sFlappy->DamageSpriteY; + + break; + + case FLAPPY_GAMEOVER: + gSprites[sFlappy->GameOverSpriteId].x = 120; + gSprites[sFlappy->GameOverSpriteId].y = 80; + if (sFlappy->timerDelay == 0) + { + if (sFlappy->Points > VarGet(FLAPPY_VAR_HIGH_SCORE)) + { + PlayFanfare(MUS_LEVEL_UP); + VarSet(FLAPPY_VAR_HIGH_SCORE, sFlappy->Points); + sFlappy->timerDelay = 100; + DestroySpriteAndFreeResources(&gSprites[sFlappy->GameOverSpriteId]); + CreateHiScore(); + sFlappy->state = FLAPPY_HISCORE; + } + else + { + StartExitFlappyBird(); + } + } + else + { + sFlappy->timerDelay--; + } break; - case FLAPPY_STOP: - if (sFlappy->timerDelay > 0) - { - if (sFlappy->yUpdate == 4) - { - gSprites[sFlappy->DamageSpriteId].y -= 1; - sFlappy->yUpdate = 2; - } - else if (sFlappy->yUpdate == 2) - { - gSprites[sFlappy->DamageSpriteId].y += sFlappy->yUpdate; - sFlappy->yUpdate = 12; - } - else if (sFlappy->yUpdate == 12) - { - gSprites[sFlappy->DamageSpriteId].y -= 2; - sFlappy->yUpdate = 2; - } - sFlappy->timerDelay--; - } - else if ((sFlappy->timerDelay == 0) && (sFlappy->RotateToggle == 0)) - { - gSprites[sFlappy->DamageSpriteId].animNum = 1; - gSprites[sFlappy->DamageSpriteId].animCmdIndex = 0; - sFlappy->RotateToggle = 1; - } - else if ((sFlappy->timerDelay == 0) && (sFlappy->RotateToggle == 1)) - { - sFlappy->DamageSpriteY = gSprites[sFlappy->DamageSpriteId].y; - gSprites[sFlappy->DamageSpriteId].callback = SpriteCB_FlappyDamage; - AnimateSprites(); - PlaySE(SE_FAINT); - sFlappy->state = FLAPPY_ROTATION; - } - break; - case FLAPPY_ROTATION: - if ((sFlappy->jumping != 1) && (sFlappy->jumpHeight == 0)) { - sFlappy->jumping = 1; - sFlappy->jumpHeight = 20; - - sFlappy->jumpSpeed = 0; - sFlappy->fallSpeed = 0; - - sFlappy->velocity = 0; - - sFlappy->originalY = sFlappy->DamageSpriteY; - } - - if (sFlappy->jumping == 1) { - sFlappy->velocity += 64; - - sFlappy->DamageSpriteY -= sFlappy->velocity / 256; - - if (sFlappy->DamageSpriteY < 0) { - sFlappy->DamageSpriteY = 0; - sFlappy->jumping = 0; - sFlappy->velocity = 0; - } - - if (sFlappy->DamageSpriteY <= (sFlappy->originalY - sFlappy->jumpHeight) && sFlappy->DamageSpriteY > 0) { - sFlappy->jumping = 0; - sFlappy->velocity = 0; - } - } - - else { - sFlappy->fallSpeed += 128; - - sFlappy->DamageSpriteY += sFlappy->fallSpeed / 256; - - if (sFlappy->DamageSpriteY > DISPLAY_HEIGHT + 15) { - sFlappy->DamageSpriteY = DISPLAY_HEIGHT + 16; - DestroySpriteAndFreeResources(&gSprites[sFlappy->DamageSpriteId]); - sFlappy->timerDelay = 140; - PlayFanfare(MUS_TOO_BAD); - CreateGameOver(); - sFlappy->state = FLAPPY_GAMEOVER; - } - } - - gSprites[sFlappy->DamageSpriteId].y = sFlappy->DamageSpriteY; - - break; - - case FLAPPY_GAMEOVER: - gSprites[sFlappy->GameOverSpriteId].x = 120; - gSprites[sFlappy->GameOverSpriteId].y = 80; - if (sFlappy->timerDelay == 0) - { - if (sFlappy->Points > VarGet(FLAPPY_VAR_HIGH_SCORE)) - { - PlayFanfare(MUS_LEVEL_UP); - VarSet(FLAPPY_VAR_HIGH_SCORE, sFlappy->Points); - sFlappy->timerDelay = 100; - DestroySpriteAndFreeResources(&gSprites[sFlappy->GameOverSpriteId]); - CreateHiScore(); - sFlappy->state = FLAPPY_HISCORE; - } - else - { - StartExitFlappyBird(); - } - } - else - { - sFlappy->timerDelay--; - } - break; - case FLAPPY_HISCORE: - if (sFlappy->timerDelay == 0) - { - StartExitFlappyBird(); - } - else - { - sFlappy->timerDelay--; - } - break; - case FLAPPY_EXIT: - ExitFlappyBird(); - break; - } + case FLAPPY_HISCORE: + if (sFlappy->timerDelay == 0) + { + StartExitFlappyBird(); + } + else + { + sFlappy->timerDelay--; + } + break; + case FLAPPY_EXIT: + ExitFlappyBird(); + break; + } } static void InitFlappyBirdScreen(void) @@ -1784,55 +1755,55 @@ static void InitFlappyBirdScreen(void) SetBgTilemapBuffer(Arcade_BG, AllocZeroed(BG_SCREEN_SIZE)); //SetBgTilemapBuffer(FlappyBird_TEXT_MENUS, AllocZeroed(BG_SCREEN_SIZE)); - ResetPaletteFade(); + ResetPaletteFade(); - DecompressAndLoadBgGfxUsingHeap(Arcade_BG, Arcade_FG_Img, 0x600, 0, 0); - CopyToBgTilemapBuffer(Arcade_BG, Arcade_FG_Tilemap, 0, 0); - LoadPalette(Arcade_FG_Pal, 0x20, sizeof(Arcade_FG_Pal)); - CopyBgTilemapBufferToVram(Arcade_BG); + DecompressAndLoadBgGfxUsingHeap(Arcade_BG, Arcade_FG_Img, 0x600, 0, 0); + CopyToBgTilemapBuffer(Arcade_BG, Arcade_FG_Tilemap, 0, 0); + LoadPalette(Arcade_FG_Pal, 0x20, sizeof(Arcade_FG_Pal)); + CopyBgTilemapBufferToVram(Arcade_BG); - DecompressAndLoadBgGfxUsingHeap(FlappyBird_FG, FlappyBird_FG_Img, 0x600, 0, 0); - CopyToBgTilemapBuffer(FlappyBird_FG, FlappyBird_FG_Tilemap, 0, 0); - LoadPalette(FlappyBird_FG_Pal, 0, sizeof(FlappyBird_FG_Pal)); - CopyBgTilemapBufferToVram(FlappyBird_FG); + DecompressAndLoadBgGfxUsingHeap(FlappyBird_FG, FlappyBird_FG_Img, 0x600, 0, 0); + CopyToBgTilemapBuffer(FlappyBird_FG, FlappyBird_FG_Tilemap, 0, 0); + LoadPalette(FlappyBird_FG_Pal, 0, sizeof(FlappyBird_FG_Pal)); + CopyBgTilemapBufferToVram(FlappyBird_FG); - DecompressAndLoadBgGfxUsingHeap(FlappyBird_BG, FlappyBird_BG_Img, 0x1000, 0, 0); - CopyToBgTilemapBuffer(FlappyBird_BG, FlappyBird_BG_Tilemap, 0, 0); - LoadPalette(FlappyBird_BG_Pal, 0x10, sizeof(FlappyBird_BG_Pal)); - CopyBgTilemapBufferToVram(FlappyBird_BG); + DecompressAndLoadBgGfxUsingHeap(FlappyBird_BG, FlappyBird_BG_Img, 0x1000, 0, 0); + CopyToBgTilemapBuffer(FlappyBird_BG, FlappyBird_BG_Tilemap, 0, 0); + LoadPalette(FlappyBird_BG_Pal, 0x10, sizeof(FlappyBird_BG_Pal)); + CopyBgTilemapBufferToVram(FlappyBird_BG); - // Sprite Stuff + // Sprite Stuff ResetSpriteData(); FreeAllSpritePalettes(); LoadSpritePalettes(sSpritePalettes); - CreateHitbox(); - CreateBorder(); - CreateBorder2(); - CreateFlap(); - CreateCreditSprites(); - SetCreditDigits(0); - CreateHiScoreSprites(); - SetScoreDigits(VarGet(FLAPPY_VAR_HIGH_SCORE)); - CreateScore(); - CreateScore2(); - CreateButterfree(); - CreateTrail(); - gSprites[sFlappy->TrailSpriteId].invisible = TRUE; - - sFlappy->pos_y = 80; + CreateHitbox(); + CreateBorder(); + CreateBorder2(); + CreateFlap(); + CreateCreditSprites(); + SetCreditDigits(0); + CreateHiScoreSprites(); + SetScoreDigits(VarGet(FLAPPY_VAR_HIGH_SCORE)); + CreateScore(); + CreateScore2(); + CreateButterfree(); + CreateTrail(); + gSprites[sFlappy->TrailSpriteId].invisible = TRUE; + + sFlappy->pos_y = 80; sFlappy->speed_y = 0; sFlappy->flap_strength = FLAP_STRENGTH; - sFlappy->MIN_Y = 140; - sFlappy->MAX_Y = 10; - sFlappy->Obstacle2Id = 0; - sFlappy->Obstacle2Id = 1; - VarSet(GAME_CORNER_VAR_WINNINGS, 0); - sFlappy->timer = 5; - sFlappy->timerDelay = 75; + sFlappy->MIN_Y = 140; + sFlappy->MAX_Y = 10; + sFlappy->Obstacle2Id = 0; + sFlappy->Obstacle2Id = 1; + VarSet(GAME_CORNER_VAR_WINNINGS, 0); + sFlappy->timer = 5; + sFlappy->timerDelay = 75; SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON); - SetGpuReg(REG_OFFSET_BG2CNT, 0x1800); // Set BG2 in Mode 2 - SetGpuReg(REG_OFFSET_BG3CNT, 0x1800); // Set BG3 in Mode 2 + SetGpuReg(REG_OFFSET_BG2CNT, 0x1800); // Set BG2 in Mode 2 + SetGpuReg(REG_OFFSET_BG3CNT, 0x1800); // Set BG3 in Mode 2 ShowBg(FlappyBird_BG); ShowBg(FlappyBird_FG); From c198400932b2ee972f285b135cc8159e027ea7a3 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 13 May 2025 19:31:45 -0400 Subject: [PATCH 014/429] fix modern warnings with pinball --- src/pinball.c | 37 +++---------------------------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/src/pinball.c b/src/pinball.c index 4c32588d48b3..9c0dfdeb7e96 100644 --- a/src/pinball.c +++ b/src/pinball.c @@ -437,7 +437,6 @@ static bool32 CheckMeowthCollision(struct Ball *ball, struct Meowth *meowth, u32 static bool32 CheckJewelCollision(struct Ball *ball, struct MeowthJewel *jewel, u8 *outCollisionNormal); static bool32 IsJewelSpaceOccupied(u16 xPos, u16 destYPos, struct MeowthJewel *jewels); static bool32 CheckMeowthJewelsCollision(struct Ball *ball, struct Meowth *meowth, u8 *outCollisionNormal); -static int GetNumActiveJewels(struct Meowth *meowth); static struct MeowthJewel *TryCreateNewJewel(struct Meowth *meowth, int ballXPos); static void UpdateJewels(struct MeowthJewel *jewels); static void UpdateMeowthSprite(struct Sprite *sprite); @@ -2206,7 +2205,6 @@ static void CreatePlayerSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_PlayerInterface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_PlayerInterface[i]); } @@ -2219,13 +2217,11 @@ static void CreatePlayerSprites(void) static void PlayPinballGame(u8 gameType) { - u8 taskId; - ScriptContext_Stop(); sPinballGame = AllocZeroed(sizeof(*sPinballGame)); sPinballGame->gameType = gameType; sPinballGame->returnMainCallback = CB2_ReturnToFieldContinueScriptPlayMapMusic; - taskId = CreateTask(FadeToPinballScreen, 0); + CreateTask(FadeToPinballScreen, 0); } static void FadeToPinballScreen(u8 taskId) @@ -2886,7 +2882,7 @@ static void HandleBallPhysics(void) if ((ball->yPos >> 8) > 168) { - ball->yPos == 170 << 8; + //ball->yPos == 170 << 8; LoseBall(); } } @@ -3065,7 +3061,6 @@ static void HandleTilt(struct Ball *ball, struct Tilt *tilt, int xDelta, int yDe static bool32 HandleFlippers(struct Ball *ball, u16 *outYForce, u8 *outCollisionNormal, int *outCollisionAmplification) { bool32 collided; - struct Flipper *flipper; UpdateFlipperState(&sPinballGame->rightFlipper); UpdateFlipperState(&sPinballGame->leftFlipper); @@ -3555,21 +3550,6 @@ static void ApplyCollisionForces(struct Ball *ball, u16 flipperYForce, int colli static void UpdateCamera(void) { int scrollX, scrollY; - int stagePixelWidth = sPinballGame->stageTileWidth * 8; - int stagePixelHeight = sPinballGame->stageTileHeight * 8; - struct Ball *ball = &sPinballGame->ball; - - // scrollX = (ball->xPos >> 8) - (DISPLAY_WIDTH / 2); - // if (scrollX < 0) - // scrollX = 0; - // if (scrollX > stagePixelWidth - DISPLAY_WIDTH) - // scrollX = stagePixelWidth - DISPLAY_WIDTH; - - // scrollY = (ball->yPos >> 8) - (DISPLAY_HEIGHT / 2); - // if (scrollY < 0) - // scrollY = 0; - // if (scrollY > stagePixelHeight - DISPLAY_HEIGHT) - // scrollY = stagePixelHeight - DISPLAY_HEIGHT; scrollX = -40; // Center the game in the middle of the screen scrollY = 0; @@ -3894,20 +3874,9 @@ static bool32 CheckMeowthJewelsCollision(struct Ball *ball, struct Meowth *meowt return FALSE; } -static int GetNumActiveJewels(struct Meowth *meowth) -{ - int i, count; - for (i = 0; i < MAX_MEOWTH_JEWELS; i++) - { - if (meowth->jewels[i].state != JEWEL_STATE_HIDDEN) - count++; - } - return count; -} - static struct MeowthJewel *TryCreateNewJewel(struct Meowth *meowth, int ballXPos) { - int i, count; + int i; for (i = 0; i < MAX_MEOWTH_JEWELS; i++) { if (meowth->jewels[i].state == JEWEL_STATE_HIDDEN) From 1aee35f96b7c2cb53b54ccade1c825896ea39031 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 13 May 2025 20:16:19 -0400 Subject: [PATCH 015/429] Document variables and make some optional --- data/maps/MauvilleCity_GameCorner/scripts.inc | 4 ++++ include/config/game_corner_expansion.h | 16 ++++++++-------- src/flappybird.c | 9 ++++++--- src/rogue_voltorbflip.c | 16 ++++++++++------ 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/data/maps/MauvilleCity_GameCorner/scripts.inc b/data/maps/MauvilleCity_GameCorner/scripts.inc index 62c3ea53d8eb..ca174b254e27 100644 --- a/data/maps/MauvilleCity_GameCorner/scripts.inc +++ b/data/maps/MauvilleCity_GameCorner/scripts.inc @@ -25,7 +25,9 @@ MauvilleCity_GameCorner_MapScripts:: .set COINS_PRICE_500, 10000 TrainerId_Onframe: +.if GAME_CORNER_VAR_ID_CHECK != 0 map_script_2 GAME_CORNER_VAR_ID_CHECK, 0, BouncerCheck +.endif .2byte 0 BouncerCheck:: @@ -442,7 +444,9 @@ VF_Loop:: VF_Cash_Out:: addcoins GAME_CORNER_VAR_WINNINGS setvar GAME_CORNER_VAR_WINNINGS, 0 +.if FLIP_VAR_LEVEL != 0 setvar FLIP_VAR_LEVEL, 0 +.endif updatecoinsbox 1, 1 playse SE_SHOP savebgm MUS_DUMMY diff --git a/include/config/game_corner_expansion.h b/include/config/game_corner_expansion.h index 0f5d4a0c1c11..9bc2d0798d26 100644 --- a/include/config/game_corner_expansion.h +++ b/include/config/game_corner_expansion.h @@ -1,26 +1,26 @@ #ifndef GUARD_GAME_CORNER_EXPANSION_H #define GUARD_GAME_CORNER_EXPANSION_H -#define GAME_CORNER_VAR_ID_CHECK VAR_ROUTE114_STATE -#define GAME_CORNER_VAR_WINNINGS VAR_UNUSED_0x40FF +#define GAME_CORNER_VAR_ID_CHECK 0 // This is just a funny variable used for the Game Corner map itself and can be set to 0 +#define GAME_CORNER_VAR_WINNINGS VAR_UNUSED_0x40FF // Must be set to a valid variable for most minigames to function -#define FLAPPY_VAR_HIGH_SCORE VAR_ROUTE113_STATE +#define FLAPPY_VAR_HIGH_SCORE 0 // If this variable isn't set to 0, this tracks the high score of the Flappy Bird minigame -#define DERBY_FLAG_NICKNAME FLAG_UNUSED_0x023 -#define DERBY_FLAG_RESET FLAG_UNUSED_0x024 -#define DERBY_VAR_RACER_NAME_1 VAR_ROUTE105_STATE +#define DERBY_FLAG_NICKNAME FLAG_UNUSED_0x023 // This flag tracks whether nicknames should be reset or not. Must be set to a valid flag +#define DERBY_FLAG_RESET FLAG_UNUSED_0x024 // This flag tracks whether the data for the derby should be reset or not. Must be set to a valid flag +#define DERBY_VAR_RACER_NAME_1 VAR_ROUTE105_STATE // The following 6 variables track the data for each indivial racer in their respective variable #define DERBY_VAR_RACER_NAME_2 VAR_ROUTE106_STATE #define DERBY_VAR_RACER_NAME_3 VAR_ROUTE107_STATE #define DERBY_VAR_RACER_NAME_4 VAR_ROUTE108_STATE #define DERBY_VAR_RACER_NAME_5 VAR_ROUTE109_STATE #define DERBY_VAR_RACER_NAME_6 VAR_ROUTE111_STATE -#define DERBY_VAR_RACER_1 VAR_ROUTE122_STATE +#define DERBY_VAR_RACER_1 VAR_ROUTE122_STATE // The following 6 variables hold the nickname ID for each racer in the derby #define DERBY_VAR_RACER_2 VAR_ROUTE123_STATE #define DERBY_VAR_RACER_3 VAR_ROUTE124_STATE #define DERBY_VAR_RACER_4 VAR_ROUTE125_STATE #define DERBY_VAR_RACER_5 VAR_ROUTE126_STATE #define DERBY_VAR_RACER_6 VAR_ROUTE127_STATE -#define FLIP_VAR_LEVEL VAR_UNUSED_0x40FE +#define FLIP_VAR_LEVEL 0 // If this variable isn't set to 0, it will track the difficult level for any game of Voltorb Flip after the first one #endif // GUARD_GAME_CORNER_EXPANSION_H diff --git a/src/flappybird.c b/src/flappybird.c index 4d2f0cfda4b0..977a0f88765c 100644 --- a/src/flappybird.c +++ b/src/flappybird.c @@ -1705,7 +1705,7 @@ static void FlappyBirdMain(u8 taskId) gSprites[sFlappy->GameOverSpriteId].y = 80; if (sFlappy->timerDelay == 0) { - if (sFlappy->Points > VarGet(FLAPPY_VAR_HIGH_SCORE)) + if (FLAPPY_VAR_HIGH_SCORE != 0 && sFlappy->Points > VarGet(FLAPPY_VAR_HIGH_SCORE)) { PlayFanfare(MUS_LEVEL_UP); VarSet(FLAPPY_VAR_HIGH_SCORE, sFlappy->Points); @@ -1716,7 +1716,7 @@ static void FlappyBirdMain(u8 taskId) } else { - StartExitFlappyBird(); + StartExitFlappyBird(); } } else @@ -1783,7 +1783,10 @@ static void InitFlappyBirdScreen(void) CreateCreditSprites(); SetCreditDigits(0); CreateHiScoreSprites(); - SetScoreDigits(VarGet(FLAPPY_VAR_HIGH_SCORE)); + if (FLAPPY_VAR_HIGH_SCORE != 0) + SetScoreDigits(VarGet(FLAPPY_VAR_HIGH_SCORE)); + else + SetScoreDigits(0); CreateScore(); CreateScore2(); CreateButterfree(); diff --git a/src/rogue_voltorbflip.c b/src/rogue_voltorbflip.c index f850ed6ace2d..a6fc6db9fc28 100644 --- a/src/rogue_voltorbflip.c +++ b/src/rogue_voltorbflip.c @@ -648,7 +648,6 @@ static void CreateCreditSprites(void) for (i = 0; i < ARRAY_COUNT(sSpriteSheets_Interface) - 1; i++) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheets_Interface[i]); } @@ -683,7 +682,6 @@ static void CreateCreditSprites(void) static void CreateCoins(void) { - struct SpriteSheet s; LoadCompressedSpriteSheet(&sSpriteSheet_Coins); sVflip->CoinsSpriteId = CreateSprite(&sSpriteTemplate_Coins, 198, 132, 0); @@ -756,7 +754,10 @@ void CB2_ShowVoltorbFlip(void) SetVBlankCallback(VBlankCB); SetMainCallback2(MainCB2); - ResetVoltorbFlipCards(VarGet(FLIP_VAR_LEVEL)); + if (FLIP_VAR_LEVEL != 0) + ResetVoltorbFlipCards(VarGet(FLIP_VAR_LEVEL)); + else + ResetVoltorbFlipCards(0); CreateTask(Task_VoltorbFlipFadeIn, 0); } @@ -785,7 +786,8 @@ static void Task_VoltorbFlipWaitForKeyPress(u8 taskId) if (JOY_NEW(B_BUTTON)) { VarSet(VAR_RESULT, FALSE); - VarSet(FLIP_VAR_LEVEL, 0); + if (FLIP_VAR_LEVEL != 0) + VarSet(FLIP_VAR_LEVEL, 0); BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = Task_VoltorbFlipFadeOut; @@ -795,7 +797,8 @@ static void Task_VoltorbFlipWaitForKeyPress(u8 taskId) if(gameState == GAME_STATE_LOSE) { VarSet(VAR_RESULT, FALSE); - VarSet(FLIP_VAR_LEVEL, 0); + if (FLIP_VAR_LEVEL != 0) + VarSet(FLIP_VAR_LEVEL, 0); gSprites[sVoltorbFlipState->outlineSprite].invisible = TRUE; gSprites[sVoltorbFlipState->pointerSprite].invisible = TRUE; @@ -806,7 +809,8 @@ static void Task_VoltorbFlipWaitForKeyPress(u8 taskId) { ShowAllCards(); VarSet(VAR_RESULT, TRUE); - VarSet(FLIP_VAR_LEVEL, FLIP_VAR_LEVEL + 1); + if (FLIP_VAR_LEVEL != 0) + VarSet(FLIP_VAR_LEVEL, (VarGet(FLIP_VAR_LEVEL) + 1)); gSprites[sVoltorbFlipState->outlineSprite].invisible = TRUE; gSprites[sVoltorbFlipState->pointerSprite].invisible = TRUE; From d05b7192c58f92f6879f50a4e54514e01fa4c81d Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 13 May 2025 22:44:03 -0400 Subject: [PATCH 016/429] Fix all remaining modern warnings --- include/config/game_corner_expansion.h | 8 ++-- include/derby.h | 1 - src/block_stacker.c | 61 +++----------------------- 3 files changed, 9 insertions(+), 61 deletions(-) diff --git a/include/config/game_corner_expansion.h b/include/config/game_corner_expansion.h index 9bc2d0798d26..829b4e022d00 100644 --- a/include/config/game_corner_expansion.h +++ b/include/config/game_corner_expansion.h @@ -9,13 +9,13 @@ #define DERBY_FLAG_NICKNAME FLAG_UNUSED_0x023 // This flag tracks whether nicknames should be reset or not. Must be set to a valid flag #define DERBY_FLAG_RESET FLAG_UNUSED_0x024 // This flag tracks whether the data for the derby should be reset or not. Must be set to a valid flag #define DERBY_VAR_RACER_NAME_1 VAR_ROUTE105_STATE // The following 6 variables track the data for each indivial racer in their respective variable -#define DERBY_VAR_RACER_NAME_2 VAR_ROUTE106_STATE -#define DERBY_VAR_RACER_NAME_3 VAR_ROUTE107_STATE -#define DERBY_VAR_RACER_NAME_4 VAR_ROUTE108_STATE +#define DERBY_VAR_RACER_NAME_2 VAR_ROUTE106_STATE // Species is stored in the hundreds place in decimal +#define DERBY_VAR_RACER_NAME_3 VAR_ROUTE107_STATE // Shininess is stored in the tens place in decimal +#define DERBY_VAR_RACER_NAME_4 VAR_ROUTE108_STATE // Condition is stored in the ones place in decimal #define DERBY_VAR_RACER_NAME_5 VAR_ROUTE109_STATE #define DERBY_VAR_RACER_NAME_6 VAR_ROUTE111_STATE #define DERBY_VAR_RACER_1 VAR_ROUTE122_STATE // The following 6 variables hold the nickname ID for each racer in the derby -#define DERBY_VAR_RACER_2 VAR_ROUTE123_STATE +#define DERBY_VAR_RACER_2 VAR_ROUTE123_STATE // These variables only hold the ID itself, the actual nickname uses the species data as well #define DERBY_VAR_RACER_3 VAR_ROUTE124_STATE #define DERBY_VAR_RACER_4 VAR_ROUTE125_STATE #define DERBY_VAR_RACER_5 VAR_ROUTE126_STATE diff --git a/include/derby.h b/include/derby.h index a508949dc216..365ba884d188 100644 --- a/include/derby.h +++ b/include/derby.h @@ -2,7 +2,6 @@ #define GUARD_BLACKJACK_H void StartDerby(void); -static void DerbyMainCallback(void); void GetNewDerby(void); #endif // GUARD_BLACKJACK_H diff --git a/src/block_stacker.c b/src/block_stacker.c index 44d905114194..63d2e216bee0 100644 --- a/src/block_stacker.c +++ b/src/block_stacker.c @@ -161,7 +161,6 @@ struct BlockStacker { }; static EWRAM_DATA struct BlockStacker *sBlockStacker = NULL; -static EWRAM_DATA u8 sTextWindowId = 0; static void FadeToBlockStackerScreen(u8 taskId); static void InitBlockStackerScreen(void); @@ -835,9 +834,8 @@ static const struct SpriteTemplate sSpriteTemplate_Rhydon = void StartBlockStacker(void) { - u8 taskId = 0; sBlockStacker = AllocZeroed(sizeof(struct BlockStacker)); - taskId = CreateTask(FadeToBlockStackerScreen, 0); + CreateTask(FadeToBlockStackerScreen, 0); } static void FadeToBlockStackerScreen(u8 taskId) @@ -925,29 +923,6 @@ static void DestroyHighlights(void) } } -static void SwapFromBlock(void) -{ - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->Rhydon2SpriteId]); - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->RhydonBlockSpriteId]); - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon); - - sBlockStacker->RhydonSpriteId = CreateSprite(&sSpriteTemplate_Rhydon, 183, 112, 0); -} - -static void SwapToBlock(void) -{ - DestroySpriteAndFreeResources(&gSprites[sBlockStacker->RhydonSpriteId]); - LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon2); - - sBlockStacker->Rhydon2SpriteId = CreateSprite(&sSpriteTemplate_Rhydon2, 183, 112, 0); - - LoadCompressedSpriteSheet(&sSpriteSheet_RhydonBlock); - - sBlockStacker->RhydonBlockSpriteId = CreateSprite(&sSpriteTemplate_RhydonBlock, 177, 122, 0); -} - static void CreateRhydon(void) { LoadCompressedSpriteSheet(&sSpriteSheet_Rhydon); @@ -1797,7 +1772,6 @@ static void CheckLevel_3(void) { s16 curX1; s16 curX2; - s16 curX3; s16 preX1; s16 preX2; s16 preX3; @@ -1842,10 +1816,8 @@ static void CheckLevel_4(void) { s16 curX1; s16 curX2; - s16 curX3; s16 preX1; s16 preX2; - s16 preX3; u8 Lives; curX1 = gSprites[sBlockStacker->Row4Block1SpriteId].x; @@ -1885,19 +1857,14 @@ static void CheckLevel_4(void) static void CheckLevel_5(void) { s16 curX1; - s16 curX2; - s16 curX3; s16 preX1; s16 preX2; - s16 preX3; - u8 Lives; curX1 = gSprites[sBlockStacker->Row5Block1SpriteId].x; preX1 = gSprites[sBlockStacker->Row4Block1SpriteId].x; preX2 = gSprites[sBlockStacker->Row4Block2SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; if ((curX1 != preX1) && (curX1 != preX2)) // Block 1 Off @@ -1915,18 +1882,12 @@ static void CheckLevel_5(void) static void CheckLevel_6(void) { s16 curX1; - s16 curX2; - s16 curX3; s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; curX1 = gSprites[sBlockStacker->Row6Block1SpriteId].x; preX1 = gSprites[sBlockStacker->Row5Block1SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; if ((curX1 != preX1)) // Block 1 Off @@ -1944,18 +1905,12 @@ static void CheckLevel_6(void) static void CheckLevel_7(void) { s16 curX1; - s16 curX2; - s16 curX3; s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; curX1 = gSprites[sBlockStacker->Row7Block1SpriteId].x; preX1 = gSprites[sBlockStacker->Row6Block1SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; if ((curX1 != preX1)) // Block 1 Off @@ -1973,18 +1928,12 @@ static void CheckLevel_7(void) static void CheckLevel_8(void) { s16 curX1; - s16 curX2; - s16 curX3; s16 preX1; - s16 preX2; - s16 preX3; - u8 Lives; curX1 = gSprites[sBlockStacker->Row8Block1SpriteId].x; preX1 = gSprites[sBlockStacker->Row7Block1SpriteId].x; - - Lives = sBlockStacker->BlocksLeft; + sBlockStacker->LastLives = sBlockStacker->BlocksLeft; if ((curX1 != preX1)) // Block 1 Off From 407be0c4c3f327af6165c7a71bdb65acbd0766c4 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Tue, 27 May 2025 14:32:20 -0400 Subject: [PATCH 017/429] wip missing music --- include/constants/songs.h | 3 +- sound/song_table.inc | 1 + sound/songs/midi/midi.cfg | 1 + sound/songs/midi/mus_casino_plus_gacha.mid | Bin 0 -> 2475 bytes sound/voice_groups.inc | 1 + sound/voicegroups/voicegroup192.inc | 131 +++++++++++++++++++++ src/debug.c | 1 + 7 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 sound/songs/midi/mus_casino_plus_gacha.mid create mode 100644 sound/voicegroups/voicegroup192.inc diff --git a/include/constants/songs.h b/include/constants/songs.h index 618d9c388bac..eb6c1e358fc0 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -500,7 +500,8 @@ #define MUS_CASINO_PLUS_7 566 #define MUS_CASINO_PLUS_8 567 #define MUS_CASINO_PLUS_9 568 -#define END_MUS MUS_CASINO_PLUS_9 +#define MUS_CASINO_PLUS_GACHA 569 +#define END_MUS MUS_CASINO_PLUS_GACHA // These PH_* constants are phoneme sounds used by the "bard" NPC (see src/bard_music.c and src/mauville_old_man.c). // Each comes in a triplet of PH_*_BLEND, PH_*_HELD, and PH_*_SOLO, and the name of each triplet incorporates the English phonetic sound it represents. diff --git a/sound/song_table.inc b/sound/song_table.inc index a5379c40ab5b..7a8da1ce7e83 100644 --- a/sound/song_table.inc +++ b/sound/song_table.inc @@ -570,6 +570,7 @@ gSongTable:: song mus_casino_plus_7, 0, 0 song mus_casino_plus_8, 0, 0 song mus_casino_plus_9, 0, 0 + song mus_casino_plus_gacha, 0, 0 song ph_trap_blend, 2, 2 song ph_trap_held, 2, 2 song ph_trap_solo, 2, 2 diff --git a/sound/songs/midi/midi.cfg b/sound/songs/midi/midi.cfg index cb66057bb907..69df655fd80f 100644 --- a/sound/songs/midi/midi.cfg +++ b/sound/songs/midi/midi.cfg @@ -218,6 +218,7 @@ mus_casino_plus_6.mid: -E -R50 -G133 -V090 mus_casino_plus_7.mid: -E -R50 -G150 -V079 mus_casino_plus_8.mid: -E -R50 -G166 -V076 mus_casino_plus_9.mid: -E -R50 -G163 -V090 +mus_casino_plus_gacha.mid: -E -R50 -G192 ph_choice_blend.mid: -E -G130 -P4 ph_choice_held.mid: -E -G130 -P4 ph_choice_solo.mid: -E -G130 -P4 diff --git a/sound/songs/midi/mus_casino_plus_gacha.mid b/sound/songs/midi/mus_casino_plus_gacha.mid new file mode 100644 index 0000000000000000000000000000000000000000..021d3f6499e79dbda5837101775031ee477e670d GIT binary patch literal 2475 zcmZuy+fGwa5S=6GMfw9i9#bAp8cHn^42hD8MT97UpijmJOo1&+Q5t^%U3>KS;5E_Jk8}|RL>E(c zciz@tg!zS~a##%Sy{gxDpYI-o>xXZ4>$R|0EQYmr`;EO?`1~l`*=;nA!ucCF7Q^>@ z2ZyiT*2D7LO`=aZ`kbRLIr@5?zJYUlD)sjd_4bH*wJX$1SE!fSrykPvrYrQFD%4&% zratgK@ILT*7`_s4R2k;Ne4H^I+03QG!WNI`3K0y3W;GLxg4S^4V4}lMX4}lMX z{{r5Pj%fsZ1bhU1lzBlT;3MG4|9|7``Aj3%Tp>DHCTcAaoy}0d^>GcHXB`a6_ zQHo>nEz@2_%nD)<$N4!9-vd5_-*j^oIdHaxJd&e|^A$OpYgU0(geNeb?tF@q_$u_9en8!#a;)PV@}Cx!V?Ck|cfe7MxXx4)II#4| z9m5^Rd2~C+7-ECAk2$6@XrOTt<9W5V&O_$b+*;#*XSi?8&3T)A2K|dJYpAV?n$}QH z6?s)x)im3BNK;-D^I|ok&bH)C0ZW53j!WiI54`@YfqEq#pnnJ%&w$j4KBC*%);99; zoUl&`{?3l;1)8L!7ndVwn@{W`>u5SGpf>JNb9*hh-(-IE5%VKjqpqpe4r)*@r3dw- zvxOQ8qBnc#cnYo$$x~2{!ex)Ui&~$}$YR24aQgbjczu5fZtKzc=w?Xka{coRYF(lM z&v5~F2-@KLWWTp2`^|lIHl=UzT(m1Bd{5Rj?mPQh7QN!TS5ElO-msqR8+*>ajB$(K zs99$*_S@pjZ;ms+k<;sGep}v+|MbeXHqrNn+`U+{4a^Pimy&wD0nM;aPD|>wVCr?r zVd4dI-%s?!y!W*y=EUA&PG1}I@?KM3*(rz@y-P8_%p!Q)ENTu{o7)?l!*f_3_|5x< z>sw)MCiKnPjn4}2W4`01W49Yz-*J4hE{&JEbbrVmpEL(<{@wkyJw z^Lt0`FzROAc#iCTvu0)Wn`b+zsoQ6<9_II~c$t;EZGO+Hrs{X+3Ao&zN?|6P=enod z8{&6F+V4^2m)aa}&^E906THqRe8l_V_oD3u+l!a?Qu@+PVqNm^iFXETl27>T`pCAP zV7|>~f+%z?ePJfG~Bd0mRV?qY`IUSl@> oy|y^p;}*v=U^(Z#p7D&#tDg1_Sl_(E(KjCJXYzP!19VZMe>K=$%K!iX literal 0 HcmV?d00001 diff --git a/sound/voice_groups.inc b/sound/voice_groups.inc index 6b028bd0da4c..23e3e6e29ae7 100644 --- a/sound/voice_groups.inc +++ b/sound/voice_groups.inc @@ -191,3 +191,4 @@ .include "sound/voicegroups/voicegroup189.inc" .include "sound/voicegroups/voicegroup190.inc" .include "sound/voicegroups/voicegroup191.inc" +.include "sound/voicegroups/voicegroup192.inc" diff --git a/sound/voicegroups/voicegroup192.inc b/sound/voicegroups/voicegroup192.inc new file mode 100644 index 000000000000..2bd0ba359da5 --- /dev/null +++ b/sound/voicegroups/voicegroup192.inc @@ -0,0 +1,131 @@ + .align 2 +voicegroup192:: + voice_keysplit_all voicegroup002 + voice_keysplit voicegroup005, KeySplitTable1 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sd90_classical_detuned_ep1_low, 255, 188, 128, 226 + voice_directsound 60, 65, DirectSoundWaveData_sd90_classical_detuned_ep1_high, 255, 204, 77, 246 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_organ2, 255, 76, 133, 137 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_accordion, 64, 188, 108, 165 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_nylon_str_guitar, 255, 249, 25, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_harp, 255, 246, 0, 235 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup006, KeySplitTable2 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_keysplit voicegroup007, KeySplitTable3 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_directsound 60, 0, DirectSoundWaveData_sc88pro_flute, 255, 127, 231, 127 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1_alt 60, 0, 0, 0, 0, 2, 5, 2 + voice_square_2_alt 60, 0, 3, 0, 1, 6, 3 + voice_square_2_alt 60, 0, 0, 0, 2, 6, 5 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_programmable_wave_alt 60, 0, ProgrammableWaveData_1, 0, 0, 12, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_square_1 60, 0, 0, 2, 0, 0, 15, 0 + voice_noise_alt 60, 0, 0, 0, 2, 6, 0 + voice_noise_alt 60, 0, 0, 0, 1, 6, 0 + diff --git a/src/debug.c b/src/debug.c index b32abd4621cd..080628b26ca9 100644 --- a/src/debug.c +++ b/src/debug.c @@ -4044,6 +4044,7 @@ static void DebugAction_Sound_MUS_SelectId(u8 taskId) X(MUS_CASINO_PLUS_7) \ X(MUS_CASINO_PLUS_8) \ X(MUS_CASINO_PLUS_9) \ + X(MUS_CASINO_PLUS_GACHA) \ X(PH_TRAP_BLEND) \ X(PH_TRAP_HELD) \ X(PH_TRAP_SOLO) \ From 7477abb9a58b898f223fbf6094802011ae6dbc17 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Fri, 13 Jun 2025 21:20:28 -0400 Subject: [PATCH 018/429] remove mentions of palette compression --- src/game_corner_gacha.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game_corner_gacha.c b/src/game_corner_gacha.c index e7a4a397897b..e165f49861bc 100644 --- a/src/game_corner_gacha.c +++ b/src/game_corner_gacha.c @@ -3309,7 +3309,7 @@ static void GachaMain(u8 taskId) GiveMonToPlayer(&gEnemyParty[0]); GetSetPokedexFlag(SpeciesToNationalPokedexNum(sGacha->CalculatedSpecies), FLAG_SET_SEEN); HandleSetPokedexFlag(SpeciesToNationalPokedexNum(sGacha->CalculatedSpecies), FLAG_SET_CAUGHT, GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY)); - LoadCompressedPalette(GetMonFrontSpritePal(&gEnemyParty[0]), OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); + LoadPalette(GetMonFrontSpritePal(&gEnemyParty[0]), OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); SetMultiuseSpriteTemplateToPokemon(sGacha->CalculatedSpecies, pos); sGacha->monSpriteId = CreateMonPicSprite_Affine(sGacha->CalculatedSpecies, GetMonData(&gEnemyParty[0], MON_DATA_IS_SHINY), GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY), MON_PIC_AFFINE_FRONT, 120, 60, 14, TAG_NONE); gSprites[sGacha->monSpriteId].callback = SpriteCB_Null; From e2e23118cf36c111d8217b6c63cd1052a9741fc6 Mon Sep 17 00:00:00 2001 From: agsmgmaster64 <67435611+agsmgmaster64@users.noreply.github.com> Date: Thu, 14 Aug 2025 10:38:41 -0400 Subject: [PATCH 019/429] Gacha optimizations - Palettes are now loaded individually for each Gacha type instead of all at once - Species pools now only contain the species themselves for easier tweaking - Level cap is now considered when getting the level for the mon --- src/game_corner_gacha.c | 1645 ++++++++++++++++++--------------------- 1 file changed, 770 insertions(+), 875 deletions(-) diff --git a/src/game_corner_gacha.c b/src/game_corner_gacha.c index e165f49861bc..87b65ba2d91d 100644 --- a/src/game_corner_gacha.c +++ b/src/game_corner_gacha.c @@ -4,6 +4,7 @@ #include "battle.h" #include "bg.h" #include "coins.h" +#include "caps.h" #include "data.h" #include "daycare.h" #include "decompress.h" @@ -142,24 +143,19 @@ struct Gacha { u8 newMonOdds; u8 ArrowsSpriteId; u8 CTAspriteId; - u16 wager; u8 cursorPosition; - u8 Trigger; + bool8 canBetWager; u8 Rarity; // 0 = Common, 1 = Uncommon, 2 = Rare, 3 = Ultra Rare u8 ownedCommon; u8 ownedUncommon; u8 ownedRare; u8 ownedUltraRare; - u8 commonChance; - u8 uncommonChance; - u8 rareChance; - u8 ultraRareChance; - u16 CalculatedSpecies; u8 bouncingPokeballSpriteId; u8 timer; u8 monSpriteId; + u16 CalculatedSpecies; + u16 wager; u32 waitTimer; - u8 Input; }; static const u8 sText_FromGacha[] = _("You got {STR_VAR_1}!"); @@ -382,73 +378,78 @@ static const struct WindowTemplate sYesNoWinTemplate = #define GFXTAG_PLAYER_DIGIT 8 #define GFXTAG_MENU_1 9 #define GFXTAG_MENU_2 10 -#define GFXTAG_BELOSSOM 11 -#define GFXTAG_PHANPY 12 -#define GFXTAG_TEDDIURSA 13 -#define GFXTAG_ELEKID 14 -#define GFXTAG_HOPPIP 15 -#define GFXTAG_ARROWS 16 -#define GFXTAG_PRESS_A 17 +#define GFXTAG_MASCOT 11 +#define GFXTAG_ARROWS 12 +#define GFXTAG_PRESS_A 13 #define GFXTAG_POKEBALL 5557 -#define BG_BASIC_PAL 1 -#define BG_GREAT_PAL 2 -#define BG_ULTRA_PAL 3 -#define BG_MASTER_PAL 4 -#define PALTAG_KNOB 5 -#define DIGITAL_TEXT_PAL 6 -#define LOTTERY_JPN_PAL 7 -#define PALTAG_INTERFACE 8 -#define PALTAG_INTERFACEPLAYER 9 -#define PALTAG_MENU_BASIC 10 -#define PALTAG_MENU_GREAT 11 -#define PALTAG_MENU_ULTRA 12 -#define PALTAG_MENU_MASTER 13 - -#define PALTAG_BELOSSOM 14 -#define PALTAG_PHANPY 15 -#define PALTAG_TEDDIURSA 16 -#define PALTAG_ELEKID 17 -#define PALTAG_HOPPIP 18 -#define PALTAG_ARROWS 19 -#define PALTAG_PRESS_A 20 +#define PALTAG_KNOB 1 +#define DIGITAL_TEXT_PAL 2 +#define LOTTERY_JPN_PAL 3 +#define PALTAG_INTERFACE 4 +#define PALTAG_INTERFACEPLAYER 5 +#define PALTAG_MENU_ID 6 + +#define PALTAG_MASCOT 7 +#define PALTAG_ARROWS 8 +#define PALTAG_PRESS_A 9 #define PALTAG_POKEBALL 5558 -static const struct SpritePalette sSpritePalettes[] = +static const struct SpritePalette sSpritePalettesBasic[] = { - { .data = Gacha_BG_Basic_Pal, .tag = BG_BASIC_PAL }, - { .data = Gacha_BG_Great_Pal, .tag = BG_GREAT_PAL }, - { .data = Gacha_BG_Ultra_Pal, .tag = BG_ULTRA_PAL }, - { .data = Gacha_BG_Master_Pal, .tag = BG_MASTER_PAL }, + { .data = Gacha_press_a_Pal, .tag = PALTAG_PRESS_A }, + { .data = Gacha_Knob_Pal, .tag = PALTAG_KNOB }, + { .data = Gacha_Digital_Text_Pal, .tag = DIGITAL_TEXT_PAL }, + { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = Gacha_Lottery_Pal, .tag = LOTTERY_JPN_PAL }, + { .data = Gacha_Menu_Basic_Pal, .tag = PALTAG_MENU_ID }, + { .data = HoppipPAL, .tag = PALTAG_MASCOT }, + { .data = sCredit_Pal, .tag = PALTAG_ARROWS }, {} }; -static const struct SpritePalette sSpritePalettes2[] = +static const struct SpritePalette sSpritePalettesGreat[] = { - { .data = BelossomPAL, .tag = PALTAG_BELOSSOM }, - { .data = PhanpyPal, .tag = PALTAG_PHANPY }, - { .data = TeddiursaPAL, .tag = PALTAG_TEDDIURSA }, - { .data = ElekidPAL, .tag = PALTAG_ELEKID }, - { .data = HoppipPAL, .tag = PALTAG_HOPPIP }, + { .data = Gacha_press_a_Pal, .tag = PALTAG_PRESS_A }, + { .data = Gacha_Knob_Pal, .tag = PALTAG_KNOB }, + { .data = Gacha_Digital_Text_Pal, .tag = DIGITAL_TEXT_PAL }, + { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = Gacha_Lottery_Pal, .tag = LOTTERY_JPN_PAL }, + { .data = Gacha_Menu_Great_Pal, .tag = PALTAG_MENU_ID }, + { .data = PhanpyPal, .tag = PALTAG_MASCOT }, { .data = sCredit_Pal, .tag = PALTAG_ARROWS }, + {} +}; + +static const struct SpritePalette sSpritePalettesUltra[] = +{ { .data = Gacha_press_a_Pal, .tag = PALTAG_PRESS_A }, { .data = Gacha_Knob_Pal, .tag = PALTAG_KNOB }, { .data = Gacha_Digital_Text_Pal, .tag = DIGITAL_TEXT_PAL }, { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, { .data = Gacha_Lottery_Pal, .tag = LOTTERY_JPN_PAL }, - { .data = Gacha_Menu_Basic_Pal, .tag = PALTAG_MENU_BASIC }, - { .data = Gacha_Menu_Great_Pal, .tag = PALTAG_MENU_GREAT }, - { .data = Gacha_Menu_Ultra_Pal, .tag = PALTAG_MENU_ULTRA }, - { .data = Gacha_Menu_Master_Pal, .tag = PALTAG_MENU_MASTER }, + { .data = Gacha_Menu_Ultra_Pal, .tag = PALTAG_MENU_ID }, + { .data = TeddiursaPAL, .tag = PALTAG_MASCOT }, + { .data = sCredit_Pal, .tag = PALTAG_ARROWS }, {} }; -static const struct SpritePalette sBall[] = +static const struct SpritePalette sSpritePalettesMaster[] = { - { .data = sPokeball_Pal, .tag = PALTAG_POKEBALL }, + { .data = Gacha_press_a_Pal, .tag = PALTAG_PRESS_A }, + { .data = Gacha_Knob_Pal, .tag = PALTAG_KNOB }, + { .data = Gacha_Digital_Text_Pal, .tag = DIGITAL_TEXT_PAL }, + { .data = sCredit_Pal, .tag = PALTAG_INTERFACE }, + { .data = sPlayer_Pal, .tag = PALTAG_INTERFACEPLAYER }, + { .data = Gacha_Lottery_Pal, .tag = LOTTERY_JPN_PAL }, + { .data = Gacha_Menu_Master_Pal, .tag = PALTAG_MENU_ID }, + { .data = BelossomPAL, .tag = PALTAG_MASCOT }, + { .data = sCredit_Pal, .tag = PALTAG_ARROWS }, {} }; @@ -470,35 +471,35 @@ static const struct CompressedSpriteSheet sSpriteSheet_Hoppip = { .data = HoppipGFX, .size = 0x800, - .tag = GFXTAG_HOPPIP, + .tag = GFXTAG_MASCOT, }; static const struct CompressedSpriteSheet sSpriteSheet_Elekid = { .data = ElekidGFX, .size = 0x800, - .tag = GFXTAG_ELEKID, + .tag = GFXTAG_MASCOT, }; static const struct CompressedSpriteSheet sSpriteSheet_Teddiursa = { .data = TeddiursaGFX, .size = 0x800, - .tag = GFXTAG_TEDDIURSA, + .tag = GFXTAG_MASCOT, }; static const struct CompressedSpriteSheet sSpriteSheet_Phanpy = { .data = PhanpyGFX, .size = 0x800, - .tag = GFXTAG_PHANPY, + .tag = GFXTAG_MASCOT, }; static const struct CompressedSpriteSheet sSpriteSheet_Belossom = { .data = BelossomGFX, .size = 0x800, - .tag = GFXTAG_BELOSSOM, + .tag = GFXTAG_MASCOT, }; static const struct CompressedSpriteSheet sSpriteSheet_Menu_1 = @@ -873,8 +874,8 @@ static const union AnimCmd *const sHoppipAnimCmds[] = { static const struct SpriteTemplate sSpriteTemplate_Hoppip = { - .tileTag = GFXTAG_HOPPIP, - .paletteTag = PALTAG_HOPPIP, + .tileTag = GFXTAG_MASCOT, + .paletteTag = PALTAG_MASCOT, .oam = &sOamData_Hoppip, .anims = sHoppipAnimCmds, .images = NULL, @@ -902,8 +903,8 @@ static const union AnimCmd *const sElekidAnimCmds[] = { static const struct SpriteTemplate sSpriteTemplate_Elekid = { - .tileTag = GFXTAG_ELEKID, - .paletteTag = PALTAG_ELEKID, + .tileTag = GFXTAG_MASCOT, + .paletteTag = PALTAG_MASCOT, .oam = &sOamData_Elekid, .anims = sElekidAnimCmds, .images = NULL, @@ -942,8 +943,8 @@ static const union AnimCmd *const sTeddiursaAnimCmds[] = { static const struct SpriteTemplate sSpriteTemplate_Teddiursa = { - .tileTag = GFXTAG_TEDDIURSA, - .paletteTag = PALTAG_TEDDIURSA, + .tileTag = GFXTAG_MASCOT, + .paletteTag = PALTAG_MASCOT, .oam = &sOamData_Teddiursa, .anims = sTeddiursaAnimCmds, .images = NULL, @@ -968,8 +969,8 @@ static const union AnimCmd *const sPhanpyAnimCmds[] = { static const struct SpriteTemplate sSpriteTemplate_Phanpy = { - .tileTag = GFXTAG_PHANPY, - .paletteTag = PALTAG_PHANPY, + .tileTag = GFXTAG_MASCOT, + .paletteTag = PALTAG_MASCOT, .oam = &sOamData_Phanpy, .anims = sPhanpyAnimCmds, .images = NULL, @@ -996,8 +997,8 @@ static const union AnimCmd *const sBelossomAnimCmds[] = { static const struct SpriteTemplate sSpriteTemplate_Belossom = { - .tileTag = GFXTAG_BELOSSOM, - .paletteTag = PALTAG_BELOSSOM, + .tileTag = GFXTAG_MASCOT, + .paletteTag = PALTAG_MASCOT, .oam = &sOamData_Belossom, .anims = sBelossomAnimCmds, .images = NULL, @@ -1008,7 +1009,7 @@ static const struct SpriteTemplate sSpriteTemplate_Belossom = static const struct SpriteTemplate sSpriteTemplate_Menu_1_Master = { .tileTag = GFXTAG_MENU_1, - .paletteTag = PALTAG_MENU_MASTER, + .paletteTag = PALTAG_MENU_ID, .oam = &sOamData_Menu, .anims = gDummySpriteAnimTable, .images = NULL, @@ -1019,7 +1020,7 @@ static const struct SpriteTemplate sSpriteTemplate_Menu_1_Master = static const struct SpriteTemplate sSpriteTemplate_Menu_2_Master = { .tileTag = GFXTAG_MENU_2, - .paletteTag = PALTAG_MENU_MASTER, + .paletteTag = PALTAG_MENU_ID, .oam = &sOamData_Menu_2, .anims = sMenu2AnimCmds, .images = NULL, @@ -1030,7 +1031,7 @@ static const struct SpriteTemplate sSpriteTemplate_Menu_2_Master = static const struct SpriteTemplate sSpriteTemplate_Menu_1_Ultra = { .tileTag = GFXTAG_MENU_1, - .paletteTag = PALTAG_MENU_ULTRA, + .paletteTag = PALTAG_MENU_ID, .oam = &sOamData_Menu, .anims = gDummySpriteAnimTable, .images = NULL, @@ -1041,7 +1042,7 @@ static const struct SpriteTemplate sSpriteTemplate_Menu_1_Ultra = static const struct SpriteTemplate sSpriteTemplate_Menu_2_Ultra = { .tileTag = GFXTAG_MENU_2, - .paletteTag = PALTAG_MENU_ULTRA, + .paletteTag = PALTAG_MENU_ID, .oam = &sOamData_Menu_2, .anims = sMenu2AnimCmds, .images = NULL, @@ -1052,7 +1053,7 @@ static const struct SpriteTemplate sSpriteTemplate_Menu_2_Ultra = static const struct SpriteTemplate sSpriteTemplate_Menu_1_Great = { .tileTag = GFXTAG_MENU_1, - .paletteTag = PALTAG_MENU_GREAT, + .paletteTag = PALTAG_MENU_ID, .oam = &sOamData_Menu, .anims = gDummySpriteAnimTable, .images = NULL, @@ -1063,7 +1064,7 @@ static const struct SpriteTemplate sSpriteTemplate_Menu_1_Great = static const struct SpriteTemplate sSpriteTemplate_Menu_2_Great = { .tileTag = GFXTAG_MENU_2, - .paletteTag = PALTAG_MENU_GREAT, + .paletteTag = PALTAG_MENU_ID, .oam = &sOamData_Menu_2, .anims = sMenu2AnimCmds, .images = NULL, @@ -1074,7 +1075,7 @@ static const struct SpriteTemplate sSpriteTemplate_Menu_2_Great = static const struct SpriteTemplate sSpriteTemplate_Menu_1_Basic = { .tileTag = GFXTAG_MENU_1, - .paletteTag = PALTAG_MENU_BASIC, + .paletteTag = PALTAG_MENU_ID, .oam = &sOamData_Menu, .anims = gDummySpriteAnimTable, .images = NULL, @@ -1085,7 +1086,7 @@ static const struct SpriteTemplate sSpriteTemplate_Menu_1_Basic = static const struct SpriteTemplate sSpriteTemplate_Menu_2_Basic = { .tileTag = GFXTAG_MENU_2, - .paletteTag = PALTAG_MENU_BASIC, + .paletteTag = PALTAG_MENU_ID, .oam = &sOamData_Menu_2, .anims = sMenu2AnimCmds, .images = NULL, @@ -1630,551 +1631,546 @@ static void CreateKnob(void) gSprites[sGacha->KnobSpriteId].animNum = 0; // No Rotation } -typedef struct { - int customNumber; - u16 species; -} SpeciesGacha; - -static const SpeciesGacha sSpeciesGachaBasicCommon[] = { - {0, SPECIES_SUNKERN}, - {1, SPECIES_AZURILL}, - {2, SPECIES_CATERPIE}, - {3, SPECIES_WURMPLE}, - {4, SPECIES_IGGLYBUFF}, - {5, SPECIES_WOOPER}, - {6, SPECIES_MAGIKARP}, - {7, SPECIES_SENTRET}, - {8, SPECIES_CLEFFA}, - {9, SPECIES_POOCHYENA}, - {10, SPECIES_LOTAD}, - {11, SPECIES_SEEDOT}, - {12, SPECIES_ZIGZAGOON}, - {13, SPECIES_WHISMUR}, - {14, SPECIES_ZUBAT}, - {15, SPECIES_SPINARAK}, - {16, SPECIES_HOPPIP}, - {17, SPECIES_PIDGEY}, - {18, SPECIES_RATTATA}, - {19, SPECIES_SPEAROW}, - {20, SPECIES_HOOTHOOT}, - {21, SPECIES_LEDYBA}, - {22, SPECIES_SURSKIT}, - {23, SPECIES_TAILLOW}, - {24, SPECIES_WINGULL}, - {25, SPECIES_NIDORAN_M}, - {26, SPECIES_NIDORAN_F}, - {27, SPECIES_PARAS}, - {28, SPECIES_SHROOMISH}, - {29, SPECIES_POLIWAG}, - {30, SPECIES_BELLSPROUT}, - {31, SPECIES_VENONAT}, - {32, SPECIES_SMOOCHUM}, - {33, SPECIES_ODDISH}, - {34, SPECIES_PSYDUCK}, - {35, SPECIES_GOLDEEN}, - {36, SPECIES_FEEBAS} -}; - -static const SpeciesGacha sSpeciesGachaBasicUncommon[] = { - {0, SPECIES_METAPOD}, - {1, SPECIES_KAKUNA}, - {2, SPECIES_PICHU}, - {3, SPECIES_SILCOON}, - {4, SPECIES_CASCOON}, - {5, SPECIES_MAKUHITA}, - {6, SPECIES_MARILL}, - {7, SPECIES_SLUGMA}, - {8, SPECIES_SWINUB}, - {9, SPECIES_DIGLETT}, - {10, SPECIES_MAREEP}, - {11, SPECIES_MEDITITE}, - {12, SPECIES_EKANS}, - {13, SPECIES_BARBOACH}, - {14, SPECIES_HORSEA}, - {15, SPECIES_SANDSHREW}, - {16, SPECIES_GEODUDE}, - {17, SPECIES_GULPIN}, - {18, SPECIES_MANKEY}, - {19, SPECIES_MACHOP}, - {20, SPECIES_SHELLDER}, - {21, SPECIES_GRIMER}, - {22, SPECIES_VOLTORB}, - {23, SPECIES_PLUSLE}, - {24, SPECIES_MINUN}, - {25, SPECIES_NATU}, - {26, SPECIES_NINCADA}, - {27, SPECIES_SPOINK} -}; - -static const SpeciesGacha sSpeciesGachaBasicRare[] = { - {0, SPECIES_RALTS}, - {1, SPECIES_TYROGUE}, - {2, SPECIES_SKITTY}, - {3, SPECIES_SLAKOTH}, - {4, SPECIES_MEOWTH}, - {5, SPECIES_PINECO}, - {6, SPECIES_TRAPINCH}, - {7, SPECIES_SPHEAL}, - {8, SPECIES_VULPIX}, - {9, SPECIES_SNUBBULL}, - {10, SPECIES_REMORAID}, - {11, SPECIES_CORPHISH}, - {12, SPECIES_ABRA}, - {13, SPECIES_ELEKID}, - {14, SPECIES_MAGBY}, - {15, SPECIES_CORSOLA} -}; - -static const SpeciesGacha sSpeciesGachaBasicUltraRare[] = { - {0, SPECIES_TOGEPI}, - {1, SPECIES_CHARMANDER}, - {2, SPECIES_CYNDAQUIL}, - {3, SPECIES_TREECKO}, - {4, SPECIES_TORCHIC}, - {5, SPECIES_MUDKIP}, - {6, SPECIES_SQUIRTLE}, - {7, SPECIES_TOTODILE}, - {8, SPECIES_BULBASAUR}, - {9, SPECIES_CHIKORITA}, - {10, SPECIES_SHUCKLE} -}; - -static const SpeciesGacha sSpeciesGreatCommon[] = { - {0, SPECIES_JIGGLYPUFF}, - {1, SPECIES_CLEFAIRY}, - {2, SPECIES_KIRLIA}, - {3, SPECIES_ELECTRIKE}, - {4, SPECIES_SHUPPET}, - {5, SPECIES_DUSKULL}, - {6, SPECIES_SHELLDER}, - {7, SPECIES_MACHOP}, - {8, SPECIES_MANKEY}, - {9, SPECIES_GULPIN}, - {10, SPECIES_MAREEP}, - {11, SPECIES_PINECO}, - {12, SPECIES_REMORAID}, - {13, SPECIES_CARVANHA}, - {14, SPECIES_NUMEL}, - {15, SPECIES_CORPHISH}, - {16, SPECIES_SWABLU}, - {17, SPECIES_SLOWPOKE}, - {18, SPECIES_PIKACHU}, - {19, SPECIES_PSYDUCK}, - {20, SPECIES_GRIMER}, - {21, SPECIES_KRABBY}, - {22, SPECIES_EXEGGCUTE}, - {23, SPECIES_VOLTORB}, - {24, SPECIES_NATU}, - {25, SPECIES_PHANPY}, - {26, SPECIES_ARON}, - {27, SPECIES_SPOINK}, - {28, SPECIES_TENTACOOL}, - {29, SPECIES_KOFFING}, - {30, SPECIES_SKIPLOOM}, - {31, SPECIES_LOMBRE}, - {32, SPECIES_NUZLEAF}, - {33, SPECIES_RHYHORN}, - {34, SPECIES_CLAMPERL}, - {35, SPECIES_PIDGEOTTO}, - {36, SPECIES_ELEKID}, - {37, SPECIES_LOUDRED}, - {38, SPECIES_NIDORINA}, - {39, SPECIES_NIDORINO}, - {40, SPECIES_MAGBY}, - {41, SPECIES_POLIWHIRL}, - {42, SPECIES_ONIX}, - {43, SPECIES_GRAVELER}, - {44, SPECIES_GLOOM}, - {45, SPECIES_PLUSLE}, - {46, SPECIES_MINUN}, - {47, SPECIES_PONYTA}, - {48, SPECIES_FURRET}, - {49, SPECIES_LINOONE}, - {50, SPECIES_SUNFLORA}, - {51, SPECIES_CHIMECHO}, - {52, SPECIES_QUAGSIRE}, - {53, SPECIES_TAILLOW}, - {54, SPECIES_PELIPPER}, - {55, SPECIES_PERSIAN}, - {56, SPECIES_SEADRA}, - {57, SPECIES_NOCTOWL}, - {58, SPECIES_SANDSLASH}, - {59, SPECIES_VENOMOTH}, - {60, SPECIES_SEAKING}, - {61, SPECIES_GOLBAT}, - {62, SPECIES_TYROGUE}, - {63, SPECIES_TORKOAL}, - {64, SPECIES_ELECTRODE} -}; - -static const SpeciesGacha sSpeciesGreatUncommon[] = { - {0, SPECIES_FEEBAS}, - {1, SPECIES_BALTOY}, - {2, SPECIES_SNORUNT}, - {3, SPECIES_DODUO}, - {4, SPECIES_GASTLY}, - {5, SPECIES_ABRA}, - {6, SPECIES_CUBONE}, - {7, SPECIES_MAGNEMITE}, - {8, SPECIES_SEEL}, - {9, SPECIES_DROWZEE}, - {10, SPECIES_CHINCHOU}, - {11, SPECIES_TEDDIURSA}, - {12, SPECIES_HOUNDOUR}, - {13, SPECIES_CACNEA}, - {14, SPECIES_GROWLITHE}, - {15, SPECIES_SPINDA}, - {16, SPECIES_FLAAFFY}, - {17, SPECIES_CORSOLA}, - {18, SPECIES_DELCATTY}, - {19, SPECIES_DUSTOX}, - {20, SPECIES_WEEPINBELL}, - {21, SPECIES_LEDIAN}, - {22, SPECIES_ARIADOS}, - {23, SPECIES_BUTTERFREE}, - {24, SPECIES_BEEDRILL}, - {25, SPECIES_BEAUTIFLY}, - {26, SPECIES_VOLBEAT}, - {27, SPECIES_ILLUMISE}, - {28, SPECIES_ROSELIA}, - {29, SPECIES_WAILMER}, - {30, SPECIES_MACHOKE}, - {31, SPECIES_MURKROW}, - {32, SPECIES_MAGCARGO}, - {33, SPECIES_RATICATE}, - {34, SPECIES_MASQUERAIN}, - {35, SPECIES_MIGHTYENA}, - {36, SPECIES_CASTFORM}, - {37, SPECIES_GLIGAR}, - {38, SPECIES_QWILFISH}, - {39, SPECIES_TANGELA}, - {40, SPECIES_VIGOROTH}, - {41, SPECIES_FEAROW}, - {42, SPECIES_PILOSWINE}, - {43, SPECIES_PRIMEAPE}, - {44, SPECIES_BRELOOM}, - {45, SPECIES_TROPIUS}, - {46, SPECIES_STANTLER}, - {47, SPECIES_SWALOT}, - {48, SPECIES_XATU}, - {49, SPECIES_GRUMPIG}, - {50, SPECIES_HARIYAMA}, - {51, SPECIES_GOLDUCK} -}; - -static const SpeciesGacha sSpeciesGreatRare[] = { - {0, SPECIES_DRATINI}, - {1, SPECIES_LARVITAR}, - {2, SPECIES_BAGON}, - {3, SPECIES_TOGEPI}, - {4, SPECIES_CHARMANDER}, - {5, SPECIES_CYNDAQUIL}, - {6, SPECIES_TREECKO}, - {7, SPECIES_TORCHIC}, - {8, SPECIES_MUDKIP}, - {9, SPECIES_SQUIRTLE}, - {10, SPECIES_TOTODILE}, - {11, SPECIES_BULBASAUR}, - {12, SPECIES_CHIKORITA}, - {13, SPECIES_LUVDISC}, - {14, SPECIES_STARYU}, - {15, SPECIES_VIBRAVA}, - {16, SPECIES_FARFETCHD}, - {17, SPECIES_AIPOM}, - {18, SPECIES_NOSEPASS}, - {19, SPECIES_SABLEYE}, - {20, SPECIES_MAWILE}, - {21, SPECIES_YANMA}, - {22, SPECIES_KADABRA}, - {23, SPECIES_DUGTRIO}, - {24, SPECIES_HAUNTER}, - {25, SPECIES_SUDOWOODO}, - {26, SPECIES_KECLEON}, - {27, SPECIES_MEDICHAM}, - {28, SPECIES_SEALEO}, - {29, SPECIES_DUNSPARCE}, - {30, SPECIES_SNEASEL}, - {31, SPECIES_ZANGOOSE}, - {32, SPECIES_SEVIPER}, - {33, SPECIES_MANTINE}, - {34, SPECIES_SKARMORY}, - {35, SPECIES_OCTILLERY}, - {36, SPECIES_RELICANTH}, - {37, SPECIES_MILTANK}, - {38, SPECIES_SCYTHER}, - {39, SPECIES_PINSIR}, - {40, SPECIES_SHUCKLE} -}; - -static const SpeciesGacha sSpeciesGreatUltraRare[] = { - {0, SPECIES_WYNAUT}, - {1, SPECIES_DELIBIRD}, - {2, SPECIES_PORYGON}, - {3, SPECIES_IVYSAUR}, - {4, SPECIES_CHARMELEON}, - {5, SPECIES_WARTORTLE}, - {6, SPECIES_BAYLEEF}, - {7, SPECIES_QUILAVA}, - {8, SPECIES_CROCONAW}, - {9, SPECIES_GROVYLE}, - {10, SPECIES_COMBUSKEN}, - {11, SPECIES_MARSHTOMP}, - {12, SPECIES_PUPITAR}, - {13, SPECIES_DRAGONAIR}, - {14, SPECIES_SHELGON}, - {15, SPECIES_METANG}, - {16, SPECIES_MR_MIME}, - {17, SPECIES_HERACROSS} -}; - -static const SpeciesGacha sSpeciesUltraCommon[] = { - {0, SPECIES_KRABBY}, - {1, SPECIES_EXEGGCUTE}, - {2, SPECIES_MAGNEMITE}, - {3, SPECIES_TEDDIURSA}, - {4, SPECIES_ARIADOS}, - {5, SPECIES_PARASECT}, - {6, SPECIES_DUGTRIO}, - {7, SPECIES_SUDOWOODO}, - {8, SPECIES_MAGCARGO}, - {9, SPECIES_MEDICHAM}, - {10, SPECIES_SEALEO}, - {11, SPECIES_MASQUERAIN}, - {12, SPECIES_MIGHTYENA}, - {13, SPECIES_LINOONE}, - {14, SPECIES_CASTFORM}, - {15, SPECIES_SUNFLORA}, - {16, SPECIES_CHIMECHO}, - {17, SPECIES_SWELLOW}, - {18, SPECIES_PELIPPER}, - {19, SPECIES_LAIRON}, - {20, SPECIES_WIGGLYTUFF}, - {21, SPECIES_ARBOK}, - {22, SPECIES_KECLEON}, - {23, SPECIES_FEAROW}, - {24, SPECIES_SANDSLASH}, - {25, SPECIES_SEAKING}, - {26, SPECIES_NINJASK}, - {27, SPECIES_ZANGOOSE}, - {28, SPECIES_SEVIPER}, - {29, SPECIES_DODRIO}, - {30, SPECIES_LANTURN}, - {31, SPECIES_JUMPLUFF}, - {32, SPECIES_BRELOOM}, - {33, SPECIES_SHARPEDO}, - {34, SPECIES_CAMERUPT}, - {35, SPECIES_SWALOT}, - {36, SPECIES_CRAWDAUNT}, - {37, SPECIES_XATU}, - {38, SPECIES_TORKOAL}, - {39, SPECIES_GRUMPIG}, - {40, SPECIES_HARIYAMA}, - {41, SPECIES_KINGLER}, - {42, SPECIES_PIDGEOT}, - {43, SPECIES_CLEFABLE}, - {44, SPECIES_HYPNO}, - {45, SPECIES_RAICHU}, - {46, SPECIES_RHYDON}, - {47, SPECIES_VILEPLUME}, - {48, SPECIES_VICTREEBEL}, - {49, SPECIES_BELLOSSOM}, - {50, SPECIES_MILTANK}, - {51, SPECIES_GOLEM}, - {52, SPECIES_GOLDUCK}, - {53, SPECIES_RAPIDASH}, - {54, SPECIES_WAILORD}, - {55, SPECIES_NIDOQUEEN}, - {56, SPECIES_NIDOKING}, - {57, SPECIES_NINETALES}, - {58, SPECIES_MACHAMP}, - {59, SPECIES_POLIWRATH}, - {60, SPECIES_TENTACRUEL}, - {61, SPECIES_EXEGGUTOR}, - {62, SPECIES_CLOYSTER} -}; - -static const SpeciesGacha sSpeciesUltraUncommon[] = { - {0, SPECIES_DELIBIRD}, - {1, SPECIES_LICKITUNG}, - {2, SPECIES_YANMA}, - {3, SPECIES_PORYGON}, - {4, SPECIES_TOGETIC}, - {5, SPECIES_AZUMARILL}, - {6, SPECIES_MAROWAK}, - {7, SPECIES_LUNATONE}, - {8, SPECIES_SOLROCK}, - {9, SPECIES_GRANBULL}, - {10, SPECIES_HITMONLEE}, - {11, SPECIES_HITMONCHAN}, - {12, SPECIES_HITMONTOP}, - {13, SPECIES_BANETTE}, - {14, SPECIES_DUSCLOPS}, - {15, SPECIES_MR_MIME}, - {16, SPECIES_TROPIUS}, - {17, SPECIES_MAGNETON}, - {18, SPECIES_MANTINE}, - {19, SPECIES_SKARMORY}, - {20, SPECIES_WHISCASH}, - {21, SPECIES_DEWGONG}, - {22, SPECIES_MANECTRIC}, - {23, SPECIES_OCTILLERY}, - {24, SPECIES_GLALIE}, - {25, SPECIES_SLOWBRO}, - {26, SPECIES_WEEZING}, - {27, SPECIES_ELECTABUZZ}, - {28, SPECIES_SLOWKING}, - {29, SPECIES_EXPLOUD}, - {30, SPECIES_MAGMAR}, - {31, SPECIES_MUK}, - {32, SPECIES_SCYTHER}, - {33, SPECIES_PINSIR}, - {34, SPECIES_URSARING}, - {35, SPECIES_HOUNDOOM}, - {36, SPECIES_CLAYDOL}, - {37, SPECIES_AMPHAROS}, - {38, SPECIES_GARDEVOIR}, - {39, SPECIES_ABSOL}, - {40, SPECIES_CACTURNE}, - {41, SPECIES_LUDICOLO}, - {42, SPECIES_SHIFTRY}, - {43, SPECIES_POLITOED}, - {44, SPECIES_SCIZOR}, - {45, SPECIES_HERACROSS}, - {46, SPECIES_STEELIX}, - {47, SPECIES_ALTARIA}, - {48, SPECIES_RELICANTH}, - {49, SPECIES_HUNTAIL}, - {50, SPECIES_GOREBYSS} -}; - -static const SpeciesGacha sSpeciesUltraRare[] = { - {0, SPECIES_DITTO}, - {1, SPECIES_EEVEE}, - {2, SPECIES_OMANYTE}, - {3, SPECIES_KABUTO}, - {4, SPECIES_LILEEP}, - {5, SPECIES_ANORITH}, - {6, SPECIES_WOBBUFFET}, - {7, SPECIES_PUPITAR}, - {8, SPECIES_DUNSPARCE}, - {9, SPECIES_DRAGONAIR}, - {10, SPECIES_SHELGON}, - {11, SPECIES_METANG}, - {12, SPECIES_MISDREAVUS}, - {13, SPECIES_KANGASKHAN}, - {14, SPECIES_TAUROS}, - {15, SPECIES_ALAKAZAM}, - {16, SPECIES_GENGAR}, - {17, SPECIES_STARMIE}, - {18, SPECIES_FLYGON}, - {19, SPECIES_VAPOREON}, - {20, SPECIES_JOLTEON}, - {21, SPECIES_FLAREON}, - {22, SPECIES_AGGRON}, - {23, SPECIES_WALREIN}, - {24, SPECIES_CROBAT}, - {25, SPECIES_GYARADOS}, - {26, SPECIES_KINGDRA}, - {27, SPECIES_MILOTIC} -}; - -static const SpeciesGacha sSpeciesUltraUltraRare[] = { - {0, SPECIES_SHEDINJA}, - {1, SPECIES_SMEARGLE}, - {2, SPECIES_CHANSEY}, - {3, SPECIES_OMASTAR}, - {4, SPECIES_KABUTOPS}, - {5, SPECIES_CRADILY}, - {6, SPECIES_ARMALDO}, - {7, SPECIES_AERODACTYL}, - {8, SPECIES_PORYGON2}, - {9, SPECIES_VENUSAUR}, - {10, SPECIES_MEGANIUM}, - {11, SPECIES_ESPEON}, - {12, SPECIES_UMBREON}, - {13, SPECIES_BLASTOISE}, - {14, SPECIES_FERALIGATR}, - {15, SPECIES_SCEPTILE}, - {16, SPECIES_BLAZIKEN}, - {17, SPECIES_SWAMPERT}, - {18, SPECIES_CHARIZARD}, - {19, SPECIES_TYPHLOSION}, - {20, SPECIES_LAPRAS}, - {21, SPECIES_SNORLAX}, - {22, SPECIES_ARCANINE}, - {23, SPECIES_DRAGONITE}, - {24, SPECIES_TYRANITAR}, - {25, SPECIES_SALAMENCE}, - {26, SPECIES_METAGROSS}, - {27, SPECIES_SLAKING} -}; - -static const SpeciesGacha sSpeciesMasterCommon[] = { - {0, SPECIES_DITTO}, - {1, SPECIES_METANG}, - {2, SPECIES_SHELGON}, - {3, SPECIES_PUPITAR}, - {4, SPECIES_DRAGONAIR}, - {5, SPECIES_FLYGON}, - {6, SPECIES_VENUSAUR}, - {7, SPECIES_VAPOREON}, - {8, SPECIES_JOLTEON}, - {9, SPECIES_FLAREON}, - {10, SPECIES_MEGANIUM}, - {11, SPECIES_BLASTOISE}, - {12, SPECIES_FERALIGATR}, - {13, SPECIES_SCEPTILE}, - {14, SPECIES_BLAZIKEN}, - {15, SPECIES_SWAMPERT}, - {16, SPECIES_CHARIZARD}, - {17, SPECIES_TYPHLOSION} -}; - -static const SpeciesGacha sSpeciesMasterUncommon[] = { - {0, SPECIES_OMASTAR}, - {1, SPECIES_KABUTOPS}, - {2, SPECIES_CRADILY}, - {3, SPECIES_ARMALDO}, - {4, SPECIES_SHUCKLE}, - {5, SPECIES_AERODACTYL}, - {6, SPECIES_ESPEON}, - {7, SPECIES_UMBREON}, - {8, SPECIES_LAPRAS}, - {9, SPECIES_SNORLAX}, - {10, SPECIES_DRAGONITE}, - {11, SPECIES_SALAMENCE}, - {12, SPECIES_METAGROSS}, - {13, SPECIES_SHEDINJA}, - {14, SPECIES_SMEARGLE}, - {15, SPECIES_UNOWN}, - {16, SPECIES_BLISSEY} -}; - -static const SpeciesGacha sSpeciesMasterRare[] = { - {0, SPECIES_ARTICUNO}, - {1, SPECIES_ZAPDOS}, - {2, SPECIES_MOLTRES}, - {3, SPECIES_RAIKOU}, - {4, SPECIES_ENTEI}, - {5, SPECIES_SUICUNE}, - {6, SPECIES_REGIROCK}, - {7, SPECIES_REGICE}, - {8, SPECIES_REGISTEEL}, - {9, SPECIES_LATIAS}, - {10, SPECIES_LATIOS} -}; - -static const SpeciesGacha sSpeciesMasterUltraRare[] = { - {0, SPECIES_MEW}, - {1, SPECIES_CELEBI}, - {2, SPECIES_JIRACHI}, - {3, SPECIES_DEOXYS}, - {4, SPECIES_KYOGRE}, - {5, SPECIES_GROUDON}, - {6, SPECIES_MEWTWO}, - {7, SPECIES_LUGIA}, - {8, SPECIES_HO_OH}, - {9, SPECIES_RAYQUAZA} +static const u16 sGachaBasicSpeciesCommon[] = { + SPECIES_SUNKERN, + SPECIES_AZURILL, + SPECIES_CATERPIE, + SPECIES_WURMPLE, + SPECIES_IGGLYBUFF, + SPECIES_WOOPER, + SPECIES_MAGIKARP, + SPECIES_SENTRET, + SPECIES_CLEFFA, + SPECIES_POOCHYENA, + SPECIES_LOTAD, + SPECIES_SEEDOT, + SPECIES_ZIGZAGOON, + SPECIES_WHISMUR, + SPECIES_ZUBAT, + SPECIES_SPINARAK, + SPECIES_HOPPIP, + SPECIES_PIDGEY, + SPECIES_RATTATA, + SPECIES_SPEAROW, + SPECIES_HOOTHOOT, + SPECIES_LEDYBA, + SPECIES_SURSKIT, + SPECIES_TAILLOW, + SPECIES_WINGULL, + SPECIES_NIDORAN_M, + SPECIES_NIDORAN_F, + SPECIES_PARAS, + SPECIES_SHROOMISH, + SPECIES_POLIWAG, + SPECIES_BELLSPROUT, + SPECIES_VENONAT, + SPECIES_SMOOCHUM, + SPECIES_ODDISH, + SPECIES_PSYDUCK, + SPECIES_GOLDEEN, + SPECIES_FEEBAS +}; + +static const u16 sGachaBasicSpeciesUncommon[] = { + SPECIES_METAPOD, + SPECIES_KAKUNA, + SPECIES_PICHU, + SPECIES_SILCOON, + SPECIES_CASCOON, + SPECIES_MAKUHITA, + SPECIES_MARILL, + SPECIES_SLUGMA, + SPECIES_SWINUB, + SPECIES_DIGLETT, + SPECIES_MAREEP, + SPECIES_MEDITITE, + SPECIES_EKANS, + SPECIES_BARBOACH, + SPECIES_HORSEA, + SPECIES_SANDSHREW, + SPECIES_GEODUDE, + SPECIES_GULPIN, + SPECIES_MANKEY, + SPECIES_MACHOP, + SPECIES_SHELLDER, + SPECIES_GRIMER, + SPECIES_VOLTORB, + SPECIES_PLUSLE, + SPECIES_MINUN, + SPECIES_NATU, + SPECIES_NINCADA, + SPECIES_SPOINK +}; + +static const u16 sGachaBasicSpeciesRare[] = { + SPECIES_RALTS, + SPECIES_TYROGUE, + SPECIES_SKITTY, + SPECIES_SLAKOTH, + SPECIES_MEOWTH, + SPECIES_PINECO, + SPECIES_TRAPINCH, + SPECIES_SPHEAL, + SPECIES_VULPIX, + SPECIES_SNUBBULL, + SPECIES_REMORAID, + SPECIES_CORPHISH, + SPECIES_ABRA, + SPECIES_ELEKID, + SPECIES_MAGBY, + SPECIES_CORSOLA +}; + +static const u16 sGachaBasicSpeciesUltraRare[] = { + SPECIES_TOGEPI, + SPECIES_CHARMANDER, + SPECIES_CYNDAQUIL, + SPECIES_TREECKO, + SPECIES_TORCHIC, + SPECIES_MUDKIP, + SPECIES_SQUIRTLE, + SPECIES_TOTODILE, + SPECIES_BULBASAUR, + SPECIES_CHIKORITA, + SPECIES_SHUCKLE +}; + +static const u16 sGachaGreatSpeciesCommon[] = { + SPECIES_JIGGLYPUFF, + SPECIES_CLEFAIRY, + SPECIES_KIRLIA, + SPECIES_ELECTRIKE, + SPECIES_SHUPPET, + SPECIES_DUSKULL, + SPECIES_SHELLDER, + SPECIES_MACHOP, + SPECIES_MANKEY, + SPECIES_GULPIN, + SPECIES_MAREEP, + SPECIES_PINECO, + SPECIES_REMORAID, + SPECIES_CARVANHA, + SPECIES_NUMEL, + SPECIES_CORPHISH, + SPECIES_SWABLU, + SPECIES_SLOWPOKE, + SPECIES_PIKACHU, + SPECIES_PSYDUCK, + SPECIES_GRIMER, + SPECIES_KRABBY, + SPECIES_EXEGGCUTE, + SPECIES_VOLTORB, + SPECIES_NATU, + SPECIES_PHANPY, + SPECIES_ARON, + SPECIES_SPOINK, + SPECIES_TENTACOOL, + SPECIES_KOFFING, + SPECIES_SKIPLOOM, + SPECIES_LOMBRE, + SPECIES_NUZLEAF, + SPECIES_RHYHORN, + SPECIES_CLAMPERL, + SPECIES_PIDGEOTTO, + SPECIES_ELEKID, + SPECIES_LOUDRED, + SPECIES_NIDORINA, + SPECIES_NIDORINO, + SPECIES_MAGBY, + SPECIES_POLIWHIRL, + SPECIES_ONIX, + SPECIES_GRAVELER, + SPECIES_GLOOM, + SPECIES_PLUSLE, + SPECIES_MINUN, + SPECIES_PONYTA, + SPECIES_FURRET, + SPECIES_LINOONE, + SPECIES_SUNFLORA, + SPECIES_CHIMECHO, + SPECIES_QUAGSIRE, + SPECIES_TAILLOW, + SPECIES_PELIPPER, + SPECIES_PERSIAN, + SPECIES_SEADRA, + SPECIES_NOCTOWL, + SPECIES_SANDSLASH, + SPECIES_VENOMOTH, + SPECIES_SEAKING, + SPECIES_GOLBAT, + SPECIES_TYROGUE, + SPECIES_TORKOAL, + SPECIES_ELECTRODE +}; + +static const u16 sGachaGreatSpeciesUncommon[] = { + SPECIES_FEEBAS, + SPECIES_BALTOY, + SPECIES_SNORUNT, + SPECIES_DODUO, + SPECIES_GASTLY, + SPECIES_ABRA, + SPECIES_CUBONE, + SPECIES_MAGNEMITE, + SPECIES_SEEL, + SPECIES_DROWZEE, + SPECIES_CHINCHOU, + SPECIES_TEDDIURSA, + SPECIES_HOUNDOUR, + SPECIES_CACNEA, + SPECIES_GROWLITHE, + SPECIES_SPINDA, + SPECIES_FLAAFFY, + SPECIES_CORSOLA, + SPECIES_DELCATTY, + SPECIES_DUSTOX, + SPECIES_WEEPINBELL, + SPECIES_LEDIAN, + SPECIES_ARIADOS, + SPECIES_BUTTERFREE, + SPECIES_BEEDRILL, + SPECIES_BEAUTIFLY, + SPECIES_VOLBEAT, + SPECIES_ILLUMISE, + SPECIES_ROSELIA, + SPECIES_WAILMER, + SPECIES_MACHOKE, + SPECIES_MURKROW, + SPECIES_MAGCARGO, + SPECIES_RATICATE, + SPECIES_MASQUERAIN, + SPECIES_MIGHTYENA, + SPECIES_CASTFORM, + SPECIES_GLIGAR, + SPECIES_QWILFISH, + SPECIES_TANGELA, + SPECIES_VIGOROTH, + SPECIES_FEAROW, + SPECIES_PILOSWINE, + SPECIES_PRIMEAPE, + SPECIES_BRELOOM, + SPECIES_TROPIUS, + SPECIES_STANTLER, + SPECIES_SWALOT, + SPECIES_XATU, + SPECIES_GRUMPIG, + SPECIES_HARIYAMA, + SPECIES_GOLDUCK +}; + +static const u16 sGachaGreatSpeciesRare[] = { + SPECIES_DRATINI, + SPECIES_LARVITAR, + SPECIES_BAGON, + SPECIES_TOGEPI, + SPECIES_CHARMANDER, + SPECIES_CYNDAQUIL, + SPECIES_TREECKO, + SPECIES_TORCHIC, + SPECIES_MUDKIP, + SPECIES_SQUIRTLE, + SPECIES_TOTODILE, + SPECIES_BULBASAUR, + SPECIES_CHIKORITA, + SPECIES_LUVDISC, + SPECIES_STARYU, + SPECIES_VIBRAVA, + SPECIES_FARFETCHD, + SPECIES_AIPOM, + SPECIES_NOSEPASS, + SPECIES_SABLEYE, + SPECIES_MAWILE, + SPECIES_YANMA, + SPECIES_KADABRA, + SPECIES_DUGTRIO, + SPECIES_HAUNTER, + SPECIES_SUDOWOODO, + SPECIES_KECLEON, + SPECIES_MEDICHAM, + SPECIES_SEALEO, + SPECIES_DUNSPARCE, + SPECIES_SNEASEL, + SPECIES_ZANGOOSE, + SPECIES_SEVIPER, + SPECIES_MANTINE, + SPECIES_SKARMORY, + SPECIES_OCTILLERY, + SPECIES_RELICANTH, + SPECIES_MILTANK, + SPECIES_SCYTHER, + SPECIES_PINSIR, + SPECIES_SHUCKLE +}; + +static const u16 sGachaGreatSpeciesUltraRare[] = { + SPECIES_WYNAUT, + SPECIES_DELIBIRD, + SPECIES_PORYGON, + SPECIES_IVYSAUR, + SPECIES_CHARMELEON, + SPECIES_WARTORTLE, + SPECIES_BAYLEEF, + SPECIES_QUILAVA, + SPECIES_CROCONAW, + SPECIES_GROVYLE, + SPECIES_COMBUSKEN, + SPECIES_MARSHTOMP, + SPECIES_PUPITAR, + SPECIES_DRAGONAIR, + SPECIES_SHELGON, + SPECIES_METANG, + SPECIES_MR_MIME, + SPECIES_HERACROSS +}; + +static const u16 sGachaUltraSpeciesCommon[] = { + SPECIES_KRABBY, + SPECIES_EXEGGCUTE, + SPECIES_MAGNEMITE, + SPECIES_TEDDIURSA, + SPECIES_ARIADOS, + SPECIES_PARASECT, + SPECIES_DUGTRIO, + SPECIES_SUDOWOODO, + SPECIES_MAGCARGO, + SPECIES_MEDICHAM, + SPECIES_SEALEO, + SPECIES_MASQUERAIN, + SPECIES_MIGHTYENA, + SPECIES_LINOONE, + SPECIES_CASTFORM, + SPECIES_SUNFLORA, + SPECIES_CHIMECHO, + SPECIES_SWELLOW, + SPECIES_PELIPPER, + SPECIES_LAIRON, + SPECIES_WIGGLYTUFF, + SPECIES_ARBOK, + SPECIES_KECLEON, + SPECIES_FEAROW, + SPECIES_SANDSLASH, + SPECIES_SEAKING, + SPECIES_NINJASK, + SPECIES_ZANGOOSE, + SPECIES_SEVIPER, + SPECIES_DODRIO, + SPECIES_LANTURN, + SPECIES_JUMPLUFF, + SPECIES_BRELOOM, + SPECIES_SHARPEDO, + SPECIES_CAMERUPT, + SPECIES_SWALOT, + SPECIES_CRAWDAUNT, + SPECIES_XATU, + SPECIES_TORKOAL, + SPECIES_GRUMPIG, + SPECIES_HARIYAMA, + SPECIES_KINGLER, + SPECIES_PIDGEOT, + SPECIES_CLEFABLE, + SPECIES_HYPNO, + SPECIES_RAICHU, + SPECIES_RHYDON, + SPECIES_VILEPLUME, + SPECIES_VICTREEBEL, + SPECIES_BELLOSSOM, + SPECIES_MILTANK, + SPECIES_GOLEM, + SPECIES_GOLDUCK, + SPECIES_RAPIDASH, + SPECIES_WAILORD, + SPECIES_NIDOQUEEN, + SPECIES_NIDOKING, + SPECIES_NINETALES, + SPECIES_MACHAMP, + SPECIES_POLIWRATH, + SPECIES_TENTACRUEL, + SPECIES_EXEGGUTOR, + SPECIES_CLOYSTER +}; + +static const u16 sGachaUltraSpeciesUncommon[] = { + SPECIES_DELIBIRD, + SPECIES_LICKITUNG, + SPECIES_YANMA, + SPECIES_PORYGON, + SPECIES_TOGETIC, + SPECIES_AZUMARILL, + SPECIES_MAROWAK, + SPECIES_LUNATONE, + SPECIES_SOLROCK, + SPECIES_GRANBULL, + SPECIES_HITMONLEE, + SPECIES_HITMONCHAN, + SPECIES_HITMONTOP, + SPECIES_BANETTE, + SPECIES_DUSCLOPS, + SPECIES_MR_MIME, + SPECIES_TROPIUS, + SPECIES_MAGNETON, + SPECIES_MANTINE, + SPECIES_SKARMORY, + SPECIES_WHISCASH, + SPECIES_DEWGONG, + SPECIES_MANECTRIC, + SPECIES_OCTILLERY, + SPECIES_GLALIE, + SPECIES_SLOWBRO, + SPECIES_WEEZING, + SPECIES_ELECTABUZZ, + SPECIES_SLOWKING, + SPECIES_EXPLOUD, + SPECIES_MAGMAR, + SPECIES_MUK, + SPECIES_SCYTHER, + SPECIES_PINSIR, + SPECIES_URSARING, + SPECIES_HOUNDOOM, + SPECIES_CLAYDOL, + SPECIES_AMPHAROS, + SPECIES_GARDEVOIR, + SPECIES_ABSOL, + SPECIES_CACTURNE, + SPECIES_LUDICOLO, + SPECIES_SHIFTRY, + SPECIES_POLITOED, + SPECIES_SCIZOR, + SPECIES_HERACROSS, + SPECIES_STEELIX, + SPECIES_ALTARIA, + SPECIES_RELICANTH, + SPECIES_HUNTAIL, + SPECIES_GOREBYSS +}; + +static const u16 sGachaUltraSpeciesRare[] = { + SPECIES_DITTO, + SPECIES_EEVEE, + SPECIES_OMANYTE, + SPECIES_KABUTO, + SPECIES_LILEEP, + SPECIES_ANORITH, + SPECIES_WOBBUFFET, + SPECIES_PUPITAR, + SPECIES_DUNSPARCE, + SPECIES_DRAGONAIR, + SPECIES_SHELGON, + SPECIES_METANG, + SPECIES_MISDREAVUS, + SPECIES_KANGASKHAN, + SPECIES_TAUROS, + SPECIES_ALAKAZAM, + SPECIES_GENGAR, + SPECIES_STARMIE, + SPECIES_FLYGON, + SPECIES_VAPOREON, + SPECIES_JOLTEON, + SPECIES_FLAREON, + SPECIES_AGGRON, + SPECIES_WALREIN, + SPECIES_CROBAT, + SPECIES_GYARADOS, + SPECIES_KINGDRA, + SPECIES_MILOTIC +}; + +static const u16 sGachaUltraSpeciesUltraRare[] = { + SPECIES_SHEDINJA, + SPECIES_SMEARGLE, + SPECIES_CHANSEY, + SPECIES_OMASTAR, + SPECIES_KABUTOPS, + SPECIES_CRADILY, + SPECIES_ARMALDO, + SPECIES_AERODACTYL, + SPECIES_PORYGON2, + SPECIES_VENUSAUR, + SPECIES_MEGANIUM, + SPECIES_ESPEON, + SPECIES_UMBREON, + SPECIES_BLASTOISE, + SPECIES_FERALIGATR, + SPECIES_SCEPTILE, + SPECIES_BLAZIKEN, + SPECIES_SWAMPERT, + SPECIES_CHARIZARD, + SPECIES_TYPHLOSION, + SPECIES_LAPRAS, + SPECIES_SNORLAX, + SPECIES_ARCANINE, + SPECIES_DRAGONITE, + SPECIES_TYRANITAR, + SPECIES_SALAMENCE, + SPECIES_METAGROSS, + SPECIES_SLAKING +}; + +static const u16 sGachaMasterSpeciesCommon[] = { + SPECIES_DITTO, + SPECIES_METANG, + SPECIES_SHELGON, + SPECIES_PUPITAR, + SPECIES_DRAGONAIR, + SPECIES_FLYGON, + SPECIES_VENUSAUR, + SPECIES_VAPOREON, + SPECIES_JOLTEON, + SPECIES_FLAREON, + SPECIES_MEGANIUM, + SPECIES_BLASTOISE, + SPECIES_FERALIGATR, + SPECIES_SCEPTILE, + SPECIES_BLAZIKEN, + SPECIES_SWAMPERT, + SPECIES_CHARIZARD, + SPECIES_TYPHLOSION +}; + +static const u16 sGachaMasterSpeciesUncommon[] = { + SPECIES_OMASTAR, + SPECIES_KABUTOPS, + SPECIES_CRADILY, + SPECIES_ARMALDO, + SPECIES_SHUCKLE, + SPECIES_AERODACTYL, + SPECIES_ESPEON, + SPECIES_UMBREON, + SPECIES_LAPRAS, + SPECIES_SNORLAX, + SPECIES_DRAGONITE, + SPECIES_SALAMENCE, + SPECIES_METAGROSS, + SPECIES_SHEDINJA, + SPECIES_SMEARGLE, + SPECIES_UNOWN, + SPECIES_BLISSEY +}; + +static const u16 sGachaMasterSpeciesRare[] = { + SPECIES_ARTICUNO, + SPECIES_ZAPDOS, + SPECIES_MOLTRES, + SPECIES_RAIKOU, + SPECIES_ENTEI, + SPECIES_SUICUNE, + SPECIES_REGIROCK, + SPECIES_REGICE, + SPECIES_REGISTEEL, + SPECIES_LATIAS, + SPECIES_LATIOS +}; + +static const u16 sGachaMasterSpeciesUltraRare[] = { + SPECIES_MEW, + SPECIES_CELEBI, + SPECIES_JIRACHI, + SPECIES_DEOXYS, + SPECIES_KYOGRE, + SPECIES_GROUDON, + SPECIES_MEWTWO, + SPECIES_LUGIA, + SPECIES_HO_OH, + SPECIES_RAYQUAZA }; static void ShowMessage(void) @@ -2226,58 +2222,58 @@ static u16 GetMaxAvailableGachaRaritySpecies(u32 gachaId, u32 rarity) { default: case RARITY_COMMON: - return ARRAY_COUNT(sSpeciesGachaBasicCommon); + return ARRAY_COUNT(sGachaBasicSpeciesCommon); case RARITY_UNCOMMON: - return ARRAY_COUNT(sSpeciesGachaBasicUncommon); + return ARRAY_COUNT(sGachaBasicSpeciesUncommon); case RARITY_RARE: - return ARRAY_COUNT(sSpeciesGachaBasicRare); + return ARRAY_COUNT(sGachaBasicSpeciesRare); case RARITY_ULTRA_RARE: - return ARRAY_COUNT(sSpeciesGachaBasicUltraRare); + return ARRAY_COUNT(sGachaBasicSpeciesUltraRare); } case GACHA_GREAT: switch (rarity) { default: case RARITY_COMMON: - return ARRAY_COUNT(sSpeciesGreatCommon); + return ARRAY_COUNT(sGachaGreatSpeciesCommon); case RARITY_UNCOMMON: - return ARRAY_COUNT(sSpeciesGreatUncommon); + return ARRAY_COUNT(sGachaGreatSpeciesUncommon); case RARITY_RARE: - return ARRAY_COUNT(sSpeciesGreatRare); + return ARRAY_COUNT(sGachaGreatSpeciesRare); case RARITY_ULTRA_RARE: - return ARRAY_COUNT(sSpeciesGreatUltraRare); + return ARRAY_COUNT(sGachaGreatSpeciesUltraRare); } case GACHA_ULTRA: switch (rarity) { default: case RARITY_COMMON: - return ARRAY_COUNT(sSpeciesUltraCommon); + return ARRAY_COUNT(sGachaUltraSpeciesCommon); case RARITY_UNCOMMON: - return ARRAY_COUNT(sSpeciesUltraUncommon); + return ARRAY_COUNT(sGachaUltraSpeciesUncommon); case RARITY_RARE: - return ARRAY_COUNT(sSpeciesUltraRare); + return ARRAY_COUNT(sGachaUltraSpeciesRare); case RARITY_ULTRA_RARE: - return ARRAY_COUNT(sSpeciesUltraUltraRare); + return ARRAY_COUNT(sGachaUltraSpeciesUltraRare); } case GACHA_MASTER: switch (rarity) { default: case RARITY_COMMON: - return ARRAY_COUNT(sSpeciesMasterCommon); + return ARRAY_COUNT(sGachaMasterSpeciesCommon); case RARITY_UNCOMMON: - return ARRAY_COUNT(sSpeciesMasterUncommon); + return ARRAY_COUNT(sGachaMasterSpeciesUncommon); case RARITY_RARE: - return ARRAY_COUNT(sSpeciesMasterRare); + return ARRAY_COUNT(sGachaMasterSpeciesRare); case RARITY_ULTRA_RARE: - return ARRAY_COUNT(sSpeciesMasterUltraRare); + return ARRAY_COUNT(sGachaMasterSpeciesUltraRare); } } return 0; // failsafe } -u16 GetGachaBasicSpecies(u16 randNum) +static inline u16 GetGachaBasicSpecies(u16 randNum) { int i; u16 totalMax; @@ -2294,39 +2290,19 @@ u16 GetGachaBasicSpecies(u16 randNum) { default: case RARITY_COMMON: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesGachaBasicCommon[i].customNumber == randNum) - return sSpeciesGachaBasicCommon[i].species; - } - break; + return sGachaBasicSpeciesCommon[randNum]; case RARITY_UNCOMMON: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesGachaBasicUncommon[i].customNumber == randNum) - return sSpeciesGachaBasicUncommon[i].species; - } - break; + return sGachaBasicSpeciesUncommon[randNum]; case RARITY_RARE: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesGachaBasicRare[i].customNumber == randNum) - return sSpeciesGachaBasicRare[i].species; - } - break; + return sGachaBasicSpeciesRare[randNum]; case RARITY_ULTRA_RARE: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesGachaBasicUltraRare[i].customNumber == randNum) - return sSpeciesGachaBasicUltraRare[i].species; - } - break; + return sGachaBasicSpeciesUltraRare[randNum]; } return -1; // Return -1 if customNumber is not found } -u16 GetGachaGreatSpecies(u16 randNum) +static inline u16 GetGachaGreatSpecies(u16 randNum) { int i; u16 totalMax = 0; @@ -2343,39 +2319,19 @@ u16 GetGachaGreatSpecies(u16 randNum) { default: case RARITY_COMMON: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesGreatCommon[i].customNumber == randNum) - return sSpeciesGreatCommon[i].species; - } - break; + return sGachaGreatSpeciesCommon[randNum]; case RARITY_UNCOMMON: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesGreatUncommon[i].customNumber == randNum) - return sSpeciesGreatUncommon[i].species; - } - break; + return sGachaGreatSpeciesUncommon[randNum]; case RARITY_RARE: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesGreatRare[i].customNumber == randNum) - return sSpeciesGreatRare[i].species; - } - break; + return sGachaGreatSpeciesRare[randNum]; case RARITY_ULTRA_RARE: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesGreatUltraRare[i].customNumber == randNum) - return sSpeciesGreatUltraRare[i].species; - } - break; + return sGachaGreatSpeciesUltraRare[randNum]; } return -1; // Return -1 if customNumber is not found } -u16 GetGachaUltraSpecies(u16 randNum) +static inline u16 GetGachaUltraSpecies(u16 randNum) { int i; u16 totalMax = 0; @@ -2392,39 +2348,19 @@ u16 GetGachaUltraSpecies(u16 randNum) { default: case RARITY_COMMON: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesUltraCommon[i].customNumber == randNum) - return sSpeciesUltraCommon[i].species; - } - break; + return sGachaUltraSpeciesCommon[randNum]; case RARITY_UNCOMMON: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesUltraUncommon[i].customNumber == randNum) - return sSpeciesUltraUncommon[i].species; - } - break; + return sGachaUltraSpeciesUncommon[randNum]; case RARITY_RARE: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesUltraRare[i].customNumber == randNum) - return sSpeciesUltraRare[i].species; - } - break; + return sGachaUltraSpeciesRare[randNum]; case RARITY_ULTRA_RARE: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesUltraUltraRare[i].customNumber == randNum) - return sSpeciesUltraUltraRare[i].species; - } - break; + return sGachaUltraSpeciesUltraRare[randNum]; } return -1; // Return -1 if customNumber is not found } -u16 GetGachaMasterSpecies(u16 randNum) +static inline u16 GetGachaMasterSpecies(u16 randNum) { int i; u16 totalMax = 0; @@ -2439,39 +2375,19 @@ u16 GetGachaMasterSpecies(u16 randNum) { default: case RARITY_COMMON: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesMasterCommon[i].customNumber == randNum) - return sSpeciesMasterCommon[i].species; - } - break; + return sGachaMasterSpeciesCommon[randNum]; case RARITY_UNCOMMON: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesMasterUncommon[i].customNumber == randNum) - return sSpeciesMasterUncommon[i].species; - } - break; + return sGachaMasterSpeciesUncommon[randNum]; case RARITY_RARE: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesMasterRare[i].customNumber == randNum) - return sSpeciesMasterRare[i].species; - } - break; + return sGachaMasterSpeciesRare[randNum]; case RARITY_ULTRA_RARE: - for (i = 0; i < totalMax; i++) - { - if (sSpeciesMasterUltraRare[i].customNumber == randNum) - return sSpeciesMasterUltraRare[i].species; - } - break; + return sGachaMasterSpeciesUltraRare[randNum]; } return -1; // Return -1 if customNumber is not found } -u16 GetGachaMon(u16 randNum) +static u16 GetGachaMon(u16 randNum) { u32 species; @@ -2504,14 +2420,14 @@ static inline bool32 CheckIfOwned(u16 species) return GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT); } -bool32 IsNotValidOwnedSpecies(u16 species) +static inline bool32 IsNotValidOwnedSpecies(u16 species) { if (species == SPECIES_NONE) return TRUE; return !CheckIfOwned(species); } -bool32 IsNotValidUnownedSpecies(u16 species) +static inline bool32 IsNotValidUnownedSpecies(u16 species) { if (species == SPECIES_NONE) return TRUE; @@ -2533,105 +2449,105 @@ static void GetPokemonOwned(void) { default: case GACHA_BASIC: - for (i = 0; i < ARRAY_COUNT(sSpeciesGachaBasicCommon); i++) + for (i = 0; i < ARRAY_COUNT(sGachaBasicSpeciesCommon); i++) { - species = sSpeciesGachaBasicCommon[i].species; + species = sGachaBasicSpeciesCommon[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedCommon = (sGacha->ownedCommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesGachaBasicUncommon); i++) + for (i = 0; i < ARRAY_COUNT(sGachaBasicSpeciesUncommon); i++) { - species = sSpeciesGachaBasicUncommon[i].species; + species = sGachaBasicSpeciesUncommon[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedUncommon = (sGacha->ownedUncommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesGachaBasicRare); i++) + for (i = 0; i < ARRAY_COUNT(sGachaBasicSpeciesRare); i++) { - species = sSpeciesGachaBasicRare[i].species; + species = sGachaBasicSpeciesRare[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedRare = (sGacha->ownedRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesGachaBasicUltraRare); i++) + for (i = 0; i < ARRAY_COUNT(sGachaBasicSpeciesUltraRare); i++) { - species = sSpeciesGachaBasicUltraRare[i].species; + species = sGachaBasicSpeciesUltraRare[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedUltraRare = (sGacha->ownedUltraRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } break; case GACHA_GREAT: - for (i = 0; i < ARRAY_COUNT(sSpeciesGreatCommon); i++) + for (i = 0; i < ARRAY_COUNT(sGachaGreatSpeciesCommon); i++) { - species = sSpeciesGreatCommon[i].species; + species = sGachaGreatSpeciesCommon[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedCommon = (sGacha->ownedCommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesGreatUncommon); i++) + for (i = 0; i < ARRAY_COUNT(sGachaGreatSpeciesUncommon); i++) { - species = sSpeciesGreatUncommon[i].species; + species = sGachaGreatSpeciesUncommon[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedUncommon = (sGacha->ownedUncommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesGreatRare); i++) + for (i = 0; i < ARRAY_COUNT(sGachaGreatSpeciesRare); i++) { - species = sSpeciesGreatRare[i].species; + species = sGachaGreatSpeciesRare[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedRare = (sGacha->ownedRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesGreatUltraRare); i++) + for (i = 0; i < ARRAY_COUNT(sGachaGreatSpeciesUltraRare); i++) { - species = sSpeciesGreatUltraRare[i].species; + species = sGachaGreatSpeciesUltraRare[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedUltraRare = (sGacha->ownedUltraRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } break; case GACHA_ULTRA: - for (i = 0; i < ARRAY_COUNT(sSpeciesUltraCommon); i++) + for (i = 0; i < ARRAY_COUNT(sGachaUltraSpeciesCommon); i++) { - species = sSpeciesUltraCommon[i].species; + species = sGachaUltraSpeciesCommon[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedCommon = (sGacha->ownedCommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesUltraUncommon); i++) + for (i = 0; i < ARRAY_COUNT(sGachaUltraSpeciesUncommon); i++) { - species = sSpeciesUltraUncommon[i].species; + species = sGachaUltraSpeciesUncommon[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedUncommon = (sGacha->ownedUncommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesUltraRare); i++) + for (i = 0; i < ARRAY_COUNT(sGachaUltraSpeciesRare); i++) { - species = sSpeciesUltraRare[i].species; + species = sGachaUltraSpeciesRare[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedRare = (sGacha->ownedRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesUltraUltraRare); i++) + for (i = 0; i < ARRAY_COUNT(sGachaUltraSpeciesUltraRare); i++) { - species = sSpeciesUltraUltraRare[i].species; + species = sGachaUltraSpeciesUltraRare[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedUltraRare = (sGacha->ownedUltraRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } break; case GACHA_MASTER: - for (i = 0; i < ARRAY_COUNT(sSpeciesMasterCommon); i++) + for (i = 0; i < ARRAY_COUNT(sGachaMasterSpeciesCommon); i++) { - species = sSpeciesMasterCommon[i].species; + species = sGachaMasterSpeciesCommon[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedCommon = (sGacha->ownedCommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesMasterUncommon); i++) + for (i = 0; i < ARRAY_COUNT(sGachaMasterSpeciesUncommon); i++) { - species = sSpeciesMasterUncommon[i].species; + species = sGachaMasterSpeciesUncommon[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedUncommon = (sGacha->ownedUncommon + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesMasterRare); i++) + for (i = 0; i < ARRAY_COUNT(sGachaMasterSpeciesRare); i++) { - species = sSpeciesMasterRare[i].species; + species = sGachaMasterSpeciesRare[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedRare = (sGacha->ownedRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } - for (i = 0; i < ARRAY_COUNT(sSpeciesMasterUltraRare); i++) + for (i = 0; i < ARRAY_COUNT(sGachaMasterSpeciesUltraRare); i++) { - species = sSpeciesMasterUltraRare[i].species; + species = sGachaMasterSpeciesUltraRare[i]; nationalDexNo = SpeciesToNationalPokedexNum(species); sGacha->ownedUltraRare = (sGacha->ownedUltraRare + GetSetPokedexFlag(nationalDexNo, FLAG_GET_CAUGHT)); } @@ -2815,10 +2731,6 @@ static void CalculatePullOdds(void) u16 totalRareAvailable; u16 totalUltraRareAvailable; u16 wager; - u8 commonChance; - u8 uncommonChance; - u8 rareChance; - u8 ultraRareChance; u8 totalChance; totalCommonAvailable = GetMaxAvailableGachaRaritySpecies(sGacha->GachaId, RARITY_COMMON); @@ -2828,29 +2740,21 @@ static void CalculatePullOdds(void) wager = sGacha->wager; // Player's wager (0-9999) - // Calculate the chance for each category - commonChance = CalculateChanceForCategory(sGacha->ownedCommon, totalCommonAvailable, RARITY_COMMON_ODDS, wager); - uncommonChance = CalculateChanceForCategory(sGacha->ownedUncommon, totalUncommonAvailable, RARITY_UNCOMMON_ODDS, wager); - rareChance = CalculateChanceForCategory(sGacha->ownedRare, totalRareAvailable, RARITY_RARE_ODDS, wager); - ultraRareChance = CalculateChanceForCategory(sGacha->ownedUltraRare, totalUltraRareAvailable, RARITY_ULTRA_RARE_ODDS, wager); - - sGacha->commonChance = commonChance; - sGacha->uncommonChance = uncommonChance; - sGacha->rareChance = rareChance; - sGacha->ultraRareChance = ultraRareChance; + // Add up the chances from each rarity + totalChance = CalculateChanceForCategory(sGacha->ownedCommon, totalCommonAvailable, RARITY_COMMON_ODDS, wager); + totalChance += CalculateChanceForCategory(sGacha->ownedUncommon, totalUncommonAvailable, RARITY_UNCOMMON_ODDS, wager); + totalChance += CalculateChanceForCategory(sGacha->ownedRare, totalRareAvailable, RARITY_RARE_ODDS, wager); + totalChance += CalculateChanceForCategory(sGacha->ownedUltraRare, totalUltraRareAvailable, RARITY_ULTRA_RARE_ODDS, wager); - // Final Odds as a sum of chances - - totalChance = commonChance + uncommonChance + rareChance + ultraRareChance; if (totalChance <= 100) - sGacha->newMonOdds = commonChance + uncommonChance + rareChance + ultraRareChance; + sGacha->newMonOdds = totalChance; else sGacha->newMonOdds = 100; } static void AButton(void) { - if (sGacha->Trigger == 1) + if (sGacha->canBetWager) { sGacha->state = STATE_INIT_A; } @@ -2876,7 +2780,7 @@ static void UpdateCursorPosition(s16 x) static void UpdateWagerDigit(int direction) { u8 place; - u16 tempwager; + u16 oldWager; u8 wagerDigits[4]; u16 newWager; u16 d; @@ -2886,16 +2790,16 @@ static void UpdateWagerDigit(int direction) place = sGacha->cursorPosition; d = 1000; - tempwager = sGacha->wager; + oldWager = sGacha->wager; for (i = 0; i < 4; i++) { - if (tempwager >= d) - wagerDigits[i] = tempwager / d; + if (oldWager >= d) + wagerDigits[i] = oldWager / d; else wagerDigits[i] = 0; - tempwager = tempwager % d; + oldWager = oldWager % d; d = d / 10; } maxWager = GetCoins(); // Maximum wager is the current coins @@ -2922,7 +2826,7 @@ static void UpdateWagerDigit(int direction) // Ensure the new wager doesn't exceed max available coins newWager = (wagerDigits[0] * 1000) + (wagerDigits[1] * 100) + (wagerDigits[2] * 10) + wagerDigits[3]; if (newWager > maxWager) // If the new wager exceeds available coins, revert back - newWager = GetCoins(); + newWager = maxWager; // Update the wager if it's within the limit sGacha->wager = newWager; } @@ -2962,8 +2866,7 @@ static void UpdateWagerDigit(int direction) { ResetMessage(); CalculatePullOdds(); - sGacha->Trigger = 1; - //gSprites[sGacha->CTAspriteId].animPaused = FALSE; + sGacha->canBetWager = TRUE; gSprites[sGacha->CTAspriteId].animNum = 1; // On ShowMessage(); } @@ -2972,9 +2875,8 @@ static void UpdateWagerDigit(int direction) ResetMessage(); //CalculatePullOdds(); sGacha->newMonOdds = 0; - sGacha->Trigger = 0; + sGacha->canBetWager = FALSE; gSprites[sGacha->CTAspriteId].animNum = 0; // Off - //gSprites[sGacha->CTAspriteId].animPaused = TRUE; ShowMessage(); } } @@ -3033,32 +2935,29 @@ static void HandleInput_GachaComplete(void) static void HandleInput(void) { - if (sGacha->Input == 0) + if (JOY_NEW(A_BUTTON)) { - if (JOY_NEW(A_BUTTON)) - { - AButton(); - } - else if (JOY_NEW(B_BUTTON)) - { - sGacha->state = GACHA_STATE_START_EXIT; - } - else if (JOY_NEW(DPAD_UP)) - { - MoveCursor(0); - } - else if (JOY_NEW(DPAD_RIGHT)) - { - MoveCursor(1); - } - else if (JOY_NEW(DPAD_DOWN)) - { - MoveCursor(2); - } - else if (JOY_NEW(DPAD_LEFT)) - { - MoveCursor(3); - } + AButton(); + } + else if (JOY_NEW(B_BUTTON)) + { + sGacha->state = GACHA_STATE_START_EXIT; + } + else if (JOY_NEW(DPAD_UP)) + { + MoveCursor(0); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + MoveCursor(1); + } + else if (JOY_NEW(DPAD_DOWN)) + { + MoveCursor(2); + } + else if (JOY_NEW(DPAD_LEFT)) + { + MoveCursor(3); } } @@ -3116,53 +3015,48 @@ void ShowFinalMessage(void) CopyWindowToVram(sTextWindowId, 3); } - -static void GachaMain(u8 taskId) +static u8 GetSpeciesGachaLevel(void) { - u16 level; - u32 pos = B_POSITION_OPPONENT_RIGHT; - - if (FlagGet(FLAG_IS_CHAMPION) == TRUE) - { - level = (Random() % 30) + 40; - } - else if (FlagGet(FLAG_BADGE08_GET) == TRUE) - { - level = (Random() % 15) + 36; - } - else if (FlagGet(FLAG_BADGE07_GET) == TRUE) - { - level = (Random() % 9) + 28; - } - else if (FlagGet(FLAG_BADGE06_GET) == TRUE) - { - level = (Random() % 10) + 21; - } - else if (FlagGet(FLAG_BADGE05_GET) == TRUE) - { - level = (Random() % 10) + 19; - } - else if (FlagGet(FLAG_BADGE04_GET) == TRUE) - { - level = (Random() % 6) + 18; - } - else if (FlagGet(FLAG_BADGE03_GET) == TRUE) - { - level = (Random() % 8) + 13; - } - else if (FlagGet(FLAG_BADGE02_GET) == TRUE) - { - level = (Random() % 6) + 7; - } - else if (FlagGet(FLAG_BADGE01_GET) == TRUE) + u32 level, levelCap, minLevel, addedLevelRange; + static const u32 sLevelGachaFlagMap[][3] = { - level = (Random() % 7) + 5; - } - else + {FLAG_BADGE01_GET, 5, 6}, + {FLAG_BADGE02_GET, 7, 5}, + {FLAG_BADGE03_GET, 13, 7}, + {FLAG_BADGE04_GET, 18, 5}, + {FLAG_BADGE05_GET, 19, 9}, + {FLAG_BADGE06_GET, 21, 9}, + {FLAG_BADGE07_GET, 28, 8}, + {FLAG_BADGE08_GET, 36, 14}, + {FLAG_IS_CHAMPION, 40, 29}, + }; + + minLevel = 2; + addedLevelRange = 4; + + for (i = 0; i < ARRAY_COUNT(sLevelGachaFlagMap); i++) { - level = (Random() % 5) + 2; + if (FlagGet(sLevelGachaFlagMap[i][0])) + { + minLevel = sLevelGachaFlagMap[i][1]; + addedLevelRange = sLevelGachaFlagMap[i][2]; + } } - + + addedLevelRange += 1; + + level = (Random() % addedLevelRange) + minLevel; + + levelCap = GetCurrentLevelCap(); + + if (level > levelCap) + return levelCap; + + return level; +} + +static void GachaMain(u8 taskId) +{ switch (sGacha->state) { case GACHA_STATE_INIT: @@ -3189,7 +3083,6 @@ static void GachaMain(u8 taskId) ExitGacha(); break; case STATE_INIT_A: // Initial state - sGacha->Input = 1; DeterminePokemonRarityAndNewStatus(); PlaySE(SE_SHOP); RemoveCoins(sGacha->wager); @@ -3305,18 +3198,18 @@ static void GachaMain(u8 taskId) case STATE_POKEBALL_ARRIVE_WAIT: if (gSprites[sGacha->bouncingPokeballSpriteId].callback == SpriteCallbackDummy) { - CreateMon(&gEnemyParty[0], sGacha->CalculatedSpecies, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[0], sGacha->CalculatedSpecies, GetSpeciesGachaLevel(), USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0); GiveMonToPlayer(&gEnemyParty[0]); GetSetPokedexFlag(SpeciesToNationalPokedexNum(sGacha->CalculatedSpecies), FLAG_SET_SEEN); HandleSetPokedexFlag(SpeciesToNationalPokedexNum(sGacha->CalculatedSpecies), FLAG_SET_CAUGHT, GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY)); LoadPalette(GetMonFrontSpritePal(&gEnemyParty[0]), OBJ_PLTT_ID(2), PLTT_SIZE_4BPP); - SetMultiuseSpriteTemplateToPokemon(sGacha->CalculatedSpecies, pos); + SetMultiuseSpriteTemplateToPokemon(sGacha->CalculatedSpecies, B_POSITION_OPPONENT_RIGHT); sGacha->monSpriteId = CreateMonPicSprite_Affine(sGacha->CalculatedSpecies, GetMonData(&gEnemyParty[0], MON_DATA_IS_SHINY), GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY), MON_PIC_AFFINE_FRONT, 120, 60, 14, TAG_NONE); gSprites[sGacha->monSpriteId].callback = SpriteCB_Null; gSprites[sGacha->monSpriteId].oam.priority = 0; gSprites[sGacha->monSpriteId].invisible = TRUE; HandleLoadSpecialPokePic(TRUE, - gMonSpritesGfxPtr->spritesGfx[pos], + gMonSpritesGfxPtr->spritesGfx[B_POSITION_OPPONENT_RIGHT], sGacha->CalculatedSpecies, GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY)); sGacha->state++; @@ -3379,21 +3272,24 @@ static void InitGachaScreen(void) ResetSpriteData(); FreeAllSpritePalettes(); - LoadSpritePalettes(sSpritePalettes2); switch (sGacha->GachaId) { default: case GACHA_BASIC: + LoadSpritePalettes(sSpritePalettesBasic); CreateHoppip(); break; case GACHA_GREAT: + LoadSpritePalettes(sSpritePalettesGreat); CreatePhanpy(); break; case GACHA_ULTRA: + LoadSpritePalettes(sSpritePalettesUltra); CreateTeddiursa(); break; case GACHA_MASTER: + LoadSpritePalettes(sSpritePalettesMaster); CreateBelossom(); break; } @@ -3416,7 +3312,6 @@ static void InitGachaScreen(void) UpdateCursorPosition(gSprites[sGacha->ArrowsSpriteId].x); sGacha->waitTimer = 0; - sGacha->Input = 0; GetPokemonOwned(); CopyBgTilemapBufferToVram(GACHA_BG_BASE); From a266c307f51c237300bcca7691aa47c8c82a4125 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Sun, 17 Aug 2025 13:56:49 +0200 Subject: [PATCH 020/429] add map data --- .../BattleColosseum_2P_Frlg/border.bin | 1 + data/layouts/BattleColosseum_2P_Frlg/map.bin | Bin 0 -> 252 bytes .../BattleColosseum_4P_Frlg/border.bin | 1 + data/layouts/BattleColosseum_4P_Frlg/map.bin | Bin 0 -> 252 bytes .../BirthIsland_Exterior_Frlg/border.bin | 1 + .../layouts/BirthIsland_Exterior_Frlg/map.bin | 1 + data/layouts/CeladonCity/border.bin | Bin 0 -> 8 bytes data/layouts/CeladonCity/map.bin | Bin 0 -> 4800 bytes .../CeladonCity_Condominiums_1F/border.bin | Bin 0 -> 8 bytes .../CeladonCity_Condominiums_1F/map.bin | 1 + .../CeladonCity_Condominiums_2F/border.bin | Bin 0 -> 8 bytes .../CeladonCity_Condominiums_2F/map.bin | Bin 0 -> 600 bytes .../CeladonCity_Condominiums_3F/border.bin | Bin 0 -> 8 bytes .../CeladonCity_Condominiums_3F/map.bin | 1 + .../CeladonCity_Condominiums_Roof/border.bin | 1 + .../CeladonCity_Condominiums_Roof/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../CeladonCity_Condominiums_RoofRoom/map.bin | 1 + .../CeladonCity_DepartmentStore_1F/border.bin | Bin 0 -> 8 bytes .../CeladonCity_DepartmentStore_1F/map.bin | 1 + .../CeladonCity_DepartmentStore_2F/border.bin | Bin 0 -> 8 bytes .../CeladonCity_DepartmentStore_2F/map.bin | Bin 0 -> 390 bytes .../CeladonCity_DepartmentStore_3F/border.bin | Bin 0 -> 8 bytes .../CeladonCity_DepartmentStore_3F/map.bin | 1 + .../CeladonCity_DepartmentStore_4F/border.bin | Bin 0 -> 8 bytes .../CeladonCity_DepartmentStore_4F/map.bin | Bin 0 -> 390 bytes .../CeladonCity_DepartmentStore_5F/border.bin | Bin 0 -> 8 bytes .../CeladonCity_DepartmentStore_5F/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | 1 + .../CeladonCity_DepartmentStore_Roof/map.bin | 1 + .../layouts/CeladonCity_GameCorner/border.bin | Bin 0 -> 8 bytes data/layouts/CeladonCity_GameCorner/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../CeladonCity_GameCorner_PrizeRoom/map.bin | 1 + data/layouts/CeladonCity_Gym/border.bin | Bin 0 -> 8 bytes data/layouts/CeladonCity_Gym/map.bin | 1 + data/layouts/CeladonCity_Hotel/border.bin | Bin 0 -> 8 bytes data/layouts/CeladonCity_Hotel/map.bin | 1 + .../CeladonCity_Hotel_Duplicate/border.bin | Bin 0 -> 8 bytes .../CeladonCity_Hotel_Duplicate/map.bin | 1 + .../layouts/CeladonCity_Restaurant/border.bin | Bin 0 -> 8 bytes data/layouts/CeladonCity_Restaurant/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../CeladonCity_Restaurant_Duplicate/map.bin | 1 + data/layouts/CeruleanCave_1F/border.bin | 1 + data/layouts/CeruleanCave_1F/map.bin | Bin 0 -> 1840 bytes data/layouts/CeruleanCave_2F/border.bin | 1 + data/layouts/CeruleanCave_2F/map.bin | 1 + data/layouts/CeruleanCave_B1F/border.bin | 1 + data/layouts/CeruleanCave_B1F/map.bin | Bin 0 -> 1840 bytes data/layouts/CeruleanCity/border.bin | Bin 0 -> 8 bytes data/layouts/CeruleanCity/map.bin | 5 + data/layouts/CeruleanCity_BikeShop/border.bin | Bin 0 -> 8 bytes data/layouts/CeruleanCity_BikeShop/map.bin | 1 + data/layouts/CeruleanCity_Gym/border.bin | Bin 0 -> 8 bytes data/layouts/CeruleanCity_Gym/map.bin | 1 + data/layouts/CeruleanCity_House1/border.bin | Bin 0 -> 8 bytes data/layouts/CeruleanCity_House1/map.bin | 1 + data/layouts/CeruleanCity_House2/border.bin | Bin 0 -> 8 bytes data/layouts/CeruleanCity_House2/map.bin | 1 + data/layouts/CeruleanCity_House5/border.bin | Bin 0 -> 8 bytes data/layouts/CeruleanCity_House5/map.bin | 1 + data/layouts/CinnabarIsland/border.bin | 1 + data/layouts/CinnabarIsland/map.bin | 1 + data/layouts/CinnabarIsland_Gym/border.bin | Bin 0 -> 8 bytes data/layouts/CinnabarIsland_Gym/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | Bin 0 -> 330 bytes .../border.bin | Bin 0 -> 8 bytes .../CinnabarIsland_PokemonLab_Lounge/map.bin | 3 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | Bin 0 -> 330 bytes data/layouts/DiglettsCave_B1F/border.bin | 1 + data/layouts/DiglettsCave_B1F/map.bin | 1 + .../DiglettsCave_NorthEntrance/border.bin | 1 + .../DiglettsCave_NorthEntrance/map.bin | 1 + .../DiglettsCave_SouthEntrance/border.bin | 1 + .../DiglettsCave_SouthEntrance/map.bin | Bin 0 -> 160 bytes data/layouts/Entrance_1F/border.bin | Bin 0 -> 8 bytes data/layouts/Entrance_1F/map.bin | 1 + data/layouts/Entrance_2F/border.bin | Bin 0 -> 8 bytes data/layouts/Entrance_2F/map.bin | 1 + .../EverGrandeCity_HallOfFame_Frlg/border.bin | Bin 0 -> 8 bytes .../EverGrandeCity_HallOfFame_Frlg/map.bin | 1 + data/layouts/FiveIsland/border.bin | 1 + data/layouts/FiveIsland/map.bin | Bin 0 -> 960 bytes .../FiveIsland_LostCave_Entrance/border.bin | 1 + .../FiveIsland_LostCave_Entrance/map.bin | 1 + .../FiveIsland_LostCave_Room1/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room1/map.bin | 2 + .../FiveIsland_LostCave_Room10/border.bin | 1 + .../FiveIsland_LostCave_Room10/map.bin | 1 + .../FiveIsland_LostCave_Room11/border.bin | 1 + .../FiveIsland_LostCave_Room11/map.bin | 1 + .../FiveIsland_LostCave_Room12/border.bin | 1 + .../FiveIsland_LostCave_Room12/map.bin | 1 + .../FiveIsland_LostCave_Room13/border.bin | 1 + .../FiveIsland_LostCave_Room13/map.bin | 2 + .../FiveIsland_LostCave_Room14/border.bin | 1 + .../FiveIsland_LostCave_Room14/map.bin | 1 + .../FiveIsland_LostCave_Room2/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room2/map.bin | 2 + .../FiveIsland_LostCave_Room3/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room3/map.bin | 2 + .../FiveIsland_LostCave_Room4/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room4/map.bin | 2 + .../FiveIsland_LostCave_Room5/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room5/map.bin | 2 + .../FiveIsland_LostCave_Room6/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room6/map.bin | 2 + .../FiveIsland_LostCave_Room7/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room7/map.bin | 2 + .../FiveIsland_LostCave_Room8/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room8/map.bin | 2 + .../FiveIsland_LostCave_Room9/border.bin | 1 + .../layouts/FiveIsland_LostCave_Room9/map.bin | 2 + data/layouts/FiveIsland_Meadow/border.bin | 1 + data/layouts/FiveIsland_Meadow/map.bin | 5 + .../FiveIsland_MemorialPillar/border.bin | 1 + .../layouts/FiveIsland_MemorialPillar/map.bin | Bin 0 -> 2880 bytes .../FiveIsland_ResortGorgeous/border.bin | 1 + .../layouts/FiveIsland_ResortGorgeous/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../FiveIsland_ResortGorgeous_House/map.bin | Bin 0 -> 198 bytes .../FiveIsland_RocketWarehouse/border.bin | Bin 0 -> 8 bytes .../FiveIsland_RocketWarehouse/map.bin | 1 + .../FiveIsland_WaterLabyrinth/border.bin | 1 + .../layouts/FiveIsland_WaterLabyrinth/map.bin | 1 + .../border.bin | 1 + .../FortreeCity_DecorationShop_Frlg/map.bin | 1 + .../FortreeCity_House1_Frlg/border.bin | 1 + data/layouts/FortreeCity_House1_Frlg/map.bin | 1 + .../FortreeCity_House2_Frlg/border.bin | 1 + data/layouts/FortreeCity_House2_Frlg/map.bin | 1 + data/layouts/FourIsland/border.bin | 1 + data/layouts/FourIsland/map.bin | 1 + .../FourIsland_IcefallCave_1F/border.bin | 1 + .../layouts/FourIsland_IcefallCave_1F/map.bin | Bin 0 -> 800 bytes .../FourIsland_IcefallCave_B1F/border.bin | 1 + .../FourIsland_IcefallCave_B1F/map.bin | 1 + .../FourIsland_IcefallCave_Back/border.bin | 1 + .../FourIsland_IcefallCave_Back/map.bin | 1 + .../border.bin | 1 + .../FourIsland_IcefallCave_Entrance/map.bin | 1 + .../FourIsland_LoreleisHouse/border.bin | Bin 0 -> 8 bytes data/layouts/FourIsland_LoreleisHouse/map.bin | 1 + .../FourIsland_PokemonDayCare/border.bin | Bin 0 -> 8 bytes .../layouts/FourIsland_PokemonDayCare/map.bin | 1 + data/layouts/FuchsiaCity/border.bin | Bin 0 -> 8 bytes data/layouts/FuchsiaCity/map.bin | 1 + data/layouts/FuchsiaCity_Gym/border.bin | Bin 0 -> 8 bytes data/layouts/FuchsiaCity_Gym/map.bin | 1 + data/layouts/FuchsiaCity_House2/border.bin | Bin 0 -> 8 bytes data/layouts/FuchsiaCity_House2/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../FuchsiaCity_SafariZone_Entrance/map.bin | 1 + .../FuchsiaCity_SafariZone_Office/border.bin | Bin 0 -> 8 bytes .../FuchsiaCity_SafariZone_Office/map.bin | 1 + .../FuchsiaCity_WardensHouse/border.bin | Bin 0 -> 8 bytes data/layouts/FuchsiaCity_WardensHouse/map.bin | 1 + data/layouts/House1_Frlg/border.bin | Bin 0 -> 8 bytes data/layouts/House1_Frlg/map.bin | 1 + data/layouts/House2_Frlg/border.bin | Bin 0 -> 8 bytes data/layouts/House2_Frlg/map.bin | 1 + data/layouts/House3_Frlg/border.bin | Bin 0 -> 8 bytes data/layouts/House3_Frlg/map.bin | 1 + data/layouts/House4_Frlg/border.bin | Bin 0 -> 8 bytes data/layouts/House4_Frlg/map.bin | 1 + data/layouts/House5/border.bin | Bin 0 -> 8 bytes data/layouts/House5/map.bin | 1 + .../layouts/IndigoPlateau_Exterior/border.bin | Bin 0 -> 8 bytes data/layouts/IndigoPlateau_Exterior/map.bin | Bin 0 -> 960 bytes .../IndigoPlateau_PokemonCenter_1F/border.bin | Bin 0 -> 8 bytes .../IndigoPlateau_PokemonCenter_1F/map.bin | Bin 0 -> 900 bytes data/layouts/Island_Harbor/border.bin | 1 + data/layouts/Island_Harbor/map.bin | 1 + data/layouts/Island_Harbor_Frlg/border.bin | 1 + data/layouts/Island_Harbor_Frlg/map.bin | 1 + .../LavaridgeTown_HerbShop_Frlg/border.bin | Bin 0 -> 8 bytes .../LavaridgeTown_HerbShop_Frlg/map.bin | 1 + data/layouts/LavenderTown/border.bin | Bin 0 -> 8 bytes data/layouts/LavenderTown/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | 1 + .../LittlerootTown_MaysHouse_2F_Frlg/map.bin | 2 + data/layouts/Mart_Frlg/border.bin | Bin 0 -> 8 bytes data/layouts/Mart_Frlg/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 2 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 2 + data/layouts/MtEmber_Exterior/border.bin | Bin 0 -> 8 bytes data/layouts/MtEmber_Exterior/map.bin | 1 + data/layouts/MtEmber_RubyPath_1F/border.bin | 1 + data/layouts/MtEmber_RubyPath_1F/map.bin | 1 + data/layouts/MtEmber_RubyPath_B1F/border.bin | 1 + data/layouts/MtEmber_RubyPath_B1F/map.bin | 1 + .../MtEmber_RubyPath_B1F_Stairs/border.bin | 1 + .../MtEmber_RubyPath_B1F_Stairs/map.bin | 1 + data/layouts/MtEmber_RubyPath_B2F/border.bin | 1 + data/layouts/MtEmber_RubyPath_B2F/map.bin | 1 + .../MtEmber_RubyPath_B2F_Stairs/border.bin | 1 + .../MtEmber_RubyPath_B2F_Stairs/map.bin | 1 + data/layouts/MtEmber_RubyPath_B3F/border.bin | 1 + data/layouts/MtEmber_RubyPath_B3F/map.bin | 1 + data/layouts/MtEmber_RubyPath_B4F/border.bin | 1 + data/layouts/MtEmber_RubyPath_B4F/map.bin | Bin 0 -> 576 bytes data/layouts/MtEmber_RubyPath_B5F/border.bin | 1 + data/layouts/MtEmber_RubyPath_B5F/map.bin | Bin 0 -> 480 bytes data/layouts/MtEmber_Summit/border.bin | Bin 0 -> 8 bytes data/layouts/MtEmber_Summit/map.bin | 1 + data/layouts/MtEmber_SummitPath_1F/border.bin | 1 + data/layouts/MtEmber_SummitPath_1F/map.bin | 1 + data/layouts/MtEmber_SummitPath_2F/border.bin | 1 + data/layouts/MtEmber_SummitPath_2F/map.bin | 1 + data/layouts/MtEmber_SummitPath_3F/border.bin | 1 + data/layouts/MtEmber_SummitPath_3F/map.bin | 1 + data/layouts/MtMoon_1F/border.bin | 1 + data/layouts/MtMoon_1F/map.bin | Bin 0 -> 3840 bytes data/layouts/MtMoon_B1F/border.bin | 1 + data/layouts/MtMoon_B1F/map.bin | Bin 0 -> 3920 bytes data/layouts/MtMoon_B2F/border.bin | 1 + data/layouts/MtMoon_B2F/map.bin | 1 + data/layouts/NavelRock_1F/border.bin | 1 + data/layouts/NavelRock_1F/map.bin | 1 + data/layouts/NavelRock_B1F_Frlg/border.bin | 1 + data/layouts/NavelRock_B1F_Frlg/map.bin | 1 + .../NavelRock_BasePath_B10F/border.bin | 1 + data/layouts/NavelRock_BasePath_B10F/map.bin | 1 + .../NavelRock_BasePath_B11F/border.bin | 1 + data/layouts/NavelRock_BasePath_B11F/map.bin | 1 + .../layouts/NavelRock_BasePath_B1F/border.bin | 1 + data/layouts/NavelRock_BasePath_B1F/map.bin | 1 + .../layouts/NavelRock_BasePath_B2F/border.bin | 1 + data/layouts/NavelRock_BasePath_B2F/map.bin | 1 + .../layouts/NavelRock_BasePath_B3F/border.bin | 1 + data/layouts/NavelRock_BasePath_B3F/map.bin | 1 + .../layouts/NavelRock_BasePath_B4F/border.bin | 1 + data/layouts/NavelRock_BasePath_B4F/map.bin | 1 + .../layouts/NavelRock_BasePath_B5F/border.bin | 1 + data/layouts/NavelRock_BasePath_B5F/map.bin | 1 + .../layouts/NavelRock_BasePath_B6F/border.bin | 1 + data/layouts/NavelRock_BasePath_B6F/map.bin | 1 + .../layouts/NavelRock_BasePath_B7F/border.bin | 1 + data/layouts/NavelRock_BasePath_B7F/map.bin | 1 + .../layouts/NavelRock_BasePath_B8F/border.bin | 1 + data/layouts/NavelRock_BasePath_B8F/map.bin | 1 + .../layouts/NavelRock_BasePath_B9F/border.bin | 1 + data/layouts/NavelRock_BasePath_B9F/map.bin | 1 + data/layouts/NavelRock_Bottom_Frlg/border.bin | 1 + data/layouts/NavelRock_Bottom_Frlg/map.bin | 1 + .../NavelRock_Exterior_Frlg/border.bin | 1 + data/layouts/NavelRock_Exterior_Frlg/map.bin | Bin 0 -> 920 bytes data/layouts/NavelRock_Fork_Frlg/border.bin | 1 + data/layouts/NavelRock_Fork_Frlg/map.bin | 1 + data/layouts/NavelRock_Summit/border.bin | 1 + data/layouts/NavelRock_Summit/map.bin | 2 + .../NavelRock_SummitPath_2F/border.bin | 1 + data/layouts/NavelRock_SummitPath_2F/map.bin | 1 + .../NavelRock_SummitPath_3F/border.bin | 1 + data/layouts/NavelRock_SummitPath_3F/map.bin | 1 + .../NavelRock_SummitPath_4F/border.bin | 1 + data/layouts/NavelRock_SummitPath_4F/map.bin | 1 + .../NavelRock_SummitPath_5F/border.bin | 1 + data/layouts/NavelRock_SummitPath_5F/map.bin | 1 + data/layouts/OneIsland/border.bin | 1 + data/layouts/OneIsland/map.bin | 1 + data/layouts/OneIsland_KindleRoad/border.bin | 1 + data/layouts/OneIsland_KindleRoad/map.bin | Bin 0 -> 6720 bytes .../OneIsland_KindleRoad_EmberSpa/border.bin | 1 + .../OneIsland_KindleRoad_EmberSpa/map.bin | 1 + .../OneIsland_PokemonCenter_1F/border.bin | Bin 0 -> 8 bytes .../OneIsland_PokemonCenter_1F/map.bin | 1 + .../OneIsland_PokemonCenter_2F/border.bin | Bin 0 -> 8 bytes .../OneIsland_PokemonCenter_2F/map.bin | Bin 0 -> 300 bytes .../OneIsland_TreasureBeach/border.bin | 1 + data/layouts/OneIsland_TreasureBeach/map.bin | Bin 0 -> 1920 bytes data/layouts/PalletTown/border.bin | Bin 0 -> 8 bytes data/layouts/PalletTown/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../PalletTown_PlayersHouse_1F_FRLG/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../PalletTown_PlayersHouse_2F_FRLG/map.bin | Bin 0 -> 216 bytes .../PalletTown_ProfessorOaksLab/border.bin | Bin 0 -> 8 bytes .../PalletTown_ProfessorOaksLab/map.bin | 1 + .../layouts/PalletTown_RivalsHouse/border.bin | Bin 0 -> 8 bytes data/layouts/PalletTown_RivalsHouse/map.bin | 1 + data/layouts/PewterCity/border.bin | Bin 0 -> 8 bytes data/layouts/PewterCity/map.bin | 1 + data/layouts/PewterCity_Gym/border.bin | Bin 0 -> 8 bytes data/layouts/PewterCity_Gym/map.bin | 1 + data/layouts/PewterCity_Museum_1F/border.bin | Bin 0 -> 8 bytes data/layouts/PewterCity_Museum_1F/map.bin | 1 + data/layouts/PewterCity_Museum_2F/border.bin | Bin 0 -> 8 bytes data/layouts/PewterCity_Museum_2F/map.bin | 1 + data/layouts/PokemonCenter_1F_Frlg/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonCenter_1F_Frlg/map.bin | 1 + data/layouts/PokemonCenter_2F_Frlg/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonCenter_2F_Frlg/map.bin | Bin 0 -> 300 bytes .../PokemonLeague_AgathasRoom/border.bin | Bin 0 -> 8 bytes .../layouts/PokemonLeague_AgathasRoom/map.bin | Bin 0 -> 338 bytes .../PokemonLeague_BrunosRoom/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonLeague_BrunosRoom/map.bin | 1 + .../PokemonLeague_ChampionsRoom/border.bin | Bin 0 -> 8 bytes .../PokemonLeague_ChampionsRoom/map.bin | 1 + .../PokemonLeague_HallOfFame/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonLeague_HallOfFame/map.bin | 1 + .../PokemonLeague_LancesRoom/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonLeague_LancesRoom/map.bin | 1 + .../PokemonLeague_LoreleisRoom/border.bin | Bin 0 -> 8 bytes .../PokemonLeague_LoreleisRoom/map.bin | 1 + data/layouts/PokemonMansion_1F/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonMansion_1F/map.bin | Bin 0 -> 2660 bytes data/layouts/PokemonMansion_2F/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonMansion_2F/map.bin | Bin 0 -> 2888 bytes data/layouts/PokemonMansion_3F/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonMansion_3F/map.bin | Bin 0 -> 2660 bytes data/layouts/PokemonMansion_B1F/border.bin | Bin 0 -> 8 bytes data/layouts/PokemonMansion_B1F/map.bin | 1 + data/layouts/PokemonTower_1F/border.bin | 1 + data/layouts/PokemonTower_1F/map.bin | 1 + data/layouts/PokemonTower_2F/border.bin | 1 + data/layouts/PokemonTower_2F/map.bin | 1 + data/layouts/PokemonTower_3F/border.bin | 1 + data/layouts/PokemonTower_3F/map.bin | 1 + data/layouts/PokemonTower_4F/border.bin | 1 + data/layouts/PokemonTower_4F/map.bin | 1 + data/layouts/PokemonTower_5F/border.bin | 1 + data/layouts/PokemonTower_5F/map.bin | 1 + data/layouts/PokemonTower_6F/border.bin | 1 + data/layouts/PokemonTower_6F/map.bin | 1 + data/layouts/PokemonTower_7F/border.bin | 1 + data/layouts/PokemonTower_7F/map.bin | 1 + data/layouts/PowerPlant/border.bin | Bin 0 -> 8 bytes data/layouts/PowerPlant/map.bin | Bin 0 -> 3920 bytes .../layouts/Prototype_SeviiIsle_22/border.bin | 1 + data/layouts/Prototype_SeviiIsle_22/map.bin | 1 + .../Prototype_SeviiIsle_23_East/border.bin | 1 + .../Prototype_SeviiIsle_23_East/map.bin | 1 + .../Prototype_SeviiIsle_23_West/border.bin | 1 + .../Prototype_SeviiIsle_23_West/map.bin | 1 + .../layouts/Prototype_SeviiIsle_24/border.bin | 1 + data/layouts/Prototype_SeviiIsle_24/map.bin | 1 + data/layouts/Prototype_SeviiIsle_6/border.bin | 1 + data/layouts/Prototype_SeviiIsle_6/map.bin | 1 + data/layouts/Prototype_SeviiIsle_7/border.bin | 1 + data/layouts/Prototype_SeviiIsle_7/map.bin | 1 + data/layouts/Prototype_SeviiIsle_8/border.bin | 1 + data/layouts/Prototype_SeviiIsle_8/map.bin | Bin 0 -> 3360 bytes data/layouts/Prototype_SeviiIsle_9/border.bin | 1 + data/layouts/Prototype_SeviiIsle_9/map.bin | 1 + data/layouts/RS_BattleTower/border.bin | 1 + data/layouts/RS_BattleTower/map.bin | 1 + data/layouts/RS_PokemonCenter_1F/border.bin | 1 + data/layouts/RS_PokemonCenter_1F/map.bin | 1 + .../layouts/RS_SafariZone_Entrance/border.bin | Bin 0 -> 8 bytes data/layouts/RS_SafariZone_Entrance/map.bin | 1 + .../RS_SafariZone_Northeast/border.bin | 1 + data/layouts/RS_SafariZone_Northeast/map.bin | Bin 0 -> 3200 bytes .../RS_SafariZone_RestHouse/border.bin | Bin 0 -> 8 bytes data/layouts/RS_SafariZone_RestHouse/map.bin | 1 + .../RS_SafariZone_Southeast/border.bin | 1 + data/layouts/RS_SafariZone_Southeast/map.bin | Bin 0 -> 3200 bytes .../RS_SafariZone_Southwest/border.bin | 1 + data/layouts/RS_SafariZone_Southwest/map.bin | Bin 0 -> 3200 bytes data/layouts/RecordCorner_Frlg/border.bin | 1 + data/layouts/RecordCorner_Frlg/map.bin | 1 + data/layouts/RockTunnel_1F/border.bin | 1 + data/layouts/RockTunnel_1F/map.bin | Bin 0 -> 3840 bytes data/layouts/RockTunnel_B1F/border.bin | 1 + data/layouts/RockTunnel_B1F/map.bin | Bin 0 -> 3840 bytes data/layouts/RocketHideout_B1F/border.bin | Bin 0 -> 8 bytes data/layouts/RocketHideout_B1F/map.bin | Bin 0 -> 1904 bytes data/layouts/RocketHideout_B2F/border.bin | Bin 0 -> 8 bytes data/layouts/RocketHideout_B2F/map.bin | 1 + data/layouts/RocketHideout_B3F/border.bin | Bin 0 -> 8 bytes data/layouts/RocketHideout_B3F/map.bin | 1 + data/layouts/RocketHideout_B4F/border.bin | Bin 0 -> 8 bytes data/layouts/RocketHideout_B4F/map.bin | Bin 0 -> 1248 bytes .../layouts/RocketHideout_Elevator/border.bin | Bin 0 -> 8 bytes data/layouts/RocketHideout_Elevator/map.bin | 1 + data/layouts/Route1/border.bin | Bin 0 -> 8 bytes data/layouts/Route1/map.bin | 1 + data/layouts/Route10/border.bin | Bin 0 -> 8 bytes data/layouts/Route10/map.bin | 1 + data/layouts/Route11/border.bin | Bin 0 -> 8 bytes data/layouts/Route11/map.bin | 7 + data/layouts/Route12/border.bin | 1 + data/layouts/Route12/map.bin | Bin 0 -> 5760 bytes .../Route12_NorthEntrance_1F/border.bin | Bin 0 -> 8 bytes data/layouts/Route12_NorthEntrance_1F/map.bin | 1 + data/layouts/Route13/border.bin | 1 + data/layouts/Route13/map.bin | Bin 0 -> 2880 bytes data/layouts/Route14/border.bin | 1 + data/layouts/Route14/map.bin | 1 + data/layouts/Route15/border.bin | Bin 0 -> 8 bytes data/layouts/Route15/map.bin | 1 + data/layouts/Route16/border.bin | 1 + data/layouts/Route16/map.bin | 1 + .../Route16_NorthEntrance_1F/border.bin | Bin 0 -> 8 bytes data/layouts/Route16_NorthEntrance_1F/map.bin | 1 + data/layouts/Route17/border.bin | 1 + data/layouts/Route17/map.bin | 1 + data/layouts/Route18/border.bin | 1 + data/layouts/Route18/map.bin | 1 + data/layouts/Route19/border.bin | 1 + data/layouts/Route19/map.bin | 1 + data/layouts/Route2/border.bin | Bin 0 -> 8 bytes data/layouts/Route2/map.bin | 1 + data/layouts/Route20/border.bin | 1 + data/layouts/Route20/map.bin | 1 + data/layouts/Route21_North/border.bin | 1 + data/layouts/Route21_North/map.bin | 1 + data/layouts/Route21_South/border.bin | 1 + data/layouts/Route21_South/map.bin | 1 + data/layouts/Route22/border.bin | Bin 0 -> 8 bytes data/layouts/Route22/map.bin | 1 + data/layouts/Route22_NorthEntrance/border.bin | Bin 0 -> 8 bytes data/layouts/Route22_NorthEntrance/map.bin | 1 + data/layouts/Route23/border.bin | Bin 0 -> 8 bytes data/layouts/Route23/map.bin | 1 + data/layouts/Route24/border.bin | Bin 0 -> 8 bytes data/layouts/Route24/map.bin | 1 + data/layouts/Route25/border.bin | Bin 0 -> 8 bytes data/layouts/Route25/map.bin | 1 + data/layouts/Route25_SeaCottage/border.bin | Bin 0 -> 8 bytes data/layouts/Route25_SeaCottage/map.bin | 1 + data/layouts/Route2_Entrance/border.bin | Bin 0 -> 8 bytes data/layouts/Route2_Entrance/map.bin | 1 + data/layouts/Route3/border.bin | Bin 0 -> 8 bytes data/layouts/Route3/map.bin | 1 + data/layouts/Route4/border.bin | Bin 0 -> 8 bytes data/layouts/Route4/map.bin | 1 + data/layouts/Route5/border.bin | Bin 0 -> 8 bytes data/layouts/Route5/map.bin | Bin 0 -> 3840 bytes data/layouts/Route5_PokemonDayCare/border.bin | Bin 0 -> 8 bytes data/layouts/Route5_PokemonDayCare/map.bin | 1 + data/layouts/Route6/border.bin | Bin 0 -> 8 bytes data/layouts/Route6/map.bin | 1 + data/layouts/Route7/border.bin | Bin 0 -> 8 bytes data/layouts/Route7/map.bin | 1 + data/layouts/Route8/border.bin | Bin 0 -> 8 bytes data/layouts/Route8/map.bin | 1 + data/layouts/Route9/border.bin | Bin 0 -> 8 bytes data/layouts/Route9/map.bin | 1 + .../RustboroCity_CuttersHouse_Frlg/border.bin | 1 + .../RustboroCity_CuttersHouse_Frlg/map.bin | 1 + .../RustboroCity_Flat1_1F_Frlg/border.bin | 1 + .../RustboroCity_Flat1_1F_Frlg/map.bin | 1 + .../RustboroCity_Flat1_2F_Frlg/border.bin | 1 + .../RustboroCity_Flat1_2F_Frlg/map.bin | 1 + .../RustboroCity_Flat2_1F_Frlg/border.bin | 1 + .../RustboroCity_Flat2_1F_Frlg/map.bin | Bin 0 -> 252 bytes .../RustboroCity_Flat2_2F_Frlg/border.bin | 1 + .../RustboroCity_Flat2_2F_Frlg/map.bin | Bin 0 -> 252 bytes .../RustboroCity_Flat2_3F_Frlg/border.bin | 1 + .../RustboroCity_Flat2_3F_Frlg/map.bin | Bin 0 -> 252 bytes data/layouts/SSAnne_1F_Corridor/border.bin | 1 + data/layouts/SSAnne_1F_Corridor/map.bin | 1 + data/layouts/SSAnne_2F_Corridor/border.bin | 1 + data/layouts/SSAnne_2F_Corridor/map.bin | 1 + data/layouts/SSAnne_3F_Corridor/border.bin | 1 + data/layouts/SSAnne_3F_Corridor/map.bin | 1 + data/layouts/SSAnne_B1F_Corridor/border.bin | 1 + data/layouts/SSAnne_B1F_Corridor/map.bin | 1 + data/layouts/SSAnne_CaptainsOffice/border.bin | 1 + data/layouts/SSAnne_CaptainsOffice/map.bin | 1 + data/layouts/SSAnne_Deck/border.bin | 1 + data/layouts/SSAnne_Deck/map.bin | 1 + data/layouts/SSAnne_Exterior/border.bin | 1 + data/layouts/SSAnne_Exterior/map.bin | 1 + data/layouts/SSAnne_Kitchen/border.bin | 1 + data/layouts/SSAnne_Kitchen/map.bin | 1 + data/layouts/SSAnne_Room1/border.bin | 1 + data/layouts/SSAnne_Room1/map.bin | 1 + data/layouts/SSAnne_Room2/border.bin | 1 + data/layouts/SSAnne_Room2/map.bin | 2 + data/layouts/SSTidal_Corridor/border.bin | 1 + data/layouts/SSTidal_Corridor/map.bin | 1 + data/layouts/SSTidal_LowerDeck/border.bin | 1 + data/layouts/SSTidal_LowerDeck/map.bin | 1 + data/layouts/SSTidal_Rooms/border.bin | 1 + data/layouts/SSTidal_Rooms/map.bin | 1 + data/layouts/SafariZone_Center/border.bin | 1 + data/layouts/SafariZone_Center/map.bin | 6 + data/layouts/SafariZone_East/border.bin | 1 + data/layouts/SafariZone_East/map.bin | Bin 0 -> 3780 bytes data/layouts/SafariZone_North_Frlg/border.bin | 1 + data/layouts/SafariZone_North_Frlg/map.bin | Bin 0 -> 4560 bytes .../SafariZone_RestHouse_Frlg/border.bin | Bin 0 -> 8 bytes .../layouts/SafariZone_RestHouse_Frlg/map.bin | 1 + .../layouts/SafariZone_SecretHouse/border.bin | Bin 0 -> 8 bytes data/layouts/SafariZone_SecretHouse/map.bin | 1 + data/layouts/SafariZone_West/border.bin | 1 + data/layouts/SafariZone_West/map.bin | Bin 0 -> 3456 bytes data/layouts/SaffronCity/border.bin | Bin 0 -> 8 bytes data/layouts/SaffronCity/map.bin | Bin 0 -> 7260 bytes .../layouts/SaffronCity_Connection/border.bin | Bin 0 -> 8 bytes data/layouts/SaffronCity_Connection/map.bin | Bin 0 -> 3840 bytes .../SaffronCity_CopycatsHouse_1F/border.bin | Bin 0 -> 8 bytes .../SaffronCity_CopycatsHouse_1F/map.bin | 1 + .../SaffronCity_CopycatsHouse_2F/border.bin | Bin 0 -> 8 bytes .../SaffronCity_CopycatsHouse_2F/map.bin | Bin 0 -> 216 bytes data/layouts/SaffronCity_Dojo/border.bin | Bin 0 -> 8 bytes data/layouts/SaffronCity_Dojo/map.bin | 1 + .../SaffronCity_EastWestEntrance/border.bin | Bin 0 -> 8 bytes .../SaffronCity_EastWestEntrance/map.bin | 1 + data/layouts/SaffronCity_Gym/border.bin | Bin 0 -> 8 bytes data/layouts/SaffronCity_Gym/map.bin | 1 + .../SaffronCity_NorthSouthEntrance/border.bin | Bin 0 -> 8 bytes .../SaffronCity_NorthSouthEntrance/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../SaffronCity_PokemonTrainerFanClub/map.bin | 2 + data/layouts/SeafoamIslands_1F/border.bin | 1 + data/layouts/SeafoamIslands_1F/map.bin | Bin 0 -> 1824 bytes data/layouts/SeafoamIslands_B1F/border.bin | 1 + data/layouts/SeafoamIslands_B1F/map.bin | 1 + data/layouts/SeafoamIslands_B2F/border.bin | 1 + data/layouts/SeafoamIslands_B2F/map.bin | Bin 0 -> 1824 bytes data/layouts/SeafoamIslands_B3F/border.bin | 1 + data/layouts/SeafoamIslands_B3F/map.bin | 3 + .../border.bin | 1 + .../SeafoamIslands_B3F_CurrentStopped/map.bin | 3 + data/layouts/SeafoamIslands_B4F/border.bin | 1 + data/layouts/SeafoamIslands_B4F/map.bin | 3 + .../border.bin | 1 + .../SeafoamIslands_B4F_CurrentStopped/map.bin | 3 + data/layouts/SevenIsland/border.bin | 1 + data/layouts/SevenIsland/map.bin | 1 + .../SevenIsland_House_Room1/border.bin | Bin 0 -> 8 bytes data/layouts/SevenIsland_House_Room1/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../SevenIsland_House_Room1_DoorOpen/map.bin | 1 + .../SevenIsland_House_Room2/border.bin | Bin 0 -> 8 bytes data/layouts/SevenIsland_House_Room2/map.bin | 1 + .../SevenIsland_SevaultCanyon/border.bin | Bin 0 -> 8 bytes .../layouts/SevenIsland_SevaultCanyon/map.bin | Bin 0 -> 3840 bytes .../border.bin | 1 + .../map.bin | Bin 0 -> 1920 bytes .../border.bin | 1 + .../map.bin | Bin 0 -> 480 bytes .../SevenIsland_TanobyRuins/border.bin | 1 + data/layouts/SevenIsland_TanobyRuins/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../map.bin | 1 + .../SevenIsland_TrainerTower/border.bin | 1 + data/layouts/SevenIsland_TrainerTower/map.bin | 1 + data/layouts/SilphCo_10F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_10F/map.bin | 1 + data/layouts/SilphCo_11F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_11F/map.bin | 1 + data/layouts/SilphCo_1F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_1F/map.bin | 1 + data/layouts/SilphCo_2F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_2F/map.bin | 1 + data/layouts/SilphCo_3F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_3F/map.bin | 1 + data/layouts/SilphCo_4F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_4F/map.bin | 1 + data/layouts/SilphCo_5F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_5F/map.bin | 1 + data/layouts/SilphCo_6F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_6F/map.bin | 1 + data/layouts/SilphCo_7F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_7F/map.bin | 1 + data/layouts/SilphCo_8F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_8F/map.bin | 1 + data/layouts/SilphCo_9F/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_9F/map.bin | 1 + data/layouts/SilphCo_Elevator/border.bin | Bin 0 -> 8 bytes data/layouts/SilphCo_Elevator/map.bin | 1 + data/layouts/SixIsland/border.bin | 1 + data/layouts/SixIsland/map.bin | 1 + .../layouts/SixIsland_AlteringCave/border.bin | 1 + data/layouts/SixIsland_AlteringCave/map.bin | Bin 0 -> 1536 bytes .../SixIsland_DottedHole_1F/border.bin | 1 + data/layouts/SixIsland_DottedHole_1F/map.bin | 1 + .../SixIsland_DottedHole_B1F/border.bin | 1 + data/layouts/SixIsland_DottedHole_B1F/map.bin | 1 + .../SixIsland_DottedHole_B2F/border.bin | 1 + data/layouts/SixIsland_DottedHole_B2F/map.bin | 1 + .../SixIsland_DottedHole_B3F/border.bin | 1 + data/layouts/SixIsland_DottedHole_B3F/map.bin | 1 + .../SixIsland_DottedHole_B4F/border.bin | 1 + data/layouts/SixIsland_DottedHole_B4F/map.bin | 1 + .../border.bin | 1 + .../SixIsland_DottedHole_SapphireRoom/map.bin | 1 + data/layouts/SixIsland_GreenPath/border.bin | 1 + data/layouts/SixIsland_GreenPath/map.bin | Bin 0 -> 2880 bytes .../SixIsland_OutcastIsland/border.bin | 1 + data/layouts/SixIsland_OutcastIsland/map.bin | 15 + data/layouts/SixIsland_PatternBush/border.bin | 1 + data/layouts/SixIsland_PatternBush/map.bin | 1 + data/layouts/SixIsland_RuinValley/border.bin | Bin 0 -> 8 bytes data/layouts/SixIsland_RuinValley/map.bin | Bin 0 -> 3840 bytes data/layouts/SixIsland_WaterPath/border.bin | 1 + data/layouts/SixIsland_WaterPath/map.bin | Bin 0 -> 4800 bytes .../SootopolisCity_House1_Frlg/border.bin | 1 + .../SootopolisCity_House1_Frlg/map.bin | 1 + .../SootopolisCity_House2_Frlg/border.bin | 1 + .../SootopolisCity_House2_Frlg/map.bin | 1 + .../SootopolisCity_House3_Frlg/border.bin | 1 + .../SootopolisCity_House3_Frlg/map.bin | 1 + data/layouts/ThreeIsland/border.bin | Bin 0 -> 8 bytes data/layouts/ThreeIsland/map.bin | 1 + .../ThreeIsland_BerryForest/border.bin | 1 + data/layouts/ThreeIsland_BerryForest/map.bin | 1 + .../layouts/ThreeIsland_BondBridge/border.bin | 1 + data/layouts/ThreeIsland_BondBridge/map.bin | Bin 0 -> 3840 bytes .../ThreeIsland_DunsparceTunnel/border.bin | 1 + .../ThreeIsland_DunsparceTunnel/map.bin | 1 + .../border.bin | 1 + .../map.bin | 1 + data/layouts/ThreeIsland_House1/border.bin | Bin 0 -> 8 bytes data/layouts/ThreeIsland_House1/map.bin | 1 + data/layouts/ThreeIsland_Port/border.bin | 1 + data/layouts/ThreeIsland_Port/map.bin | Bin 0 -> 1920 bytes data/layouts/TradeCenter_Frlg/border.bin | 1 + data/layouts/TradeCenter_Frlg/map.bin | 1 + data/layouts/TrainerTower_1F/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_1F/map.bin | Bin 0 -> 612 bytes .../TrainerTower_1F_Doubles/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_1F_Doubles/map.bin | Bin 0 -> 612 bytes .../TrainerTower_1F_Knockout/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_1F_Knockout/map.bin | Bin 0 -> 612 bytes data/layouts/TrainerTower_2F/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_2F/map.bin | Bin 0 -> 612 bytes .../TrainerTower_2F_Doubles/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_2F_Doubles/map.bin | Bin 0 -> 612 bytes .../TrainerTower_2F_Knockout/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_2F_Knockout/map.bin | Bin 0 -> 612 bytes data/layouts/TrainerTower_3F/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_3F/map.bin | Bin 0 -> 612 bytes .../TrainerTower_3F_Doubles/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_3F_Doubles/map.bin | Bin 0 -> 612 bytes .../TrainerTower_3F_Knockout/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_3F_Knockout/map.bin | Bin 0 -> 612 bytes data/layouts/TrainerTower_4F/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_4F/map.bin | Bin 0 -> 612 bytes .../TrainerTower_4F_Doubles/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_4F_Doubles/map.bin | Bin 0 -> 612 bytes .../TrainerTower_4F_Knockout/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_4F_Knockout/map.bin | Bin 0 -> 612 bytes data/layouts/TrainerTower_5F/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_5F/map.bin | Bin 0 -> 612 bytes .../TrainerTower_5F_Doubles/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_5F_Doubles/map.bin | Bin 0 -> 612 bytes .../TrainerTower_5F_Knockout/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_5F_Knockout/map.bin | Bin 0 -> 612 bytes data/layouts/TrainerTower_6F/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_6F/map.bin | Bin 0 -> 612 bytes .../TrainerTower_6F_Doubles/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_6F_Doubles/map.bin | Bin 0 -> 612 bytes .../TrainerTower_6F_Knockout/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_6F_Knockout/map.bin | Bin 0 -> 612 bytes data/layouts/TrainerTower_7F/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_7F/map.bin | Bin 0 -> 612 bytes .../TrainerTower_7F_Doubles/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_7F_Doubles/map.bin | Bin 0 -> 612 bytes .../TrainerTower_7F_Knockout/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_7F_Knockout/map.bin | Bin 0 -> 612 bytes data/layouts/TrainerTower_8F/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_8F/map.bin | Bin 0 -> 612 bytes .../TrainerTower_8F_Doubles/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_8F_Doubles/map.bin | Bin 0 -> 612 bytes .../TrainerTower_8F_Knockout/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_8F_Knockout/map.bin | Bin 0 -> 612 bytes data/layouts/TrainerTower_Elevator/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_Elevator/map.bin | 1 + data/layouts/TrainerTower_Lobby/border.bin | Bin 0 -> 8 bytes data/layouts/TrainerTower_Lobby/map.bin | 1 + data/layouts/TrainerTower_Roof/border.bin | 1 + data/layouts/TrainerTower_Roof/map.bin | 1 + data/layouts/TwoIsland/border.bin | Bin 0 -> 8 bytes data/layouts/TwoIsland/map.bin | Bin 0 -> 1920 bytes data/layouts/TwoIsland_CapeBrink/border.bin | 1 + data/layouts/TwoIsland_CapeBrink/map.bin | 1 + .../TwoIsland_JoyfulGameCorner/border.bin | Bin 0 -> 8 bytes .../TwoIsland_JoyfulGameCorner/map.bin | Bin 0 -> 240 bytes .../UndergroundPath_EastWestTunnel/border.bin | Bin 0 -> 8 bytes .../UndergroundPath_EastWestTunnel/map.bin | 1 + .../UndergroundPath_Entrance/border.bin | Bin 0 -> 8 bytes data/layouts/UndergroundPath_Entrance/map.bin | 1 + .../border.bin | Bin 0 -> 8 bytes .../UndergroundPath_NorthSouthTunnel/map.bin | 1 + data/layouts/UnionRoom_Frlg/border.bin | Bin 0 -> 8 bytes data/layouts/UnionRoom_Frlg/map.bin | 1 + data/layouts/Unused1/border.bin | Bin 0 -> 8 bytes data/layouts/Unused1/map.bin | Bin 0 -> 288 bytes data/layouts/VermilionCity/border.bin | 1 + data/layouts/VermilionCity/map.bin | 2 + data/layouts/VermilionCity_Gym/border.bin | Bin 0 -> 8 bytes data/layouts/VermilionCity_Gym/map.bin | 1 + .../VermilionCity_PokemonFanClub/border.bin | Bin 0 -> 8 bytes .../VermilionCity_PokemonFanClub/map.bin | 1 + data/layouts/VictoryRoad_1F_Frlg/border.bin | 1 + data/layouts/VictoryRoad_1F_Frlg/map.bin | 1 + data/layouts/VictoryRoad_2F/border.bin | 1 + data/layouts/VictoryRoad_2F/map.bin | Bin 0 -> 2244 bytes data/layouts/VictoryRoad_3F/border.bin | 1 + data/layouts/VictoryRoad_3F/map.bin | 1 + data/layouts/ViridianCity/border.bin | Bin 0 -> 8 bytes data/layouts/ViridianCity/map.bin | 1 + data/layouts/ViridianCity_Gym/border.bin | Bin 0 -> 8 bytes data/layouts/ViridianCity_Gym/map.bin | 1 + data/layouts/ViridianCity_House/border.bin | Bin 0 -> 8 bytes data/layouts/ViridianCity_House/map.bin | 1 + data/layouts/ViridianCity_School/border.bin | Bin 0 -> 8 bytes data/layouts/ViridianCity_School/map.bin | 1 + data/layouts/ViridianForest/border.bin | 1 + data/layouts/ViridianForest/map.bin | 1 + data/maps/BattleColosseum_2P_Frlg/scripts.inc | 2 + data/maps/BattleColosseum_4P_Frlg/scripts.inc | 2 + .../BirthIsland_Exterior_Frlg/scripts.inc | 113 ++ data/maps/BirthIsland_Harbor_Frlg/scripts.inc | 15 + data/maps/CeladonCity/scripts.inc | 218 +++ .../CeladonCity_Condominiums_1F/scripts.inc | 100 + .../CeladonCity_Condominiums_2F/scripts.inc | 10 + .../CeladonCity_Condominiums_3F/scripts.inc | 95 + .../CeladonCity_Condominiums_Roof/scripts.inc | 10 + .../scripts.inc | 157 ++ .../scripts.inc | 32 + .../scripts.inc | 81 + .../scripts.inc | 121 ++ .../scripts.inc | 55 + .../scripts.inc | 83 + .../scripts.inc | 115 ++ .../scripts.inc | 364 ++++ data/maps/CeladonCity_GameCorner/scripts.inc | 614 ++++++ .../scripts.inc | 418 +++++ data/maps/CeladonCity_Gym/scripts.inc | 237 +++ data/maps/CeladonCity_Hotel/scripts.inc | 37 + data/maps/CeladonCity_House1/scripts.inc | 31 + .../CeladonCity_PokemonCenter_1F/scripts.inc | 43 + .../CeladonCity_PokemonCenter_2F/scripts.inc | 19 + data/maps/CeladonCity_Restaurant/scripts.inc | 78 + data/maps/CeruleanCave_1F/scripts.inc | 7 + data/maps/CeruleanCave_2F/scripts.inc | 2 + data/maps/CeruleanCave_B1F/scripts.inc | 60 + data/maps/CeruleanCity/scripts.inc | 536 ++++++ data/maps/CeruleanCity_BikeShop/scripts.inc | 129 ++ data/maps/CeruleanCity_Gym/scripts.inc | 163 ++ data/maps/CeruleanCity_House1/scripts.inc | 146 ++ data/maps/CeruleanCity_House2/scripts.inc | 46 + data/maps/CeruleanCity_House3/scripts.inc | 47 + data/maps/CeruleanCity_House4/scripts.inc | 154 ++ data/maps/CeruleanCity_House5/scripts.inc | 245 +++ data/maps/CeruleanCity_Mart/scripts.inc | 50 + .../CeruleanCity_PokemonCenter_1F/scripts.inc | 63 + .../CeruleanCity_PokemonCenter_2F/scripts.inc | 19 + data/maps/CinnabarIsland/scripts.inc | 428 +++++ data/maps/CinnabarIsland_Gym/scripts.inc | 901 +++++++++ data/maps/CinnabarIsland_Mart/scripts.inc | 43 + .../scripts.inc | 179 ++ .../scripts.inc | 19 + .../scripts.inc | 60 + .../scripts.inc | 363 ++++ .../scripts.inc | 91 + .../scripts.inc | 38 + data/maps/DiglettsCave_B1F/scripts.inc | 7 + .../DiglettsCave_NorthEntrance/scripts.inc | 13 + .../DiglettsCave_SouthEntrance/scripts.inc | 13 + data/maps/FiveIsland/scripts.inc | 36 + data/maps/FiveIsland_Harbor/scripts.inc | 11 + data/maps/FiveIsland_House1/scripts.inc | 15 + data/maps/FiveIsland_House2/scripts.inc | 15 + .../FiveIsland_LostCave_Entrance/scripts.inc | 7 + .../FiveIsland_LostCave_Room1/scripts.inc | 23 + .../FiveIsland_LostCave_Room10/scripts.inc | 79 + .../FiveIsland_LostCave_Room11/scripts.inc | 2 + .../FiveIsland_LostCave_Room12/scripts.inc | 2 + .../FiveIsland_LostCave_Room13/scripts.inc | 2 + .../FiveIsland_LostCave_Room14/scripts.inc | 2 + .../FiveIsland_LostCave_Room2/scripts.inc | 2 + .../FiveIsland_LostCave_Room3/scripts.inc | 2 + .../FiveIsland_LostCave_Room4/scripts.inc | 20 + .../FiveIsland_LostCave_Room5/scripts.inc | 2 + .../FiveIsland_LostCave_Room6/scripts.inc | 2 + .../FiveIsland_LostCave_Room7/scripts.inc | 2 + .../FiveIsland_LostCave_Room8/scripts.inc | 2 + .../FiveIsland_LostCave_Room9/scripts.inc | 2 + data/maps/FiveIsland_Meadow/scripts.inc | 111 ++ .../FiveIsland_MemorialPillar/scripts.inc | 182 ++ .../FiveIsland_PokemonCenter_1F/scripts.inc | 34 + .../FiveIsland_PokemonCenter_2F/scripts.inc | 19 + .../FiveIsland_ResortGorgeous/scripts.inc | 138 ++ .../scripts.inc | 210 +++ .../FiveIsland_RocketWarehouse/scripts.inc | 311 ++++ .../FiveIsland_WaterLabyrinth/scripts.inc | 126 ++ data/maps/FourIsland/scripts.inc | 218 +++ data/maps/FourIsland_Harbor/scripts.inc | 11 + data/maps/FourIsland_House1/scripts.inc | 11 + data/maps/FourIsland_House2/scripts.inc | 2 + .../FourIsland_IcefallCave_1F/scripts.inc | 33 + .../FourIsland_IcefallCave_B1F/scripts.inc | 2 + .../FourIsland_IcefallCave_Back/scripts.inc | 265 +++ .../scripts.inc | 7 + .../maps/FourIsland_LoreleisHouse/scripts.inc | 63 + data/maps/FourIsland_Mart/scripts.inc | 47 + .../FourIsland_PokemonCenter_1F/scripts.inc | 73 + .../FourIsland_PokemonCenter_2F/scripts.inc | 19 + .../FourIsland_PokemonDayCare/scripts.inc | 190 ++ data/maps/FuchsiaCity/scripts.inc | 252 +++ data/maps/FuchsiaCity_Gym/scripts.inc | 247 +++ data/maps/FuchsiaCity_House1/scripts.inc | 36 + data/maps/FuchsiaCity_House2/scripts.inc | 70 + data/maps/FuchsiaCity_House3/scripts.inc | 90 + data/maps/FuchsiaCity_Mart/scripts.inc | 43 + .../FuchsiaCity_PokemonCenter_1F/scripts.inc | 46 + .../FuchsiaCity_PokemonCenter_2F/scripts.inc | 19 + .../scripts.inc | 280 +++ .../FuchsiaCity_SafariZone_Office/scripts.inc | 44 + .../maps/FuchsiaCity_WardensHouse/scripts.inc | 125 ++ data/maps/IndigoPlateau_Exterior/scripts.inc | 186 ++ .../scripts.inc | 113 ++ .../scripts.inc | 19 + data/maps/LavenderTown/scripts.inc | 88 + data/maps/LavenderTown_House1/scripts.inc | 42 + data/maps/LavenderTown_House2/scripts.inc | 110 ++ data/maps/LavenderTown_Mart/scripts.inc | 65 + .../LavenderTown_PokemonCenter_1F/scripts.inc | 44 + .../LavenderTown_PokemonCenter_2F/scripts.inc | 19 + .../scripts.inc | 149 ++ data/maps/MtEmber_Exterior/scripts.inc | 247 +++ data/maps/MtEmber_RubyPath_1F/scripts.inc | 2 + data/maps/MtEmber_RubyPath_B1F/scripts.inc | 2 + .../MtEmber_RubyPath_B1F_Stairs/scripts.inc | 2 + data/maps/MtEmber_RubyPath_B2F/scripts.inc | 2 + .../MtEmber_RubyPath_B2F_Stairs/scripts.inc | 2 + data/maps/MtEmber_RubyPath_B3F/scripts.inc | 16 + data/maps/MtEmber_RubyPath_B4F/scripts.inc | 62 + data/maps/MtEmber_RubyPath_B5F/scripts.inc | 16 + data/maps/MtEmber_Summit/scripts.inc | 56 + data/maps/MtEmber_SummitPath_1F/scripts.inc | 2 + data/maps/MtEmber_SummitPath_2F/scripts.inc | 2 + data/maps/MtEmber_SummitPath_3F/scripts.inc | 2 + data/maps/MtMoon_1F/scripts.inc | 139 ++ data/maps/MtMoon_B1F/scripts.inc | 2 + data/maps/MtMoon_B2F/scripts.inc | 219 +++ data/maps/NavelRock_1F/scripts.inc | 2 + data/maps/NavelRock_B1F_Frlg/scripts.inc | 2 + data/maps/NavelRock_BasePath_B10F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B11F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B1F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B2F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B3F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B4F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B5F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B6F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B7F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B8F/scripts.inc | 2 + data/maps/NavelRock_BasePath_B9F/scripts.inc | 2 + data/maps/NavelRock_Bottom_Frlg/scripts.inc | 76 + data/maps/NavelRock_Exterior_Frlg/scripts.inc | 7 + data/maps/NavelRock_Fork_Frlg/scripts.inc | 2 + data/maps/NavelRock_Harbor_Frlg/scripts.inc | 15 + data/maps/NavelRock_Summit/scripts.inc | 115 ++ data/maps/NavelRock_SummitPath_2F/scripts.inc | 2 + data/maps/NavelRock_SummitPath_3F/scripts.inc | 2 + data/maps/NavelRock_SummitPath_4F/scripts.inc | 2 + data/maps/NavelRock_SummitPath_5F/scripts.inc | 2 + data/maps/OneIsland/scripts.inc | 169 ++ data/maps/OneIsland_Harbor/scripts.inc | 42 + data/maps/OneIsland_House1/scripts.inc | 20 + data/maps/OneIsland_House2/scripts.inc | 12 + data/maps/OneIsland_KindleRoad/scripts.inc | 175 ++ .../OneIsland_KindleRoad_EmberSpa/scripts.inc | 107 ++ .../OneIsland_PokemonCenter_1F/scripts.inc | 921 +++++++++ .../OneIsland_PokemonCenter_2F/scripts.inc | 19 + data/maps/OneIsland_TreasureBeach/scripts.inc | 25 + data/maps/PalletTown/scripts.inc | 548 ++++++ .../PalletTown_PlayersHouse_1F/scripts.inc | 92 + .../PalletTown_PlayersHouse_2F/scripts.inc | 40 + .../PalletTown_ProfessorOaksLab/scripts.inc | 1657 +++++++++++++++++ data/maps/PalletTown_RivalsHouse/scripts.inc | 293 +++ data/maps/PewterCity/scripts.inc | 976 ++++++++++ data/maps/PewterCity_Gym/scripts.inc | 202 ++ data/maps/PewterCity_House1/scripts.inc | 47 + data/maps/PewterCity_House2/scripts.inc | 25 + data/maps/PewterCity_Mart/scripts.inc | 46 + data/maps/PewterCity_Museum_1F/scripts.inc | 277 +++ data/maps/PewterCity_Museum_2F/scripts.inc | 85 + .../PewterCity_PokemonCenter_1F/scripts.inc | 73 + .../PewterCity_PokemonCenter_2F/scripts.inc | 19 + .../PokemonLeague_AgathasRoom/scripts.inc | 131 ++ .../maps/PokemonLeague_BrunosRoom/scripts.inc | 148 ++ .../PokemonLeague_ChampionsRoom/scripts.inc | 327 ++++ .../maps/PokemonLeague_HallOfFame/scripts.inc | 70 + .../maps/PokemonLeague_LancesRoom/scripts.inc | 218 +++ .../PokemonLeague_LoreleisRoom/scripts.inc | 127 ++ data/maps/PokemonMansion_1F/scripts.inc | 57 + data/maps/PokemonMansion_2F/scripts.inc | 64 + data/maps/PokemonMansion_3F/scripts.inc | 57 + data/maps/PokemonMansion_B1F/scripts.inc | 60 + data/maps/PokemonTower_1F/scripts.inc | 67 + data/maps/PokemonTower_2F/scripts.inc | 132 ++ data/maps/PokemonTower_3F/scripts.inc | 54 + data/maps/PokemonTower_4F/scripts.inc | 51 + data/maps/PokemonTower_5F/scripts.inc | 94 + data/maps/PokemonTower_6F/scripts.inc | 90 + data/maps/PokemonTower_7F/scripts.inc | 282 +++ data/maps/PowerPlant/scripts.inc | 115 ++ data/maps/Prototype_SeviiIsle_6/scripts.inc | 2 + data/maps/Prototype_SeviiIsle_7/scripts.inc | 2 + data/maps/Prototype_SeviiIsle_8/scripts.inc | 2 + data/maps/Prototype_SeviiIsle_9/scripts.inc | 2 + data/maps/RecordCorner_Frlg/scripts.inc | 2 + data/maps/RockTunnel_1F/scripts.inc | 130 ++ data/maps/RockTunnel_B1F/scripts.inc | 138 ++ data/maps/RocketHideout_B1F/scripts.inc | 117 ++ data/maps/RocketHideout_B2F/scripts.inc | 20 + data/maps/RocketHideout_B3F/scripts.inc | 39 + data/maps/RocketHideout_B4F/scripts.inc | 178 ++ data/maps/RocketHideout_Elevator/scripts.inc | 93 + data/maps/Route1/scripts.inc | 64 + data/maps/Route10/scripts.inc | 104 ++ .../maps/Route10_PokemonCenter_1F/scripts.inc | 110 ++ .../maps/Route10_PokemonCenter_2F/scripts.inc | 19 + data/maps/Route11/scripts.inc | 120 ++ data/maps/Route11_EastEntrance_1F/scripts.inc | 32 + data/maps/Route11_EastEntrance_2F/scripts.inc | 138 ++ data/maps/Route12/scripts.inc | 202 ++ data/maps/Route12_FishingHouse/scripts.inc | 189 ++ .../maps/Route12_NorthEntrance_1F/scripts.inc | 11 + .../maps/Route12_NorthEntrance_2F/scripts.inc | 80 + data/maps/Route13/scripts.inc | 143 ++ data/maps/Route14/scripts.inc | 163 ++ data/maps/Route15/scripts.inc | 161 ++ data/maps/Route15_WestEntrance_1F/scripts.inc | 12 + data/maps/Route15_WestEntrance_2F/scripts.inc | 93 + data/maps/Route16/scripts.inc | 188 ++ data/maps/Route16_House/scripts.inc | 57 + .../maps/Route16_NorthEntrance_1F/scripts.inc | 131 ++ .../maps/Route16_NorthEntrance_2F/scripts.inc | 99 + data/maps/Route17/scripts.inc | 158 ++ data/maps/Route18/scripts.inc | 69 + data/maps/Route18_EastEntrance_1F/scripts.inc | 122 ++ data/maps/Route18_EastEntrance_2F/scripts.inc | 55 + data/maps/Route19/scripts.inc | 161 ++ data/maps/Route19_UnusedHouse/scripts.inc | 2 + data/maps/Route2/scripts.inc | 18 + data/maps/Route20/scripts.inc | 153 ++ data/maps/Route21_North/scripts.inc | 53 + data/maps/Route21_South/scripts.inc | 90 + data/maps/Route22/scripts.inc | 301 +++ data/maps/Route22_NorthEntrance/scripts.inc | 18 + data/maps/Route23/scripts.inc | 133 ++ data/maps/Route23_UnusedHouse/scripts.inc | 2 + data/maps/Route24/scripts.inc | 198 ++ data/maps/Route25/scripts.inc | 130 ++ data/maps/Route25_SeaCottage/scripts.inc | 405 ++++ data/maps/Route2_EastBuilding/scripts.inc | 72 + data/maps/Route2_House/scripts.inc | 47 + .../scripts.inc | 35 + .../scripts.inc | 21 + data/maps/Route3/scripts.inc | 115 ++ data/maps/Route4/scripts.inc | 97 + data/maps/Route4_PokemonCenter_1F/scripts.inc | 204 ++ data/maps/Route4_PokemonCenter_2F/scripts.inc | 19 + data/maps/Route5/scripts.inc | 11 + data/maps/Route5_PokemonDayCare/scripts.inc | 73 + data/maps/Route5_SouthEntrance/scripts.inc | 111 ++ data/maps/Route6/scripts.inc | 80 + data/maps/Route6_NorthEntrance/scripts.inc | 111 ++ data/maps/Route6_UnusedHouse/scripts.inc | 2 + data/maps/Route7/scripts.inc | 11 + data/maps/Route7_EastEntrance/scripts.inc | 111 ++ data/maps/Route8/scripts.inc | 169 ++ data/maps/Route8_WestEntrance/scripts.inc | 123 ++ data/maps/Route9/scripts.inc | 113 ++ data/maps/SSAnne_1F_Corridor/scripts.inc | 25 + data/maps/SSAnne_1F_Room1/scripts.inc | 13 + data/maps/SSAnne_1F_Room2/scripts.inc | 48 + data/maps/SSAnne_1F_Room3/scripts.inc | 32 + data/maps/SSAnne_1F_Room4/scripts.inc | 25 + data/maps/SSAnne_1F_Room5/scripts.inc | 20 + data/maps/SSAnne_1F_Room6/scripts.inc | 42 + data/maps/SSAnne_1F_Room7/scripts.inc | 19 + data/maps/SSAnne_2F_Corridor/scripts.inc | 207 ++ data/maps/SSAnne_2F_Room1/scripts.inc | 22 + data/maps/SSAnne_2F_Room2/scripts.inc | 36 + data/maps/SSAnne_2F_Room3/scripts.inc | 23 + data/maps/SSAnne_2F_Room4/scripts.inc | 35 + data/maps/SSAnne_2F_Room5/scripts.inc | 22 + data/maps/SSAnne_2F_Room6/scripts.inc | 18 + data/maps/SSAnne_3F_Corridor/scripts.inc | 13 + data/maps/SSAnne_B1F_Corridor/scripts.inc | 2 + data/maps/SSAnne_B1F_Room1/scripts.inc | 39 + data/maps/SSAnne_B1F_Room2/scripts.inc | 18 + data/maps/SSAnne_B1F_Room3/scripts.inc | 19 + data/maps/SSAnne_B1F_Room4/scripts.inc | 36 + data/maps/SSAnne_B1F_Room5/scripts.inc | 25 + data/maps/SSAnne_CaptainsOffice/scripts.inc | 101 + data/maps/SSAnne_Deck/scripts.inc | 60 + data/maps/SSAnne_Exterior/scripts.inc | 65 + data/maps/SSAnne_Kitchen/scripts.inc | 99 + data/maps/SafariZone_Center/scripts.inc | 31 + .../SafariZone_Center_RestHouse/scripts.inc | 19 + data/maps/SafariZone_East/scripts.inc | 27 + .../SafariZone_East_RestHouse/scripts.inc | 27 + data/maps/SafariZone_North_Frlg/scripts.inc | 44 + .../SafariZone_North_RestHouse/scripts.inc | 30 + data/maps/SafariZone_SecretHouse/scripts.inc | 54 + data/maps/SafariZone_West/scripts.inc | 39 + .../SafariZone_West_RestHouse/scripts.inc | 37 + data/maps/SaffronCity/scripts.inc | 240 +++ data/maps/SaffronCity_Connection/scripts.inc | 2 + .../SaffronCity_CopycatsHouse_1F/scripts.inc | 34 + .../SaffronCity_CopycatsHouse_2F/scripts.inc | 119 ++ data/maps/SaffronCity_Dojo/scripts.inc | 253 +++ data/maps/SaffronCity_Gym/scripts.inc | 257 +++ data/maps/SaffronCity_House/scripts.inc | 45 + data/maps/SaffronCity_Mart/scripts.inc | 43 + .../SaffronCity_MrPsychicsHouse/scripts.inc | 44 + .../SaffronCity_PokemonCenter_1F/scripts.inc | 57 + .../SaffronCity_PokemonCenter_2F/scripts.inc | 19 + .../scripts.inc | 675 +++++++ data/maps/SeafoamIslands_1F/scripts.inc | 7 + data/maps/SeafoamIslands_B1F/scripts.inc | 2 + data/maps/SeafoamIslands_B2F/scripts.inc | 2 + data/maps/SeafoamIslands_B3F/scripts.inc | 95 + data/maps/SeafoamIslands_B4F/scripts.inc | 224 +++ data/maps/SevenIsland/scripts.inc | 58 + data/maps/SevenIsland_Harbor/scripts.inc | 11 + data/maps/SevenIsland_House_Room1/scripts.inc | 267 +++ data/maps/SevenIsland_House_Room2/scripts.inc | 74 + data/maps/SevenIsland_Mart/scripts.inc | 57 + .../SevenIsland_PokemonCenter_1F/scripts.inc | 47 + .../SevenIsland_PokemonCenter_2F/scripts.inc | 19 + .../SevenIsland_SevaultCanyon/scripts.inc | 137 ++ .../scripts.inc | 100 + .../scripts.inc | 104 ++ .../scripts.inc | 135 ++ data/maps/SevenIsland_TanobyRuins/scripts.inc | 55 + .../scripts.inc | 7 + .../scripts.inc | 7 + .../scripts.inc | 8 + .../scripts.inc | 7 + .../scripts.inc | 7 + .../scripts.inc | 7 + .../scripts.inc | 7 + .../maps/SevenIsland_TrainerTower/scripts.inc | 48 + data/maps/SevenIsland_UnusedHouse/scripts.inc | 2 + data/maps/SilphCo_10F/scripts.inc | 68 + data/maps/SilphCo_11F/scripts.inc | 228 +++ data/maps/SilphCo_1F/scripts.inc | 25 + data/maps/SilphCo_2F/scripts.inc | 111 ++ data/maps/SilphCo_3F/scripts.inc | 70 + data/maps/SilphCo_4F/scripts.inc | 86 + data/maps/SilphCo_5F/scripts.inc | 140 ++ data/maps/SilphCo_6F/scripts.inc | 170 ++ data/maps/SilphCo_7F/scripts.inc | 368 ++++ data/maps/SilphCo_8F/scripts.inc | 89 + data/maps/SilphCo_9F/scripts.inc | 93 + data/maps/SilphCo_Elevator/scripts.inc | 143 ++ data/maps/SixIsland/scripts.inc | 34 + data/maps/SixIsland_AlteringCave/scripts.inc | 7 + data/maps/SixIsland_DottedHole_1F/scripts.inc | 31 + .../maps/SixIsland_DottedHole_B1F/scripts.inc | 2 + .../maps/SixIsland_DottedHole_B2F/scripts.inc | 2 + .../maps/SixIsland_DottedHole_B3F/scripts.inc | 2 + .../maps/SixIsland_DottedHole_B4F/scripts.inc | 2 + .../scripts.inc | 264 +++ data/maps/SixIsland_GreenPath/scripts.inc | 32 + data/maps/SixIsland_Harbor/scripts.inc | 11 + data/maps/SixIsland_House/scripts.inc | 14 + data/maps/SixIsland_Mart/scripts.inc | 43 + data/maps/SixIsland_OutcastIsland/scripts.inc | 93 + data/maps/SixIsland_PatternBush/scripts.inc | 235 +++ .../SixIsland_PokemonCenter_1F/scripts.inc | 115 ++ .../SixIsland_PokemonCenter_2F/scripts.inc | 19 + data/maps/SixIsland_RuinValley/scripts.inc | 130 ++ data/maps/SixIsland_WaterPath/scripts.inc | 113 ++ .../SixIsland_WaterPath_House1/scripts.inc | 127 ++ .../SixIsland_WaterPath_House2/scripts.inc | 13 + data/maps/ThreeIsland/scripts.inc | 554 ++++++ data/maps/ThreeIsland_BerryForest/scripts.inc | 104 ++ data/maps/ThreeIsland_BondBridge/scripts.inc | 112 ++ .../ThreeIsland_DunsparceTunnel/scripts.inc | 79 + data/maps/ThreeIsland_Harbor/scripts.inc | 11 + data/maps/ThreeIsland_House1/scripts.inc | 24 + data/maps/ThreeIsland_House2/scripts.inc | 32 + data/maps/ThreeIsland_House3/scripts.inc | 12 + data/maps/ThreeIsland_House4/scripts.inc | 21 + data/maps/ThreeIsland_House5/scripts.inc | 28 + data/maps/ThreeIsland_Mart/scripts.inc | 54 + .../ThreeIsland_PokemonCenter_1F/scripts.inc | 47 + .../ThreeIsland_PokemonCenter_2F/scripts.inc | 19 + data/maps/ThreeIsland_Port/scripts.inc | 64 + data/maps/TradeCenter_Frlg/scripts.inc | 2 + data/maps/TrainerHill_Entrance/scripts.inc | 1 + data/maps/TrainerTower_1F/scripts.inc | 27 + data/maps/TrainerTower_2F/scripts.inc | 27 + data/maps/TrainerTower_3F/scripts.inc | 27 + data/maps/TrainerTower_4F/scripts.inc | 27 + data/maps/TrainerTower_5F/scripts.inc | 27 + data/maps/TrainerTower_6F/scripts.inc | 27 + data/maps/TrainerTower_7F/scripts.inc | 27 + data/maps/TrainerTower_8F/scripts.inc | 27 + data/maps/TrainerTower_Elevator/scripts.inc | 79 + data/maps/TrainerTower_Lobby/scripts.inc | 342 ++++ data/maps/TrainerTower_Roof/scripts.inc | 10 + data/maps/TwoIsland/scripts.inc | 303 +++ data/maps/TwoIsland_CapeBrink/scripts.inc | 2 + .../TwoIsland_CapeBrink_House/scripts.inc | 58 + data/maps/TwoIsland_Harbor/scripts.inc | 11 + data/maps/TwoIsland_House/scripts.inc | 166 ++ .../TwoIsland_JoyfulGameCorner/scripts.inc | 303 +++ .../TwoIsland_PokemonCenter_1F/scripts.inc | 38 + .../TwoIsland_PokemonCenter_2F/scripts.inc | 19 + .../UndergroundPath_EastEntrance/scripts.inc | 12 + .../scripts.inc | 7 + .../UndergroundPath_NorthEntrance/scripts.inc | 36 + .../scripts.inc | 7 + .../UndergroundPath_SouthEntrance/scripts.inc | 11 + .../UndergroundPath_WestEntrance/scripts.inc | 11 + data/maps/UnionRoom_Frlg/scripts.inc | 107 ++ data/maps/VermilionCity/scripts.inc | 396 ++++ data/maps/VermilionCity_Gym/scripts.inc | 421 +++++ data/maps/VermilionCity_House1/scripts.inc | 68 + data/maps/VermilionCity_House2/scripts.inc | 57 + data/maps/VermilionCity_House3/scripts.inc | 45 + data/maps/VermilionCity_Mart/scripts.inc | 48 + .../scripts.inc | 89 + .../scripts.inc | 19 + .../VermilionCity_PokemonFanClub/scripts.inc | 216 +++ data/maps/VictoryRoad_1F_Frlg/scripts.inc | 67 + data/maps/VictoryRoad_2F/scripts.inc | 136 ++ data/maps/VictoryRoad_3F/scripts.inc | 161 ++ data/maps/ViridianCity/scripts.inc | 359 ++++ data/maps/ViridianCity_Gym/scripts.inc | 277 +++ data/maps/ViridianCity_House/scripts.inc | 41 + data/maps/ViridianCity_Mart/scripts.inc | 111 ++ .../ViridianCity_PokemonCenter_1F/scripts.inc | 46 + .../ViridianCity_PokemonCenter_2F/scripts.inc | 19 + data/maps/ViridianCity_School/scripts.inc | 188 ++ data/maps/ViridianForest/scripts.inc | 170 ++ data/text/braille.inc | 158 ++ data/text/day_care_frlg.inc | 130 ++ data/text/fame_checker.inc | 1487 +++++++++++++++ data/text/ingame_trade.inc | 60 + data/text/new_game_intro_frlg.inc | 243 +++ data/text/pc_transfer.inc | 4 + data/text/pokedex_rating.inc | 125 ++ data/text/surf.inc | 4 + data/text/trainer_card.inc | 167 ++ data/text/trainers_frlg.inc | 992 ++++++++++ .../building_frlg/metatile_attributes.bin | Bin 0 -> 2560 bytes .../primary/building_frlg/metatiles.bin | Bin 0 -> 10240 bytes .../primary/building_frlg/palettes/00.pal | 19 + .../primary/building_frlg/palettes/01.pal | 19 + .../primary/building_frlg/palettes/02.pal | 19 + .../primary/building_frlg/palettes/03.pal | 19 + .../primary/building_frlg/palettes/04.pal | 19 + .../primary/building_frlg/palettes/05.pal | 19 + .../primary/building_frlg/palettes/06.pal | 19 + .../primary/building_frlg/palettes/07.pal | 19 + .../primary/building_frlg/palettes/08.pal | 19 + .../primary/building_frlg/palettes/09.pal | 19 + .../primary/building_frlg/palettes/10.pal | 19 + .../primary/building_frlg/palettes/11.pal | 19 + .../primary/building_frlg/palettes/12.pal | 19 + .../primary/building_frlg/palettes/13.pal | 19 + .../primary/building_frlg/palettes/14.pal | 19 + .../primary/building_frlg/palettes/15.pal | 19 + data/tilesets/primary/building_frlg/tiles.png | Bin 0 -> 7011 bytes .../primary/general_frlg/anim/flower/0.png | Bin 0 -> 219 bytes .../primary/general_frlg/anim/flower/1.png | Bin 0 -> 221 bytes .../primary/general_frlg/anim/flower/2.png | Bin 0 -> 219 bytes .../primary/general_frlg/anim/flower/3.png | Bin 0 -> 218 bytes .../primary/general_frlg/anim/flower/4.png | Bin 0 -> 219 bytes .../general_frlg/anim/sandwatersedge/0.png | Bin 0 -> 461 bytes .../general_frlg/anim/sandwatersedge/1.png | Bin 0 -> 470 bytes .../general_frlg/anim/sandwatersedge/2.png | Bin 0 -> 485 bytes .../general_frlg/anim/sandwatersedge/3.png | Bin 0 -> 512 bytes .../general_frlg/anim/sandwatersedge/4.png | Bin 0 -> 495 bytes .../general_frlg/anim/sandwatersedge/5.png | Bin 0 -> 501 bytes .../general_frlg/anim/sandwatersedge/6.png | Bin 0 -> 499 bytes .../general_frlg/anim/sandwatersedge/7.png | Bin 0 -> 465 bytes .../anim/water_current_landwatersedge/0.png | Bin 0 -> 629 bytes .../anim/water_current_landwatersedge/1.png | Bin 0 -> 634 bytes .../anim/water_current_landwatersedge/2.png | Bin 0 -> 821 bytes .../anim/water_current_landwatersedge/3.png | Bin 0 -> 834 bytes .../anim/water_current_landwatersedge/4.png | Bin 0 -> 883 bytes .../anim/water_current_landwatersedge/5.png | Bin 0 -> 910 bytes .../anim/water_current_landwatersedge/6.png | Bin 0 -> 864 bytes .../anim/water_current_landwatersedge/7.png | Bin 0 -> 806 bytes .../general_frlg/metatile_attributes.bin | Bin 0 -> 2560 bytes .../primary/general_frlg/metatiles.bin | Bin 0 -> 10240 bytes .../primary/general_frlg/palettes/00.pal | 19 + .../primary/general_frlg/palettes/01.pal | 19 + .../primary/general_frlg/palettes/02.pal | 19 + .../primary/general_frlg/palettes/03.pal | 19 + .../primary/general_frlg/palettes/04.pal | 19 + .../primary/general_frlg/palettes/05.pal | 19 + .../primary/general_frlg/palettes/06.pal | 19 + .../primary/general_frlg/palettes/07.pal | 19 + .../primary/general_frlg/palettes/08.pal | 19 + .../primary/general_frlg/palettes/09.pal | 19 + .../primary/general_frlg/palettes/10.pal | 19 + .../primary/general_frlg/palettes/11.pal | 19 + .../primary/general_frlg/palettes/12.pal | 19 + .../primary/general_frlg/palettes/13.pal | 19 + .../primary/general_frlg/palettes/14.pal | 19 + .../primary/general_frlg/palettes/15.pal | 19 + data/tilesets/primary/general_frlg/tiles.png | Bin 0 -> 8671 bytes .../berry_forest/metatile_attributes.bin | Bin 0 -> 168 bytes .../secondary/berry_forest/metatiles.bin | Bin 0 -> 672 bytes .../secondary/berry_forest/palettes/00.pal | 19 + .../secondary/berry_forest/palettes/01.pal | 19 + .../secondary/berry_forest/palettes/02.pal | 19 + .../secondary/berry_forest/palettes/03.pal | 19 + .../secondary/berry_forest/palettes/04.pal | 19 + .../secondary/berry_forest/palettes/05.pal | 19 + .../secondary/berry_forest/palettes/06.pal | 19 + .../secondary/berry_forest/palettes/07.pal | 19 + .../secondary/berry_forest/palettes/08.pal | 19 + .../secondary/berry_forest/palettes/09.pal | 19 + .../secondary/berry_forest/palettes/10.pal | 19 + .../secondary/berry_forest/palettes/11.pal | 19 + .../secondary/berry_forest/palettes/12.pal | 19 + .../secondary/berry_forest/palettes/13.pal | 19 + .../secondary/berry_forest/palettes/14.pal | 19 + .../secondary/berry_forest/palettes/15.pal | 19 + .../tilesets/secondary/berry_forest/tiles.png | Bin 0 -> 986 bytes .../bike_shop_frlg/metatile_attributes.bin | Bin 0 -> 168 bytes .../secondary/bike_shop_frlg/metatiles.bin | Bin 0 -> 672 bytes .../secondary/bike_shop_frlg/palettes/00.pal | 19 + .../secondary/bike_shop_frlg/palettes/01.pal | 19 + .../secondary/bike_shop_frlg/palettes/02.pal | 19 + .../secondary/bike_shop_frlg/palettes/03.pal | 19 + .../secondary/bike_shop_frlg/palettes/04.pal | 19 + .../secondary/bike_shop_frlg/palettes/05.pal | 19 + .../secondary/bike_shop_frlg/palettes/06.pal | 19 + .../secondary/bike_shop_frlg/palettes/07.pal | 19 + .../secondary/bike_shop_frlg/palettes/08.pal | 19 + .../secondary/bike_shop_frlg/palettes/09.pal | 19 + .../secondary/bike_shop_frlg/palettes/10.pal | 19 + .../secondary/bike_shop_frlg/palettes/11.pal | 19 + .../secondary/bike_shop_frlg/palettes/12.pal | 19 + .../secondary/bike_shop_frlg/palettes/13.pal | 19 + .../secondary/bike_shop_frlg/palettes/14.pal | 19 + .../secondary/bike_shop_frlg/palettes/15.pal | 19 + .../secondary/bike_shop_frlg/tiles.png | Bin 0 -> 855 bytes .../burgled_house/metatile_attributes.bin | Bin 0 -> 228 bytes .../secondary/burgled_house/metatiles.bin | Bin 0 -> 912 bytes .../secondary/burgled_house/palettes/00.pal | 19 + .../secondary/burgled_house/palettes/01.pal | 19 + .../secondary/burgled_house/palettes/02.pal | 19 + .../secondary/burgled_house/palettes/03.pal | 19 + .../secondary/burgled_house/palettes/04.pal | 19 + .../secondary/burgled_house/palettes/05.pal | 19 + .../secondary/burgled_house/palettes/06.pal | 19 + .../secondary/burgled_house/palettes/07.pal | 19 + .../secondary/burgled_house/palettes/08.pal | 19 + .../secondary/burgled_house/palettes/09.pal | 19 + .../secondary/burgled_house/palettes/10.pal | 19 + .../secondary/burgled_house/palettes/11.pal | 19 + .../secondary/burgled_house/palettes/12.pal | 19 + .../secondary/burgled_house/palettes/13.pal | 19 + .../secondary/burgled_house/palettes/14.pal | 19 + .../secondary/burgled_house/palettes/15.pal | 19 + .../secondary/burgled_house/tiles.png | Bin 0 -> 1994 bytes .../cable_club_frlg/metatile_attributes.bin | Bin 0 -> 1024 bytes .../secondary/cable_club_frlg/metatiles.bin | Bin 0 -> 4096 bytes .../secondary/cable_club_frlg/palettes/00.pal | 19 + .../secondary/cable_club_frlg/palettes/01.pal | 19 + .../secondary/cable_club_frlg/palettes/02.pal | 19 + .../secondary/cable_club_frlg/palettes/03.pal | 19 + .../secondary/cable_club_frlg/palettes/04.pal | 19 + .../secondary/cable_club_frlg/palettes/05.pal | 19 + .../secondary/cable_club_frlg/palettes/06.pal | 19 + .../secondary/cable_club_frlg/palettes/07.pal | 19 + .../secondary/cable_club_frlg/palettes/08.pal | 19 + .../secondary/cable_club_frlg/palettes/09.pal | 19 + .../secondary/cable_club_frlg/palettes/10.pal | 19 + .../secondary/cable_club_frlg/palettes/11.pal | 19 + .../secondary/cable_club_frlg/palettes/12.pal | 19 + .../secondary/cable_club_frlg/palettes/13.pal | 19 + .../secondary/cable_club_frlg/palettes/14.pal | 19 + .../secondary/cable_club_frlg/palettes/15.pal | 19 + .../secondary/cable_club_frlg/tiles.png | Bin 0 -> 2667 bytes .../cave_frlg/metatile_attributes.bin | Bin 0 -> 644 bytes .../secondary/cave_frlg/metatiles.bin | Bin 0 -> 2576 bytes .../secondary/cave_frlg/palettes/00.pal | 19 + .../secondary/cave_frlg/palettes/01.pal | 19 + .../secondary/cave_frlg/palettes/02.pal | 19 + .../secondary/cave_frlg/palettes/03.pal | 19 + .../secondary/cave_frlg/palettes/04.pal | 19 + .../secondary/cave_frlg/palettes/05.pal | 19 + .../secondary/cave_frlg/palettes/06.pal | 19 + .../secondary/cave_frlg/palettes/07.pal | 19 + .../secondary/cave_frlg/palettes/08.pal | 19 + .../secondary/cave_frlg/palettes/09.pal | 19 + .../secondary/cave_frlg/palettes/10.pal | 19 + .../secondary/cave_frlg/palettes/11.pal | 19 + .../secondary/cave_frlg/palettes/12.pal | 19 + .../secondary/cave_frlg/palettes/13.pal | 19 + .../secondary/cave_frlg/palettes/14.pal | 19 + .../secondary/cave_frlg/palettes/15.pal | 19 + data/tilesets/secondary/cave_frlg/tiles.png | Bin 0 -> 4193 bytes .../celadon_city/anim/fountain/0.png | Bin 0 -> 249 bytes .../celadon_city/anim/fountain/1.png | Bin 0 -> 235 bytes .../celadon_city/anim/fountain/2.png | Bin 0 -> 266 bytes .../celadon_city/anim/fountain/3.png | Bin 0 -> 293 bytes .../celadon_city/anim/fountain/4.png | Bin 0 -> 276 bytes .../celadon_city/metatile_attributes.bin | Bin 0 -> 960 bytes .../secondary/celadon_city/metatiles.bin | Bin 0 -> 3840 bytes .../secondary/celadon_city/palettes/00.pal | 19 + .../secondary/celadon_city/palettes/01.pal | 19 + .../secondary/celadon_city/palettes/02.pal | 19 + .../secondary/celadon_city/palettes/03.pal | 19 + .../secondary/celadon_city/palettes/04.pal | 19 + .../secondary/celadon_city/palettes/05.pal | 19 + .../secondary/celadon_city/palettes/06.pal | 19 + .../secondary/celadon_city/palettes/07.pal | 19 + .../secondary/celadon_city/palettes/08.pal | 19 + .../secondary/celadon_city/palettes/09.pal | 19 + .../secondary/celadon_city/palettes/10.pal | 19 + .../secondary/celadon_city/palettes/11.pal | 19 + .../secondary/celadon_city/palettes/12.pal | 19 + .../secondary/celadon_city/palettes/13.pal | 19 + .../secondary/celadon_city/palettes/14.pal | 19 + .../secondary/celadon_city/palettes/15.pal | 19 + .../tilesets/secondary/celadon_city/tiles.png | Bin 0 -> 2580 bytes .../secondary/celadon_gym/anim/flowers/0.png | Bin 0 -> 222 bytes .../secondary/celadon_gym/anim/flowers/1.png | Bin 0 -> 222 bytes .../secondary/celadon_gym/anim/flowers/2.png | Bin 0 -> 212 bytes .../celadon_gym/metatile_attributes.bin | Bin 0 -> 256 bytes .../secondary/celadon_gym/metatiles.bin | Bin 0 -> 1024 bytes .../secondary/celadon_gym/palettes/00.pal | 19 + .../secondary/celadon_gym/palettes/01.pal | 19 + .../secondary/celadon_gym/palettes/02.pal | 19 + .../secondary/celadon_gym/palettes/03.pal | 19 + .../secondary/celadon_gym/palettes/04.pal | 19 + .../secondary/celadon_gym/palettes/05.pal | 19 + .../secondary/celadon_gym/palettes/06.pal | 19 + .../secondary/celadon_gym/palettes/07.pal | 19 + .../secondary/celadon_gym/palettes/08.pal | 19 + .../secondary/celadon_gym/palettes/09.pal | 19 + .../secondary/celadon_gym/palettes/10.pal | 19 + .../secondary/celadon_gym/palettes/11.pal | 19 + .../secondary/celadon_gym/palettes/12.pal | 19 + .../secondary/celadon_gym/palettes/13.pal | 19 + .../secondary/celadon_gym/palettes/14.pal | 19 + .../secondary/celadon_gym/palettes/15.pal | 19 + data/tilesets/secondary/celadon_gym/tiles.png | Bin 0 -> 1253 bytes .../cerulean_cave/metatile_attributes.bin | Bin 0 -> 536 bytes .../secondary/cerulean_cave/metatiles.bin | Bin 0 -> 2144 bytes .../secondary/cerulean_cave/palettes/00.pal | 19 + .../secondary/cerulean_cave/palettes/01.pal | 19 + .../secondary/cerulean_cave/palettes/02.pal | 19 + .../secondary/cerulean_cave/palettes/03.pal | 19 + .../secondary/cerulean_cave/palettes/04.pal | 19 + .../secondary/cerulean_cave/palettes/05.pal | 19 + .../secondary/cerulean_cave/palettes/06.pal | 19 + .../secondary/cerulean_cave/palettes/07.pal | 19 + .../secondary/cerulean_cave/palettes/08.pal | 19 + .../secondary/cerulean_cave/palettes/09.pal | 19 + .../secondary/cerulean_cave/palettes/10.pal | 19 + .../secondary/cerulean_cave/palettes/11.pal | 19 + .../secondary/cerulean_cave/palettes/12.pal | 19 + .../secondary/cerulean_cave/palettes/13.pal | 19 + .../secondary/cerulean_cave/palettes/14.pal | 19 + .../secondary/cerulean_cave/palettes/15.pal | 19 + .../secondary/cerulean_cave/tiles.png | Bin 0 -> 3360 bytes .../cerulean_city/metatile_attributes.bin | Bin 0 -> 536 bytes .../secondary/cerulean_city/metatiles.bin | Bin 0 -> 2144 bytes .../secondary/cerulean_city/palettes/00.pal | 19 + .../secondary/cerulean_city/palettes/01.pal | 19 + .../secondary/cerulean_city/palettes/02.pal | 19 + .../secondary/cerulean_city/palettes/03.pal | 19 + .../secondary/cerulean_city/palettes/04.pal | 19 + .../secondary/cerulean_city/palettes/05.pal | 19 + .../secondary/cerulean_city/palettes/06.pal | 19 + .../secondary/cerulean_city/palettes/07.pal | 19 + .../secondary/cerulean_city/palettes/08.pal | 19 + .../secondary/cerulean_city/palettes/09.pal | 19 + .../secondary/cerulean_city/palettes/10.pal | 19 + .../secondary/cerulean_city/palettes/11.pal | 19 + .../secondary/cerulean_city/palettes/12.pal | 19 + .../secondary/cerulean_city/palettes/13.pal | 19 + .../secondary/cerulean_city/palettes/14.pal | 19 + .../secondary/cerulean_city/palettes/15.pal | 19 + .../secondary/cerulean_city/tiles.png | Bin 0 -> 1604 bytes .../cerulean_gym/metatile_attributes.bin | Bin 0 -> 336 bytes .../secondary/cerulean_gym/metatiles.bin | Bin 0 -> 1344 bytes .../secondary/cerulean_gym/palettes/00.pal | 19 + .../secondary/cerulean_gym/palettes/01.pal | 19 + .../secondary/cerulean_gym/palettes/02.pal | 19 + .../secondary/cerulean_gym/palettes/03.pal | 19 + .../secondary/cerulean_gym/palettes/04.pal | 19 + .../secondary/cerulean_gym/palettes/05.pal | 19 + .../secondary/cerulean_gym/palettes/06.pal | 19 + .../secondary/cerulean_gym/palettes/07.pal | 19 + .../secondary/cerulean_gym/palettes/08.pal | 19 + .../secondary/cerulean_gym/palettes/09.pal | 19 + .../secondary/cerulean_gym/palettes/10.pal | 19 + .../secondary/cerulean_gym/palettes/11.pal | 19 + .../secondary/cerulean_gym/palettes/12.pal | 19 + .../secondary/cerulean_gym/palettes/13.pal | 19 + .../secondary/cerulean_gym/palettes/14.pal | 19 + .../secondary/cerulean_gym/palettes/15.pal | 19 + .../tilesets/secondary/cerulean_gym/tiles.png | Bin 0 -> 892 bytes .../cinnabar_gym/metatile_attributes.bin | Bin 0 -> 384 bytes .../secondary/cinnabar_gym/metatiles.bin | Bin 0 -> 1536 bytes .../secondary/cinnabar_gym/palettes/00.pal | 19 + .../secondary/cinnabar_gym/palettes/01.pal | 19 + .../secondary/cinnabar_gym/palettes/02.pal | 19 + .../secondary/cinnabar_gym/palettes/03.pal | 19 + .../secondary/cinnabar_gym/palettes/04.pal | 19 + .../secondary/cinnabar_gym/palettes/05.pal | 19 + .../secondary/cinnabar_gym/palettes/06.pal | 19 + .../secondary/cinnabar_gym/palettes/07.pal | 19 + .../secondary/cinnabar_gym/palettes/08.pal | 19 + .../secondary/cinnabar_gym/palettes/09.pal | 19 + .../secondary/cinnabar_gym/palettes/10.pal | 19 + .../secondary/cinnabar_gym/palettes/11.pal | 19 + .../secondary/cinnabar_gym/palettes/12.pal | 19 + .../secondary/cinnabar_gym/palettes/13.pal | 19 + .../secondary/cinnabar_gym/palettes/14.pal | 19 + .../secondary/cinnabar_gym/palettes/15.pal | 19 + .../tilesets/secondary/cinnabar_gym/tiles.png | Bin 0 -> 1318 bytes .../cinnabar_island/metatile_attributes.bin | Bin 0 -> 256 bytes .../secondary/cinnabar_island/metatiles.bin | Bin 0 -> 1024 bytes .../secondary/cinnabar_island/palettes/00.pal | 19 + .../secondary/cinnabar_island/palettes/01.pal | 19 + .../secondary/cinnabar_island/palettes/02.pal | 19 + .../secondary/cinnabar_island/palettes/03.pal | 19 + .../secondary/cinnabar_island/palettes/04.pal | 19 + .../secondary/cinnabar_island/palettes/05.pal | 19 + .../secondary/cinnabar_island/palettes/06.pal | 19 + .../secondary/cinnabar_island/palettes/07.pal | 19 + .../secondary/cinnabar_island/palettes/08.pal | 19 + .../secondary/cinnabar_island/palettes/09.pal | 19 + .../secondary/cinnabar_island/palettes/10.pal | 19 + .../secondary/cinnabar_island/palettes/11.pal | 19 + .../secondary/cinnabar_island/palettes/12.pal | 19 + .../secondary/cinnabar_island/palettes/13.pal | 19 + .../secondary/cinnabar_island/palettes/14.pal | 19 + .../secondary/cinnabar_island/palettes/15.pal | 19 + .../secondary/cinnabar_island/tiles.png | Bin 0 -> 1374 bytes .../condominiums/metatile_attributes.bin | Bin 0 -> 860 bytes .../secondary/condominiums/metatiles.bin | Bin 0 -> 3440 bytes .../secondary/condominiums/palettes/00.pal | 19 + .../secondary/condominiums/palettes/01.pal | 19 + .../secondary/condominiums/palettes/02.pal | 19 + .../secondary/condominiums/palettes/03.pal | 19 + .../secondary/condominiums/palettes/04.pal | 19 + .../secondary/condominiums/palettes/05.pal | 19 + .../secondary/condominiums/palettes/06.pal | 19 + .../secondary/condominiums/palettes/07.pal | 19 + .../secondary/condominiums/palettes/08.pal | 19 + .../secondary/condominiums/palettes/09.pal | 19 + .../secondary/condominiums/palettes/10.pal | 19 + .../secondary/condominiums/palettes/11.pal | 19 + .../secondary/condominiums/palettes/12.pal | 19 + .../secondary/condominiums/palettes/13.pal | 19 + .../secondary/condominiums/palettes/14.pal | 19 + .../secondary/condominiums/palettes/15.pal | 19 + .../tilesets/secondary/condominiums/tiles.png | Bin 0 -> 3737 bytes .../department_store/metatile_attributes.bin | Bin 0 -> 984 bytes .../secondary/department_store/metatiles.bin | Bin 0 -> 3936 bytes .../department_store/palettes/00.pal | 19 + .../department_store/palettes/01.pal | 19 + .../department_store/palettes/02.pal | 19 + .../department_store/palettes/03.pal | 19 + .../department_store/palettes/04.pal | 19 + .../department_store/palettes/05.pal | 19 + .../department_store/palettes/06.pal | 19 + .../department_store/palettes/07.pal | 19 + .../department_store/palettes/08.pal | 19 + .../department_store/palettes/09.pal | 19 + .../department_store/palettes/10.pal | 19 + .../department_store/palettes/11.pal | 19 + .../department_store/palettes/12.pal | 19 + .../department_store/palettes/13.pal | 19 + .../department_store/palettes/14.pal | 19 + .../department_store/palettes/15.pal | 19 + .../secondary/department_store/tiles.png | Bin 0 -> 2189 bytes .../digletts_cave/metatile_attributes.bin | Bin 0 -> 628 bytes .../secondary/digletts_cave/metatiles.bin | Bin 0 -> 2512 bytes .../secondary/digletts_cave/palettes/00.pal | 19 + .../secondary/digletts_cave/palettes/01.pal | 19 + .../secondary/digletts_cave/palettes/02.pal | 19 + .../secondary/digletts_cave/palettes/03.pal | 19 + .../secondary/digletts_cave/palettes/04.pal | 19 + .../secondary/digletts_cave/palettes/05.pal | 19 + .../secondary/digletts_cave/palettes/06.pal | 19 + .../secondary/digletts_cave/palettes/07.pal | 19 + .../secondary/digletts_cave/palettes/08.pal | 19 + .../secondary/digletts_cave/palettes/09.pal | 19 + .../secondary/digletts_cave/palettes/10.pal | 19 + .../secondary/digletts_cave/palettes/11.pal | 19 + .../secondary/digletts_cave/palettes/12.pal | 19 + .../secondary/digletts_cave/palettes/13.pal | 19 + .../secondary/digletts_cave/palettes/14.pal | 19 + .../secondary/digletts_cave/palettes/15.pal | 19 + .../secondary/digletts_cave/tiles.png | Bin 0 -> 3623 bytes .../secondary/dummy_1/metatile_attributes.bin | Bin 0 -> 8 bytes data/tilesets/secondary/dummy_1/metatiles.bin | Bin 0 -> 32 bytes .../secondary/dummy_1/palettes/00.pal | 19 + .../secondary/dummy_1/palettes/01.pal | 19 + .../secondary/dummy_1/palettes/02.pal | 19 + .../secondary/dummy_1/palettes/03.pal | 19 + .../secondary/dummy_1/palettes/04.pal | 19 + .../secondary/dummy_1/palettes/05.pal | 19 + .../secondary/dummy_1/palettes/06.pal | 19 + .../secondary/dummy_1/palettes/07.pal | 19 + .../secondary/dummy_1/palettes/08.pal | 19 + .../secondary/dummy_1/palettes/09.pal | 19 + .../secondary/dummy_1/palettes/10.pal | 19 + .../secondary/dummy_1/palettes/11.pal | 19 + .../secondary/dummy_1/palettes/12.pal | 19 + .../secondary/dummy_1/palettes/13.pal | 19 + .../secondary/dummy_1/palettes/14.pal | 19 + .../secondary/dummy_1/palettes/15.pal | 19 + data/tilesets/secondary/dummy_1/tiles.png | Bin 0 -> 135 bytes .../secondary/dummy_2/metatile_attributes.bin | Bin 0 -> 8 bytes data/tilesets/secondary/dummy_2/metatiles.bin | Bin 0 -> 32 bytes .../secondary/dummy_2/palettes/00.pal | 19 + .../secondary/dummy_2/palettes/01.pal | 19 + .../secondary/dummy_2/palettes/02.pal | 19 + .../secondary/dummy_2/palettes/03.pal | 19 + .../secondary/dummy_2/palettes/04.pal | 19 + .../secondary/dummy_2/palettes/05.pal | 19 + .../secondary/dummy_2/palettes/06.pal | 19 + .../secondary/dummy_2/palettes/07.pal | 19 + .../secondary/dummy_2/palettes/08.pal | 19 + .../secondary/dummy_2/palettes/09.pal | 19 + .../secondary/dummy_2/palettes/10.pal | 19 + .../secondary/dummy_2/palettes/11.pal | 19 + .../secondary/dummy_2/palettes/12.pal | 19 + .../secondary/dummy_2/palettes/13.pal | 19 + .../secondary/dummy_2/palettes/14.pal | 19 + .../secondary/dummy_2/palettes/15.pal | 19 + data/tilesets/secondary/dummy_2/tiles.png | Bin 0 -> 139 bytes .../secondary/dummy_3/metatile_attributes.bin | Bin 0 -> 8 bytes data/tilesets/secondary/dummy_3/metatiles.bin | Bin 0 -> 32 bytes .../secondary/dummy_3/palettes/00.pal | 19 + .../secondary/dummy_3/palettes/01.pal | 19 + .../secondary/dummy_3/palettes/02.pal | 19 + .../secondary/dummy_3/palettes/03.pal | 19 + .../secondary/dummy_3/palettes/04.pal | 19 + .../secondary/dummy_3/palettes/05.pal | 19 + .../secondary/dummy_3/palettes/06.pal | 19 + .../secondary/dummy_3/palettes/07.pal | 19 + .../secondary/dummy_3/palettes/08.pal | 19 + .../secondary/dummy_3/palettes/09.pal | 19 + .../secondary/dummy_3/palettes/10.pal | 19 + .../secondary/dummy_3/palettes/11.pal | 19 + .../secondary/dummy_3/palettes/12.pal | 19 + .../secondary/dummy_3/palettes/13.pal | 19 + .../secondary/dummy_3/palettes/14.pal | 19 + .../secondary/dummy_3/palettes/15.pal | 19 + data/tilesets/secondary/dummy_3/tiles.png | Bin 0 -> 136 bytes .../secondary/dummy_4/metatile_attributes.bin | Bin 0 -> 8 bytes data/tilesets/secondary/dummy_4/metatiles.bin | Bin 0 -> 32 bytes .../secondary/dummy_4/palettes/00.pal | 19 + .../secondary/dummy_4/palettes/01.pal | 19 + .../secondary/dummy_4/palettes/02.pal | 19 + .../secondary/dummy_4/palettes/03.pal | 19 + .../secondary/dummy_4/palettes/04.pal | 19 + .../secondary/dummy_4/palettes/05.pal | 19 + .../secondary/dummy_4/palettes/06.pal | 19 + .../secondary/dummy_4/palettes/07.pal | 19 + .../secondary/dummy_4/palettes/08.pal | 19 + .../secondary/dummy_4/palettes/09.pal | 19 + .../secondary/dummy_4/palettes/10.pal | 19 + .../secondary/dummy_4/palettes/11.pal | 19 + .../secondary/dummy_4/palettes/12.pal | 19 + .../secondary/dummy_4/palettes/13.pal | 19 + .../secondary/dummy_4/palettes/14.pal | 19 + .../secondary/dummy_4/palettes/15.pal | 19 + data/tilesets/secondary/dummy_4/tiles.png | Bin 0 -> 138 bytes .../fan_club_daycare/metatile_attributes.bin | Bin 0 -> 680 bytes .../secondary/fan_club_daycare/metatiles.bin | Bin 0 -> 2720 bytes .../fan_club_daycare/palettes/00.pal | 19 + .../fan_club_daycare/palettes/01.pal | 19 + .../fan_club_daycare/palettes/02.pal | 19 + .../fan_club_daycare/palettes/03.pal | 19 + .../fan_club_daycare/palettes/04.pal | 19 + .../fan_club_daycare/palettes/05.pal | 19 + .../fan_club_daycare/palettes/06.pal | 19 + .../fan_club_daycare/palettes/07.pal | 19 + .../fan_club_daycare/palettes/08.pal | 19 + .../fan_club_daycare/palettes/09.pal | 19 + .../fan_club_daycare/palettes/10.pal | 19 + .../fan_club_daycare/palettes/11.pal | 19 + .../fan_club_daycare/palettes/12.pal | 19 + .../fan_club_daycare/palettes/13.pal | 19 + .../fan_club_daycare/palettes/14.pal | 19 + .../fan_club_daycare/palettes/15.pal | 19 + .../secondary/fan_club_daycare/tiles.png | Bin 0 -> 994 bytes .../fuchsia_city/metatile_attributes.bin | Bin 0 -> 768 bytes .../secondary/fuchsia_city/metatiles.bin | Bin 0 -> 3072 bytes .../secondary/fuchsia_city/palettes/00.pal | 19 + .../secondary/fuchsia_city/palettes/01.pal | 19 + .../secondary/fuchsia_city/palettes/02.pal | 19 + .../secondary/fuchsia_city/palettes/03.pal | 19 + .../secondary/fuchsia_city/palettes/04.pal | 19 + .../secondary/fuchsia_city/palettes/05.pal | 19 + .../secondary/fuchsia_city/palettes/06.pal | 19 + .../secondary/fuchsia_city/palettes/07.pal | 19 + .../secondary/fuchsia_city/palettes/08.pal | 19 + .../secondary/fuchsia_city/palettes/09.pal | 19 + .../secondary/fuchsia_city/palettes/10.pal | 19 + .../secondary/fuchsia_city/palettes/11.pal | 19 + .../secondary/fuchsia_city/palettes/12.pal | 19 + .../secondary/fuchsia_city/palettes/13.pal | 19 + .../secondary/fuchsia_city/palettes/14.pal | 19 + .../secondary/fuchsia_city/palettes/15.pal | 19 + .../tilesets/secondary/fuchsia_city/tiles.png | Bin 0 -> 2453 bytes .../fuchsia_gym/metatile_attributes.bin | Bin 0 -> 136 bytes .../secondary/fuchsia_gym/metatiles.bin | Bin 0 -> 544 bytes .../secondary/fuchsia_gym/palettes/00.pal | 19 + .../secondary/fuchsia_gym/palettes/01.pal | 19 + .../secondary/fuchsia_gym/palettes/02.pal | 19 + .../secondary/fuchsia_gym/palettes/03.pal | 19 + .../secondary/fuchsia_gym/palettes/04.pal | 19 + .../secondary/fuchsia_gym/palettes/05.pal | 19 + .../secondary/fuchsia_gym/palettes/06.pal | 19 + .../secondary/fuchsia_gym/palettes/07.pal | 19 + .../secondary/fuchsia_gym/palettes/08.pal | 19 + .../secondary/fuchsia_gym/palettes/09.pal | 19 + .../secondary/fuchsia_gym/palettes/10.pal | 19 + .../secondary/fuchsia_gym/palettes/11.pal | 19 + .../secondary/fuchsia_gym/palettes/12.pal | 19 + .../secondary/fuchsia_gym/palettes/13.pal | 19 + .../secondary/fuchsia_gym/palettes/14.pal | 19 + .../secondary/fuchsia_gym/palettes/15.pal | 19 + data/tilesets/secondary/fuchsia_gym/tiles.png | Bin 0 -> 933 bytes .../game_corner/metatile_attributes.bin | Bin 0 -> 608 bytes .../secondary/game_corner/metatiles.bin | Bin 0 -> 2432 bytes .../secondary/game_corner/palettes/00.pal | 19 + .../secondary/game_corner/palettes/01.pal | 19 + .../secondary/game_corner/palettes/02.pal | 19 + .../secondary/game_corner/palettes/03.pal | 19 + .../secondary/game_corner/palettes/04.pal | 19 + .../secondary/game_corner/palettes/05.pal | 19 + .../secondary/game_corner/palettes/06.pal | 19 + .../secondary/game_corner/palettes/07.pal | 19 + .../secondary/game_corner/palettes/08.pal | 19 + .../secondary/game_corner/palettes/09.pal | 19 + .../secondary/game_corner/palettes/10.pal | 19 + .../secondary/game_corner/palettes/11.pal | 19 + .../secondary/game_corner/palettes/12.pal | 19 + .../secondary/game_corner/palettes/13.pal | 19 + .../secondary/game_corner/palettes/14.pal | 19 + .../secondary/game_corner/palettes/15.pal | 19 + data/tilesets/secondary/game_corner/tiles.png | Bin 0 -> 2018 bytes .../metatile_attributes.bin | Bin 0 -> 96 bytes .../generic_building_1/metatiles.bin | Bin 0 -> 384 bytes .../generic_building_1/palettes/00.pal | 19 + .../generic_building_1/palettes/01.pal | 19 + .../generic_building_1/palettes/02.pal | 19 + .../generic_building_1/palettes/03.pal | 19 + .../generic_building_1/palettes/04.pal | 19 + .../generic_building_1/palettes/05.pal | 19 + .../generic_building_1/palettes/06.pal | 19 + .../generic_building_1/palettes/07.pal | 19 + .../generic_building_1/palettes/08.pal | 19 + .../generic_building_1/palettes/09.pal | 19 + .../generic_building_1/palettes/10.pal | 19 + .../generic_building_1/palettes/11.pal | 19 + .../generic_building_1/palettes/12.pal | 19 + .../generic_building_1/palettes/13.pal | 19 + .../generic_building_1/palettes/14.pal | 19 + .../generic_building_1/palettes/15.pal | 19 + .../secondary/generic_building_1/tiles.png | Bin 0 -> 748 bytes .../metatile_attributes.bin | Bin 0 -> 736 bytes .../generic_building_2/metatiles.bin | Bin 0 -> 2944 bytes .../generic_building_2/palettes/00.pal | 19 + .../generic_building_2/palettes/01.pal | 19 + .../generic_building_2/palettes/02.pal | 19 + .../generic_building_2/palettes/03.pal | 19 + .../generic_building_2/palettes/04.pal | 19 + .../generic_building_2/palettes/05.pal | 19 + .../generic_building_2/palettes/06.pal | 19 + .../generic_building_2/palettes/07.pal | 19 + .../generic_building_2/palettes/08.pal | 19 + .../generic_building_2/palettes/09.pal | 19 + .../generic_building_2/palettes/10.pal | 19 + .../generic_building_2/palettes/11.pal | 19 + .../generic_building_2/palettes/12.pal | 19 + .../generic_building_2/palettes/13.pal | 19 + .../generic_building_2/palettes/14.pal | 19 + .../generic_building_2/palettes/15.pal | 19 + .../secondary/generic_building_2/tiles.png | Bin 0 -> 1407 bytes .../hall_of_fame/metatile_attributes.bin | Bin 0 -> 472 bytes .../secondary/hall_of_fame/metatiles.bin | Bin 0 -> 1888 bytes .../secondary/hall_of_fame/palettes/00.pal | 19 + .../secondary/hall_of_fame/palettes/01.pal | 19 + .../secondary/hall_of_fame/palettes/02.pal | 19 + .../secondary/hall_of_fame/palettes/03.pal | 19 + .../secondary/hall_of_fame/palettes/04.pal | 19 + .../secondary/hall_of_fame/palettes/05.pal | 19 + .../secondary/hall_of_fame/palettes/06.pal | 19 + .../secondary/hall_of_fame/palettes/07.pal | 19 + .../secondary/hall_of_fame/palettes/08.pal | 19 + .../secondary/hall_of_fame/palettes/09.pal | 19 + .../secondary/hall_of_fame/palettes/10.pal | 19 + .../secondary/hall_of_fame/palettes/11.pal | 19 + .../secondary/hall_of_fame/palettes/12.pal | 19 + .../secondary/hall_of_fame/palettes/13.pal | 19 + .../secondary/hall_of_fame/palettes/14.pal | 19 + .../secondary/hall_of_fame/palettes/15.pal | 19 + .../tilesets/secondary/hall_of_fame/tiles.png | Bin 0 -> 1763 bytes .../hoenn_building/metatile_attributes.bin | Bin 0 -> 2048 bytes .../secondary/hoenn_building/metatiles.bin | Bin 0 -> 8192 bytes .../secondary/hoenn_building/palettes/00.pal | 19 + .../secondary/hoenn_building/palettes/01.pal | 19 + .../secondary/hoenn_building/palettes/02.pal | 19 + .../secondary/hoenn_building/palettes/03.pal | 19 + .../secondary/hoenn_building/palettes/04.pal | 19 + .../secondary/hoenn_building/palettes/05.pal | 19 + .../secondary/hoenn_building/palettes/06.pal | 19 + .../secondary/hoenn_building/palettes/07.pal | 19 + .../secondary/hoenn_building/palettes/08.pal | 19 + .../secondary/hoenn_building/palettes/09.pal | 19 + .../secondary/hoenn_building/palettes/10.pal | 19 + .../secondary/hoenn_building/palettes/11.pal | 19 + .../secondary/hoenn_building/palettes/12.pal | 19 + .../secondary/hoenn_building/palettes/13.pal | 19 + .../secondary/hoenn_building/palettes/14.pal | 19 + .../secondary/hoenn_building/palettes/15.pal | 19 + .../secondary/hoenn_building/tiles.png | Bin 0 -> 4040 bytes .../indigo_plateau/metatile_attributes.bin | Bin 0 -> 704 bytes .../secondary/indigo_plateau/metatiles.bin | Bin 0 -> 2816 bytes .../secondary/indigo_plateau/palettes/00.pal | 19 + .../secondary/indigo_plateau/palettes/01.pal | 19 + .../secondary/indigo_plateau/palettes/02.pal | 19 + .../secondary/indigo_plateau/palettes/03.pal | 19 + .../secondary/indigo_plateau/palettes/04.pal | 19 + .../secondary/indigo_plateau/palettes/05.pal | 19 + .../secondary/indigo_plateau/palettes/06.pal | 19 + .../secondary/indigo_plateau/palettes/07.pal | 19 + .../secondary/indigo_plateau/palettes/08.pal | 19 + .../secondary/indigo_plateau/palettes/09.pal | 19 + .../secondary/indigo_plateau/palettes/10.pal | 19 + .../secondary/indigo_plateau/palettes/11.pal | 19 + .../secondary/indigo_plateau/palettes/12.pal | 19 + .../secondary/indigo_plateau/palettes/13.pal | 19 + .../secondary/indigo_plateau/palettes/14.pal | 19 + .../secondary/indigo_plateau/palettes/15.pal | 19 + .../secondary/indigo_plateau/tiles.png | Bin 0 -> 2544 bytes .../metatile_attributes.bin | Bin 0 -> 316 bytes .../island_harbor_frlg/metatiles.bin | Bin 0 -> 1264 bytes .../island_harbor_frlg/palettes/00.pal | 19 + .../island_harbor_frlg/palettes/01.pal | 19 + .../island_harbor_frlg/palettes/02.pal | 19 + .../island_harbor_frlg/palettes/03.pal | 19 + .../island_harbor_frlg/palettes/04.pal | 19 + .../island_harbor_frlg/palettes/05.pal | 19 + .../island_harbor_frlg/palettes/06.pal | 19 + .../island_harbor_frlg/palettes/07.pal | 19 + .../island_harbor_frlg/palettes/08.pal | 19 + .../island_harbor_frlg/palettes/09.pal | 19 + .../island_harbor_frlg/palettes/10.pal | 19 + .../island_harbor_frlg/palettes/11.pal | 19 + .../island_harbor_frlg/palettes/12.pal | 19 + .../island_harbor_frlg/palettes/13.pal | 19 + .../island_harbor_frlg/palettes/14.pal | 19 + .../island_harbor_frlg/palettes/15.pal | 19 + .../secondary/island_harbor_frlg/tiles.png | Bin 0 -> 1423 bytes .../lab_frlg/metatile_attributes.bin | Bin 0 -> 700 bytes .../tilesets/secondary/lab_frlg/metatiles.bin | Bin 0 -> 2800 bytes .../secondary/lab_frlg/palettes/00.pal | 19 + .../secondary/lab_frlg/palettes/01.pal | 19 + .../secondary/lab_frlg/palettes/02.pal | 19 + .../secondary/lab_frlg/palettes/03.pal | 19 + .../secondary/lab_frlg/palettes/04.pal | 19 + .../secondary/lab_frlg/palettes/05.pal | 19 + .../secondary/lab_frlg/palettes/06.pal | 19 + .../secondary/lab_frlg/palettes/07.pal | 19 + .../secondary/lab_frlg/palettes/08.pal | 19 + .../secondary/lab_frlg/palettes/09.pal | 19 + .../secondary/lab_frlg/palettes/10.pal | 19 + .../secondary/lab_frlg/palettes/11.pal | 19 + .../secondary/lab_frlg/palettes/12.pal | 19 + .../secondary/lab_frlg/palettes/13.pal | 19 + .../secondary/lab_frlg/palettes/14.pal | 19 + .../secondary/lab_frlg/palettes/15.pal | 19 + data/tilesets/secondary/lab_frlg/tiles.png | Bin 0 -> 1308 bytes .../lavender_town/metatile_attributes.bin | Bin 0 -> 872 bytes .../secondary/lavender_town/metatiles.bin | Bin 0 -> 3488 bytes .../secondary/lavender_town/palettes/00.pal | 19 + .../secondary/lavender_town/palettes/01.pal | 19 + .../secondary/lavender_town/palettes/02.pal | 19 + .../secondary/lavender_town/palettes/03.pal | 19 + .../secondary/lavender_town/palettes/04.pal | 19 + .../secondary/lavender_town/palettes/05.pal | 19 + .../secondary/lavender_town/palettes/06.pal | 19 + .../secondary/lavender_town/palettes/07.pal | 19 + .../secondary/lavender_town/palettes/08.pal | 19 + .../secondary/lavender_town/palettes/09.pal | 19 + .../secondary/lavender_town/palettes/10.pal | 19 + .../secondary/lavender_town/palettes/11.pal | 19 + .../secondary/lavender_town/palettes/12.pal | 19 + .../secondary/lavender_town/palettes/13.pal | 19 + .../secondary/lavender_town/palettes/14.pal | 19 + .../secondary/lavender_town/palettes/15.pal | 19 + .../secondary/lavender_town/tiles.png | Bin 0 -> 2688 bytes .../secondary/mart/metatile_attributes.bin | Bin 0 -> 268 bytes data/tilesets/secondary/mart/metatiles.bin | Bin 0 -> 1072 bytes data/tilesets/secondary/mart/palettes/00.pal | 19 + data/tilesets/secondary/mart/palettes/01.pal | 19 + data/tilesets/secondary/mart/palettes/02.pal | 19 + data/tilesets/secondary/mart/palettes/03.pal | 19 + data/tilesets/secondary/mart/palettes/04.pal | 19 + data/tilesets/secondary/mart/palettes/05.pal | 19 + data/tilesets/secondary/mart/palettes/06.pal | 19 + data/tilesets/secondary/mart/palettes/07.pal | 19 + data/tilesets/secondary/mart/palettes/08.pal | 19 + data/tilesets/secondary/mart/palettes/09.pal | 19 + data/tilesets/secondary/mart/palettes/10.pal | 19 + data/tilesets/secondary/mart/palettes/11.pal | 19 + data/tilesets/secondary/mart/palettes/12.pal | 19 + data/tilesets/secondary/mart/palettes/13.pal | 19 + data/tilesets/secondary/mart/palettes/14.pal | 19 + data/tilesets/secondary/mart/palettes/15.pal | 19 + data/tilesets/secondary/mart/tiles.png | Bin 0 -> 438 bytes .../secondary/mt_ember/anim/steam/0.png | Bin 0 -> 218 bytes .../secondary/mt_ember/anim/steam/1.png | Bin 0 -> 224 bytes .../secondary/mt_ember/anim/steam/2.png | Bin 0 -> 219 bytes .../secondary/mt_ember/anim/steam/3.png | Bin 0 -> 225 bytes .../mt_ember/metatile_attributes.bin | Bin 0 -> 904 bytes .../tilesets/secondary/mt_ember/metatiles.bin | Bin 0 -> 3616 bytes .../secondary/mt_ember/palettes/00.pal | 19 + .../secondary/mt_ember/palettes/01.pal | 19 + .../secondary/mt_ember/palettes/02.pal | 19 + .../secondary/mt_ember/palettes/03.pal | 19 + .../secondary/mt_ember/palettes/04.pal | 19 + .../secondary/mt_ember/palettes/05.pal | 19 + .../secondary/mt_ember/palettes/06.pal | 19 + .../secondary/mt_ember/palettes/07.pal | 19 + .../secondary/mt_ember/palettes/08.pal | 19 + .../secondary/mt_ember/palettes/09.pal | 19 + .../secondary/mt_ember/palettes/10.pal | 19 + .../secondary/mt_ember/palettes/11.pal | 19 + .../secondary/mt_ember/palettes/12.pal | 19 + .../secondary/mt_ember/palettes/13.pal | 19 + .../secondary/mt_ember/palettes/14.pal | 19 + .../secondary/mt_ember/palettes/15.pal | 19 + data/tilesets/secondary/mt_ember/tiles.png | Bin 0 -> 4541 bytes .../secondary/museum/metatile_attributes.bin | Bin 0 -> 540 bytes data/tilesets/secondary/museum/metatiles.bin | Bin 0 -> 2160 bytes .../tilesets/secondary/museum/palettes/00.pal | 19 + .../tilesets/secondary/museum/palettes/01.pal | 19 + .../tilesets/secondary/museum/palettes/02.pal | 19 + .../tilesets/secondary/museum/palettes/03.pal | 19 + .../tilesets/secondary/museum/palettes/04.pal | 19 + .../tilesets/secondary/museum/palettes/05.pal | 19 + .../tilesets/secondary/museum/palettes/06.pal | 19 + .../tilesets/secondary/museum/palettes/07.pal | 19 + .../tilesets/secondary/museum/palettes/08.pal | 19 + .../tilesets/secondary/museum/palettes/09.pal | 19 + .../tilesets/secondary/museum/palettes/10.pal | 19 + .../tilesets/secondary/museum/palettes/11.pal | 19 + .../tilesets/secondary/museum/palettes/12.pal | 19 + .../tilesets/secondary/museum/palettes/13.pal | 19 + .../tilesets/secondary/museum/palettes/14.pal | 19 + .../tilesets/secondary/museum/palettes/15.pal | 19 + data/tilesets/secondary/museum/tiles.png | Bin 0 -> 1808 bytes .../navel_rock_frlg/metatile_attributes.bin | Bin 0 -> 880 bytes .../secondary/navel_rock_frlg/metatiles.bin | Bin 0 -> 3520 bytes .../secondary/navel_rock_frlg/palettes/00.pal | 19 + .../secondary/navel_rock_frlg/palettes/01.pal | 19 + .../secondary/navel_rock_frlg/palettes/02.pal | 19 + .../secondary/navel_rock_frlg/palettes/03.pal | 19 + .../secondary/navel_rock_frlg/palettes/04.pal | 19 + .../secondary/navel_rock_frlg/palettes/05.pal | 19 + .../secondary/navel_rock_frlg/palettes/06.pal | 19 + .../secondary/navel_rock_frlg/palettes/07.pal | 19 + .../secondary/navel_rock_frlg/palettes/08.pal | 19 + .../secondary/navel_rock_frlg/palettes/09.pal | 19 + .../secondary/navel_rock_frlg/palettes/10.pal | 19 + .../secondary/navel_rock_frlg/palettes/11.pal | 19 + .../secondary/navel_rock_frlg/palettes/12.pal | 19 + .../secondary/navel_rock_frlg/palettes/13.pal | 19 + .../secondary/navel_rock_frlg/palettes/14.pal | 19 + .../secondary/navel_rock_frlg/palettes/15.pal | 19 + .../secondary/navel_rock_frlg/tiles.png | Bin 0 -> 4217 bytes .../pallet_town/metatile_attributes.bin | Bin 0 -> 356 bytes .../secondary/pallet_town/metatiles.bin | Bin 0 -> 1424 bytes .../secondary/pallet_town/palettes/00.pal | 19 + .../secondary/pallet_town/palettes/01.pal | 19 + .../secondary/pallet_town/palettes/02.pal | 19 + .../secondary/pallet_town/palettes/03.pal | 19 + .../secondary/pallet_town/palettes/04.pal | 19 + .../secondary/pallet_town/palettes/05.pal | 19 + .../secondary/pallet_town/palettes/06.pal | 19 + .../secondary/pallet_town/palettes/07.pal | 19 + .../secondary/pallet_town/palettes/08.pal | 19 + .../secondary/pallet_town/palettes/09.pal | 19 + .../secondary/pallet_town/palettes/10.pal | 19 + .../secondary/pallet_town/palettes/11.pal | 19 + .../secondary/pallet_town/palettes/12.pal | 19 + .../secondary/pallet_town/palettes/13.pal | 19 + .../secondary/pallet_town/palettes/14.pal | 19 + .../secondary/pallet_town/palettes/15.pal | 19 + data/tilesets/secondary/pallet_town/tiles.png | Bin 0 -> 929 bytes .../pewter_city/metatile_attributes.bin | Bin 0 -> 316 bytes .../secondary/pewter_city/metatiles.bin | Bin 0 -> 1264 bytes .../secondary/pewter_city/palettes/00.pal | 19 + .../secondary/pewter_city/palettes/01.pal | 19 + .../secondary/pewter_city/palettes/02.pal | 19 + .../secondary/pewter_city/palettes/03.pal | 19 + .../secondary/pewter_city/palettes/04.pal | 19 + .../secondary/pewter_city/palettes/05.pal | 19 + .../secondary/pewter_city/palettes/06.pal | 19 + .../secondary/pewter_city/palettes/07.pal | 19 + .../secondary/pewter_city/palettes/08.pal | 19 + .../secondary/pewter_city/palettes/09.pal | 19 + .../secondary/pewter_city/palettes/10.pal | 19 + .../secondary/pewter_city/palettes/11.pal | 19 + .../secondary/pewter_city/palettes/12.pal | 19 + .../secondary/pewter_city/palettes/13.pal | 19 + .../secondary/pewter_city/palettes/14.pal | 19 + .../secondary/pewter_city/palettes/15.pal | 19 + data/tilesets/secondary/pewter_city/tiles.png | Bin 0 -> 1348 bytes .../pewter_gym/metatile_attributes.bin | Bin 0 -> 404 bytes .../secondary/pewter_gym/metatiles.bin | Bin 0 -> 1616 bytes .../secondary/pewter_gym/palettes/00.pal | 19 + .../secondary/pewter_gym/palettes/01.pal | 19 + .../secondary/pewter_gym/palettes/02.pal | 19 + .../secondary/pewter_gym/palettes/03.pal | 19 + .../secondary/pewter_gym/palettes/04.pal | 19 + .../secondary/pewter_gym/palettes/05.pal | 19 + .../secondary/pewter_gym/palettes/06.pal | 19 + .../secondary/pewter_gym/palettes/07.pal | 19 + .../secondary/pewter_gym/palettes/08.pal | 19 + .../secondary/pewter_gym/palettes/09.pal | 19 + .../secondary/pewter_gym/palettes/10.pal | 19 + .../secondary/pewter_gym/palettes/11.pal | 19 + .../secondary/pewter_gym/palettes/12.pal | 19 + .../secondary/pewter_gym/palettes/13.pal | 19 + .../secondary/pewter_gym/palettes/14.pal | 19 + .../secondary/pewter_gym/palettes/15.pal | 19 + data/tilesets/secondary/pewter_gym/tiles.png | Bin 0 -> 1589 bytes .../metatile_attributes.bin | Bin 0 -> 1020 bytes .../pokemon_center_frlg/metatiles.bin | Bin 0 -> 4080 bytes .../pokemon_center_frlg/palettes/00.pal | 19 + .../pokemon_center_frlg/palettes/01.pal | 19 + .../pokemon_center_frlg/palettes/02.pal | 19 + .../pokemon_center_frlg/palettes/03.pal | 19 + .../pokemon_center_frlg/palettes/04.pal | 19 + .../pokemon_center_frlg/palettes/05.pal | 19 + .../pokemon_center_frlg/palettes/06.pal | 19 + .../pokemon_center_frlg/palettes/07.pal | 19 + .../pokemon_center_frlg/palettes/08.pal | 19 + .../pokemon_center_frlg/palettes/09.pal | 19 + .../pokemon_center_frlg/palettes/10.pal | 19 + .../pokemon_center_frlg/palettes/11.pal | 19 + .../pokemon_center_frlg/palettes/12.pal | 19 + .../pokemon_center_frlg/palettes/13.pal | 19 + .../pokemon_center_frlg/palettes/14.pal | 19 + .../pokemon_center_frlg/palettes/15.pal | 19 + .../secondary/pokemon_center_frlg/tiles.png | Bin 0 -> 3390 bytes .../pokemon_league/metatile_attributes.bin | Bin 0 -> 1536 bytes .../secondary/pokemon_league/metatiles.bin | Bin 0 -> 6144 bytes .../secondary/pokemon_league/palettes/00.pal | 19 + .../secondary/pokemon_league/palettes/01.pal | 19 + .../secondary/pokemon_league/palettes/02.pal | 19 + .../secondary/pokemon_league/palettes/03.pal | 19 + .../secondary/pokemon_league/palettes/04.pal | 19 + .../secondary/pokemon_league/palettes/05.pal | 19 + .../secondary/pokemon_league/palettes/06.pal | 19 + .../secondary/pokemon_league/palettes/07.pal | 19 + .../secondary/pokemon_league/palettes/08.pal | 19 + .../secondary/pokemon_league/palettes/09.pal | 19 + .../secondary/pokemon_league/palettes/10.pal | 19 + .../secondary/pokemon_league/palettes/11.pal | 19 + .../secondary/pokemon_league/palettes/12.pal | 19 + .../secondary/pokemon_league/palettes/13.pal | 19 + .../secondary/pokemon_league/palettes/14.pal | 19 + .../secondary/pokemon_league/palettes/15.pal | 19 + .../secondary/pokemon_league/tiles.png | Bin 0 -> 3165 bytes .../pokemon_mansion/metatile_attributes.bin | Bin 0 -> 1032 bytes .../secondary/pokemon_mansion/metatiles.bin | Bin 0 -> 4128 bytes .../secondary/pokemon_mansion/palettes/00.pal | 19 + .../secondary/pokemon_mansion/palettes/01.pal | 19 + .../secondary/pokemon_mansion/palettes/02.pal | 19 + .../secondary/pokemon_mansion/palettes/03.pal | 19 + .../secondary/pokemon_mansion/palettes/04.pal | 19 + .../secondary/pokemon_mansion/palettes/05.pal | 19 + .../secondary/pokemon_mansion/palettes/06.pal | 19 + .../secondary/pokemon_mansion/palettes/07.pal | 19 + .../secondary/pokemon_mansion/palettes/08.pal | 19 + .../secondary/pokemon_mansion/palettes/09.pal | 19 + .../secondary/pokemon_mansion/palettes/10.pal | 19 + .../secondary/pokemon_mansion/palettes/11.pal | 19 + .../secondary/pokemon_mansion/palettes/12.pal | 19 + .../secondary/pokemon_mansion/palettes/13.pal | 19 + .../secondary/pokemon_mansion/palettes/14.pal | 19 + .../secondary/pokemon_mansion/palettes/15.pal | 19 + .../secondary/pokemon_mansion/tiles.png | Bin 0 -> 2508 bytes .../pokemon_tower/metatile_attributes.bin | Bin 0 -> 404 bytes .../secondary/pokemon_tower/metatiles.bin | Bin 0 -> 1616 bytes .../secondary/pokemon_tower/palettes/00.pal | 19 + .../secondary/pokemon_tower/palettes/01.pal | 19 + .../secondary/pokemon_tower/palettes/02.pal | 19 + .../secondary/pokemon_tower/palettes/03.pal | 19 + .../secondary/pokemon_tower/palettes/04.pal | 19 + .../secondary/pokemon_tower/palettes/05.pal | 19 + .../secondary/pokemon_tower/palettes/06.pal | 19 + .../secondary/pokemon_tower/palettes/07.pal | 19 + .../secondary/pokemon_tower/palettes/08.pal | 19 + .../secondary/pokemon_tower/palettes/09.pal | 19 + .../secondary/pokemon_tower/palettes/10.pal | 19 + .../secondary/pokemon_tower/palettes/11.pal | 19 + .../secondary/pokemon_tower/palettes/12.pal | 19 + .../secondary/pokemon_tower/palettes/13.pal | 19 + .../secondary/pokemon_tower/palettes/14.pal | 19 + .../secondary/pokemon_tower/palettes/15.pal | 19 + .../secondary/pokemon_tower/tiles.png | Bin 0 -> 1458 bytes .../power_plant/metatile_attributes.bin | Bin 0 -> 612 bytes .../secondary/power_plant/metatiles.bin | Bin 0 -> 2448 bytes .../secondary/power_plant/palettes/00.pal | 19 + .../secondary/power_plant/palettes/01.pal | 19 + .../secondary/power_plant/palettes/02.pal | 19 + .../secondary/power_plant/palettes/03.pal | 19 + .../secondary/power_plant/palettes/04.pal | 19 + .../secondary/power_plant/palettes/05.pal | 19 + .../secondary/power_plant/palettes/06.pal | 19 + .../secondary/power_plant/palettes/07.pal | 19 + .../secondary/power_plant/palettes/08.pal | 19 + .../secondary/power_plant/palettes/09.pal | 19 + .../secondary/power_plant/palettes/10.pal | 19 + .../secondary/power_plant/palettes/11.pal | 19 + .../secondary/power_plant/palettes/12.pal | 19 + .../secondary/power_plant/palettes/13.pal | 19 + .../secondary/power_plant/palettes/14.pal | 19 + .../secondary/power_plant/palettes/15.pal | 19 + data/tilesets/secondary/power_plant/tiles.png | Bin 0 -> 1037 bytes .../restaurant_hotel/metatile_attributes.bin | Bin 0 -> 416 bytes .../secondary/restaurant_hotel/metatiles.bin | Bin 0 -> 1664 bytes .../restaurant_hotel/palettes/00.pal | 19 + .../restaurant_hotel/palettes/01.pal | 19 + .../restaurant_hotel/palettes/02.pal | 19 + .../restaurant_hotel/palettes/03.pal | 19 + .../restaurant_hotel/palettes/04.pal | 19 + .../restaurant_hotel/palettes/05.pal | 19 + .../restaurant_hotel/palettes/06.pal | 19 + .../restaurant_hotel/palettes/07.pal | 19 + .../restaurant_hotel/palettes/08.pal | 19 + .../restaurant_hotel/palettes/09.pal | 19 + .../restaurant_hotel/palettes/10.pal | 19 + .../restaurant_hotel/palettes/11.pal | 19 + .../restaurant_hotel/palettes/12.pal | 19 + .../restaurant_hotel/palettes/13.pal | 19 + .../restaurant_hotel/palettes/14.pal | 19 + .../restaurant_hotel/palettes/15.pal | 19 + .../secondary/restaurant_hotel/tiles.png | Bin 0 -> 975 bytes .../rock_tunnel/metatile_attributes.bin | Bin 0 -> 608 bytes .../secondary/rock_tunnel/metatiles.bin | Bin 0 -> 2432 bytes .../secondary/rock_tunnel/palettes/00.pal | 19 + .../secondary/rock_tunnel/palettes/01.pal | 19 + .../secondary/rock_tunnel/palettes/02.pal | 19 + .../secondary/rock_tunnel/palettes/03.pal | 19 + .../secondary/rock_tunnel/palettes/04.pal | 19 + .../secondary/rock_tunnel/palettes/05.pal | 19 + .../secondary/rock_tunnel/palettes/06.pal | 19 + .../secondary/rock_tunnel/palettes/07.pal | 19 + .../secondary/rock_tunnel/palettes/08.pal | 19 + .../secondary/rock_tunnel/palettes/09.pal | 19 + .../secondary/rock_tunnel/palettes/10.pal | 19 + .../secondary/rock_tunnel/palettes/11.pal | 19 + .../secondary/rock_tunnel/palettes/12.pal | 19 + .../secondary/rock_tunnel/palettes/13.pal | 19 + .../secondary/rock_tunnel/palettes/14.pal | 19 + .../secondary/rock_tunnel/palettes/15.pal | 19 + data/tilesets/secondary/rock_tunnel/tiles.png | Bin 0 -> 3821 bytes .../metatile_attributes.bin | Bin 0 -> 512 bytes .../safari_zone_building/metatiles.bin | Bin 0 -> 2048 bytes .../safari_zone_building/palettes/00.pal | 19 + .../safari_zone_building/palettes/01.pal | 19 + .../safari_zone_building/palettes/02.pal | 19 + .../safari_zone_building/palettes/03.pal | 19 + .../safari_zone_building/palettes/04.pal | 19 + .../safari_zone_building/palettes/05.pal | 19 + .../safari_zone_building/palettes/06.pal | 19 + .../safari_zone_building/palettes/07.pal | 19 + .../safari_zone_building/palettes/08.pal | 19 + .../safari_zone_building/palettes/09.pal | 19 + .../safari_zone_building/palettes/10.pal | 19 + .../safari_zone_building/palettes/11.pal | 19 + .../safari_zone_building/palettes/12.pal | 19 + .../safari_zone_building/palettes/13.pal | 19 + .../safari_zone_building/palettes/14.pal | 19 + .../safari_zone_building/palettes/15.pal | 19 + .../secondary/safari_zone_building/tiles.png | Bin 0 -> 899 bytes .../saffron_city/metatile_attributes.bin | Bin 0 -> 800 bytes .../secondary/saffron_city/metatiles.bin | Bin 0 -> 3200 bytes .../secondary/saffron_city/palettes/00.pal | 19 + .../secondary/saffron_city/palettes/01.pal | 19 + .../secondary/saffron_city/palettes/02.pal | 19 + .../secondary/saffron_city/palettes/03.pal | 19 + .../secondary/saffron_city/palettes/04.pal | 19 + .../secondary/saffron_city/palettes/05.pal | 19 + .../secondary/saffron_city/palettes/06.pal | 19 + .../secondary/saffron_city/palettes/07.pal | 19 + .../secondary/saffron_city/palettes/08.pal | 19 + .../secondary/saffron_city/palettes/09.pal | 19 + .../secondary/saffron_city/palettes/10.pal | 19 + .../secondary/saffron_city/palettes/11.pal | 19 + .../secondary/saffron_city/palettes/12.pal | 19 + .../secondary/saffron_city/palettes/13.pal | 19 + .../secondary/saffron_city/palettes/14.pal | 19 + .../secondary/saffron_city/palettes/15.pal | 19 + .../tilesets/secondary/saffron_city/tiles.png | Bin 0 -> 2377 bytes .../saffron_gym/metatile_attributes.bin | Bin 0 -> 184 bytes .../secondary/saffron_gym/metatiles.bin | Bin 0 -> 736 bytes .../secondary/saffron_gym/palettes/00.pal | 19 + .../secondary/saffron_gym/palettes/01.pal | 19 + .../secondary/saffron_gym/palettes/02.pal | 19 + .../secondary/saffron_gym/palettes/03.pal | 19 + .../secondary/saffron_gym/palettes/04.pal | 19 + .../secondary/saffron_gym/palettes/05.pal | 19 + .../secondary/saffron_gym/palettes/06.pal | 19 + .../secondary/saffron_gym/palettes/07.pal | 19 + .../secondary/saffron_gym/palettes/08.pal | 19 + .../secondary/saffron_gym/palettes/09.pal | 19 + .../secondary/saffron_gym/palettes/10.pal | 19 + .../secondary/saffron_gym/palettes/11.pal | 19 + .../secondary/saffron_gym/palettes/12.pal | 19 + .../secondary/saffron_gym/palettes/13.pal | 19 + .../secondary/saffron_gym/palettes/14.pal | 19 + .../secondary/saffron_gym/palettes/15.pal | 19 + data/tilesets/secondary/saffron_gym/tiles.png | Bin 0 -> 860 bytes .../secondary/school/metatile_attributes.bin | Bin 0 -> 184 bytes data/tilesets/secondary/school/metatiles.bin | Bin 0 -> 736 bytes .../tilesets/secondary/school/palettes/00.pal | 19 + .../tilesets/secondary/school/palettes/01.pal | 19 + .../tilesets/secondary/school/palettes/02.pal | 19 + .../tilesets/secondary/school/palettes/03.pal | 19 + .../tilesets/secondary/school/palettes/04.pal | 19 + .../tilesets/secondary/school/palettes/05.pal | 19 + .../tilesets/secondary/school/palettes/06.pal | 19 + .../tilesets/secondary/school/palettes/07.pal | 19 + .../tilesets/secondary/school/palettes/08.pal | 19 + .../tilesets/secondary/school/palettes/09.pal | 19 + .../tilesets/secondary/school/palettes/10.pal | 19 + .../tilesets/secondary/school/palettes/11.pal | 19 + .../tilesets/secondary/school/palettes/12.pal | 19 + .../tilesets/secondary/school/palettes/13.pal | 19 + .../tilesets/secondary/school/palettes/14.pal | 19 + .../tilesets/secondary/school/palettes/15.pal | 19 + data/tilesets/secondary/school/tiles.png | Bin 0 -> 610 bytes .../sea_cottage/metatile_attributes.bin | Bin 0 -> 236 bytes .../secondary/sea_cottage/metatiles.bin | Bin 0 -> 944 bytes .../secondary/sea_cottage/palettes/00.pal | 19 + .../secondary/sea_cottage/palettes/01.pal | 19 + .../secondary/sea_cottage/palettes/02.pal | 19 + .../secondary/sea_cottage/palettes/03.pal | 19 + .../secondary/sea_cottage/palettes/04.pal | 19 + .../secondary/sea_cottage/palettes/05.pal | 19 + .../secondary/sea_cottage/palettes/06.pal | 19 + .../secondary/sea_cottage/palettes/07.pal | 19 + .../secondary/sea_cottage/palettes/08.pal | 19 + .../secondary/sea_cottage/palettes/09.pal | 19 + .../secondary/sea_cottage/palettes/10.pal | 19 + .../secondary/sea_cottage/palettes/11.pal | 19 + .../secondary/sea_cottage/palettes/12.pal | 19 + .../secondary/sea_cottage/palettes/13.pal | 19 + .../secondary/sea_cottage/palettes/14.pal | 19 + .../secondary/sea_cottage/palettes/15.pal | 19 + data/tilesets/secondary/sea_cottage/tiles.png | Bin 0 -> 1075 bytes .../seafoam_islands/metatile_attributes.bin | Bin 0 -> 992 bytes .../secondary/seafoam_islands/metatiles.bin | Bin 0 -> 3968 bytes .../secondary/seafoam_islands/palettes/00.pal | 19 + .../secondary/seafoam_islands/palettes/01.pal | 19 + .../secondary/seafoam_islands/palettes/02.pal | 19 + .../secondary/seafoam_islands/palettes/03.pal | 19 + .../secondary/seafoam_islands/palettes/04.pal | 19 + .../secondary/seafoam_islands/palettes/05.pal | 19 + .../secondary/seafoam_islands/palettes/06.pal | 19 + .../secondary/seafoam_islands/palettes/07.pal | 19 + .../secondary/seafoam_islands/palettes/08.pal | 19 + .../secondary/seafoam_islands/palettes/09.pal | 19 + .../secondary/seafoam_islands/palettes/10.pal | 19 + .../secondary/seafoam_islands/palettes/11.pal | 19 + .../secondary/seafoam_islands/palettes/12.pal | 19 + .../secondary/seafoam_islands/palettes/13.pal | 19 + .../secondary/seafoam_islands/palettes/14.pal | 19 + .../secondary/seafoam_islands/palettes/15.pal | 19 + .../secondary/seafoam_islands/tiles.png | Bin 0 -> 4982 bytes .../sevii_islands_123/metatile_attributes.bin | Bin 0 -> 1140 bytes .../secondary/sevii_islands_123/metatiles.bin | Bin 0 -> 4560 bytes .../sevii_islands_123/palettes/00.pal | 19 + .../sevii_islands_123/palettes/01.pal | 19 + .../sevii_islands_123/palettes/02.pal | 19 + .../sevii_islands_123/palettes/03.pal | 19 + .../sevii_islands_123/palettes/04.pal | 19 + .../sevii_islands_123/palettes/05.pal | 19 + .../sevii_islands_123/palettes/06.pal | 19 + .../sevii_islands_123/palettes/07.pal | 19 + .../sevii_islands_123/palettes/08.pal | 19 + .../sevii_islands_123/palettes/09.pal | 19 + .../sevii_islands_123/palettes/10.pal | 19 + .../sevii_islands_123/palettes/11.pal | 19 + .../sevii_islands_123/palettes/12.pal | 19 + .../sevii_islands_123/palettes/13.pal | 19 + .../sevii_islands_123/palettes/14.pal | 19 + .../sevii_islands_123/palettes/15.pal | 19 + .../secondary/sevii_islands_123/tiles.png | Bin 0 -> 2574 bytes .../sevii_islands_45/metatile_attributes.bin | Bin 0 -> 608 bytes .../secondary/sevii_islands_45/metatiles.bin | Bin 0 -> 2432 bytes .../sevii_islands_45/palettes/00.pal | 19 + .../sevii_islands_45/palettes/01.pal | 19 + .../sevii_islands_45/palettes/02.pal | 19 + .../sevii_islands_45/palettes/03.pal | 19 + .../sevii_islands_45/palettes/04.pal | 19 + .../sevii_islands_45/palettes/05.pal | 19 + .../sevii_islands_45/palettes/06.pal | 19 + .../sevii_islands_45/palettes/07.pal | 19 + .../sevii_islands_45/palettes/08.pal | 19 + .../sevii_islands_45/palettes/09.pal | 19 + .../sevii_islands_45/palettes/10.pal | 19 + .../sevii_islands_45/palettes/11.pal | 19 + .../sevii_islands_45/palettes/12.pal | 19 + .../sevii_islands_45/palettes/13.pal | 19 + .../sevii_islands_45/palettes/14.pal | 19 + .../sevii_islands_45/palettes/15.pal | 19 + .../secondary/sevii_islands_45/tiles.png | Bin 0 -> 2286 bytes .../sevii_islands_67/metatile_attributes.bin | Bin 0 -> 960 bytes .../secondary/sevii_islands_67/metatiles.bin | Bin 0 -> 3840 bytes .../sevii_islands_67/palettes/00.pal | 19 + .../sevii_islands_67/palettes/01.pal | 19 + .../sevii_islands_67/palettes/02.pal | 19 + .../sevii_islands_67/palettes/03.pal | 19 + .../sevii_islands_67/palettes/04.pal | 19 + .../sevii_islands_67/palettes/05.pal | 19 + .../sevii_islands_67/palettes/06.pal | 19 + .../sevii_islands_67/palettes/07.pal | 19 + .../sevii_islands_67/palettes/08.pal | 19 + .../sevii_islands_67/palettes/09.pal | 19 + .../sevii_islands_67/palettes/10.pal | 19 + .../sevii_islands_67/palettes/11.pal | 19 + .../sevii_islands_67/palettes/12.pal | 19 + .../sevii_islands_67/palettes/13.pal | 19 + .../sevii_islands_67/palettes/14.pal | 19 + .../sevii_islands_67/palettes/15.pal | 19 + .../secondary/sevii_islands_67/tiles.png | Bin 0 -> 3132 bytes .../secondary/silph_co/anim/fountain/0.png | Bin 0 -> 284 bytes .../secondary/silph_co/anim/fountain/1.png | Bin 0 -> 273 bytes .../secondary/silph_co/anim/fountain/2.png | Bin 0 -> 276 bytes .../secondary/silph_co/anim/fountain/3.png | Bin 0 -> 268 bytes .../silph_co/metatile_attributes.bin | Bin 0 -> 1512 bytes .../tilesets/secondary/silph_co/metatiles.bin | Bin 0 -> 6048 bytes .../secondary/ss_anne/metatile_attributes.bin | Bin 0 -> 1344 bytes data/tilesets/secondary/ss_anne/metatiles.bin | Bin 0 -> 5376 bytes .../secondary/ss_anne/palettes/00.pal | 19 + .../secondary/ss_anne/palettes/01.pal | 19 + .../secondary/ss_anne/palettes/02.pal | 19 + .../secondary/ss_anne/palettes/03.pal | 19 + .../secondary/ss_anne/palettes/04.pal | 19 + .../secondary/ss_anne/palettes/05.pal | 19 + .../secondary/ss_anne/palettes/06.pal | 19 + .../secondary/ss_anne/palettes/07.pal | 19 + .../secondary/ss_anne/palettes/08.pal | 19 + .../secondary/ss_anne/palettes/09.pal | 19 + .../secondary/ss_anne/palettes/10.pal | 19 + .../secondary/ss_anne/palettes/11.pal | 19 + .../secondary/ss_anne/palettes/12.pal | 19 + .../secondary/ss_anne/palettes/13.pal | 19 + .../secondary/ss_anne/palettes/14.pal | 19 + .../secondary/ss_anne/palettes/15.pal | 19 + data/tilesets/secondary/ss_anne/tiles.png | Bin 0 -> 2996 bytes .../tanoby_ruins/metatile_attributes.bin | Bin 0 -> 376 bytes .../secondary/tanoby_ruins/metatiles.bin | Bin 0 -> 1504 bytes .../secondary/tanoby_ruins/palettes/00.pal | 19 + .../secondary/tanoby_ruins/palettes/01.pal | 19 + .../secondary/tanoby_ruins/palettes/02.pal | 19 + .../secondary/tanoby_ruins/palettes/03.pal | 19 + .../secondary/tanoby_ruins/palettes/04.pal | 19 + .../secondary/tanoby_ruins/palettes/05.pal | 19 + .../secondary/tanoby_ruins/palettes/06.pal | 19 + .../secondary/tanoby_ruins/palettes/07.pal | 19 + .../secondary/tanoby_ruins/palettes/08.pal | 19 + .../secondary/tanoby_ruins/palettes/09.pal | 19 + .../secondary/tanoby_ruins/palettes/10.pal | 19 + .../secondary/tanoby_ruins/palettes/11.pal | 19 + .../secondary/tanoby_ruins/palettes/12.pal | 19 + .../secondary/tanoby_ruins/palettes/13.pal | 19 + .../secondary/tanoby_ruins/palettes/14.pal | 19 + .../secondary/tanoby_ruins/palettes/15.pal | 19 + .../tilesets/secondary/tanoby_ruins/tiles.png | Bin 0 -> 986 bytes .../trainer_tower/metatile_attributes.bin | Bin 0 -> 1152 bytes .../secondary/trainer_tower/metatiles.bin | Bin 0 -> 4608 bytes .../secondary/trainer_tower/palettes/00.pal | 19 + .../secondary/trainer_tower/palettes/01.pal | 19 + .../secondary/trainer_tower/palettes/02.pal | 19 + .../secondary/trainer_tower/palettes/03.pal | 19 + .../secondary/trainer_tower/palettes/04.pal | 19 + .../secondary/trainer_tower/palettes/05.pal | 19 + .../secondary/trainer_tower/palettes/06.pal | 19 + .../secondary/trainer_tower/palettes/07.pal | 19 + .../secondary/trainer_tower/palettes/08.pal | 19 + .../secondary/trainer_tower/palettes/09.pal | 19 + .../secondary/trainer_tower/palettes/10.pal | 19 + .../secondary/trainer_tower/palettes/11.pal | 19 + .../secondary/trainer_tower/palettes/12.pal | 19 + .../secondary/trainer_tower/palettes/13.pal | 19 + .../secondary/trainer_tower/palettes/14.pal | 19 + .../secondary/trainer_tower/palettes/15.pal | 19 + .../secondary/trainer_tower/tiles.png | Bin 0 -> 3152 bytes .../underground_path/metatile_attributes.bin | Bin 0 -> 288 bytes .../secondary/underground_path/metatiles.bin | Bin 0 -> 1152 bytes .../underground_path/palettes/00.pal | 19 + .../underground_path/palettes/01.pal | 19 + .../underground_path/palettes/02.pal | 19 + .../underground_path/palettes/03.pal | 19 + .../underground_path/palettes/04.pal | 19 + .../underground_path/palettes/05.pal | 19 + .../underground_path/palettes/06.pal | 19 + .../underground_path/palettes/07.pal | 19 + .../underground_path/palettes/08.pal | 19 + .../underground_path/palettes/09.pal | 19 + .../underground_path/palettes/10.pal | 19 + .../underground_path/palettes/11.pal | 19 + .../underground_path/palettes/12.pal | 19 + .../underground_path/palettes/13.pal | 19 + .../underground_path/palettes/14.pal | 19 + .../underground_path/palettes/15.pal | 19 + .../secondary/underground_path/tiles.png | Bin 0 -> 708 bytes .../metatile_attributes.bin | Bin 0 -> 456 bytes .../unused_gatehouse_1/metatiles.bin | Bin 0 -> 1824 bytes .../unused_gatehouse_1/palettes/00.pal | 19 + .../unused_gatehouse_1/palettes/01.pal | 19 + .../unused_gatehouse_1/palettes/02.pal | 19 + .../unused_gatehouse_1/palettes/03.pal | 19 + .../unused_gatehouse_1/palettes/04.pal | 19 + .../unused_gatehouse_1/palettes/05.pal | 19 + .../unused_gatehouse_1/palettes/06.pal | 19 + .../unused_gatehouse_1/palettes/07.pal | 19 + .../unused_gatehouse_1/palettes/08.pal | 19 + .../unused_gatehouse_1/palettes/09.pal | 19 + .../unused_gatehouse_1/palettes/10.pal | 19 + .../unused_gatehouse_1/palettes/11.pal | 19 + .../unused_gatehouse_1/palettes/12.pal | 19 + .../unused_gatehouse_1/palettes/13.pal | 19 + .../unused_gatehouse_1/palettes/14.pal | 19 + .../unused_gatehouse_1/palettes/15.pal | 19 + .../secondary/unused_gatehouse_1/tiles.png | Bin 0 -> 1218 bytes .../metatile_attributes.bin | Bin 0 -> 456 bytes .../unused_gatehouse_2/metatiles.bin | Bin 0 -> 1824 bytes .../unused_gatehouse_2/palettes/00.pal | 19 + .../unused_gatehouse_2/palettes/01.pal | 19 + .../unused_gatehouse_2/palettes/02.pal | 19 + .../unused_gatehouse_2/palettes/03.pal | 19 + .../unused_gatehouse_2/palettes/04.pal | 19 + .../unused_gatehouse_2/palettes/05.pal | 19 + .../unused_gatehouse_2/palettes/06.pal | 19 + .../unused_gatehouse_2/palettes/07.pal | 19 + .../unused_gatehouse_2/palettes/08.pal | 19 + .../unused_gatehouse_2/palettes/09.pal | 19 + .../unused_gatehouse_2/palettes/10.pal | 19 + .../unused_gatehouse_2/palettes/11.pal | 19 + .../unused_gatehouse_2/palettes/12.pal | 19 + .../unused_gatehouse_2/palettes/13.pal | 19 + .../unused_gatehouse_2/palettes/14.pal | 19 + .../unused_gatehouse_2/palettes/15.pal | 19 + .../secondary/unused_gatehouse_2/tiles.png | Bin 0 -> 1218 bytes .../vermilion_city/metatile_attributes.bin | Bin 0 -> 672 bytes .../secondary/vermilion_city/metatiles.bin | Bin 0 -> 2688 bytes .../secondary/vermilion_city/palettes/00.pal | 19 + .../secondary/vermilion_city/palettes/01.pal | 19 + .../secondary/vermilion_city/palettes/02.pal | 19 + .../secondary/vermilion_city/palettes/03.pal | 19 + .../secondary/vermilion_city/palettes/04.pal | 19 + .../secondary/vermilion_city/palettes/05.pal | 19 + .../secondary/vermilion_city/palettes/06.pal | 19 + .../secondary/vermilion_city/palettes/07.pal | 19 + .../secondary/vermilion_city/palettes/08.pal | 19 + .../secondary/vermilion_city/palettes/09.pal | 19 + .../secondary/vermilion_city/palettes/10.pal | 19 + .../secondary/vermilion_city/palettes/11.pal | 19 + .../secondary/vermilion_city/palettes/12.pal | 19 + .../secondary/vermilion_city/palettes/13.pal | 19 + .../secondary/vermilion_city/palettes/14.pal | 19 + .../secondary/vermilion_city/palettes/15.pal | 19 + .../secondary/vermilion_city/tiles.png | Bin 0 -> 1380 bytes .../vermilion_gym/anim/motorizeddoor/0.png | Bin 0 -> 175 bytes .../vermilion_gym/anim/motorizeddoor/1.png | Bin 0 -> 186 bytes .../vermilion_gym/metatile_attributes.bin | Bin 0 -> 300 bytes .../secondary/vermilion_gym/metatiles.bin | Bin 0 -> 1200 bytes .../secondary/vermilion_gym/palettes/00.pal | 19 + .../secondary/vermilion_gym/palettes/01.pal | 19 + .../secondary/vermilion_gym/palettes/02.pal | 19 + .../secondary/vermilion_gym/palettes/03.pal | 19 + .../secondary/vermilion_gym/palettes/04.pal | 19 + .../secondary/vermilion_gym/palettes/05.pal | 19 + .../secondary/vermilion_gym/palettes/06.pal | 19 + .../secondary/vermilion_gym/palettes/07.pal | 19 + .../secondary/vermilion_gym/palettes/08.pal | 19 + .../secondary/vermilion_gym/palettes/09.pal | 19 + .../secondary/vermilion_gym/palettes/10.pal | 19 + .../secondary/vermilion_gym/palettes/11.pal | 19 + .../secondary/vermilion_gym/palettes/12.pal | 19 + .../secondary/vermilion_gym/palettes/13.pal | 19 + .../secondary/vermilion_gym/palettes/14.pal | 19 + .../secondary/vermilion_gym/palettes/15.pal | 19 + .../secondary/vermilion_gym/tiles.png | Bin 0 -> 1207 bytes .../viridian_city/metatile_attributes.bin | Bin 0 -> 380 bytes .../secondary/viridian_city/metatiles.bin | Bin 0 -> 1520 bytes .../secondary/viridian_city/palettes/00.pal | 19 + .../secondary/viridian_city/palettes/01.pal | 19 + .../secondary/viridian_city/palettes/02.pal | 19 + .../secondary/viridian_city/palettes/03.pal | 19 + .../secondary/viridian_city/palettes/04.pal | 19 + .../secondary/viridian_city/palettes/05.pal | 19 + .../secondary/viridian_city/palettes/06.pal | 19 + .../secondary/viridian_city/palettes/07.pal | 19 + .../secondary/viridian_city/palettes/08.pal | 19 + .../secondary/viridian_city/palettes/09.pal | 19 + .../secondary/viridian_city/palettes/10.pal | 19 + .../secondary/viridian_city/palettes/11.pal | 19 + .../secondary/viridian_city/palettes/12.pal | 19 + .../secondary/viridian_city/palettes/13.pal | 19 + .../secondary/viridian_city/palettes/14.pal | 19 + .../secondary/viridian_city/palettes/15.pal | 19 + .../secondary/viridian_city/tiles.png | Bin 0 -> 1268 bytes .../viridian_forest/metatile_attributes.bin | Bin 0 -> 172 bytes .../secondary/viridian_forest/metatiles.bin | Bin 0 -> 688 bytes .../secondary/viridian_forest/palettes/00.pal | 19 + .../secondary/viridian_forest/palettes/01.pal | 19 + .../secondary/viridian_forest/palettes/02.pal | 19 + .../secondary/viridian_forest/palettes/03.pal | 19 + .../secondary/viridian_forest/palettes/04.pal | 19 + .../secondary/viridian_forest/palettes/05.pal | 19 + .../secondary/viridian_forest/palettes/06.pal | 19 + .../secondary/viridian_forest/palettes/07.pal | 19 + .../secondary/viridian_forest/palettes/08.pal | 19 + .../secondary/viridian_forest/palettes/09.pal | 19 + .../secondary/viridian_forest/palettes/10.pal | 19 + .../secondary/viridian_forest/palettes/11.pal | 19 + .../secondary/viridian_forest/palettes/12.pal | 19 + .../secondary/viridian_forest/palettes/13.pal | 19 + .../secondary/viridian_forest/palettes/14.pal | 19 + .../secondary/viridian_forest/palettes/15.pal | 19 + .../secondary/viridian_forest/tiles.png | Bin 0 -> 948 bytes .../viridian_gym/metatile_attributes.bin | Bin 0 -> 336 bytes .../secondary/viridian_gym/metatiles.bin | Bin 0 -> 1344 bytes .../secondary/viridian_gym/palettes/00.pal | 19 + .../secondary/viridian_gym/palettes/01.pal | 19 + .../secondary/viridian_gym/palettes/02.pal | 19 + .../secondary/viridian_gym/palettes/03.pal | 19 + .../secondary/viridian_gym/palettes/04.pal | 19 + .../secondary/viridian_gym/palettes/05.pal | 19 + .../secondary/viridian_gym/palettes/06.pal | 19 + .../secondary/viridian_gym/palettes/07.pal | 19 + .../secondary/viridian_gym/palettes/08.pal | 19 + .../secondary/viridian_gym/palettes/09.pal | 19 + .../secondary/viridian_gym/palettes/10.pal | 19 + .../secondary/viridian_gym/palettes/11.pal | 19 + .../secondary/viridian_gym/palettes/12.pal | 19 + .../secondary/viridian_gym/palettes/13.pal | 19 + .../secondary/viridian_gym/palettes/14.pal | 19 + .../secondary/viridian_gym/palettes/15.pal | 19 + .../tilesets/secondary/viridian_gym/tiles.png | Bin 0 -> 860 bytes 2478 files changed, 64348 insertions(+) create mode 100644 data/layouts/BattleColosseum_2P_Frlg/border.bin create mode 100644 data/layouts/BattleColosseum_2P_Frlg/map.bin create mode 100644 data/layouts/BattleColosseum_4P_Frlg/border.bin create mode 100644 data/layouts/BattleColosseum_4P_Frlg/map.bin create mode 100644 data/layouts/BirthIsland_Exterior_Frlg/border.bin create mode 100644 data/layouts/BirthIsland_Exterior_Frlg/map.bin create mode 100644 data/layouts/CeladonCity/border.bin create mode 100644 data/layouts/CeladonCity/map.bin create mode 100644 data/layouts/CeladonCity_Condominiums_1F/border.bin create mode 100644 data/layouts/CeladonCity_Condominiums_1F/map.bin create mode 100644 data/layouts/CeladonCity_Condominiums_2F/border.bin create mode 100644 data/layouts/CeladonCity_Condominiums_2F/map.bin create mode 100644 data/layouts/CeladonCity_Condominiums_3F/border.bin create mode 100644 data/layouts/CeladonCity_Condominiums_3F/map.bin create mode 100644 data/layouts/CeladonCity_Condominiums_Roof/border.bin create mode 100644 data/layouts/CeladonCity_Condominiums_Roof/map.bin create mode 100644 data/layouts/CeladonCity_Condominiums_RoofRoom/border.bin create mode 100644 data/layouts/CeladonCity_Condominiums_RoofRoom/map.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_1F/border.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_1F/map.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_2F/border.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_2F/map.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_3F/border.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_3F/map.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_4F/border.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_4F/map.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_5F/border.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_5F/map.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_Elevator/border.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_Elevator/map.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_Roof/border.bin create mode 100644 data/layouts/CeladonCity_DepartmentStore_Roof/map.bin create mode 100644 data/layouts/CeladonCity_GameCorner/border.bin create mode 100644 data/layouts/CeladonCity_GameCorner/map.bin create mode 100644 data/layouts/CeladonCity_GameCorner_PrizeRoom/border.bin create mode 100644 data/layouts/CeladonCity_GameCorner_PrizeRoom/map.bin create mode 100644 data/layouts/CeladonCity_Gym/border.bin create mode 100644 data/layouts/CeladonCity_Gym/map.bin create mode 100644 data/layouts/CeladonCity_Hotel/border.bin create mode 100644 data/layouts/CeladonCity_Hotel/map.bin create mode 100644 data/layouts/CeladonCity_Hotel_Duplicate/border.bin create mode 100644 data/layouts/CeladonCity_Hotel_Duplicate/map.bin create mode 100644 data/layouts/CeladonCity_Restaurant/border.bin create mode 100644 data/layouts/CeladonCity_Restaurant/map.bin create mode 100644 data/layouts/CeladonCity_Restaurant_Duplicate/border.bin create mode 100644 data/layouts/CeladonCity_Restaurant_Duplicate/map.bin create mode 100644 data/layouts/CeruleanCave_1F/border.bin create mode 100644 data/layouts/CeruleanCave_1F/map.bin create mode 100644 data/layouts/CeruleanCave_2F/border.bin create mode 100644 data/layouts/CeruleanCave_2F/map.bin create mode 100644 data/layouts/CeruleanCave_B1F/border.bin create mode 100644 data/layouts/CeruleanCave_B1F/map.bin create mode 100644 data/layouts/CeruleanCity/border.bin create mode 100644 data/layouts/CeruleanCity/map.bin create mode 100644 data/layouts/CeruleanCity_BikeShop/border.bin create mode 100644 data/layouts/CeruleanCity_BikeShop/map.bin create mode 100644 data/layouts/CeruleanCity_Gym/border.bin create mode 100644 data/layouts/CeruleanCity_Gym/map.bin create mode 100644 data/layouts/CeruleanCity_House1/border.bin create mode 100644 data/layouts/CeruleanCity_House1/map.bin create mode 100644 data/layouts/CeruleanCity_House2/border.bin create mode 100644 data/layouts/CeruleanCity_House2/map.bin create mode 100644 data/layouts/CeruleanCity_House5/border.bin create mode 100644 data/layouts/CeruleanCity_House5/map.bin create mode 100644 data/layouts/CinnabarIsland/border.bin create mode 100644 data/layouts/CinnabarIsland/map.bin create mode 100644 data/layouts/CinnabarIsland_Gym/border.bin create mode 100644 data/layouts/CinnabarIsland_Gym/map.bin create mode 100644 data/layouts/CinnabarIsland_PokemonLab_Entrance/border.bin create mode 100644 data/layouts/CinnabarIsland_PokemonLab_Entrance/map.bin create mode 100644 data/layouts/CinnabarIsland_PokemonLab_ExperimentRoom/border.bin create mode 100644 data/layouts/CinnabarIsland_PokemonLab_ExperimentRoom/map.bin create mode 100644 data/layouts/CinnabarIsland_PokemonLab_Lounge/border.bin create mode 100644 data/layouts/CinnabarIsland_PokemonLab_Lounge/map.bin create mode 100644 data/layouts/CinnabarIsland_PokemonLab_ResearchRoom/border.bin create mode 100644 data/layouts/CinnabarIsland_PokemonLab_ResearchRoom/map.bin create mode 100644 data/layouts/DiglettsCave_B1F/border.bin create mode 100644 data/layouts/DiglettsCave_B1F/map.bin create mode 100644 data/layouts/DiglettsCave_NorthEntrance/border.bin create mode 100644 data/layouts/DiglettsCave_NorthEntrance/map.bin create mode 100644 data/layouts/DiglettsCave_SouthEntrance/border.bin create mode 100644 data/layouts/DiglettsCave_SouthEntrance/map.bin create mode 100644 data/layouts/Entrance_1F/border.bin create mode 100644 data/layouts/Entrance_1F/map.bin create mode 100644 data/layouts/Entrance_2F/border.bin create mode 100644 data/layouts/Entrance_2F/map.bin create mode 100644 data/layouts/EverGrandeCity_HallOfFame_Frlg/border.bin create mode 100644 data/layouts/EverGrandeCity_HallOfFame_Frlg/map.bin create mode 100644 data/layouts/FiveIsland/border.bin create mode 100644 data/layouts/FiveIsland/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Entrance/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Entrance/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room1/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room1/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room10/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room10/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room11/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room11/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room12/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room12/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room13/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room13/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room14/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room14/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room2/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room2/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room3/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room3/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room4/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room4/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room5/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room5/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room6/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room6/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room7/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room7/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room8/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room8/map.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room9/border.bin create mode 100644 data/layouts/FiveIsland_LostCave_Room9/map.bin create mode 100644 data/layouts/FiveIsland_Meadow/border.bin create mode 100644 data/layouts/FiveIsland_Meadow/map.bin create mode 100644 data/layouts/FiveIsland_MemorialPillar/border.bin create mode 100644 data/layouts/FiveIsland_MemorialPillar/map.bin create mode 100644 data/layouts/FiveIsland_ResortGorgeous/border.bin create mode 100644 data/layouts/FiveIsland_ResortGorgeous/map.bin create mode 100644 data/layouts/FiveIsland_ResortGorgeous_House/border.bin create mode 100644 data/layouts/FiveIsland_ResortGorgeous_House/map.bin create mode 100644 data/layouts/FiveIsland_RocketWarehouse/border.bin create mode 100644 data/layouts/FiveIsland_RocketWarehouse/map.bin create mode 100644 data/layouts/FiveIsland_WaterLabyrinth/border.bin create mode 100644 data/layouts/FiveIsland_WaterLabyrinth/map.bin create mode 100644 data/layouts/FortreeCity_DecorationShop_Frlg/border.bin create mode 100644 data/layouts/FortreeCity_DecorationShop_Frlg/map.bin create mode 100644 data/layouts/FortreeCity_House1_Frlg/border.bin create mode 100644 data/layouts/FortreeCity_House1_Frlg/map.bin create mode 100644 data/layouts/FortreeCity_House2_Frlg/border.bin create mode 100644 data/layouts/FortreeCity_House2_Frlg/map.bin create mode 100644 data/layouts/FourIsland/border.bin create mode 100644 data/layouts/FourIsland/map.bin create mode 100644 data/layouts/FourIsland_IcefallCave_1F/border.bin create mode 100644 data/layouts/FourIsland_IcefallCave_1F/map.bin create mode 100644 data/layouts/FourIsland_IcefallCave_B1F/border.bin create mode 100644 data/layouts/FourIsland_IcefallCave_B1F/map.bin create mode 100644 data/layouts/FourIsland_IcefallCave_Back/border.bin create mode 100644 data/layouts/FourIsland_IcefallCave_Back/map.bin create mode 100644 data/layouts/FourIsland_IcefallCave_Entrance/border.bin create mode 100644 data/layouts/FourIsland_IcefallCave_Entrance/map.bin create mode 100644 data/layouts/FourIsland_LoreleisHouse/border.bin create mode 100644 data/layouts/FourIsland_LoreleisHouse/map.bin create mode 100644 data/layouts/FourIsland_PokemonDayCare/border.bin create mode 100644 data/layouts/FourIsland_PokemonDayCare/map.bin create mode 100644 data/layouts/FuchsiaCity/border.bin create mode 100644 data/layouts/FuchsiaCity/map.bin create mode 100644 data/layouts/FuchsiaCity_Gym/border.bin create mode 100644 data/layouts/FuchsiaCity_Gym/map.bin create mode 100644 data/layouts/FuchsiaCity_House2/border.bin create mode 100644 data/layouts/FuchsiaCity_House2/map.bin create mode 100644 data/layouts/FuchsiaCity_SafariZone_Entrance/border.bin create mode 100644 data/layouts/FuchsiaCity_SafariZone_Entrance/map.bin create mode 100644 data/layouts/FuchsiaCity_SafariZone_Office/border.bin create mode 100644 data/layouts/FuchsiaCity_SafariZone_Office/map.bin create mode 100644 data/layouts/FuchsiaCity_WardensHouse/border.bin create mode 100644 data/layouts/FuchsiaCity_WardensHouse/map.bin create mode 100644 data/layouts/House1_Frlg/border.bin create mode 100644 data/layouts/House1_Frlg/map.bin create mode 100644 data/layouts/House2_Frlg/border.bin create mode 100644 data/layouts/House2_Frlg/map.bin create mode 100644 data/layouts/House3_Frlg/border.bin create mode 100644 data/layouts/House3_Frlg/map.bin create mode 100644 data/layouts/House4_Frlg/border.bin create mode 100644 data/layouts/House4_Frlg/map.bin create mode 100644 data/layouts/House5/border.bin create mode 100644 data/layouts/House5/map.bin create mode 100644 data/layouts/IndigoPlateau_Exterior/border.bin create mode 100644 data/layouts/IndigoPlateau_Exterior/map.bin create mode 100644 data/layouts/IndigoPlateau_PokemonCenter_1F/border.bin create mode 100644 data/layouts/IndigoPlateau_PokemonCenter_1F/map.bin create mode 100644 data/layouts/Island_Harbor/border.bin create mode 100644 data/layouts/Island_Harbor/map.bin create mode 100644 data/layouts/Island_Harbor_Frlg/border.bin create mode 100644 data/layouts/Island_Harbor_Frlg/map.bin create mode 100644 data/layouts/LavaridgeTown_HerbShop_Frlg/border.bin create mode 100644 data/layouts/LavaridgeTown_HerbShop_Frlg/map.bin create mode 100644 data/layouts/LavenderTown/border.bin create mode 100644 data/layouts/LavenderTown/map.bin create mode 100644 data/layouts/LavenderTown_VolunteerPokemonHouse/border.bin create mode 100644 data/layouts/LavenderTown_VolunteerPokemonHouse/map.bin create mode 100644 data/layouts/LittlerootTown_MaysHouse_2F_Frlg/border.bin create mode 100644 data/layouts/LittlerootTown_MaysHouse_2F_Frlg/map.bin create mode 100644 data/layouts/Mart_Frlg/border.bin create mode 100644 data/layouts/Mart_Frlg/map.bin create mode 100644 data/layouts/MossdeepCity_EReaderTrainerHouse_1F/border.bin create mode 100644 data/layouts/MossdeepCity_EReaderTrainerHouse_1F/map.bin create mode 100644 data/layouts/MossdeepCity_EReaderTrainerHouse_2F/border.bin create mode 100644 data/layouts/MossdeepCity_EReaderTrainerHouse_2F/map.bin create mode 100644 data/layouts/MtEmber_Exterior/border.bin create mode 100644 data/layouts/MtEmber_Exterior/map.bin create mode 100644 data/layouts/MtEmber_RubyPath_1F/border.bin create mode 100644 data/layouts/MtEmber_RubyPath_1F/map.bin create mode 100644 data/layouts/MtEmber_RubyPath_B1F/border.bin create mode 100644 data/layouts/MtEmber_RubyPath_B1F/map.bin create mode 100644 data/layouts/MtEmber_RubyPath_B1F_Stairs/border.bin create mode 100644 data/layouts/MtEmber_RubyPath_B1F_Stairs/map.bin create mode 100644 data/layouts/MtEmber_RubyPath_B2F/border.bin create mode 100644 data/layouts/MtEmber_RubyPath_B2F/map.bin create mode 100644 data/layouts/MtEmber_RubyPath_B2F_Stairs/border.bin create mode 100644 data/layouts/MtEmber_RubyPath_B2F_Stairs/map.bin create mode 100644 data/layouts/MtEmber_RubyPath_B3F/border.bin create mode 100644 data/layouts/MtEmber_RubyPath_B3F/map.bin create mode 100644 data/layouts/MtEmber_RubyPath_B4F/border.bin create mode 100644 data/layouts/MtEmber_RubyPath_B4F/map.bin create mode 100644 data/layouts/MtEmber_RubyPath_B5F/border.bin create mode 100644 data/layouts/MtEmber_RubyPath_B5F/map.bin create mode 100644 data/layouts/MtEmber_Summit/border.bin create mode 100644 data/layouts/MtEmber_Summit/map.bin create mode 100644 data/layouts/MtEmber_SummitPath_1F/border.bin create mode 100644 data/layouts/MtEmber_SummitPath_1F/map.bin create mode 100644 data/layouts/MtEmber_SummitPath_2F/border.bin create mode 100644 data/layouts/MtEmber_SummitPath_2F/map.bin create mode 100644 data/layouts/MtEmber_SummitPath_3F/border.bin create mode 100644 data/layouts/MtEmber_SummitPath_3F/map.bin create mode 100644 data/layouts/MtMoon_1F/border.bin create mode 100644 data/layouts/MtMoon_1F/map.bin create mode 100644 data/layouts/MtMoon_B1F/border.bin create mode 100644 data/layouts/MtMoon_B1F/map.bin create mode 100644 data/layouts/MtMoon_B2F/border.bin create mode 100644 data/layouts/MtMoon_B2F/map.bin create mode 100644 data/layouts/NavelRock_1F/border.bin create mode 100644 data/layouts/NavelRock_1F/map.bin create mode 100644 data/layouts/NavelRock_B1F_Frlg/border.bin create mode 100644 data/layouts/NavelRock_B1F_Frlg/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B10F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B10F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B11F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B11F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B1F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B1F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B2F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B2F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B3F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B3F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B4F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B4F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B5F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B5F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B6F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B6F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B7F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B7F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B8F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B8F/map.bin create mode 100644 data/layouts/NavelRock_BasePath_B9F/border.bin create mode 100644 data/layouts/NavelRock_BasePath_B9F/map.bin create mode 100644 data/layouts/NavelRock_Bottom_Frlg/border.bin create mode 100644 data/layouts/NavelRock_Bottom_Frlg/map.bin create mode 100644 data/layouts/NavelRock_Exterior_Frlg/border.bin create mode 100644 data/layouts/NavelRock_Exterior_Frlg/map.bin create mode 100644 data/layouts/NavelRock_Fork_Frlg/border.bin create mode 100644 data/layouts/NavelRock_Fork_Frlg/map.bin create mode 100644 data/layouts/NavelRock_Summit/border.bin create mode 100644 data/layouts/NavelRock_Summit/map.bin create mode 100644 data/layouts/NavelRock_SummitPath_2F/border.bin create mode 100644 data/layouts/NavelRock_SummitPath_2F/map.bin create mode 100644 data/layouts/NavelRock_SummitPath_3F/border.bin create mode 100644 data/layouts/NavelRock_SummitPath_3F/map.bin create mode 100644 data/layouts/NavelRock_SummitPath_4F/border.bin create mode 100644 data/layouts/NavelRock_SummitPath_4F/map.bin create mode 100644 data/layouts/NavelRock_SummitPath_5F/border.bin create mode 100644 data/layouts/NavelRock_SummitPath_5F/map.bin create mode 100644 data/layouts/OneIsland/border.bin create mode 100644 data/layouts/OneIsland/map.bin create mode 100644 data/layouts/OneIsland_KindleRoad/border.bin create mode 100644 data/layouts/OneIsland_KindleRoad/map.bin create mode 100644 data/layouts/OneIsland_KindleRoad_EmberSpa/border.bin create mode 100644 data/layouts/OneIsland_KindleRoad_EmberSpa/map.bin create mode 100644 data/layouts/OneIsland_PokemonCenter_1F/border.bin create mode 100644 data/layouts/OneIsland_PokemonCenter_1F/map.bin create mode 100644 data/layouts/OneIsland_PokemonCenter_2F/border.bin create mode 100644 data/layouts/OneIsland_PokemonCenter_2F/map.bin create mode 100644 data/layouts/OneIsland_TreasureBeach/border.bin create mode 100644 data/layouts/OneIsland_TreasureBeach/map.bin create mode 100644 data/layouts/PalletTown/border.bin create mode 100644 data/layouts/PalletTown/map.bin create mode 100644 data/layouts/PalletTown_PlayersHouse_1F_FRLG/border.bin create mode 100644 data/layouts/PalletTown_PlayersHouse_1F_FRLG/map.bin create mode 100644 data/layouts/PalletTown_PlayersHouse_2F_FRLG/border.bin create mode 100644 data/layouts/PalletTown_PlayersHouse_2F_FRLG/map.bin create mode 100644 data/layouts/PalletTown_ProfessorOaksLab/border.bin create mode 100644 data/layouts/PalletTown_ProfessorOaksLab/map.bin create mode 100644 data/layouts/PalletTown_RivalsHouse/border.bin create mode 100644 data/layouts/PalletTown_RivalsHouse/map.bin create mode 100644 data/layouts/PewterCity/border.bin create mode 100644 data/layouts/PewterCity/map.bin create mode 100644 data/layouts/PewterCity_Gym/border.bin create mode 100644 data/layouts/PewterCity_Gym/map.bin create mode 100644 data/layouts/PewterCity_Museum_1F/border.bin create mode 100644 data/layouts/PewterCity_Museum_1F/map.bin create mode 100644 data/layouts/PewterCity_Museum_2F/border.bin create mode 100644 data/layouts/PewterCity_Museum_2F/map.bin create mode 100644 data/layouts/PokemonCenter_1F_Frlg/border.bin create mode 100644 data/layouts/PokemonCenter_1F_Frlg/map.bin create mode 100644 data/layouts/PokemonCenter_2F_Frlg/border.bin create mode 100644 data/layouts/PokemonCenter_2F_Frlg/map.bin create mode 100644 data/layouts/PokemonLeague_AgathasRoom/border.bin create mode 100644 data/layouts/PokemonLeague_AgathasRoom/map.bin create mode 100644 data/layouts/PokemonLeague_BrunosRoom/border.bin create mode 100644 data/layouts/PokemonLeague_BrunosRoom/map.bin create mode 100644 data/layouts/PokemonLeague_ChampionsRoom/border.bin create mode 100644 data/layouts/PokemonLeague_ChampionsRoom/map.bin create mode 100644 data/layouts/PokemonLeague_HallOfFame/border.bin create mode 100644 data/layouts/PokemonLeague_HallOfFame/map.bin create mode 100644 data/layouts/PokemonLeague_LancesRoom/border.bin create mode 100644 data/layouts/PokemonLeague_LancesRoom/map.bin create mode 100644 data/layouts/PokemonLeague_LoreleisRoom/border.bin create mode 100644 data/layouts/PokemonLeague_LoreleisRoom/map.bin create mode 100644 data/layouts/PokemonMansion_1F/border.bin create mode 100644 data/layouts/PokemonMansion_1F/map.bin create mode 100644 data/layouts/PokemonMansion_2F/border.bin create mode 100644 data/layouts/PokemonMansion_2F/map.bin create mode 100644 data/layouts/PokemonMansion_3F/border.bin create mode 100644 data/layouts/PokemonMansion_3F/map.bin create mode 100644 data/layouts/PokemonMansion_B1F/border.bin create mode 100644 data/layouts/PokemonMansion_B1F/map.bin create mode 100644 data/layouts/PokemonTower_1F/border.bin create mode 100644 data/layouts/PokemonTower_1F/map.bin create mode 100644 data/layouts/PokemonTower_2F/border.bin create mode 100644 data/layouts/PokemonTower_2F/map.bin create mode 100644 data/layouts/PokemonTower_3F/border.bin create mode 100644 data/layouts/PokemonTower_3F/map.bin create mode 100644 data/layouts/PokemonTower_4F/border.bin create mode 100644 data/layouts/PokemonTower_4F/map.bin create mode 100644 data/layouts/PokemonTower_5F/border.bin create mode 100644 data/layouts/PokemonTower_5F/map.bin create mode 100644 data/layouts/PokemonTower_6F/border.bin create mode 100644 data/layouts/PokemonTower_6F/map.bin create mode 100644 data/layouts/PokemonTower_7F/border.bin create mode 100644 data/layouts/PokemonTower_7F/map.bin create mode 100644 data/layouts/PowerPlant/border.bin create mode 100644 data/layouts/PowerPlant/map.bin create mode 100644 data/layouts/Prototype_SeviiIsle_22/border.bin create mode 100644 data/layouts/Prototype_SeviiIsle_22/map.bin create mode 100644 data/layouts/Prototype_SeviiIsle_23_East/border.bin create mode 100644 data/layouts/Prototype_SeviiIsle_23_East/map.bin create mode 100644 data/layouts/Prototype_SeviiIsle_23_West/border.bin create mode 100644 data/layouts/Prototype_SeviiIsle_23_West/map.bin create mode 100644 data/layouts/Prototype_SeviiIsle_24/border.bin create mode 100644 data/layouts/Prototype_SeviiIsle_24/map.bin create mode 100644 data/layouts/Prototype_SeviiIsle_6/border.bin create mode 100644 data/layouts/Prototype_SeviiIsle_6/map.bin create mode 100644 data/layouts/Prototype_SeviiIsle_7/border.bin create mode 100644 data/layouts/Prototype_SeviiIsle_7/map.bin create mode 100644 data/layouts/Prototype_SeviiIsle_8/border.bin create mode 100644 data/layouts/Prototype_SeviiIsle_8/map.bin create mode 100644 data/layouts/Prototype_SeviiIsle_9/border.bin create mode 100644 data/layouts/Prototype_SeviiIsle_9/map.bin create mode 100644 data/layouts/RS_BattleTower/border.bin create mode 100644 data/layouts/RS_BattleTower/map.bin create mode 100644 data/layouts/RS_PokemonCenter_1F/border.bin create mode 100644 data/layouts/RS_PokemonCenter_1F/map.bin create mode 100644 data/layouts/RS_SafariZone_Entrance/border.bin create mode 100644 data/layouts/RS_SafariZone_Entrance/map.bin create mode 100644 data/layouts/RS_SafariZone_Northeast/border.bin create mode 100644 data/layouts/RS_SafariZone_Northeast/map.bin create mode 100644 data/layouts/RS_SafariZone_RestHouse/border.bin create mode 100644 data/layouts/RS_SafariZone_RestHouse/map.bin create mode 100644 data/layouts/RS_SafariZone_Southeast/border.bin create mode 100644 data/layouts/RS_SafariZone_Southeast/map.bin create mode 100644 data/layouts/RS_SafariZone_Southwest/border.bin create mode 100644 data/layouts/RS_SafariZone_Southwest/map.bin create mode 100644 data/layouts/RecordCorner_Frlg/border.bin create mode 100644 data/layouts/RecordCorner_Frlg/map.bin create mode 100644 data/layouts/RockTunnel_1F/border.bin create mode 100644 data/layouts/RockTunnel_1F/map.bin create mode 100644 data/layouts/RockTunnel_B1F/border.bin create mode 100644 data/layouts/RockTunnel_B1F/map.bin create mode 100644 data/layouts/RocketHideout_B1F/border.bin create mode 100644 data/layouts/RocketHideout_B1F/map.bin create mode 100644 data/layouts/RocketHideout_B2F/border.bin create mode 100644 data/layouts/RocketHideout_B2F/map.bin create mode 100644 data/layouts/RocketHideout_B3F/border.bin create mode 100644 data/layouts/RocketHideout_B3F/map.bin create mode 100644 data/layouts/RocketHideout_B4F/border.bin create mode 100644 data/layouts/RocketHideout_B4F/map.bin create mode 100644 data/layouts/RocketHideout_Elevator/border.bin create mode 100644 data/layouts/RocketHideout_Elevator/map.bin create mode 100644 data/layouts/Route1/border.bin create mode 100644 data/layouts/Route1/map.bin create mode 100644 data/layouts/Route10/border.bin create mode 100644 data/layouts/Route10/map.bin create mode 100644 data/layouts/Route11/border.bin create mode 100644 data/layouts/Route11/map.bin create mode 100644 data/layouts/Route12/border.bin create mode 100644 data/layouts/Route12/map.bin create mode 100644 data/layouts/Route12_NorthEntrance_1F/border.bin create mode 100644 data/layouts/Route12_NorthEntrance_1F/map.bin create mode 100644 data/layouts/Route13/border.bin create mode 100644 data/layouts/Route13/map.bin create mode 100644 data/layouts/Route14/border.bin create mode 100644 data/layouts/Route14/map.bin create mode 100644 data/layouts/Route15/border.bin create mode 100644 data/layouts/Route15/map.bin create mode 100644 data/layouts/Route16/border.bin create mode 100644 data/layouts/Route16/map.bin create mode 100644 data/layouts/Route16_NorthEntrance_1F/border.bin create mode 100644 data/layouts/Route16_NorthEntrance_1F/map.bin create mode 100644 data/layouts/Route17/border.bin create mode 100644 data/layouts/Route17/map.bin create mode 100644 data/layouts/Route18/border.bin create mode 100644 data/layouts/Route18/map.bin create mode 100644 data/layouts/Route19/border.bin create mode 100644 data/layouts/Route19/map.bin create mode 100644 data/layouts/Route2/border.bin create mode 100644 data/layouts/Route2/map.bin create mode 100644 data/layouts/Route20/border.bin create mode 100644 data/layouts/Route20/map.bin create mode 100644 data/layouts/Route21_North/border.bin create mode 100644 data/layouts/Route21_North/map.bin create mode 100644 data/layouts/Route21_South/border.bin create mode 100644 data/layouts/Route21_South/map.bin create mode 100644 data/layouts/Route22/border.bin create mode 100644 data/layouts/Route22/map.bin create mode 100644 data/layouts/Route22_NorthEntrance/border.bin create mode 100644 data/layouts/Route22_NorthEntrance/map.bin create mode 100644 data/layouts/Route23/border.bin create mode 100644 data/layouts/Route23/map.bin create mode 100644 data/layouts/Route24/border.bin create mode 100644 data/layouts/Route24/map.bin create mode 100644 data/layouts/Route25/border.bin create mode 100644 data/layouts/Route25/map.bin create mode 100644 data/layouts/Route25_SeaCottage/border.bin create mode 100644 data/layouts/Route25_SeaCottage/map.bin create mode 100644 data/layouts/Route2_Entrance/border.bin create mode 100644 data/layouts/Route2_Entrance/map.bin create mode 100644 data/layouts/Route3/border.bin create mode 100644 data/layouts/Route3/map.bin create mode 100644 data/layouts/Route4/border.bin create mode 100644 data/layouts/Route4/map.bin create mode 100644 data/layouts/Route5/border.bin create mode 100644 data/layouts/Route5/map.bin create mode 100644 data/layouts/Route5_PokemonDayCare/border.bin create mode 100644 data/layouts/Route5_PokemonDayCare/map.bin create mode 100644 data/layouts/Route6/border.bin create mode 100644 data/layouts/Route6/map.bin create mode 100644 data/layouts/Route7/border.bin create mode 100644 data/layouts/Route7/map.bin create mode 100644 data/layouts/Route8/border.bin create mode 100644 data/layouts/Route8/map.bin create mode 100644 data/layouts/Route9/border.bin create mode 100644 data/layouts/Route9/map.bin create mode 100644 data/layouts/RustboroCity_CuttersHouse_Frlg/border.bin create mode 100644 data/layouts/RustboroCity_CuttersHouse_Frlg/map.bin create mode 100644 data/layouts/RustboroCity_Flat1_1F_Frlg/border.bin create mode 100644 data/layouts/RustboroCity_Flat1_1F_Frlg/map.bin create mode 100644 data/layouts/RustboroCity_Flat1_2F_Frlg/border.bin create mode 100644 data/layouts/RustboroCity_Flat1_2F_Frlg/map.bin create mode 100644 data/layouts/RustboroCity_Flat2_1F_Frlg/border.bin create mode 100644 data/layouts/RustboroCity_Flat2_1F_Frlg/map.bin create mode 100644 data/layouts/RustboroCity_Flat2_2F_Frlg/border.bin create mode 100644 data/layouts/RustboroCity_Flat2_2F_Frlg/map.bin create mode 100644 data/layouts/RustboroCity_Flat2_3F_Frlg/border.bin create mode 100644 data/layouts/RustboroCity_Flat2_3F_Frlg/map.bin create mode 100644 data/layouts/SSAnne_1F_Corridor/border.bin create mode 100644 data/layouts/SSAnne_1F_Corridor/map.bin create mode 100644 data/layouts/SSAnne_2F_Corridor/border.bin create mode 100644 data/layouts/SSAnne_2F_Corridor/map.bin create mode 100644 data/layouts/SSAnne_3F_Corridor/border.bin create mode 100644 data/layouts/SSAnne_3F_Corridor/map.bin create mode 100644 data/layouts/SSAnne_B1F_Corridor/border.bin create mode 100644 data/layouts/SSAnne_B1F_Corridor/map.bin create mode 100644 data/layouts/SSAnne_CaptainsOffice/border.bin create mode 100644 data/layouts/SSAnne_CaptainsOffice/map.bin create mode 100644 data/layouts/SSAnne_Deck/border.bin create mode 100644 data/layouts/SSAnne_Deck/map.bin create mode 100644 data/layouts/SSAnne_Exterior/border.bin create mode 100644 data/layouts/SSAnne_Exterior/map.bin create mode 100644 data/layouts/SSAnne_Kitchen/border.bin create mode 100644 data/layouts/SSAnne_Kitchen/map.bin create mode 100644 data/layouts/SSAnne_Room1/border.bin create mode 100644 data/layouts/SSAnne_Room1/map.bin create mode 100644 data/layouts/SSAnne_Room2/border.bin create mode 100644 data/layouts/SSAnne_Room2/map.bin create mode 100644 data/layouts/SSTidal_Corridor/border.bin create mode 100644 data/layouts/SSTidal_Corridor/map.bin create mode 100644 data/layouts/SSTidal_LowerDeck/border.bin create mode 100644 data/layouts/SSTidal_LowerDeck/map.bin create mode 100644 data/layouts/SSTidal_Rooms/border.bin create mode 100644 data/layouts/SSTidal_Rooms/map.bin create mode 100644 data/layouts/SafariZone_Center/border.bin create mode 100644 data/layouts/SafariZone_Center/map.bin create mode 100644 data/layouts/SafariZone_East/border.bin create mode 100644 data/layouts/SafariZone_East/map.bin create mode 100644 data/layouts/SafariZone_North_Frlg/border.bin create mode 100644 data/layouts/SafariZone_North_Frlg/map.bin create mode 100644 data/layouts/SafariZone_RestHouse_Frlg/border.bin create mode 100644 data/layouts/SafariZone_RestHouse_Frlg/map.bin create mode 100644 data/layouts/SafariZone_SecretHouse/border.bin create mode 100644 data/layouts/SafariZone_SecretHouse/map.bin create mode 100644 data/layouts/SafariZone_West/border.bin create mode 100644 data/layouts/SafariZone_West/map.bin create mode 100644 data/layouts/SaffronCity/border.bin create mode 100644 data/layouts/SaffronCity/map.bin create mode 100644 data/layouts/SaffronCity_Connection/border.bin create mode 100644 data/layouts/SaffronCity_Connection/map.bin create mode 100644 data/layouts/SaffronCity_CopycatsHouse_1F/border.bin create mode 100644 data/layouts/SaffronCity_CopycatsHouse_1F/map.bin create mode 100644 data/layouts/SaffronCity_CopycatsHouse_2F/border.bin create mode 100644 data/layouts/SaffronCity_CopycatsHouse_2F/map.bin create mode 100644 data/layouts/SaffronCity_Dojo/border.bin create mode 100644 data/layouts/SaffronCity_Dojo/map.bin create mode 100644 data/layouts/SaffronCity_EastWestEntrance/border.bin create mode 100644 data/layouts/SaffronCity_EastWestEntrance/map.bin create mode 100644 data/layouts/SaffronCity_Gym/border.bin create mode 100644 data/layouts/SaffronCity_Gym/map.bin create mode 100644 data/layouts/SaffronCity_NorthSouthEntrance/border.bin create mode 100644 data/layouts/SaffronCity_NorthSouthEntrance/map.bin create mode 100644 data/layouts/SaffronCity_PokemonTrainerFanClub/border.bin create mode 100644 data/layouts/SaffronCity_PokemonTrainerFanClub/map.bin create mode 100644 data/layouts/SeafoamIslands_1F/border.bin create mode 100644 data/layouts/SeafoamIslands_1F/map.bin create mode 100644 data/layouts/SeafoamIslands_B1F/border.bin create mode 100644 data/layouts/SeafoamIslands_B1F/map.bin create mode 100644 data/layouts/SeafoamIslands_B2F/border.bin create mode 100644 data/layouts/SeafoamIslands_B2F/map.bin create mode 100644 data/layouts/SeafoamIslands_B3F/border.bin create mode 100644 data/layouts/SeafoamIslands_B3F/map.bin create mode 100644 data/layouts/SeafoamIslands_B3F_CurrentStopped/border.bin create mode 100644 data/layouts/SeafoamIslands_B3F_CurrentStopped/map.bin create mode 100644 data/layouts/SeafoamIslands_B4F/border.bin create mode 100644 data/layouts/SeafoamIslands_B4F/map.bin create mode 100644 data/layouts/SeafoamIslands_B4F_CurrentStopped/border.bin create mode 100644 data/layouts/SeafoamIslands_B4F_CurrentStopped/map.bin create mode 100644 data/layouts/SevenIsland/border.bin create mode 100644 data/layouts/SevenIsland/map.bin create mode 100644 data/layouts/SevenIsland_House_Room1/border.bin create mode 100644 data/layouts/SevenIsland_House_Room1/map.bin create mode 100644 data/layouts/SevenIsland_House_Room1_DoorOpen/border.bin create mode 100644 data/layouts/SevenIsland_House_Room1_DoorOpen/map.bin create mode 100644 data/layouts/SevenIsland_House_Room2/border.bin create mode 100644 data/layouts/SevenIsland_House_Room2/map.bin create mode 100644 data/layouts/SevenIsland_SevaultCanyon/border.bin create mode 100644 data/layouts/SevenIsland_SevaultCanyon/map.bin create mode 100644 data/layouts/SevenIsland_SevaultCanyon_Entrance/border.bin create mode 100644 data/layouts/SevenIsland_SevaultCanyon_Entrance/map.bin create mode 100644 data/layouts/SevenIsland_SevaultCanyon_TanobyKey/border.bin create mode 100644 data/layouts/SevenIsland_SevaultCanyon_TanobyKey/map.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins/border.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins/map.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_DilfordChamber/border.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_DilfordChamber/map.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_LiptooChamber/border.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_LiptooChamber/map.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_MoneanChamber/border.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_MoneanChamber/map.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_RixyChamber/border.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_RixyChamber/map.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_ScufibChamber/border.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_ScufibChamber/map.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_ViapoisChamber/border.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_ViapoisChamber/map.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_WeepthChamber/border.bin create mode 100644 data/layouts/SevenIsland_TanobyRuins_WeepthChamber/map.bin create mode 100644 data/layouts/SevenIsland_TrainerTower/border.bin create mode 100644 data/layouts/SevenIsland_TrainerTower/map.bin create mode 100644 data/layouts/SilphCo_10F/border.bin create mode 100644 data/layouts/SilphCo_10F/map.bin create mode 100644 data/layouts/SilphCo_11F/border.bin create mode 100644 data/layouts/SilphCo_11F/map.bin create mode 100644 data/layouts/SilphCo_1F/border.bin create mode 100644 data/layouts/SilphCo_1F/map.bin create mode 100644 data/layouts/SilphCo_2F/border.bin create mode 100644 data/layouts/SilphCo_2F/map.bin create mode 100644 data/layouts/SilphCo_3F/border.bin create mode 100644 data/layouts/SilphCo_3F/map.bin create mode 100644 data/layouts/SilphCo_4F/border.bin create mode 100644 data/layouts/SilphCo_4F/map.bin create mode 100644 data/layouts/SilphCo_5F/border.bin create mode 100644 data/layouts/SilphCo_5F/map.bin create mode 100644 data/layouts/SilphCo_6F/border.bin create mode 100644 data/layouts/SilphCo_6F/map.bin create mode 100644 data/layouts/SilphCo_7F/border.bin create mode 100644 data/layouts/SilphCo_7F/map.bin create mode 100644 data/layouts/SilphCo_8F/border.bin create mode 100644 data/layouts/SilphCo_8F/map.bin create mode 100644 data/layouts/SilphCo_9F/border.bin create mode 100644 data/layouts/SilphCo_9F/map.bin create mode 100644 data/layouts/SilphCo_Elevator/border.bin create mode 100644 data/layouts/SilphCo_Elevator/map.bin create mode 100644 data/layouts/SixIsland/border.bin create mode 100644 data/layouts/SixIsland/map.bin create mode 100644 data/layouts/SixIsland_AlteringCave/border.bin create mode 100644 data/layouts/SixIsland_AlteringCave/map.bin create mode 100644 data/layouts/SixIsland_DottedHole_1F/border.bin create mode 100644 data/layouts/SixIsland_DottedHole_1F/map.bin create mode 100644 data/layouts/SixIsland_DottedHole_B1F/border.bin create mode 100644 data/layouts/SixIsland_DottedHole_B1F/map.bin create mode 100644 data/layouts/SixIsland_DottedHole_B2F/border.bin create mode 100644 data/layouts/SixIsland_DottedHole_B2F/map.bin create mode 100644 data/layouts/SixIsland_DottedHole_B3F/border.bin create mode 100644 data/layouts/SixIsland_DottedHole_B3F/map.bin create mode 100644 data/layouts/SixIsland_DottedHole_B4F/border.bin create mode 100644 data/layouts/SixIsland_DottedHole_B4F/map.bin create mode 100644 data/layouts/SixIsland_DottedHole_SapphireRoom/border.bin create mode 100644 data/layouts/SixIsland_DottedHole_SapphireRoom/map.bin create mode 100644 data/layouts/SixIsland_GreenPath/border.bin create mode 100644 data/layouts/SixIsland_GreenPath/map.bin create mode 100644 data/layouts/SixIsland_OutcastIsland/border.bin create mode 100644 data/layouts/SixIsland_OutcastIsland/map.bin create mode 100644 data/layouts/SixIsland_PatternBush/border.bin create mode 100644 data/layouts/SixIsland_PatternBush/map.bin create mode 100644 data/layouts/SixIsland_RuinValley/border.bin create mode 100644 data/layouts/SixIsland_RuinValley/map.bin create mode 100644 data/layouts/SixIsland_WaterPath/border.bin create mode 100644 data/layouts/SixIsland_WaterPath/map.bin create mode 100644 data/layouts/SootopolisCity_House1_Frlg/border.bin create mode 100644 data/layouts/SootopolisCity_House1_Frlg/map.bin create mode 100644 data/layouts/SootopolisCity_House2_Frlg/border.bin create mode 100644 data/layouts/SootopolisCity_House2_Frlg/map.bin create mode 100644 data/layouts/SootopolisCity_House3_Frlg/border.bin create mode 100644 data/layouts/SootopolisCity_House3_Frlg/map.bin create mode 100644 data/layouts/ThreeIsland/border.bin create mode 100644 data/layouts/ThreeIsland/map.bin create mode 100644 data/layouts/ThreeIsland_BerryForest/border.bin create mode 100644 data/layouts/ThreeIsland_BerryForest/map.bin create mode 100644 data/layouts/ThreeIsland_BondBridge/border.bin create mode 100644 data/layouts/ThreeIsland_BondBridge/map.bin create mode 100644 data/layouts/ThreeIsland_DunsparceTunnel/border.bin create mode 100644 data/layouts/ThreeIsland_DunsparceTunnel/map.bin create mode 100644 data/layouts/ThreeIsland_DunsparceTunnel_DugOut/border.bin create mode 100644 data/layouts/ThreeIsland_DunsparceTunnel_DugOut/map.bin create mode 100644 data/layouts/ThreeIsland_House1/border.bin create mode 100644 data/layouts/ThreeIsland_House1/map.bin create mode 100644 data/layouts/ThreeIsland_Port/border.bin create mode 100644 data/layouts/ThreeIsland_Port/map.bin create mode 100644 data/layouts/TradeCenter_Frlg/border.bin create mode 100644 data/layouts/TradeCenter_Frlg/map.bin create mode 100644 data/layouts/TrainerTower_1F/border.bin create mode 100644 data/layouts/TrainerTower_1F/map.bin create mode 100644 data/layouts/TrainerTower_1F_Doubles/border.bin create mode 100644 data/layouts/TrainerTower_1F_Doubles/map.bin create mode 100644 data/layouts/TrainerTower_1F_Knockout/border.bin create mode 100644 data/layouts/TrainerTower_1F_Knockout/map.bin create mode 100644 data/layouts/TrainerTower_2F/border.bin create mode 100644 data/layouts/TrainerTower_2F/map.bin create mode 100644 data/layouts/TrainerTower_2F_Doubles/border.bin create mode 100644 data/layouts/TrainerTower_2F_Doubles/map.bin create mode 100644 data/layouts/TrainerTower_2F_Knockout/border.bin create mode 100644 data/layouts/TrainerTower_2F_Knockout/map.bin create mode 100644 data/layouts/TrainerTower_3F/border.bin create mode 100644 data/layouts/TrainerTower_3F/map.bin create mode 100644 data/layouts/TrainerTower_3F_Doubles/border.bin create mode 100644 data/layouts/TrainerTower_3F_Doubles/map.bin create mode 100644 data/layouts/TrainerTower_3F_Knockout/border.bin create mode 100644 data/layouts/TrainerTower_3F_Knockout/map.bin create mode 100644 data/layouts/TrainerTower_4F/border.bin create mode 100644 data/layouts/TrainerTower_4F/map.bin create mode 100644 data/layouts/TrainerTower_4F_Doubles/border.bin create mode 100644 data/layouts/TrainerTower_4F_Doubles/map.bin create mode 100644 data/layouts/TrainerTower_4F_Knockout/border.bin create mode 100644 data/layouts/TrainerTower_4F_Knockout/map.bin create mode 100644 data/layouts/TrainerTower_5F/border.bin create mode 100644 data/layouts/TrainerTower_5F/map.bin create mode 100644 data/layouts/TrainerTower_5F_Doubles/border.bin create mode 100644 data/layouts/TrainerTower_5F_Doubles/map.bin create mode 100644 data/layouts/TrainerTower_5F_Knockout/border.bin create mode 100644 data/layouts/TrainerTower_5F_Knockout/map.bin create mode 100644 data/layouts/TrainerTower_6F/border.bin create mode 100644 data/layouts/TrainerTower_6F/map.bin create mode 100644 data/layouts/TrainerTower_6F_Doubles/border.bin create mode 100644 data/layouts/TrainerTower_6F_Doubles/map.bin create mode 100644 data/layouts/TrainerTower_6F_Knockout/border.bin create mode 100644 data/layouts/TrainerTower_6F_Knockout/map.bin create mode 100644 data/layouts/TrainerTower_7F/border.bin create mode 100644 data/layouts/TrainerTower_7F/map.bin create mode 100644 data/layouts/TrainerTower_7F_Doubles/border.bin create mode 100644 data/layouts/TrainerTower_7F_Doubles/map.bin create mode 100644 data/layouts/TrainerTower_7F_Knockout/border.bin create mode 100644 data/layouts/TrainerTower_7F_Knockout/map.bin create mode 100644 data/layouts/TrainerTower_8F/border.bin create mode 100644 data/layouts/TrainerTower_8F/map.bin create mode 100644 data/layouts/TrainerTower_8F_Doubles/border.bin create mode 100644 data/layouts/TrainerTower_8F_Doubles/map.bin create mode 100644 data/layouts/TrainerTower_8F_Knockout/border.bin create mode 100644 data/layouts/TrainerTower_8F_Knockout/map.bin create mode 100644 data/layouts/TrainerTower_Elevator/border.bin create mode 100644 data/layouts/TrainerTower_Elevator/map.bin create mode 100644 data/layouts/TrainerTower_Lobby/border.bin create mode 100644 data/layouts/TrainerTower_Lobby/map.bin create mode 100644 data/layouts/TrainerTower_Roof/border.bin create mode 100644 data/layouts/TrainerTower_Roof/map.bin create mode 100644 data/layouts/TwoIsland/border.bin create mode 100644 data/layouts/TwoIsland/map.bin create mode 100644 data/layouts/TwoIsland_CapeBrink/border.bin create mode 100644 data/layouts/TwoIsland_CapeBrink/map.bin create mode 100644 data/layouts/TwoIsland_JoyfulGameCorner/border.bin create mode 100644 data/layouts/TwoIsland_JoyfulGameCorner/map.bin create mode 100644 data/layouts/UndergroundPath_EastWestTunnel/border.bin create mode 100644 data/layouts/UndergroundPath_EastWestTunnel/map.bin create mode 100644 data/layouts/UndergroundPath_Entrance/border.bin create mode 100644 data/layouts/UndergroundPath_Entrance/map.bin create mode 100644 data/layouts/UndergroundPath_NorthSouthTunnel/border.bin create mode 100644 data/layouts/UndergroundPath_NorthSouthTunnel/map.bin create mode 100644 data/layouts/UnionRoom_Frlg/border.bin create mode 100644 data/layouts/UnionRoom_Frlg/map.bin create mode 100644 data/layouts/Unused1/border.bin create mode 100644 data/layouts/Unused1/map.bin create mode 100644 data/layouts/VermilionCity/border.bin create mode 100644 data/layouts/VermilionCity/map.bin create mode 100644 data/layouts/VermilionCity_Gym/border.bin create mode 100644 data/layouts/VermilionCity_Gym/map.bin create mode 100644 data/layouts/VermilionCity_PokemonFanClub/border.bin create mode 100644 data/layouts/VermilionCity_PokemonFanClub/map.bin create mode 100644 data/layouts/VictoryRoad_1F_Frlg/border.bin create mode 100644 data/layouts/VictoryRoad_1F_Frlg/map.bin create mode 100644 data/layouts/VictoryRoad_2F/border.bin create mode 100644 data/layouts/VictoryRoad_2F/map.bin create mode 100644 data/layouts/VictoryRoad_3F/border.bin create mode 100644 data/layouts/VictoryRoad_3F/map.bin create mode 100644 data/layouts/ViridianCity/border.bin create mode 100644 data/layouts/ViridianCity/map.bin create mode 100644 data/layouts/ViridianCity_Gym/border.bin create mode 100644 data/layouts/ViridianCity_Gym/map.bin create mode 100644 data/layouts/ViridianCity_House/border.bin create mode 100644 data/layouts/ViridianCity_House/map.bin create mode 100644 data/layouts/ViridianCity_School/border.bin create mode 100644 data/layouts/ViridianCity_School/map.bin create mode 100644 data/layouts/ViridianForest/border.bin create mode 100644 data/layouts/ViridianForest/map.bin create mode 100644 data/maps/BattleColosseum_2P_Frlg/scripts.inc create mode 100644 data/maps/BattleColosseum_4P_Frlg/scripts.inc create mode 100644 data/maps/BirthIsland_Exterior_Frlg/scripts.inc create mode 100644 data/maps/BirthIsland_Harbor_Frlg/scripts.inc create mode 100644 data/maps/CeladonCity/scripts.inc create mode 100644 data/maps/CeladonCity_Condominiums_1F/scripts.inc create mode 100644 data/maps/CeladonCity_Condominiums_2F/scripts.inc create mode 100644 data/maps/CeladonCity_Condominiums_3F/scripts.inc create mode 100644 data/maps/CeladonCity_Condominiums_Roof/scripts.inc create mode 100644 data/maps/CeladonCity_Condominiums_RoofRoom/scripts.inc create mode 100644 data/maps/CeladonCity_DepartmentStore_1F/scripts.inc create mode 100644 data/maps/CeladonCity_DepartmentStore_2F/scripts.inc create mode 100644 data/maps/CeladonCity_DepartmentStore_3F/scripts.inc create mode 100644 data/maps/CeladonCity_DepartmentStore_4F/scripts.inc create mode 100644 data/maps/CeladonCity_DepartmentStore_5F/scripts.inc create mode 100644 data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc create mode 100644 data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc create mode 100644 data/maps/CeladonCity_GameCorner/scripts.inc create mode 100644 data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc create mode 100644 data/maps/CeladonCity_Gym/scripts.inc create mode 100644 data/maps/CeladonCity_Hotel/scripts.inc create mode 100644 data/maps/CeladonCity_House1/scripts.inc create mode 100644 data/maps/CeladonCity_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/CeladonCity_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/CeladonCity_Restaurant/scripts.inc create mode 100644 data/maps/CeruleanCave_1F/scripts.inc create mode 100644 data/maps/CeruleanCave_2F/scripts.inc create mode 100644 data/maps/CeruleanCave_B1F/scripts.inc create mode 100644 data/maps/CeruleanCity/scripts.inc create mode 100644 data/maps/CeruleanCity_BikeShop/scripts.inc create mode 100644 data/maps/CeruleanCity_Gym/scripts.inc create mode 100644 data/maps/CeruleanCity_House1/scripts.inc create mode 100644 data/maps/CeruleanCity_House2/scripts.inc create mode 100644 data/maps/CeruleanCity_House3/scripts.inc create mode 100644 data/maps/CeruleanCity_House4/scripts.inc create mode 100644 data/maps/CeruleanCity_House5/scripts.inc create mode 100644 data/maps/CeruleanCity_Mart/scripts.inc create mode 100644 data/maps/CeruleanCity_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/CeruleanCity_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/CinnabarIsland/scripts.inc create mode 100644 data/maps/CinnabarIsland_Gym/scripts.inc create mode 100644 data/maps/CinnabarIsland_Mart/scripts.inc create mode 100644 data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/CinnabarIsland_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/CinnabarIsland_PokemonLab_Entrance/scripts.inc create mode 100644 data/maps/CinnabarIsland_PokemonLab_ExperimentRoom/scripts.inc create mode 100644 data/maps/CinnabarIsland_PokemonLab_Lounge/scripts.inc create mode 100644 data/maps/CinnabarIsland_PokemonLab_ResearchRoom/scripts.inc create mode 100644 data/maps/DiglettsCave_B1F/scripts.inc create mode 100644 data/maps/DiglettsCave_NorthEntrance/scripts.inc create mode 100644 data/maps/DiglettsCave_SouthEntrance/scripts.inc create mode 100644 data/maps/FiveIsland/scripts.inc create mode 100644 data/maps/FiveIsland_Harbor/scripts.inc create mode 100644 data/maps/FiveIsland_House1/scripts.inc create mode 100644 data/maps/FiveIsland_House2/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Entrance/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room1/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room10/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room11/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room12/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room13/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room14/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room2/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room3/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room4/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room5/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room6/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room7/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room8/scripts.inc create mode 100644 data/maps/FiveIsland_LostCave_Room9/scripts.inc create mode 100644 data/maps/FiveIsland_Meadow/scripts.inc create mode 100644 data/maps/FiveIsland_MemorialPillar/scripts.inc create mode 100644 data/maps/FiveIsland_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/FiveIsland_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/FiveIsland_ResortGorgeous/scripts.inc create mode 100644 data/maps/FiveIsland_ResortGorgeous_House/scripts.inc create mode 100644 data/maps/FiveIsland_RocketWarehouse/scripts.inc create mode 100644 data/maps/FiveIsland_WaterLabyrinth/scripts.inc create mode 100644 data/maps/FourIsland/scripts.inc create mode 100644 data/maps/FourIsland_Harbor/scripts.inc create mode 100644 data/maps/FourIsland_House1/scripts.inc create mode 100644 data/maps/FourIsland_House2/scripts.inc create mode 100644 data/maps/FourIsland_IcefallCave_1F/scripts.inc create mode 100644 data/maps/FourIsland_IcefallCave_B1F/scripts.inc create mode 100644 data/maps/FourIsland_IcefallCave_Back/scripts.inc create mode 100644 data/maps/FourIsland_IcefallCave_Entrance/scripts.inc create mode 100644 data/maps/FourIsland_LoreleisHouse/scripts.inc create mode 100644 data/maps/FourIsland_Mart/scripts.inc create mode 100644 data/maps/FourIsland_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/FourIsland_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/FourIsland_PokemonDayCare/scripts.inc create mode 100644 data/maps/FuchsiaCity/scripts.inc create mode 100644 data/maps/FuchsiaCity_Gym/scripts.inc create mode 100644 data/maps/FuchsiaCity_House1/scripts.inc create mode 100644 data/maps/FuchsiaCity_House2/scripts.inc create mode 100644 data/maps/FuchsiaCity_House3/scripts.inc create mode 100644 data/maps/FuchsiaCity_Mart/scripts.inc create mode 100644 data/maps/FuchsiaCity_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/FuchsiaCity_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/FuchsiaCity_SafariZone_Entrance/scripts.inc create mode 100644 data/maps/FuchsiaCity_SafariZone_Office/scripts.inc create mode 100644 data/maps/FuchsiaCity_WardensHouse/scripts.inc create mode 100644 data/maps/IndigoPlateau_Exterior/scripts.inc create mode 100644 data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/IndigoPlateau_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/LavenderTown/scripts.inc create mode 100644 data/maps/LavenderTown_House1/scripts.inc create mode 100644 data/maps/LavenderTown_House2/scripts.inc create mode 100644 data/maps/LavenderTown_Mart/scripts.inc create mode 100644 data/maps/LavenderTown_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/LavenderTown_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/LavenderTown_VolunteerPokemonHouse/scripts.inc create mode 100644 data/maps/MtEmber_Exterior/scripts.inc create mode 100644 data/maps/MtEmber_RubyPath_1F/scripts.inc create mode 100644 data/maps/MtEmber_RubyPath_B1F/scripts.inc create mode 100644 data/maps/MtEmber_RubyPath_B1F_Stairs/scripts.inc create mode 100644 data/maps/MtEmber_RubyPath_B2F/scripts.inc create mode 100644 data/maps/MtEmber_RubyPath_B2F_Stairs/scripts.inc create mode 100644 data/maps/MtEmber_RubyPath_B3F/scripts.inc create mode 100644 data/maps/MtEmber_RubyPath_B4F/scripts.inc create mode 100644 data/maps/MtEmber_RubyPath_B5F/scripts.inc create mode 100644 data/maps/MtEmber_Summit/scripts.inc create mode 100644 data/maps/MtEmber_SummitPath_1F/scripts.inc create mode 100644 data/maps/MtEmber_SummitPath_2F/scripts.inc create mode 100644 data/maps/MtEmber_SummitPath_3F/scripts.inc create mode 100644 data/maps/MtMoon_1F/scripts.inc create mode 100644 data/maps/MtMoon_B1F/scripts.inc create mode 100644 data/maps/MtMoon_B2F/scripts.inc create mode 100644 data/maps/NavelRock_1F/scripts.inc create mode 100644 data/maps/NavelRock_B1F_Frlg/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B10F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B11F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B1F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B2F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B3F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B4F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B5F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B6F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B7F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B8F/scripts.inc create mode 100644 data/maps/NavelRock_BasePath_B9F/scripts.inc create mode 100644 data/maps/NavelRock_Bottom_Frlg/scripts.inc create mode 100644 data/maps/NavelRock_Exterior_Frlg/scripts.inc create mode 100644 data/maps/NavelRock_Fork_Frlg/scripts.inc create mode 100644 data/maps/NavelRock_Harbor_Frlg/scripts.inc create mode 100644 data/maps/NavelRock_Summit/scripts.inc create mode 100644 data/maps/NavelRock_SummitPath_2F/scripts.inc create mode 100644 data/maps/NavelRock_SummitPath_3F/scripts.inc create mode 100644 data/maps/NavelRock_SummitPath_4F/scripts.inc create mode 100644 data/maps/NavelRock_SummitPath_5F/scripts.inc create mode 100644 data/maps/OneIsland/scripts.inc create mode 100644 data/maps/OneIsland_Harbor/scripts.inc create mode 100644 data/maps/OneIsland_House1/scripts.inc create mode 100644 data/maps/OneIsland_House2/scripts.inc create mode 100644 data/maps/OneIsland_KindleRoad/scripts.inc create mode 100644 data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc create mode 100644 data/maps/OneIsland_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/OneIsland_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/OneIsland_TreasureBeach/scripts.inc create mode 100644 data/maps/PalletTown/scripts.inc create mode 100644 data/maps/PalletTown_PlayersHouse_1F/scripts.inc create mode 100644 data/maps/PalletTown_PlayersHouse_2F/scripts.inc create mode 100644 data/maps/PalletTown_ProfessorOaksLab/scripts.inc create mode 100644 data/maps/PalletTown_RivalsHouse/scripts.inc create mode 100644 data/maps/PewterCity/scripts.inc create mode 100644 data/maps/PewterCity_Gym/scripts.inc create mode 100644 data/maps/PewterCity_House1/scripts.inc create mode 100644 data/maps/PewterCity_House2/scripts.inc create mode 100644 data/maps/PewterCity_Mart/scripts.inc create mode 100644 data/maps/PewterCity_Museum_1F/scripts.inc create mode 100644 data/maps/PewterCity_Museum_2F/scripts.inc create mode 100644 data/maps/PewterCity_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/PewterCity_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/PokemonLeague_AgathasRoom/scripts.inc create mode 100644 data/maps/PokemonLeague_BrunosRoom/scripts.inc create mode 100644 data/maps/PokemonLeague_ChampionsRoom/scripts.inc create mode 100644 data/maps/PokemonLeague_HallOfFame/scripts.inc create mode 100644 data/maps/PokemonLeague_LancesRoom/scripts.inc create mode 100644 data/maps/PokemonLeague_LoreleisRoom/scripts.inc create mode 100644 data/maps/PokemonMansion_1F/scripts.inc create mode 100644 data/maps/PokemonMansion_2F/scripts.inc create mode 100644 data/maps/PokemonMansion_3F/scripts.inc create mode 100644 data/maps/PokemonMansion_B1F/scripts.inc create mode 100644 data/maps/PokemonTower_1F/scripts.inc create mode 100644 data/maps/PokemonTower_2F/scripts.inc create mode 100644 data/maps/PokemonTower_3F/scripts.inc create mode 100644 data/maps/PokemonTower_4F/scripts.inc create mode 100644 data/maps/PokemonTower_5F/scripts.inc create mode 100644 data/maps/PokemonTower_6F/scripts.inc create mode 100644 data/maps/PokemonTower_7F/scripts.inc create mode 100644 data/maps/PowerPlant/scripts.inc create mode 100644 data/maps/Prototype_SeviiIsle_6/scripts.inc create mode 100644 data/maps/Prototype_SeviiIsle_7/scripts.inc create mode 100644 data/maps/Prototype_SeviiIsle_8/scripts.inc create mode 100644 data/maps/Prototype_SeviiIsle_9/scripts.inc create mode 100644 data/maps/RecordCorner_Frlg/scripts.inc create mode 100644 data/maps/RockTunnel_1F/scripts.inc create mode 100644 data/maps/RockTunnel_B1F/scripts.inc create mode 100644 data/maps/RocketHideout_B1F/scripts.inc create mode 100644 data/maps/RocketHideout_B2F/scripts.inc create mode 100644 data/maps/RocketHideout_B3F/scripts.inc create mode 100644 data/maps/RocketHideout_B4F/scripts.inc create mode 100644 data/maps/RocketHideout_Elevator/scripts.inc create mode 100644 data/maps/Route1/scripts.inc create mode 100644 data/maps/Route10/scripts.inc create mode 100644 data/maps/Route10_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/Route10_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/Route11/scripts.inc create mode 100644 data/maps/Route11_EastEntrance_1F/scripts.inc create mode 100644 data/maps/Route11_EastEntrance_2F/scripts.inc create mode 100644 data/maps/Route12/scripts.inc create mode 100644 data/maps/Route12_FishingHouse/scripts.inc create mode 100644 data/maps/Route12_NorthEntrance_1F/scripts.inc create mode 100644 data/maps/Route12_NorthEntrance_2F/scripts.inc create mode 100644 data/maps/Route13/scripts.inc create mode 100644 data/maps/Route14/scripts.inc create mode 100644 data/maps/Route15/scripts.inc create mode 100644 data/maps/Route15_WestEntrance_1F/scripts.inc create mode 100644 data/maps/Route15_WestEntrance_2F/scripts.inc create mode 100644 data/maps/Route16/scripts.inc create mode 100644 data/maps/Route16_House/scripts.inc create mode 100644 data/maps/Route16_NorthEntrance_1F/scripts.inc create mode 100644 data/maps/Route16_NorthEntrance_2F/scripts.inc create mode 100644 data/maps/Route17/scripts.inc create mode 100644 data/maps/Route18/scripts.inc create mode 100644 data/maps/Route18_EastEntrance_1F/scripts.inc create mode 100644 data/maps/Route18_EastEntrance_2F/scripts.inc create mode 100644 data/maps/Route19/scripts.inc create mode 100644 data/maps/Route19_UnusedHouse/scripts.inc create mode 100644 data/maps/Route2/scripts.inc create mode 100644 data/maps/Route20/scripts.inc create mode 100644 data/maps/Route21_North/scripts.inc create mode 100644 data/maps/Route21_South/scripts.inc create mode 100644 data/maps/Route22/scripts.inc create mode 100644 data/maps/Route22_NorthEntrance/scripts.inc create mode 100644 data/maps/Route23/scripts.inc create mode 100644 data/maps/Route23_UnusedHouse/scripts.inc create mode 100644 data/maps/Route24/scripts.inc create mode 100644 data/maps/Route25/scripts.inc create mode 100644 data/maps/Route25_SeaCottage/scripts.inc create mode 100644 data/maps/Route2_EastBuilding/scripts.inc create mode 100644 data/maps/Route2_House/scripts.inc create mode 100644 data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc create mode 100644 data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc create mode 100644 data/maps/Route3/scripts.inc create mode 100644 data/maps/Route4/scripts.inc create mode 100644 data/maps/Route4_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/Route4_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/Route5/scripts.inc create mode 100644 data/maps/Route5_PokemonDayCare/scripts.inc create mode 100644 data/maps/Route5_SouthEntrance/scripts.inc create mode 100644 data/maps/Route6/scripts.inc create mode 100644 data/maps/Route6_NorthEntrance/scripts.inc create mode 100644 data/maps/Route6_UnusedHouse/scripts.inc create mode 100644 data/maps/Route7/scripts.inc create mode 100644 data/maps/Route7_EastEntrance/scripts.inc create mode 100644 data/maps/Route8/scripts.inc create mode 100644 data/maps/Route8_WestEntrance/scripts.inc create mode 100644 data/maps/Route9/scripts.inc create mode 100644 data/maps/SSAnne_1F_Corridor/scripts.inc create mode 100644 data/maps/SSAnne_1F_Room1/scripts.inc create mode 100644 data/maps/SSAnne_1F_Room2/scripts.inc create mode 100644 data/maps/SSAnne_1F_Room3/scripts.inc create mode 100644 data/maps/SSAnne_1F_Room4/scripts.inc create mode 100644 data/maps/SSAnne_1F_Room5/scripts.inc create mode 100644 data/maps/SSAnne_1F_Room6/scripts.inc create mode 100644 data/maps/SSAnne_1F_Room7/scripts.inc create mode 100644 data/maps/SSAnne_2F_Corridor/scripts.inc create mode 100644 data/maps/SSAnne_2F_Room1/scripts.inc create mode 100644 data/maps/SSAnne_2F_Room2/scripts.inc create mode 100644 data/maps/SSAnne_2F_Room3/scripts.inc create mode 100644 data/maps/SSAnne_2F_Room4/scripts.inc create mode 100644 data/maps/SSAnne_2F_Room5/scripts.inc create mode 100644 data/maps/SSAnne_2F_Room6/scripts.inc create mode 100644 data/maps/SSAnne_3F_Corridor/scripts.inc create mode 100644 data/maps/SSAnne_B1F_Corridor/scripts.inc create mode 100644 data/maps/SSAnne_B1F_Room1/scripts.inc create mode 100644 data/maps/SSAnne_B1F_Room2/scripts.inc create mode 100644 data/maps/SSAnne_B1F_Room3/scripts.inc create mode 100644 data/maps/SSAnne_B1F_Room4/scripts.inc create mode 100644 data/maps/SSAnne_B1F_Room5/scripts.inc create mode 100644 data/maps/SSAnne_CaptainsOffice/scripts.inc create mode 100644 data/maps/SSAnne_Deck/scripts.inc create mode 100644 data/maps/SSAnne_Exterior/scripts.inc create mode 100644 data/maps/SSAnne_Kitchen/scripts.inc create mode 100644 data/maps/SafariZone_Center/scripts.inc create mode 100644 data/maps/SafariZone_Center_RestHouse/scripts.inc create mode 100644 data/maps/SafariZone_East/scripts.inc create mode 100644 data/maps/SafariZone_East_RestHouse/scripts.inc create mode 100644 data/maps/SafariZone_North_Frlg/scripts.inc create mode 100644 data/maps/SafariZone_North_RestHouse/scripts.inc create mode 100644 data/maps/SafariZone_SecretHouse/scripts.inc create mode 100644 data/maps/SafariZone_West/scripts.inc create mode 100644 data/maps/SafariZone_West_RestHouse/scripts.inc create mode 100644 data/maps/SaffronCity/scripts.inc create mode 100644 data/maps/SaffronCity_Connection/scripts.inc create mode 100644 data/maps/SaffronCity_CopycatsHouse_1F/scripts.inc create mode 100644 data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc create mode 100644 data/maps/SaffronCity_Dojo/scripts.inc create mode 100644 data/maps/SaffronCity_Gym/scripts.inc create mode 100644 data/maps/SaffronCity_House/scripts.inc create mode 100644 data/maps/SaffronCity_Mart/scripts.inc create mode 100644 data/maps/SaffronCity_MrPsychicsHouse/scripts.inc create mode 100644 data/maps/SaffronCity_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/SaffronCity_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/SaffronCity_PokemonTrainerFanClub/scripts.inc create mode 100644 data/maps/SeafoamIslands_1F/scripts.inc create mode 100644 data/maps/SeafoamIslands_B1F/scripts.inc create mode 100644 data/maps/SeafoamIslands_B2F/scripts.inc create mode 100644 data/maps/SeafoamIslands_B3F/scripts.inc create mode 100644 data/maps/SeafoamIslands_B4F/scripts.inc create mode 100644 data/maps/SevenIsland/scripts.inc create mode 100644 data/maps/SevenIsland_Harbor/scripts.inc create mode 100644 data/maps/SevenIsland_House_Room1/scripts.inc create mode 100644 data/maps/SevenIsland_House_Room2/scripts.inc create mode 100644 data/maps/SevenIsland_Mart/scripts.inc create mode 100644 data/maps/SevenIsland_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/SevenIsland_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/SevenIsland_SevaultCanyon/scripts.inc create mode 100644 data/maps/SevenIsland_SevaultCanyon_Entrance/scripts.inc create mode 100644 data/maps/SevenIsland_SevaultCanyon_House/scripts.inc create mode 100644 data/maps/SevenIsland_SevaultCanyon_TanobyKey/scripts.inc create mode 100644 data/maps/SevenIsland_TanobyRuins/scripts.inc create mode 100644 data/maps/SevenIsland_TanobyRuins_DilfordChamber/scripts.inc create mode 100644 data/maps/SevenIsland_TanobyRuins_LiptooChamber/scripts.inc create mode 100644 data/maps/SevenIsland_TanobyRuins_MoneanChamber/scripts.inc create mode 100644 data/maps/SevenIsland_TanobyRuins_RixyChamber/scripts.inc create mode 100644 data/maps/SevenIsland_TanobyRuins_ScufibChamber/scripts.inc create mode 100644 data/maps/SevenIsland_TanobyRuins_ViapoisChamber/scripts.inc create mode 100644 data/maps/SevenIsland_TanobyRuins_WeepthChamber/scripts.inc create mode 100644 data/maps/SevenIsland_TrainerTower/scripts.inc create mode 100644 data/maps/SevenIsland_UnusedHouse/scripts.inc create mode 100644 data/maps/SilphCo_10F/scripts.inc create mode 100644 data/maps/SilphCo_11F/scripts.inc create mode 100644 data/maps/SilphCo_1F/scripts.inc create mode 100644 data/maps/SilphCo_2F/scripts.inc create mode 100644 data/maps/SilphCo_3F/scripts.inc create mode 100644 data/maps/SilphCo_4F/scripts.inc create mode 100644 data/maps/SilphCo_5F/scripts.inc create mode 100644 data/maps/SilphCo_6F/scripts.inc create mode 100644 data/maps/SilphCo_7F/scripts.inc create mode 100644 data/maps/SilphCo_8F/scripts.inc create mode 100644 data/maps/SilphCo_9F/scripts.inc create mode 100644 data/maps/SilphCo_Elevator/scripts.inc create mode 100644 data/maps/SixIsland/scripts.inc create mode 100644 data/maps/SixIsland_AlteringCave/scripts.inc create mode 100644 data/maps/SixIsland_DottedHole_1F/scripts.inc create mode 100644 data/maps/SixIsland_DottedHole_B1F/scripts.inc create mode 100644 data/maps/SixIsland_DottedHole_B2F/scripts.inc create mode 100644 data/maps/SixIsland_DottedHole_B3F/scripts.inc create mode 100644 data/maps/SixIsland_DottedHole_B4F/scripts.inc create mode 100644 data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc create mode 100644 data/maps/SixIsland_GreenPath/scripts.inc create mode 100644 data/maps/SixIsland_Harbor/scripts.inc create mode 100644 data/maps/SixIsland_House/scripts.inc create mode 100644 data/maps/SixIsland_Mart/scripts.inc create mode 100644 data/maps/SixIsland_OutcastIsland/scripts.inc create mode 100644 data/maps/SixIsland_PatternBush/scripts.inc create mode 100644 data/maps/SixIsland_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/SixIsland_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/SixIsland_RuinValley/scripts.inc create mode 100644 data/maps/SixIsland_WaterPath/scripts.inc create mode 100644 data/maps/SixIsland_WaterPath_House1/scripts.inc create mode 100644 data/maps/SixIsland_WaterPath_House2/scripts.inc create mode 100644 data/maps/ThreeIsland/scripts.inc create mode 100644 data/maps/ThreeIsland_BerryForest/scripts.inc create mode 100644 data/maps/ThreeIsland_BondBridge/scripts.inc create mode 100644 data/maps/ThreeIsland_DunsparceTunnel/scripts.inc create mode 100644 data/maps/ThreeIsland_Harbor/scripts.inc create mode 100644 data/maps/ThreeIsland_House1/scripts.inc create mode 100644 data/maps/ThreeIsland_House2/scripts.inc create mode 100644 data/maps/ThreeIsland_House3/scripts.inc create mode 100644 data/maps/ThreeIsland_House4/scripts.inc create mode 100644 data/maps/ThreeIsland_House5/scripts.inc create mode 100644 data/maps/ThreeIsland_Mart/scripts.inc create mode 100644 data/maps/ThreeIsland_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/ThreeIsland_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/ThreeIsland_Port/scripts.inc create mode 100644 data/maps/TradeCenter_Frlg/scripts.inc create mode 100644 data/maps/TrainerTower_1F/scripts.inc create mode 100644 data/maps/TrainerTower_2F/scripts.inc create mode 100644 data/maps/TrainerTower_3F/scripts.inc create mode 100644 data/maps/TrainerTower_4F/scripts.inc create mode 100644 data/maps/TrainerTower_5F/scripts.inc create mode 100644 data/maps/TrainerTower_6F/scripts.inc create mode 100644 data/maps/TrainerTower_7F/scripts.inc create mode 100644 data/maps/TrainerTower_8F/scripts.inc create mode 100644 data/maps/TrainerTower_Elevator/scripts.inc create mode 100644 data/maps/TrainerTower_Lobby/scripts.inc create mode 100644 data/maps/TrainerTower_Roof/scripts.inc create mode 100644 data/maps/TwoIsland/scripts.inc create mode 100644 data/maps/TwoIsland_CapeBrink/scripts.inc create mode 100644 data/maps/TwoIsland_CapeBrink_House/scripts.inc create mode 100644 data/maps/TwoIsland_Harbor/scripts.inc create mode 100644 data/maps/TwoIsland_House/scripts.inc create mode 100644 data/maps/TwoIsland_JoyfulGameCorner/scripts.inc create mode 100644 data/maps/TwoIsland_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/TwoIsland_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/UndergroundPath_EastEntrance/scripts.inc create mode 100644 data/maps/UndergroundPath_EastWestTunnel/scripts.inc create mode 100644 data/maps/UndergroundPath_NorthEntrance/scripts.inc create mode 100644 data/maps/UndergroundPath_NorthSouthTunnel/scripts.inc create mode 100644 data/maps/UndergroundPath_SouthEntrance/scripts.inc create mode 100644 data/maps/UndergroundPath_WestEntrance/scripts.inc create mode 100644 data/maps/UnionRoom_Frlg/scripts.inc create mode 100644 data/maps/VermilionCity/scripts.inc create mode 100644 data/maps/VermilionCity_Gym/scripts.inc create mode 100644 data/maps/VermilionCity_House1/scripts.inc create mode 100644 data/maps/VermilionCity_House2/scripts.inc create mode 100644 data/maps/VermilionCity_House3/scripts.inc create mode 100644 data/maps/VermilionCity_Mart/scripts.inc create mode 100644 data/maps/VermilionCity_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/VermilionCity_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/VermilionCity_PokemonFanClub/scripts.inc create mode 100644 data/maps/VictoryRoad_1F_Frlg/scripts.inc create mode 100644 data/maps/VictoryRoad_2F/scripts.inc create mode 100644 data/maps/VictoryRoad_3F/scripts.inc create mode 100644 data/maps/ViridianCity/scripts.inc create mode 100644 data/maps/ViridianCity_Gym/scripts.inc create mode 100644 data/maps/ViridianCity_House/scripts.inc create mode 100644 data/maps/ViridianCity_Mart/scripts.inc create mode 100644 data/maps/ViridianCity_PokemonCenter_1F/scripts.inc create mode 100644 data/maps/ViridianCity_PokemonCenter_2F/scripts.inc create mode 100644 data/maps/ViridianCity_School/scripts.inc create mode 100644 data/maps/ViridianForest/scripts.inc create mode 100644 data/text/day_care_frlg.inc create mode 100644 data/text/fame_checker.inc create mode 100644 data/text/ingame_trade.inc create mode 100644 data/text/new_game_intro_frlg.inc create mode 100644 data/text/trainer_card.inc create mode 100644 data/text/trainers_frlg.inc create mode 100644 data/tilesets/primary/building_frlg/metatile_attributes.bin create mode 100644 data/tilesets/primary/building_frlg/metatiles.bin create mode 100644 data/tilesets/primary/building_frlg/palettes/00.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/01.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/02.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/03.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/04.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/05.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/06.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/07.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/08.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/09.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/10.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/11.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/12.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/13.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/14.pal create mode 100644 data/tilesets/primary/building_frlg/palettes/15.pal create mode 100644 data/tilesets/primary/building_frlg/tiles.png create mode 100644 data/tilesets/primary/general_frlg/anim/flower/0.png create mode 100644 data/tilesets/primary/general_frlg/anim/flower/1.png create mode 100644 data/tilesets/primary/general_frlg/anim/flower/2.png create mode 100644 data/tilesets/primary/general_frlg/anim/flower/3.png create mode 100644 data/tilesets/primary/general_frlg/anim/flower/4.png create mode 100644 data/tilesets/primary/general_frlg/anim/sandwatersedge/0.png create mode 100644 data/tilesets/primary/general_frlg/anim/sandwatersedge/1.png create mode 100644 data/tilesets/primary/general_frlg/anim/sandwatersedge/2.png create mode 100644 data/tilesets/primary/general_frlg/anim/sandwatersedge/3.png create mode 100644 data/tilesets/primary/general_frlg/anim/sandwatersedge/4.png create mode 100644 data/tilesets/primary/general_frlg/anim/sandwatersedge/5.png create mode 100644 data/tilesets/primary/general_frlg/anim/sandwatersedge/6.png create mode 100644 data/tilesets/primary/general_frlg/anim/sandwatersedge/7.png create mode 100644 data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/0.png create mode 100644 data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/1.png create mode 100644 data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/2.png create mode 100644 data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/3.png create mode 100644 data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/4.png create mode 100644 data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/5.png create mode 100644 data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/6.png create mode 100644 data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/7.png create mode 100644 data/tilesets/primary/general_frlg/metatile_attributes.bin create mode 100644 data/tilesets/primary/general_frlg/metatiles.bin create mode 100644 data/tilesets/primary/general_frlg/palettes/00.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/01.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/02.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/03.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/04.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/05.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/06.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/07.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/08.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/09.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/10.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/11.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/12.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/13.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/14.pal create mode 100644 data/tilesets/primary/general_frlg/palettes/15.pal create mode 100644 data/tilesets/primary/general_frlg/tiles.png create mode 100644 data/tilesets/secondary/berry_forest/metatile_attributes.bin create mode 100644 data/tilesets/secondary/berry_forest/metatiles.bin create mode 100644 data/tilesets/secondary/berry_forest/palettes/00.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/01.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/02.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/03.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/04.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/05.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/06.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/07.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/08.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/09.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/10.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/11.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/12.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/13.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/14.pal create mode 100644 data/tilesets/secondary/berry_forest/palettes/15.pal create mode 100644 data/tilesets/secondary/berry_forest/tiles.png create mode 100644 data/tilesets/secondary/bike_shop_frlg/metatile_attributes.bin create mode 100644 data/tilesets/secondary/bike_shop_frlg/metatiles.bin create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/00.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/01.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/02.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/03.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/04.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/05.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/06.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/07.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/08.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/09.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/10.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/11.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/12.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/13.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/14.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/palettes/15.pal create mode 100644 data/tilesets/secondary/bike_shop_frlg/tiles.png create mode 100644 data/tilesets/secondary/burgled_house/metatile_attributes.bin create mode 100644 data/tilesets/secondary/burgled_house/metatiles.bin create mode 100644 data/tilesets/secondary/burgled_house/palettes/00.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/01.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/02.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/03.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/04.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/05.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/06.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/07.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/08.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/09.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/10.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/11.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/12.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/13.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/14.pal create mode 100644 data/tilesets/secondary/burgled_house/palettes/15.pal create mode 100644 data/tilesets/secondary/burgled_house/tiles.png create mode 100644 data/tilesets/secondary/cable_club_frlg/metatile_attributes.bin create mode 100644 data/tilesets/secondary/cable_club_frlg/metatiles.bin create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/00.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/01.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/02.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/03.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/04.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/05.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/06.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/07.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/08.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/09.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/10.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/11.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/12.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/13.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/14.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/palettes/15.pal create mode 100644 data/tilesets/secondary/cable_club_frlg/tiles.png create mode 100644 data/tilesets/secondary/cave_frlg/metatile_attributes.bin create mode 100644 data/tilesets/secondary/cave_frlg/metatiles.bin create mode 100644 data/tilesets/secondary/cave_frlg/palettes/00.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/01.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/02.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/03.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/04.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/05.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/06.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/07.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/08.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/09.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/10.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/11.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/12.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/13.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/14.pal create mode 100644 data/tilesets/secondary/cave_frlg/palettes/15.pal create mode 100644 data/tilesets/secondary/cave_frlg/tiles.png create mode 100644 data/tilesets/secondary/celadon_city/anim/fountain/0.png create mode 100644 data/tilesets/secondary/celadon_city/anim/fountain/1.png create mode 100644 data/tilesets/secondary/celadon_city/anim/fountain/2.png create mode 100644 data/tilesets/secondary/celadon_city/anim/fountain/3.png create mode 100644 data/tilesets/secondary/celadon_city/anim/fountain/4.png create mode 100644 data/tilesets/secondary/celadon_city/metatile_attributes.bin create mode 100644 data/tilesets/secondary/celadon_city/metatiles.bin create mode 100644 data/tilesets/secondary/celadon_city/palettes/00.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/01.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/02.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/03.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/04.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/05.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/06.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/07.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/08.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/09.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/10.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/11.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/12.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/13.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/14.pal create mode 100644 data/tilesets/secondary/celadon_city/palettes/15.pal create mode 100644 data/tilesets/secondary/celadon_city/tiles.png create mode 100644 data/tilesets/secondary/celadon_gym/anim/flowers/0.png create mode 100644 data/tilesets/secondary/celadon_gym/anim/flowers/1.png create mode 100644 data/tilesets/secondary/celadon_gym/anim/flowers/2.png create mode 100644 data/tilesets/secondary/celadon_gym/metatile_attributes.bin create mode 100644 data/tilesets/secondary/celadon_gym/metatiles.bin create mode 100644 data/tilesets/secondary/celadon_gym/palettes/00.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/01.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/02.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/03.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/04.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/05.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/06.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/07.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/08.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/09.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/10.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/11.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/12.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/13.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/14.pal create mode 100644 data/tilesets/secondary/celadon_gym/palettes/15.pal create mode 100644 data/tilesets/secondary/celadon_gym/tiles.png create mode 100644 data/tilesets/secondary/cerulean_cave/metatile_attributes.bin create mode 100644 data/tilesets/secondary/cerulean_cave/metatiles.bin create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/00.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/01.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/02.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/03.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/04.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/05.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/06.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/07.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/08.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/09.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/10.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/11.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/12.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/13.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/14.pal create mode 100644 data/tilesets/secondary/cerulean_cave/palettes/15.pal create mode 100644 data/tilesets/secondary/cerulean_cave/tiles.png create mode 100644 data/tilesets/secondary/cerulean_city/metatile_attributes.bin create mode 100644 data/tilesets/secondary/cerulean_city/metatiles.bin create mode 100644 data/tilesets/secondary/cerulean_city/palettes/00.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/01.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/02.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/03.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/04.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/05.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/06.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/07.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/08.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/09.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/10.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/11.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/12.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/13.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/14.pal create mode 100644 data/tilesets/secondary/cerulean_city/palettes/15.pal create mode 100644 data/tilesets/secondary/cerulean_city/tiles.png create mode 100644 data/tilesets/secondary/cerulean_gym/metatile_attributes.bin create mode 100644 data/tilesets/secondary/cerulean_gym/metatiles.bin create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/00.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/01.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/02.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/03.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/04.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/05.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/06.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/07.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/08.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/09.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/10.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/11.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/12.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/13.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/14.pal create mode 100644 data/tilesets/secondary/cerulean_gym/palettes/15.pal create mode 100644 data/tilesets/secondary/cerulean_gym/tiles.png create mode 100644 data/tilesets/secondary/cinnabar_gym/metatile_attributes.bin create mode 100644 data/tilesets/secondary/cinnabar_gym/metatiles.bin create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/00.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/01.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/02.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/03.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/04.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/05.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/06.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/07.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/08.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/09.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/10.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/11.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/12.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/13.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/14.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/palettes/15.pal create mode 100644 data/tilesets/secondary/cinnabar_gym/tiles.png create mode 100644 data/tilesets/secondary/cinnabar_island/metatile_attributes.bin create mode 100644 data/tilesets/secondary/cinnabar_island/metatiles.bin create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/00.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/01.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/02.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/03.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/04.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/05.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/06.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/07.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/08.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/09.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/10.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/11.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/12.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/13.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/14.pal create mode 100644 data/tilesets/secondary/cinnabar_island/palettes/15.pal create mode 100644 data/tilesets/secondary/cinnabar_island/tiles.png create mode 100644 data/tilesets/secondary/condominiums/metatile_attributes.bin create mode 100644 data/tilesets/secondary/condominiums/metatiles.bin create mode 100644 data/tilesets/secondary/condominiums/palettes/00.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/01.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/02.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/03.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/04.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/05.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/06.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/07.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/08.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/09.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/10.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/11.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/12.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/13.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/14.pal create mode 100644 data/tilesets/secondary/condominiums/palettes/15.pal create mode 100644 data/tilesets/secondary/condominiums/tiles.png create mode 100644 data/tilesets/secondary/department_store/metatile_attributes.bin create mode 100644 data/tilesets/secondary/department_store/metatiles.bin create mode 100644 data/tilesets/secondary/department_store/palettes/00.pal create mode 100644 data/tilesets/secondary/department_store/palettes/01.pal create mode 100644 data/tilesets/secondary/department_store/palettes/02.pal create mode 100644 data/tilesets/secondary/department_store/palettes/03.pal create mode 100644 data/tilesets/secondary/department_store/palettes/04.pal create mode 100644 data/tilesets/secondary/department_store/palettes/05.pal create mode 100644 data/tilesets/secondary/department_store/palettes/06.pal create mode 100644 data/tilesets/secondary/department_store/palettes/07.pal create mode 100644 data/tilesets/secondary/department_store/palettes/08.pal create mode 100644 data/tilesets/secondary/department_store/palettes/09.pal create mode 100644 data/tilesets/secondary/department_store/palettes/10.pal create mode 100644 data/tilesets/secondary/department_store/palettes/11.pal create mode 100644 data/tilesets/secondary/department_store/palettes/12.pal create mode 100644 data/tilesets/secondary/department_store/palettes/13.pal create mode 100644 data/tilesets/secondary/department_store/palettes/14.pal create mode 100644 data/tilesets/secondary/department_store/palettes/15.pal create mode 100644 data/tilesets/secondary/department_store/tiles.png create mode 100644 data/tilesets/secondary/digletts_cave/metatile_attributes.bin create mode 100644 data/tilesets/secondary/digletts_cave/metatiles.bin create mode 100644 data/tilesets/secondary/digletts_cave/palettes/00.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/01.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/02.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/03.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/04.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/05.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/06.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/07.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/08.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/09.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/10.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/11.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/12.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/13.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/14.pal create mode 100644 data/tilesets/secondary/digletts_cave/palettes/15.pal create mode 100644 data/tilesets/secondary/digletts_cave/tiles.png create mode 100644 data/tilesets/secondary/dummy_1/metatile_attributes.bin create mode 100644 data/tilesets/secondary/dummy_1/metatiles.bin create mode 100644 data/tilesets/secondary/dummy_1/palettes/00.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/01.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/02.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/03.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/04.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/05.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/06.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/07.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/08.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/09.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/10.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/11.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/12.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/13.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/14.pal create mode 100644 data/tilesets/secondary/dummy_1/palettes/15.pal create mode 100644 data/tilesets/secondary/dummy_1/tiles.png create mode 100644 data/tilesets/secondary/dummy_2/metatile_attributes.bin create mode 100644 data/tilesets/secondary/dummy_2/metatiles.bin create mode 100644 data/tilesets/secondary/dummy_2/palettes/00.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/01.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/02.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/03.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/04.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/05.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/06.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/07.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/08.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/09.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/10.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/11.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/12.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/13.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/14.pal create mode 100644 data/tilesets/secondary/dummy_2/palettes/15.pal create mode 100644 data/tilesets/secondary/dummy_2/tiles.png create mode 100644 data/tilesets/secondary/dummy_3/metatile_attributes.bin create mode 100644 data/tilesets/secondary/dummy_3/metatiles.bin create mode 100644 data/tilesets/secondary/dummy_3/palettes/00.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/01.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/02.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/03.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/04.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/05.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/06.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/07.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/08.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/09.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/10.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/11.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/12.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/13.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/14.pal create mode 100644 data/tilesets/secondary/dummy_3/palettes/15.pal create mode 100644 data/tilesets/secondary/dummy_3/tiles.png create mode 100644 data/tilesets/secondary/dummy_4/metatile_attributes.bin create mode 100644 data/tilesets/secondary/dummy_4/metatiles.bin create mode 100644 data/tilesets/secondary/dummy_4/palettes/00.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/01.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/02.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/03.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/04.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/05.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/06.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/07.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/08.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/09.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/10.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/11.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/12.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/13.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/14.pal create mode 100644 data/tilesets/secondary/dummy_4/palettes/15.pal create mode 100644 data/tilesets/secondary/dummy_4/tiles.png create mode 100644 data/tilesets/secondary/fan_club_daycare/metatile_attributes.bin create mode 100644 data/tilesets/secondary/fan_club_daycare/metatiles.bin create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/00.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/01.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/02.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/03.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/04.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/05.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/06.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/07.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/08.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/09.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/10.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/11.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/12.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/13.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/14.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/palettes/15.pal create mode 100644 data/tilesets/secondary/fan_club_daycare/tiles.png create mode 100644 data/tilesets/secondary/fuchsia_city/metatile_attributes.bin create mode 100644 data/tilesets/secondary/fuchsia_city/metatiles.bin create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/00.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/01.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/02.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/03.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/04.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/05.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/06.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/07.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/08.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/09.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/10.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/11.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/12.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/13.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/14.pal create mode 100644 data/tilesets/secondary/fuchsia_city/palettes/15.pal create mode 100644 data/tilesets/secondary/fuchsia_city/tiles.png create mode 100644 data/tilesets/secondary/fuchsia_gym/metatile_attributes.bin create mode 100644 data/tilesets/secondary/fuchsia_gym/metatiles.bin create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/00.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/01.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/02.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/03.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/04.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/05.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/06.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/07.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/08.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/09.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/10.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/11.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/12.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/13.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/14.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/palettes/15.pal create mode 100644 data/tilesets/secondary/fuchsia_gym/tiles.png create mode 100644 data/tilesets/secondary/game_corner/metatile_attributes.bin create mode 100644 data/tilesets/secondary/game_corner/metatiles.bin create mode 100644 data/tilesets/secondary/game_corner/palettes/00.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/01.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/02.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/03.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/04.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/05.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/06.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/07.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/08.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/09.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/10.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/11.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/12.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/13.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/14.pal create mode 100644 data/tilesets/secondary/game_corner/palettes/15.pal create mode 100644 data/tilesets/secondary/game_corner/tiles.png create mode 100644 data/tilesets/secondary/generic_building_1/metatile_attributes.bin create mode 100644 data/tilesets/secondary/generic_building_1/metatiles.bin create mode 100644 data/tilesets/secondary/generic_building_1/palettes/00.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/01.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/02.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/03.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/04.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/05.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/06.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/07.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/08.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/09.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/10.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/11.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/12.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/13.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/14.pal create mode 100644 data/tilesets/secondary/generic_building_1/palettes/15.pal create mode 100644 data/tilesets/secondary/generic_building_1/tiles.png create mode 100644 data/tilesets/secondary/generic_building_2/metatile_attributes.bin create mode 100644 data/tilesets/secondary/generic_building_2/metatiles.bin create mode 100644 data/tilesets/secondary/generic_building_2/palettes/00.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/01.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/02.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/03.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/04.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/05.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/06.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/07.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/08.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/09.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/10.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/11.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/12.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/13.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/14.pal create mode 100644 data/tilesets/secondary/generic_building_2/palettes/15.pal create mode 100644 data/tilesets/secondary/generic_building_2/tiles.png create mode 100644 data/tilesets/secondary/hall_of_fame/metatile_attributes.bin create mode 100644 data/tilesets/secondary/hall_of_fame/metatiles.bin create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/00.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/01.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/02.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/03.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/04.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/05.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/06.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/07.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/08.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/09.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/10.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/11.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/12.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/13.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/14.pal create mode 100644 data/tilesets/secondary/hall_of_fame/palettes/15.pal create mode 100644 data/tilesets/secondary/hall_of_fame/tiles.png create mode 100644 data/tilesets/secondary/hoenn_building/metatile_attributes.bin create mode 100644 data/tilesets/secondary/hoenn_building/metatiles.bin create mode 100644 data/tilesets/secondary/hoenn_building/palettes/00.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/01.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/02.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/03.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/04.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/05.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/06.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/07.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/08.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/09.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/10.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/11.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/12.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/13.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/14.pal create mode 100644 data/tilesets/secondary/hoenn_building/palettes/15.pal create mode 100644 data/tilesets/secondary/hoenn_building/tiles.png create mode 100644 data/tilesets/secondary/indigo_plateau/metatile_attributes.bin create mode 100644 data/tilesets/secondary/indigo_plateau/metatiles.bin create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/00.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/01.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/02.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/03.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/04.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/05.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/06.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/07.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/08.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/09.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/10.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/11.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/12.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/13.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/14.pal create mode 100644 data/tilesets/secondary/indigo_plateau/palettes/15.pal create mode 100644 data/tilesets/secondary/indigo_plateau/tiles.png create mode 100644 data/tilesets/secondary/island_harbor_frlg/metatile_attributes.bin create mode 100644 data/tilesets/secondary/island_harbor_frlg/metatiles.bin create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/00.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/01.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/02.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/03.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/04.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/05.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/06.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/07.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/08.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/09.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/10.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/11.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/12.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/13.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/14.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/palettes/15.pal create mode 100644 data/tilesets/secondary/island_harbor_frlg/tiles.png create mode 100644 data/tilesets/secondary/lab_frlg/metatile_attributes.bin create mode 100644 data/tilesets/secondary/lab_frlg/metatiles.bin create mode 100644 data/tilesets/secondary/lab_frlg/palettes/00.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/01.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/02.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/03.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/04.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/05.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/06.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/07.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/08.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/09.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/10.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/11.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/12.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/13.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/14.pal create mode 100644 data/tilesets/secondary/lab_frlg/palettes/15.pal create mode 100644 data/tilesets/secondary/lab_frlg/tiles.png create mode 100644 data/tilesets/secondary/lavender_town/metatile_attributes.bin create mode 100644 data/tilesets/secondary/lavender_town/metatiles.bin create mode 100644 data/tilesets/secondary/lavender_town/palettes/00.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/01.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/02.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/03.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/04.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/05.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/06.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/07.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/08.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/09.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/10.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/11.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/12.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/13.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/14.pal create mode 100644 data/tilesets/secondary/lavender_town/palettes/15.pal create mode 100644 data/tilesets/secondary/lavender_town/tiles.png create mode 100644 data/tilesets/secondary/mart/metatile_attributes.bin create mode 100644 data/tilesets/secondary/mart/metatiles.bin create mode 100644 data/tilesets/secondary/mart/palettes/00.pal create mode 100644 data/tilesets/secondary/mart/palettes/01.pal create mode 100644 data/tilesets/secondary/mart/palettes/02.pal create mode 100644 data/tilesets/secondary/mart/palettes/03.pal create mode 100644 data/tilesets/secondary/mart/palettes/04.pal create mode 100644 data/tilesets/secondary/mart/palettes/05.pal create mode 100644 data/tilesets/secondary/mart/palettes/06.pal create mode 100644 data/tilesets/secondary/mart/palettes/07.pal create mode 100644 data/tilesets/secondary/mart/palettes/08.pal create mode 100644 data/tilesets/secondary/mart/palettes/09.pal create mode 100644 data/tilesets/secondary/mart/palettes/10.pal create mode 100644 data/tilesets/secondary/mart/palettes/11.pal create mode 100644 data/tilesets/secondary/mart/palettes/12.pal create mode 100644 data/tilesets/secondary/mart/palettes/13.pal create mode 100644 data/tilesets/secondary/mart/palettes/14.pal create mode 100644 data/tilesets/secondary/mart/palettes/15.pal create mode 100644 data/tilesets/secondary/mart/tiles.png create mode 100644 data/tilesets/secondary/mt_ember/anim/steam/0.png create mode 100644 data/tilesets/secondary/mt_ember/anim/steam/1.png create mode 100644 data/tilesets/secondary/mt_ember/anim/steam/2.png create mode 100644 data/tilesets/secondary/mt_ember/anim/steam/3.png create mode 100644 data/tilesets/secondary/mt_ember/metatile_attributes.bin create mode 100644 data/tilesets/secondary/mt_ember/metatiles.bin create mode 100644 data/tilesets/secondary/mt_ember/palettes/00.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/01.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/02.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/03.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/04.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/05.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/06.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/07.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/08.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/09.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/10.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/11.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/12.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/13.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/14.pal create mode 100644 data/tilesets/secondary/mt_ember/palettes/15.pal create mode 100644 data/tilesets/secondary/mt_ember/tiles.png create mode 100644 data/tilesets/secondary/museum/metatile_attributes.bin create mode 100644 data/tilesets/secondary/museum/metatiles.bin create mode 100644 data/tilesets/secondary/museum/palettes/00.pal create mode 100644 data/tilesets/secondary/museum/palettes/01.pal create mode 100644 data/tilesets/secondary/museum/palettes/02.pal create mode 100644 data/tilesets/secondary/museum/palettes/03.pal create mode 100644 data/tilesets/secondary/museum/palettes/04.pal create mode 100644 data/tilesets/secondary/museum/palettes/05.pal create mode 100644 data/tilesets/secondary/museum/palettes/06.pal create mode 100644 data/tilesets/secondary/museum/palettes/07.pal create mode 100644 data/tilesets/secondary/museum/palettes/08.pal create mode 100644 data/tilesets/secondary/museum/palettes/09.pal create mode 100644 data/tilesets/secondary/museum/palettes/10.pal create mode 100644 data/tilesets/secondary/museum/palettes/11.pal create mode 100644 data/tilesets/secondary/museum/palettes/12.pal create mode 100644 data/tilesets/secondary/museum/palettes/13.pal create mode 100644 data/tilesets/secondary/museum/palettes/14.pal create mode 100644 data/tilesets/secondary/museum/palettes/15.pal create mode 100644 data/tilesets/secondary/museum/tiles.png create mode 100644 data/tilesets/secondary/navel_rock_frlg/metatile_attributes.bin create mode 100644 data/tilesets/secondary/navel_rock_frlg/metatiles.bin create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/00.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/01.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/02.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/03.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/04.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/05.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/06.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/07.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/08.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/09.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/10.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/11.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/12.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/13.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/14.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/palettes/15.pal create mode 100644 data/tilesets/secondary/navel_rock_frlg/tiles.png create mode 100644 data/tilesets/secondary/pallet_town/metatile_attributes.bin create mode 100644 data/tilesets/secondary/pallet_town/metatiles.bin create mode 100644 data/tilesets/secondary/pallet_town/palettes/00.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/01.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/02.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/03.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/04.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/05.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/06.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/07.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/08.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/09.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/10.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/11.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/12.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/13.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/14.pal create mode 100644 data/tilesets/secondary/pallet_town/palettes/15.pal create mode 100644 data/tilesets/secondary/pallet_town/tiles.png create mode 100644 data/tilesets/secondary/pewter_city/metatile_attributes.bin create mode 100644 data/tilesets/secondary/pewter_city/metatiles.bin create mode 100644 data/tilesets/secondary/pewter_city/palettes/00.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/01.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/02.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/03.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/04.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/05.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/06.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/07.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/08.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/09.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/10.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/11.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/12.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/13.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/14.pal create mode 100644 data/tilesets/secondary/pewter_city/palettes/15.pal create mode 100644 data/tilesets/secondary/pewter_city/tiles.png create mode 100644 data/tilesets/secondary/pewter_gym/metatile_attributes.bin create mode 100644 data/tilesets/secondary/pewter_gym/metatiles.bin create mode 100644 data/tilesets/secondary/pewter_gym/palettes/00.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/01.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/02.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/03.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/04.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/05.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/06.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/07.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/08.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/09.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/10.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/11.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/12.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/13.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/14.pal create mode 100644 data/tilesets/secondary/pewter_gym/palettes/15.pal create mode 100644 data/tilesets/secondary/pewter_gym/tiles.png create mode 100644 data/tilesets/secondary/pokemon_center_frlg/metatile_attributes.bin create mode 100644 data/tilesets/secondary/pokemon_center_frlg/metatiles.bin create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/00.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/01.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/02.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/03.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/04.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/05.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/06.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/07.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/08.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/09.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/10.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/11.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/12.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/13.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/14.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/palettes/15.pal create mode 100644 data/tilesets/secondary/pokemon_center_frlg/tiles.png create mode 100644 data/tilesets/secondary/pokemon_league/metatile_attributes.bin create mode 100644 data/tilesets/secondary/pokemon_league/metatiles.bin create mode 100644 data/tilesets/secondary/pokemon_league/palettes/00.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/01.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/02.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/03.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/04.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/05.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/06.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/07.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/08.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/09.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/10.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/11.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/12.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/13.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/14.pal create mode 100644 data/tilesets/secondary/pokemon_league/palettes/15.pal create mode 100644 data/tilesets/secondary/pokemon_league/tiles.png create mode 100644 data/tilesets/secondary/pokemon_mansion/metatile_attributes.bin create mode 100644 data/tilesets/secondary/pokemon_mansion/metatiles.bin create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/00.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/01.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/02.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/03.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/04.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/05.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/06.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/07.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/08.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/09.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/10.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/11.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/12.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/13.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/14.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/palettes/15.pal create mode 100644 data/tilesets/secondary/pokemon_mansion/tiles.png create mode 100644 data/tilesets/secondary/pokemon_tower/metatile_attributes.bin create mode 100644 data/tilesets/secondary/pokemon_tower/metatiles.bin create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/00.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/01.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/02.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/03.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/04.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/05.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/06.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/07.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/08.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/09.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/10.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/11.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/12.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/13.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/14.pal create mode 100644 data/tilesets/secondary/pokemon_tower/palettes/15.pal create mode 100644 data/tilesets/secondary/pokemon_tower/tiles.png create mode 100644 data/tilesets/secondary/power_plant/metatile_attributes.bin create mode 100644 data/tilesets/secondary/power_plant/metatiles.bin create mode 100644 data/tilesets/secondary/power_plant/palettes/00.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/01.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/02.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/03.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/04.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/05.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/06.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/07.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/08.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/09.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/10.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/11.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/12.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/13.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/14.pal create mode 100644 data/tilesets/secondary/power_plant/palettes/15.pal create mode 100644 data/tilesets/secondary/power_plant/tiles.png create mode 100644 data/tilesets/secondary/restaurant_hotel/metatile_attributes.bin create mode 100644 data/tilesets/secondary/restaurant_hotel/metatiles.bin create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/00.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/01.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/02.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/03.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/04.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/05.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/06.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/07.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/08.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/09.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/10.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/11.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/12.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/13.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/14.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/palettes/15.pal create mode 100644 data/tilesets/secondary/restaurant_hotel/tiles.png create mode 100644 data/tilesets/secondary/rock_tunnel/metatile_attributes.bin create mode 100644 data/tilesets/secondary/rock_tunnel/metatiles.bin create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/00.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/01.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/02.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/03.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/04.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/05.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/06.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/07.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/08.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/09.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/10.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/11.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/12.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/13.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/14.pal create mode 100644 data/tilesets/secondary/rock_tunnel/palettes/15.pal create mode 100644 data/tilesets/secondary/rock_tunnel/tiles.png create mode 100644 data/tilesets/secondary/safari_zone_building/metatile_attributes.bin create mode 100644 data/tilesets/secondary/safari_zone_building/metatiles.bin create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/00.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/01.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/02.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/03.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/04.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/05.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/06.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/07.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/08.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/09.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/10.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/11.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/12.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/13.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/14.pal create mode 100644 data/tilesets/secondary/safari_zone_building/palettes/15.pal create mode 100644 data/tilesets/secondary/safari_zone_building/tiles.png create mode 100644 data/tilesets/secondary/saffron_city/metatile_attributes.bin create mode 100644 data/tilesets/secondary/saffron_city/metatiles.bin create mode 100644 data/tilesets/secondary/saffron_city/palettes/00.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/01.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/02.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/03.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/04.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/05.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/06.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/07.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/08.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/09.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/10.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/11.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/12.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/13.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/14.pal create mode 100644 data/tilesets/secondary/saffron_city/palettes/15.pal create mode 100644 data/tilesets/secondary/saffron_city/tiles.png create mode 100644 data/tilesets/secondary/saffron_gym/metatile_attributes.bin create mode 100644 data/tilesets/secondary/saffron_gym/metatiles.bin create mode 100644 data/tilesets/secondary/saffron_gym/palettes/00.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/01.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/02.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/03.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/04.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/05.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/06.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/07.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/08.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/09.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/10.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/11.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/12.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/13.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/14.pal create mode 100644 data/tilesets/secondary/saffron_gym/palettes/15.pal create mode 100644 data/tilesets/secondary/saffron_gym/tiles.png create mode 100644 data/tilesets/secondary/school/metatile_attributes.bin create mode 100644 data/tilesets/secondary/school/metatiles.bin create mode 100644 data/tilesets/secondary/school/palettes/00.pal create mode 100644 data/tilesets/secondary/school/palettes/01.pal create mode 100644 data/tilesets/secondary/school/palettes/02.pal create mode 100644 data/tilesets/secondary/school/palettes/03.pal create mode 100644 data/tilesets/secondary/school/palettes/04.pal create mode 100644 data/tilesets/secondary/school/palettes/05.pal create mode 100644 data/tilesets/secondary/school/palettes/06.pal create mode 100644 data/tilesets/secondary/school/palettes/07.pal create mode 100644 data/tilesets/secondary/school/palettes/08.pal create mode 100644 data/tilesets/secondary/school/palettes/09.pal create mode 100644 data/tilesets/secondary/school/palettes/10.pal create mode 100644 data/tilesets/secondary/school/palettes/11.pal create mode 100644 data/tilesets/secondary/school/palettes/12.pal create mode 100644 data/tilesets/secondary/school/palettes/13.pal create mode 100644 data/tilesets/secondary/school/palettes/14.pal create mode 100644 data/tilesets/secondary/school/palettes/15.pal create mode 100644 data/tilesets/secondary/school/tiles.png create mode 100644 data/tilesets/secondary/sea_cottage/metatile_attributes.bin create mode 100644 data/tilesets/secondary/sea_cottage/metatiles.bin create mode 100644 data/tilesets/secondary/sea_cottage/palettes/00.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/01.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/02.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/03.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/04.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/05.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/06.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/07.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/08.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/09.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/10.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/11.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/12.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/13.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/14.pal create mode 100644 data/tilesets/secondary/sea_cottage/palettes/15.pal create mode 100644 data/tilesets/secondary/sea_cottage/tiles.png create mode 100644 data/tilesets/secondary/seafoam_islands/metatile_attributes.bin create mode 100644 data/tilesets/secondary/seafoam_islands/metatiles.bin create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/00.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/01.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/02.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/03.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/04.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/05.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/06.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/07.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/08.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/09.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/10.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/11.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/12.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/13.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/14.pal create mode 100644 data/tilesets/secondary/seafoam_islands/palettes/15.pal create mode 100644 data/tilesets/secondary/seafoam_islands/tiles.png create mode 100644 data/tilesets/secondary/sevii_islands_123/metatile_attributes.bin create mode 100644 data/tilesets/secondary/sevii_islands_123/metatiles.bin create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/00.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/01.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/02.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/03.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/04.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/05.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/06.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/07.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/08.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/09.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/10.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/11.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/12.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/13.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/14.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/palettes/15.pal create mode 100644 data/tilesets/secondary/sevii_islands_123/tiles.png create mode 100644 data/tilesets/secondary/sevii_islands_45/metatile_attributes.bin create mode 100644 data/tilesets/secondary/sevii_islands_45/metatiles.bin create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/00.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/01.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/02.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/03.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/04.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/05.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/06.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/07.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/08.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/09.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/10.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/11.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/12.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/13.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/14.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/palettes/15.pal create mode 100644 data/tilesets/secondary/sevii_islands_45/tiles.png create mode 100644 data/tilesets/secondary/sevii_islands_67/metatile_attributes.bin create mode 100644 data/tilesets/secondary/sevii_islands_67/metatiles.bin create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/00.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/01.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/02.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/03.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/04.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/05.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/06.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/07.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/08.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/09.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/10.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/11.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/12.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/13.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/14.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/palettes/15.pal create mode 100644 data/tilesets/secondary/sevii_islands_67/tiles.png create mode 100644 data/tilesets/secondary/silph_co/anim/fountain/0.png create mode 100644 data/tilesets/secondary/silph_co/anim/fountain/1.png create mode 100644 data/tilesets/secondary/silph_co/anim/fountain/2.png create mode 100644 data/tilesets/secondary/silph_co/anim/fountain/3.png create mode 100644 data/tilesets/secondary/silph_co/metatile_attributes.bin create mode 100644 data/tilesets/secondary/silph_co/metatiles.bin create mode 100644 data/tilesets/secondary/ss_anne/metatile_attributes.bin create mode 100644 data/tilesets/secondary/ss_anne/metatiles.bin create mode 100644 data/tilesets/secondary/ss_anne/palettes/00.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/01.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/02.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/03.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/04.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/05.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/06.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/07.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/08.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/09.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/10.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/11.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/12.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/13.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/14.pal create mode 100644 data/tilesets/secondary/ss_anne/palettes/15.pal create mode 100644 data/tilesets/secondary/ss_anne/tiles.png create mode 100644 data/tilesets/secondary/tanoby_ruins/metatile_attributes.bin create mode 100644 data/tilesets/secondary/tanoby_ruins/metatiles.bin create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/00.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/01.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/02.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/03.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/04.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/05.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/06.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/07.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/08.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/09.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/10.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/11.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/12.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/13.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/14.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/palettes/15.pal create mode 100644 data/tilesets/secondary/tanoby_ruins/tiles.png create mode 100644 data/tilesets/secondary/trainer_tower/metatile_attributes.bin create mode 100644 data/tilesets/secondary/trainer_tower/metatiles.bin create mode 100644 data/tilesets/secondary/trainer_tower/palettes/00.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/01.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/02.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/03.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/04.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/05.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/06.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/07.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/08.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/09.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/10.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/11.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/12.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/13.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/14.pal create mode 100644 data/tilesets/secondary/trainer_tower/palettes/15.pal create mode 100644 data/tilesets/secondary/trainer_tower/tiles.png create mode 100644 data/tilesets/secondary/underground_path/metatile_attributes.bin create mode 100644 data/tilesets/secondary/underground_path/metatiles.bin create mode 100644 data/tilesets/secondary/underground_path/palettes/00.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/01.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/02.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/03.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/04.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/05.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/06.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/07.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/08.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/09.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/10.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/11.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/12.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/13.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/14.pal create mode 100644 data/tilesets/secondary/underground_path/palettes/15.pal create mode 100644 data/tilesets/secondary/underground_path/tiles.png create mode 100644 data/tilesets/secondary/unused_gatehouse_1/metatile_attributes.bin create mode 100644 data/tilesets/secondary/unused_gatehouse_1/metatiles.bin create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/00.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/01.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/02.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/03.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/04.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/05.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/06.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/07.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/08.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/09.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/10.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/11.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/12.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/13.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/14.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/palettes/15.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_1/tiles.png create mode 100644 data/tilesets/secondary/unused_gatehouse_2/metatile_attributes.bin create mode 100644 data/tilesets/secondary/unused_gatehouse_2/metatiles.bin create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/00.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/01.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/02.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/03.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/04.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/05.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/06.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/07.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/08.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/09.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/10.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/11.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/12.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/13.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/14.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/palettes/15.pal create mode 100644 data/tilesets/secondary/unused_gatehouse_2/tiles.png create mode 100644 data/tilesets/secondary/vermilion_city/metatile_attributes.bin create mode 100644 data/tilesets/secondary/vermilion_city/metatiles.bin create mode 100644 data/tilesets/secondary/vermilion_city/palettes/00.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/01.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/02.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/03.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/04.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/05.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/06.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/07.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/08.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/09.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/10.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/11.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/12.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/13.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/14.pal create mode 100644 data/tilesets/secondary/vermilion_city/palettes/15.pal create mode 100644 data/tilesets/secondary/vermilion_city/tiles.png create mode 100644 data/tilesets/secondary/vermilion_gym/anim/motorizeddoor/0.png create mode 100644 data/tilesets/secondary/vermilion_gym/anim/motorizeddoor/1.png create mode 100644 data/tilesets/secondary/vermilion_gym/metatile_attributes.bin create mode 100644 data/tilesets/secondary/vermilion_gym/metatiles.bin create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/00.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/01.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/02.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/03.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/04.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/05.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/06.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/07.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/08.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/09.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/10.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/11.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/12.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/13.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/14.pal create mode 100644 data/tilesets/secondary/vermilion_gym/palettes/15.pal create mode 100644 data/tilesets/secondary/vermilion_gym/tiles.png create mode 100644 data/tilesets/secondary/viridian_city/metatile_attributes.bin create mode 100644 data/tilesets/secondary/viridian_city/metatiles.bin create mode 100644 data/tilesets/secondary/viridian_city/palettes/00.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/01.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/02.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/03.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/04.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/05.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/06.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/07.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/08.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/09.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/10.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/11.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/12.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/13.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/14.pal create mode 100644 data/tilesets/secondary/viridian_city/palettes/15.pal create mode 100644 data/tilesets/secondary/viridian_city/tiles.png create mode 100644 data/tilesets/secondary/viridian_forest/metatile_attributes.bin create mode 100644 data/tilesets/secondary/viridian_forest/metatiles.bin create mode 100644 data/tilesets/secondary/viridian_forest/palettes/00.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/01.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/02.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/03.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/04.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/05.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/06.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/07.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/08.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/09.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/10.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/11.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/12.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/13.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/14.pal create mode 100644 data/tilesets/secondary/viridian_forest/palettes/15.pal create mode 100644 data/tilesets/secondary/viridian_forest/tiles.png create mode 100644 data/tilesets/secondary/viridian_gym/metatile_attributes.bin create mode 100644 data/tilesets/secondary/viridian_gym/metatiles.bin create mode 100644 data/tilesets/secondary/viridian_gym/palettes/00.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/01.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/02.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/03.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/04.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/05.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/06.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/07.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/08.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/09.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/10.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/11.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/12.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/13.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/14.pal create mode 100644 data/tilesets/secondary/viridian_gym/palettes/15.pal create mode 100644 data/tilesets/secondary/viridian_gym/tiles.png diff --git a/data/layouts/BattleColosseum_2P_Frlg/border.bin b/data/layouts/BattleColosseum_2P_Frlg/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/BattleColosseum_2P_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/BattleColosseum_2P_Frlg/map.bin b/data/layouts/BattleColosseum_2P_Frlg/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..8616a5f1bf7d62e2ed0e4cfe8fad7e4a96bd6b7d GIT binary patch literal 252 zcmY++R}R8J3`J20@P^J_>=kAy*$;sq0zdTLd+)|13g~D?vhH}sm|&`An2QCLYK1b^ z*kG%6*oy;>>Vz83xZtX8xQhp#>V*~}Cdw8U$)y;_MS@)_k;PzRvL?+QRp@hfsYjlu s%E@rfZ*6UT8ffeMweQ}LM%seCq)Ewdb!z-*%8NV~jE#^(4uzAAHw?I7RsaA1 literal 0 HcmV?d00001 diff --git a/data/layouts/BattleColosseum_4P_Frlg/border.bin b/data/layouts/BattleColosseum_4P_Frlg/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/BattleColosseum_4P_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/BattleColosseum_4P_Frlg/map.bin b/data/layouts/BattleColosseum_4P_Frlg/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..c68e13ec359b626d5dddc0978c3cd8151f98f60b GIT binary patch literal 252 zcmY++XAZ(J42EGS@P*A?>=X7V+=s#+3V(pI_udvM6%vEV@xnrGt9*TOSM7; zYizJpJM6^)M|DCSXIyYqH{8VoPxV58h>5bpCGsf7agkt;%H%NEn5;>&Pi^|#UFwl9 sI&w0c`?jjKJ`J?h{#v*(nemozE)twGHnEqRgWf^lILDP(6CZyq#Z1poj5 literal 0 HcmV?d00001 diff --git a/data/layouts/BirthIsland_Exterior_Frlg/border.bin b/data/layouts/BirthIsland_Exterior_Frlg/border.bin new file mode 100644 index 000000000000..75f2c916c55e --- /dev/null +++ b/data/layouts/BirthIsland_Exterior_Frlg/border.bin @@ -0,0 +1 @@ +vvvv \ No newline at end of file diff --git a/data/layouts/BirthIsland_Exterior_Frlg/map.bin b/data/layouts/BirthIsland_Exterior_Frlg/map.bin new file mode 100644 index 000000000000..98502708b331 --- /dev/null +++ b/data/layouts/BirthIsland_Exterior_Frlg/map.bin @@ -0,0 +1 @@ +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvfvvvvvvvvvvvvvvvvvvvvvvvvvvvvvnvvvvvvvvvvvvvvvvvvvvvvvvvvv[\]}vvvvvvvvvvvvvvvvvvvvvvvsz`ab|s}vvvvvvvvvvvvvvvvvvvsszscdeu|s}vvvvvvvvvvvvvvvvvssz21310 003141|ss}vvvvvvvvvvvDEvvssz210 00Y300 041|ss}vDEvvvvvvvLMvszs000)3Z3+3 000u|ss}LMvvvvvvvvvsz21310 0)3,323-3+3 003141|ssvvvvvvvvvvszs0 00 01323232333000 0u|s}vvvvvvvvsz21000)3,3232323-3+30 0041|svvvvvvvszss 00 0)3,32323232323-3+300 041|}vvvvvsz2131000132323232323232333 0000u|}vvvszs0000)3,323232323232323-3+300041mu|}vvszs0 093:3:3:3:3:3:3:3:3:3;3 0 0u|}vpssk3100&'00000000000&'0041muuqvtss{||||||||||0||||||||||}uurvts{|||||||||||0|||||||||||}urvt{||||||||||||0||||||||||||}rvxkkkkkkkkkkkk111kkkkkkkkkkkkyvvvvvvvvvvvoss111sssmvvvvvvvvvvvvvvvvvvvvvvv111vvvvvvvvvvvvvvvvvvvvvvvvvvv111vvvvvvvvvvvvvvvvvvvvvvvvvvv222vvvvvvvvvvvvvvvvvvvvvvvvv"3#3vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv !vvvvvvvvvvvvvvvvvvvvvvv$%vvvvvvvvvvvvvvvvvvvvvvv&'vvvvvvvvvvv \ No newline at end of file diff --git a/data/layouts/CeladonCity/border.bin b/data/layouts/CeladonCity/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity/map.bin b/data/layouts/CeladonCity/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..45bad7034e6ccdad06de3e2b48c5ae4a94500021 GIT binary patch literal 4800 zcmc&2S#VTE&`tXF?0Ueym=KQ~KNx?soSC(tJSa=}5%>Xu77($}DieQ9z9b)BA|{Hr({EnydvA8vlt*E8&Gx+RH`CMS^xGP!g_{3i zR6-Td7z!sGlELz&rT zUJP5ljVIRkQ~b=p=lBI)qp#IB=otZYnE7?u@|fRXA|Xk!v2h}hKEy2+E0s_k@Lhd* zr*6CnZ^qm3_5fy@`7OvilH85Ws#z6Mh?;~J758;ykEFi4@oU_J-(YVbcNWeLU``-+ zHy$QZVh@&ya?y*es#PT^d-Xm8KWM_A=>7oj(_iV!)fMVWb(OkWWsP5p>$@Mn!vpv| z_Tim)7tY0b0n9h^yKz6JMMfOJ!^IJz52vf?DoL^0cL#PMPx13PFdD|dSm^N5f!~Yy zH=rHiM*g>Vtf@aB7|f;i{=&6v7j2g!XX)R%B4+Ki?wAzc{{%C)M& zIevzK4gsHjE&XCA#yR3!6z8um>75o6c_jDNP%hz4v^-wJxZ23A&+$`nJj=v>F=$hf zzL%Oe+Ehk9hL7Vt_=NGV#ZO`x5bxi>Jd*=)XwU1Ll~%4V7wCn$RV~s>LcCa~1D?A! zzRy7OcEvTCG3#sho*npuEy%c8k-gf2`g4*zIfPTfyQn;<%jEgO%1%@}++7; zEnU6lh8Au!zVC%oVOR*mVJ|Gjt~@M5dRk_pfg+FY61rvVoq{>eTPv?B>^17mJ;*+! z{XuTlTl7{i|<`) z-`b$ppt~Z{m+a}wxA1Lz$DBP*&&s}7e~^~_u*yh%7GJ|xjoj6^5jWr_TqoDd4brV$ zq%Yl5uD)@-DF3$McHChy7h?Km3gm9Y7w|cJ9iKON6RyD~Z*3^otzGVY#CNBSEAlVp zk}r4aUHV;})R*Kg@E3-#$nS?WxDuBeX)6p~i=Oe82UcIVb~S*#pV`k8ZMLd#j<+e_ zXldgR%n2g@lH8~KB_TX*g1j$I@!Rp z7UlYv&Ou|C7;d0J#Lqxgh8`$9uQ=b%_D05Fl*e@5Kgu_X{A@v<^7}4!_2v4^`8L`c6N9lH z(|Mn`zEokDUn#1@5Yv4zcIl<`<$N3GjrS&ajow7>Tm$EMOwS5mREVQRRKIMdGyh8* z0X?SYVC>S}{AGP9*C<;jsmW@J*W{h=O;uCX1!|hI9QIQ@>nPJ{71eXwefW7ySxfsd zo$`hT=P&!0*3%%aeTRNQUSfJO;;^0L`o=Sh?@Y#=TlSgy7|QBQK|e`nqx*p5+IQ$Z z-+XD=^RU0tiENLu>#t|+;kN@6=(`j;Lg)(aoamY8UBGg=Unqq$MZXAHmvn)?*2dNc z?29<&IN^LRg;Pbp2+49b7F_?5HMz3K<+<}x-+O$o6?V!)%}qoeG_hCYd%@~!rMt5J v?z0D8zUQ)QDdO!nlB;hifBh3W*L)ZA-Ag&d`CH0g|1CZG?}+=ILyi9gee)g& literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Condominiums_1F/border.bin b/data/layouts/CeladonCity_Condominiums_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Condominiums_1F/map.bin b/data/layouts/CeladonCity_Condominiums_1F/map.bin new file mode 100644 index 000000000000..d396e11161ad --- /dev/null +++ b/data/layouts/CeladonCity_Condominiums_1F/map.bin @@ -0,0 +1 @@ +222222222222222222222222322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_Condominiums_2F/border.bin b/data/layouts/CeladonCity_Condominiums_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Condominiums_2F/map.bin b/data/layouts/CeladonCity_Condominiums_2F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..8dcec24564de9ea6f58d57ed5e582e4670ffeeb4 GIT binary patch literal 600 zcmaKpyG{c!5Jdqc*Wo4c{E_P~T%!OhQ6v&2#qt->K>>syU;`plydps=py3S#Gd9UO zAfY2`XXeV|JF_WLy#1UMD_EAes0^85^Nu?7l+7w?C@N)BF{5V8I*!{3GwIb(3Hg+n zHZwNiterFSUJaFyXUurQbz#J2T$9d@RW35&l6=)e;2sa+s)l`00u45Ci#wrbMQ8lP*MR5Pp?Xw$6D6`K-BV1VHTV literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Condominiums_3F/map.bin b/data/layouts/CeladonCity_Condominiums_3F/map.bin new file mode 100644 index 000000000000..5e44c90c6e02 --- /dev/null +++ b/data/layouts/CeladonCity_Condominiums_3F/map.bin @@ -0,0 +1 @@ +222222222222222322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_Condominiums_Roof/border.bin b/data/layouts/CeladonCity_Condominiums_Roof/border.bin new file mode 100644 index 000000000000..cbaea0adcef4 --- /dev/null +++ b/data/layouts/CeladonCity_Condominiums_Roof/border.bin @@ -0,0 +1 @@ +(((( \ No newline at end of file diff --git a/data/layouts/CeladonCity_Condominiums_Roof/map.bin b/data/layouts/CeladonCity_Condominiums_Roof/map.bin new file mode 100644 index 000000000000..8f044c89aa1f --- /dev/null +++ b/data/layouts/CeladonCity_Condominiums_Roof/map.bin @@ -0,0 +1 @@ +((((((((((((((     ./    .!33353  73353  "!3336373363"!3333337333@3A3"!3333337333HI"!337333@3A3"!%&&'337333HI"!%&&'337333@3A3"!%&&'337333HI"!%&&'337333@3A3"!0123337333HI"!893:;33733333"!333333733333"!333333733333"!<>=>=>?33333"!B3C33333333333"!JK3333333333")            *PQQQQURSTQQQQV#DE#,-$#DE#+#LM#,-$#LM#+####,-$####+ \ No newline at end of file diff --git a/data/layouts/CeladonCity_Condominiums_RoofRoom/border.bin b/data/layouts/CeladonCity_Condominiums_RoofRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Condominiums_RoofRoom/map.bin b/data/layouts/CeladonCity_Condominiums_RoofRoom/map.bin new file mode 100644 index 000000000000..a6aaf9a0c11a --- /dev/null +++ b/data/layouts/CeladonCity_Condominiums_RoofRoom/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_DepartmentStore_1F/border.bin b/data/layouts/CeladonCity_DepartmentStore_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_DepartmentStore_1F/map.bin b/data/layouts/CeladonCity_DepartmentStore_1F/map.bin new file mode 100644 index 000000000000..3c09fa172d32 --- /dev/null +++ b/data/layouts/CeladonCity_DepartmentStore_1F/map.bin @@ -0,0 +1 @@ +`ahij322222pqr322222e2222222222222222222222222222222222222222222222223222222222332222222223&32222"32222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_DepartmentStore_2F/border.bin b/data/layouts/CeladonCity_DepartmentStore_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_DepartmentStore_2F/map.bin b/data/layouts/CeladonCity_DepartmentStore_2F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..41c3347187268260a4f40cff029fe133fab7f19f GIT binary patch literal 390 zcmZ9Gy-or_6oo~|xs{?FBo>%hNC#(%eH(ZdgFsjXEC`_T=U?cIG;}6xfLE|Hp`wvc zPze>YJGfcQmz>PZmviqlk@G0x8hI3Uw;a0oz>P;0wWcY>F}3phV=}Wl%%yW>F_{8a;Rsx=0u&U$u3Q2 T!-;2td-gl~d(7`mC%9(|t^0#q literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_DepartmentStore_3F/border.bin b/data/layouts/CeladonCity_DepartmentStore_3F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_DepartmentStore_3F/map.bin b/data/layouts/CeladonCity_DepartmentStore_3F/map.bin new file mode 100644 index 000000000000..1640da24e284 --- /dev/null +++ b/data/layouts/CeladonCity_DepartmentStore_3F/map.bin @@ -0,0 +1 @@ +`ahij22222klmpqr22222stu22222222222222222222222222222222 3 32 3 322223222222222222222 3 32 3 32222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_DepartmentStore_4F/border.bin b/data/layouts/CeladonCity_DepartmentStore_4F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_DepartmentStore_4F/map.bin b/data/layouts/CeladonCity_DepartmentStore_4F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..f3f558069cee97efe6ecf2ff180a397212a9d592 GIT binary patch literal 390 zcmYk0%PxdL5QPyrH6%!^u)>NRr{0HWkzvHRB_i(kOYB@WV?C40?5wa- z)uShqFX?ltPxVRfpcq-iJQh&;pNcrfEtVteSivgRqCdnD?kw5G9%i)6O>S_DWzOm) zwk1{l1_*+H0<$Km29R zz)=~K2TMAnQ@YG04V;ik@wRXJ?o&$xr(`-NX*X%G#@sfusP24r{bIxDRzDm3u#Lng m>c&ev>v)F$#TnFQTeBhOE2?}nGLBf1Uc0_qQbP?H$Mp}WW{p+= literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_DepartmentStore_5F/border.bin b/data/layouts/CeladonCity_DepartmentStore_5F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_DepartmentStore_5F/map.bin b/data/layouts/CeladonCity_DepartmentStore_5F/map.bin new file mode 100644 index 000000000000..5374a18eee26 --- /dev/null +++ b/data/layouts/CeladonCity_DepartmentStore_5F/map.bin @@ -0,0 +1 @@ +`ahij322222k3lm7pqr322222s3tu2222222222222222 22$22222222222322223323322222222222222''2''223323322222222 !2 !23323322()2()2222012012''2''322222222222# \ No newline at end of file diff --git a/data/layouts/CeladonCity_DepartmentStore_Elevator/border.bin b/data/layouts/CeladonCity_DepartmentStore_Elevator/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_DepartmentStore_Elevator/map.bin b/data/layouts/CeladonCity_DepartmentStore_Elevator/map.bin new file mode 100644 index 000000000000..42e08c38debb --- /dev/null +++ b/data/layouts/CeladonCity_DepartmentStore_Elevator/map.bin @@ -0,0 +1 @@ +222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_DepartmentStore_Roof/border.bin b/data/layouts/CeladonCity_DepartmentStore_Roof/border.bin new file mode 100644 index 000000000000..87ae772ca07a --- /dev/null +++ b/data/layouts/CeladonCity_DepartmentStore_Roof/border.bin @@ -0,0 +1 @@ +WWWW \ No newline at end of file diff --git a/data/layouts/CeladonCity_DepartmentStore_Roof/map.bin b/data/layouts/CeladonCity_DepartmentStore_Roof/map.bin new file mode 100644 index 000000000000..f92a0a330cf1 --- /dev/null +++ b/data/layouts/CeladonCity_DepartmentStore_Roof/map.bin @@ -0,0 +1 @@ +WWWWWWWWWWWWW.///OW89999999999996777?]@AAAAAAAAA%%%=<>6?QH22222222c---EDF6?YH22*3+3+3,322222222M36?YH2243KL5322222222U36?YH2243ST5322222222N36?YH2223[3\33322222222V3=GYPB3:3:3:3:3:3:3:3:3:3:3:3:3:3:3IJRXAAAAAAAAAAAAAAAAAZC;C;C;C; \ No newline at end of file diff --git a/data/layouts/CeladonCity_GameCorner/border.bin b/data/layouts/CeladonCity_GameCorner/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_GameCorner/map.bin b/data/layouts/CeladonCity_GameCorner/map.bin new file mode 100644 index 000000000000..00280b8a4ad0 --- /dev/null +++ b/data/layouts/CeladonCity_GameCorner/map.bin @@ -0,0 +1 @@ +222222322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_GameCorner_PrizeRoom/border.bin b/data/layouts/CeladonCity_GameCorner_PrizeRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_GameCorner_PrizeRoom/map.bin b/data/layouts/CeladonCity_GameCorner_PrizeRoom/map.bin new file mode 100644 index 000000000000..475ca451ca82 --- /dev/null +++ b/data/layouts/CeladonCity_GameCorner_PrizeRoom/map.bin @@ -0,0 +1 @@ +222222322222222222222222222222222222232222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_Gym/border.bin b/data/layouts/CeladonCity_Gym/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Gym/map.bin b/data/layouts/CeladonCity_Gym/map.bin new file mode 100644 index 000000000000..19338125c165 --- /dev/null +++ b/data/layouts/CeladonCity_Gym/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222tuv \ No newline at end of file diff --git a/data/layouts/CeladonCity_Hotel/border.bin b/data/layouts/CeladonCity_Hotel/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Hotel/map.bin b/data/layouts/CeladonCity_Hotel/map.bin new file mode 100644 index 000000000000..4573c1444ecb --- /dev/null +++ b/data/layouts/CeladonCity_Hotel/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_Hotel_Duplicate/border.bin b/data/layouts/CeladonCity_Hotel_Duplicate/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Hotel_Duplicate/map.bin b/data/layouts/CeladonCity_Hotel_Duplicate/map.bin new file mode 100644 index 000000000000..4573c1444ecb --- /dev/null +++ b/data/layouts/CeladonCity_Hotel_Duplicate/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_Restaurant/border.bin b/data/layouts/CeladonCity_Restaurant/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Restaurant/map.bin b/data/layouts/CeladonCity_Restaurant/map.bin new file mode 100644 index 000000000000..a5391187c7c6 --- /dev/null +++ b/data/layouts/CeladonCity_Restaurant/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeladonCity_Restaurant_Duplicate/border.bin b/data/layouts/CeladonCity_Restaurant_Duplicate/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeladonCity_Restaurant_Duplicate/map.bin b/data/layouts/CeladonCity_Restaurant_Duplicate/map.bin new file mode 100644 index 000000000000..a5391187c7c6 --- /dev/null +++ b/data/layouts/CeladonCity_Restaurant_Duplicate/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeruleanCave_1F/border.bin b/data/layouts/CeruleanCave_1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/CeruleanCave_1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/CeruleanCave_1F/map.bin b/data/layouts/CeruleanCave_1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..33a82233782b1c28b0d818bd338c793b22607058 GIT binary patch literal 1840 zcmah~L2eU45X`CX`va_85|TrhC(O_66(aZ$#e1+|W66g^@(YqT02gCo3FL5C=L;kk z4nWt`v}b46fLdPJp6;6Jn(En!OhPQ>O5S&3Cd;@w*|XZs#_yTtTTLbB^4YC4ZsktC zxUpQe_NrwrFN(t~1_djSzjCY~E8tdI|IH0Grux~qO5W}G)>6tsUKS@=oEEG=J}WL2 zWiA(iiQ$d3maAPpuQIfg0(gxgZ9_aN1K=%W>cFIq{6;d0cwIhV_e*~GC;#k!3-C}k zIWr}JPz5%o+ zxQ}@K-Ozs}uQNPT(eRAXP*GBV-{0_Ze#F~4sEdklhKlsvZ(Fh6u?1(U$z14H#*;9Y zP~kem+xX=7nKb@E_qY%;rkaL_v$zW?CYKC~x$a{88m)cQ4v~2)WA&wKtp82*gRt(Y zpPhwyk|+yx4Zj6X9GIV`aSniI8elKm+w=!oI#oIW{yi<=Mh4wW-_kXvLDFVFUYaYz z1FE?|q62CScrmq{x)%i-o8|l=w@yx}~eykJTt}6BSKD={z zD>plStbmJ+ITYgA;cSd0`djqy@Gow+Wx#8~)Z(6i)aO+eziAj>X=P#xS7)} zXD((2T|%GHW&J07XS)LnH}kc2jTmPdF)Q2?q3b@DY0<{xn}bi=$&f6sX-#c=g7FM`0{WbPa75?|UmJjk#KB-R(=?{`MV#xpi literal 0 HcmV?d00001 diff --git a/data/layouts/CeruleanCave_2F/border.bin b/data/layouts/CeruleanCave_2F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/CeruleanCave_2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/CeruleanCave_2F/map.bin b/data/layouts/CeruleanCave_2F/map.bin new file mode 100644 index 000000000000..f2b9dcb9c9f0 --- /dev/null +++ b/data/layouts/CeruleanCave_2F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeruleanCave_B1F/border.bin b/data/layouts/CeruleanCave_B1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/CeruleanCave_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/CeruleanCave_B1F/map.bin b/data/layouts/CeruleanCave_B1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..f423b6e0e6e29ddda1bd81d98e3c00b290ef08cd GIT binary patch literal 1840 zcmb7Eu}&i~5Is>$?>``-I!FQg3I4O)Z9)o^O>yFqNEAduf(|733m`IIM~qKrUzc@&+(Q;;-fi46pUch zvSwqYhioSQzj*0C%^ADmr8x7f$#TN0$!ZiHgDg1^Q(Zj%Iqb+u?Y|H^c@&dep0ODt@)uI?z0eeEthg7 z36J*?AMwz2x3UO7^cZykMyd_<1`Cy3%Z>>>>>>>?0=>>>>>>>>>?0 0 00 00 00 00 0 00 00 00 00 00 00 0 0 00 00 00 00 00 00000000000000000000000000000000000 00 00 00 00 00 00 00 0000000000 00 00 00 00 00 00 00 000000000000000000 00 00 00 00 00 00 00 00 \ No newline at end of file diff --git a/data/layouts/CeruleanCity_BikeShop/border.bin b/data/layouts/CeruleanCity_BikeShop/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeruleanCity_BikeShop/map.bin b/data/layouts/CeruleanCity_BikeShop/map.bin new file mode 100644 index 000000000000..7bfc920825c9 --- /dev/null +++ b/data/layouts/CeruleanCity_BikeShop/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/CeruleanCity_Gym/border.bin b/data/layouts/CeruleanCity_Gym/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeruleanCity_Gym/map.bin b/data/layouts/CeruleanCity_Gym/map.bin new file mode 100644 index 000000000000..ee6d6516501d --- /dev/null +++ b/data/layouts/CeruleanCity_Gym/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222tuv \ No newline at end of file diff --git a/data/layouts/CeruleanCity_House1/border.bin b/data/layouts/CeruleanCity_House1/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeruleanCity_House1/map.bin b/data/layouts/CeruleanCity_House1/map.bin new file mode 100644 index 000000000000..83ebe0b15752 --- /dev/null +++ b/data/layouts/CeruleanCity_House1/map.bin @@ -0,0 +1 @@ +bcdjk1l111111112121V1 1 1 1 1 1 1 1 1 1^ 1 1 1 1#1$1$1$1%11 1 1 1 1+1&1()-1V1 1 1 1 1+1,101-1^ 1 1 1 131414141511 1?1G1O1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/CeruleanCity_House2/border.bin b/data/layouts/CeruleanCity_House2/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeruleanCity_House2/map.bin b/data/layouts/CeruleanCity_House2/map.bin new file mode 100644 index 000000000000..21a7d4178ab2 --- /dev/null +++ b/data/layouts/CeruleanCity_House2/map.bin @@ -0,0 +1 @@ +a2iH1I12222221#1$1$1$1$1%1221+12()2-12221+1212-1 12 1V131412414151222^ 1?1G1O122 1 \ No newline at end of file diff --git a/data/layouts/CeruleanCity_House5/border.bin b/data/layouts/CeruleanCity_House5/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CeruleanCity_House5/map.bin b/data/layouts/CeruleanCity_House5/map.bin new file mode 100644 index 000000000000..1f06133b3e3a --- /dev/null +++ b/data/layouts/CeruleanCity_House5/map.bin @@ -0,0 +1 @@ +aaii2121211111M1N1M1N11 1 1 1 1 1 1 1ef 11.1 1 1 1 1 1o1mn 16 1 1 1 1 1 1ef 11.1 1 1 1 1 1 1mng16 1?1G1O1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/CinnabarIsland/border.bin b/data/layouts/CinnabarIsland/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/CinnabarIsland/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/CinnabarIsland/map.bin b/data/layouts/CinnabarIsland/map.bin new file mode 100644 index 000000000000..7631ea1d8a49 --- /dev/null +++ b/data/layouts/CinnabarIsland/map.bin @@ -0,0 +1 @@ +++,003141)++,10 0031ABBBBC)++,00 0 0 0IJJJJK*++,20000PQRSTV*++,00222000 0 0 0 0X1Y1Z[\*++,000000000000000 00h++,222222200000000000++,{1|1}1~110 00 00 0*++,HIJK(0)0*0+000*++,PQRS012300*++,000 0220XYZ[89:;00*++,0000000`ab@Abc00*++0##!000000000000000*+++++,000000000000000*+++++,000000000000000*++++0###############1++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/data/layouts/CinnabarIsland_Gym/border.bin b/data/layouts/CinnabarIsland_Gym/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CinnabarIsland_Gym/map.bin b/data/layouts/CinnabarIsland_Gym/map.bin new file mode 100644 index 000000000000..39cd83f5a41f --- /dev/null +++ b/data/layouts/CinnabarIsland_Gym/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222tuv \ No newline at end of file diff --git a/data/layouts/CinnabarIsland_PokemonLab_Entrance/border.bin b/data/layouts/CinnabarIsland_PokemonLab_Entrance/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CinnabarIsland_PokemonLab_Entrance/map.bin b/data/layouts/CinnabarIsland_PokemonLab_Entrance/map.bin new file mode 100644 index 000000000000..39ca3b4d708b --- /dev/null +++ b/data/layouts/CinnabarIsland_PokemonLab_Entrance/map.bin @@ -0,0 +1 @@ +hiiiijpqqr0x0y0y0y0y0y0z022000000020200jhijhijhij200200rpq2rpq2rpq2r20022000z0x0y0y0y0y0z0x0y0y0y0y0z0x0y0y0y0y0z00000000000000000000000000002200000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/data/layouts/CinnabarIsland_PokemonLab_ExperimentRoom/border.bin b/data/layouts/CinnabarIsland_PokemonLab_ExperimentRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CinnabarIsland_PokemonLab_ExperimentRoom/map.bin b/data/layouts/CinnabarIsland_PokemonLab_ExperimentRoom/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..1dbda8fd5ba6e2aa831d942dac349d389c982ee6 GIT binary patch literal 330 zcmY+8y-q?=5QHg)-J78JLxW%e+NjlL_l>B)Mxaq?;8=-`HBZ1RNQd=(f=i$mDz*3L zoP_Jae92^ICp+0Tz#UZiglinN!Y?$VYjn{<4-Ibe8Aq-2oL;GqJ1N<{T-c>uS=4h| z(uxK$fs>+BF`Sb?Q-aGlyZ~ajx4}Q+{&@x?Us<$X`>bGxn#2ebP zkmk*)4v}orH68o5kjCbzOucvVP9OBSz0I5BSD6MD8g6qQWh_sBE^HG-YN+FM$0zs& Df^k*z literal 0 HcmV?d00001 diff --git a/data/layouts/CinnabarIsland_PokemonLab_Lounge/border.bin b/data/layouts/CinnabarIsland_PokemonLab_Lounge/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CinnabarIsland_PokemonLab_Lounge/map.bin b/data/layouts/CinnabarIsland_PokemonLab_Lounge/map.bin new file mode 100644 index 000000000000..a84c9d1abfb4 --- /dev/null +++ b/data/layouts/CinnabarIsland_PokemonLab_Lounge/map.bin @@ -0,0 +1,3 @@ +hkli$ikljpstq%qstrx0 3 +3{0|0y0y0y0y0y0{0|0 3 +3z0000022222220000200022666220002200022220002200022220002000022222220000200000000000000600000000000 \ No newline at end of file diff --git a/data/layouts/CinnabarIsland_PokemonLab_ResearchRoom/border.bin b/data/layouts/CinnabarIsland_PokemonLab_ResearchRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/CinnabarIsland_PokemonLab_ResearchRoom/map.bin b/data/layouts/CinnabarIsland_PokemonLab_ResearchRoom/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..6032e183ff7a5616f016419835bc888789ac875b GIT binary patch literal 330 zcmZvXOA5k35JXjqnW#5V!KK?GxsfY_-=Ic=Ka!P-;Kn<6n4HMZ!fBEr5km2r8meh( zMu7G)#SDI~F(!Daw-Oc@BETAWsIL;_^3y2WwoZBr)vctrP)^Uh@cQ=y N2ZcK5qE~u5_yHETU0MJD literal 0 HcmV?d00001 diff --git a/data/layouts/DiglettsCave_B1F/border.bin b/data/layouts/DiglettsCave_B1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/DiglettsCave_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/DiglettsCave_B1F/map.bin b/data/layouts/DiglettsCave_B1F/map.bin new file mode 100644 index 000000000000..d29e66e00eac --- /dev/null +++ b/data/layouts/DiglettsCave_B1F/map.bin @@ -0,0 +1 @@ +2222226666666666666666222222226622222266662222222662222222662222266222222662222222222662266226662222222222222222222222226622222222222266222222222222222222222222222222222222222222222222222222222222222222222222222222222222222666666666622222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222666666666666666666666666666666666666666666666666666666666666666666666666 \ No newline at end of file diff --git a/data/layouts/DiglettsCave_NorthEntrance/border.bin b/data/layouts/DiglettsCave_NorthEntrance/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/DiglettsCave_NorthEntrance/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/DiglettsCave_NorthEntrance/map.bin b/data/layouts/DiglettsCave_NorthEntrance/map.bin new file mode 100644 index 000000000000..39007d306616 --- /dev/null +++ b/data/layouts/DiglettsCave_NorthEntrance/map.bin @@ -0,0 +1 @@ +6666666666666623322266332222662222226632222266622222266666 \ No newline at end of file diff --git a/data/layouts/DiglettsCave_SouthEntrance/border.bin b/data/layouts/DiglettsCave_SouthEntrance/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/DiglettsCave_SouthEntrance/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/DiglettsCave_SouthEntrance/map.bin b/data/layouts/DiglettsCave_SouthEntrance/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..9d2c75793dd6122e9233f770f1431c18d9dbf9b8 GIT binary patch literal 160 zcmbQpHW3KVgGmqz0%x;5gu|I^bHJjv*cgoe7%>{N7_%BT8chJ}nZ(8nU}C*-o&XWIF|*0 literal 0 HcmV?d00001 diff --git a/data/layouts/Entrance_1F/border.bin b/data/layouts/Entrance_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/Entrance_1F/map.bin b/data/layouts/Entrance_1F/map.bin new file mode 100644 index 000000000000..e39d586e9c5f --- /dev/null +++ b/data/layouts/Entrance_1F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/Entrance_2F/border.bin b/data/layouts/Entrance_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/Entrance_2F/map.bin b/data/layouts/Entrance_2F/map.bin new file mode 100644 index 000000000000..bfac6e348c8d --- /dev/null +++ b/data/layouts/Entrance_2F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222226622 \ No newline at end of file diff --git a/data/layouts/EverGrandeCity_HallOfFame_Frlg/border.bin b/data/layouts/EverGrandeCity_HallOfFame_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..f496f458ecf2897514c7ef858e657bf062c57506 GIT binary patch literal 8 LcmZQ%U<5+|02}}X literal 0 HcmV?d00001 diff --git a/data/layouts/EverGrandeCity_HallOfFame_Frlg/map.bin b/data/layouts/EverGrandeCity_HallOfFame_Frlg/map.bin new file mode 100644 index 000000000000..1df9e480472f --- /dev/null +++ b/data/layouts/EverGrandeCity_HallOfFame_Frlg/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222262226 \ No newline at end of file diff --git a/data/layouts/FiveIsland/border.bin b/data/layouts/FiveIsland/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/FiveIsland/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FiveIsland/map.bin b/data/layouts/FiveIsland/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..98fa499f86cd7d33a50cb8b7bac2e910f15f4a9d GIT binary patch literal 960 zcmZWnNlz3(6h?UU^^9Jo#tfiD4dFsE9J<>-!E$lAs9eNkc36-NpDpvYZVy}IYW!Zc)9?g|_UfLW3o~Ku$cEyP z{rlcKKbbIVPNYXYiAUzU-a7q7Dup8k{j@@og}>r4NvS(N_eiinl7+un<8ay3>($Tm z7pcDnOSYf>214CxZ@}rFpA-GrRN#9Q>NbPd(VJ*B;=liq$7RTy^j#|Iqxd*Ji6t)C z-7Q^3OO?-caP)0{4P}e>c$eo0XXn9+{GQp7fTJ6zVBO*iHsPI0-#XsyAeb$kV3p>$Vfns_8l<(1Y>>uZP7im5K@`#>FKYlzN)UO-eG;{q!Zta`KG_qU$Bze)Q)7l9p8z^ zGD{*G@f*HO>*6X9l;vo};W>jQ>Qbw^`X%}rIo(lO6*~+hwLqr!Tl77G?xm=k_by~D zzb|XVJAZ@)kji>CKZ}ygW=Ym|Pdob={hQ#OKNZ#s`5QyLl^u{L=0>N?M?J;3knfqD zY&$zNL?2y?U(6wUMt4v@xx-GVJ+*i92M)g|yh1+YK8*(>S^z%D>eujrg;kN|F7Wk< zzoSz8%ZxZPosf^70Qgk%;c~q9SM#B4rKO z$C|%7dOV`J>$KzB&}zQ<8X*?H%0I-@hk>lBZqEsL@E3f{j7Kc17IdHLuV=j+6@ZL~ z2R@^LWZiiF@E10?$H!<8RG4}|{y?|0BY99YBgY4vU{8@{{mfC|aSGsrXF5XAkD63r zob(iYgwzW8fC)KiToI+A9b9y&5Kkm60FQWRR1qH^eZ+Imyl`?Tym-#=5_o!0<}};+ zYawl^o4VB5uBpYyeDYxxhw)cl+AsD^Ge+hs9$69gEstk4&vj=y;H!A;6FwujL#zK* zPQJibvq*JgWc9D+_XMx;DQ8iLF28GhU}G%0F7wy#V6@2wX!?8g9(p#qh(0wYv>3}9__f3f za9YffZ>(~~V?8PA6DFMDONhrAk6nD8nJu$Z+pbCVxqSz2wk2PmSM;;@wHmFgnYA+P zBMLJ6^4ADx6}r?rjS zU3u|#WVUICnC{Nn-Cz~BBN51-zSO#AhHBx6Rm7WFhBrLu4P?ac#3Bw@#mw))jQt_} p4y@Ly>d?JlgKmWmr}wI2`}Wwa9Z&41wm<2FdQbXZdes|r{|9`-LgfGe literal 0 HcmV?d00001 diff --git a/data/layouts/FiveIsland_ResortGorgeous/border.bin b/data/layouts/FiveIsland_ResortGorgeous/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/FiveIsland_ResortGorgeous/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FiveIsland_ResortGorgeous/map.bin b/data/layouts/FiveIsland_ResortGorgeous/map.bin new file mode 100644 index 000000000000..aaf0ec4dbc39 --- /dev/null +++ b/data/layouts/FiveIsland_ResortGorgeous/map.bin @@ -0,0 +1 @@ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11++++++++++++++ 1 1%11111111111111111111+++++++++++++++++++++++++++++++1111011++++++++++++++++++ 1 1 1 11+++++++++ 1 1%1111 000011+++++++++++++ 1%11+++++++++1111110000&'11+++++++++++++++11q&11++++++ 1 1%1111110000  11++++++++++++ 1 1 1 11++++++1-1|.11+++++ 1%1111111110 00000 00i11+++++++++ 1%1&11++++++1-1111++++++111-1111111100000000000 00111+++++++++1squ&11++++1111+++++++++11-11111110000000000111.11+++++++++1squ11++++++++++++++++++++111-111111111111111.111++++++++++1{|}11+++++++++++++++++++++++1111111111111111++++++++++++1y0y.11+++++++++++++++++++++++++++++++++++++++++++++++++1-111111+++++++++++++++++++++++++++++++++++++++++++++++++111111++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/data/layouts/FiveIsland_ResortGorgeous_House/border.bin b/data/layouts/FiveIsland_ResortGorgeous_House/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/FiveIsland_ResortGorgeous_House/map.bin b/data/layouts/FiveIsland_ResortGorgeous_House/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..f313d50ebb653f22b4320355bac1946ed506cdb0 GIT binary patch literal 198 zcmYj}yAFat6huYu&Pr*kcD@P&$pF$?T8W=!=@$_y!Y}ziV literal 0 HcmV?d00001 diff --git a/data/layouts/FiveIsland_RocketWarehouse/map.bin b/data/layouts/FiveIsland_RocketWarehouse/map.bin new file mode 100644 index 000000000000..aef63eaf1ace --- /dev/null +++ b/data/layouts/FiveIsland_RocketWarehouse/map.bin @@ -0,0 +1 @@ +2222222223323322222222222222222222222222222222222+3-3222222222223222232232222222222222222222222222222223 32222222222222(3*33322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 32222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233322 \ No newline at end of file diff --git a/data/layouts/FiveIsland_WaterLabyrinth/border.bin b/data/layouts/FiveIsland_WaterLabyrinth/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/FiveIsland_WaterLabyrinth/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FiveIsland_WaterLabyrinth/map.bin b/data/layouts/FiveIsland_WaterLabyrinth/map.bin new file mode 100644 index 000000000000..66a91da605e8 --- /dev/null +++ b/data/layouts/FiveIsland_WaterLabyrinth/map.bin @@ -0,0 +1 @@ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++(213131313131313141)++++++++++++++++++++++++++++++++++++++,0 00000000*++++++++++++++++++++++++++++++,000010010*+++++++++++++++++++++++++++++++++0$000010003141)++++++++++++++++++++++++++++++++++++++++0#$00010000*+++++++++++++++++++++++++++++++++++++0$0 00100 0*++++++++++++++++++++++++++++++++++++++++++,0000000*++++++++++++++++++++++++++++++++,0 000 00 0*+++++++++++++++++++++++++0#######1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/data/layouts/FortreeCity_DecorationShop_Frlg/border.bin b/data/layouts/FortreeCity_DecorationShop_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/FortreeCity_DecorationShop_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FortreeCity_DecorationShop_Frlg/map.bin b/data/layouts/FortreeCity_DecorationShop_Frlg/map.bin new file mode 100644 index 000000000000..6ca8b4e610db --- /dev/null +++ b/data/layouts/FortreeCity_DecorationShop_Frlg/map.bin @@ -0,0 +1 @@ +333333333333733337 \ No newline at end of file diff --git a/data/layouts/FortreeCity_House1_Frlg/border.bin b/data/layouts/FortreeCity_House1_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/FortreeCity_House1_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FortreeCity_House1_Frlg/map.bin b/data/layouts/FortreeCity_House1_Frlg/map.bin new file mode 100644 index 000000000000..5a3ac8cb6bff --- /dev/null +++ b/data/layouts/FortreeCity_House1_Frlg/map.bin @@ -0,0 +1 @@ +33333333333333333333733337 \ No newline at end of file diff --git a/data/layouts/FortreeCity_House2_Frlg/border.bin b/data/layouts/FortreeCity_House2_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/FortreeCity_House2_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FortreeCity_House2_Frlg/map.bin b/data/layouts/FortreeCity_House2_Frlg/map.bin new file mode 100644 index 000000000000..3fbcd604300f --- /dev/null +++ b/data/layouts/FortreeCity_House2_Frlg/map.bin @@ -0,0 +1 @@ +37733333333333333333733337 \ No newline at end of file diff --git a/data/layouts/FourIsland/border.bin b/data/layouts/FourIsland/border.bin new file mode 100644 index 000000000000..75f2c916c55e --- /dev/null +++ b/data/layouts/FourIsland/border.bin @@ -0,0 +1 @@ +vvvv \ No newline at end of file diff --git a/data/layouts/FourIsland/map.bin b/data/layouts/FourIsland/map.bin new file mode 100644 index 000000000000..dd45ba9bd48f --- /dev/null +++ b/data/layouts/FourIsland/map.bin @@ -0,0 +1 @@ +vOssqsqq{|||||qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvOssqsqqqqqqqq{|||||||||||||qqqqqqqqqqqqqqqqqqqvOssq{||||qqqqqqqqqqqqqqqqqsqqqqqqqqqqqqqqqqqqqvOssqqqqqq{|||||||||||||||qsqqqqqqqqqqqqqqqqqqqvOs{|||yyyyyyyyyyyyyyyqsqsqqqqqqqqqqqqqqqqqqqvO{||ypqsqsqqqqqqqqqqqqqqqqqqqvWeeG11110 0 00pqsqsqqqqqqqqqqqqqqqqqqqvsssO1##11100 00####pqsq{||qqqqqqqqqqqqqqqqvvosO100111 00110000pq{qqq{|||||||||||||qqvvvsO10 00 0 0 00111000pqq{||qqqqqqqqqqqqqqsqqvvvsO1$% 02222 00111000pqqqqq{||||||||||||qsqqDEvsO1y 000|||||||||||sqsqqLMvsO11100 0000000||||yy0yyssqsqqvvvsO111 0 00u0000 0pssqsqqvvvsO1110 00 00 000 00&%$'0u00000pssqsqqvvvsO111000000 0 00 0 00 00 0 00 00 0usssqsqqvvvoO1110 00 0000{1|1}1~1100000000usssqsqqvvvvO1110000000HIJK 00 0usssqsqqvvDEO1110 00 00PQRS000usssqsqqvvLMO1110000&'XYZ[ 00 0u313131313141sssq{qvvvvO1110 00 0000`ab0003sssqqsqvvvvO111000 00 00 000003131313131 00 0&'0usssqqsqvvvvO1110 0000000000 00 00 0000000a1usssqqsqvvDEO111000yyyy0 00(0)0*0+02222200ir313131pssqqsqvvLMO1111111111100001230 00 0 0000r0 00pssqqsqvvvvO111111111110 0089:;00000000r 00 0pssqqsqvvvvO11111111111000@Abc0 00 0 0000r000pssqq{vDEvWkkkk111kkG10 00 00 00 00 00 00 0y00yyz0 00ps{qqsvLMvsssss222ssO100000000000000r00110 0110psqsqqsvvvvvosO100 00000000000 0r0 01101110psqsqqsvvvvvvsO1yyy 0 0r0000011 00psqsqq{vvvvDEsO11111&%$%$%$'hiqsqqqvvvvLMsWkkG11yyyhiiiqqqqqqqqqqqqqqsqqqvvvvvvssssO111111sqqqqqqqqqqqqqqqqqqsqqqvvvvvvossssssssssO111111sqqqqqqqqqqqqqqqqqq{|||vvvvvvvDEvvvvvvvoWkkG111{||||||||||qqqqqqqqqqqvvvvvvvLMvvvDEvvvvvoWkkG||||||||||sqqqqqqqqqqqvvvvvvvvvvvvLMvvvDEvsssWeeeeeeeeeeGs{|||||||||||vvvvvvvvvvvvvvvvvLMvvvosssss^_ssssO{||||||||||||vvvvvvvvvvvvvvvvvvvvvvvvvvvvLMvvosWeeeeeeeeeeeee \ No newline at end of file diff --git a/data/layouts/FourIsland_IcefallCave_1F/border.bin b/data/layouts/FourIsland_IcefallCave_1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/FourIsland_IcefallCave_1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FourIsland_IcefallCave_1F/map.bin b/data/layouts/FourIsland_IcefallCave_1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..22cfdf42ef8c8dc13e74779425066691458b28e3 GIT binary patch literal 800 zcmY+Cu}%U(5QdH5-23bn+p2Vi4j~~iLDWJY(_LnT8@gi(}CGHZSH=mOJaeu%=r6?HuPG-Jd%#q3l<1_7I3#}rPgZ5 z`6E-%$EL2~pU{wCSQkfdUuwzRh&i}bb&)xoWh92hlv}D_;Tp7Sz}13?B8q827aR+! zn5p>XHT+`EHL1kz+krK_XU4J>gMCAl(_7pfvj*|N&#{}Z|Eu60>6xC$a`4`9{U+&6 zn9IH^@$1qjyIZ>k`*rDqGyeagUry(FU+jp7w=_^<> l&fgdO-*WIuZ}cv+!n`msyW)x2;Z~J{Ecc)AUloJd`~gps12F&q literal 0 HcmV?d00001 diff --git a/data/layouts/FourIsland_IcefallCave_B1F/border.bin b/data/layouts/FourIsland_IcefallCave_B1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/FourIsland_IcefallCave_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FourIsland_IcefallCave_B1F/map.bin b/data/layouts/FourIsland_IcefallCave_B1F/map.bin new file mode 100644 index 000000000000..b3db8d893686 --- /dev/null +++ b/data/layouts/FourIsland_IcefallCave_B1F/map.bin @@ -0,0 +1 @@ +K3K3K3?_22222J3K3OK3K3K3K3_22J3K3O?K3K3K3_22^K3K3OK3K3K3_22s^K3K3K3K3K3K3_s22222BK3K3K3K3K3K3L3222222BK3?K3K3K3K3_s22222^K3K3K3GK3K3L3222222^K3K3?K3?K3D22222^K3K3K3K3K3K3_222222^K3K3K3K3K3K3_222^K3HIK3K3K3L322222R\tS3S3\TVU22222222VUU22222VU222VVUUVVUV \ No newline at end of file diff --git a/data/layouts/FourIsland_IcefallCave_Back/border.bin b/data/layouts/FourIsland_IcefallCave_Back/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/FourIsland_IcefallCave_Back/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FourIsland_IcefallCave_Back/map.bin b/data/layouts/FourIsland_IcefallCave_Back/map.bin new file mode 100644 index 000000000000..aa44dd119709 --- /dev/null +++ b/data/layouts/FourIsland_IcefallCave_Back/map.bin @@ -0,0 +1 @@ +++++++++++++++++++++++++++++++++++++   +++++++++++++   U+++++++++++V)+++++(*+++,U ++++++++,)++++++++++ VU*+++++++++(VU*+++++++++,V*+++++++++,*+++++++++,*+++++++++,U +++++++ VUgj3k3k3k3k3k3l3fV2222222p222222U222222qVUor22nVU22qV222222222p22UVUV \ No newline at end of file diff --git a/data/layouts/FourIsland_IcefallCave_Entrance/border.bin b/data/layouts/FourIsland_IcefallCave_Entrance/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/FourIsland_IcefallCave_Entrance/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/FourIsland_IcefallCave_Entrance/map.bin b/data/layouts/FourIsland_IcefallCave_Entrance/map.bin new file mode 100644 index 000000000000..b37ddd8008b9 --- /dev/null +++ b/data/layouts/FourIsland_IcefallCave_Entrance/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222>2222222#"222'''''/////////////////////////77777>22222>22222222======222222===222222===222222===UV===UV=UV==UV \ No newline at end of file diff --git a/data/layouts/FourIsland_LoreleisHouse/border.bin b/data/layouts/FourIsland_LoreleisHouse/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/FourIsland_LoreleisHouse/map.bin b/data/layouts/FourIsland_LoreleisHouse/map.bin new file mode 100644 index 000000000000..5ce78023de34 --- /dev/null +++ b/data/layouts/FourIsland_LoreleisHouse/map.bin @@ -0,0 +1 @@ +  ` 5 h22222222222B222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/FourIsland_PokemonDayCare/border.bin b/data/layouts/FourIsland_PokemonDayCare/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/FourIsland_PokemonDayCare/map.bin b/data/layouts/FourIsland_PokemonDayCare/map.bin new file mode 100644 index 000000000000..d7207d8ff0c6 --- /dev/null +++ b/data/layouts/FourIsland_PokemonDayCare/map.bin @@ -0,0 +1 @@ +b33333222222    !32222222"32232 3 32222222 3 322222222222222222222222 \ No newline at end of file diff --git a/data/layouts/FuchsiaCity/border.bin b/data/layouts/FuchsiaCity/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/FuchsiaCity/map.bin b/data/layouts/FuchsiaCity/map.bin new file mode 100644 index 000000000000..e1517ef1d9ef --- /dev/null +++ b/data/layouts/FuchsiaCity/map.bin @@ -0,0 +1 @@ +$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%$%0000000000000000000000 00000000000000000002222222222222200 0 02020000022222222222220000000000 000000000000000 000 000 0000000000000000034445000000000000000000000000000000088888900000000000000000000000000000000000000000000000000000 00 00(0)0*0+00000000000002222220222222222000000000000123000000000000 00 0089:;0000000000000 00000000 0000$'0000000@Abc00000000000000000000000000000000000000000000000 0 0000222222222000000000000000000000000000000000000000000000 000000000000000000000 00000000000000&%0000100000000 0 00001000000000000000000000003444445 00 0000000000000000000000000000 000006666666666000010000000000000000000000100000000000000000000100066666666670 0000 000000000000000000000000000000 00?00 00 0000000000000000000000000000000?0 00 0hiiiiiiiiiiiiiiiiiiiiiiij000 0031313131313131?0000pqqqqqqqqqqqqqqqqqqr0000000 000000 00 0pqHIJKr00222222220000xyABBBBBCPQRSz000 00 00IJJJJJKXYZ[00a100000`1PQRSTUV`ab00i0000 0hX1Y1Z[\]1^10000000000000000000000000000 00 00000000000100000000000000000000 00 0000010100000001010000000 0 00 00 00 00 00 00 0000000hiiiiij0000000000000000000 000000000pklllmr000 00 00 00 00000000000psqqqur0000000000hiiiiij0000000000psqqqur0 00 00 00 00 0pklllmrpsqqqur0000000000psqqqur \ No newline at end of file diff --git a/data/layouts/FuchsiaCity_Gym/border.bin b/data/layouts/FuchsiaCity_Gym/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/FuchsiaCity_Gym/map.bin b/data/layouts/FuchsiaCity_Gym/map.bin new file mode 100644 index 000000000000..390ee14be029 --- /dev/null +++ b/data/layouts/FuchsiaCity_Gym/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/FuchsiaCity_House2/border.bin b/data/layouts/FuchsiaCity_House2/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/FuchsiaCity_House2/map.bin b/data/layouts/FuchsiaCity_House2/map.bin new file mode 100644 index 000000000000..83ebe0b15752 --- /dev/null +++ b/data/layouts/FuchsiaCity_House2/map.bin @@ -0,0 +1 @@ +bcdjk1l111111112121V1 1 1 1 1 1 1 1 1 1^ 1 1 1 1#1$1$1$1%11 1 1 1 1+1&1()-1V1 1 1 1 1+1,101-1^ 1 1 1 131414141511 1?1G1O1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/FuchsiaCity_SafariZone_Entrance/border.bin b/data/layouts/FuchsiaCity_SafariZone_Entrance/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/FuchsiaCity_SafariZone_Entrance/map.bin b/data/layouts/FuchsiaCity_SafariZone_Entrance/map.bin new file mode 100644 index 000000000000..e84271730c99 --- /dev/null +++ b/data/layouts/FuchsiaCity_SafariZone_Entrance/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/FuchsiaCity_SafariZone_Office/border.bin b/data/layouts/FuchsiaCity_SafariZone_Office/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/FuchsiaCity_SafariZone_Office/map.bin b/data/layouts/FuchsiaCity_SafariZone_Office/map.bin new file mode 100644 index 000000000000..d18ddbd61749 --- /dev/null +++ b/data/layouts/FuchsiaCity_SafariZone_Office/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/FuchsiaCity_WardensHouse/border.bin b/data/layouts/FuchsiaCity_WardensHouse/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/FuchsiaCity_WardensHouse/map.bin b/data/layouts/FuchsiaCity_WardensHouse/map.bin new file mode 100644 index 000000000000..4efd7d891bf9 --- /dev/null +++ b/data/layouts/FuchsiaCity_WardensHouse/map.bin @@ -0,0 +1 @@ +M1N1M1N11111111111 1 1 12222 1 1222rf 1#1%1 1zn 131222251 11s1 1 1 1 1 1 1 1 1 11111 1 1 1 1 1 1 1 1 1 1 1 1V1 1 1 1 1 1 1 1 1 1 1 1U1^ 1 1 1 1?1G1O1 1 1 1 1] \ No newline at end of file diff --git a/data/layouts/House1_Frlg/border.bin b/data/layouts/House1_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/House1_Frlg/map.bin b/data/layouts/House1_Frlg/map.bin new file mode 100644 index 000000000000..7fb8f8319113 --- /dev/null +++ b/data/layouts/House1_Frlg/map.bin @@ -0,0 +1 @@ +aapq5iixyH1I11111111111 1 1#1$1$1$1$1%1 1 11 1 1+1&1()'1-1 1 11 1 1+1&101'1-1 1 1V1 1 1314141414151 1U1^ 1 1?1G1O1 1 1 1 1] \ No newline at end of file diff --git a/data/layouts/House2_Frlg/border.bin b/data/layouts/House2_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/House2_Frlg/map.bin b/data/layouts/House2_Frlg/map.bin new file mode 100644 index 000000000000..2f2d83996079 --- /dev/null +++ b/data/layouts/House2_Frlg/map.bin @@ -0,0 +1 @@ +  ./ -!" 1267(5)*(90:0>0?0 0=0 0 0 0 0 0 000C0D0D0D0D0F000 000S0K0LMN0V000 000S0K0TUN0V000W000[0\0\0\0\0^00G0_000000000O44444444 \ No newline at end of file diff --git a/data/layouts/House3_Frlg/border.bin b/data/layouts/House3_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/House3_Frlg/map.bin b/data/layouts/House3_Frlg/map.bin new file mode 100644 index 000000000000..73c6abf89d2f --- /dev/null +++ b/data/layouts/House3_Frlg/map.bin @@ -0,0 +1 @@ +"  89*!@A211111111H1I11V1 1 1 1 1 1 1 1 1 1 1^ 1 1 1o1efg1 1 1 11 1 1 1o1mng1 1 1 1V1 1 1 1 1 1 1 1 1 1 1^ 1 1?1G1O1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/House4_Frlg/border.bin b/data/layouts/House4_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/House4_Frlg/map.bin b/data/layouts/House4_Frlg/map.bin new file mode 100644 index 000000000000..f74c83441dca --- /dev/null +++ b/data/layouts/House4_Frlg/map.bin @@ -0,0 +1 @@ +  `` h h111111111111 1 1 1 1 1 1 1 1 1 1V1 1 1 1o1efg1 1 1 1^ 1 1 1o1mng1 1 1 1V1 1 1 1 1 1 1 1 1 1 1^ 1?1G1O1 1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/House5/border.bin b/data/layouts/House5/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/House5/map.bin b/data/layouts/House5/map.bin new file mode 100644 index 000000000000..4daf805f737f --- /dev/null +++ b/data/layouts/House5/map.bin @@ -0,0 +1 @@ +aapqi5ixy000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/data/layouts/IndigoPlateau_Exterior/border.bin b/data/layouts/IndigoPlateau_Exterior/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/IndigoPlateau_Exterior/map.bin b/data/layouts/IndigoPlateau_Exterior/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..2bfc01f42e6df9548d7b5c467cee701393985c57 GIT binary patch literal 960 zcmb7>NlwE+5JfRms$wR^kN|=NHXydG@^Lstgjit?0IYxmFaOW)Ag4{8 zl+Mr6ExL4vJ=9Bm+FiQGZc6W;qgV9k4F@St1??Wa&M5xyZIJpACLKjPx%0&*$dzDrcc$Lp5Yd6 zYn`LvB^#MDLl2;ihkT?}Z}9_2PKfw1y$sj5!@Io4Hh!gFT~^o)5v&x Ie{&=L1t_n}zyJUM literal 0 HcmV?d00001 diff --git a/data/layouts/IndigoPlateau_PokemonCenter_1F/border.bin b/data/layouts/IndigoPlateau_PokemonCenter_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/IndigoPlateau_PokemonCenter_1F/map.bin b/data/layouts/IndigoPlateau_PokemonCenter_1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..9a9319f8e509361c55721d38a50a26eb67420fa3 GIT binary patch literal 900 zcmaiz*-pYh6o!E`|L_dzJE(s}jfxr`1)ro?6_vQgeP82B+yG5n61T)PdZ%}K$pdgn z;!GzBRiruTnP%GWoPT=$F2Y7gP?(}lgoKTC1dZ~sfds;$Ni>@+A}kU}dJ=o=WK`TT zBcocbX_oI0G>&P>=w%=Kox66^i-@zvv^dNWjyi;2coA7NiW^RGnlldJ^Xw60tt6B( z9ez>o(Iw6liV2_DDjLc%S)92Dzeu7@&c#MIdStfIC9iQz$b5%;Ij@-fsuw?+l(IB8 zv4w36U=TalMbt=O9t(1A4|tUG%5fHR_&$YN&$*8S9Abza<`GgDqn=iVPl4w^nt85b z%|%!|!KsW%C%ZMPdNElw?^0!P#c_agfeN=~i!Xeo6)09!>;S#5b*rpuzu`S%Mchom x0h-XdRnAG`gP(tT6da(5oTFQ3i%Y-Gpx(LU6|YO|t7pq4yV literal 0 HcmV?d00001 diff --git a/data/layouts/LavenderTown_VolunteerPokemonHouse/map.bin b/data/layouts/LavenderTown_VolunteerPokemonHouse/map.bin new file mode 100644 index 000000000000..3e5dc6ddab29 --- /dev/null +++ b/data/layouts/LavenderTown_VolunteerPokemonHouse/map.bin @@ -0,0 +1 @@ +#$%&5222(3)32 32222222222222222233222222332222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/LittlerootTown_MaysHouse_2F_Frlg/border.bin b/data/layouts/LittlerootTown_MaysHouse_2F_Frlg/border.bin new file mode 100644 index 000000000000..c1b82435c8c5 --- /dev/null +++ b/data/layouts/LittlerootTown_MaysHouse_2F_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/LittlerootTown_MaysHouse_2F_Frlg/map.bin b/data/layouts/LittlerootTown_MaysHouse_2F_Frlg/map.bin new file mode 100644 index 000000000000..b512103321c8 --- /dev/null +++ b/data/layouts/LittlerootTown_MaysHouse_2F_Frlg/map.bin @@ -0,0 +1,2 @@ +  +'VTPTQ/eUXYE2222]2g22`2a2222222222222222222222BB2222222222222222 \ No newline at end of file diff --git a/data/layouts/Mart_Frlg/border.bin b/data/layouts/Mart_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/Mart_Frlg/map.bin b/data/layouts/Mart_Frlg/map.bin new file mode 100644 index 000000000000..dee537e49385 --- /dev/null +++ b/data/layouts/Mart_Frlg/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/MossdeepCity_EReaderTrainerHouse_1F/border.bin b/data/layouts/MossdeepCity_EReaderTrainerHouse_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..f496f458ecf2897514c7ef858e657bf062c57506 GIT binary patch literal 8 LcmZQ%U<5+|02}}X literal 0 HcmV?d00001 diff --git a/data/layouts/MossdeepCity_EReaderTrainerHouse_1F/map.bin b/data/layouts/MossdeepCity_EReaderTrainerHouse_1F/map.bin new file mode 100644 index 000000000000..bad63f412213 --- /dev/null +++ b/data/layouts/MossdeepCity_EReaderTrainerHouse_1F/map.bin @@ -0,0 +1,2 @@ +0no +2  hvw22$2$2$2$2$282p2~2292#2#2#2#2#2#2#2#2#2#292#2#2#2+2JK,2#2#2#292#2#2#2+2RS,2#2#2#292#2#2#2#2#2#2#2#2"2"292#2#2 #2#2#2#2** \ No newline at end of file diff --git a/data/layouts/MossdeepCity_EReaderTrainerHouse_2F/border.bin b/data/layouts/MossdeepCity_EReaderTrainerHouse_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..f496f458ecf2897514c7ef858e657bf062c57506 GIT binary patch literal 8 LcmZQ%U<5+|02}}X literal 0 HcmV?d00001 diff --git a/data/layouts/MossdeepCity_EReaderTrainerHouse_2F/map.bin b/data/layouts/MossdeepCity_EReaderTrainerHouse_2F/map.bin new file mode 100644 index 000000000000..399d05705f5c --- /dev/null +++ b/data/layouts/MossdeepCity_EReaderTrainerHouse_2F/map.bin @@ -0,0 +1,2 @@ +  +        6$2$2$2$2$2$2$2$2$2$2692#2#2#2#2#2#2#2#2#2#2#292#2#2#252626272#2#2#2#292#2#2#2=2>2>2?2#2#2#2#292#2#2#2E2F2F2G2#2#2#2#22#2#2#2#2#2#2#2#2#2#2"2#2#2#2#2#2#2#2#2#2#2* \ No newline at end of file diff --git a/data/layouts/MtEmber_Exterior/border.bin b/data/layouts/MtEmber_Exterior/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9C5SSSQQSQSQ[\\\\\\\\]QUQUQQUUQUQ4]QUQUQUQUQQ[5QSQSQ[5QSS36SSSQQSQ[\\\\\\\\\\\\]QUQQUUQUQUQ4]QUQUQUQ5QSQSQ[5QSQSS36SSSQQ[\\\\533W13334\\\\]QQUUQUQUQUQ4]QUQUQSQSQ[5QSQSQSS36SS>YYYYY5QS33333W3UQQQQQQQUUQUQUQUQUQ4]QUQ[5[5QSQSQSQSS36SS3333336QS3W33333U4YYYYYY]UQUQUQUQUQUQ4]QQSQSQSQSQ[5SS36SS333333>5S33333W3U733 00 034]QUQUQUQUQUQUQ4QSQSQSQ[5QSSS36SS33333336[\\534\\]733}3}3}33UQQUQUQUQUQUQUQUQSQSQ[5QSQSSS36S[00\\533>Y5Q[0]Q4Y?3W3333UQ4]QUQUQUQUQUQUQ[5[5QSQSQSSS36[\00\5S3333>YY0YY?3W33W33WUQUQ4]QUQUQUQUQU5QSQSQSQSQSSS3>YY005SS333333333W33333cddeU4]QUQ4]QUQUQUQUSQSQSQSQSQSSS3333336S[\\5333333333WW3333WUU4\]QUQ4]QUQUQUSQSQSQSQSQSSS3333336[\\5S33W33333333W33W3UUU4\\]QUQ4]QUQUSQ[5[5SQSQSS[\\\\5W>\\5S[5333333W33333334]UUU4\\\]QUQ4]QU[5QSQSSQSQSSQQQQQ[\\\5S[5[\\\00\\\\\\\\\]4]UUUQQQ4\]QUQ4]QSQSQSSQ[5S[\\\5QQQQQS[5[YYYY00YYYYYYYYF3Y?4]UUQ4Y]QQ4]4]QQSQSQS[5QSSQQQQ[\\\\5[5[\533333333333~30 033U4]UQO04\\]QUQ4QSQ[5SQSQS[\\5QQQQQQ[5SQQS333333333333}3}34\]UQUQO0UQQQ4]4]Q[5QSSQSQSQQQ[\\\\5QQSSQQ[\\\00\\\5334\\]QQU4]QO0UQ4\]QUQ5QSQSSQSQSQ4\\\\5Q[5QSSQQ4YYY00YY5S33UQQQ4\]UQ4G0UQUQQ4]4SQSQSSQ[5SQU4\F35[5QSQSSQQ733333336[\\]Q4\]QQUQO00UQU4\]QUSQSQS[\5SSQUO0 0NQSQSQSSQQ733333336QQQQQUQ4\\]QO 04]QUUQQ4]SQSQSQQSSSQUO 00NQ[5SQSSQQ7dddddddTQQ4\\]QU4\\\G0UQ4]UQ4]QSQSQSQQSS[\]U}3~3E5QSSQS[\\?3333333>\\]Q4\\]O0 0 00 0UQUQUQUQ4[5[5[\5SSQQQU33}36QSSQ[\\\533333334\\\\]QQ4G 0 00 04]QUQUQUQUQSQSQQSS>\\\?3336QSSQQQQQ[\533334]QQQQQ4YG 00 04\]Q4]QUQUQUQSQSQQSS333333336QS>YYYY5QQ[\00\]QQQ4YYG0 00 04]QQ4]Q4]QUQUQ[5SQQSE\\\\53336QS33333>YYYY00YYYYY?30 00 0 0 0UQ4\]Q4]Q4]QU5QS[\5SV 00 00N3336QS33333333333333333330 0 0 0 00UQUQ4\]Q4]Q4]SQSQQSS00000N3336QS333333333333333333 04\\\\\]QUQUQ4\]Q4]QSQ[5QSEY0050E\536Q[00\YYY00YYYYYYYYY\\]QQQQQQ4]4]QUQ4\]QQ[5QSQSV 0 0 0N0 00N3EYY005333333g33333334\\\\\\\\]QUQ4]QUQQQQQSQSQ[5 0 0 0N0 00N0 00 00 0N0 03333f333 00 03UQQQQQQQQ4\]QUQ4]QQQQQSQSQQS 0 0 0N000N000000N000003f3300 000UQQQQQQ4\]QQ4]QUQQQQQQSQ[\5S 0 0 0EY50EYYY005S0 00 003o33 00 004]Q4\\\\]4\\\]Q4]QQQQ4Q[5QQSSV 0 0 0VN0 00 00 0 0N[\\\00\\\\\00\]4Y]Q4YY\]QQQ4\]QQ4\\]5QSQQSS 00 00 0N0000000EYYYY00YYYYY00YY]Q4YG004\\\\]QQ4\]QQQSQSQQSS 0 00 00EYY5 00 00 00 000 0 0 0 0000 00 004YG 0 00 0UQQQQ4\\]QQQQQSQ[\5S[50 00 00 00N0 00 0 0 00 0 00 0 0 00000000O000000UQ4\\]QQQQQQQQ[5QQSSQ[\5 00000N00 00 0 0 0 0 0 0 00 0 00hiiijO00 0 00 0UQUQQQQQQ4\\\\QSQQS[5QQS0 00 00EYYYYYYYYYYYYYY50 00 00O0004\\]QUQQQ4\\]QQQQQ[\5SQ[\5S000000V000 0 000 00 00 00EY00YYG00 0UQQQQU4\\]QQQQQQQ5QQS[5QQS[\\5 00000000V000000|3}3~3 000 0000 04]4\\\]UQQQQQQQ4\\SQQSQ[\5[\\5[\\\\\\\\500 00 0|3333}3~3 00 0 000UQUQQQQUQQQQ4\\]QQSQQ[5QQ[\\5[\\5QQQQQQ[\5`ab3113^_b4\\\\]4]4\\\]Q4\\]QQQQQ[\5Q[\5QQQ[\5Q[\\\\\\\5SSQU45SQUU4\\\\]QUQQQQQUQQQQQQ4\QQ[5QQ[\\5QQ[\\\\\\5QQSSSQU76SQUUUQ4\\\\]Q4\\\]QQQ4\\]Q5QQ[\5QQQ[\\\\\\\5Q[5QSSSQU76SQUUUQUQQQQQ4]QQQQ4\\]QQQ4[\5QQ[\\5QQQQQQQQSQQSQSSSQU76SQUUUQUQ4\\\]Q4\\\]QQQ4\\]QQSQQQQQ[\\\\\\5Q[5QSQSSSQU76SQUUUQUQUQQQQ4]QQQQ4\\]QQQ \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_1F/border.bin b/data/layouts/MtEmber_RubyPath_1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_1F/map.bin b/data/layouts/MtEmber_RubyPath_1F/map.bin new file mode 100644 index 000000000000..bfa5e7637172 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_1F/map.bin @@ -0,0 +1 @@ +22+22+2222)2222222222222222222222222222222222222222222)2222222222222222222!322222222+#322222)22222)222222222!3+222#322 \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B1F/border.bin b/data/layouts/MtEmber_RubyPath_B1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B1F/map.bin b/data/layouts/MtEmber_RubyPath_B1F/map.bin new file mode 100644 index 000000000000..e92a275101ac --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B1F/map.bin @@ -0,0 +1 @@ +2+222222222!322222)2222#322222222222222+22222222!3222222* \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B1F_Stairs/border.bin b/data/layouts/MtEmber_RubyPath_B1F_Stairs/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B1F_Stairs/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B1F_Stairs/map.bin b/data/layouts/MtEmber_RubyPath_B1F_Stairs/map.bin new file mode 100644 index 000000000000..1ac916e78599 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B1F_Stairs/map.bin @@ -0,0 +1 @@ +)2222+22+222( \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B2F/border.bin b/data/layouts/MtEmber_RubyPath_B2F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B2F/map.bin b/data/layouts/MtEmber_RubyPath_B2F/map.bin new file mode 100644 index 000000000000..09813c497b07 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B2F/map.bin @@ -0,0 +1 @@ +2#3222+!322222222222222222222222222222222222222(22( \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B2F_Stairs/border.bin b/data/layouts/MtEmber_RubyPath_B2F_Stairs/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B2F_Stairs/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B2F_Stairs/map.bin b/data/layouts/MtEmber_RubyPath_B2F_Stairs/map.bin new file mode 100644 index 000000000000..4c7388aa5362 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B2F_Stairs/map.bin @@ -0,0 +1 @@ +)+22222222222(* \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B3F/border.bin b/data/layouts/MtEmber_RubyPath_B3F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B3F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B3F/map.bin b/data/layouts/MtEmber_RubyPath_B3F/map.bin new file mode 100644 index 000000000000..882838538265 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B3F/map.bin @@ -0,0 +1 @@ +++))222222222222222222222222222222222222)2222!322222!3222222222222222+(+222222222222222+)2+22)222+22222222222222222222222+!3222#3*22222))2222#3222#322222222!32222222++ \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B4F/border.bin b/data/layouts/MtEmber_RubyPath_B4F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B4F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B4F/map.bin b/data/layouts/MtEmber_RubyPath_B4F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..ea974a47ec2a585d6bce519a00f1fa8e27103f4b GIT binary patch literal 576 zcmbQuc7y<&!*-l)Hk&ECDSJPd1hG)z9JXUXHRkMpjQ$vH2V!i{j2)te(U=7XWH5%Q z`D@gO1O7IGsrhO21qb{ASA)$RFfo`pe~bdy1KERsZimsqKsLyg2=~DBpwb{0Aln7g n52HcmKp?^{m$&- literal 0 HcmV?d00001 diff --git a/data/layouts/MtEmber_RubyPath_B5F/border.bin b/data/layouts/MtEmber_RubyPath_B5F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/MtEmber_RubyPath_B5F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtEmber_RubyPath_B5F/map.bin b/data/layouts/MtEmber_RubyPath_B5F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..e67aaa03d2e0dbad25a9ca28f70bf9cfc0fb4270 GIT binary patch literal 480 zcmbu4Ne+TQ5Jeq7_o=#r?sVhA=`!rVg#kAz&21bw5Sn1b#41QP;>yHSQq}4Ae+@C> zAHv|=iuB8q!Qd#d_B5xswz$CsJNV>Nk2Oa)iN?-VYLE!e=|*?q2ceBZd)Ks}k{(WB zXJl3HoC;d;n3t@IEh4u=&7a~O@ywfYNiW*V4sCy*JG|ft&$-J(*|OmwLTqF^Rg_fI iK>k8^LF^QR%B$2~XKPmV(CY&?*)px#uZd6c-}? ze}5T-Gr8Yvg4#iQwY}C3!&t^LO?=XCJ0JDk1bCZWX|0B(dyVHSdl+Ek_t8m4BxZwc zU)GQ3AEdbH{ULme?WXb~DKnQrYi$sj_cgwj%-i#SyGTBT&xt>a>K{j?hC$nO#SJba zDtjLe9l%7A=0V*&GWpwGIbvd7_t)Gv403S1>voUDzB>f*W^{RwEH{-5t z%KDZTIoCYsn~IO#Fu&TLwbK2@=WWh69aiC6qF;>9{lJb6 ztrv?JX)vD5wv-y>%(3M5?H7CBKY>?N_6)`TY@oZcknC zYsK=Gs)L?8(5PR3%N(4#;N#yLzu34;2UUoeRK?Y z1p2jndM|%+s%{tMzjwPD+Il`&+;>ekdfEKatIS~iT0U#O-8pQQy#DzOqvVzExeivF z_v`uP4a3^7#Ei|)Myt^k@A0thV$Gh`ME;f{G93EEW`CwEBTyfooS4lXX3-Cn!R~u vUdCAr!)XsA|8#e=)Ej30d?Rn=-9LQt7W(!y-XBhr9qs;EXMM8%^8bGT64WT@ literal 0 HcmV?d00001 diff --git a/data/layouts/MtMoon_B1F/border.bin b/data/layouts/MtMoon_B1F/border.bin new file mode 100644 index 000000000000..23857cf752da --- /dev/null +++ b/data/layouts/MtMoon_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtMoon_B1F/map.bin b/data/layouts/MtMoon_B1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..89714677c014f67c23236921742cd246a86534b0 GIT binary patch literal 3920 zcmeHKOK!q25Uqq{Hr-U}Nrn?9>|uw*DS8R6(C*qJv=Yz{B9-dN z=e@+9j3;}yzd3d;Hf&7HYu6*I)kba|#=HCI=ePXe&k}xHw|4jQ2S1=uS-aX*#N&&; zTUk-vM}~e&CqumXU;QfD&}?zHXhnT<}-FoO)Pevfmh zj$tj;dYOV}eSj|#yP~yJb8T!c3>i+{o`kqMxA&K#88S44r%+s(aScqtEA4|EDaXTE zu?|kq{7k%};ptO`fm!k+0}=Uw>-@4j!!y0Kl{Ejo1M!vK3Ny$m9SZOCfqn`zoPDjv zs^yowN@W@NypMONX-}hP5h~oJln!=$|ELVtX2LMOf7I^@yt|Ox--p(;HL+g!UP0D# g{~&z|m>_Lznug=i?{n7k`6zwLB~KdOzn84QA6qH~wg3PC literal 0 HcmV?d00001 diff --git a/data/layouts/MtMoon_B2F/border.bin b/data/layouts/MtMoon_B2F/border.bin new file mode 100644 index 000000000000..23857cf752da --- /dev/null +++ b/data/layouts/MtMoon_B2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/MtMoon_B2F/map.bin b/data/layouts/MtMoon_B2F/map.bin new file mode 100644 index 000000000000..9b546adb53d7 --- /dev/null +++ b/data/layouts/MtMoon_B2F/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_1F/border.bin b/data/layouts/NavelRock_1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_1F/map.bin b/data/layouts/NavelRock_1F/map.bin new file mode 100644 index 000000000000..6398304c99c5 --- /dev/null +++ b/data/layouts/NavelRock_1F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_B1F_Frlg/border.bin b/data/layouts/NavelRock_B1F_Frlg/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_B1F_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_B1F_Frlg/map.bin b/data/layouts/NavelRock_B1F_Frlg/map.bin new file mode 100644 index 000000000000..856e2a21f6ae --- /dev/null +++ b/data/layouts/NavelRock_B1F_Frlg/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B10F/border.bin b/data/layouts/NavelRock_BasePath_B10F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B10F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B10F/map.bin b/data/layouts/NavelRock_BasePath_B10F/map.bin new file mode 100644 index 000000000000..3f718d185eca --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B10F/map.bin @@ -0,0 +1 @@ +2222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B11F/border.bin b/data/layouts/NavelRock_BasePath_B11F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B11F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B11F/map.bin b/data/layouts/NavelRock_BasePath_B11F/map.bin new file mode 100644 index 000000000000..48a1246d488c --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B11F/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B1F/border.bin b/data/layouts/NavelRock_BasePath_B1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B1F/map.bin b/data/layouts/NavelRock_BasePath_B1F/map.bin new file mode 100644 index 000000000000..48a1246d488c --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B1F/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B2F/border.bin b/data/layouts/NavelRock_BasePath_B2F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B2F/map.bin b/data/layouts/NavelRock_BasePath_B2F/map.bin new file mode 100644 index 000000000000..3f718d185eca --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B2F/map.bin @@ -0,0 +1 @@ +2222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B3F/border.bin b/data/layouts/NavelRock_BasePath_B3F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B3F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B3F/map.bin b/data/layouts/NavelRock_BasePath_B3F/map.bin new file mode 100644 index 000000000000..48a1246d488c --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B3F/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B4F/border.bin b/data/layouts/NavelRock_BasePath_B4F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B4F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B4F/map.bin b/data/layouts/NavelRock_BasePath_B4F/map.bin new file mode 100644 index 000000000000..3f718d185eca --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B4F/map.bin @@ -0,0 +1 @@ +2222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B5F/border.bin b/data/layouts/NavelRock_BasePath_B5F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B5F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B5F/map.bin b/data/layouts/NavelRock_BasePath_B5F/map.bin new file mode 100644 index 000000000000..48a1246d488c --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B5F/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B6F/border.bin b/data/layouts/NavelRock_BasePath_B6F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B6F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B6F/map.bin b/data/layouts/NavelRock_BasePath_B6F/map.bin new file mode 100644 index 000000000000..3f718d185eca --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B6F/map.bin @@ -0,0 +1 @@ +2222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B7F/border.bin b/data/layouts/NavelRock_BasePath_B7F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B7F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B7F/map.bin b/data/layouts/NavelRock_BasePath_B7F/map.bin new file mode 100644 index 000000000000..48a1246d488c --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B7F/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B8F/border.bin b/data/layouts/NavelRock_BasePath_B8F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B8F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B8F/map.bin b/data/layouts/NavelRock_BasePath_B8F/map.bin new file mode 100644 index 000000000000..3f718d185eca --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B8F/map.bin @@ -0,0 +1 @@ +2222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B9F/border.bin b/data/layouts/NavelRock_BasePath_B9F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B9F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_BasePath_B9F/map.bin b/data/layouts/NavelRock_BasePath_B9F/map.bin new file mode 100644 index 000000000000..48a1246d488c --- /dev/null +++ b/data/layouts/NavelRock_BasePath_B9F/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_Bottom_Frlg/border.bin b/data/layouts/NavelRock_Bottom_Frlg/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_Bottom_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_Bottom_Frlg/map.bin b/data/layouts/NavelRock_Bottom_Frlg/map.bin new file mode 100644 index 000000000000..dcfeee21ec29 --- /dev/null +++ b/data/layouts/NavelRock_Bottom_Frlg/map.bin @@ -0,0 +1 @@ +**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.vvv6+++((**---.8886+++((**---93;3;3;3:3+++((**-99%,3,3,3#::+((**-,,-%,3#+,,+((**-,,--3++,,+((**-,,-93,3:3+,,+((**-&45,3,33/'+((**--,3,3,3,3,373++((**--,,3,3,3,3++((>><<==?? \ No newline at end of file diff --git a/data/layouts/NavelRock_Exterior_Frlg/border.bin b/data/layouts/NavelRock_Exterior_Frlg/border.bin new file mode 100644 index 000000000000..75f2c916c55e --- /dev/null +++ b/data/layouts/NavelRock_Exterior_Frlg/border.bin @@ -0,0 +1 @@ +vvvv \ No newline at end of file diff --git a/data/layouts/NavelRock_Exterior_Frlg/map.bin b/data/layouts/NavelRock_Exterior_Frlg/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..4d169ee3a0c4da4d5e057b7496bffed3109e2e19 GIT binary patch literal 920 zcma))J5Iwu5Qc$b{({$4{2)n_ga)Xfh$1VBf>VQ%KoSLG7l@jYJ8%Tx2EZA70$Sd$ ziW#rhUXv(7f8m|=xAXry+JLrbn}UC6m-gtKh8Rt0jI+Xdp=#K`enBNvVUj{Mnc75b zbLOLX&lrF6cmacppP?YvNrjUA>?(BQ}!OrW51}Rs31B%mo({DuYXin8?BKnkk z^^WFrZ8GNi+PQIV9doC+7N5|4a-K=_;zVvR^975~6@Afnq91xRvJ^W8G{6ED6D{Eg jfB)w71h4c)@AN^RbTWqvu#6R~Vh!s!oyX0byz=`6FbdsQ literal 0 HcmV?d00001 diff --git a/data/layouts/NavelRock_Fork_Frlg/border.bin b/data/layouts/NavelRock_Fork_Frlg/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_Fork_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_Fork_Frlg/map.bin b/data/layouts/NavelRock_Fork_Frlg/map.bin new file mode 100644 index 000000000000..e6ce2d331c46 --- /dev/null +++ b/data/layouts/NavelRock_Fork_Frlg/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222V2T32W222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_Summit/border.bin b/data/layouts/NavelRock_Summit/border.bin new file mode 100644 index 000000000000..4ecad6cd2b6d --- /dev/null +++ b/data/layouts/NavelRock_Summit/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_Summit/map.bin b/data/layouts/NavelRock_Summit/map.bin new file mode 100644 index 000000000000..d49777f32f71 --- /dev/null +++ b/data/layouts/NavelRock_Summit/map.bin @@ -0,0 +1,2 @@ +66666666366666666666666636666666666666366666666666626666666666662666666666666222226666666666@22222@666666@:222229@666:2222296::99::99:      +9:       9:       9 \ No newline at end of file diff --git a/data/layouts/NavelRock_SummitPath_2F/border.bin b/data/layouts/NavelRock_SummitPath_2F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_SummitPath_2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_SummitPath_2F/map.bin b/data/layouts/NavelRock_SummitPath_2F/map.bin new file mode 100644 index 000000000000..48a1246d488c --- /dev/null +++ b/data/layouts/NavelRock_SummitPath_2F/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_SummitPath_3F/border.bin b/data/layouts/NavelRock_SummitPath_3F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_SummitPath_3F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_SummitPath_3F/map.bin b/data/layouts/NavelRock_SummitPath_3F/map.bin new file mode 100644 index 000000000000..3f718d185eca --- /dev/null +++ b/data/layouts/NavelRock_SummitPath_3F/map.bin @@ -0,0 +1 @@ +2222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_SummitPath_4F/border.bin b/data/layouts/NavelRock_SummitPath_4F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_SummitPath_4F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_SummitPath_4F/map.bin b/data/layouts/NavelRock_SummitPath_4F/map.bin new file mode 100644 index 000000000000..48a1246d488c --- /dev/null +++ b/data/layouts/NavelRock_SummitPath_4F/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/NavelRock_SummitPath_5F/border.bin b/data/layouts/NavelRock_SummitPath_5F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/NavelRock_SummitPath_5F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/NavelRock_SummitPath_5F/map.bin b/data/layouts/NavelRock_SummitPath_5F/map.bin new file mode 100644 index 000000000000..3f718d185eca --- /dev/null +++ b/data/layouts/NavelRock_SummitPath_5F/map.bin @@ -0,0 +1 @@ +2222222 \ No newline at end of file diff --git a/data/layouts/OneIsland/border.bin b/data/layouts/OneIsland/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/OneIsland/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/OneIsland/map.bin b/data/layouts/OneIsland/map.bin new file mode 100644 index 000000000000..26fbb1b50abc --- /dev/null +++ b/data/layouts/OneIsland/map.bin @@ -0,0 +1 @@ +qqqqqqqqqqquu*1+qqqqqquuqqqqqqruuqqqqqqruu*1+qqqqqqruu*1+qqq||z&%$'&'uu*1+qqqu0200qqqurx|000|zrqqqurs3000000qqqur000000qqqur00000000000qqqur00000000||qqqur0000000000111111q|}r000000000r111111|}|z&'0000000000rhq}|||||||000|||zpqqqqq|}} # ###111# $sqqqqq||} 1++++111+,{||||###1+++++222++####!s+++++++,s \ No newline at end of file diff --git a/data/layouts/OneIsland_KindleRoad/border.bin b/data/layouts/OneIsland_KindleRoad/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/OneIsland_KindleRoad/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/OneIsland_KindleRoad/map.bin b/data/layouts/OneIsland_KindleRoad/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..4d4abca6d0f5864abf6e9f2187b61dc9a0494837 GIT binary patch literal 6720 zcmcJT&yN&E6vydJ_4F>;h3SD+U{Owx$VM`~fZkx^`UmhM1Xtj0RFd5_lZe92)nLR3 z8Uvijo>nd-ySL#_(8DeYG6xeR(I7WX1O+tKx4!+RUiEYjTuh~>yQe?zTd&@GU0vM= zlY_}&yW#g(vezBGnsiLZyyA|J*k9Q|p^<|XEuY4d`@ea3g+BHq`U0wjy{$gcURAwvu3Xy7tUy*X&xg!$6ec>Jj@kb^wNkD=)KAOZr}E}|4t~L z5%>0olcUO_sJthSz2?38{O%%;bNJzVL6m55v=9~eCY~{`GH&rGROi`rGVLPiJwkuy zn`fI|jn@#@>Evjb7>Eofqv*2NSpqnk>-^hEOPTuS)lLoJ^LVvjNSNwN8G9g5` zUpMhMMFaCVU2FOAbW^-J-kQBo+Fs1YQ#3I3IE}$$&wu;>!lqG6W9<8ryb9edHP80z z2iHVjJSyvFI9umNfNS5z-{tycBzzdowr4wXi}CdP_y;>)SXFty(dFzp*8{mu1gk23 zYxc6WU=QRFAJA1}g~hInS z#cHJMzuboU_+5$MPygssgUoHmGrxY+#a?iQ%&O(@=JC;^3N3gAzMxe_kv6_p_<~mL zJy_rCZ9CGA<;$xRDr7|u{Lgk{kG@~};Z@}5j-|m<#rGSI_4#;xw{44IQ&iUcKk1+G zJLX;2PMWq^A8&JBR@s=w74x2%b**i!PMQa9Zm9A`^RQ}}PmQi;?F){}co}i8Ps3S# z!uv!0w!!@Gqs<Y5i??#qqYMRVCHi$$2Tu)@dF zjoG5P+T~#z^4DEfP~)udOE#-sAGRUyGl=Sd)vQ_Q>T|@}f1NuVw;X>>S%mtUU$WUb zW0sWv{q(&kV3{UY^@{WY_0Vr>I=pyrp%2WF`GOD27I3$Czm z2Wo!K3^s?F*ou8{#fLjEu-*%K>c3@@*L=HdsLne) z>Evh5!t=fH0T2Cja&U6UwvUuP z=f9#quz26*_WYW&YnIIyiii42RK^ckpRmms?LVS_yOd9@PuM~p(GU5ydE1T{Id~TR zww^Q2&T0a@HFkKBqO0`X@hP zc~p^(C!f=r7j@b&n!0{^>z^b>JCa8qvv0rp6n}iSHc#+vr@DUNy{`t&JF?2q{xiRb zr_L66s_S}VexV#jlRTrZ>xcP;a#(FzU-Qf_^fBhNTb)(}(dBt|?#ebzJm09$wJqZz+2t+hP#{R)}&DNj7?`BatJf%;e}aQ%nb zlj>l_8>wbl!#_!7{RjS5b}Rca1AEgR-Lu}yw-fO2-@gONYUwvilEr$!djs$FI}><$ zp3BOisJ>#q2FiQE8T-b^RoJfXmo@pCCM)<2HPcuO-XRu@%ztF`@1}UHHr&7$P1vwq z&DUL;ljC~4p@vbwhTr?}IY$`1$KHCcfLsH^ec=>niaUIFh$Fj#Bii zd43O+Dnk6Za+fGcX1w?KPV1kK9k+gHo39dlm+)T~;Jw(2hxm`Y%(*S|Qhrx}L4LFi x^D8X&Ewj^d_|k)Sbg{u+DyFEv)6#guT~#*FWpr_^sL$^_u#tv0a5?To{{ar|17!dJ literal 0 HcmV?d00001 diff --git a/data/layouts/OneIsland_KindleRoad_EmberSpa/border.bin b/data/layouts/OneIsland_KindleRoad_EmberSpa/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/OneIsland_KindleRoad_EmberSpa/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/OneIsland_KindleRoad_EmberSpa/map.bin b/data/layouts/OneIsland_KindleRoad_EmberSpa/map.bin new file mode 100644 index 000000000000..9817d8614bf4 --- /dev/null +++ b/data/layouts/OneIsland_KindleRoad_EmberSpa/map.bin @@ -0,0 +1 @@ +)''''+////+01772//)8999:-3//8'99:-30771125555-3`999&a2-3-3-3"36)7 3-3-3-3-3-3,3,3,3,3,3,3,3,3-3-3-3-3-36+7-3-3"3-3-3-3 3-3-3-3-3-3-3 3-3-3-3-3-36-3-322071313331313272)87&393939393:7+7-36031313238793939393&3:7?-3683'393:3879393'39393:77-3-36*(7-3 36557-3-367-3-3>5555+5-3-367-3-3-3-3-3-3-3>5555?-3-3"3-367 3-3-3-3"3-3-3-3-3-3-3-3-3-3-3-3-367-3-3-3-3-3-3-3-3-3-3 3-3-3-3-3-3-3644/-3-3-3-3-3-3-3-3-3-3.444444/-3-3-3.447-3-3-367-3-3-367"3-3-36/-3-367-3 367-3.7-367-367-367-367-367-367-36=36 \ No newline at end of file diff --git a/data/layouts/OneIsland_PokemonCenter_1F/border.bin b/data/layouts/OneIsland_PokemonCenter_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/OneIsland_PokemonCenter_1F/map.bin b/data/layouts/OneIsland_PokemonCenter_1F/map.bin new file mode 100644 index 000000000000..a9016b670596 --- /dev/null +++ b/data/layouts/OneIsland_PokemonCenter_1F/map.bin @@ -0,0 +1 @@ +bHI``JK222c3222PQUURS 722222LMVVNOn22222222222T\XY^WnBB22222222ABFGCD222222222222E322222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/OneIsland_PokemonCenter_2F/border.bin b/data/layouts/OneIsland_PokemonCenter_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/OneIsland_PokemonCenter_2F/map.bin b/data/layouts/OneIsland_PokemonCenter_2F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..a1b551a7369e78ea7c76d48063ff71677047ea9e GIT binary patch literal 300 zcmZ3$)&hjrf%qDjg`lsqEn{23)&qq1f%qPn^$$+pXIsa1%Sgjm-B^vi%y_#IlX0?f zD*G`g{hUp~_$Av*wjXRsEOqQZ*_hd1vZX=kboTdbipEVw+kx<#QHF7*aTZX2wsDSe zE|AU#;{8UqjqVsVGBp|%7#A8B88;dg8!A@Uts_M literal 0 HcmV?d00001 diff --git a/data/layouts/OneIsland_TreasureBeach/border.bin b/data/layouts/OneIsland_TreasureBeach/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/OneIsland_TreasureBeach/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/OneIsland_TreasureBeach/map.bin b/data/layouts/OneIsland_TreasureBeach/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..fe6ef01a73e3b27a76979ce806c39300d8967e94 GIT binary patch literal 1920 zcmai!J8u&~6onZyJKMzI1ruHc1&SM|*!fp^fP@pJqDVPVqE+314-63y%U$ z_`Fk07W01S)*a5$>BDd=ce;+}4}@QJLw72i4r^|*xGwy#;+t7f`F{+b!d}=9pT&RG z4TQK5E{35ii_1mg&t>P8?}zW7$^_Q)~5JdcI2`;xL?&IMk3YF;kk7L z26ap`sFF~@RF(s*Ej!ydNMSYDZ9NY(X%7WDP7BZLdD5P#Hk4;}Oy9Cv7G6=Io{HJQ z+vzCJipk67inp6iM>U)k&(H@lt;_fG{|cr}ZpgH*-%mO-DqWKsYLHK7iL*O;@z?mH z{pn~tc86)~{ejuUavQ9)xpRRBPpK^emh-YNARW+(Z4e*v@tYX32 zf{wM)eC++U4k)8}9oKAWK78wN-;Fyp&2D_Bd)A=;K=N=paDN-ODh1f>*pKfk{dlDR zhVYyfc~@=;3ARx-^d1%O`dj(Q?2`T)aQaL`s!=*&`|(wLEh^}5=Uw0R`x!fjKiw16 z6mBPeP(`D>CUn;?`?k&sowTG^xWCaW{OPWQNHKzd&~-*w4_&8!j+kts-O<; zv;K;|Dit`}v)RpjF`xD`9=@ddngw0l$!E2~g7WwV_A=_{JbQ$KmC(hKpVvI(TQaQ` zJ;5H6Y|3mf8CKeo>5TGAk`5g$_&LpE-pqyRB)%P6wR&?NzQ#4Af95wH6Pl>;J-?XG zc%;F6ru?+Ok>9J*c70DLWa+WT%zDCLR@1^^3Rs*!5-;mL>){K=`TO}F)%Li( literal 0 HcmV?d00001 diff --git a/data/layouts/PalletTown/border.bin b/data/layouts/PalletTown/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/PalletTown/map.bin b/data/layouts/PalletTown/map.bin new file mode 100644 index 000000000000..f2113394f22d --- /dev/null +++ b/data/layouts/PalletTown/map.bin @@ -0,0 +1 @@ +22$%$%$%$%$'22&%$%$%$%222222222222222222222222222222222222222222222222222202220222222222222222222222222222222222222222222222222222222222222222222222222222222222222200000222222220000022222222 00 00222222222222222222222222222222222222222222222222222##2222222222200 00 0*++,2222222222200000*++,00000000000 \ No newline at end of file diff --git a/data/layouts/PalletTown_PlayersHouse_1F_FRLG/border.bin b/data/layouts/PalletTown_PlayersHouse_1F_FRLG/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PalletTown_PlayersHouse_1F_FRLG/map.bin b/data/layouts/PalletTown_PlayersHouse_1F_FRLG/map.bin new file mode 100644 index 000000000000..b93d823c96d0 --- /dev/null +++ b/data/layouts/PalletTown_PlayersHouse_1F_FRLG/map.bin @@ -0,0 +1 @@ +  ./ -!"    1267(5)*((90:0>0?0 0=0 0 0 00 000C0D0D0D0D0F0%0&0'0 000S0K0LMN0V0000 000S0K0TUN0V0000W000[0\0\0\0\0^000G0_0000000000O 000000000000 \ No newline at end of file diff --git a/data/layouts/PalletTown_PlayersHouse_2F_FRLG/border.bin b/data/layouts/PalletTown_PlayersHouse_2F_FRLG/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PalletTown_PlayersHouse_2F_FRLG/map.bin b/data/layouts/PalletTown_PlayersHouse_2F_FRLG/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..b5d3bee2deee8f8dd3926aa356bc2f738dfb3988 GIT binary patch literal 216 zcmd;JX=hVlQDD(#(E*Y$IE{sarJt>h#el__#e_uz2t~oV literal 0 HcmV?d00001 diff --git a/data/layouts/PalletTown_ProfessorOaksLab/map.bin b/data/layouts/PalletTown_ProfessorOaksLab/map.bin new file mode 100644 index 000000000000..1067109ab084 --- /dev/null +++ b/data/layouts/PalletTown_ProfessorOaksLab/map.bin @@ -0,0 +1 @@ +mmniiklkluvstst222222222222222222222222222222222222222222222222222222222222222222222sstst222ststt22222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PalletTown_RivalsHouse/border.bin b/data/layouts/PalletTown_RivalsHouse/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PalletTown_RivalsHouse/map.bin b/data/layouts/PalletTown_RivalsHouse/map.bin new file mode 100644 index 000000000000..a29b5dbdc63d --- /dev/null +++ b/data/layouts/PalletTown_RivalsHouse/map.bin @@ -0,0 +1 @@ +  ./ -!"  +,1267(5)*((3490:0>0?0 0=0 0 0 0 0 0;0<0 0000C0D0D0D0D0F0000 0000S0K0LMN0V0000 0000S0K0TUN0V0000 0000[0\0\0\0\0^0000W000000000000G0_00000000000O4444444444 \ No newline at end of file diff --git a/data/layouts/PewterCity/border.bin b/data/layouts/PewterCity/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/PewterCity/map.bin b/data/layouts/PewterCity/map.bin new file mode 100644 index 000000000000..fc42368cb17c --- /dev/null +++ b/data/layouts/PewterCity/map.bin @@ -0,0 +1 @@ +$%$%$%$%2222$%$%$%$%$%000000000000000000000000000000000000000000000000000000000 00 000 00 0000000&%00000200 00 000 00 000222000001111111111111111111000000022222111001111111111111111111 0000000111111111111111111111100000001111111111111111111111 00 00 00011111100 091:1:1:1:1:1;1 0001111111111111111111110ABBBBBC0111111111111111111111IJJJJJK111111111111111111111`1PQRSTUV 0111 0(0)0*0+00000000111111&'hX1Y1Z[\]1^10&'111001230000000111111111111111110111089:;00000111111111111111110111 0@Abc$%0000011111111111111111011111111111111111$%$%$%$'11111111111111111111 00 00 00000000000{1|1}1~1100111111111111111111110000000000000HIJK11100000000000011111 00 00 000000000PQRS11100111000000000 00 00 00XYZ[1110&%$%$%$%$'01110000000&'`ab&'111 01110 00 00 000111111111110000000000111002222201111111111100000000001110 0011111111111000000000011100000 00000011100000000001110 00000 00 001110011101111111111111111111111111111111110111111111111111111111111111111111 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/data/layouts/PewterCity_Gym/border.bin b/data/layouts/PewterCity_Gym/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PewterCity_Gym/map.bin b/data/layouts/PewterCity_Gym/map.bin new file mode 100644 index 000000000000..7a22de0f9451 --- /dev/null +++ b/data/layouts/PewterCity_Gym/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222tuv \ No newline at end of file diff --git a/data/layouts/PewterCity_Museum_1F/border.bin b/data/layouts/PewterCity_Museum_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PewterCity_Museum_1F/map.bin b/data/layouts/PewterCity_Museum_1F/map.bin new file mode 100644 index 000000000000..1485da6ef24e --- /dev/null +++ b/data/layouts/PewterCity_Museum_1F/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PewterCity_Museum_2F/border.bin b/data/layouts/PewterCity_Museum_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PewterCity_Museum_2F/map.bin b/data/layouts/PewterCity_Museum_2F/map.bin new file mode 100644 index 000000000000..d8d372f70d2c --- /dev/null +++ b/data/layouts/PewterCity_Museum_2F/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonCenter_1F_Frlg/border.bin b/data/layouts/PokemonCenter_1F_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonCenter_1F_Frlg/map.bin b/data/layouts/PokemonCenter_1F_Frlg/map.bin new file mode 100644 index 000000000000..590f4798938e --- /dev/null +++ b/data/layouts/PokemonCenter_1F_Frlg/map.bin @@ -0,0 +1 @@ +2b22222c322222222222222222222222222222222222222222BB222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonCenter_2F_Frlg/border.bin b/data/layouts/PokemonCenter_2F_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonCenter_2F_Frlg/map.bin b/data/layouts/PokemonCenter_2F_Frlg/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..a1b551a7369e78ea7c76d48063ff71677047ea9e GIT binary patch literal 300 zcmZ3$)&hjrf%qDjg`lsqEn{23)&qq1f%qPn^$$+pXIsa1%Sgjm-B^vi%y_#IlX0?f zD*G`g{hUp~_$Av*wjXRsEOqQZ*_hd1vZX=kboTdbipEVw+kx<#QHF7*aTZX2wsDSe zE|AU#;{8UqjqVsVGBp|%7#A8B88;dg8!A@Uts_M literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonLeague_AgathasRoom/border.bin b/data/layouts/PokemonLeague_AgathasRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonLeague_AgathasRoom/map.bin b/data/layouts/PokemonLeague_AgathasRoom/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..718b7678cea34371961adcfb188c65d2a75972eb GIT binary patch literal 338 zcmZ{gTMhwH5JWw@z3ruoFYE%}9!p_n5`0Xs0UKf~GnkCTv+rEQ$4I4eb8aQw>6+2( zkLKi(^@5hP`jSfyc{E{9-!*M$tK`s>&2L1Z3^|lgj_Q-za->NhBgAr*TcW#IJ|{_^ z19?aWS>*84#IQ{U919_j0*YV+V%R2QT%>_2YN(^BiQ(UAC6rM~nYNchqMh!s(|qzJ cRqy*v58xKJ`O}E)z+CK5hr8TM+A!qN3oo#DT>t<8 literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonLeague_BrunosRoom/border.bin b/data/layouts/PokemonLeague_BrunosRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonLeague_BrunosRoom/map.bin b/data/layouts/PokemonLeague_BrunosRoom/map.bin new file mode 100644 index 000000000000..96107bfa1eec --- /dev/null +++ b/data/layouts/PokemonLeague_BrunosRoom/map.bin @@ -0,0 +1 @@ +RSE3KF322222E3KF3L3P3222222L3P322Y2222222Y2X3[222222X3[22Q32222222Q322Y2222222Y2X3[222222X3[22222222222201289: \ No newline at end of file diff --git a/data/layouts/PokemonLeague_ChampionsRoom/border.bin b/data/layouts/PokemonLeague_ChampionsRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonLeague_ChampionsRoom/map.bin b/data/layouts/PokemonLeague_ChampionsRoom/map.bin new file mode 100644 index 000000000000..3e83caa24d6b --- /dev/null +++ b/data/layouts/PokemonLeague_ChampionsRoom/map.bin @@ -0,0 +1 @@ +7733333333333333 \ No newline at end of file diff --git a/data/layouts/PokemonLeague_HallOfFame/border.bin b/data/layouts/PokemonLeague_HallOfFame/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonLeague_HallOfFame/map.bin b/data/layouts/PokemonLeague_HallOfFame/map.bin new file mode 100644 index 000000000000..e8a598e9b3b0 --- /dev/null +++ b/data/layouts/PokemonLeague_HallOfFame/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonLeague_LancesRoom/border.bin b/data/layouts/PokemonLeague_LancesRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonLeague_LancesRoom/map.bin b/data/layouts/PokemonLeague_LancesRoom/map.bin new file mode 100644 index 000000000000..0ba5c9ff0362 --- /dev/null +++ b/data/layouts/PokemonLeague_LancesRoom/map.bin @@ -0,0 +1 @@ +OW3r3333333s33j33333333k333p33 3!3"333q33x3&3#3$3%3'33y33333333333333h33.3+3,3-3/33i333333333333333p33(3)3*333q33333333333333x3222223y3333333@2333@2322222222222333333I?333I?3673@33333>?3H333333A233A23?32A233A2333333333I?33I?333I?33I?3333333333333333333333333333333333333333333333333@233@2333@233@233333333222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonLeague_LoreleisRoom/border.bin b/data/layouts/PokemonLeague_LoreleisRoom/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonLeague_LoreleisRoom/map.bin b/data/layouts/PokemonLeague_LoreleisRoom/map.bin new file mode 100644 index 000000000000..340b78d78b40 --- /dev/null +++ b/data/layouts/PokemonLeague_LoreleisRoom/map.bin @@ -0,0 +1 @@ +CD2I2222222I22A32222222A322J2222222J22M2222222M22B32222222B322J2222222J22M2222222M222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonMansion_1F/border.bin b/data/layouts/PokemonMansion_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonMansion_1F/map.bin b/data/layouts/PokemonMansion_1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..491753551ccbbbc84e0a25d8dc73766507ba7a51 GIT binary patch literal 2660 zcmb_cNoy2A6n1G|MZLHkH0I#;3tkRGZ!t0&m*il5_4-X!PiI01;n7pCy1Kr3^}VmYE;>R-XCaQ!aXLw-sGGK%9j4oj zh?(W5smEcRrC!=&_L^QdB4(DK^H}@1G7GVvQCEd8@n!DgIOyTC4VBjUXO4LRoe zr2K^s`S@D@O0Wibn67Y}>EOj?iCJoX`1Ong2fqU@kDru(<^B5UYDs-HidA)3oqT{- zn3bm0VPb#gzY@G#)WPwCRq51(|7wt{p05fIaX(*mryS+gc8y(Y%UJlI_yLx5Dlw=F zCzHBThjxQ+`f9?tGTLbS{5#=BnUUFut49O-`yKah=wQyGa2b9_s7k0-xe;bku6d?( zrrjEHSY1tZKjyH&qjEDrf9Nm$qjAra@HCot3#{Ob(0w_!nam-fzsgNw=9sx=o|*4e zofu(2x`oaI3%W1HeR@C-X@E9aVG$jb0Gk`^u&-GDCv*!~vFJXj<4K;_*KI$96ddKhS1D$DtC1`qn-6>~;J~RYtr|ooV!l~qau`axWHl;7Rvl&)c zmwWe}o;K)amu)xgW_Nybp}52R*5B>0SLzCL)t0*D?}BTp#-KRyLRB{q%2;~uL^Z{k zXe?zYPP|an4L?yV@f&!N+`IKgLT_Pw7gL7f#0!;0c#2{n7luV!>x_iVRBhTFjN*mb z-D}QQ6bpI43jCEj8rGmMtqcC7Sjfdmio1)mfP+l1xo_CbsJ{hSG zi6#`Q%zeN@hPX|4=x+U{R_Y9>CKRj8eHrT!J*Fo)ZsTg~Ig@d(d`VR)zvNf^dKy?$ zaj#g7W8CGquBo`!K4OgVnqf`Fz4j5~bg;nvNB+d09Ur25?27+6Mv)w=o9!06)m7U= UElC`$$*QES@FrfJJP&*R185DQi~s-t literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonMansion_2F/border.bin b/data/layouts/PokemonMansion_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonMansion_2F/map.bin b/data/layouts/PokemonMansion_2F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..87db6b0ea012d3e0711f53a19fed72737eae4baa GIT binary patch literal 2888 zcmb7GNoZ6-5LIWWik_kfE~rsK)0oz3I_I6!oOZd`Q3?J*f~ABRWYA zNhaVH6ctQNaK(M!55}k%0221;4BN_kUAe^E%3a^ zPWie8PQe*C3+d4I;{g=E1~YkUZIE$0qdn}+u$Bh)+MwNHbwXEYhww0V!2@^*kL;JS zDr;TPZC7}w&c&<13Y?3)*6pzBsmct(0Bke?vAv*|@CtfCX8LTP4Ai^#OU*K~JltDp zD$OG2HxS2V%yk-sLAXjOXCLSze1cYsC3Agd!j-)^6{q3%ytgTbwarF#k^1Ro`1YV_ zq(}vlkhkTWuO>S|V~A=Wu-cpfHk z0#3w9D7n|3z@un8pgC3%ujviFby$TOV#c$E7dsV8?yC&fQ2RkZqV2${@2Er3Gs*6V z!>S(ty)fRdb1uJBA^ta9v9DG=S}#@(tB@Hlb=I1$M4w+;C0{>L4Yg{y%1M#vsTtOy z&o5R8|E7N??bT7uSUJpgWuMfvCc#|o1g?;1B5=yjz$T+wlwN%~%f2PHmcn-JE(w&b z&RF%N6=G#@PMP!4N4RU%Q5|i@vZUB9v_cW39(q5O2Ah(7JQK(ah#!X?$^`&k3#isMohk!SXqwb?3WL z`P!S8uef-0O?!^7)9qpRWW3gru%zc`*W_`Bht*LMRzPKDvYBG!$+7J8umZ=Xh!c9A zxRLL)a(AnjV literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonMansion_3F/map.bin b/data/layouts/PokemonMansion_3F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..9a05ce1b8c22710212f58c0cadc072d9f0bbb8ac GIT binary patch literal 2660 zcmeHINo!O=5LPo(MNcY1RE&G{CRiOI&JqeUUk)1{jShe>Ys;Pqqnmn|Mjoa zO}a$|l~a70pfjEJe%v=ew-sxUiYjOLEI;>_*;tF~&_jwfNS(Z%J9&eO z`6+hDWA#ct$P;=>&oU3I`&^Z(RH6OuoIIdj>2lj#m)ovlzC|2$yVOTs-EKsByu74W z^g7t99M&e}zEl+Lq1rbnug`Y3)GhPx%tu6(#$?1}nT4J24`o04zvaGCFTiBRjjEM7Lyh3bR$@|*pmEFc5yiHOT)V{Bw`qqb9SV`Qm zo}l*WD``G}SQga2vHI4BDKf64ZrGiL+IKtf6f=qWIO#dvqkSLOGvWrShp){9YesJj zd_Q%=ZmPsDOs~xcI1QwV?m@kCS~KL?rhS0b#)f5ekN1?--WUO_I3GYlXG_$cgPd^3 z+;L|Xv|(A@6N8YKbr{ndWx^vNFT-kn8kR*z2H6ay+D9zRKG-uKtjHi>eWXj-y%6t* zsK2zx%eWGwOkb8yw3A!^g{E6zHM7AGg!g2BAM0%6v)%%$nGLpQFCWb2EY4ffIc~1H X`HfSUq7Su*o*QFfb)f?PO9lP{d_Rq> literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonMansion_B1F/border.bin b/data/layouts/PokemonMansion_B1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PokemonMansion_B1F/map.bin b/data/layouts/PokemonMansion_B1F/map.bin new file mode 100644 index 000000000000..a7b0eeeb13e4 --- /dev/null +++ b/data/layouts/PokemonMansion_B1F/map.bin @@ -0,0 +1 @@ +22l3l3m322l3m3222l3l3l322m3m3n3n3n3n322222222222222222222222222222222222322222222222222222222R322S3222Q322222,2222222222222\3]3^32222222 R3R3W3S32222Q322.2222[32222222222622Z32[3222P22222222222d3e3f32222X222222222222222222222222222b22222222222222222222222222222222222j22222222222222222222222222222222222r222222222222222222222222-R322S3222Q322222222222222222222S322222252222222222222222222222222222i3i3i3222i3i3i32222222222222222222222222aaa222aaa222222222222222222R3S3222Q3.222222222222222222222222222222262Y3Y3Y3222Y3Y3Y32222Q322S3222Q322S32222222aaa222aaa2222222222222-R3222222222222222222222225222TUV2222222222222n3n322222l3m32222222222222222222222222222Q3222.222222222222222222\3]3^32222222226222222222222222222v[322222222t222222222222222222Z32322222222222222222222222222d3e3f32,22222222c322222222222222222222222222222222k3-R322222222222222R322222222R3222222222.129:AB \ No newline at end of file diff --git a/data/layouts/PokemonTower_1F/border.bin b/data/layouts/PokemonTower_1F/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/PokemonTower_1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/PokemonTower_1F/map.bin b/data/layouts/PokemonTower_1F/map.bin new file mode 100644 index 000000000000..f393c9f34da1 --- /dev/null +++ b/data/layouts/PokemonTower_1F/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonTower_2F/border.bin b/data/layouts/PokemonTower_2F/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/PokemonTower_2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/PokemonTower_2F/map.bin b/data/layouts/PokemonTower_2F/map.bin new file mode 100644 index 000000000000..0d1e67b03352 --- /dev/null +++ b/data/layouts/PokemonTower_2F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222662222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonTower_3F/border.bin b/data/layouts/PokemonTower_3F/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/PokemonTower_3F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/PokemonTower_3F/map.bin b/data/layouts/PokemonTower_3F/map.bin new file mode 100644 index 000000000000..c591995c15c0 --- /dev/null +++ b/data/layouts/PokemonTower_3F/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222622222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonTower_4F/border.bin b/data/layouts/PokemonTower_4F/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/PokemonTower_4F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/PokemonTower_4F/map.bin b/data/layouts/PokemonTower_4F/map.bin new file mode 100644 index 000000000000..eebe48c134f2 --- /dev/null +++ b/data/layouts/PokemonTower_4F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222622222222222222222222222222226622222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonTower_5F/border.bin b/data/layouts/PokemonTower_5F/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/PokemonTower_5F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/PokemonTower_5F/map.bin b/data/layouts/PokemonTower_5F/map.bin new file mode 100644 index 000000000000..efc99cca9005 --- /dev/null +++ b/data/layouts/PokemonTower_5F/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222622222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonTower_6F/border.bin b/data/layouts/PokemonTower_6F/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/PokemonTower_6F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/PokemonTower_6F/map.bin b/data/layouts/PokemonTower_6F/map.bin new file mode 100644 index 000000000000..fb8746f20ec7 --- /dev/null +++ b/data/layouts/PokemonTower_6F/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222226622222222222222222222222222222222222222222222222622222222222222222 \ No newline at end of file diff --git a/data/layouts/PokemonTower_7F/border.bin b/data/layouts/PokemonTower_7F/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/PokemonTower_7F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/PokemonTower_7F/map.bin b/data/layouts/PokemonTower_7F/map.bin new file mode 100644 index 000000000000..7554673cf602 --- /dev/null +++ b/data/layouts/PokemonTower_7F/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222662222222222 \ No newline at end of file diff --git a/data/layouts/PowerPlant/border.bin b/data/layouts/PowerPlant/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/PowerPlant/map.bin b/data/layouts/PowerPlant/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..48a6e198497b619cd868455b7cfb997004148d10 GIT binary patch literal 3920 zcmb7HX?Ijb5CxSBANlC-==p^x;sK28P9i1~2E`!D3EL<^zy(k?4Vw^LKtHf3B+3>P zImfzvUrqO0hRCUN=Jl(ts@whQR&~#tSc$hvvI+ z$d0zTj0Kx1d@qC~iZ&JzwuVk$dg!4OCQ;S(3?bJgkB%YyW?qzQnJ^A@+(X@SG#uz- zG8QdAMmKDa+HIj*$Q$up2(+6i5N0rA9`bBPSP>&+@zBK%%iYGfnhlW?7jdcB7ZJ3l zo<&x4#pl}E_{`Q;T^*yPc!%TLux0N3h%gdaaUDNq2;8Ois*wj*z$_FQPlM+Bk_*hH#>gr}!KH z6bLy+mBB)k z^HGg)-LNBmxz&BUjNjxtqu?8>xXZW_`KX>no{u-^hHLy?wp4piebgB_1jb^;{e+(* zAJxmq^N9vsUJp~4!z`8;2&xY;k~#PHEnqAnc*jfqY%+3R?><|uhxza%yl(ko#N_Av z&NW0RGm|;0W|cWpH0O$*O}es0$LfIyRc-xUov+M?ZuqdDZqoD^?EA%>Ne9MKh4Tx_sS8}x6;Ywwb}`}PMPy=qn^|BOWqNsj^LHa ztoZB(J2^a$uG1RTne$&?yFcBYUrBoyu_~P{YTIW=?BrlBS;4MTN2{-1ea?5#w1-iv z(kI28#-n-GSi!FIH7@jY`?Lr57*xN!YrKrCDZWjtxWcpOy;gzNz5CIm?S%1uMm#ew zetLaz53EU6y;qb7w@`dU3z1E2_bp< zUB&MjvQ{N}zfEkRf1W)brzdUendZFnAlar-j^JAAgr-scON4Uw=B#*AIdwhvMK5+P z@ciy#dx5cyvnAm`{t!>N>{mZ z0=0EJH-#dX$14AjOFPN}=J21p+xo1bfsI>;9F$gUeUi%?orSmzCjJ(MTTQ{B0ah&8$)_K^uIr@|*3Y^k$4*j>c Oz$qQ)&`X!p2hJCSgozl#_^JJZ{k{52`JUGuCj=e8 z<52p!ma!ea!?*S+W|Q$s6a_I?<`;$?kLS-?N`(YPZDxCEsm-K6j z`Yrw5!-M0PqIcw}S16@EYSK3G@w=W!k~o&EP@i(xyN-t}RZU*WgXcbdLXzv%5!8$@ zc32~Q`Yf++%`k?HAUM<*>x)TLxOzoSD#r-wexbfTl0NHqt&Vk9P@j%v@3H$-+%RQQ zymWNR);bm@*B&X-3M(m47RuY@Vu{|Uhi7vEBJ{;9+zp+wmdd5_VZ)n7%zb}a?D;5e zH3j-&9<@OiSfnMz#JlghuH12clC#G8$bw5@DJ==^yRIwuxj6$)!`?mj=adxnN!q>O z^oe`p%dPdNJ`Qmdr>=5bBWPoNi_d$ew3qroc*2tN~K=Z|F+ZcFQOaW zCFI#w*o$+2(!Z%x{vmx93TV@R8@&#SLG9F%;{IiN;YVJC70l@QJ?`UY<00C>`#(|m zAaDndLl!M>=!B(2tiyJ-N~sO)DC9~yH z`RUK87oHFX4K_`FYi>Q04^Al3QJuqAXj_BN%|z70UQ%Q`6Pa_ zPI$L_cf+-CFKESTavV6Z0N%Iad(n5;>)5B*5O1Nk(7WD)Rljjw;=(WO4YY$|6!FSc zyKifSHsmI}SMI%$*Yyqqw^?izJZl-zrtN;YiW<2I?_C{J%)E_wYwoxI<2T~{?s?+1 zJCMoKlkYGipPafJ`vCHvpbQ9jQ@Vp^8KkS->y(-7kzOd?s`{6-&7?#6Q{eU0y z3>JCc6+_&laHL`VBD@Sw!qado+^iq)BO|;Sd6(=Zw%_xeX|d>o-@NlweK~#sF!t=h ziYaI$C^^xz? zpXu*ayU>#NMSs<7q$LKkIojpdm9&l3%l^yNb@d|BH&z>s9R!cJw3{uhi3xO6`+<>t`$zxQ zu9bN$RSoS)X(XoVc4>E%%RG1BEY@))DNQOvzt&_=E8;=LysH+}Ep<;pbCJ0j_zN9A z3vT?pQRWm5nm3A?d1&uv53>2}VRkk1n)mI%y7j4u>+somWYZg&h#q!oztvgAPB2#& z(I4tMh51>$B9l1;o4KEuypu=TRvPLn>YEYkBhPupJ7-4bQsmNGg{GNdKOucCtcyiRMV{L)w{Rs8B(>=~Mvd0}NVqIPL*Xv8Fs>S>A zY6>sb1U+nExeByvK32BZFsJciO<=J3Scm4Ivb>WwOB1!h`&hv{scs0P-W2~6%+f?{ z@cygeZd;shK1&V0V!Q9I{EhSf<)sGh7rp!~teV>?^Az*_9c3*itrvU^eU(EM*-2fV z{QZl$%&n*Og8CQpn2TvT!Iv!bWsQz`G8d!j|12tW=MxpYi^=z59`(_Cos;TxqJqV%gRIgWm)!{5W{ literal 0 HcmV?d00001 diff --git a/data/layouts/RecordCorner_Frlg/border.bin b/data/layouts/RecordCorner_Frlg/border.bin new file mode 100644 index 000000000000..efef023e6f15 --- /dev/null +++ b/data/layouts/RecordCorner_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/RecordCorner_Frlg/map.bin b/data/layouts/RecordCorner_Frlg/map.bin new file mode 100644 index 000000000000..08209eaca94e --- /dev/null +++ b/data/layouts/RecordCorner_Frlg/map.bin @@ -0,0 +1 @@ + !3'3'3'3$3%3%3&3'3'3'3"3#()3D3D343D3D3D3D363D3D3*3+()3D3,3<89:;>.3D3*3+()3D3D353@ABC73D3D3*3+()3D3-3=HIJK?/3D3*3+()3D3D3F3F3F3F3F3F3D3D3*3+013D3D3D3D3D3D3D3D3D3D32332222 \ No newline at end of file diff --git a/data/layouts/RockTunnel_1F/border.bin b/data/layouts/RockTunnel_1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/RockTunnel_1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/RockTunnel_1F/map.bin b/data/layouts/RockTunnel_1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..80a6a266c949421cbcf6bcd9b8f24c96d22dd5e8 GIT binary patch literal 3840 zcmbVP%We}f6m6B_DP53%nfbybs(@@Dvw^1F!JglsNc;*c!mBDs`1s73>+5+Wsw~C! z`1;)I`#5%X^{&1RH+{PcySWynk2OP!SV_7Ks~T++*5R!~hwPh9x1^8Zw_y_-@FG@^ zf1Nax_|W_=t(f$2d|La-;qzNU$xfh?VfB4F$G7l3Jg=r2&S-mN|FZho**J$!3x3tV z>qT>s+FA3r_U%Pg;@?JVuBv}MKCFa|jQGBbj85l!>A7g6X^6k9V1eNS0XA;JtMEE( zBmSZOQQP^v2F;)eIwF4X{sI1Z^Q@7i`c2BDHXQ0dQUAk9I?kFg{4sRoDl)YVkG+Q< zPB_J7brZ~|i0?AI96$YSGVZU)tX}|WO0#M(1E;195 znKojc+I-vL8#kCo4t*`Lej$TZHOovJan0swfZdbNL&TZ0r!;r!79XE2OdPF!;}1K(Kr8ty~vM>=&Cl>DY;d7lt&m0OJ>WzCdufZ zAwRFu4I)m*IdX=U7a4zG zViEJ>G`{g$j_k*HaiAf77A5GH7pL$`hW8a?)gqSX7rO^^f+>7ejP+I_xWDqMf(*aN zKX!sCe7qlgyQ(hxFE*ayc;)gCKSip`PydQJ@7_0jiybtJ~HoYm7ed;a$yte!f;Oow>YlceE{Z(clvk;PB z``3>4d0ER+t*hrhfG8dBN56-4Q0^2jdf7HvDa>JiI==Rn_~0XWLhHVt$M?H9EAf3i z6g}&Y`G=@4V=Q=2mH2*c9Mg}Y|MPp*SOBM{b)Un1_>x`GCiW9DCKJIiqN PF_#QOrp1m?)a>hjq<`XP literal 0 HcmV?d00001 diff --git a/data/layouts/RockTunnel_B1F/border.bin b/data/layouts/RockTunnel_B1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/RockTunnel_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/RockTunnel_B1F/map.bin b/data/layouts/RockTunnel_B1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..68eed9a4c72ab2629d1113a0a86a2ccbcb4f47eb GIT binary patch literal 3840 zcmb_fO>Yx15G_jasu%KKyuWah3(cXTIaH8vgWm^-KxvgA;pew+XU5r7MIbA?9?#74 z?0nhTr%z?vbT{4Sbf5Nh1`4Yf-_rN#skQkxB|Wbo=51Q1Ra*2{{k!fyExS`bu} zx`40z0M;?X0&2oOjE&nLG7(>1BK~u=PYATms6&2o_}B$w`y#%4O#D;TkMUh6#qU_^ z4fd196Js~=WsmW9Q_VztN%E~o2|sf0#`=w`sBmAA!k34b#$}SS_vdaoH(zqJJW# zd;|*O;%lu%wi6ikwzl8n1=IjOpU7RhdY2w=#=|qGa zR(Xn;2M{Y(H1R2;i0MrWl|S3+7knGPPxez6UgEm^MeBV{OC#R2&{+#csjvB5lWox| zM)y+1$D5Y$RbOTYW|#1-qJ7Mv(bk3TKj){D;m18&3ei_aFfI{`{y{eI1e2!_8~MA% z^fbQ_D~dX?K1Q`N=H( KU(c^4fBpal104|n literal 0 HcmV?d00001 diff --git a/data/layouts/RocketHideout_B1F/border.bin b/data/layouts/RocketHideout_B1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/RocketHideout_B1F/map.bin b/data/layouts/RocketHideout_B1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..4a2ed565f4cb9bd7782d7e2672a53cdd05db12c4 GIT binary patch literal 1904 zcma)7$!-)e5GB&^YB;coT?ja^9oVGmKVg*!i^O{2C%PkG267m}9LQ)+zzI089kOs> z`wk+Mi0~KSa&@&Gr(0>2RCe3-T=sj_cDK__tcM5aJ9`rOKBkezrQZXb#|2!(44yfg z!6jVA6%1S8u3{3`xG3#9-@wgQxLdf5JDitxm+#?zD_p@3`B8<-`LX+Mv(F;JSk@HR ztC%wef1wVyRK*F;(-?TpggN0({GVFfYBeuWLx(fo;?{N-+IY5brxje7ZQC2-1!j5V zkt5fNeNNW-RE}#@?!U$mUiv<#w0h#TI~bNR8kMs}2^SKn+{n%+vasJxnT+V1t|$G# zOYW;`wj(23DB!vjViYF~=~&M1`2&A+ITg1)U%|U*H|-(yd4*fVJbq%zRa8^H!*qlW z(Lvfv`)JBXO=Qdb!{HVjPFJeSca)CNaZ{-T6*sr?WHJU+*QK>Sx-G zcw9U3+iMz>9B=p+>usP_75@`G{PTLN>QAG-j+n}#L5v%KXtOg>6ZE`PSalY^gLak* zrnv3dR%fE-Ht*L~elt$1K$SQBL%r;$0}c5Uw}=yTlIFbrE1o^Y>fNHeEa4?y;dNB~ zro7-(|Bx|M)hgcLE#6giEitP6mrDOSTsXPabsS~=xE9h|A>h{Y66=?~1>KIWw9IGe w94%nZv!lF-dd+Wx?LZlc`IOT%zYT_~=cV~=Fr2ZGwoPxtMmSj~u4iNDKSWOLRR910 literal 0 HcmV?d00001 diff --git a/data/layouts/RocketHideout_B2F/border.bin b/data/layouts/RocketHideout_B2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/RocketHideout_B2F/map.bin b/data/layouts/RocketHideout_B2F/map.bin new file mode 100644 index 000000000000..f849a064257c --- /dev/null +++ b/data/layouts/RocketHideout_B2F/map.bin @@ -0,0 +1 @@ +UVW222222222222223 322]2^_3222222222222e2fg 2222222222222222222232222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/RocketHideout_B3F/border.bin b/data/layouts/RocketHideout_B3F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/RocketHideout_B3F/map.bin b/data/layouts/RocketHideout_B3F/map.bin new file mode 100644 index 000000000000..bdd8863469f7 --- /dev/null +++ b/data/layouts/RocketHideout_B3F/map.bin @@ -0,0 +1 @@ +23 322222222222222222222222222222222222222222222222222222222222222222222222332222222222222222222222222222222222222222222222222222222232222222222222222222222222222222222222222222222222222222222n222222222222222222222222222222222222222222222222222222222222222222222222222223222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/RocketHideout_B4F/border.bin b/data/layouts/RocketHideout_B4F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/RocketHideout_B4F/map.bin b/data/layouts/RocketHideout_B4F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..0e0b8ec93c09a180e01466e9a69a879f425f213b GIT binary patch literal 1248 zcmaJ>xo#9e5M3;IH5+)11xS$D91>tis(%DB$RH!JLZz zAK$?Sw(w_|s;;T&*|D%n>e-ooUH$64s-4Gz#3CNV=Mu8R^_Z8h&+(#Km(WLnFp<{_LYunW{Q zeR|_exD+l2#gB&N&-nvB;x~4Lnc)*^li$?Nc>eGFgMV@_=6{G)UaMj~-sk6=*|c7D z#AB~i^%2jko1eoZv$89>?UX=m(wU9lnlh+ZkbvekEIYz}VoCsAw* zJ@M;rg})o!EaJQJJxY@$-);U?Dr{cme1)&#R`gfDn2!mcvn%XOuJLu;F7f{DB%NyL z;X66s;G4M9z~ARNVL0lS>#)YNyvnXd%AV literal 0 HcmV?d00001 diff --git a/data/layouts/RocketHideout_Elevator/map.bin b/data/layouts/RocketHideout_Elevator/map.bin new file mode 100644 index 000000000000..42e08c38debb --- /dev/null +++ b/data/layouts/RocketHideout_Elevator/map.bin @@ -0,0 +1 @@ +222222222222222 \ No newline at end of file diff --git a/data/layouts/Route1/border.bin b/data/layouts/Route1/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/Route1/map.bin b/data/layouts/Route1/map.bin new file mode 100644 index 000000000000..02ee26860a9e --- /dev/null +++ b/data/layouts/Route1/map.bin @@ -0,0 +1 @@ +0000$%$%$%$'0000&%$%$%$%0 00 00 00 00000 00 00 0000000000000001000000000 00 00 0000000001000000000000000 0 0 0 0 0 0 0 0 0 0 0 0000 000 0 0 0 0 0 0 0 0 0 0 0 0000000 0 0 0 0 0 0 0 0 0 0 0 0000 000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000000&'00000000000000000000 0 0000100000000000000000000 0 0 0 0 0 000000000000000 0 0 0 0 0 0 0 0 0 0 0 0&'000000&%$%$' 0 0 0 0 0 000000000000000 0 0 0 0 0 0000000000001000000000 00000100000000000000000 00000100000000000000 0000000000000001000000000000000000000000000000000 0 0 0 0 0 00000 0 0 0 0 0 00000&%$%$%$%$' 0 0 0 0 0 000000 00 00 0 0 0 0 0 0 000000000000000 0 0 0 0 0 000000000000000000000100000000000010010000000 0000 0 0 0 0 0 0 0 000000 0 0 0 0 0 000 0 0 0 0 0 0 0000000 0 0 0 0 0 0 0 0 0 0 0 0 000000 0 0 0 0 000 0 0 0 0 0 0 000 0 0 00 0 0 0 0 0 00 0 0000000000 0 00000000 0 0 0 0 \ No newline at end of file diff --git a/data/layouts/Route10/border.bin b/data/layouts/Route10/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9CmznSP(HMBd90! zPYFgL|AHPC6x}^JH!p&#aaCjk_E)dJsp_ig+3_Hc-s+wC`m6W8dhb>BT$5{wZOW)x zuHH>PPm%h`ri?4|pYZ<=|4sS8+567__uBvTGyZ)?U{_siTk?omcXr-huzI&{M#XZ$ z`*oucZngNcrgV0v-mmqpH1`(|6u93W>^7$O+is36N%7;tICN=%CLT|1HJ0MZUYhAb z_|jm8Z;Ef5S@4AVL;elBUmvt~r~bo5ff>FlzIV^$@M6`7XWV$k<8R9K#((gSR+k$) zx*Fr*m&Zd<#gk9*d-an1R{!3p3%?G>AF+eRmTYMd^E~|68hgyryV7+1kNtURd_iCv zWBS+cKfZZQUU&9};6FT*^M9q$MZfv5xZ&)hLRVOyiv2$}Tg$JCTh6|2xDly772_Xl z*RnKM@|1Gk*@pYXtP)<1bpRfV~=dhI>{sB1rL< z+x$nSExCK*5rN0wZn_GpV5QA}WZKbH{8hZJu*btAbf8JA4|Ob!;=#Th#H)C!%+UdjsyA}mlNWzlMe6o;a$<> zgX-hCF^}?(T=(Zrpt}L^ef;>2H5JAH{d4?zyz1|LM;s@cYSa$JNc}ueXL}Iyv%VOq z$HV*GLCjA)VrJZX!T#09&p5$<#O+`6`9nPB;r_A+Kb{3U`g!a>yCLJ`2BkCRMr0a|NLO;|K zA8KB^Bl~~6zN{B`?Q=(CKm?D;`CD;p|B@ zv9>tVck!BA{Os@gpSJfZJKg}8A3FZh@lNX;GblUG|3Ao&;;$RSN82|N;kWheg+mGc3x_85ZT&{4CAl{5r!te&#=QMGW)!ng7IN73T44 z=JUL#5zOOft|`Cf&^-PwUUMks->|P*JNdJIs)GGh+lieZ7tgf)C*}u!T%D7r<(bBw z6=~`N*ICyeQvHD+RnN)u@}iuV7n(P1nf1e*KFZ&%8`KZ-FsDE8VMX&Ecqo+mzhAS* zh9k~PP$<=>@4S@PzrWx1=^yu7f40K<<@{%!>FCc^=s&UlX}{I;jdqBgWWVmKcdg%@ zgg=jGe_NDawb>b@{L`Tt&hM-%=z_%0P+hclXYY03SAC{g z{z3-TWn0*gU-e1zzmUTHx`cHA9&eHQdquwgaIb)_!291T^7;R=eZ|=&d&&93y_GS< z`tUp^k^jKw>Pz2F{eI1!$Tf)h<9uMQ0-vj|5YICZbV literal 0 HcmV?d00001 diff --git a/data/layouts/Route12_NorthEntrance_1F/map.bin b/data/layouts/Route12_NorthEntrance_1F/map.bin new file mode 100644 index 000000000000..f723c9817f90 --- /dev/null +++ b/data/layouts/Route12_NorthEntrance_1F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/Route13/border.bin b/data/layouts/Route13/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/Route13/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/Route13/map.bin b/data/layouts/Route13/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..b1f55a645d9665327ce79813c3be1d96d9e3035d GIT binary patch literal 2880 zcmd6oOK;RL5XW&l-c4HC#@*8LEE2Cu-HY2uaANm{;KU~eE<6rEw*n67C)g`O;$Htf zJNS_%3#UaR$M$4m|NZmC-lH3|w~}%|FY4c?W5ZTyqsOLEcj+Fjrrb~T+|;+cp4G6y zo}_#}>o5NmpYQsIK39!;M2~3|CFLX8)2PCh7KMB%T#dp$e)q<{_4dxkNqnfuJ{^W$ z{3W-yY}=GQq&R;hdm1&Teyi+Pd**HC=FMX(r@gY%VQGzBPe$6dI~GM_#R_WQLOgU2GU)HaB?dR#Q zKlcSP2zuH)Fj^mvIU%#&yIhZ%gfG_oe+F8wYwERY^;(_YUX6y*dl5qbZ3ad*od-d%_D`MI9_ zgH81V^KhvZy3~j|S)zweL8uIT{$~7G!HGFn7ajIZ#qAW<`5lNz03_Y@H3IIfj`iJo>+^FdZBI)?j(AoA0kpk@*ZAj t!W^PQNQoxV!hYrgHq0j;Hy$V literal 0 HcmV?d00001 diff --git a/data/layouts/Route16_NorthEntrance_1F/map.bin b/data/layouts/Route16_NorthEntrance_1F/map.bin new file mode 100644 index 000000000000..c41db67b6e35 --- /dev/null +++ b/data/layouts/Route16_NorthEntrance_1F/map.bin @@ -0,0 +1 @@ +23333333332222222222222222222222222222222222           222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/Route17/border.bin b/data/layouts/Route17/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/Route17/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/Route17/map.bin b/data/layouts/Route17/map.bin new file mode 100644 index 000000000000..24ce3c11f7a1 --- /dev/null +++ b/data/layouts/Route17/map.bin @@ -0,0 +1 @@ +,>3 3!3"3>3?3>3?3 3!3"3?3>3,#$3(3)3*3F3G3F3G3(3)3*3G3,3%&%$%$%$%,+>3(3)3*3>3?3>3?3(3)3*3?3F3->3"######,343(3)3*3F3G3F3G3(3)3*3G3>35F3*+,>3(3)3*3>3?3>3?3(3)3*3?3>3>3*,F3(3)3*3F3G3F3G3(3)3*3G3F3F3*,#$3(3)3*3>3?3>3?3(3)3*3?3,3%>3*+,+>3(3)3*3;3<3<3=3(3)3*3G3F3-F3*+++++,343(3)3*3C3D3D3E3(3)3*3?3>35>3313131313141),F3(3)3*3C3D3D3E3(3)3*3G3F3*,>3(3)3*3C3D3D3E3(3)3*3?3>3?3>3?3>3?3>3?3*,#$3(3)3*3C3D3D3E3(3)3*3G3F3R3R3R3R3R3R3,3%*,+>3(3)3*3C3D3D3E3(3)3*3?3>3R3R3R3R3R3R3F3-*,343(3)3*3C3D3D3E3(3)3*3G3F3R3R3R3R3R3R3>35*,>3(3)3*3K3L3L3M3(3)3*3?3>3R3R3R3R3R3R3?3*,F3(3)3*3F3G3F3G3(3)3*3G3F3R3R3R3R3R3R3G3*,#$3(3)3*3>3?3>3?3(3)3*3?3>3R3R3R3R3R3R3,3%*,+>3(3)3*3F3G3F3G3(3)3*3G3F3R3R3R3R3R3R3F3-*,343(3)3*3>3?3>3?3(3)3*3?3>3R3R3R3R3R3R3>35*,F3(3)3*3F3G3F3G3(3)3*3G3F3R3R3R3R3R3R3G3*,>3(3)3*3>3?3>3?3(3)3*3?3>3R3R3R3R3R3R3?3*,#$3(3)3*3F3G3F3G3(3)3*3G3F3R3R3R3R3R3R3,3%*,+>3(3)3*3>3?3>3?3(3)3*3?3>3?3>3?3>3?3>3F3-*,343(3)3*3F3G3F3G3(3)3*3G3;3<3<3=3F3G3F3>35*,>3(3)3*3>3?3>3?3(3)3*3?3C3D3D3Q3<3<3=3?3*,F3(3)3*3F3G3F3G3(3)3*3G3C3D3D3D3D3D3E3G3*,#$3(3)3*3>3?3>3?3(3)3*3?3K3L3L3P3D3D3E3,3%*,+>3(3)3*3F3G3F3G3(3)3*3G3F3G3F3K3L3L3M3F3-*,343(3)3*3>3?3>3?3(3)3*3?3>3?3>3?3>3?3>3>35*,F3(3)3*3F3G3F3G3(3)3*3G3F3G3F3G3F3G3F3G3*,>3(3)3*3>3?3>3?3(3)3*3XYYZ 3!3"3>3?3*,#$3(3)3*3F3G3F3G3(3)3*3`aab(3)3*3F3,3%*,+>3(3)3*3>3?3>3?3(3)3*3`aab(3)3*3>3F3-*,343(3)3*3F3G3F3G3(3)3*3`aab(3)3*3F3>35*,>3(3)3*3>3?3>3?3(3)3*3`aab(3)3*3>3?3*,F3(3)3*3F3G3F3G3(3)3*3`aab(3)3*3F3G3*,#$3(3)3*3>3?3>3?3(3)3*3`aab(3)3*3>3,3%*,+>3(3)3*3F3G3F3G3(3)3*3`aab(3)3*3F3F3-*,343(3)3*3>3?3>3?3(3)3*3`aab(3)3*3>3>35*,F3(3)3*3F3G3F3G3(3)3*3`aab(3)3*3F3G3*,>3(3)3*3>3?3>3?3(3)3*3`aab(3)3*3>3?3*,#$3(3)3*3F3G3F3G3(3)3*3`aab(3)3*3F3,3%*,+>3(3)3*3>3?3>3?3031323`aab(3)3*3>3F3-*,343(3)3*3F3G3F3G3F3G3F3`aab(3)3*3F3>35*,>3(3)3*3XYYZ8393:3`aab(3)3*3>3?3*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3>3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3F3F3-*,343(3)3*3`aab@3A3B3`aab(3)3*3>3>35*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3F3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3>3F3-*,343(3)3*3`aab@3A3'`aab(3)3*3F3>35*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3>3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3F3F3-*,343(3)3*3`aab@3A3B3`aab(3)3*3>3>35*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3F3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3>3F3-*,343(3)3*3`aab@3A3B3`aab(3)3*3F3>35*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3>3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3F3F3-*,343(3)3*3`aab@3A3'`aab(3)3*3>3>35*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3F3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3>3F3-*,343(3)3*3`aab@3A3B3`aab(3)3*3F3>35*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3>3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3F3F3-*,343(3)3*3`aab@3A3B3`aab(3)3*3>3>35*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3F3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3>3F3-*,343(3)3*3`aab@3A3'`aab(3)3*3F3>35*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3>3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3F3F3-*,343(3)3*3`aab@3A3B3`aab(3)3*3>3>35*,F3(3)3*3`aab@3A3B3`aab(3)3*3F3G3*,>3(3)3*3`aab@3A3B3`aab(3)3*3>3?3*,#$3(3)3*3`aab@3A3B3`aab(3)3*3F3,3%*,+>3(3)3*3`aab@3A3B3`aab(3)3*3>3F3-*,343(3)3*3`aab@3A3B3`aab(3)3*3F3>35*,>3(3)3*3N3N3N3N3@3A3B3`aab(3)3*3>3?3*,F3(3)3*3F3G38393O3A3B3`aab(3)3*3F3G3*,#$3(3)3*3>3?3@3A3A3A3B3`aab(3)3*3>3,3%*,+>3(3)3*3F3G3H3I3I3I3`aab(3)3*3F3F3-*,343(3)3*3>3?3XYYYYdaab(3)3*3>3>35*,F3(3)3*3F3G3`aaaaaaab(3)3*3F3G3*,>3(3)3*3>3?3`aaaaaaab(3)3*3>3?3*,#$3(3)3*3F3G3`aaaaaaab(3)3*3F3,3%*,+>3(3)3*3>3?3`aaaaaaab(3)3*3>3F3-*,343(3)3*3F3G3`aaaaaaab(3)3*3F3>35*,>3(3)3*3>3?3`aaaaaaab(3)3*3>3?3*,F3(3)3*3F3G3`aaaaaaab(3)3*3F3G3*,#$3(3)3*3>3?3`aaaaaaab(3)3*3>3,3%*,+>3(3)3*3F3G3`aaaaaaab(3)3*3F3F3-*,343(3)3*3>3?3`aaaaaaab(3)3*3>3>35*,F3(3)3*3F3G3`aaaaaaab(3)3*3F3G3*,>3(3)3*3>3?3`aaaaaaab(3)3*3>3?3*,#$3(3)3*3F3G3`aaaaaaab(3)3*3F3,3%*,+>3(3)3*3>3?3`aaaaaaab(3)3*3>3F3-*,343(3)3*3F3G3`aaaaaaab(3)3*3F3>35*,>3(3)3*3>3?3`aaaaaaab(3)3*3>3?3*,F3(3)3*3F3G3`aaaaaaab(3)3*3F3G3*,#$3(3)3*3>3?3`aaaaaaab(3)3*3>3,3%*,+>3(3)3*3F3G3`aaaaaaab(3)3*3F3F3-*,343(3)3*3>3?3`aaaaaaab(3)3*3>3>35*,F3(3)3*3F3G3`aaaaaaab(3)3*3F3G3*,>3(3)3*3>3?3`aaaaaaab(3)3*3>3?3*,#$3(3)3*3F3G3`aaaaaaab(3)3*3F3,3%*,+>3(3)3*3>3?3N3N3N3N3N3N3N3N3N3(3)3*3>3F3-*,343(3)3*3F3G3F3G3F3G3F3G3F3G3F3(3)3*3F3>35*,>3(3)3*3>3?3>3?3>3?3>3?3>3?3>3(3)3*3>3?3*,F3(3)3*3F3G3F3G3F3G3UG3F3G3F3(3)3*3F3G3*,#$3(3)3*3>3?3XYYYYYYYZ(3)3*3>3,3%*,+>3(3)3*3F3G3`aaaaaaab(3)3*3F3F3-*,343(3)3*3>3?3`aaaaaaab(3)3*3>3>35*,F3(3)3*3F3G3`aaaaaaab(3)3*3F3G3*,>3(3)3*3>3?3`aaaaaaab(3)3*3>3?3*,#$3(3)3*3F3G3`aaaaaaab(3)3*3F3,3%*,+>3(3)3*3>3?3`aaaaaaab(3)3*3>3F3-*,343(3)3*3F3G3N3N3N3N3N3N3N3N3N3(3)3*3F3>35*,>3(3)3*3>3?3>3?3>3?3>3?3>3?3>3(3)3*3>3?3*,F3(3)3*3F3G3F3G3F3G3F3G3F3G3F3(3)3*3F3G3*,>3031323>3?3>3?3>3?3>3?3>3?3>3031323>3?3*,F3G3F3F3F3G3*0 ###$ 3!3"3?3>3?3 3!3"3"# #1+++,(3)3*3G3F3G3(3)3*3*+++++,(3)3*3?3>3?3(3)3*3*++++,(3)3*3;3<3=3(3)3*3*++++,(3)3*3C3D3E3(3)3*3*++++,(3)3*3C3D3E3(3)3*3*++++,(3)3*3C3D3E3(3)3*3*++++,(3)3*3C3D3E3(3)3*3*+++,(3)3*3C3D3E3(3)3*3*+++++,(3)3*3C3D3E3(3)3*3*+++++,(3)3*3C3D3E3(3)3*3*+++++,(3)3*3C3D3E3(3)3*3*+++++,(3)3*3C3D3E3(3)3*3*+++++,(3)3*3C3D3E3(3)3*3*+++++,(3)3*3K3L3M3(3)3*3*+++,(3)3*3G3F3G3(3)3*3*+++++,(3)3*3?3>3?3(3)3*3*++++,(3)3*3G3F3G3(3)3*3*+++,(3)3*3?3>3?3(3)3*3*++,031323F3G3031323*++,>3*++,0 00 00 00 00*+ \ No newline at end of file diff --git a/data/layouts/Route18/border.bin b/data/layouts/Route18/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/Route18/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/Route18/map.bin b/data/layouts/Route18/map.bin new file mode 100644 index 000000000000..9e246b459ac8 --- /dev/null +++ b/data/layouts/Route18/map.bin @@ -0,0 +1 @@ +++000000000+++,++00 00 00 000++,+,000000000*++++,++,00 00 00 000*+++++++,000000000*++++++,00 00 00 00 0*++++++++++,&%$%$%$%$%$%$%$%$%$%$%$%$%+++,0 00000000mnnnnnnnnnnnnoDEEEEF+++,000000000031313131313131313131313131311LMMMMN1 00 0+++,01000001000000000000000000000000081<100000000000+++,000000000000000000000000000000000@1D100000000000+++,000000000000000000000000000010000H1deeeefL100000000000+++jffffffffffffffffffffffffffffffg 00++++++++++++++++++++++++++++++++,0 00 00 00000 0++++++++++++++++++++++++++++++++,0 0 0 0 0 0 0 0 000+++++++++++++++++++++++++++++,0 0 0 0 0 0 00+++++++++++++++++0 0 0 0 0 0 0 0+++++++++0 0 0 0 0 0 00+++++++++++++,0 00 00 00 0&%$%$%++++++++,"####$0##########10 \ No newline at end of file diff --git a/data/layouts/Route19/border.bin b/data/layouts/Route19/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/Route19/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/Route19/map.bin b/data/layouts/Route19/map.bin new file mode 100644 index 000000000000..54388bc491e8 --- /dev/null +++ b/data/layouts/Route19/map.bin @@ -0,0 +1 @@ +psqqqu1111111111sqqqurpsqqqu1111111111sqqqurpsqqqu111111111sqqqurpsqqqu11sqqqurpsqqqu111111111{qqurpsqqqu11qsqqurp{q}111111111qsq}rpq{|}q11q{|}qrx|||||1111111111|||||z##### !11111111  #####+++,11111111*+++,11111111*++0!111111*+++0#!11111*+++++0#####1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/data/layouts/Route2/border.bin b/data/layouts/Route2/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/Route2/map.bin b/data/layouts/Route2/map.bin new file mode 100644 index 000000000000..1d093f92b2f3 --- /dev/null +++ b/data/layouts/Route2/map.bin @@ -0,0 +1 @@ + 0000$%$%$% 0000$%$%$%$%$% 0 0 0 0 0 0 0000 0 0 0 0 0 0 00000 00 00 00 00 0 0 0 0 0 0 0000000000000 0 0 0 0 0 0 00000 00 00 00 00 0 0 0 0 0 0 0000hiiiiiij0 0 0 0 0 0 0 0000pkllllmr 0 0 0 0 0 0 0 0000psqqqqur00 000000100psqqqqur00000000000p{||||}r 00 000010000xyyy0yyz000000000 0000000000x1y1y1z10000000000DEEEEEEF 00 000000000LMMMMMMN000000000000LMMMMMMN0000000 0000000000 00 00 00 000000000,0-0-0-0/0 00 046657000<=?0000000000000000000000000000000 00 00 00000000 00 00 000000000 00 00 00000000 00 00 0000000000000000000 0000000x1y1y1z1DEEEEFLMMMMND0E0E0E0E0E0E0F0pqLMMMMMMNd11fLMMMMMMN1111 00000 0000000\]0]0^000000de11ef$%$%0111100000 00000000 00 00 000000000000000000000000 0 00 00000000000 0 0 0 0 0 0 000 0000 00000 0 0 0 0 0 0 0000000 0 0 0 0 0 0 0 00 000000000 0 0 0 0 0 0 000000000000 0 0 0 0 0 0 000 0000 000000 00 00 00 0&'00000000000000000000000000000000000 0000000000000000000000000&%$%$%$%00 0000000100000000000000000000000000&'0000000000000001000 0000000000000000000001000 00 00 00010000100000000000 00 00000000000000000000000000001000010000000000000101000000000000 00000000000000000000 0000 \ No newline at end of file diff --git a/data/layouts/Route20/border.bin b/data/layouts/Route20/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/Route20/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/Route20/map.bin b/data/layouts/Route20/map.bin new file mode 100644 index 000000000000..534a7034d381 --- /dev/null +++ b/data/layouts/Route20/map.bin @@ -0,0 +1 @@ +++++++++++++++++++++++++++++++++++++++++++++klm+++++++++++++++++++++++++kqm++++++++++++++++++++++++++++++++++++++++++++++++++++sqsqqququ+(22222222)+++++++++++++++++++++++++ 1 11+++++++++++++++++++++++(sq{q}quu22111111112)++++++++++++++++++++++++++++ 1%11&1 11++++++++++++++++++++{q{|}q}111111111112)+++++++++++++++++++++++++++++++++++++++++++++++++11111&11+++++++++++++++++++++{qqq}1111111*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++11111.11++++++++++++ 1 1 1 11+++++++,1{|||}1111klm11*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++111111+++++++++++++1111&11+++++11yy0yy111kqm1*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++111111+++++111111111111sqsqqququ*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++11-1111++++++0!11111111111sq{q}quu++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++1111+++++++,1111111 ##!{q{|}q}u+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 11+++++++++++++++++++0#######1+{qqq}}*+++++++++++++++++++++++++++++++++++++++++++++++++++ 1 11++++++++++++1.11+++++++++++++++++++++++++++1{|||}} 1++++++++++++++++++++++++++++++++++++++++++++++++ 1%111++++++++++++11+++++++++++++++++++++0!yy0yy} 1+++++++++++++++++++++++++++++++++++++++++++++++++1111++++++++++++++++++++++++++++++++++++++,1111111 1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0##!1111*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++0####1+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/data/layouts/Route21_North/border.bin b/data/layouts/Route21_North/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/Route21_North/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/Route21_North/map.bin b/data/layouts/Route21_North/map.bin new file mode 100644 index 000000000000..02a4bcd546be --- /dev/null +++ b/data/layouts/Route21_North/map.bin @@ -0,0 +1 @@ +*++,*++,0 00 00 0*++,000000*++,0 00 00 0*++,000000*++, 0 0 0 0 0 0*++, 0 0 0 0 0 0*++, 0 0 0 0 0 0*++, 0 0 0 0 0 0*++, 0 0 0 0 0 0$%$%$%*++, 0 0 0 0 0 0*++0###### #####*+++++++++++$%$%$'*+++++++++++*++++++++++##### 1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 1 11+++++++++++++ 1%1111+++++++++++++++111.11+++++++++++++++1111+++++++ 1 1 11+++++++++++++++ 1%111&1 11+++++++++++++1111111+++++++++++++1111111+++++++++++++111-11.11++++++++++++++++111+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 11++++++++++++++ 1%11&11+++++++++++++11111+++++++++++++111.11++++++++++++++1111+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/data/layouts/Route21_South/border.bin b/data/layouts/Route21_South/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/Route21_South/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/Route21_South/map.bin b/data/layouts/Route21_South/map.bin new file mode 100644 index 000000000000..30c2cba6f893 --- /dev/null +++ b/data/layouts/Route21_South/map.bin @@ -0,0 +1 @@ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 11++++++++++++++11&1 11++++++++++++1-1111++++++++++++1111+++++++++++++++++++++++++++++++++++++++++++++++++++ 1 1 1 11++++++++++ 1%11111++++++++++++1111.11++++++++++++1-1111++++++++++++++1111++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 1 1 1 11++++++++++++11111&11++++++++++++1-111111++++++++++++++1-11111+++++++++++11111+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 1 11++++++++++ 1 1%1111++++++++++1111.11++++++++++11111++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++(22)++++++++++,00*++++++++++++,00*+++++(222222200*+++++,222222201*++++ \ No newline at end of file diff --git a/data/layouts/Route22/border.bin b/data/layouts/Route22/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9CV literal 0 HcmV?d00001 diff --git a/data/layouts/Route22_NorthEntrance/map.bin b/data/layouts/Route22_NorthEntrance/map.bin new file mode 100644 index 000000000000..1452ebb13138 --- /dev/null +++ b/data/layouts/Route22_NorthEntrance/map.bin @@ -0,0 +1 @@ +2231332223133222233/4322233/432222225363732225363732222203.3232222203.323222233/432222233/432222536373222225363732222203.32322203.32322222233/4322233/4322225363732225363732 \ No newline at end of file diff --git a/data/layouts/Route23/border.bin b/data/layouts/Route23/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/Route23/map.bin b/data/layouts/Route23/map.bin new file mode 100644 index 000000000000..f6f5f5662dd5 --- /dev/null +++ b/data/layouts/Route23/map.bin @@ -0,0 +1 @@ +qqqqqqyy222yyqqqqqqqz2222222xy22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 02222222222222222220000 00 0222222222 00 00 000000000000000000000hiiiiiiiiiiiiiiij0 00pklllllllllllllmr000psqqqqqqqqqqqqqur0 00psqqqqqqqqqqqqqur0 00psqqqqqqqqqqqqqur000psqqqqqqqqqqqqqj00psqqqqqqqqqqqqqqquj0p{||||||qqqq|||}r0xy0yysqqqquy0yz00222psqqqqur0 00 000 02220 0psqqqqur0000002220psqqqqur000 00 002220 0psqqqqur00 000022200psqqqquiiiij022222psqqqqllmqqr2220psqqqqqqquqqr0 02220psqqqqqqquqqr0022200p{qqqqqquqqr02220pqsqqqqqquqqr002220pq{||||||}qqr222220pqqqqqqqqqqqr0222 0xyyyyyyyyyyyz 02220 00 0 0 0 00 0 0 00000000 0 0 0 0000000222200 000 0 0 00000000000 00022222222200002222220 000 00022222222222200000002222220 00 00 00222222000000000022222222220000 00 022200000000002222222222222222222222222222222222 0 022200 0 0 0 02220000 0 0 0 0 00 00000 0 0 0000000 0 0 0 0 0 0 0 0 0000 0 0 0 0 0 0000 0 0 0 0 0 0 000 00 000000000 0 0 0 000 00 0 0 00000000 0 0 0 00 0000 0 0 000000 0 00 00000 0 0 0 0 00000 0000 0 0 0 0 00 000000 0 0 0 0000000000 00 00 0.1111111-12222221++++++11++++++11++++++11++++++12112121++++++12121132++++++++++++++++++32++++++++++++++++++32++++++++++++++++++32++++++++++++++++++32++++++++++++++++++3 3()*+,!3%&'-./++++++.1$+++#31121121-11++++++++++++11++++++++++++11++++++++++++11++++++++++++11++ 1 1 1 1 11++++11++111111++++11++111111++++11++111111++++13121++111111++++13+++++++++++++++13+++++++++++++++13+++++++++++++++1 3()*+,2%&'-./++++++3112211211$+++#3112133++++++++++++++++++33++++++++++++++++++33++++++++++++++++++33++++++++++++++++++3 3+++!32222222222222222222222222222222220222222222222222222002222222222222222220000222222222222222220 002220002220002220 002220002002220020020020 00 0 02220 0000 00 0000000000000000000000 00 00 0000 00 0000 00 02222222222222222222222222222220 0222002002002000000222 02222222222000 00000222222222200 00 0 022222222222222222222222222222222222200200222 00222222222 00 00$'2222222220 00 0&%222222222000000'222iiiiiqqujhsqqqqqujqqurpsqqqqqurqqurpsqqqqqurqqurpsqqqqqur&%qqurpsqqqqqiiqqurpsqqqqqqqqq \ No newline at end of file diff --git a/data/layouts/Route24/border.bin b/data/layouts/Route24/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9C>>>>>>>>>qur00 0 000 0000W0 00 00 00 00 0qur0000000000W000hiiiiii}r00 00 0 00000W0 00pqklllluqr00 0000 0000W000pqsqqqquqr 000 00 00000W0 00pkqqqquqr000"#$000M000psqqqqquqr 00 0*+,2220 00psqqqqquqr000*+,222000psqqqqquqr 0 0 0*+,2220 00psqqqqquqr 0 0 0*+,222000psqqqqquqr 0 0 0*+,2220 00psqqqqquqr 0 0 0*+,222000p{qqqquqr 0 0 0*+,2220 00pqsqqqquqr 0 0 0*+,222000pqsqqqquqr 0 0 0*+,2220 00x{||||uqr 0 0 0*+,222000x|||||uqr 0 0 0*+,2220 00"#####mr 0 0 0*+,222000*+qur 0 0 0*+,2220 00*+qur 0 0 0*+,222000*qur 0 0 0*+,2220 00*quj"#1+,222000*ququ*+++,2220 00*ququ*+++,222000*qmu*+++,2220 00*qquu*+++,222000*qquu*+++,2220 00*qquu*+++,222000*qquu*+++,2220 00* \ No newline at end of file diff --git a/data/layouts/Route25/border.bin b/data/layouts/Route25/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?000000*000000000000000000000000000000000000000000000000 0*iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiij00313131313131000003131313131310*lllllllmqqqqqqqqqqqqqqqqklllllllmqqqqqqqr*qqqqqqqlllllllllmqqqqqqsqqqqqqqlllmqqqr"####################1qqqqqqqqqqqqqqqqqllllllqqqqqqqqqqqllmu*+qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquu*qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquu*qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquu*qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqquu* \ No newline at end of file diff --git a/data/layouts/Route25_SeaCottage/border.bin b/data/layouts/Route25_SeaCottage/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/Route25_SeaCottage/map.bin b/data/layouts/Route25_SeaCottage/map.bin new file mode 100644 index 000000000000..dbf7d06ba9de --- /dev/null +++ b/data/layouts/Route25_SeaCottage/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/Route2_Entrance/border.bin b/data/layouts/Route2_Entrance/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/Route2_Entrance/map.bin b/data/layouts/Route2_Entrance/map.bin new file mode 100644 index 000000000000..dfde7c299c6e --- /dev/null +++ b/data/layouts/Route2_Entrance/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/Route3/border.bin b/data/layouts/Route3/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9C|;JdD%BPdvfl5AGe6xC?-Z3b?nn8#%HQwm|T(} z=Sqpc4|qqAM{*RH|A4+QzB2zHWl4sd8@-kze~otk-M;<~ztrxJ<=p?T|BiZtCjuL| zt2+P9hW;EyA^ox8f0RAfWBw=AzfJ$m`RxV&P5HHou+}QbO!~b{mTc5S?N57|S>-wwImvLGc z$b6uW5q=x`t5nl<{Z}`1Q^)yj)PI%E^@U#7$Xs6GPp|(Q9WuUC6FamkutyDqb2X&b zAFkTy?Zm&SY`~!aHKf-c-<9Qem&RzEG0}y7$rm5HG>Iw3bQk(Ve}Ye!!uzztCs>wd z@Bp)zv!>sn@J{0J3U+A$_ppd1Yx<9{>^)?xc*h8D>-{*krhg3MZA>8C?;P$8($-G{ zKOzY78RWDx(@d@Z77dY%N9u7Kt4cmktG~oOjEqh7wv8<%pQl^D@xH8p`*^CJF`lb= uqvx`pOYR+$dde~u@ItM5Yu-z>Wb|Be%6FN^1sq}Bd&PLo^=a~4^85pS(12$E literal 0 HcmV?d00001 diff --git a/data/layouts/Route5_PokemonDayCare/border.bin b/data/layouts/Route5_PokemonDayCare/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/Route5_PokemonDayCare/map.bin b/data/layouts/Route5_PokemonDayCare/map.bin new file mode 100644 index 000000000000..85114f523382 --- /dev/null +++ b/data/layouts/Route5_PokemonDayCare/map.bin @@ -0,0 +1 @@ +b22222222222232222222222222 3 32222222 3 32222222222222222222222 \ No newline at end of file diff --git a/data/layouts/Route6/border.bin b/data/layouts/Route6/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/Route6/map.bin b/data/layouts/Route6/map.bin new file mode 100644 index 000000000000..c4e9b6b92bcc --- /dev/null +++ b/data/layouts/Route6/map.bin @@ -0,0 +1 @@ +DEEEEFLMMMMN$%$%$%$%$%$%$%\^0 0000 00d11f 00 00 0000000001111000000000000000 00 00 00 00000000 00 00 0000000000 00 00 00000000000000000000000D0E0E0F00LMMN0000000000000000TgUV0000000000000000d=ef00001010000001010000 0 0 0 0000 0 0 0 0 0 0000000 0 0 0 0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000100000000000 0 0 0 0 0 000000000000000 0 0 0 0 0 000000000000100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000 0 0 0 0000 0 0 0 0000 0 0 0 0000 0 0 0 0000 0 0000000000000000100 0 00 00 00 00 00000000000 0 0000000000010000000 0 0 00 0000 0 0 0 00000000000 0 0 0 00000 00 0000 0 0 0 0000000 0 0 0 000000000000000000$%$%$%$'0000########$000,000 \ No newline at end of file diff --git a/data/layouts/Route7/border.bin b/data/layouts/Route7/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/Route7/map.bin b/data/layouts/Route7/map.bin new file mode 100644 index 000000000000..08212179a4b8 --- /dev/null +++ b/data/layouts/Route7/map.bin @@ -0,0 +1 @@ +$%$%$%$%$%$%$%$%$%$%0 00 00 00 00 0 0 0 0 0 0 0 0 00000000000 0 0 0 0 0 0 0 00 00 00 00 00 0 0 0 0 0 0 0 0 00000000000 0 0 0 0 0 000&%$%0 00 00 0 0 0 0 0 0 000000000000000000D0E0E0EEF0000001LMMMMN100 00 00 00 00 0081<1000000000000@1D100 0D0E0E0F00 00 00H1deeeefL10LMMN0000TgUV 00 00 00 00 00000d=ef0000000000 00 00 000 00 0000 00000000000000000000000000000000 \ No newline at end of file diff --git a/data/layouts/Route8/border.bin b/data/layouts/Route8/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9C2>23,3,3,3j7k7E3+33>2>23,3,3D3r7s7E3+33333,3,3,3,3,3,3F3G3,3,3,3,3,3,3,3,3,3N7O7,3,3,3LM,3,3,3,3 \ No newline at end of file diff --git a/data/layouts/RustboroCity_Flat1_1F_Frlg/border.bin b/data/layouts/RustboroCity_Flat1_1F_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/RustboroCity_Flat1_1F_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/RustboroCity_Flat1_1F_Frlg/map.bin b/data/layouts/RustboroCity_Flat1_1F_Frlg/map.bin new file mode 100644 index 000000000000..017298e71601 --- /dev/null +++ b/data/layouts/RustboroCity_Flat1_1F_Frlg/map.bin @@ -0,0 +1 @@ +8()*:888:8x88:H0 2B@@@B@VWBP3+3+3+3+3+3+3+3+3+33^3_3+3+3D3,3,3,3,3,3,3{3|3|3|3|3}3+3h7i7,3,3,3,3,332H6I623+3p7q7E3,3,3,3,33>2P6Q623F3G3,3,3,3,3,3,3333333N7O7,3,3,3,3LM,3,3,3,3,3,3 \ No newline at end of file diff --git a/data/layouts/RustboroCity_Flat1_2F_Frlg/border.bin b/data/layouts/RustboroCity_Flat1_2F_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/RustboroCity_Flat1_2F_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/RustboroCity_Flat1_2F_Frlg/map.bin b/data/layouts/RustboroCity_Flat1_2F_Frlg/map.bin new file mode 100644 index 000000000000..17a6113437e6 --- /dev/null +++ b/data/layouts/RustboroCity_Flat1_2F_Frlg/map.bin @@ -0,0 +1 @@ +8()*:888:8888:@02B@@@BT7UIB+3+3+3+3+3+3+3+3+3\3?3]3Q3+3+3,3,3,3,3,3,3,3{3|3|3|3}3,3+3D3~777E3,3,33>2>2>23,3+3,3777E3,3,33>2>2>23,3+3G3G3,3,3,3,3,333333,3+3O7O7,3,3,3,3,3,3,3,3,3,3,3 \ No newline at end of file diff --git a/data/layouts/RustboroCity_Flat2_1F_Frlg/border.bin b/data/layouts/RustboroCity_Flat2_1F_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/RustboroCity_Flat2_1F_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/RustboroCity_Flat2_1F_Frlg/map.bin b/data/layouts/RustboroCity_Flat2_1F_Frlg/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..0f6829f9c3bd9583f029598e5824a3a5f4d390c7 GIT binary patch literal 252 zcmcCuw_w*`*JRgXzs_a>WLtu91(390cK|{Ic5Wskb_Oup5lA|+H?W7XhqG%N!yp3^ zyTdrnI36gY1BDg)-(088=#GVIsEy$G?U^^f- bJ_pOqX9Kw$0zqnhn0=Xb!0v^RFqZ=WF%~S( literal 0 HcmV?d00001 diff --git a/data/layouts/RustboroCity_Flat2_2F_Frlg/border.bin b/data/layouts/RustboroCity_Flat2_2F_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/RustboroCity_Flat2_2F_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/RustboroCity_Flat2_2F_Frlg/map.bin b/data/layouts/RustboroCity_Flat2_2F_Frlg/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..9f3750fb4b4c47b4934ddc925b7b02eb66e43611 GIT binary patch literal 252 zcmdO3*JO_ZVlDRTY-#N2?3U~nU~B=T4cNJvlGr7gjMy32^Vsv*9oZeg*qPm#UE3H2 z8Q9B=%i%mfb3b!!V;v}D0IGwrb&NC2GjYhd7#ElqV#v)kk~4-uggN)wK(4`QFkOR3_2kuS~4*;T*EtvoS literal 0 HcmV?d00001 diff --git a/data/layouts/RustboroCity_Flat2_3F_Frlg/border.bin b/data/layouts/RustboroCity_Flat2_3F_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/RustboroCity_Flat2_3F_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/RustboroCity_Flat2_3F_Frlg/map.bin b/data/layouts/RustboroCity_Flat2_3F_Frlg/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..2112fe7996c14ee9705ac8734c7a11f9ce5a39bf GIT binary patch literal 252 zcmdO3*JRgXw_v}{R>@ukq%EP?0!SOMOEMX;JFqjbH?lXed$KzM*^cZX?B?vD?Apc< z$iUud++`dH<;57=8^;3KI$+2ERHb8FZCnF}wO}z+xo+bgFzm%5r(-3?3 \ No newline at end of file diff --git a/data/layouts/SSTidal_Corridor/border.bin b/data/layouts/SSTidal_Corridor/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/SSTidal_Corridor/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SSTidal_Corridor/map.bin b/data/layouts/SSTidal_Corridor/map.bin new file mode 100644 index 000000000000..f8cf1725df61 --- /dev/null +++ b/data/layouts/SSTidal_Corridor/map.bin @@ -0,0 +1 @@ +2222222222222222 6222222222222222222201111111111222222011111111112222220111111111122222201111111111222222%#$"#$"#$"#&22222-+6{*+6{*+6{*+622222222222222222222 22222222222222222 \ No newline at end of file diff --git a/data/layouts/SSTidal_LowerDeck/border.bin b/data/layouts/SSTidal_LowerDeck/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/SSTidal_LowerDeck/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SSTidal_LowerDeck/map.bin b/data/layouts/SSTidal_LowerDeck/map.bin new file mode 100644 index 000000000000..059ce30fe4b0 --- /dev/null +++ b/data/layouts/SSTidal_LowerDeck/map.bin @@ -0,0 +1 @@ +22222222 22 22 22 2 2 22 2222 2222 22222 2 2 22222222 222 2222 2 2 22222 2 22222 2 2222222222222222 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2222222222 222 222 2 22222 2662222222 2 \ No newline at end of file diff --git a/data/layouts/SSTidal_Rooms/border.bin b/data/layouts/SSTidal_Rooms/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/SSTidal_Rooms/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SSTidal_Rooms/map.bin b/data/layouts/SSTidal_Rooms/map.bin new file mode 100644 index 000000000000..6103ad0c2268 --- /dev/null +++ b/data/layouts/SSTidal_Rooms/map.bin @@ -0,0 +1 @@ +6@kcmE@kcmE@kc''@kcmE7>HsuMHsuMHs////uM?>PQ:2;2;2TUPQ:2;2;2TUPQ:2;2;2;2;2;2;2;2TU?>XY=28282\]XY=28282\]XY=282828282828282\]?>:;2<28282;2;2:;2<28282;2;2:2;2<282828282w682828282;2;2?>=2828282828282w68282VW8282=282`2VWa282=28282828282a2?>=2828282VW82=282`2^_a282=282`2^_a282=282828282VW?>=28282`2^_b=2828282828282=2828282b8282=2828282`2^_?6@klvlmElvllCDE@lvlvmE@kv'vmE7>Hst~tuMt~ttKij/t~t~uMHs~/~//?>PQ:2;2;2TU:2;2;2;2;2qr66;2;2;2TUPQ:2;2;2;2|2?>XY=28282\]=2VW8282yz828282\]XY=2VppW?>:;2<28282;2|2=2^_a282;256=282828282;2;2h;2<2^xx_?>=2828282828282=2828282828282=2828282828282=28282`2828282?>=2828282828282=2828282828282=2828282828282=2828282828282?>=28282de8282=28282de8282=28282de8282=28282de8282? \ No newline at end of file diff --git a/data/layouts/SafariZone_Center/border.bin b/data/layouts/SafariZone_Center/border.bin new file mode 100644 index 000000000000..964b51edb7e9 --- /dev/null +++ b/data/layouts/SafariZone_Center/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SafariZone_Center/map.bin b/data/layouts/SafariZone_Center/map.bin new file mode 100644 index 000000000000..f1fe437e9750 --- /dev/null +++ b/data/layouts/SafariZone_Center/map.bin @@ -0,0 +1,6 @@ + %&'%&'#%&' #7       22    0 00 00 0000000 0000000000 00 00 0 000 00 0 %&'00000 0 0 0 000000 00 00000 0 0 0 0 00000000#0 0 0 0 0 0 0 0 0 0 00 000000 0 0 0 0 0 0 0 0 0 000100 00 0 0 0 0 0 0 0 0 0000000 0 0 0 0 0 0 0 0 0 0 0 00000#%&'0 0 0 0 0 0 0 0 0 0 00 00 00 0 0 0 0 0 0 0 0 0 0 0 0 00000 %&'00 0 0 0 0 0 0 0 0000000 0 0 0 0 0 0 0 0 0 0 0 001000#0 0 0 0 0 0 0 00000 00 00 0 0 0 0 0 00 0 0 0 0000000 000 0 0 000 0"##############$0 00 000000   0 00 0 000 0 0*++++++++++++++,   0000000 0 0*++(3131313131313131)++,0 00 000 00 0200000 0 0 0 0*++,0 0000 00 0*++,0000 0000022001010 0 0 0*++0########1++, 0 00000 00 0  +  + 20000000 0 0*++++++++++++++, 0 0 0 000000  +  +  +00000100031313131313131313131313131310 0 0 0 0 0000 !" !" 0000000 0 000 0 0 0 0 0 0 00#%& !"   !"0 00 0000 00 00 00 0 00 0 0 0 0 0 0 0 00 %&'0 00 00 0000000000100022222000 0 0 0 00 00#00000 0 0 0 0 0 0 0 001000 000 0 0 0 0 0 0 00 0 00 0 0 0 0 0 0 0 0 0 0 00000000 0 0 0 0 0 000#%&'0000 0 0 0 0 0 0 0 0 0 00000 00 0 0 0 0 00 00 0 0 00 00 0 0 0 0 0 0 0 00 000000 0 00 0 0 0 0 000000#00000 0 0 0 0 0 0 0 0 0 0 0 00 00 00 0 0 0 0 00 00 00 0 0 00 0000 0 0 0 0 0 0 00 00 00 00 00 0 0 0 00000000#3333333333330 0 00000 00 0333333333333 222222#%&'  " !"   " !" !"     %&'%&'%&'" "  \ No newline at end of file diff --git a/data/layouts/SafariZone_East/border.bin b/data/layouts/SafariZone_East/border.bin new file mode 100644 index 000000000000..964b51edb7e9 --- /dev/null +++ b/data/layouts/SafariZone_East/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SafariZone_East/map.bin b/data/layouts/SafariZone_East/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..28a9cafb73c140198eaaaeb1b2966757dab3255a GIT binary patch literal 3780 zcmb_fJ985;5Vjpz>jN8n1PE{P;uTWJc1Oj)pUI?ROp^ruKuZ1!6f`^s0mLL*JG~s2es% zyki<%+!v{&>%XDyq_@+@k-F=Ou)b`LhSFj*xJ;fbFNkqAhJ|!7eIlNU7n#53qncRD zamBG5NV_kRSGx;W<2nH*bJARmbzgo|UbIT}j4Ux#KV?NmA?J)Y@c zo)Ae{GkZ&WScA|QQ`Lf(|^JSGpWF4)MRZyk1t9j`5H(D8A$VZ{I zde^Bhze@txojQ<)&`4EF5f`gHs&Y50@ICF##YNfidu6QqV@=u4Ql!A-i&(R#YmE0V z%8uVD`y!_B14*c=t)A8=uDeAl9McWAQ*H|Cm4;2IH(0#`NxINunn<-h(25>2qZ_u4 zhSKen{VMfJlVQ|2RJS-*+KqWag(Du?Iy#VHm!x=`$|zijg}4&;fx9(r2A8d)p|spK z9TO`{*VGtesZ-8s&>hWh!}{XAlIEfJqwU~n?mwWgmiHxgYTl#6c*1Y}ouTvJhrDo} u(46*pPQ!S@Z^IpaGASW{hvt5dcJHC+Th4*-WQvx*L-P>D(RTRB-MX5cNvqX$e@+Vm`xHume;9hmrOVQ28}fPLxlv{{ct-3LLobaRE-i#nFLE zR0Y^l!GW8CFCt-j-nP1TM{?w<)ReYHquqY}x?lIU{m}pGFa1Mv{m(!0k3FvM(fjlP zUH8P^Z!KeQf5qP3^D@0cuhMl-?EP2U-{wR9)b1x1eVhG#@-GEOkF@@r48swz4y^)#t3IrJ5sLII+h!~L zy+~MX48>+Y6t4{5_;1tt&Q}2(tpX8e^}!MFtc4Z*RRZe!p~{L}l3@Pq%_{}|U# z5fL2UqPOXtrpmxkePE9IGZXHM-mtJ(ind*p5C4j?NmDiAK4mfrjhSTh%}x+Yz_*9Lo{*W?3|WHwbOS{V_*EdjDN_;=b7XeDB14 zmDmbLwSU=67nb8yh=Uk8i^zGd)^8e78^;;(J#O--_8+$<9QI_DVrCVCjv#TXBBEBt zJfR_n$OdY3wnohB(W3L-5p$eH&qbs59o5w$>+(+Opy)Bc}rv9 zdF} zSkrBIllL5pjy#@6wU3e_mcET=5s#hzwkg)=1EN*iy}?o6Al!2}D&WXgr4#U8ZSRV> zt>>r@F1~l6lD-2+(JUk0ZR-2Pof?i@_fq-1({t}ye6%q83h2I)=Hp0|-l^+7p~A|fkC5T!1;>)7eEj2Ym0E~j`{i3d4#9CaO`#x;h3NQ4?7ZC3jhEB literal 0 HcmV?d00001 diff --git a/data/layouts/SafariZone_RestHouse_Frlg/border.bin b/data/layouts/SafariZone_RestHouse_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SafariZone_RestHouse_Frlg/map.bin b/data/layouts/SafariZone_RestHouse_Frlg/map.bin new file mode 100644 index 000000000000..caec48cdc728 --- /dev/null +++ b/data/layouts/SafariZone_RestHouse_Frlg/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SafariZone_SecretHouse/border.bin b/data/layouts/SafariZone_SecretHouse/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SafariZone_SecretHouse/map.bin b/data/layouts/SafariZone_SecretHouse/map.bin new file mode 100644 index 000000000000..8acbf7b90d53 --- /dev/null +++ b/data/layouts/SafariZone_SecretHouse/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SafariZone_West/border.bin b/data/layouts/SafariZone_West/border.bin new file mode 100644 index 000000000000..964b51edb7e9 --- /dev/null +++ b/data/layouts/SafariZone_West/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SafariZone_West/map.bin b/data/layouts/SafariZone_West/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..f2f943b69f006ac1fa9d8927d5b114f4cab6aabf GIT binary patch literal 3456 zcmbtW$!-%t5RIKq)ff`6A#9d_Fkwvsj6FXP@imAO%8BF;IPxoS-~wSs>|0_`l=zgy zNG#$K;u8s7Q&ZD5i)|rPa!=1p&+AvOmUb6L5D@V31)RcZoWYC8%(H6- z@ptQY;W(balQDmu--G+HEymvQb2kp+?{p~AT;nqn_QH*$N}nSAT^x%ve+Z9admMRJ z$1&W8`_(ue;eTs>Z+6V2^`G>YyL23Nti_iX@Dg6ZYxoTBql_Z8^X3JWz_Z5u`K}V( z2@ZLoV=b}x03YEKEWsCe67!d@36D@K!BVhntz~DNKh>ZX(2w&+>+fRCzL2(;!sXy{ z*b25_udR+zl&`B12HmX(rm+?bH(CSvyZm9DN!!(6&05>yAGFGkqp+6iuqoLcHtZg4 z%b4^R26_H2)_#OTo|i2*W=Cq264rtu`>Y3>G5=x1x=}QAOm+S+3+7JvK#N>mqI z*@v#Izr11ouHJR5nLqhWo{I-waMj=yZP$#T(UtRO$;O&?WBx9tdH&2zylC66uA7xv zZF7b+Y(>5if6{-|#+sfD)}Oht7aLYzuK=HRr`&P;B_o)>i)k-sqD~=PL6b3&sj~ z=KBMkFJxugqusfaJ?FCg34Jg=N1W=5tE!rG*pB_jrA_y0A4?JXSa3rrKw6}2!6L{G zR8?M3HWH)F=CaY2uHQw};mSMmfX)eGFWAu) zE4T-}WR(95bmG^Mb3jxQtn8Keb`nKg{?hZKc+8##ZcOJ-HLQgPLLP_0QdkaYOh4hb z9=etKs|h@XK5|XdJe@yoU(MlP=Dqq4)!HcX?)lO2(cJuay?#sI>X-_DcjC(v_a98> hSbEND`h6?QLUvPugn{U`nc{-H#bXdsAU z#vD+!nuNYQ5i}u-*4XAhJ=B;t)|Ks`I6dXe-)@L&aetX@iyMLl%w_N0&u6@q^Up zF9zf>Pz?2k#Tf40iFYZi#-y!Oq7NB3Ry4^bd7HdlVOc>UWPMP>cF~#W5ls4^6T;+KF~+QE%V$c*JOBxmHh+j)&IveMmm6 z@V0zMz8ke3i8ZwNRXtPlK>M+E^4_}t6h5u+F@A!dMy<8T^IRvdE6s!L2VFm={e!X2 zt#X^fcX?|ql;KzToBUn=A(QJ?qqd&XJhb;2yB&X@jeL}Co$MjBl@`k2LjV#&NUmFh z+J;N>z!J1qXO644#Di^}>>;$3K8MdMY{oC~tElw?_J;v55C%bV-6|!+PW47B;lVxk zG!M3QvQ=s;eGOm7H)6brZ{c1X3Rl9u*m~KTbCFGz;$bal9>A|sJoHJNlePKtB599o zlOx4@_&$CR<3s!i&k;%c)xBzm+M=vK~=H zhPudGCD)l=Pf?|wl)#z6G?=b1L*)c2NAT+iDo+?`#pjK1N-KNrzYHe}lNH!mNuzr9 z1%aI-EDV^9YWOMQke+0wyk23poMT%33g5-deg&)I9h%g6(FQaR?j1Mz{R2Bk7#wW! zH8%TNhI-i`=iz*X1-KARt560rXIc&M*}6k+%7>z4YO$TPRko?}MLVC2Y?FM{U_svL-Y6b3t*`ML+=MUUOZc*?zr`() zZ*o@=59}Z8e3aT(!!;4u3Tl)L$$U}!NgXqAe4?Wi9jR0U?QcNwika6fie$6|}eO?$I+;0ZV1Mg9+WBcalU^I+@u`t(jqZE!98k9fNZOW^7lw+9v zk0-lCc45ab=filI025(RoV{_Rz%^+iwdY286_0WZ7ATr24tJHdno@Dp)KD>;5YbY-Mik z%HYm(U(2xn`jCa=Ri>)JR_4~O4DLMlX_pgH<(pl@j$wzW{D`}7H#VYMcMN}#1|33o zp8K>0hCK!%@(&US(Il#?UXy8e+Jp9_y-0B-_IB8x z4wz6{=|>|nlV(+AHuVH^W0@D+fp=P2i~4@@oEA8UhRl$;+1z4fRZjDqm$EsTda5#) z<_8O6Ss2`p58z5%hf}NHMdN4uveBn!^`IGy@yn)Sj-_rojt-|IXbuImC|DdU3C;@6 z4$cYg!n^TayssdBUZ+pb>WZDyC;VdV6QUENlPHRgp?Ohb)D-PYON0GrO4J;&=TjP`S#kVHhUy6rrsnZO=mG-~r2W>R@VGesBt!KC2veWO7p(N*SNOHF zUc{L&3ueO{Nc*j^_*?B)E{;FRP-Uht^>us$-;Cugd>eOQ4_pYp#SB(PR~+|z{E{;} ztNAC*N#*5f^ge!oAI9<#evGG6n!_@x1J)e>^lCnCgeKri@|&_DtxqYyKh>SIw4Wb! z(4*z)}8Z;5r%C3nG6zt zZ^+UY3VzuPm@Du~E7#z)=&d}ypYzs0oMVU0Mu*$$>M2)L#%KOl%yoD@-hemaP3WyW zzMu0Jua@&QY@|~6yL!qMmGPPXlA~{PS(>x6Sc3luK8outic8TxA5E&zIt+`v-qQ zvR1MxDoWPJkBjqg-!&=XK0}`S=gDU8#sNEvvKm*?Ao^%3-|5HRsjR+d!&bU%1`n+**EeKbe2zKcsM}mfd3ipI+2;v6V}@ MMnU5ne@!#|59_z*!vFvP literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_CopycatsHouse_1F/border.bin b/data/layouts/SaffronCity_CopycatsHouse_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_CopycatsHouse_1F/map.bin b/data/layouts/SaffronCity_CopycatsHouse_1F/map.bin new file mode 100644 index 000000000000..6db070ab7a7f --- /dev/null +++ b/data/layouts/SaffronCity_CopycatsHouse_1F/map.bin @@ -0,0 +1 @@ +500000000000000000000000000000000000000000000000000000000000000000000000000 \ No newline at end of file diff --git a/data/layouts/SaffronCity_CopycatsHouse_2F/border.bin b/data/layouts/SaffronCity_CopycatsHouse_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_CopycatsHouse_2F/map.bin b/data/layouts/SaffronCity_CopycatsHouse_2F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..c3090f48580747259f7775722b33b354fd0a578e GIT binary patch literal 216 zcmZ9F!3qIU7=@{Cru#UjDG$ib3U5J5CM8lLGpiX{V1pGqD;5eh<+_s*olgJh`%fK1 z$t!z3x{SGSrOn9M(D3X2kO6bZ*6D>tzfE&LZ=;j4mKG=b+oe1b>zg;<~Luc nLZnD>@y&Uns-G&=vfww@PgDzjd1iM*t+jF5{`Ehb-<$CQ+htT& literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_Dojo/border.bin b/data/layouts/SaffronCity_Dojo/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_Dojo/map.bin b/data/layouts/SaffronCity_Dojo/map.bin new file mode 100644 index 000000000000..55b1548aad6a --- /dev/null +++ b/data/layouts/SaffronCity_Dojo/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SaffronCity_EastWestEntrance/border.bin b/data/layouts/SaffronCity_EastWestEntrance/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_EastWestEntrance/map.bin b/data/layouts/SaffronCity_EastWestEntrance/map.bin new file mode 100644 index 000000000000..8b9683b9962e --- /dev/null +++ b/data/layouts/SaffronCity_EastWestEntrance/map.bin @@ -0,0 +1 @@ +2222222222222(3'3'3'3'3'3)32222,322222-32222*3&3&3&3&3&3+32222222222222 \ No newline at end of file diff --git a/data/layouts/SaffronCity_Gym/border.bin b/data/layouts/SaffronCity_Gym/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_Gym/map.bin b/data/layouts/SaffronCity_Gym/map.bin new file mode 100644 index 000000000000..2eee324477fd --- /dev/null +++ b/data/layouts/SaffronCity_Gym/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SaffronCity_NorthSouthEntrance/border.bin b/data/layouts/SaffronCity_NorthSouthEntrance/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_NorthSouthEntrance/map.bin b/data/layouts/SaffronCity_NorthSouthEntrance/map.bin new file mode 100644 index 000000000000..138b62d0f8a0 --- /dev/null +++ b/data/layouts/SaffronCity_NorthSouthEntrance/map.bin @@ -0,0 +1 @@ +2222222223222223222222322222322222#32222222222222222 \ No newline at end of file diff --git a/data/layouts/SaffronCity_PokemonTrainerFanClub/border.bin b/data/layouts/SaffronCity_PokemonTrainerFanClub/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SaffronCity_PokemonTrainerFanClub/map.bin b/data/layouts/SaffronCity_PokemonTrainerFanClub/map.bin new file mode 100644 index 000000000000..1f0a70d65a63 --- /dev/null +++ b/data/layouts/SaffronCity_PokemonTrainerFanClub/map.bin @@ -0,0 +1,2 @@ +52222 +32222222222222222222222222222222222222222222222222222 32222222 3222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SeafoamIslands_1F/border.bin b/data/layouts/SeafoamIslands_1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SeafoamIslands_1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SeafoamIslands_1F/map.bin b/data/layouts/SeafoamIslands_1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..00e11336438beeef553528eb9307411b8b9abe83 GIT binary patch literal 1824 zcmb7^O>Wdc5QRYlHTNl>C7c6RS$ihHFsm7_!UV}n-+(iatOyc_1c-nu1SAlNM1TEU zZaYX3QEBXP|9t)GRd;V~`%fI%%OPIf=#9Rc?S&E}#MoJD3tOgNYlj0h`j)x3v`?u= zw#ze_4P$BD=uMl*`nO2Ej3H=&8azlVd+VqE+D_B+wkRXs`Pyoa*z`^`N%O`&`q>?# zwI}l?v7RQ{d;j2Kp{g5Lm;S?l{s*(ObB9HI@r$0-n>scs6S7d=7 ztoOrq+%!>L# zWw&e1AmKw{;oR50{;D`Tpj5romuzsIH3>A~gS=NI%SnxjN7eBLR|v9f6Ki@pIg`cv zg+<+?TIF55ku%g$=SFk%j2zh&QLni6e*rBhq4EF# literal 0 HcmV?d00001 diff --git a/data/layouts/SeafoamIslands_B1F/border.bin b/data/layouts/SeafoamIslands_B1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SeafoamIslands_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SeafoamIslands_B1F/map.bin b/data/layouts/SeafoamIslands_B1F/map.bin new file mode 100644 index 000000000000..8735540c7120 --- /dev/null +++ b/data/layouts/SeafoamIslands_B1F/map.bin @@ -0,0 +1 @@ +BBBBBBBBBBBBBBBBBBBB22222222222BBBBBBBBBB2222222222222222222BBBBBBBBBB22222222222BBBFBBBBBBB22222222222BBBBBBBBBBB222222222222222BBBBBBBBBBBB222222222222222BBBBBBBBB222222222222222BBBBBBXCBBBBB222222222222222BBBBBBBBBBBB222222222222222BBBBBBBB2222222222222BBBBBBBBWCBBBB22222222222222222BBBBBBBBBBBBB22222222222222222BBBBBBBBBBBBB22222222222222222BBBBBBBBBBBBB22222222222222222222222222U22222222222222222222222222222222222222222222222222222222222U222222222222222222222222222222UVUVUVUV \ No newline at end of file diff --git a/data/layouts/SeafoamIslands_B2F/border.bin b/data/layouts/SeafoamIslands_B2F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SeafoamIslands_B2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SeafoamIslands_B2F/map.bin b/data/layouts/SeafoamIslands_B2F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..968163399d98e5bcde49ad062575ebac939fbc55 GIT binary patch literal 1824 zcmbW1O>)yf5QV82I`?VcU~&cn84 z%_@1fqdFhn-2C)$FR+}kh%1YRP)KcGusV)oW%A{X7jtskYYAHIoybRBH+G?8<4qBNSP59)^t(~!dn6xs7G{Arl}p`38|js4aTav>e!k{!Z}1Xp z6IoTG>&&uDRb7I`5!Q`egmEYOsr=9zv#nn1t!b%^g?!B{cU{U)y)%1tco{ZkxopCf z&1%o_x(;=ysCXWAAzMW=kBmG0rN7NyH>`=xOsr!?j~uu1iu{lTU6rxGAp@K?Yi`;S zE3A7hMN zVSPXQZx-Ui52wv5X*CWv(YE2b`Qm?nZd-bx3t9Of>+oI>F;0?oe$?ePK9%9Y@W9V+ zdM`UU0L!y7k9En7{k%uke&6@{PtBh6Q%#}UHQ%;atg)Y=$ND}~5XpOU2#rbeVyBBN zs9IU)xBGt7>OuB76+-2+zIQ&NV2mTnA|pn8-m8A=`26(t`29VJr#DrL5j%^0{LuLZ zk$qk5&Oh&^R4trG_5*trH!;o`f4o0=hoW;}sQQV#-5Ksb`f%T}A8;2AdgpR3>=IwY z5#Gd@4G!|l+p~;W#@QpC{lGZ!9Q1tGxF+u5BjBW&+#f#9YV literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_House_Room1/map.bin b/data/layouts/SevenIsland_House_Room1/map.bin new file mode 100644 index 000000000000..e439b6d6fd0d --- /dev/null +++ b/data/layouts/SevenIsland_House_Room1/map.bin @@ -0,0 +1 @@ +=>{|}PQ=>EFXYEFM1N11111111M1N1V1 1 1 1 1 1 1 1 1 1 1^ 1 1 1o1efg1 1 1 11 1 1 1o1mng1 1 1 1V1 1 1 1 1 1 1 1 1 1 1^ 1 1?1G1O1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/SevenIsland_House_Room1_DoorOpen/border.bin b/data/layouts/SevenIsland_House_Room1_DoorOpen/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_House_Room1_DoorOpen/map.bin b/data/layouts/SevenIsland_House_Room1_DoorOpen/map.bin new file mode 100644 index 000000000000..b9381326fee8 --- /dev/null +++ b/data/layouts/SevenIsland_House_Room1_DoorOpen/map.bin @@ -0,0 +1 @@ +=>9{|}PQ9=>EF~1wXEFM1N11111111M1N1V1 1 1 1 1 1 1 1 1 1 1^ 1 1 1o1efg1 1 1 11 1 1 1o1mng1 1 1 1V1 1 1 1 1 1 1 1 1 1 1^ 1 1?1G1O1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/SevenIsland_House_Room2/border.bin b/data/layouts/SevenIsland_House_Room2/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_House_Room2/map.bin b/data/layouts/SevenIsland_House_Room2/map.bin new file mode 100644 index 000000000000..7ed3a8c8ada3 --- /dev/null +++ b/data/layouts/SevenIsland_House_Room2/map.bin @@ -0,0 +1 @@ +{|}PQPQ!~1w!XYXY!111111111111 1 1 1 1 1 1 1 1 1 161 1 1#1$1$1$1$1%1 1 1 11 1 1+1,1,1,1,1-1 1 1 11 1 1314141414151 1 1.1 1 1 1 1 1 1 1 1 1 161 1 1 1 1 1 1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/SevenIsland_SevaultCanyon/border.bin b/data/layouts/SevenIsland_SevaultCanyon/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9CZTAZ}{6vHRn(!3HCX$`eNcpp5vYHr>Yy*o3 zvS7(}dN)vUarh_Z2>Hoqn(zAbAP0L}L zp7s!jX^|eUSWU+wqvhdYx?8h8sXwaMt62LTKH@iRoU;}`w77^5G}fopiz;(!5-~EK zH%&U}I5(Yt@tR-2^Y7d-pF7`2oh5O|bLjum4nNFrz52}GfZwj)E~2aa3mbWhdhi|i z?fPS55co+=1g(><6HU5pD40%Dd`mUC68RUbkJ5LxUfVBa_|&R`#W$DMZlZeAw3kL( zEa4CAAMoE^SP#;}7BA1iG%I4L=2?eFDO7=3$GMu7nRXjKD7aIWukk zF?pPx7$4B&A3ekO)H7JR|Cw3AWIS27MUS&CRD00)ht13*fCsI$-|1+G$1i+l?my7P zIDJDg=ALQz7kkh{|5z% ztbL8EwQ9#zl<|vn=!~fB($)0Zo@VL0eZ#!(brxd3NN26Kq_EKzD$01Yhf=9O-eZPH zTRc5?_aAJ~CwNqlXGmCNe6Udj@W*W@(Oc+|nBv1;5SC{jPbBc#XHREec6<(Fk_1A2myO-u=0Jz`n8++m<bUJ|EI-J-_Q>q`6izng_CCJU-iQx?s9Rf(;Kv^vr@gy z|9()4QMPL=Db9;u?J}yZUICpO;vGSAF!PZ}fmF!ANSJrR(LnE%1G`x*0VhGu8eu z-6-EF-YssLBjo@WB5A*pGkmbe;(EDRzE`|o1gD5We6*q*gon#!`Iqw%UNNZMFlRbI k#cp)yb7w`~Rae=*e`PD~Q@%N@OjhgDK>Eb2Z9QQyZ`_I literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_SevaultCanyon_Entrance/border.bin b/data/layouts/SevenIsland_SevaultCanyon_Entrance/border.bin new file mode 100644 index 000000000000..75f2c916c55e --- /dev/null +++ b/data/layouts/SevenIsland_SevaultCanyon_Entrance/border.bin @@ -0,0 +1 @@ +vvvv \ No newline at end of file diff --git a/data/layouts/SevenIsland_SevaultCanyon_Entrance/map.bin b/data/layouts/SevenIsland_SevaultCanyon_Entrance/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..080fac6fb4c333baccb9bf36a0953e0ff550faac GIT binary patch literal 1920 zcmaKsO>WyT5QXDnFqIbq?3>8-6`EZOFvtPAwc`|#OucEf;~s zf*01Fdp=&6MKsml(3Xz;o0`#f^eARALBAYqLw@Ao0T#Y^TTCq*T~;-9^gP;0ywzt% z8qW()d2)rD%bK}bcSXo0xrfM(4O+1P}MCxkmV9Q@@Z_! z-@o@%2Ze_AWZBVo7nE^QU7DSq5sUG!V{J80KH-s_ntjN{%xM?&VF&aE&W&6lpHUy@ zZH0%2_JH!`kguFa??4}>Jz#u!RUf%D{#7d5OFR~n=_5W98YZ*Rkm z@G$f%6uW_s5nu+=d##~g;-}u*fwu_kX0zK*@4)nl{_J=s_89sIovX7E@6Png=2vG} rdE8@qTc*nCefu=byz+66%ed^mwY=IS=^pBt$Ag$)m;>YSz82Sin8TZm literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_SevaultCanyon_TanobyKey/border.bin b/data/layouts/SevenIsland_SevaultCanyon_TanobyKey/border.bin new file mode 100644 index 000000000000..56b76feec923 --- /dev/null +++ b/data/layouts/SevenIsland_SevaultCanyon_TanobyKey/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SevenIsland_SevaultCanyon_TanobyKey/map.bin b/data/layouts/SevenIsland_SevaultCanyon_TanobyKey/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..77ec431c89c918e2569daaa188caee444b97aed2 GIT binary patch literal 480 zcmb7=K@NgI5CoN&ZV?d`H0m?hNBSggn)nvDtuIg$XF%LhyqFGYj*2;JI3}1++++++++ 11++++++++++++++11111++++++121.11+++++++++++++++++++++++++++++++++++++++++++++++++++1-11111.11++++++1{I3I3I3}1++++++++1&11++++++++++++++++++++++++1111111+++++++++++++++++++++++++++++++++++++++++++++++++++111111+++++++1-1{000}.11++++++++111++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++1-1y000y11+++++++++111+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++1-11111.1111+++++++12111++++++++++++++++++++++++++++++++++++++++++++++++++++++++++111111+++++++++++11111111++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ No newline at end of file diff --git a/data/layouts/SevenIsland_TanobyRuins_DilfordChamber/border.bin b/data/layouts/SevenIsland_TanobyRuins_DilfordChamber/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_TanobyRuins_DilfordChamber/map.bin b/data/layouts/SevenIsland_TanobyRuins_DilfordChamber/map.bin new file mode 100644 index 000000000000..50d04c4d3b3a --- /dev/null +++ b/data/layouts/SevenIsland_TanobyRuins_DilfordChamber/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SevenIsland_TanobyRuins_LiptooChamber/border.bin b/data/layouts/SevenIsland_TanobyRuins_LiptooChamber/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_TanobyRuins_LiptooChamber/map.bin b/data/layouts/SevenIsland_TanobyRuins_LiptooChamber/map.bin new file mode 100644 index 000000000000..0dd265d65aee --- /dev/null +++ b/data/layouts/SevenIsland_TanobyRuins_LiptooChamber/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SevenIsland_TanobyRuins_MoneanChamber/border.bin b/data/layouts/SevenIsland_TanobyRuins_MoneanChamber/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_TanobyRuins_MoneanChamber/map.bin b/data/layouts/SevenIsland_TanobyRuins_MoneanChamber/map.bin new file mode 100644 index 000000000000..38f818e71943 --- /dev/null +++ b/data/layouts/SevenIsland_TanobyRuins_MoneanChamber/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SevenIsland_TanobyRuins_RixyChamber/border.bin b/data/layouts/SevenIsland_TanobyRuins_RixyChamber/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_TanobyRuins_RixyChamber/map.bin b/data/layouts/SevenIsland_TanobyRuins_RixyChamber/map.bin new file mode 100644 index 000000000000..e98187c675e4 --- /dev/null +++ b/data/layouts/SevenIsland_TanobyRuins_RixyChamber/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SevenIsland_TanobyRuins_ScufibChamber/border.bin b/data/layouts/SevenIsland_TanobyRuins_ScufibChamber/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_TanobyRuins_ScufibChamber/map.bin b/data/layouts/SevenIsland_TanobyRuins_ScufibChamber/map.bin new file mode 100644 index 000000000000..bdd65c306936 --- /dev/null +++ b/data/layouts/SevenIsland_TanobyRuins_ScufibChamber/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SevenIsland_TanobyRuins_ViapoisChamber/border.bin b/data/layouts/SevenIsland_TanobyRuins_ViapoisChamber/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_TanobyRuins_ViapoisChamber/map.bin b/data/layouts/SevenIsland_TanobyRuins_ViapoisChamber/map.bin new file mode 100644 index 000000000000..4d4d0e886248 --- /dev/null +++ b/data/layouts/SevenIsland_TanobyRuins_ViapoisChamber/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SevenIsland_TanobyRuins_WeepthChamber/border.bin b/data/layouts/SevenIsland_TanobyRuins_WeepthChamber/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SevenIsland_TanobyRuins_WeepthChamber/map.bin b/data/layouts/SevenIsland_TanobyRuins_WeepthChamber/map.bin new file mode 100644 index 000000000000..acb0469fcbe3 --- /dev/null +++ b/data/layouts/SevenIsland_TanobyRuins_WeepthChamber/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SevenIsland_TrainerTower/border.bin b/data/layouts/SevenIsland_TrainerTower/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/SevenIsland_TrainerTower/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SevenIsland_TrainerTower/map.bin b/data/layouts/SevenIsland_TrainerTower/map.bin new file mode 100644 index 000000000000..c6a77c45229e --- /dev/null +++ b/data/layouts/SevenIsland_TrainerTower/map.bin @@ -0,0 +1 @@ +++squqyyyyqsqu+++ssquzhqqjxsquu+(sssqurhqjpsquuu),sssqurpqqrpsquuu*,sssqurpqqrpsquuu*,sssqurpqqrpsquuu*,sssqurx2zpsquuu*,sssqjxyyy2yyyzhquuu*,ss{qqj 0022200 0hqq}uu*,s{sqqqij 00 00 0hiqqqu}u*,{ssqqqqquj000hsqqqqquu}*0$ss{|||quu333ssq|||}uu 1+,s{|||{|z31 0 0 031x|}|||}u*++,{|||{| 00 00 00 0|}|||}*+0# !sqq{||000||}qqu  #1+,{||||y000y||||}*+++++0 ##$0 00 00"# #1++++++++0#####1++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 1 1 1 1 1 1 1 1 1 11++++++++111111111111+++++++++++ 1%1111+++++++++++111110000000++++++++++11110000000++++++++11111000000pqqqqq+++++11111111000000hiikllllllm+++++111111110000 0hqklqqqqqququ++G100000pqkqqqqqqqququu)++qqqqqqqiij0000 0pqsqqqqqqqqququu*++sqkllllllmqqqqr00000pqsqqqqqqqqquqO+(ssqsqqqqqqllmqr0000 0pqsqqqqqqqqquqqqqu,ssqsqqqqqqqqqmr00000pq{|qqqqqqquqqqquu),ssqsqqqqqqqqqqur000{1|1sqqq|||}qqqquu* \ No newline at end of file diff --git a/data/layouts/SilphCo_10F/border.bin b/data/layouts/SilphCo_10F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_10F/map.bin b/data/layouts/SilphCo_10F/map.bin new file mode 100644 index 000000000000..1ca95017cb87 --- /dev/null +++ b/data/layouts/SilphCo_10F/map.bin @@ -0,0 +1 @@ +000i000jk8q88o0]0>rst253u2vw?@BA008e8Fz{|243}2~GHI885353535353;3<3434353535353535353535343434343434393232323234343232323534343434343M30^_534300534343434343U8fg534388534343434343M3N353535343535353534343434343UV434343433434313232343432323132323434323232300534300000534300088534388888534388|53535353435353535353534353533N343435334343moW343V434343435343mo#%63435343435343#%u3w36343N34343435343u3w36334343V4343434343435343434343434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_11F/border.bin b/data/layouts/SilphCo_11F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_11F/map.bin b/data/layouts/SilphCo_11F/map.bin new file mode 100644 index 000000000000..027e0a7dbf7a --- /dev/null +++ b/data/layouts/SilphCo_11F/map.bin @@ -0,0 +1 @@ +000i0T88q800RS35353?0@BA0088Z[\34343G8HI8853535353;3<343435353535353535353433132323232323232323:343435343430]^_005343534343bOefgO85343534343353VV535343534343534343(3)3*3634353435343435343333334353435343435343435343534343534363534353434353436353435343435343=3;3;3;3;3<3534353434353432323232323235343534343?>53430000005343534343GF534388OOO85343534343535353435353VVV535343534343434343434343434343435343 \ No newline at end of file diff --git a/data/layouts/SilphCo_1F/border.bin b/data/layouts/SilphCo_1F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_1F/map.bin b/data/layouts/SilphCo_1F/map.bin new file mode 100644 index 000000000000..fb7be168be65 --- /dev/null +++ b/data/layouts/SilphCo_1F/map.bin @@ -0,0 +1 @@ +i000q8PQ00]000000000]00^_0000@BA00000>533XY?0O8e888dOOO88e88fg8888HI88888F533`aG8V5353535353lVVV535353535353535353535353535353535353535353435353535353434343433l634343434343434343434343434343434343434343434343434343434353434343433t63434343434343434343434343434343434343434343434343434343M3h3i3i3i3i3i3s6343434343434343434343434343434343434343434343E3J3434343Upqqqqqr6343434343434343434343434343434343CDW3E3434353;3;3;3;3;3;3<3434343434343434343434343KL63J343M353434343434343434343434343434343=3;3<34343U5343434343434343434343434343E3J34343434353b3c3W343b3c3W3434343434343CDW3E343M353j3k36343j3k3634343434343434343KL63J343U53=3;3<343=3;3<3434343434343434343434343=3;3<343434353b3c3W343b3c3W343434343434343434343434343434343E3J3434343M353j3k36343j3k36343434343434343434343434343434343434343434343CDW3E343U53=3;3<343=3;3<343434343434343434343434343434343434343434343KL63J34343534343434343434343434343434343434343434343434343434343434343=3;3<34343M35343434343434343434343434343434343434343434343M34343M34343M34343M34343U5343434343434333343434343434343434343434343U4343U4343U4343U434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_2F/border.bin b/data/layouts/SilphCo_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_2F/map.bin b/data/layouts/SilphCo_2F/map.bin new file mode 100644 index 000000000000..97ada04d85f3 --- /dev/null +++ b/data/layouts/SilphCo_2F/map.bin @@ -0,0 +1 @@ +000i000jk8q88o000]00000000000^_0@BA0>rst253u2vw?00OOOe8888888OO88fg8HI8Fz{|243}2~G88VVV53535353535353VV53535353535353535353;3;3<343435353535353534343434343434343434353434343434343434343434343434343434343434343435343343434343434343435343343434343434343434343434343434343434343431323232323434323232323132323232323232323232323232323234343232323232300000534300000000000000000000005343000008888853438888888888OOOOOO8888885343888885353535353534353535353535353535353VVVVVV5353535353535343535353535353434343434343434343434343434343434343434343434343434343434343434343434353434343434343434343434343434343434343434343434343439323232323232323232353434343434343434343434343434343434343434343434343430^_000013232323234343232323232323:34343mnoW343mnoW3438fg88{|000053430]00}5343#343#343?>53535353535333|{8853438e885343u3v3w36343u3v3w36343GF534343434343434333535353534353535353~3534343434343434343434343535353x3y3z3434343435343x3y3z3434343434343M35343mnoW343mnoW34393:34334343M353433433434343U5343#343#3435363343U5343333634343434343M35343u3v3w36343u3v3w3634353333634343M35343434343434343434343U53434343434343434343434353434343434343U \ No newline at end of file diff --git a/data/layouts/SilphCo_3F/border.bin b/data/layouts/SilphCo_3F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_3F/map.bin b/data/layouts/SilphCo_3F/map.bin new file mode 100644 index 000000000000..e0a18ff16629 --- /dev/null +++ b/data/layouts/SilphCo_3F/map.bin @@ -0,0 +1 @@ +000i000T88q8PQ000000000^_000^_00000@BA0>RS3533XY?00OOO888888fg888fg88888HI8FZ[\3433`aG88VVV5353535353535353535353535353535353535353535353;3;3<3434353535353535343434343434343434343434343434343434343434343434343434343434343433434353434343343434343434343434343434343434343434343434343434343434343434343132323232323232323232323232323232323232323:34343434393232323232323232323}0000000000000}053434343000|888888888888|53434343888~3353535353535353?>N3535353535353~33?>53434343?>53535353333343434343mnoW3GFV434343mnoW343GF53434343GF53434343x3y3z34343434343635353534343436343535353434343535353434343W3534343433#6393:3N343433#634393:34343434393:3434343363534334343u3v3w363V43343u3v3w363435343434353343433336313232323232323232313232323232323232353434343132323232323232300]00000000000000]000>53434343?00000000088e88888OOOOOO888e888F53434343G888888OOO5353535353535353VVVVVV53535353535353535343434353535353535353VVV5343434343434343434343434343434343434343434343434343434343434343434343435343433434343434343434343434343434343434343434343434343434343433434343534343434343434343434343434343434343434343434343434343434343434343434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_4F/border.bin b/data/layouts/SilphCo_4F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_4F/map.bin b/data/layouts/SilphCo_4F/map.bin new file mode 100644 index 000000000000..b6a91deb851d --- /dev/null +++ b/data/layouts/SilphCo_4F/map.bin @@ -0,0 +1 @@ +000i000jk8q88o00000000000^_000@BA0>rst253u2vw?0088888888888fg888HI8Fz{|243}2~G8853535353535353535353535353535353535353535353;3;3<343435353535353537777W343W35343mnnoW34353434343434343434343434343434353776353436335343434343434343434343434343435363533#$34353434343434343434343434343434353635343u3v3v3w3634353434393232323234343232323232353635334343434343435343430053430}}536313232343432323235343438853438537363000534300053434353535353435333~3~353634363{|85343888534343534343x3y3z3434343435373<34373<333535343535353534343534343W34343M353=3<34343=3;3<3435343434343434335343435343334343U132323434323232323132323434323232353434353434333363434343000534300000000053430000>534343534343x3y3z3434343M3O88534388OOOO88853438888F534343534343W34343UV535353435353VVVV535353534353535353535343435343334343435343434343434343434343434343434343434343434343434343333634343M3534334343434343434343434343434343434343434343434343434343434343U534343434343434343434343434343434343434343434343434343434343434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_5F/border.bin b/data/layouts/SilphCo_5F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_5F/map.bin b/data/layouts/SilphCo_5F/map.bin new file mode 100644 index 000000000000..0a4f53ad75f2 --- /dev/null +++ b/data/layouts/SilphCo_5F/map.bin @@ -0,0 +1 @@ +000i000T88q8PQ00}}}000000]0000000@BA0>RS3533XY?0088888888e888OOO8HI8FZ[\3433`aG885353~3~3~353535353535353535353VVV535353535353;3;3<34343535353535353M343M343M3435343434343434343434343434343434343434343434343433434353U43U43U4353434343434343434393232323232323232323434323232323:34353434343434343?>53434343434334343}}0^_0053430005353434343434343GF5343932323232323238fg88534388O53534343434343435353534300000~3~353535353535353435353V5353M343M343M34393:343438{{|85343434343x3y3z33y3z343435353U43U43U4353435333353?>534343433W34353132323232323235343N343434343GF53434343433336343530000005343V4343434353535343434343434336343538888885343534343434393:343434343433y3z3634353535353535353535343N343434343534343433634353534343774343?>5343V43434343534343434333333363435353W3GF53431323232323132323232323232323232323235353=36353535343?00000000^_00000000000>535343=36393:34343G8O88O88OfgO8O88O88O88F5353433634335353V5353V5353V5353V5353V5353V5353V53535353534343=3;3;3<3434343434343434343434343434343434343434343434343434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_6F/border.bin b/data/layouts/SilphCo_6F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_6F/map.bin b/data/layouts/SilphCo_6F/map.bin new file mode 100644 index 000000000000..cf0b384e7dec --- /dev/null +++ b/data/layouts/SilphCo_6F/map.bin @@ -0,0 +1 @@ +0000i000jk88q88o0}}0000]0>rst253?00@BA00>53u2vw?0{8888e8Fz{|243G88HI88F53}2~G83~3~353535353535353;3;3<3435353535353535353535343535353535343434343?>534343439323232323232323232323434323232323:3343534334343GF53434343}000000053430^_534353M343M3435353534343M3{|8888853438fg534353U43U4393:3434343U~3335353535353535343535353534313232323235343434353434343x3y3y3y3y3y3y3z3434353430000534343M3N343434334353438888534343UV43434343435343535353535353434343N3434333435343534343?>534343M3V434343333333334343534353434343GF534343U132323434323232323232323232353435374343535353434343?000053430000000000>534353434393:343434343G888853438888888888F5343534343435343434353535353535343535353535353535353535353435343434343534343434343434343434343434343434343434343434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_7F/border.bin b/data/layouts/SilphCo_7F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_7F/map.bin b/data/layouts/SilphCo_7F/map.bin new file mode 100644 index 000000000000..373fa1f17c75 --- /dev/null +++ b/data/layouts/SilphCo_7F/map.bin @@ -0,0 +1 @@ +000i0000T88q88PQ^_00000000RS353?@BA>533XY?fg88OO8d88Z[\343GHIF533`aG335353533VV5353t5353?>53;3<34353535353535343535353534343x3y3z3h3i3i3i3s4343GF5343434343434343434343434343534343pqqqr4343535353434393232323434323232323235343433331323234343232323:3434343005343000053434343433005343^_534343O853438888132323232323885343fg534343V53534353533353000}}}53535353435353534343N3434343434338{|53moW3moW3534343V434343434333635333~3~3~353#%63#%6353434313232343432323232353434343434353u3w363u3w36353434300053430]53M34343M34353433434334353434388853438e53U4343U43132323232323235343435353535343535333534343434343?00]000]00>5343435343434343434343b3534343434343G88e888e88F534343534343343434343j35343434343435353535353535353535353534343534343434343434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_8F/border.bin b/data/layouts/SilphCo_8F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_8F/map.bin b/data/layouts/SilphCo_8F/map.bin new file mode 100644 index 000000000000..73efec7e113f --- /dev/null +++ b/data/layouts/SilphCo_8F/map.bin @@ -0,0 +1 @@ +0000i000jk88q88o00^_00}00}rst253?00@BA00>53u2vw88fg88{|z{|243G88HI88F53}2~535353535353~333~353;3<3435353535353535353535343535353x3y3z343534343434353434393232323232323232323232323235343534343343534343000000^_3435343232323534343888888fg533?>534300534343335353533333343GF534388534343CCC443434343M3435343535353435353353434354344344343434343U43533334393:3534343CD53434353CD43J34343434343M343534334343534343KL53434353KL43E34343434343U4313232323235343232323534343132323232343432323232323000000>534300]0>534343?00^_0053430000O88888F534388e8F534343G88fg8853438888V535353535353534353535353535343435353535353535353435353535353N343343434343434343434343434343434343434343434343434343434343V434343434343434343434343434343434343434343434343434343434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_9F/border.bin b/data/layouts/SilphCo_9F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_9F/map.bin b/data/layouts/SilphCo_9F/map.bin new file mode 100644 index 000000000000..95d58dafb055 --- /dev/null +++ b/data/layouts/SilphCo_9F/map.bin @@ -0,0 +1 @@ +000i000T88q8PQ000]000]0000RS3533XY?0@BA00000888e888e8888Z[\3433`aG8HI888885353535353535353533535353;3<343435353535353535353535353535343932323232323232323235343932323232343432323232323:343435343000^_0053430053430^_053435343OO8fg88N3438853438fg8N3435343?>VV535353535353V43535353534353535353V435343GF534343CD43J34353435343434343CD43J3N34353435353534343KL43E343N3435343434343KL43E3V43534393:34343439323232323V4313232343432323232335353435343430005343}}0534300005313235343438N343853438888530^_>534343?>53?>V43~3~35353435353535353538fgF534343GF534343GF53435343437777434343?>53334343535353434353535343534343434343GF53CCC44393:343434393:34343534343434343535353543443443435343435343534343433434343434343 \ No newline at end of file diff --git a/data/layouts/SilphCo_Elevator/border.bin b/data/layouts/SilphCo_Elevator/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/SilphCo_Elevator/map.bin b/data/layouts/SilphCo_Elevator/map.bin new file mode 100644 index 000000000000..42e08c38debb --- /dev/null +++ b/data/layouts/SilphCo_Elevator/map.bin @@ -0,0 +1 @@ +222222222222222 \ No newline at end of file diff --git a/data/layouts/SixIsland/border.bin b/data/layouts/SixIsland/border.bin new file mode 100644 index 000000000000..d9994d6cdc78 --- /dev/null +++ b/data/layouts/SixIsland/border.bin @@ -0,0 +1 @@ +++++ \ No newline at end of file diff --git a/data/layouts/SixIsland/map.bin b/data/layouts/SixIsland/map.bin new file mode 100644 index 000000000000..a82f268bdaf4 --- /dev/null +++ b/data/layouts/SixIsland/map.bin @@ -0,0 +1 @@ +vvvvvvvvvvvvvvtssqqqqqqvvvvvvvvvvvvsstssqqqqqqvvvvvvvvvssssstssqqqqqq]U]U]U]U]sssssstssqqqqqq|ssssstssqqqqqquqsssstsxyyqqqxyyy^3|1}1~1100000HIJK(0)0*0+000$'PQRS&%$'0123XYZ[89:;&%00`ab00 00@Abc00000000000000000000000000000000 00000022222000 0000000000&'000&'000 00000000 00000000000000000000 0$%$'00000000000000000yy000yyy0 00000'&'r0 00000 00p|||z&%$'000phiiiiiikkkkkkkkkk222kklpsqqqqqqssssssss22tssqqqqqqvvvosssstssqkllllvvvvossstssqsqqqqvvvvvvostssqsqqqqvvvvvvvotssqsqqqqvvvvvvvvvvvvvvotssqsqqqq \ No newline at end of file diff --git a/data/layouts/SixIsland_AlteringCave/border.bin b/data/layouts/SixIsland_AlteringCave/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SixIsland_AlteringCave/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_AlteringCave/map.bin b/data/layouts/SixIsland_AlteringCave/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..7dde0cb15343231389c5a0ef0e25249f21125dd7 GIT binary patch literal 1536 zcmb_b%TB{U3`8pUgPbpfRwC^w&8ZJ=zI@G3u|Kcani*-Fgee0hZn!jC& z7BY-6ie4m+E_}WNIoD7|-WlT4jPt(IY1`cBEb+CJa;_I4E_LK4g~=bp$&)wdA)b!T zT>g#ThPcz(z1IP~)HfIJeuGlCV286-p$!k0minP97vBv$(ZGWN^Qq)n?|;!6R z`so!|eQLkbYtM>2>^2x4^hIBT{v1yQb_0li)Tf9C!&C-3P&frYnA0nE3h1{E%r9^= zaus%le(dJ-id`Rj1-_zJc5Jy#6?V${=B}OcKkajSZDdtq+r~X>GT58dF5`~dwjalv xZantIHrF^3$cdcFnRBka`VZQM`Cb43 literal 0 HcmV?d00001 diff --git a/data/layouts/SixIsland_DottedHole_1F/border.bin b/data/layouts/SixIsland_DottedHole_1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_1F/map.bin b/data/layouts/SixIsland_DottedHole_1F/map.bin new file mode 100644 index 000000000000..ea33c9ead89b --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_1F/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_B1F/border.bin b/data/layouts/SixIsland_DottedHole_B1F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_B1F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_B1F/map.bin b/data/layouts/SixIsland_DottedHole_B1F/map.bin new file mode 100644 index 000000000000..a610cdd58244 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_B1F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222333222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_B2F/border.bin b/data/layouts/SixIsland_DottedHole_B2F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_B2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_B2F/map.bin b/data/layouts/SixIsland_DottedHole_B2F/map.bin new file mode 100644 index 000000000000..3abe860dd640 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_B2F/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222223332222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_B3F/border.bin b/data/layouts/SixIsland_DottedHole_B3F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_B3F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_B3F/map.bin b/data/layouts/SixIsland_DottedHole_B3F/map.bin new file mode 100644 index 000000000000..c72c26c5c9fd --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_B3F/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222223332222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_B4F/border.bin b/data/layouts/SixIsland_DottedHole_B4F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_B4F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_B4F/map.bin b/data/layouts/SixIsland_DottedHole_B4F/map.bin new file mode 100644 index 000000000000..a0c7e44e3604 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_B4F/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222223332222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_SapphireRoom/border.bin b/data/layouts/SixIsland_DottedHole_SapphireRoom/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_SapphireRoom/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_DottedHole_SapphireRoom/map.bin b/data/layouts/SixIsland_DottedHole_SapphireRoom/map.bin new file mode 100644 index 000000000000..67a89d25ed16 --- /dev/null +++ b/data/layouts/SixIsland_DottedHole_SapphireRoom/map.bin @@ -0,0 +1 @@ +S22[322222222A3M33L3C3222F3222E322222G222223I3222H3322N3K32J3O3223332222 \ No newline at end of file diff --git a/data/layouts/SixIsland_GreenPath/border.bin b/data/layouts/SixIsland_GreenPath/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/SixIsland_GreenPath/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_GreenPath/map.bin b/data/layouts/SixIsland_GreenPath/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..647978c02f85beb875a0e5735d4f74563ea4fde2 GIT binary patch literal 2880 zcmbtW&2G~`5QZ=tCn-&{Xyo`2@qEv0}iMyho~H? zQaF@LOK(&l=G*ajowQA(qSbiUyWe=e`DW~7v3{>Uv}rLunoma7cg$U0b&Tcfz8(6} ztLh%imhQ_AuGj$zoWg09 zabof~kAKq{O>2FV#`}e8(k0`S()iVVQAKyaN!K17r+y@6Gj8|hdJ7a&Zz@aZDLpE@ zp-xp37#>qy!ML%hU`fSUzG?n!!&)WH1o@aR``d6c4eLI`=qs`~S zSCl~PuoAB_8-Fq|TXam*YXc1vI`SD9BA40`&FvrCt1r}7v)GRX&nK`gV|z_YWqePi zre$V~@R?p4XxOI{&LAN}9T%P{E9$CiReF zpbvca+*hvGcz>pLDO)ba%2>UEJ|PdO_<;G4Yq}c!pi_Q&C$f1rHxuG8jeynLWud(LEs zoa1-bc5~h)zh?;nSI?syUhr$Wp}krm>G4|kqS`9MfqfjkcCXxX`cQsLbS|*ZBUN_{ud{Q~ibA_O%G#I;|gO zWgr}Z!AcnmtAUlCA?9<+c~5$;#?SD6QPFSu9|63;2~m`b@=yl4FJJ6%C;D_)ZP+ue z*cz?U!>JAL7qT(zSN=y}KB$~V0T)qA^4ER2(<@M-ld}!eG_d>j1--oX(0UCml#;3; znsWK;c3D zHb|L6q>03dB!?vA0f2X*zW!XUwr8@eTDu;1w}17&x)-vz)OaQjcgE&YU+(hvu^#PV zJ=l@>P%f59a?08#Yivo%G@0p~GmN}DvumZ#7&F!WB(Zmu{N885S8~xvH8n{ad60Mt zeAC!0zznHtDT9qF8I0!Zaf$K8uNV*)>kr?!05RCOJPjs$}ifgZB+uvl=DL$F+^@Hx$e2s>wxH`k*NCo zF#WL(zk{E*MQhn_**bncX&<+nXc^>#@A;I*%K6Ogxtt2VT?=>3)EdaEbd<@c+Pa;0 z{O2+I3XL6ftX0Q_+?9KAIG$qPdj1qhih^@VD`)f6?XYk-X6FP`!}heEN@k zaG*uZs)PzI|G2{<1piot@H_7i><+4Dtd#wH>rPgcc%lnfj+y_Fogd<}7UyDqU=?cC zs{Skass3d!ey&e?KK*~D5x$6zO0BiFpImu-1=+GuG9pX-_J3NjR03VP2g9yWatZdI>&m{Qgy#7@+4%yA@ z<7_3rC49!fBEalq{@4isKJ24}T5X^o;TcrHOxMplBDJwM%O6Gn{iXPT{_Jm*z)Yt8 zuom)3L|=c@zaf8aYp+7Lq6f~jDv|wT{SgE65aSF#GRK{NDj#K^XJ2IN-kRIf!)c{i zaHr#&_wV*K23b}CWq^G61GNTz-ctXiG}oGIFT;)IRk+{04tPVS`fQ5sflg-;^yt!t zA)oTms}LvT4ys_?Rp-0#CcFx7!~2+J=v2sKbSv&*)XY1yVL!i&ak5G)+h)>Cu1{w2 zQu(j-jQB*~n@Q1C2mDyJ^snpB>_O$*`F^GugmvsJw9-&vJ}M=UPs^j_@1HmeV*`P87tdXsXw(^bhj&506uM4%B|*BgLBX_i4kVsM-)we?;+`_vz9aM zk$Jp5@cw3e+OU*^<{itj2F6AKjmK8$OY}DSs8|)E|8ILK2u0m^BJXDL+@esSWQv z|IhdPfbqB84GW#vSD}BQIm`RkOm)C5=fz0>t$ZB^yN8kZ4d+lP9DWwU0`iAC@B}vh zY`e3bC;ssNaZfe6N5}jFZ-H-j1`=SwLi_TN$2X^r*Re9Rj&Ia>C}V85Yq*cf)$vNI Uoyl;{Wq(~nO(opxy1#S(19xgmg#Z8m literal 0 HcmV?d00001 diff --git a/data/layouts/SixIsland_WaterPath/border.bin b/data/layouts/SixIsland_WaterPath/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/SixIsland_WaterPath/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SixIsland_WaterPath/map.bin b/data/layouts/SixIsland_WaterPath/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..42f48165bc0f6bbcbf16d45b8c2d6974bcfc6209 GIT binary patch literal 4800 zcma)9O>Z1U5VfM3VHQ~I4hJAe7)S)d>qD=dACN2mB$!09H(Dt+u|xzY#DGK$91!p$ zux}d)q+B=zp(sucBZw3QeBy${4KCE{H?`HXI|0<1-I?iE)m5)Px~C5HW5>zz*>Zl? z-})URvJ_Jj^Lp%KK zMY3|e+$%pSKQ2Ehffw}(-r$}rK|Ao~?~QW5{H*-E{6g{M2L;Z|! z9hd>cFcWgF+o;B>%vC0x=N7$Z4XBej=VWFFjA zZ&nrWS?63;nioF_tB=n<9zr_mr8DU17QGjlAgVpd(;&nUK)wXO4_=QInZO0>9 zW2lN=aVAwKBfP2nGR6l<({73a^m{d|2E>!s$it#Ge%2nKe2sa$ zcRt#~U-P0H?~Is?t*OkoGVD2Q;!8e_f7eMoR|NjD z_6~H996zhwo`FZtTZ)@4e6Agq@R_}hJrAqwARn63iD#wz4()X~qbCRJI^J6yqqv_CV5neKnb^R)5*?cr&o G4*vjR!t-GO literal 0 HcmV?d00001 diff --git a/data/layouts/SootopolisCity_House1_Frlg/border.bin b/data/layouts/SootopolisCity_House1_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/SootopolisCity_House1_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SootopolisCity_House1_Frlg/map.bin b/data/layouts/SootopolisCity_House1_Frlg/map.bin new file mode 100644 index 000000000000..43f11b194e8c --- /dev/null +++ b/data/layouts/SootopolisCity_House1_Frlg/map.bin @@ -0,0 +1 @@ +023333332332772333327723333333333333 333 \ No newline at end of file diff --git a/data/layouts/SootopolisCity_House2_Frlg/border.bin b/data/layouts/SootopolisCity_House2_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/SootopolisCity_House2_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SootopolisCity_House2_Frlg/map.bin b/data/layouts/SootopolisCity_House2_Frlg/map.bin new file mode 100644 index 000000000000..632e1e36aa74 --- /dev/null +++ b/data/layouts/SootopolisCity_House2_Frlg/map.bin @@ -0,0 +1 @@ +vw62223336333277233333772333333333333 333 \ No newline at end of file diff --git a/data/layouts/SootopolisCity_House3_Frlg/border.bin b/data/layouts/SootopolisCity_House3_Frlg/border.bin new file mode 100644 index 000000000000..19d90667980c --- /dev/null +++ b/data/layouts/SootopolisCity_House3_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/SootopolisCity_House3_Frlg/map.bin b/data/layouts/SootopolisCity_House3_Frlg/map.bin new file mode 100644 index 000000000000..8bbd6c517e1b --- /dev/null +++ b/data/layouts/SootopolisCity_House3_Frlg/map.bin @@ -0,0 +1 @@ +62233322333333337723333377333333333 333 \ No newline at end of file diff --git a/data/layouts/ThreeIsland/border.bin b/data/layouts/ThreeIsland/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/ThreeIsland/map.bin b/data/layouts/ThreeIsland/map.bin new file mode 100644 index 000000000000..523f3e70c73a --- /dev/null +++ b/data/layouts/ThreeIsland/map.bin @@ -0,0 +1 @@ +$33333$333332222222222$'&'&%$%$%00 00303000003030000000000000001010000000 00000 00 00 00000033333(0)0*0+00000000000000123 00 00 00 00000089:;00000@Abc 0000000001030300030300010000000000 00000 00 00 0000000000033333 00000 00000000000000 0001003030000100000000000 00 00 0000000{1|1}1~11&%$%$%0000 0HIJKhiiiii00000PQRSpqklll0000 0XYZ[pqsqqq$%$'00000`abpqsqqq0010003030pqsqqq0010000100pqsqqq0000 00 0000pqsqqq000000000pqsqqq303001010000100pqsqqq000000001010000pqsqqq000pqsqqqhiiiiij000hiiiqsqqqpklllmr000pqklllqqqpsqqqur000pqsqqqqqqqpsqqqur000pqsqqqqqqq$'psqqqur000pqsqqqqqqq \ No newline at end of file diff --git a/data/layouts/ThreeIsland_BerryForest/border.bin b/data/layouts/ThreeIsland_BerryForest/border.bin new file mode 100644 index 000000000000..7797e033b59f --- /dev/null +++ b/data/layouts/ThreeIsland_BerryForest/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/ThreeIsland_BerryForest/map.bin b/data/layouts/ThreeIsland_BerryForest/map.bin new file mode 100644 index 000000000000..e98d91119691 --- /dev/null +++ b/data/layouts/ThreeIsland_BerryForest/map.bin @@ -0,0 +1 @@ +0222 000 00 00 0 00 00 00 02 0 0200 00 00 00 00 0 0 0 0002 0 0 02 000 02 0 0000 00 0 02 0 02 00000 0 0 0 002 0 0 0220 0 0 002 0 0 0 02 00 00 02 0 0 0 0 02 0 0 0 0 00 0 0 00 0 0 0202 02 00 0 0 0 0 0 0 0 0 00 0 0 0 00 00 00 0 0 0 0 0 0 0 0 0 0 0 00000000 0 0 0000002 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 00 00 00 0 0 0 00 000 00 0 0 0 02 0 02 0000 0 0 00000 0 000 00 0 0 0 0 02000 000 00 000$%%%%%%%&0 00 00 0 00 0 00 0 00 000 00 00000000 02 0 0200 00 00002 00 00 0 000000000 00 00 00 0000000 0202 0 0 0 0 00 0 0 0 00 020 0000000020002020 0 0 02 0 0 0 0 02 0 0 00 0 020222 0 0 02 00 0 0 0 00 0 02 00002 0 0 002222 0 00 0 0 0 0 000000202220 0 00 0 0 0 0 0 02 0202 00 0 002222 00 00 0 0 0 0 0 0000 0 00200000 00222 0 000000 00 0 02 0 0 0 00 0200 020 00 00 00200000 0200 000 00 0 0 000 00000000000000002 02 00000000 0000 02 0 00 00 00 020 000000020000002000000002 000 0 0 0 0 00 00 00000020 00 000$%%%%%%%%& 0 000000 0 00 0020 02 0000 0 00 0 0 0 0 0 0 0 0 0 02 0 00 00 0 0 020000002 00 00 00 0 0 0 0 0 0 0 0 000 0 00 000002000 0 0 0 002 0 02 0 02 0 0 0 00 0 0000222 0 0 0 0 0 0 0 0 0000 0 0 0 0 0 0 0 0 0 0 00020 0 0 0 0 0 0 0 0 0 000 0 0 0 0 0 0 0 0 0 0 0 002 0202$%%%%&0 0 00 00 00 00 02 020 00000 0 0 0000000000000202 002 0 02 0 02 0 0 0 0020020020020 00 0 0 0 0000 0 0 0222 0 0 0 02 0 02 0 02 0 \ No newline at end of file diff --git a/data/layouts/ThreeIsland_BondBridge/border.bin b/data/layouts/ThreeIsland_BondBridge/border.bin new file mode 100644 index 000000000000..730aab996458 --- /dev/null +++ b/data/layouts/ThreeIsland_BondBridge/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/ThreeIsland_BondBridge/map.bin b/data/layouts/ThreeIsland_BondBridge/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..c554c03e3cbb62420142755207cf688560cb3eb2 GIT binary patch literal 3840 zcmc(iOKVd>6vs_H$!)~cPHe69l}+0$f-sW^zBWESjiOKkf|j~f+$e4Y-6*cal~mmn z)RnsMfv8oAilQR+E2s<4e@;$jZthL3D9B+l=jJ}<_dn;%+_@t(N+W;N#;8pL)rR?4 zSY)e~)|b$Wg`-aes$QjSw3W7`T8*Y@gCB3K>-8hRNO~J{|Hwa#|Ef~p z1^dS0coDtmcwBtKUZM2=;%^g|G?P}6mk-2$uryu-B^uZfbM)fBEWTo|%>3E)|M`)jRcqYyYhNcO|=b?%BCF$(svW|DZ(EdeI)5;G=$oG-j*Q2|CGki>@&L zur(H~lCrWLw9=&N=lJ@WPW|^jF>mdepnb{y)`8Z+WHPfhNi0mW;)a|Or+d`|e&v&1 zDTkSPnv6X`7wlOpYV@4;qD$s$n}`)naTZ#x<#xEk^tEg0)eZ5k5!Ao53wD6-OIJXR z5Q`f$>PFp^t9Z-TvDOVYuQDUZ!>`hTUw!nF6DUDusf~SW z-}C(iR-Mj%o8B{fY#Va(Fv8bd_dFV7p;NvzKZuo2wcx%Pu0Yg&hypx0Mi!0j7yq|* zwR>g77A&z6L>_h6%RlArx_do#-%WarOYV(B9OE1axl-bpqHvbITb%niFHluxUPM~P z7gYlUwY~9|RiMsl$$qw9ypemynJDl-s6t~G+_zNpk%iBfkNywQ%?Jt3dW#ekjasUc4sz;V#EI+{$b@so#7oFw}M5rd~mpjysspo z&#(V2ZfnN2`>f!t5JtI4XF7I{V=qgtU*x8<%sdHf9{yNa+T z*ZiEqyef0k%82`*AX^>C2wMKT6m9PDplb!U$h?LhyArp_-^FZ-wwSh^t{aAMwxbXOw?seLP!c z=@j$hO9s5kDLXjP0w24HSkv0-4-@RCNzdkZX7~Eb$A4w~$Nm06V~3pt_+iS~FweVR zV~d3s{!1p-)G(?PcjbTM^xO6Ref*De#J@-J`(f5p18@3UY%$USU$lr)(JcIVRN<|p J71QtA>lZPQVuAnw literal 0 HcmV?d00001 diff --git a/data/layouts/ThreeIsland_DunsparceTunnel/border.bin b/data/layouts/ThreeIsland_DunsparceTunnel/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/ThreeIsland_DunsparceTunnel/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/ThreeIsland_DunsparceTunnel/map.bin b/data/layouts/ThreeIsland_DunsparceTunnel/map.bin new file mode 100644 index 000000000000..4623ea1b3cd2 --- /dev/null +++ b/data/layouts/ThreeIsland_DunsparceTunnel/map.bin @@ -0,0 +1 @@ +222222222 \ No newline at end of file diff --git a/data/layouts/ThreeIsland_DunsparceTunnel_DugOut/border.bin b/data/layouts/ThreeIsland_DunsparceTunnel_DugOut/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/ThreeIsland_DunsparceTunnel_DugOut/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/ThreeIsland_DunsparceTunnel_DugOut/map.bin b/data/layouts/ThreeIsland_DunsparceTunnel_DugOut/map.bin new file mode 100644 index 000000000000..ffc668ba529b --- /dev/null +++ b/data/layouts/ThreeIsland_DunsparceTunnel_DugOut/map.bin @@ -0,0 +1 @@ +2222222 2222222222222222222222222 222222 2222 \ No newline at end of file diff --git a/data/layouts/ThreeIsland_House1/border.bin b/data/layouts/ThreeIsland_House1/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/ThreeIsland_House1/map.bin b/data/layouts/ThreeIsland_House1/map.bin new file mode 100644 index 000000000000..871205cfab35 --- /dev/null +++ b/data/layouts/ThreeIsland_House1/map.bin @@ -0,0 +1 @@ +=>`89EF& h@AM1N1.311111H1I111 1 1 1 1 1 1 1 1 1 1V1 1 1 1o1ef 1 1 1 1^ 1 1 1o1mn 1 1 1 1V1 1 1 1 1 1 1 1 1 1 1^ 1 1?1G1O1 1 1 1 1 1 \ No newline at end of file diff --git a/data/layouts/ThreeIsland_Port/border.bin b/data/layouts/ThreeIsland_Port/border.bin new file mode 100644 index 000000000000..75f2c916c55e --- /dev/null +++ b/data/layouts/ThreeIsland_Port/border.bin @@ -0,0 +1 @@ +vvvv \ No newline at end of file diff --git a/data/layouts/ThreeIsland_Port/map.bin b/data/layouts/ThreeIsland_Port/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..44f29053c1384e8f215e17e93583db6757d649e2 GIT binary patch literal 1920 zcmd6ly>1gx5QPDa<|cwb#Ty|0iEdo@3HWJ%bmR#lVL{@=%dW5zKLA~zK-3WhL{tvY zZtF{vn|t%(-*NyLNV+(4iyk+IR2$=FGX%payMFLW@BuwP>5h{J05jdgDM8mc;VkGjK^p~rm+t#}qV-sHiIyu=R(Y6je!79tk=m{3e_>DW*0nJf zsY@W3|BHNy?OQ6};IkwAH&f6OKs5_9iM`pgnv&x z)^=CX^oHw$4OX7Np6p2eDXr33r|iM!8F!Os2XuuKS_$=0-2^WWgmam1^zYa5LDf|{ zRmwlVY1*!iu_FBxf!KX*$Q{>MuZlLFPf@k%u^j`FzF{U#MxguNW z4xiX3KaqrnXUCGT>A`dsJvB@D=iCK1Dff#!)e+7lJTov)#S~^`dMy3onN0ZSg$C(- z;@70i<}GdqC%L0$?ASUVe9y6^pRt{Rx4V5$&ucGgFKgQutd_^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_1F/map.bin b/data/layouts/TrainerTower_1F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..812cea45171051f861a903683e54d6a39cb500f1 GIT binary patch literal 612 zcmd6hIS#@w5Jg$Se6ue{nOqQ21w@g8f-3?d$RGj;v5c9RKoAloa$)=V&G$Ef`Mb3s zT~o@tMP%UUF=Guh(SoJfixX1`WmIs=SQ{O5!<65hDgxAmYIYBO48nxBlD(oBYuT4X z0O~^3xpB%@PS}#A9nGV literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_1F_Doubles/map.bin b/data/layouts/TrainerTower_1F_Doubles/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..891ae066e214a119e46492285412ae67e4f1c8b5 GIT binary patch literal 612 zcmd6hOAf*?3`F@9Px*h2lH3bc>?>BKV$lT)t_X;tf+!$F!HFx{NId`=DH*>^Z2O-7 zciNL^L*;HE`7rcRupastAf;_36H^0CwD2t05F?Crrrb;$9y&~=_XJbSbfPZY`$#cP zd>@DabeT%#qcWANM5UC{m3FxCosyv$Q^}m!Mf~H=>_scQ?R#!nH4`GzMsvN!LNBck skvM$<)XB}5s$SK7WR`oneZt?Ys&g}e-On)D)Hq?~EW<=)T58|>0+jljNdN!< literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_1F_Knockout/border.bin b/data/layouts/TrainerTower_1F_Knockout/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_1F_Knockout/map.bin b/data/layouts/TrainerTower_1F_Knockout/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..3e3ebcc9401f97fa53884352964c56c5d702ad42 GIT binary patch literal 612 zcmd6iNe;p=3`H6J%RC&#y&!^385S&9a793*Du@C?6zsZDLE-?&i$pKaKX%Xv{;qap zwW4yihyp0R6|9X8x=3jA;jF2GDr&eFtcN}ZVanf59St;vTJ{hlj6=sK$v)5;M>+RI z09r!Ld2z}aJ5DH}Gi`B^Ga;p^P;+8lgbV4o3VYBL&-^_rsCOoqz)6pKb6Bclqvp&c zLzArLxovmtGG{4Ndwl7O-F1RrIm&&mPVg%y%Kx&Q@-M%a636EFET0n>8<^uaEcbc? Df3lW} literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_2F/border.bin b/data/layouts/TrainerTower_2F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_2F/map.bin b/data/layouts/TrainerTower_2F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..7ae889af14675bf9c86a5977008e72a553c90a78 GIT binary patch literal 612 zcmd6hIS#@w5Jg$Se6ue{nOqQ21w@g8h9d$Z$RGj;v5c9RKoAloa$)=V&G$Ef`Mb3s zT~o@tMP%UUF=Guh(SoJfixX1`WmIs=SQ{O5!<65hDgxAmYIYBO48nxBlD(oBYuT4X z0O~^3xpB%@PS}#A9nG literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_2F_Doubles/border.bin b/data/layouts/TrainerTower_2F_Doubles/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_2F_Doubles/map.bin b/data/layouts/TrainerTower_2F_Doubles/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..ab44abb18d99301ff895fe5fd1f34fc87c634b95 GIT binary patch literal 612 zcmd6hOAf*?3`F@9Px*h2lH3bc>?>BKV$lT~jtGdNf+!$F!HFx{NId`=DH*>^Z2O-7 zciNL^L*;HE`7rcRupastAf;_36H^0CwD2t05F?Crrrb;$9y&~=_XJbSbfPZY`$#cP zd>@DabeT%#qcWANM5UC{m3FxCosyv$Q^}m!Mf~H=>_scQ?R#!nH4`GzMsvN!LNBck skvM$<)XB}5s$SK7WR`oneZt?Ys&g}e-On)D)Hq?~EW<=)T58|>0+uYBN&o-= literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_2F_Knockout/border.bin b/data/layouts/TrainerTower_2F_Knockout/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_2F_Knockout/map.bin b/data/layouts/TrainerTower_2F_Knockout/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..cfc96995c4c0cfad4cc87be6fbe9c598e70388cd GIT binary patch literal 612 zcmd6iNe;p=3`H6J%RC&#y&!^385S(qa6~|)Du@C?6zsZDLE-?&i$pKaKX%Xv{;qap zwW4yihyp0R6|9X8x=3jA;jF2GDr&eFtcN}ZVanf59St;vTJ{hlj6=sK$v)5;M>+RI z09r!Ld2z}aJ5DH}Gi`B^Ga;p^P;+8lgbV4o3VYBL&-^_rsCOoqz)6pKb6Bclqvp&c zLzArLxovmtGG{4Ndwl7O-F1RrIm&&mPVg%y%Kx&Q@-M%a636EFET0n>8<^uaEcbc? DfaI2o literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_3F/border.bin b/data/layouts/TrainerTower_3F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_3F/map.bin b/data/layouts/TrainerTower_3F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..c01e70c2f83e33f29829f4310c2df29dd988537f GIT binary patch literal 612 zcmd6h%MJlS5Jf#k-S&QbO3e?7)es928=r`18DbFe=u*>$5s9VrqPtI@x_wPx{%$Qu z*O;+yRqbsH6Y@ literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_3F_Doubles/border.bin b/data/layouts/TrainerTower_3F_Doubles/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_3F_Doubles/map.bin b/data/layouts/TrainerTower_3F_Doubles/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..514cb72392baf2477206e02c566f50e2d8c47165 GIT binary patch literal 612 zcmd6hOAf*?3`F@9Px*h2lH3bc>?>BKVu27FjtGdNf+!$F!Ko{nNId`=DH*>^Z2O-7 zciNL^MdfZG`7rcRunxNDA)&36SyK&lH1I4~9|H_^s@zNy9$HML_XuN5bgVAi`$!v{ z_&yK;Xfu_}N2MxLu}UbREA4ROJ0U|;rjj|ci}=T#*^3r<=kHn0>`aJA8%^~RGd<6J sh}h{9ph|AWRMoQgky-BP_6dKpZ0BZzd_TivQ{#k{vkViJX{mkh3z*oOOaK4? literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_3F_Knockout/border.bin b/data/layouts/TrainerTower_3F_Knockout/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_3F_Knockout/map.bin b/data/layouts/TrainerTower_3F_Knockout/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..da9cc3f7507f6e3dfb37d42b86aa5b77622e68b3 GIT binary patch literal 612 zcmd6iNe;p=3`H6J%RC&#y&!^33oH;~!w~@yR1gJ(80@-HLE-?&i$pKaKXyhyp0R=B$Yp+DK^i;Vh_xGAg*`tb;CkVanf56*bg_T6P};3`569$==ZtdpWm6 z02)Hgd2z~5cAQW`CtBkyXF^I-q2?TT8cwC-BJ56MJhJy^PQ5e22u^y`i(#pbjhZu& z3{A3%Gu!UkWzI~f_W05lyXyqMa+LdAo#0nal>KEn#b16eC63MUSw82GZ(xq!u-NMj DgOHYu literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_4F/border.bin b/data/layouts/TrainerTower_4F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_4F/map.bin b/data/layouts/TrainerTower_4F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..057d7f955ca714d0d084c9d693061e804f7699d1 GIT binary patch literal 612 zcmd6h%MJlS5Jf#k-S&QbO3e?7)es8_8=r`18DbFe=u*>$5s9VrqPtI@x_wPx{%$Qu z*O;+yRudsHFe^ literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_4F_Doubles/border.bin b/data/layouts/TrainerTower_4F_Doubles/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_4F_Doubles/map.bin b/data/layouts/TrainerTower_4F_Doubles/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..d9a50b7a1d2958b3e660cb91b5a240b4d397bf09 GIT binary patch literal 612 zcmd6hOAf*?3`F@9Px*h2lH3bc>?>BKVu1u3jtGdNf+!$F!Ko{nNId`=DH*>^Z2O-7 zciNL^MdfZG`7rcRunxNDA)&36SyK&lH1I4~9|H_^s@zNy9$HML_XuN5bgVAi`$!v{ z_&yK;Xfu_}N2MxLu}UbREA4ROJ0U|;rjj|ci}=T#*^3r<=kHn0>`aJA8%^~RGd<6J sh}h{9ph|AWRMoQgky-BP_6dKpZ0BZzd_TivQ{#k{vkViJX{mkh3z{yQO#lD@ literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_4F_Knockout/border.bin b/data/layouts/TrainerTower_4F_Knockout/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_4F_Knockout/map.bin b/data/layouts/TrainerTower_4F_Knockout/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..cf5e1e94ef22bc62d5e1a2ed90e43c5cf2e0165c GIT binary patch literal 612 zcmd6iNe;p=3`H6J%RC&#y&!^33oMXe!w~@yR1gJ(80@-HLE-?&i$pKaKXyhyp0R=B$Yp+DK^i;Vh_xGAg*`tb;CkVanf56*bg_T6P};3`569$==ZtdpWm6 z02)Hgd2z~5cAQW`CtBkyXF^I-q2?TT8cwC-BJ56MJhJy^PQ5e22u^y`i(#pbjhZu& z3{A3%Gu!UkWzI~f_W05lyXyqMa+LdAo#0nal>KEn#b16eC63MUSw82GZ(xq!u-NMj Dgyxox literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_5F/border.bin b/data/layouts/TrainerTower_5F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_5F/map.bin b/data/layouts/TrainerTower_5F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..d580e7d2def6a873dcadab663c9e6a89d510b14b GIT binary patch literal 612 zcmd6hIS#@w5Jg$Se6ue{nOqQ21w=ssNE{K0AcF`X#4=`L5`vH@kqg_;Z@#|?%-^jw z>6%j3Eg}O)Pbq7li54u)bIy!PD5HXN%G&6l8z%hjR1u&iRI_{NV-Uu?lk7PbSjsOO zA^>%v>fAZu8^>(P(wxIW+Al;hrs;2ibF&{TJG{L@kH hC-Tnll@oLE>~pk_P8ZMK$@+Z%>ldfk!FP7t1P`%?r~3c^ literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_5F_Doubles/border.bin b/data/layouts/TrainerTower_5F_Doubles/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_5F_Doubles/map.bin b/data/layouts/TrainerTower_5F_Doubles/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..37b4aba85eb6a932e06a3e84f007ca21bd34ef7b GIT binary patch literal 612 zcmd6hOAf*?3`F@9Pxyb1lH3bc>?>BKV!@&yaYR@Y6+{6c3Qk?oM(P33NQwP28C!Yk z?{p;5hRWRnQn2(6Tu3U$+68qW}N^ literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_5F_Knockout/border.bin b/data/layouts/TrainerTower_5F_Knockout/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_5F_Knockout/map.bin b/data/layouts/TrainerTower_5F_Knockout/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..1f10bfff15265c0f1386dda5a31b3c06e93e8f8e GIT binary patch literal 612 zcmd6iNe;p=3`H6J%RC&#y&!^385S%6i6g=yRY4RGqF~pJ3K9oEUL<Bi*vXV5 z5rCFZ%e*+{j2$PG(3$qQ$eEDRRH$WQUW5zjxC(pF6wmxUE2z&*FoBaE&COv}$3`tP z6Nj3t=6Txg+GUxgQ0?)hFLu`-{PHOGUj4x@Pn6FxPdUr)rNpsiyvuvyVgt+g4a>dW Dp}Cdh literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_6F/border.bin b/data/layouts/TrainerTower_6F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_6F/map.bin b/data/layouts/TrainerTower_6F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..3c2c3165c003e24e3ba097d51ca044f2da1d3dc7 GIT binary patch literal 612 zcmd6hIS#@w5Jg$S{ID-anOqQ21w=ssRKWe9Ffv5|Ar=o4lMsYNiQL%FZ~pu+2>V^LJ_eEDgUg;{fu-BB zBLYx&RGm8~d}G6wEUmD{#_hEvG;vg&Jx`o(_~_V$Mz}uzWlFerVu+*O7@8_C;h&Cj hKaqEauN=e0yU)=+I$gYbC+qWl*Dp@7gYPUn3?AsFr&9m` literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_6F_Doubles/border.bin b/data/layouts/TrainerTower_6F_Doubles/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_6F_Doubles/map.bin b/data/layouts/TrainerTower_6F_Doubles/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..2df5cd891f98925e1f6be66e6df98481ae036bfa GIT binary patch literal 612 zcmd6hI}XAy5JdTe9rOPj#l9C*^bu8vC@2CIa6c%5LJ>fSz&aa|Sjqv=NY?s!JhRGE zf2T8vHdO8wkbV literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_6F_Knockout/map.bin b/data/layouts/TrainerTower_6F_Knockout/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..fe3d6f90869b9b02843d7fd0207963d802da5751 GIT binary patch literal 612 zcmd6iIS#@=3`JS}!@eBFxgdfjECmHn0r!JqqEG}7B4EcE1tboD+>G9QKifeg_`5oh z)r!j9A_}1NRV literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_7F/map.bin b/data/layouts/TrainerTower_7F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..d9bb110cfe64c6516c7fa4f17083a5750e10ffbd GIT binary patch literal 612 zcmd6hIS#@w5Jg$Se6ue{nOqQ21w?@a5)I4wpa?QW03nt!6B7tRqC{@&=Qn@83C!P} z4e1$E)-56fM~^A1p^gSD&0d@d6;MP8r<66(LOV?O-6OtF?N zTOt5eq3YZ?;VZ{%$tP{dV literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_7F_Doubles/map.bin b/data/layouts/TrainerTower_7F_Doubles/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..e977b7e26caccbb8e51aa64cdac515a3e3ce1073 GIT binary patch literal 612 zcmd6hxemfG5JWk`j=7IdvHuGy`iLq-6i6V^aC{#WL7@mBL|~nbNG#<8&`8$$c|5bq zQ-7y3iB?qX7LbCakDPVTMGrA;OP)2=P)7sLob@rl&?MURG~uDeRI*1HV`3tGucs@GOsg86^G3{}{k$YpZG+`>9D^DT+xHEgv0`KfS%~;tJAT(A}v&78I uvpGQI#?_LmG_Y@_jGfDUsri@J$|;IWwNQAgcV(ui3+#emG=evaGC`G literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_7F_Knockout/border.bin b/data/layouts/TrainerTower_7F_Knockout/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_7F_Knockout/map.bin b/data/layouts/TrainerTower_7F_Knockout/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..241077797fb10b5336476b115d14e8fc516bfafe GIT binary patch literal 612 zcmd6iIS#@=3`JS}!@eBFxgdfj0SY9LXjsk%#h_3G5Mr_8i~LatD63VFHma`7J=!GeNXR4^7F4Ww83@{8GpT)h#5__3) zBm&S7YMB?O{A9-oCA7g7JDHo1(p0ErPCN~#(s2=Xr!gMc|1+mPGr|Z?dNdcqtd5OZ zW+DzXS;bk}-r8lEnNaQVr9bx84Sso)d#`Tr%M)d@%u~$rcPVjf8SnC*Q+|PE{Ds9` EZ{{eKMgRZ+ literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_8F/border.bin b/data/layouts/TrainerTower_8F/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_8F/map.bin b/data/layouts/TrainerTower_8F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..6ba6588be1734e9fa3f67cb090f10e7cfd8cca7b GIT binary patch literal 612 zcmd6h%MJlS5Jf#k-S&QbO3e?7)es8_iD2RTSd6sAAmUN2rVS$!OX*Gb=~K6^3C!P} z4e1$E)-56fM~^A1p^gSD&0d@d6;MP8r<66(LOV?O-6OtF?N zTOt5eq3YZ?;VZ{%$tP{do%uU literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_8F_Doubles/border.bin b/data/layouts/TrainerTower_8F_Doubles/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_8F_Doubles/map.bin b/data/layouts/TrainerTower_8F_Doubles/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..e358d2f3d76071fd22c7d459d44fc187c9b7ccd4 GIT binary patch literal 612 zcmd6h%?iRW5QP1yJMsVLQIhx4llS7O77v1gs0W`<50!eTidfxri*29}AOm6ZWiqqM zQ-7y3iB?qX7LbCakDPVTMGrA;OP)2=P)7sLob@rl&?MURG~uDeRI*1HV`3tGucs@GOsg86^F&(hSk$YpZG+`>9D^DT+xHEgv0`KfS%~;tJAT(A}v&78I uvpGQI#?_LmG_Y@_jGfDUsri@J$|;IWwNQAgcV(ui3+#emG=eku$lY- literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_8F_Knockout/border.bin b/data/layouts/TrainerTower_8F_Knockout/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_8F_Knockout/map.bin b/data/layouts/TrainerTower_8F_Knockout/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..bb5ccf05ca9c5d29e63a5a05d4f9837b922a98a4 GIT binary patch literal 612 zcmd6iIS#@=3`JS}!@eBFxgdfj0SY9L5KwSFCW^ZjfGwczjS zKvr`qc8e&0(reC|XrYaSRv(!Kl~6_nx14p*MK4VGJ5xmsb)n|&V}N1k_$=-Fa5E%Zt%;a+V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_Elevator/map.bin b/data/layouts/TrainerTower_Elevator/map.bin new file mode 100644 index 000000000000..42e08c38debb --- /dev/null +++ b/data/layouts/TrainerTower_Elevator/map.bin @@ -0,0 +1 @@ +222222222222222 \ No newline at end of file diff --git a/data/layouts/TrainerTower_Lobby/border.bin b/data/layouts/TrainerTower_Lobby/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TrainerTower_Lobby/map.bin b/data/layouts/TrainerTower_Lobby/map.bin new file mode 100644 index 000000000000..b98077279ab8 --- /dev/null +++ b/data/layouts/TrainerTower_Lobby/map.bin @@ -0,0 +1 @@ +222222222222222222222w2v222222b2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/TrainerTower_Roof/border.bin b/data/layouts/TrainerTower_Roof/border.bin new file mode 100644 index 000000000000..f94adee613f8 --- /dev/null +++ b/data/layouts/TrainerTower_Roof/border.bin @@ -0,0 +1 @@ +//// \ No newline at end of file diff --git a/data/layouts/TrainerTower_Roof/map.bin b/data/layouts/TrainerTower_Roof/map.bin new file mode 100644 index 000000000000..37d57f3feb3b --- /dev/null +++ b/data/layouts/TrainerTower_Roof/map.bin @@ -0,0 +1 @@ +pT[[[[[[[[[[[[PzEpT[[[[[[[[[[[[PzEpT[[[[[[[[[[[[PzEpT[[[h[[[[h[[[PzEpJIIIi[[[[jMNOKzEp`abQJIIIIKUVWSzEpcde33RQQQQS3333mEpfg_33Z3333333333tEp33333333333333tExq333333333333s|Cyrrrrrrrrrrrr{@A;!"((((((((((((%&<;)*080808080808-.<;12#$+,#$#$+,#$56<;9:#$34#$#$34#$=><;)F#$kl#$#$kl#$G.< \ No newline at end of file diff --git a/data/layouts/TwoIsland/border.bin b/data/layouts/TwoIsland/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..4531975c765efca1944de210b6b914c25285ffb9 GIT binary patch literal 8 LcmXS9C0Y}AzqgwY2CgpCb?4X|NHBlZdd zMj6Ew!%EyqTv;}3Ol(+J-tT>L=e;)~5OZ?N%)9rTuige~2q8_o{sS((RtBvhz92hu z*N49Tt=3I-8aHuE<2J6Mj^tLGYF0rmvoC`|DeAque4i0i^L2JpTwTUPbU9s4H|`*= zYQ59UZ*B(H8VD*;tCh+TC0oTc?A$$3nre|1vtU`)9!ld19wV!=st*~YwSukQs&^Xi z)dw2Uctykcu@uX43NBn!A*m9I2dmh*IYrB91+Ao2)D*MzwRC6R7LXaMu_nZCPKu7qDOyYGXgzJ9mYAp~bIM827XFWQ6Plmr#k7bP=7vOvy{H_= z{*APWHq#brkFi%gL^+{m7thg{TRg9Lud~nDj{`UeTRn^Pdw3oZe(}QfaxhSoEgCH1 zte5Aam7=Y*jkZ%`tfRpGgla5lD!HW5QPPY?;G)OrbsjmA z4Y4)lMb$)3R$Fl;B-Amq;5x412HJ2OCvXy{wEh3$Z*@L7pTYRz3`b42Q)HsyuSV@O z+HoKE@Bn9V4(D+J7q$H_B10Zt7TDj3pZMkBH%4?d2@6*^*SBBc=`lQ#%tR@s!Br~o z^IM~1a|RJ>iifE6CSR?_RRA zbq{er*~;{2a7~TFZ?t@!DzGgP^yFWxlt$+Xk literal 0 HcmV?d00001 diff --git a/data/layouts/TwoIsland_CapeBrink/border.bin b/data/layouts/TwoIsland_CapeBrink/border.bin new file mode 100644 index 000000000000..75f2c916c55e --- /dev/null +++ b/data/layouts/TwoIsland_CapeBrink/border.bin @@ -0,0 +1 @@ +vvvv \ No newline at end of file diff --git a/data/layouts/TwoIsland_CapeBrink/map.bin b/data/layouts/TwoIsland_CapeBrink/map.bin new file mode 100644 index 000000000000..d48f75cd44f0 --- /dev/null +++ b/data/layouts/TwoIsland_CapeBrink/map.bin @@ -0,0 +1 @@ +vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvDEvvvvvvvvvvvDEvvvvvvvvvLMvvvvvvvvvvvLMvvvvvvvvvvvvvDEvvvDEvvv//////////s}vLMvvvLMssz2131313131 3!3!3"3#3|ss}vvvvvvsszs00 00 066666u|ssvDEvszss 00000uqu|s}LMvszsss 00 00 041m|s}vzssss 0 0 00 00 00 00 0uqqu|svpsssss 0 0 000000000uqquu|}tssssx00 00 0uqqu|tssss 000p000uqqlmutssss 0 0 0p00 0uqqqquutssss 0 0 0p031{z3100uqqqquutssss 0 0 0x||'''|||}qqqquutsss{|00y||///|||qqqqtss{|00 0|777||sqqqqqqtssqqs 0 0 0us{qqqqqts{|s 0 0 0u{sqqqqqtsqqss 0 0 0u0sqqqqqtsqqs{ 0 0ussqqqqqtsqqsqs 0 0ussqqqqqtsqq{s 0 0ussqqqqqtsqqqs{00}ssqqqqqtsqqq{33ssqqqqqqqqqs33ssqqqqqqqqqqqs333131313131313131psqqqqqqqqqqqs33}3~3000|3}3}3sqqqqqqqqqqqs3333}3}3}3333qqqqqqqqqqqs3333333333{||qqqqqqqq{||||33333qqq{|| \ No newline at end of file diff --git a/data/layouts/TwoIsland_JoyfulGameCorner/border.bin b/data/layouts/TwoIsland_JoyfulGameCorner/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/TwoIsland_JoyfulGameCorner/map.bin b/data/layouts/TwoIsland_JoyfulGameCorner/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..c445c5cb31f33ea289b99f6bd746b479ee8865f6 GIT binary patch literal 240 zcmY+4i4MU~6hx`lnbuwj5`4vdf8@(wsV literal 0 HcmV?d00001 diff --git a/data/layouts/UndergroundPath_EastWestTunnel/map.bin b/data/layouts/UndergroundPath_EastWestTunnel/map.bin new file mode 100644 index 000000000000..b6890bacdcd8 --- /dev/null +++ b/data/layouts/UndergroundPath_EastWestTunnel/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/UndergroundPath_Entrance/border.bin b/data/layouts/UndergroundPath_Entrance/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/UndergroundPath_Entrance/map.bin b/data/layouts/UndergroundPath_Entrance/map.bin new file mode 100644 index 000000000000..58cc0f850e8c --- /dev/null +++ b/data/layouts/UndergroundPath_Entrance/map.bin @@ -0,0 +1 @@ +22222222222222662222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/UndergroundPath_NorthSouthTunnel/border.bin b/data/layouts/UndergroundPath_NorthSouthTunnel/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/UndergroundPath_NorthSouthTunnel/map.bin b/data/layouts/UndergroundPath_NorthSouthTunnel/map.bin new file mode 100644 index 000000000000..4772a43cdbab --- /dev/null +++ b/data/layouts/UndergroundPath_NorthSouthTunnel/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/UnionRoom_Frlg/border.bin b/data/layouts/UnionRoom_Frlg/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/UnionRoom_Frlg/map.bin b/data/layouts/UnionRoom_Frlg/map.bin new file mode 100644 index 000000000000..829e215544e4 --- /dev/null +++ b/data/layouts/UnionRoom_Frlg/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/Unused1/border.bin b/data/layouts/Unused1/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/Unused1/map.bin b/data/layouts/Unused1/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..35968a7fd1ac82ce08ee0295b7ce25dda0b7e163 GIT binary patch literal 288 mcmY#jVL$>>>>>>>?+++,111102221110220000000000000000000000000+++,1111000000000000000000000000000000000000+++,1100000000000000000000000001110000000000+++,11091:1:1:1:1:1;10011111002222"#$02220"########+++,110ABBBBBC011111110*+,02220*+++++++++++,11`1IJJJJJK01 ##!110*+,&3222'3*+++++++++++,hPQRSTUV1*++,111*+,01110*(+++,110X1Y1Z[\]1^101*++,1111122*+0#111#1,pqqqqqr++++,1111110 00 001*++0#######1+++111++,pqqqqqr++++,111111111111*++++++++++++++111++,pqqqqqr++++,111111111111*+1111111111111111++,x|||||z++++0############1+1111111111111111++0 #####+++++++++++++++++++1111111111111111++++++++++++++++++++++++111++++++++++++++++++++111+++++++++++++++++++++++++++++++3 3 +3++++++++++++++++++++++++222++++++++++++++++++++++++++++++++++,*++++++++++++++++++++,*+++++++,*++,* \ No newline at end of file diff --git a/data/layouts/VermilionCity_Gym/border.bin b/data/layouts/VermilionCity_Gym/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/VermilionCity_Gym/map.bin b/data/layouts/VermilionCity_Gym/map.bin new file mode 100644 index 000000000000..6389bf60313b --- /dev/null +++ b/data/layouts/VermilionCity_Gym/map.bin @@ -0,0 +1 @@ +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222tuv \ No newline at end of file diff --git a/data/layouts/VermilionCity_PokemonFanClub/border.bin b/data/layouts/VermilionCity_PokemonFanClub/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/VermilionCity_PokemonFanClub/map.bin b/data/layouts/VermilionCity_PokemonFanClub/map.bin new file mode 100644 index 000000000000..9e7443ba65d0 --- /dev/null +++ b/data/layouts/VermilionCity_PokemonFanClub/map.bin @@ -0,0 +1 @@ +222222222222222222222222222BB2222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/VictoryRoad_1F_Frlg/border.bin b/data/layouts/VictoryRoad_1F_Frlg/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/VictoryRoad_1F_Frlg/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/VictoryRoad_1F_Frlg/map.bin b/data/layouts/VictoryRoad_1F_Frlg/map.bin new file mode 100644 index 000000000000..fe99f6f05632 --- /dev/null +++ b/data/layouts/VictoryRoad_1F_Frlg/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222BBBBBBBBBBBBB22222BBBBBBBBBBBBB22222BBBBBBBBBBBBB2222BBBBBBBBBBBBB2222BB2222222222BB2222222BBBB2BB2222BBBBBB22BBBBBB22BBBBBBBBB222222BBBBBBBBB22222222222222222222222222222222222222222222222222226666666666666 \ No newline at end of file diff --git a/data/layouts/VictoryRoad_2F/border.bin b/data/layouts/VictoryRoad_2F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/VictoryRoad_2F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/VictoryRoad_2F/map.bin b/data/layouts/VictoryRoad_2F/map.bin new file mode 100644 index 0000000000000000000000000000000000000000..fa39935e6713cce9643703eca815964f8df47239 GIT binary patch literal 2244 zcma)8&2AGx45lr3FMvR$5)yCWmGS_~lWhW`$suZTh|&s~?as{3`15Cf<77mmV8`M4oDQAM>o0Nrc6R?7lT+L<@f3Z`s7Kw( zdNi#Ou?{PFC%+l&Mt;Fvz!Kx-mx<+t(!!D!$JlNn8} z!O#d64h1X5%kY3v@|2o6I~FF$gqa`Pn!P<2Thq7V0i)y|37d_afyw2k)yH-?UGgTE z6v<{sQcq3wR>yf43ZSn(Q)e`qo8Q?$9%{wa4`k!-J3CC!*enN%Jo zEtNxF4+O>U-=}xQ$))zb7$m#nNzXg3>PS&6|0S>ZPIg*+DbAdIleyW~;%@e<*1Y#- zy#1Puq3m(3;}!qrd)b5R$@XCsXsQ6J z++paBM1S=!8%EV!H7U=TM2s8*#j`=@eR)v@kUMMZ#_s>#hLW%m6z#1&Qvb{F xYu}fuq9=KlSEH6X>%Warb+h#AGMU8__18{6SlpLj@IP0{7Lxz~ literal 0 HcmV?d00001 diff --git a/data/layouts/VictoryRoad_3F/border.bin b/data/layouts/VictoryRoad_3F/border.bin new file mode 100644 index 000000000000..a021ddd4ec70 --- /dev/null +++ b/data/layouts/VictoryRoad_3F/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/VictoryRoad_3F/map.bin b/data/layouts/VictoryRoad_3F/map.bin new file mode 100644 index 000000000000..3ca93972e63c --- /dev/null +++ b/data/layouts/VictoryRoad_3F/map.bin @@ -0,0 +1 @@ +222222222226666622262262222222222222222222222222222222222222222222222222222222222222222222222222226BBBBBBBBBBBBBB6222222222222222222226BBBBBBBBBBBBBB62222226662222222222226BBBBBBBBBBBBBB62222226662222222262226BBB666666662222226662222222262226BBB62222222222222222266662BBBBBBBB626BBB6222222222222222222222262BBBBBBBB666BBB62222222262222226222226BBBBBBBB666BBB62222222222222222222226266666BBBBBBBB622222222222226662222262622226BBBBBBBB6222222222222222222622226622226666666666222222222222222222222266622222222222222266666622222222266622222222222222622222222222222222222226666222222222222226662222222222222262222226666222222222222266622222222222222222222666662222222222222222222222222222222222226666666666666666666666666666622266666666666666666666666666666666666666622 \ No newline at end of file diff --git a/data/layouts/ViridianCity/border.bin b/data/layouts/ViridianCity/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a701312cfff9ef56ae960aed042d8b9e68eefb84 GIT binary patch literal 8 Pcmb1PkYx~I5M=-W0uTUW literal 0 HcmV?d00001 diff --git a/data/layouts/ViridianCity/map.bin b/data/layouts/ViridianCity/map.bin new file mode 100644 index 000000000000..d633641ca37b --- /dev/null +++ b/data/layouts/ViridianCity/map.bin @@ -0,0 +1 @@ +qqlmqqr0 00 00qqqqmqr0000kllmquqr 0e1f1g10sqqmmr&%$%$%$%$'0m1n1o1 0$%$%$%$%$%$%$%sqqququr0m1n1o10&%$'0e1f1f1f1f1f1f1f1f1f1f1f1g1sqqququr000000000000m1n1o100 00 00m1n1n1n1n1n1n1n1n1n1n1n1o1sqqququr0 0m1n11f1f1f1f1f1f11n11v12222221n1o1sqqququr 0m1n1n1n1n1n1n1n1n1n1n1o10ABBBBCm1n1o1sqqququr 00m1n11v122222v1v1w10IJJJJKm1n1o1sqq}qur0m1n1o10 00`1PQRSTVm1n1o1sqquqqur 0 0m1n1o10000hX1Y1Z[\^1m1n1o1{||}q}r0m1n1o10 000 00 00 00u1v1w1qqqq}qr00m1n1o10000||||}qqr 0m1n1o100 00 00000000 00 00000qqqqqyz0 0m1n1o1 000000000 000 0 000 00 0yyyyyz0 0 0&%$%$%$'m1n1o10222220 00 00 00 000n1o100 000(0)0*0+000 000000000000000e1f1f1f1f1f1f11n1o100e1f1g1001230e1f1g1000000000 00 00m1n1n1n1n1n1n1n1n1o1 0m1n1o1 089:; 0m1n1o10000000000000u1v1v1v1v1v1v11n1o10202220m1n1o10@Abc0m1n1o1iiiiiij00 00 0000 00 00 0m1n11f1f1f1f1f1f1f11n11f1f1f1n1f1f11n1o1qkllmqr00000 000000 00m1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1o1kqquqr000000000000 0m1n11v122222v11n11v1v1v1v1v1v11n1o1sqqqmr000000000m1n1o10HIJK0m1n1o100 00 0 0m1n1o1sqqqqur&%$' 0000000m1n1o10PQRS0m1n1o1 0 00000m1n1o1sqqqqur00000&' 00 00 00m1n1o10XYZ[0m1n1o100 00 0 0m1n1o1sqqqqur0000000m1n1o10`ab0m1n1o1000000m1n1o1sqqqqur01000 00m1n11f1f1f1n1f1f1f11n11f1f1f1f1f1f11n1o1qqqqur0000000m1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1n1o1qqqqqur000 00 00u1v1v1v1v1v1v1v1v1v1v1v1v1v1v1v1v1v1v1v1v1w1qqqqqu000qqqq}r0 00 03131313131310 00000 000 00 00 000 00000000qqqquqr00000000000000000000000000000000000qqqqu00000000000000000000000000000000000qqqqrr0000000010010000000000000000qqqqrr0000000000000000000000000000qqqqrr0000qqqqrr0000qqqqrr0000qqqqrr0000 \ No newline at end of file diff --git a/data/layouts/ViridianCity_Gym/border.bin b/data/layouts/ViridianCity_Gym/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/ViridianCity_Gym/map.bin b/data/layouts/ViridianCity_Gym/map.bin new file mode 100644 index 000000000000..ea13b028027c --- /dev/null +++ b/data/layouts/ViridianCity_Gym/map.bin @@ -0,0 +1 @@ +2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/ViridianCity_House/border.bin b/data/layouts/ViridianCity_House/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/ViridianCity_House/map.bin b/data/layouts/ViridianCity_House/map.bin new file mode 100644 index 000000000000..888436add5f1 --- /dev/null +++ b/data/layouts/ViridianCity_House/map.bin @@ -0,0 +1 @@ +  ./ -  !"1267(5(()*90:0>0?0 0=0 0 0 0 0 0 000C0D0D0D0D0F000 000S0K0LMN0V000 000S0K0TUN0V000W000[0\0\0\0\0^00G0_000000000O44444444 \ No newline at end of file diff --git a/data/layouts/ViridianCity_School/border.bin b/data/layouts/ViridianCity_School/border.bin new file mode 100644 index 0000000000000000000000000000000000000000..a886cd76469738dfa57ce364e7a0268caa314038 GIT binary patch literal 8 Lcmd;J-~dAa0H^>V literal 0 HcmV?d00001 diff --git a/data/layouts/ViridianCity_School/map.bin b/data/layouts/ViridianCity_School/map.bin new file mode 100644 index 000000000000..b6e23003bbda --- /dev/null +++ b/data/layouts/ViridianCity_School/map.bin @@ -0,0 +1 @@ +222222222222222222222222222222222222222222222222222222 \ No newline at end of file diff --git a/data/layouts/ViridianForest/border.bin b/data/layouts/ViridianForest/border.bin new file mode 100644 index 000000000000..7797e033b59f --- /dev/null +++ b/data/layouts/ViridianForest/border.bin @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/layouts/ViridianForest/map.bin b/data/layouts/ViridianForest/map.bin new file mode 100644 index 000000000000..74a9e6f5dbf5 --- /dev/null +++ b/data/layouts/ViridianForest/map.bin @@ -0,0 +1 @@ +LMMMMMMMMMNLMMMMMMMMMNLMMMMMMMMMNLMMMMMMMMMNLMMMMMMMMMNLMMMMMMMMMN00 00 00 00 00 00 00 00 0 00 00 00 002 02020202 02000000000000000000000000000202 02 02 020 0 0000000000000 000 0002 0020 02 002002 000 00\]0]0]0]0^000100000100 00 000 00000de111ef0000 00 00 0000000 0000 00 021200000 020 00000 00000 00 00000 00 00 00 00 0000 00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0000 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00000000000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0000 00020020 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 02 0 020 0000 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000 0 0 0 0000 00 0 0 0 0 0 0 0 0 0 00 000000000 000000 0 0 0 0 0 0 0 0 0 0 0200000000000000000 00 0 0 0 0 0 0 0 0 0 0000000000000 000000 0 0 0 0 0 0 0 0 0 00200200200200000 002 0202 0 0 0 0 0 0 0 0 0 0 0 0 00000 00202 02 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0000000 00 02 000 00 00 00 00 00 00 00000000000 0000000 00 0000000 0 0 0 0002 00 00 0 000000000000000 0 0 0 0 00 00 000000000000000 00 00 00 0 0 0 0 0 00000000000000000000 00000 0 0 0 0 0 00 00 0020 020 020 020 020002020 0 0 0 0 00000020200 0 0 0 0 00 00 0022020 0 0 0 0 00000 0 0 0 0 00 00 0 0 0 0 0 00000 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 02 0 02 0 02 0 02 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00000202 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000 0 0 0 0 0000 00202 0 0 0 0 0 0 02 0 02 0 02 0 0 00 0 0 0 0 0 0 00 000202220 0 0 0 0 0 0000 0 0 0 0 0 00 000 0 0 0 0 00 00 0 0 0 0 00000 0 0 0 0 0 0000 0 0 0 0 0 00 000 0 0 0 0 00 00 0 0 0 0 00000 0 0 0 0 0 0000 0 0 0 0 0 00 000 0 0 0 0 00 00 0 0 0 0 00000 0 0 0 0 0 0000 0 0 0 0 0 00 000 0 0 0 0 00 00 0 0 0 0 0 00 00 0 0 0 0 0 0 020 0 0 0 0 0000 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00000 0 0 0 0 0 0 0 0 0 000 00 00 0 0 0 0 0 0 0 000 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 00000000000000 000000 00 00 00000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000000000000000000000000000000 00 0 0 0 0 0 0 0 0 02 0 02 0 02 0020020020020020 000000 02002 002002 0 02 0 02 022y1220DEEEEEEEEEFLMMMMMMMMMNLMMMMMMMMMNLMMMMMMMMMNLMMMMMMMMMNLMMMMMMMMMN \ No newline at end of file diff --git a/data/maps/BattleColosseum_2P_Frlg/scripts.inc b/data/maps/BattleColosseum_2P_Frlg/scripts.inc new file mode 100644 index 000000000000..71a21162495e --- /dev/null +++ b/data/maps/BattleColosseum_2P_Frlg/scripts.inc @@ -0,0 +1,2 @@ +BattleColosseum_2P_Frlg_MapScripts:: + .byte 0 diff --git a/data/maps/BattleColosseum_4P_Frlg/scripts.inc b/data/maps/BattleColosseum_4P_Frlg/scripts.inc new file mode 100644 index 000000000000..5397fd4ecd6e --- /dev/null +++ b/data/maps/BattleColosseum_4P_Frlg/scripts.inc @@ -0,0 +1,2 @@ +BattleColosseum_4P_Frlg_MapScripts:: + .byte 0 diff --git a/data/maps/BirthIsland_Exterior_Frlg/scripts.inc b/data/maps/BirthIsland_Exterior_Frlg/scripts.inc new file mode 100644 index 000000000000..88979724f48c --- /dev/null +++ b/data/maps/BirthIsland_Exterior_Frlg/scripts.inc @@ -0,0 +1,113 @@ +BirthIsland_Exterior_Frlg_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, BirthIsland_Exterior_Frlg_OnTransition + map_script MAP_SCRIPT_ON_RESUME, BirthIsland_Exterior_Frlg_OnResume + map_script MAP_SCRIPT_ON_RETURN_TO_FIELD, BirthIsland_Exterior_Frlg_OnReturnToField + .byte 0 + +BirthIsland_Exterior_Frlg_OnReturnToField:: + special SetDeoxysRockPalette + end + +BirthIsland_Exterior_Frlg_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_BIRTH_ISLAND_EXTERIOR + setvar VAR_OBJ_GFX_ID_0, OBJ_EVENT_GFX_DEOXYS_N + setvar VAR_DEOXYS_INTERACTION_STEP_COUNTER, 0 + setvar VAR_DEOXYS_INTERACTION_NUM, 0 + call_if_set FLAG_FOUGHT_DEOXYS, BirthIsland_Exterior_Frlg_EventScript_HideDeoxysAndPuzzle + call_if_unset FLAG_FOUGHT_DEOXYS, BirthIsland_Exterior_Frlg_EventScript_TryShowDeoxysPuzzle + end + +BirthIsland_Exterior_Frlg_EventScript_HideDeoxysAndPuzzle:: + setflag FLAG_HIDE_DEOXYS + setflag FLAG_HIDE_BIRTH_ISLAND_METEORITE + return + +BirthIsland_Exterior_Frlg_EventScript_TryShowDeoxysPuzzle:: + goto_if_set FLAG_DEOXYS_FLEW_AWAY, Common_EventScript_NopReturn + clearflag FLAG_HIDE_BIRTH_ISLAND_METEORITE + clearflag FLAG_DEOXYS_ROCK_COMPLETE + return + +BirthIsland_Exterior_Frlg_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, BirthIsland_Exterior_Frlg_EventScript_TryRemoveDeoxys + end + +BirthIsland_Exterior_Frlg_EventScript_TryRemoveDeoxys:: + specialvar VAR_RESULT, GetBattleOutcome + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn + removeobject LOCALID_BIRTH_ISLAND_DEOXYS + return + +BirthIsland_Exterior_Frlg_EventScript_Triangle:: + lock + faceplayer + special DoDeoxysRockInteraction + waitstate + switch VAR_RESULT + case 0, BirthIsland_Exterior_EventScript_NotSolved1 + case 1, BirthIsland_Exterior_EventScript_NotSolved2 + case 2, BirthIsland_Exterior_Frlg_EventScript_Deoxys + case 3, BirthIsland_Exterior_EventScript_NotSolved3 + end + +BirthIsland_Exterior_EventScript_NotSolved1:: + release + end + +BirthIsland_Exterior_EventScript_NotSolved2:: + release + end + +BirthIsland_Exterior_EventScript_NotSolved3:: + release + end + +BirthIsland_Exterior_Frlg_EventScript_Deoxys:: + addobject LOCALID_BIRTH_ISLAND_DEOXYS + waitse + setfieldeffectargument 0, LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK + setfieldeffectargument 1, MAP_NUM(MAP_BIRTH_ISLAND_EXTERIOR_FRLG) + setfieldeffectargument 2, MAP_GROUP(MAP_BIRTH_ISLAND_EXTERIOR_FRLG) + dofieldeffect FLDEFF_DESTROY_DEOXYS_ROCK + playbgm MUS_RG_ENCOUNTER_DEOXYS, 0 + waitfieldeffect FLDEFF_DESTROY_DEOXYS_ROCK + applymovement LOCALID_BIRTH_ISLAND_DEOXYS, Movement_DeoxysApproach + waitmovement 0 + waitse + playmoncry SPECIES_DEOXYS, CRY_MODE_ENCOUNTER + delay 40 + waitmoncry + setvar VAR_LAST_TALKED, LOCALID_BIRTH_ISLAND_DEOXYS + seteventmon SPECIES_DEOXYS, 30 + setflag FLAG_SYS_CTRL_OBJ_DELETE + special BattleSetup_StartLegendaryBattle + waitstate + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, BirthIsland_Exterior_Frlg_EventScript_DefeatedDeoxys + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, BirthIsland_Exterior_Frlg_EventScript_RanFromDeoxys + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, BirthIsland_Exterior_Frlg_EventScript_RanFromDeoxys + setflag FLAG_FOUGHT_DEOXYS + release + end + +BirthIsland_Exterior_Frlg_EventScript_DefeatedDeoxys:: + setflag FLAG_DEOXYS_FLEW_AWAY + setvar VAR_0x8004, SPECIES_DEOXYS + goto EventScript_MonFlewAway + end + +BirthIsland_Exterior_Frlg_EventScript_RanFromDeoxys:: + setvar VAR_0x8004, SPECIES_DEOXYS + goto EventScript_MonFlewAway + end + +Movement_DeoxysApproach: + walk_slow_down + walk_slow_down + walk_slow_down + walk_slow_down + walk_slow_down + walk_slow_down + walk_slow_down + step_end diff --git a/data/maps/BirthIsland_Harbor_Frlg/scripts.inc b/data/maps/BirthIsland_Harbor_Frlg/scripts.inc new file mode 100644 index 000000000000..327229815cb8 --- /dev/null +++ b/data/maps/BirthIsland_Harbor_Frlg/scripts.inc @@ -0,0 +1,15 @@ +BirthIsland_Harbor_Frlg_MapScripts:: + .byte 0 + +BirthIsland_Harbor_EventScript_Sailor_Frlg:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_BIRTH_ISLAND + multichoice 20, 8, MULTI_SEAGALLOP_VERMILION, FALSE + switch VAR_RESULT + case 0, EventScript_SailToVermilionCity + case 1, EventScript_CancelSail + case 127, EventScript_CancelSail + end diff --git a/data/maps/CeladonCity/scripts.inc b/data/maps/CeladonCity/scripts.inc new file mode 100644 index 000000000000..ae939961985d --- /dev/null +++ b/data/maps/CeladonCity/scripts.inc @@ -0,0 +1,218 @@ +CeladonCity_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, CeladonCity_OnTransition + .byte 0 + +CeladonCity_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_CELADON_CITY + end + +CeladonCity_EventScript_LittleGirl:: + msgbox CeladonCity_Text_GotMyKoffingInCinnabar, MSGBOX_NPC + end + +CeladonCity_EventScript_OldMan1:: + lock + msgbox CeladonCity_Text_GymIsGreatFullOfWomen + release + end + +CeladonCity_EventScript_Woman:: + msgbox CeladonCity_Text_GameCornerIsBadForCitysImage, MSGBOX_NPC + end + +CeladonCity_EventScript_OldMan2:: + msgbox CeladonCity_Text_BlewItAllAtSlots, MSGBOX_NPC + end + +CeladonCity_EventScript_SoftboiledTutor:: + goto EventScript_SoftboiledTutor + end + +CeladonCity_EventScript_FatMan:: + lock + faceplayer + msgbox CeladonCity_Text_MyTrustedPalPoliwrath + closemessage + applymovement LOCALID_CELADON_FAT_MAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +CeladonCity_EventScript_Poliwrath:: + lock + faceplayer + waitse + playmoncry SPECIES_POLIWRATH, CRY_MODE_NORMAL + msgbox CeladonCity_Text_Poliwrath + closemessage + waitmoncry + applymovement LOCALID_CELADON_POLIWRATH, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +CeladonCity_EventScript_RocketGrunt1:: + msgbox CeladonCity_Text_KeepOutOfTeamRocketsWay, MSGBOX_NPC + end + +CeladonCity_EventScript_RocketGrunt2:: + msgbox CeladonCity_Text_GetLostOrIllPunchYou, MSGBOX_NPC + end + +CeladonCity_EventScript_Boy:: + msgbox CeladonCity_Text_ScaldedTongueOnTea, MSGBOX_NPC + end + +CeladonCity_EventScript_SilphCoScientist:: + msgbox CeladonCity_Text_SomeoneStoleSilphScope, MSGBOX_NPC + end + +CeladonCity_EventScript_TrainerTips1:: + msgbox CeladonCity_Text_ExplainXAccuracyDireHit, MSGBOX_SIGN + end + +CeladonCity_EventScript_CitySign:: + msgbox CeladonCity_Text_CitySign, MSGBOX_SIGN + end + +CeladonCity_EventScript_GymSign:: + lockall + famechecker FAMECHECKER_ERIKA, 0 + msgbox CeladonCity_Text_GymSign + releaseall + end + +CeladonCity_EventScript_MansionSign:: + msgbox CeladonCity_Text_MansionSign, MSGBOX_SIGN + end + +CeladonCity_EventScript_DeptStoreSign:: + msgbox CeladonCity_Text_DeptStoreSign, MSGBOX_SIGN + end + +CeladonCity_EventScript_TrainerTips2:: + msgbox CeladonCity_Text_GuardSpecProtectsFromStatus, MSGBOX_SIGN + end + +CeladonCity_EventScript_PrizeExchangeSign:: + msgbox CeladonCity_Text_PrizeExchangeSign, MSGBOX_SIGN + end + +CeladonCity_EventScript_GameCornerSign:: + msgbox CeladonCity_Text_GameCornerSign, MSGBOX_SIGN + end + +CeladonCity_Text_GotMyKoffingInCinnabar:: + .string "I got my KOFFING in CINNABAR.\p" + .string "It's usually nice, but it breathes\n" + .string "poison when it's angry.$" + +CeladonCity_Text_GymIsGreatFullOfWomen:: + .string "Heheh! This GYM is great!\n" + .string "It's full of women!$" + +CeladonCity_Text_GameCornerIsBadForCitysImage:: + .string "CELADON takes pride in its efforts\n" + .string "to keep the city beautiful.\p" + .string "That's why the new GAME CORNER is\n" + .string "bad for our city's image.$" + +CeladonCity_Text_BlewItAllAtSlots:: + .string "Moan…\n" + .string "I blew it all at the slots!\p" + .string "I knew I should have cashed in my\n" + .string "COINS for prizes!$" + +CeladonCity_Text_MyTrustedPalPoliwrath:: + .string "This is my trusted pal, POLIWRATH.\p" + .string "It evolved from a POLIWHIRL when\n" + .string "I used a WATER STONE.$" + +CeladonCity_Text_Poliwrath:: + .string "POLIWRATH: Ribi ribit!$" + +CeladonCity_Text_GetLostOrIllPunchYou:: + .string "What are you staring at?\n" + .string "Get lost, or I'll punch you.$" + +CeladonCity_Text_KeepOutOfTeamRocketsWay:: + .string "Keep out of TEAM ROCKET's way!$" + +CeladonCity_Text_ExplainXAccuracyDireHit:: + .string "TRAINER TIPS\p" + .string "X ACCURACY boosts the accuracy of\n" + .string "techniques.\p" + .string "DIRE HIT jacks up the likelihood\n" + .string "of critical hits.\p" + .string "Get your items at the CELADON\n" + .string "DEPT. STORE!$" + +CeladonCity_Text_CitySign:: + .string "CELADON CITY\n" + .string "The City of Rainbow Dreams$" + +CeladonCity_Text_GymSign:: + .string "CELADON CITY POKéMON GYM\n" + .string "LEADER: ERIKA\l" + .string "The Nature-Loving Princess!$" + +CeladonCity_Text_MansionSign:: + .string "CELADON MANSION$" + +CeladonCity_Text_DeptStoreSign:: + .string "Find what you need at the\n" + .string "CELADON DEPT. STORE!$" + +CeladonCity_Text_GuardSpecProtectsFromStatus:: + .string "TRAINER TIPS\p" + .string "GUARD SPEC. protects POKéMON\n" + .string "from status-reduction moves during\l" + .string "battle.\p" + .string "Get your items at the\n" + .string "CELADON DEPT. STORE!$" + +CeladonCity_Text_PrizeExchangeSign:: + .string "COINS exchanged for prizes!\n" + .string "PRIZE EXCHANGE$" + +CeladonCity_Text_GameCornerSign:: + .string "ROCKET GAME CORNER\n" + .string "The playground for grown-ups!$" + +CeladonCity_Text_ScaldedTongueOnTea:: + .string "Aaaagh, ow…\n" + .string "I scalded my tongue!\p" + .string "This nice old lady in the MANSION\n" + .string "gave me some TEA.\p" + .string "But it was boiling hot!\n" + .string "Gotta cool it to drink it.$" + +Text_SoftboiledTeach:: + .string "Hello, there!\p" + .string "I've seen you about, but I never\n" + .string "had a chance to chat.\p" + .string "It must be good luck that brought\n" + .string "us together finally.\p" + .string "I'd like to celebrate by teaching\n" + .string "you the move SOFTBOILED.$" + +Text_SoftboiledDeclined:: + .string "I'll always be keeping an eye out\n" + .string "for you.\p" + .string "I hope we can chat again.$" + +Text_SoftboiledWhichMon:: + .string "So, who's the POKéMON that gets\n" + .string "the chance to learn SOFTBOILED?$" + +Text_SoftboiledTaught:: + .string "I wish you the best of luck!$" + +CeladonCity_Text_SomeoneStoleSilphScope:: + .string "Oh, what am I to do…\p" + .string "Someone stole our SILPH SCOPE.\p" + .string "The thief came running this way,\n" + .string "I'm sure of it.\p" + .string "But I lost sight of him!\n" + .string "Where'd he go?$" + diff --git a/data/maps/CeladonCity_Condominiums_1F/scripts.inc b/data/maps/CeladonCity_Condominiums_1F/scripts.inc new file mode 100644 index 000000000000..f8e837f6997c --- /dev/null +++ b/data/maps/CeladonCity_Condominiums_1F/scripts.inc @@ -0,0 +1,100 @@ +CeladonCity_Condominiums_1F_MapScripts:: + .byte 0 + +CeladonCity_Condominiums_1F_EventScript_TeaWoman:: + lock + faceplayer + goto_if_set FLAG_TALKED_TO_TEA_LADY_AFTER_HOF, CeladonCity_Condominiums_1F_EventScript_TeaWomanAfterTea + goto_if_set FLAG_SYS_GAME_CLEAR, CeladonCity_Condominiums_1F_EventScript_TeaWomanMentionDaisy + goto_if_set FLAG_GOT_TEA, CeladonCity_Condominiums_1F_EventScript_TeaWomanAfterTea + msgbox CeladonCity_Condominiums_1F_Text_TryThisDrinkInstead + setflag FLAG_GOT_TEA + giveitem ITEM_TEA + goto_if_eq VAR_RESULT, FALSE, EventScript_BagIsFull + msgbox CeladonCity_Condominiums_1F_Text_NothingBeatsThirstLikeTea + release + end + +CeladonCity_Condominiums_1F_EventScript_TeaWomanAfterTea:: + msgbox CeladonCity_Condominiums_1F_Text_MyDearMonsKeepMeCompany + release + end + +CeladonCity_Condominiums_1F_EventScript_TeaWomanMentionDaisy:: + famechecker FAMECHECKER_DAISY, 4 + setflag FLAG_TALKED_TO_TEA_LADY_AFTER_HOF + msgbox CeladonCity_Condominiums_1F_Text_DaisyComesToBuyTea + release + end + +CeladonCity_Condominiums_1F_EventScript_Meowth:: + lock + faceplayer + waitse + playmoncry SPECIES_MEOWTH, CRY_MODE_NORMAL + msgbox CeladonCity_Condominiums_1F_Text_Meowth + waitmoncry + release + end + +CeladonCity_Condominiums_1F_EventScript_Clefairy:: + lock + faceplayer + waitse + playmoncry SPECIES_CLEFAIRY, CRY_MODE_NORMAL + msgbox CeladonCity_Condominiums_1F_Text_Clefairy + waitmoncry + release + end + +CeladonCity_Condominiums_1F_EventScript_Nidoran:: + lock + faceplayer + waitse + playmoncry SPECIES_NIDORAN_F, CRY_MODE_NORMAL + msgbox CeladonCity_Condominiums_1F_Text_Nidoran + waitmoncry + release + end + +CeladonCity_Condominiums_1F_EventScript_SuiteSign:: + msgbox CeladonCity_Condominiums_1F_Text_ManagersSuite, MSGBOX_SIGN + end + +CeladonCity_Condominiums_1F_Text_Meowth:: + .string "MEOWTH: Meow!$" + +CeladonCity_Condominiums_1F_Text_TryThisDrinkInstead:: + .string "You shouldn't spend all your money\n" + .string "on drinks.\p" + .string "Try this instead.$" + +CeladonCity_Condominiums_1F_Text_NothingBeatsThirstLikeTea:: + .string "Nothing beats thirst like some hot\n" + .string "TEA.\p" + .string "It really is the best.$" + +CeladonCity_Condominiums_1F_Text_MyDearMonsKeepMeCompany:: + .string "My dear POKéMON keep me company.\n" + .string "MEOWTH even brings money home!$" + +CeladonCity_Condominiums_1F_Text_DaisyComesToBuyTea:: + .string "Oh, hello, dearie.\n" + .string "Did you enjoy my TEA?\p" + .string "By the way, dear. Are you, by any\n" + .string "chance, from PALLET TOWN?\p" + .string "A girl from PALLET TOWN, DAISY,\n" + .string "she enjoys TEA every day.\p" + .string "She visits the CELADON DEPT. STORE\n" + .string "to buy some TEA.$" + +CeladonCity_Condominiums_1F_Text_Clefairy:: + .string "CLEFAIRY: Pi pippippi!$" + +CeladonCity_Condominiums_1F_Text_Nidoran:: + .string "NIDORAN♀: Kya kyaoo!$" + +CeladonCity_Condominiums_1F_Text_ManagersSuite:: + .string "CELADON MANSION\n" + .string "Manager's Suite$" + diff --git a/data/maps/CeladonCity_Condominiums_2F/scripts.inc b/data/maps/CeladonCity_Condominiums_2F/scripts.inc new file mode 100644 index 000000000000..2a968c1e1bd1 --- /dev/null +++ b/data/maps/CeladonCity_Condominiums_2F/scripts.inc @@ -0,0 +1,10 @@ +CeladonCity_Condominiums_2F_MapScripts:: + .byte 0 + +CeladonCity_Condominiums_2F_EventScript_MeetingRoomSign:: + msgbox CeladonCity_Condominiums_2F_Text_GameFreakMeetingRoom, MSGBOX_SIGN + end + +CeladonCity_Condominiums_2F_Text_GameFreakMeetingRoom:: + .string "GAME FREAK Meeting Room$" + diff --git a/data/maps/CeladonCity_Condominiums_3F/scripts.inc b/data/maps/CeladonCity_Condominiums_3F/scripts.inc new file mode 100644 index 000000000000..8fe57e240325 --- /dev/null +++ b/data/maps/CeladonCity_Condominiums_3F/scripts.inc @@ -0,0 +1,95 @@ +CeladonCity_Condominiums_3F_MapScripts:: + .byte 0 + +CeladonCity_Condominiums_3F_EventScript_Programmer:: + msgbox CeladonCity_Condominiums_3F_Text_ImTheProgrammer, MSGBOX_NPC + end + +CeladonCity_Condominiums_3F_EventScript_GraphicArtist:: + msgbox CeladonCity_Condominiums_3F_Text_ImTheGraphicArtist, MSGBOX_NPC + end + +CeladonCity_Condominiums_3F_EventScript_Writer:: + msgbox CeladonCity_Condominiums_3F_Text_IWroteTheStory, MSGBOX_NPC + end + +CeladonCity_Condominiums_3F_EventScript_Designer:: + lock + faceplayer + specialvar VAR_RESULT, HasAllKantoMons + goto_if_eq VAR_RESULT, TRUE, CeladonCity_Condominiums_3F_EventScript_CompletedPokedex + msgbox CeladonCity_Condominiums_3F_Text_ImGameDesignerShowMeFinishedPokedex + release + end + +CeladonCity_Condominiums_3F_EventScript_CompletedPokedex:: + goto CeladonCity_Condominiums_3F_EventScript_ShowDiploma + end + +CeladonCity_Condominiums_3F_EventScript_ShowDiploma:: + message CeladonCity_Condominiums_3F_Text_CompletedPokedexCongratulations + waitmessage + delay 60 + special Special_ShowDiploma + waitstate + release + end + +CeladonCity_Condominiums_3F_EventScript_DevelopmentRoomSign:: + msgbox CeladonCity_Condominiums_3F_Text_GameFreakDevelopmentRoom, MSGBOX_SIGN + end + +CeladonCity_Condominiums_3F_EventScript_Computer1:: + msgbox CeladonCity_Condominiums_3F_Text_ItsTheGameProgram, MSGBOX_SIGN + end + +CeladonCity_Condominiums_3F_EventScript_Computer2:: + msgbox CeladonCity_Condominiums_3F_Text_SomeonesPlayingGame, MSGBOX_SIGN + end + +CeladonCity_Condominiums_3F_EventScript_Computer3:: + msgbox CeladonCity_Condominiums_3F_Text_ItsScriptBetterNotLookAtEnding, MSGBOX_SIGN + end + +CeladonCity_Condominiums_3F_Text_ImTheProgrammer:: + .string "Me?\n" + .string "I'm the programmer!$" + +CeladonCity_Condominiums_3F_Text_ImTheGraphicArtist:: + .string "I'm the graphic artist!\n" + .string "I drew you!$" + +CeladonCity_Condominiums_3F_Text_IWroteTheStory:: + .string "I wrote the story!\n" + .string "Isn't ERIKA cute?\p" + .string "I like MISTY a lot, too!\n" + .string "Oh, and SABRINA, I like her!$" + +CeladonCity_Condominiums_3F_Text_ImGameDesignerShowMeFinishedPokedex:: + .string "Is that right?\p" + .string "I'm the game designer!\p" + .string "Filling up your POKéDEX is tough,\n" + .string "but don't quit!\p" + .string "When you finish, come tell me!$" + +CeladonCity_Condominiums_3F_Text_CompletedPokedexCongratulations:: + .string "Wow! Excellent!\n" + .string "You completed your POKéDEX!\l" + .string "Congratulations!\l" + .string "…$" + +CeladonCity_Condominiums_3F_Text_ItsTheGameProgram:: + .string "It's the game program! Messing with\n" + .string "it could bug out the game!$" + +CeladonCity_Condominiums_3F_Text_SomeonesPlayingGame:: + .string "Someone's playing a game instead of\n" + .string "working!$" + +CeladonCity_Condominiums_3F_Text_ItsScriptBetterNotLookAtEnding:: + .string "It's the script!\n" + .string "Better not look at the ending!$" + +CeladonCity_Condominiums_3F_Text_GameFreakDevelopmentRoom:: + .string "GAME FREAK Development Room$" + diff --git a/data/maps/CeladonCity_Condominiums_Roof/scripts.inc b/data/maps/CeladonCity_Condominiums_Roof/scripts.inc new file mode 100644 index 000000000000..887274521203 --- /dev/null +++ b/data/maps/CeladonCity_Condominiums_Roof/scripts.inc @@ -0,0 +1,10 @@ +CeladonCity_Condominiums_Roof_MapScripts:: + .byte 0 + +CeladonCity_Condominiums_Roof_EventScript_Sign:: + msgbox CeladonCity_Condominiums_Roof_Text_IKnowEverything, MSGBOX_SIGN + end + +CeladonCity_Condominiums_Roof_Text_IKnowEverything:: + .string "I KNOW EVERYTHING!$" + diff --git a/data/maps/CeladonCity_Condominiums_RoofRoom/scripts.inc b/data/maps/CeladonCity_Condominiums_RoofRoom/scripts.inc new file mode 100644 index 000000000000..7a0f2c065438 --- /dev/null +++ b/data/maps/CeladonCity_Condominiums_RoofRoom/scripts.inc @@ -0,0 +1,157 @@ +CeladonCity_Condominiums_RoofRoom_MapScripts:: + .byte 0 + +CeladonCity_Condominiums_RoofRoom_EventScript_BlackBelt:: + msgbox CeladonCity_Condominiums_RoofRoom_Text_TheresNothingIDontKnow, MSGBOX_NPC + end + +CeladonCity_Condominiums_RoofRoom_EventScript_EeveeBall:: + lock + faceplayer + setvar VAR_TEMP_1, SPECIES_EEVEE + givemon SPECIES_EEVEE, 25 + goto_if_eq VAR_RESULT, 0, CeladonCity_Condominiums_RoofRoom_EventScript_GetEeveeParty + goto_if_eq VAR_RESULT, 1, CeladonCity_Condominiums_RoofRoom_EventScript_GetEeveePC + goto_if_eq VAR_RESULT, 2, Common_EventScript_NoMoreRoomForPokemon + release + end + +CeladonCity_Condominiums_RoofRoom_EventScript_GetEeveeParty:: + removeobject LOCALID_EEVEE_POKEBALL + playfanfare MUS_LEVEL_UP + message CeladonCity_Condominiums_RoofRoom_Text_ObtainedAnEevee + waitmessage + waitfanfare + bufferspeciesname STR_VAR_1, SPECIES_EEVEE + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeladonCity_Condominiums_RoofRoom_EventScript_SetGotEevee + call Common_EventScript_GetGiftMonPartySlot + call Common_EventScript_NameReceivedPartyMon + goto CeladonCity_Condominiums_RoofRoom_EventScript_SetGotEevee + end + +CeladonCity_Condominiums_RoofRoom_EventScript_GetEeveePC:: + removeobject LOCALID_EEVEE_POKEBALL + playfanfare MUS_LEVEL_UP + message CeladonCity_Condominiums_RoofRoom_Text_ObtainedAnEevee + waitmessage + waitfanfare + bufferspeciesname STR_VAR_1, SPECIES_EEVEE + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeladonCity_Condominiums_RoofRoom_EventScript_TransferEeveeToPC + call Common_EventScript_NameReceivedBoxMon + goto CeladonCity_Condominiums_RoofRoom_EventScript_TransferEeveeToPC + end + +CeladonCity_Condominiums_RoofRoom_EventScript_TransferEeveeToPC:: + call Common_EventScript_TransferredToPC + goto CeladonCity_Condominiums_RoofRoom_EventScript_SetGotEevee + end + +CeladonCity_Condominiums_RoofRoom_EventScript_SetGotEevee:: + setflag FLAG_GOT_EEVEE + release + end + +CeladonCity_Condominiums_RoofRoom_EventScript_TMsPamphlet:: + msgbox CeladonCity_Condominiums_RoofRoom_Text_PamphletOnTMs, MSGBOX_SIGN + end + +CeladonCity_Condominiums_RoofRoom_EventScript_Blackboard:: + lockall + msgbox CeladonCity_Condominiums_RoofRoom_Text_WirelessAdapterLecture + message CeladonCity_Condominiums_RoofRoom_Text_ReadWhichHeading + waitmessage + setvar VAR_0x8004, 4 + multichoice 0, 0, MULTI_LINKED_DIRECT_UNION, FALSE + switch VAR_RESULT + case 0, CeladonCity_Condominiums_RoofRoom_EventScript_WirelessClub + case 1, CeladonCity_Condominiums_RoofRoom_EventScript_DirectCorner + case 2, CeladonCity_Condominiums_RoofRoom_EventScript_UnionRoom + case 3, CeladonCity_Condominiums_RoofRoom_EventScript_ExitBlackboard + case 127, CeladonCity_Condominiums_RoofRoom_EventScript_ExitBlackboard + end + +CeladonCity_Condominiums_RoofRoom_EventScript_ReadAnotherHeading:: + message CeladonCity_Condominiums_RoofRoom_Text_ReadWhichHeading + waitmessage + multichoice 0, 0, MULTI_LINKED_DIRECT_UNION, FALSE + switch VAR_RESULT + case 0, CeladonCity_Condominiums_RoofRoom_EventScript_WirelessClub + case 1, CeladonCity_Condominiums_RoofRoom_EventScript_DirectCorner + case 2, CeladonCity_Condominiums_RoofRoom_EventScript_UnionRoom + case 3, CeladonCity_Condominiums_RoofRoom_EventScript_ExitBlackboard + case 127, CeladonCity_Condominiums_RoofRoom_EventScript_ExitBlackboard + end + +CeladonCity_Condominiums_RoofRoom_EventScript_WirelessClub:: + msgbox CeladonCity_Condominiums_RoofRoom_Text_ExplainWirelessClub + goto CeladonCity_Condominiums_RoofRoom_EventScript_ReadAnotherHeading + end + +CeladonCity_Condominiums_RoofRoom_EventScript_DirectCorner:: + msgbox CeladonCity_Condominiums_RoofRoom_Text_ExplainDirectCorner + goto CeladonCity_Condominiums_RoofRoom_EventScript_ReadAnotherHeading + end + +CeladonCity_Condominiums_RoofRoom_EventScript_UnionRoom:: + msgbox CeladonCity_Condominiums_RoofRoom_Text_ExplainUnionRoom + goto CeladonCity_Condominiums_RoofRoom_EventScript_ReadAnotherHeading + end + +CeladonCity_Condominiums_RoofRoom_EventScript_ExitBlackboard:: + releaseall + end + +CeladonCity_Condominiums_RoofRoom_Text_TheresNothingIDontKnow:: + .string "There is nothing that I don't know,\n" + .string "like I wrote on the blackboard.\p" + .string "I know about the world of POKéMON\n" + .string "in your GAME BOY ADVANCE!\p" + .string "Get together with your friends and\n" + .string "enjoy trading POKéMON!$" + +CeladonCity_Condominiums_RoofRoom_Text_ObtainedAnEevee:: + .string "{PLAYER} obtained an EEVEE!$" + +CeladonCity_Condominiums_RoofRoom_Text_BoxIsFull:: + .string "ポケモンが いっぱいだ\n" + .string "ボックスを かえて きなさい$" + +CeladonCity_Condominiums_RoofRoom_Text_WirelessAdapterLecture:: + .string "POKéMON Lecture\p" + .string "Playing with the Wireless Adapter$" + +CeladonCity_Condominiums_RoofRoom_Text_ReadWhichHeading:: + .string "Which heading do you want to read?$" + +CeladonCity_Condominiums_RoofRoom_Text_ExplainWirelessClub:: + .string "The POKéMON WIRELESS CLUB is\n" + .string "upstairs at any POKéMON CENTER.\p" + .string "Visit one to link up with friend(s)\n" + .string "using your Wireless Adapter.$" + +CeladonCity_Condominiums_RoofRoom_Text_ExplainDirectCorner:: + .string "To link only with a friend, go to\n" + .string "the DIRECT CORNER.\p" + .string "It is the right counter at the\n" + .string "POKéMON WIRELESS CLUB.\p" + .string "Go into the TRADE CORNER or the\n" + .string "COLOSSEUM with your friend.$" + +CeladonCity_Condominiums_RoofRoom_Text_ExplainUnionRoom:: + .string "To link and communicate with\n" + .string "anyone, go to the UNION ROOM.\p" + .string "It is the left counter at the\n" + .string "POKéMON WIRELESS CLUB.\p" + .string "Go to the UNION ROOM and enjoy\n" + .string "meeting other TRAINERS.$" + +CeladonCity_Condominiums_RoofRoom_Text_PamphletOnTMs:: + .string "It's a pamphlet on TMs.\p" + .string "… …\p" + .string "There are fifty TMs in all.\p" + .string "There are also seven HMs that\n" + .string "can be used repeatedly.\p" + .string "SILPH CO.$" + diff --git a/data/maps/CeladonCity_DepartmentStore_1F/scripts.inc b/data/maps/CeladonCity_DepartmentStore_1F/scripts.inc new file mode 100644 index 000000000000..b922159b319f --- /dev/null +++ b/data/maps/CeladonCity_DepartmentStore_1F/scripts.inc @@ -0,0 +1,32 @@ +CeladonCity_DepartmentStore_1F_MapScripts:: + .byte 0 + +CeladonCity_DepartmentStore_1F_EventScript_Receptionist:: + msgbox CeladonCity_DepartmentStore_1F_Text_WelcomeToDeptStore, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_1F_EventScript_LayoutSign:: + msgbox CeladonCity_DepartmentStore_1F_Text_FloorDescriptions, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_1F_EventScript_FloorSign:: + msgbox CeladonCity_DepartmentStore_1F_Text_ServiceCounter, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_1F_Text_WelcomeToDeptStore:: + .string "Hello!\n" + .string "Welcome to CELADON DEPT. STORE.\p" + .string "The board on the right describes\n" + .string "the store layout.$" + +CeladonCity_DepartmentStore_1F_Text_FloorDescriptions:: + .string "1F: SERVICE COUNTER\p" + .string "2F: TRAINER'S MARKET\p" + .string "3F: TV GAME SHOP\p" + .string "4F: WISE MAN GIFTS\p" + .string "5F: DRUGSTORE\p" + .string "ROOFTOP SQUARE: VENDING MACHINES$" + +CeladonCity_DepartmentStore_1F_Text_ServiceCounter:: + .string "1F: SERVICE COUNTER$" + diff --git a/data/maps/CeladonCity_DepartmentStore_2F/scripts.inc b/data/maps/CeladonCity_DepartmentStore_2F/scripts.inc new file mode 100644 index 000000000000..74819191b629 --- /dev/null +++ b/data/maps/CeladonCity_DepartmentStore_2F/scripts.inc @@ -0,0 +1,81 @@ +CeladonCity_DepartmentStore_2F_MapScripts:: + .byte 0 + +CeladonCity_DepartmentStore_2F_EventScript_UnusedNPC:: + msgbox CeladonCity_DepartmentStore_2F_Text_SuperRepelMorePowerfulRepel, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_2F_EventScript_Lass:: + msgbox CeladonCity_DepartmentStore_2F_Text_BuyReviveForLongOutings, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_2F_EventScript_FloorSign:: + msgbox CeladonCity_DepartmentStore_2F_Text_FloorSign, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_2F_EventScript_ClerkItems:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart CeladonCity_DepartmentStore_2F_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +CeladonCity_DepartmentStore_2F_Items:: + .2byte ITEM_GREAT_BALL + .2byte ITEM_SUPER_POTION + .2byte ITEM_REVIVE + .2byte ITEM_ANTIDOTE + .2byte ITEM_PARALYZE_HEAL + .2byte ITEM_AWAKENING + .2byte ITEM_BURN_HEAL + .2byte ITEM_ICE_HEAL + .2byte ITEM_SUPER_REPEL + .2byte ITEM_NONE + release + end + +CeladonCity_DepartmentStore_2F_EventScript_ClerkTMs:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart CeladonCity_DepartmentStore_2F_TMs + msgbox gText_PleaseComeAgain + release + end + + .align 2 +CeladonCity_DepartmentStore_2F_TMs:: + .2byte ITEM_TM05 + .2byte ITEM_TM15 + .2byte ITEM_TM28 + .2byte ITEM_TM31 + .2byte ITEM_TM43 + .2byte ITEM_TM45 + .2byte ITEM_NONE + release + end + +CeladonCity_DepartmentStore_2F_Text_SuperRepelMorePowerfulRepel:: + .string "SUPER REPEL keeps weak POKéMON at\n" + .string "bay…\p" + .string "Hmm, it's a more powerful REPEL.$" + +CeladonCity_DepartmentStore_2F_Text_BuyReviveForLongOutings:: + .string "For long outings, you should buy\n" + .string "REVIVE.$" + +CeladonCity_DepartmentStore_2F_Text_FloorSign:: + .string "Top-Grade Items for TRAINERS!\p" + .string "2F: TRAINER'S MARKET$" + +CeladonCity_DepartmentStore_2F_Text_LanceComesToBuyCapes:: + .string "We have a customer, LANCE, who\n" + .string "occasionally comes.\p" + .string "He always buys capes.\p" + .string "I wonder… Does he have many\n" + .string "identical capes at home?$" diff --git a/data/maps/CeladonCity_DepartmentStore_3F/scripts.inc b/data/maps/CeladonCity_DepartmentStore_3F/scripts.inc new file mode 100644 index 000000000000..076096f17882 --- /dev/null +++ b/data/maps/CeladonCity_DepartmentStore_3F/scripts.inc @@ -0,0 +1,121 @@ +CeladonCity_DepartmentStore_3F_MapScripts:: + .byte 0 + +CeladonCity_DepartmentStore_3F_EventScript_CounterTutor:: + goto EventScript_CounterTutor + end + +CeladonCity_DepartmentStore_3F_EventScript_GBAKid1:: + msgbox CeladonCity_DepartmentStore_3F_Text_OTStandsForOriginalTrainer, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_3F_EventScript_GBAKid2:: + msgbox CeladonCity_DepartmentStore_3F_Text_BuddyTradingKangaskhanForHaunter, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_3F_EventScript_GBAKid3:: + msgbox CeladonCity_DepartmentStore_3F_Text_HaunterEvolvedOnTrade, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_3F_EventScript_LittleGirl:: + msgbox CeladonCity_DepartmentStore_3F_Text_CanIdentifyTradeMonsByID, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_3F_EventScript_SuperNES:: + msgbox CeladonCity_DepartmentStore_3F_Text_ItsSuperNES, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_3F_EventScript_TV1:: + msgbox CeladonCity_DepartmentStore_3F_Text_AnRPG, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_3F_EventScript_TV2:: + msgbox CeladonCity_DepartmentStore_3F_Text_SportsGame, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_3F_EventScript_TV3:: + msgbox CeladonCity_DepartmentStore_3F_Text_PuzzleGame, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_3F_EventScript_TV4:: + msgbox CeladonCity_DepartmentStore_3F_Text_FightingGame, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_3F_EventScript_FloorSign:: + msgbox CeladonCity_DepartmentStore_3F_Text_TVGameShop, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_3F_EventScript_Poster:: + msgbox CeladonCity_DepartmentStore_3F_Text_RedGreenBothArePokemon, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_3F_Text_OTStandsForOriginalTrainer:: + .string "Captured POKéMON are registered\n" + .string "with an ID No. and the OT.\p" + .string "OT stands for “Original TRAINER” -\n" + .string "the TRAINER that caught it first.$" + +CeladonCity_DepartmentStore_3F_Text_BuddyTradingKangaskhanForHaunter:: + .string "All right!\p" + .string "My buddy's going to trade me his\n" + .string "KANGASKHAN for my HAUNTER!$" + +CeladonCity_DepartmentStore_3F_Text_HaunterEvolvedOnTrade:: + .string "Come on, HAUNTER!\p" + .string "I love HAUNTER!\n" + .string "I collect them!\p" + .string "Huh?\p" + .string "HAUNTER turned into a different\n" + .string "POKéMON while being traded!$" + +CeladonCity_DepartmentStore_3F_Text_CanIdentifyTradeMonsByID:: + .string "You can identify POKéMON you get\n" + .string "in trades by their ID Numbers.$" + +CeladonCity_DepartmentStore_3F_Text_ItsSuperNES:: + .string "It's a Super NES.$" + +CeladonCity_DepartmentStore_3F_Text_AnRPG:: + .string "An RPG!\n" + .string "There's no time for that!$" + +CeladonCity_DepartmentStore_3F_Text_SportsGame:: + .string "A sports game!\n" + .string "Dad'll like that!$" + +CeladonCity_DepartmentStore_3F_Text_PuzzleGame:: + .string "A puzzle game!\n" + .string "Looks addictive!$" + +CeladonCity_DepartmentStore_3F_Text_FightingGame:: + .string "A fighting game!\n" + .string "Looks tough!$" + +CeladonCity_DepartmentStore_3F_Text_TVGameShop:: + .string "3F: TV GAME SHOP$" + +CeladonCity_DepartmentStore_3F_Text_RedGreenBothArePokemon:: + .string "Red and Green!\n" + .string "Both are POKéMON!$" + +Text_CounterTeach:: + .string "Oh, hi!\n" + .string "I finally finished POKéMON.\p" + .string "Not done yet? How about I teach\n" + .string "you a good move?\p" + .string "The move I have in mind is\n" + .string "COUNTER.\p" + .string "Not like the one I'm leaning on,\n" + .string "mind you!$" + +Text_CounterDeclined:: + .string "You're not interested? Come see\n" + .string "me if you change your mind.$" + +Text_CounterWhichMon:: + .string "Which POKéMON should I teach\n" + .string "COUNTER to?$" + +Text_CounterTaught:: + .string "Are you using that COUNTER move\n" + .string "I taught your POKéMON?$" diff --git a/data/maps/CeladonCity_DepartmentStore_4F/scripts.inc b/data/maps/CeladonCity_DepartmentStore_4F/scripts.inc new file mode 100644 index 000000000000..a9a082fdf1e2 --- /dev/null +++ b/data/maps/CeladonCity_DepartmentStore_4F/scripts.inc @@ -0,0 +1,55 @@ +CeladonCity_DepartmentStore_4F_MapScripts:: + .byte 0 + +CeladonCity_DepartmentStore_4F_EventScript_Man:: + msgbox CeladonCity_DepartmentStore_4F_Text_GettingPokeDollAsPresent, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_4F_EventScript_Youngster:: + msgbox CeladonCity_DepartmentStore_4F_Text_CanRunAwayWithPokeDoll, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_4F_EventScript_FloorSign:: + msgbox CeladonCity_DepartmentStore_4F_Text_FloorSign, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_4F_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart CeladonCity_DepartmentStore_4F_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +CeladonCity_DepartmentStore_4F_Items:: + .2byte ITEM_POKE_DOLL + .2byte ITEM_RETRO_MAIL + .2byte ITEM_FIRE_STONE + .2byte ITEM_THUNDER_STONE + .2byte ITEM_WATER_STONE + .2byte ITEM_LEAF_STONE + .2byte ITEM_NONE + release + end + +CeladonCity_DepartmentStore_4F_Text_GettingPokeDollAsPresent:: + .string "I'm getting a present for my\n" + .string "girlfriend.\p" + .string "I guess a POKé DOLL will be it.\n" + .string "It's the popular thing.$" + +CeladonCity_DepartmentStore_4F_Text_CanRunAwayWithPokeDoll:: + .string "I heard something useful.\p" + .string "If a wild POKéMON appears, you can\n" + .string "distract it with a POKé DOLL.\p" + .string "You can run away while the wild\n" + .string "POKéMON is distracted.$" + +CeladonCity_DepartmentStore_4F_Text_FloorSign:: + .string "Express yourself with gifts!\n" + .string "4F: WISE MAN GIFTS\p" + .string "Evolution Special!\n" + .string "Element STONES on sale now!$" diff --git a/data/maps/CeladonCity_DepartmentStore_5F/scripts.inc b/data/maps/CeladonCity_DepartmentStore_5F/scripts.inc new file mode 100644 index 000000000000..5b6b8c3ba0bc --- /dev/null +++ b/data/maps/CeladonCity_DepartmentStore_5F/scripts.inc @@ -0,0 +1,83 @@ +CeladonCity_DepartmentStore_5F_MapScripts:: + .byte 0 + +CeladonCity_DepartmentStore_5F_EventScript_Gentleman:: + msgbox CeladonCity_DepartmentStore_5F_Text_ExplainStatEnhancers, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_5F_EventScript_Sailor:: + msgbox CeladonCity_DepartmentStore_5F_Text_HereForStatEnhancers, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_5F_EventScript_FloorSign:: + msgbox CeladonCity_DepartmentStore_5F_Text_Drugstore, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_5F_EventScript_ClerkXItems:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart CeladonCity_DepartmentStore_5F_XItems + msgbox gText_PleaseComeAgain + release + end + + .align 2 +CeladonCity_DepartmentStore_5F_XItems:: + .2byte ITEM_X_ATTACK + .2byte ITEM_X_DEFEND + .2byte ITEM_X_SPEED + .2byte ITEM_X_SPECIAL + .2byte ITEM_X_ACCURACY + .2byte ITEM_GUARD_SPEC + .2byte ITEM_DIRE_HIT + .2byte ITEM_NONE + release + end + +CeladonCity_DepartmentStore_5F_EventScript_ClerkVitamins:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart CeladonCity_DepartmentStore_5F_Vitamins + msgbox gText_PleaseComeAgain + release + end + + .align 2 +CeladonCity_DepartmentStore_5F_Vitamins:: + .2byte ITEM_HP_UP + .2byte ITEM_PROTEIN + .2byte ITEM_IRON + .2byte ITEM_CALCIUM + .2byte ITEM_ZINC + .2byte ITEM_CARBOS + .2byte ITEM_NONE + release + end + +CeladonCity_DepartmentStore_5F_Text_ExplainStatEnhancers:: + .string "POKéMON stat enhancers can be\n" + .string "bought only here.\p" + .string "HP UP increases the base HP of a\n" + .string "POKéMON.\p" + .string "CALCIUM raises the base SP. ATK\n" + .string "stat of one POKéMON.\p" + .string "ZINC boosts the base SP. DEF stat\n" + .string "of one POKéMON.\p" + .string "CARBOS enhances the base SPEED\n" + .string "stat.$" + +CeladonCity_DepartmentStore_5F_Text_HereForStatEnhancers:: + .string "I'm here for POKéMON stat\n" + .string "enhancers.\p" + .string "PROTEIN increases the base ATTACK\n" + .string "power.\p" + .string "IRON increases the base DEFENSE\n" + .string "stat.$" + +CeladonCity_DepartmentStore_5F_Text_Drugstore:: + .string "5F: DRUGSTORE$" + diff --git a/data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc b/data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc new file mode 100644 index 000000000000..acc27e2f1ef5 --- /dev/null +++ b/data/maps/CeladonCity_DepartmentStore_Elevator/scripts.inc @@ -0,0 +1,115 @@ +CeladonCity_DepartmentStore_Elevator_MapScripts:: + .byte 0 + +CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelect:: + lockall + setvar VAR_0x8004, 3 + call_if_unset FLAG_TEMP_2, EventScript_GetElevatorFloor + copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR + special DrawElevatorCurrentFloorWindow + message gText_WantWhichFloor + waitmessage + setvar VAR_0x8004, 3 + specialvar VAR_RESULT, InitElevatorFloorSelectMenuPos + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom5F + case 1, CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom4F + case 2, CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom3F + case 3, CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom2F + case 4, CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom1F + end + +CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom5F:: + multichoicedefault 0, 0, MULTI_DEPT_STORE_ELEVATOR, 0, FALSE + goto CeladonCity_DepartmentStore_Elevator_EventScript_ChooseFloor + end + +CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom4F:: + multichoicedefault 0, 0, MULTI_DEPT_STORE_ELEVATOR, 1, FALSE + goto CeladonCity_DepartmentStore_Elevator_EventScript_ChooseFloor + end + +CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom3F:: + multichoicedefault 0, 0, MULTI_DEPT_STORE_ELEVATOR, 2, FALSE + goto CeladonCity_DepartmentStore_Elevator_EventScript_ChooseFloor + end + +CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom2F:: + multichoicedefault 0, 0, MULTI_DEPT_STORE_ELEVATOR, 3, FALSE + goto CeladonCity_DepartmentStore_Elevator_EventScript_ChooseFloor + end + +CeladonCity_DepartmentStore_Elevator_EventScript_FloorSelectFrom1F:: + multichoicedefault 0, 0, MULTI_DEPT_STORE_ELEVATOR, 4, FALSE + goto CeladonCity_DepartmentStore_Elevator_EventScript_ChooseFloor + end + +CeladonCity_DepartmentStore_Elevator_EventScript_ChooseFloor:: + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Elevator_EventScript_To5F + case 1, CeladonCity_DepartmentStore_Elevator_EventScript_To4F + case 2, CeladonCity_DepartmentStore_Elevator_EventScript_To3F + case 3, CeladonCity_DepartmentStore_Elevator_EventScript_To2F + case 4, CeladonCity_DepartmentStore_Elevator_EventScript_To1F + case 5, CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + case 127, CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + end + +CeladonCity_DepartmentStore_Elevator_EventScript_To1F:: + setvar VAR_0x8006, 4 + setdynamicwarp MAP_CELADON_CITY_DEPARTMENT_STORE_1F, 255, 6, 1 + goto_if_eq VAR_ELEVATOR_FLOOR, 4, CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + call CeladonCity_DepartmentStore_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 4 + goto CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + end + +CeladonCity_DepartmentStore_Elevator_EventScript_To2F:: + setvar VAR_0x8006, 5 + setdynamicwarp MAP_CELADON_CITY_DEPARTMENT_STORE_2F, 255, 6, 1 + goto_if_eq VAR_ELEVATOR_FLOOR, 5, CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + call CeladonCity_DepartmentStore_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 5 + goto CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + end + +CeladonCity_DepartmentStore_Elevator_EventScript_To3F:: + setvar VAR_0x8006, 6 + setdynamicwarp MAP_CELADON_CITY_DEPARTMENT_STORE_3F, 255, 6, 1 + goto_if_eq VAR_ELEVATOR_FLOOR, 6, CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + call CeladonCity_DepartmentStore_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 6 + goto CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + end + +CeladonCity_DepartmentStore_Elevator_EventScript_To4F:: + setvar VAR_0x8006, 7 + setdynamicwarp MAP_CELADON_CITY_DEPARTMENT_STORE_4F, 255, 6, 1 + goto_if_eq VAR_ELEVATOR_FLOOR, 7, CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + call CeladonCity_DepartmentStore_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 7 + goto CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + end + +CeladonCity_DepartmentStore_Elevator_EventScript_To5F:: + setvar VAR_0x8006, 8 + setdynamicwarp MAP_CELADON_CITY_DEPARTMENT_STORE_5F, 255, 6, 1 + goto_if_eq VAR_ELEVATOR_FLOOR, 8, CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + call CeladonCity_DepartmentStore_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 8 + goto CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect + end + +CeladonCity_DepartmentStore_Elevator_EventScript_ExitFloorSelect:: + special CloseElevatorCurrentFloorWindow + releaseall + end + +CeladonCity_DepartmentStore_Elevator_EventScript_MoveElevator:: + special CloseElevatorCurrentFloorWindow + closemessage + waitse + special AnimateElevator + waitstate + setflag FLAG_TEMP_2 + return diff --git a/data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc b/data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc new file mode 100644 index 000000000000..46d7fa96baea --- /dev/null +++ b/data/maps/CeladonCity_DepartmentStore_Roof/scripts.inc @@ -0,0 +1,364 @@ +CeladonCity_DepartmentStore_Roof_MapScripts:: + .byte 0 + +CeladonCity_DepartmentStore_Roof_EventScript_ThirstyGirl:: + lock + faceplayer + call CeladonCity_DepartmentStore_Roof_EventScript_CheckPlayerHasDrinks + goto_if_eq VAR_TEMP_1, 0, CeladonCity_DepartmentStore_Roof_EventScript_IWantDrink + goto CeladonCity_DepartmentStore_Roof_EventScript_AskGiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_CheckPlayerHasDrinks:: + setvar VAR_TEMP_1, 0 + checkitem ITEM_FRESH_WATER + call_if_eq VAR_RESULT, TRUE, CeladonCity_DepartmentStore_Roof_EventScript_SetHasFreshWater + checkitem ITEM_SODA_POP + call_if_eq VAR_RESULT, TRUE, CeladonCity_DepartmentStore_Roof_EventScript_SetHasSodaPop + checkitem ITEM_LEMONADE + call_if_eq VAR_RESULT, TRUE, CeladonCity_DepartmentStore_Roof_EventScript_SetHasLemonade + return + +CeladonCity_DepartmentStore_Roof_EventScript_SetHasFreshWater:: + addvar VAR_TEMP_1, 1 + return + +CeladonCity_DepartmentStore_Roof_EventScript_SetHasSodaPop:: + addvar VAR_TEMP_1, 2 + return + +CeladonCity_DepartmentStore_Roof_EventScript_SetHasLemonade:: + addvar VAR_TEMP_1, 4 + return + +CeladonCity_DepartmentStore_Roof_EventScript_AskGiveDrink:: + msgbox CeladonCity_DepartmentStore_Roof_Text_ImThirstyGiveHerDrink, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + textcolor NPC_TEXT_COLOR_NEUTRAL + message CeladonCity_DepartmentStore_Roof_Text_GiveWhichDrink + waitmessage + textcolor NPC_TEXT_COLOR_FEMALE + switch VAR_TEMP_1 + case 1, CeladonCity_DepartmentStore_Roof_EventScript_AskGiveFreshWater + case 2, CeladonCity_DepartmentStore_Roof_EventScript_AskGiveSodaPop + case 3, CeladonCity_DepartmentStore_Roof_EventScript_AskGiveFreshWaterSodaPop + case 4, CeladonCity_DepartmentStore_Roof_EventScript_AskGiveLemonade + case 5, CeladonCity_DepartmentStore_Roof_EventScript_AskGiveFreshWaterLemonade + case 6, CeladonCity_DepartmentStore_Roof_EventScript_AskGiveSodaPopLemonade + case 7, CeladonCity_DepartmentStore_Roof_EventScript_AskGiveAllDrinks + end + +CeladonCity_DepartmentStore_Roof_EventScript_AskGiveFreshWater:: + multichoice 0, 0, MULTI_THIRSTY_GIRL_FRESH_WATER, FALSE + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Roof_EventScript_GiveFreshWater + case 1, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + case 127, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_AskGiveSodaPop:: + multichoice 0, 0, MULTI_THIRSTY_GIRL_SODA_POP, FALSE + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Roof_EventScript_GiveSodaPop + case 1, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + case 127, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_AskGiveFreshWaterSodaPop:: + multichoice 0, 0, MULTI_THIRSTY_GIRL_FRESH_WATER_SODA_POP, FALSE + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Roof_EventScript_GiveFreshWater + case 1, CeladonCity_DepartmentStore_Roof_EventScript_GiveSodaPop + case 2, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + case 127, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_AskGiveLemonade:: + multichoice 0, 0, MULTI_THIRSTY_GIRL_LEMONADE, FALSE + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Roof_EventScript_GiveLemonade + case 1, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + case 127, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_AskGiveFreshWaterLemonade:: + multichoice 0, 0, MULTI_THIRSTY_GIRL_FRESH_WATER_LEMONADE, FALSE + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Roof_EventScript_GiveFreshWater + case 1, CeladonCity_DepartmentStore_Roof_EventScript_GiveLemonade + case 2, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + case 127, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_AskGiveSodaPopLemonade:: + multichoice 0, 0, MULTI_THIRSTY_GIRL_SODA_POP_LEMONADE, FALSE + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Roof_EventScript_GiveSodaPop + case 1, CeladonCity_DepartmentStore_Roof_EventScript_GiveLemonade + case 2, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + case 127, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_AskGiveAllDrinks:: + multichoice 0, 0, MULTI_THIRSTY_GIRL_FRESH_WATER_SODA_POP_LEMONADE, FALSE + switch VAR_RESULT + case 0, CeladonCity_DepartmentStore_Roof_EventScript_GiveFreshWater + case 1, CeladonCity_DepartmentStore_Roof_EventScript_GiveSodaPop + case 2, CeladonCity_DepartmentStore_Roof_EventScript_GiveLemonade + case 3, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + case 127, CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_GiveFreshWater:: + setvar VAR_0x8008, ITEM_FRESH_WATER + setvar VAR_0x8009, ITEM_TM16 + goto_if_set FLAG_GOT_TM16_FROM_THIRSTY_GIRL, CeladonCity_DepartmentStore_Roof_EventScript_NotThirstyAfterAll + msgbox CeladonCity_DepartmentStore_Roof_Text_YayFreshWaterHaveThis + goto CeladonCity_DepartmentStore_Roof_EventScript_GiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_GiveSodaPop:: + setvar VAR_0x8008, ITEM_SODA_POP + setvar VAR_0x8009, ITEM_TM20 + goto_if_set FLAG_GOT_TM20_FROM_THIRSTY_GIRL, CeladonCity_DepartmentStore_Roof_EventScript_NotThirstyAfterAll + msgbox CeladonCity_DepartmentStore_Roof_Text_YaySodaPopHaveThis + goto CeladonCity_DepartmentStore_Roof_EventScript_GiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_GiveLemonade:: + setvar VAR_0x8008, ITEM_LEMONADE + setvar VAR_0x8009, ITEM_TM33 + goto_if_set FLAG_GOT_TM33_FROM_THIRSTY_GIRL, CeladonCity_DepartmentStore_Roof_EventScript_NotThirstyAfterAll + msgbox CeladonCity_DepartmentStore_Roof_Text_YayLemonadeHaveThis + goto CeladonCity_DepartmentStore_Roof_EventScript_GiveDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_GiveDrink:: + bufferitemname STR_VAR_1, VAR_0x8008 + bufferitemname STR_VAR_2, VAR_0x8009 + removeitem VAR_0x8008 + checkitemspace VAR_0x8009 + goto_if_eq VAR_RESULT, FALSE, CeladonCity_DepartmentStore_Roof_EventScript_NoRoomForReward + additem VAR_0x8009 + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_LEVEL_UP + message Text_ReceivedItemFromLittleGirl + waitmessage + waitfanfare + putitemaway VAR_0x8009 + call EventScript_RestorePrevTextColor + call_if_eq VAR_0x8008, ITEM_FRESH_WATER, CeladonCity_DepartmentStore_Roof_EventScript_ExplainTM16 + call_if_eq VAR_0x8008, ITEM_SODA_POP, CeladonCity_DepartmentStore_Roof_EventScript_ExplainTM20 + call_if_eq VAR_0x8008, ITEM_LEMONADE, CeladonCity_DepartmentStore_Roof_EventScript_ExplainTM33 + release + end + +CeladonCity_DepartmentStore_Roof_EventScript_ExplainTM16:: + setflag FLAG_GOT_TM16_FROM_THIRSTY_GIRL + msgbox CeladonCity_DepartmentStore_Roof_Text_ExplainTM16 + return + +CeladonCity_DepartmentStore_Roof_EventScript_ExplainTM20:: + setflag FLAG_GOT_TM20_FROM_THIRSTY_GIRL + msgbox CeladonCity_DepartmentStore_Roof_Text_ExplainTM20 + return + +CeladonCity_DepartmentStore_Roof_EventScript_ExplainTM33:: + setflag FLAG_GOT_TM33_FROM_THIRSTY_GIRL + msgbox CeladonCity_DepartmentStore_Roof_Text_ExplainTM33 + return + +CeladonCity_DepartmentStore_Roof_EventScript_NoRoomForReward:: + msgbox CeladonCity_DepartmentStore_Roof_Text_DontHaveSpaceForThis + release + end + +CeladonCity_DepartmentStore_Roof_EventScript_DontGiveDrink:: + release + end + +CeladonCity_DepartmentStore_Roof_EventScript_IWantDrink:: + msgbox CeladonCity_DepartmentStore_Roof_Text_ImThirstyIWantDrink + release + end + +CeladonCity_DepartmentStore_Roof_EventScript_NotThirstyAfterAll:: + msgbox CeladonCity_DepartmentStore_Roof_Text_ImNotThirstyAfterAll + release + end + +CeladonCity_DepartmentStore_Roof_EventScript_CooltrainerM:: + msgbox CeladonCity_DepartmentStore_Roof_Text_MySisterIsImmature, MSGBOX_NPC + end + +CeladonCity_DepartmentStore_Roof_EventScript_FloorSign:: + msgbox CeladonCity_DepartmentStore_Roof_Text_FloorSign, MSGBOX_SIGN + end + +CeladonCity_DepartmentStore_Roof_EventScript_VendingMachine:: + lockall + message CeladonCity_DepartmentStore_Roof_Text_VendingMachineWhatDoesItHave + waitmessage + showmoneybox 0, 0 + goto CeladonCity_DepartmentStore_Roof_EventScript_ChooseDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_ChooseDrink:: + multichoice 12, 0, MULTI_CELADON_VENDING_MACHINE, FALSE + copyvar VAR_TEMP_1, VAR_RESULT + switch VAR_TEMP_1 + case 0, CeladonCity_DepartmentStore_Roof_EventScript_BuyFreshWater + case 1, CeladonCity_DepartmentStore_Roof_EventScript_BuySodaPop + case 2, CeladonCity_DepartmentStore_Roof_EventScript_BuyLemonade + msgbox CeladonCity_DepartmentStore_Roof_Text_NotThirsty + goto CeladonCity_DepartmentStore_Roof_EventScript_ExitVendingMachine + end + +CeladonCity_DepartmentStore_Roof_EventScript_BuyFreshWater:: + setvar VAR_TEMP_0, ITEM_FRESH_WATER + checkmoney 200 + goto CeladonCity_DepartmentStore_Roof_EventScript_TryBuyDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_BuySodaPop:: + setvar VAR_TEMP_0, ITEM_SODA_POP + checkmoney 300 + goto CeladonCity_DepartmentStore_Roof_EventScript_TryBuyDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_BuyLemonade:: + setvar VAR_TEMP_0, ITEM_LEMONADE + checkmoney 350 + goto CeladonCity_DepartmentStore_Roof_EventScript_TryBuyDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_RemoveMoneyFreshWater:: + removemoney 200 + return + +CeladonCity_DepartmentStore_Roof_EventScript_RemoveMoneySodaPop:: + removemoney 300 + return + +CeladonCity_DepartmentStore_Roof_EventScript_RemoveMoneyLemonade:: + removemoney 350 + return + +CeladonCity_DepartmentStore_Roof_EventScript_TryBuyDrink:: + goto_if_eq VAR_RESULT, FALSE, CeladonCity_DepartmentStore_Roof_EventScript_NotEnoughMoney + checkitemspace VAR_TEMP_0 + goto_if_eq VAR_RESULT, FALSE, CeladonCity_DepartmentStore_Roof_EventScript_NoRoomForDrink + call_if_eq VAR_TEMP_1, 0, CeladonCity_DepartmentStore_Roof_EventScript_RemoveMoneyFreshWater + call_if_eq VAR_TEMP_1, 1, CeladonCity_DepartmentStore_Roof_EventScript_RemoveMoneySodaPop + call_if_eq VAR_TEMP_1, 2, CeladonCity_DepartmentStore_Roof_EventScript_RemoveMoneyLemonade + updatemoneybox + bufferitemname STR_VAR_1, VAR_TEMP_0 + playse SE_VEND + msgbox CeladonCity_DepartmentStore_Roof_Text_DrinkCanPoppedOut + additem VAR_TEMP_0 + goto CeladonCity_DepartmentStore_Roof_EventScript_ChooseNewDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_ChooseNewDrink:: + message CeladonCity_DepartmentStore_Roof_Text_VendingMachineWhatDoesItHave + waitmessage + goto CeladonCity_DepartmentStore_Roof_EventScript_ChooseDrink + end + +CeladonCity_DepartmentStore_Roof_EventScript_NotEnoughMoney:: + msgbox CeladonCity_DepartmentStore_Roof_Text_NotEnoughMoney + goto CeladonCity_DepartmentStore_Roof_EventScript_ExitVendingMachine + end + +CeladonCity_DepartmentStore_Roof_EventScript_NoRoomForDrink:: + msgbox CeladonCity_DepartmentStore_Roof_Text_NoMoreRoomForStuff + goto CeladonCity_DepartmentStore_Roof_EventScript_ExitVendingMachine + end + +CeladonCity_DepartmentStore_Roof_EventScript_ExitVendingMachine:: + hidemoneybox + releaseall + end + +CeladonCity_DepartmentStore_Roof_Text_ImThirstyGiveHerDrink:: + .string "I'm thirsty!\n" + .string "I want something to drink!\p" + .string "{FONT_NORMAL}Give her a drink?$" + +CeladonCity_DepartmentStore_Roof_Text_GiveWhichDrink:: + .string "Give her which drink?$" + +CeladonCity_DepartmentStore_Roof_Text_YayFreshWaterHaveThis:: + .string "Yay!\p" + .string "FRESH WATER!\p" + .string "Thank you!\n" + .string "You can have this from me!$" + +Text_ReceivedItemFromLittleGirl:: + .string "{PLAYER} received a {STR_VAR_2}\n" + .string "from the little girl.$" + +CeladonCity_DepartmentStore_Roof_Text_ExplainTM16:: + .string "TM16 contains LIGHT SCREEN.\p" + .string "It's a move that weakens the power\n" + .string "of special attacks by your foe.$" + +CeladonCity_DepartmentStore_Roof_Text_YaySodaPopHaveThis:: + .string "Yay!\p" + .string "SODA POP!\p" + .string "Thank you!\n" + .string "You can have this from me!$" + +CeladonCity_DepartmentStore_Roof_Text_ExplainTM20:: + .string "TM20 contains SAFEGUARD.\p" + .string "It's a move that prevents status\n" + .string "problems among your POKéMON.$" + +CeladonCity_DepartmentStore_Roof_Text_YayLemonadeHaveThis:: + .string "Yay!\p" + .string "LEMONADE!\p" + .string "Thank you!\n" + .string "You can have this from me!$" + +CeladonCity_DepartmentStore_Roof_Text_ExplainTM33:: + .string "TM33 contains REFLECT.\p" + .string "It's a move that weakens the power\n" + .string "of physical attacks by your foe.$" + +CeladonCity_DepartmentStore_Roof_Text_DontHaveSpaceForThis:: + .string "You don't have space for this!$" + +CeladonCity_DepartmentStore_Roof_Text_ImNotThirstyAfterAll:: + .string "No, thank you!\n" + .string "I'm not thirsty after all!$" + +CeladonCity_DepartmentStore_Roof_Text_MySisterIsImmature:: + .string "My sister is a TRAINER, believe it\n" + .string "or not.\p" + .string "But, she's so immature, she drives\n" + .string "me nuts!$" + +CeladonCity_DepartmentStore_Roof_Text_ImThirstyIWantDrink:: + .string "I'm thirsty!\n" + .string "I want something to drink!$" + +CeladonCity_DepartmentStore_Roof_Text_FloorSign:: + .string "ROOFTOP SQUARE:\n" + .string "VENDING MACHINES$" + +CeladonCity_DepartmentStore_Roof_Text_VendingMachineWhatDoesItHave:: + .string "A vending machine!\n" + .string "What does it have?$" + +CeladonCity_DepartmentStore_Roof_Text_NotEnoughMoney:: + .string "Oops, not enough money!$" + +CeladonCity_DepartmentStore_Roof_Text_DrinkCanPoppedOut:: + .string "A can of {STR_VAR_1} popped out!$" + +CeladonCity_DepartmentStore_Roof_Text_NoMoreRoomForStuff:: + .string "There's no more room for stuff!$" + +CeladonCity_DepartmentStore_Roof_Text_NotThirsty:: + .string "Not thirsty!$" + diff --git a/data/maps/CeladonCity_GameCorner/scripts.inc b/data/maps/CeladonCity_GameCorner/scripts.inc new file mode 100644 index 000000000000..6ab8405787f6 --- /dev/null +++ b/data/maps/CeladonCity_GameCorner/scripts.inc @@ -0,0 +1,614 @@ +CeladonCity_GameCorner_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, CeladonCity_GameCorner_OnLoad + .byte 0 + +CeladonCity_GameCorner_OnLoad:: + call_if_unset FLAG_OPENED_ROCKET_HIDEOUT, CeladonCity_GameCorner_EventScript_HideRocketHideout + end + +CeladonCity_GameCorner_EventScript_HideRocketHideout:: + setmetatile 15, 2, METATILE_GameCorner_Floor_ShadeFull, 0 + setmetatile 16, 2, METATILE_GameCorner_Floor_ShadeFull, 0 + setmetatile 17, 2, METATILE_GameCorner_Floor_ShadeFull, 0 + setmetatile 16, 3, METATILE_GameCorner_PurpleWall_Floor, 1 + setmetatile 17, 3, METATILE_GameCorner_PurpleWall_Floor, 1 + return + +CeladonCity_GameCorner_EventScript_InfoClerk:: + msgbox CeladonCity_GameCorner_Text_CanExchangeCoinsNextDoor, MSGBOX_NPC + end + +CeladonCity_GameCorner_EventScript_CoinsClerk:: + lock + faceplayer + showmoneybox 0, 0 + showcoinsbox 0, 5 + message CeladonCity_GameCorner_Text_WelcomeBuySomeCoins + waitmessage + multichoice 13, 0, MULTI_GAME_CORNER_COIN_PURCHASE_COUNTER, FALSE + copyvar VAR_0x8009, VAR_RESULT + switch VAR_RESULT + case 0, CeladonCity_GameCorner_EventScript_BuyCoins + case 1, CeladonCity_GameCorner_EventScript_BuyCoins + case 2, CeladonCity_GameCorner_EventScript_ClerkDeclineBuy + case 127, CeladonCity_GameCorner_EventScript_ClerkDeclineBuy + end + +CeladonCity_GameCorner_EventScript_BuyCoins:: + goto_if_unset FLAG_GOT_COIN_CASE, CeladonCity_GameCorner_EventScript_ClerkNoCoinCase + goto_if_eq VAR_0x8009, 0, CeladonCity_GameCorner_EventScript_Buy50Coins + goto_if_eq VAR_0x8009, 1, CeladonCity_GameCorner_EventScript_Buy500Coins + end + +CeladonCity_GameCorner_EventScript_Buy500Coins:: + checkcoins VAR_TEMP_1 + goto_if_ge VAR_TEMP_1, (MAX_COINS + 1) - 500, CeladonCity_GameCorner_EventScript_ClerkNoRoomForCoins + checkmoney 10000 + goto_if_eq VAR_RESULT, FALSE, CeladonCity_GameCorner_EventScript_ClerkNotEnoughMoney + addcoins 500 + removemoney 10000 + goto CeladonCity_GameCorner_EventScript_BoughtCoins + end + +CeladonCity_GameCorner_EventScript_Buy50Coins:: + checkcoins VAR_TEMP_1 + goto_if_ge VAR_TEMP_1, (MAX_COINS + 1) - 50, CeladonCity_GameCorner_EventScript_ClerkNoRoomForCoins + checkmoney 1000 + goto_if_eq VAR_RESULT, FALSE, CeladonCity_GameCorner_EventScript_ClerkNotEnoughMoney + addcoins 50 + removemoney 1000 + goto CeladonCity_GameCorner_EventScript_BoughtCoins + end + +CeladonCity_GameCorner_EventScript_BoughtCoins:: + updatemoneybox + updatecoinsbox 0, 5 + playse SE_SHOP + msgbox CeladonCity_GameCorner_Text_HereAreYourCoins + goto CeladonCity_GameCorner_EventScript_ClerkEnd + end + +CeladonCity_GameCorner_EventScript_ClerkEnd:: + hidemoneybox + hidecoinsbox 0, 5 + release + end + +CeladonCity_GameCorner_EventScript_ClerkDeclineBuy:: + msgbox CeladonCity_GameCorner_Text_ComePlaySometime + goto CeladonCity_GameCorner_EventScript_ClerkEnd + end + +CeladonCity_GameCorner_EventScript_ClerkNoCoinCase:: + msgbox CeladonCity_GameCorner_Text_SorryDontHaveCoinCase + goto CeladonCity_GameCorner_EventScript_ClerkEnd + end + +CeladonCity_GameCorner_EventScript_ClerkNoRoomForCoins:: + msgbox CeladonCity_GameCorner_Text_CoinCaseIsFull + goto CeladonCity_GameCorner_EventScript_ClerkEnd + end + +CeladonCity_GameCorner_EventScript_ClerkNotEnoughMoney:: + msgbox CeladonCity_GameCorner_Text_CantAffordCoins + goto CeladonCity_GameCorner_EventScript_ClerkEnd + end + +CeladonCity_GameCorner_EventScript_BaldingMan:: + lock + faceplayer + msgbox CeladonCity_GameCorner_Text_RumoredTeamRocketRunsThisPlace + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_FaceSlotMachine:: + closemessage + applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +CeladonCity_GameCorner_EventScript_Woman1:: + lock + faceplayer + msgbox CeladonCity_GameCorner_Text_ThinkMachinesHaveDifferentOdds + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_Fisher:: + lock + faceplayer + goto_if_set FLAG_GOT_10_COINS_FROM_GAMBLER, CeladonCity_GameCorner_EventScript_FisherAlreadyGotCoins + msgbox CeladonCity_GameCorner_Text_DoYouWantToPlay + goto_if_unset FLAG_GOT_COIN_CASE, CeladonCity_GameCorner_EventScript_GamblerNoCoinCase + checkcoins VAR_TEMP_1 + goto_if_ge VAR_TEMP_1, (MAX_COINS + 1) - 10, CeladonCity_GameCorner_EventScript_FisherNoRoomForCoins + addcoins 10 + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox CeladonCity_GameCorner_Text_Received10CoinsFromMan + playse SE_SHOP + waitse + setflag FLAG_GOT_10_COINS_FROM_GAMBLER + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_FisherNoRoomForCoins:: + msgbox CeladonCity_GameCorner_Text_DontNeedMyCoins + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_GamblerNoCoinCase:: + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox CeladonCity_GameCorner_Text_DontHaveCoinCase + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_FisherAlreadyGotCoins:: + msgbox CeladonCity_GameCorner_Text_WinsComeAndGo + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_GymGuy:: + lock + faceplayer + goto_if_set FLAG_DEFEATED_ERIKA, CeladonCity_GameCorner_EventScript_GymGuyPostVictory + msgbox CeladonCity_GameCorner_Text_GymGuyAdvice + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_GymGuyPostVictory:: + msgbox CeladonCity_GameCorner_Text_RareMonsForCoins + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_Woman2:: + lock + faceplayer + msgbox CeladonCity_GameCorner_Text_WinOrLoseItsOnlyLuck + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_OldMan:: + lock + faceplayer + msgbox CeladonCity_GameCorner_Text_SoEasyToGetHooked + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_Scientist:: + lock + faceplayer + goto_if_set FLAG_GOT_20_COINS_FROM_GAMBLER, CeladonCity_GameCorner_EventScript_ScientistAlreadyGotCoins + msgbox CeladonCity_GameCorner_Text_WantSomeCoins + goto_if_unset FLAG_GOT_COIN_CASE, CeladonCity_GameCorner_EventScript_GamblerNoCoinCase + checkcoins VAR_TEMP_1 + goto_if_ge VAR_TEMP_1, (MAX_COINS + 1) - 20, CeladonCity_GameCorner_EventScript_ScientistNoRoomForCoins + addcoins 20 + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox CeladonCity_GameCorner_Text_Received20CoinsFromNiceGuy + playse SE_SHOP + waitse + setflag FLAG_GOT_20_COINS_FROM_GAMBLER + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_ScientistNoRoomForCoins:: + msgbox CeladonCity_GameCorner_Text_YouHaveLotsOfCoins + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_ScientistAlreadyGotCoins:: + msgbox CeladonCity_GameCorner_Text_NeedMoreCoinsForMonIWant + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_Gentleman:: + lock + faceplayer + goto_if_set FLAG_GOT_20_COINS_FROM_GAMBLER_2, CeladonCity_GameCorner_EventScript_GentlemanAlreadyGotCoins + msgbox CeladonCity_GameCorner_Text_HereAreSomeCoinsShoo + goto_if_unset FLAG_GOT_COIN_CASE, CeladonCity_GameCorner_EventScript_GamblerNoCoinCase + checkcoins VAR_TEMP_1 + goto_if_ge VAR_TEMP_1, (MAX_COINS + 1) - 20, CeladonCity_GameCorner_EventScript_GentlemanNoRoomForCoins + addcoins 20 + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox CeladonCity_GameCorner_Text_Received20CoinsFromMan + playse SE_SHOP + waitse + setflag FLAG_GOT_20_COINS_FROM_GAMBLER_2 + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_GentlemanNoRoomForCoins:: + msgbox CeladonCity_GameCorner_Text_YouveGotPlentyCoins + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_GentlemanAlreadyGotCoins:: + msgbox CeladonCity_GameCorner_Text_WatchReelsClosely + goto CeladonCity_GameCorner_EventScript_FaceSlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine0:: + lockall + setvar VAR_0x8004, 0 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_DontPlaySlotMachine:: + releaseall + end + +CeladonCity_GameCorner_EventScript_SlotMachine:: + goto_if_unset FLAG_GOT_COIN_CASE, CeladonCity_GameCorner_EventScript_SlotMachineNoCoinCase + msgbox CeladonCity_GameCorner_Text_SlotMachineWantToPlay, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeladonCity_GameCorner_EventScript_DontPlaySlotMachine + setfieldeffectargument 0, LOCALID_PLAYER +#ifdef BUGFIX + setfieldeffectargument 1, MAP_NUM(MAP_CELADON_CITY_GAME_CORNER) + setfieldeffectargument 2, MAP_GROUP(MAP_CELADON_CITY_GAME_CORNER) +#else + @ Map num/group were provided in the wrong order + setfieldeffectargument 1, MAP_GROUP(MAP_CELADON_CITY_GAME_CORNER) + setfieldeffectargument 2, MAP_NUM(MAP_CELADON_CITY_GAME_CORNER) +#endif + dofieldeffect FLDEFF_SMILEY_FACE_ICON + waitfieldeffect FLDEFF_SMILEY_FACE_ICON + specialvar VAR_RESULT, GetRandomSlotMachineId + playslotmachine VAR_RESULT + releaseall + end + +CeladonCity_GameCorner_EventScript_SlotMachine1:: + lockall + setvar VAR_0x8004, 1 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine2:: + lockall + setvar VAR_0x8004, 2 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine3:: + lockall + setvar VAR_0x8004, 3 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine4:: + lockall + setvar VAR_0x8004, 4 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine5:: + lockall + setvar VAR_0x8004, 5 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine6:: + lockall + setvar VAR_0x8004, 6 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine7:: + lockall + setvar VAR_0x8004, 7 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine8:: + lockall + setvar VAR_0x8004, 8 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine9:: + lockall + setvar VAR_0x8004, 9 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine10:: + lockall + setvar VAR_0x8004, 10 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine11:: + lockall + setvar VAR_0x8004, 11 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine12:: + lockall + setvar VAR_0x8004, 12 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine13:: + lockall + setvar VAR_0x8004, 13 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine14:: + lockall + setvar VAR_0x8004, 14 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine15:: + lockall + setvar VAR_0x8004, 15 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine16:: + lockall + setvar VAR_0x8004, 16 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine17:: + lockall + setvar VAR_0x8004, 17 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine18:: + lockall + setvar VAR_0x8004, 18 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine19:: + lockall + setvar VAR_0x8004, 19 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine20:: + lockall + setvar VAR_0x8004, 20 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachine21:: + lockall + setvar VAR_0x8004, 21 + goto CeladonCity_GameCorner_EventScript_SlotMachine + end + +CeladonCity_GameCorner_EventScript_SlotMachineNoCoinCase:: + msgbox CeladonCity_GameCorner_Text_CoinCaseIsRequired + releaseall + end + +CeladonCity_GameCorner_EventScript_Poster:: + lockall + msgbox CeladonCity_GameCorner_Text_SwitchBehindPosterPushIt + call_if_unset FLAG_OPENED_ROCKET_HIDEOUT, CeladonCity_GameCorner_EventScript_OpenRocketHideout + releaseall + end + +CeladonCity_GameCorner_EventScript_OpenRocketHideout:: + playse SE_UNLOCK + setmetatile 15, 2, METATILE_GameCorner_Floor_StairsTop, 0 + setmetatile 16, 2, METATILE_GameCorner_StairsTop, 1 + setmetatile 17, 2, METATILE_GameCorner_StairsBottom, 1 + setmetatile 16, 3, METATILE_GameCorner_PurpleWall_StairsTop, 1 + setmetatile 17, 3, METATILE_GameCorner_PurpleWall_stairsBottom, 1 + special DrawWholeMapView + setflag FLAG_OPENED_ROCKET_HIDEOUT + return + +CeladonCity_GameCorner_EventScript_RocketGrunt:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_7, CeladonCity_GameCorner_Text_GruntIntro, CeladonCity_GameCorner_Text_GruntDefeat, CeladonCity_GameCorner_Text_DefeatedGrunt + msgbox CeladonCity_GameCorner_Text_GruntPostBattle, MSGBOX_AUTOCLOSE + end + +CeladonCity_GameCorner_Text_DefeatedGrunt:: + msgbox CeladonCity_GameCorner_Text_GruntPostBattle + closemessage + call_if_eq VAR_FACING, DIR_WEST, CeladonCity_GameCorner_Text_GruntExitWest + call_if_ne VAR_FACING, DIR_WEST, CeladonCity_GameCorner_Text_GruntExit + removeobject LOCALID_GAME_CORNER_GRUNT + release + end + +CeladonCity_GameCorner_Text_GruntExitWest:: + applymovement LOCALID_GAME_CORNER_GRUNT, CeladonCity_GameCorner_Movement_GruntExitWest + waitmovement 0 + return + +CeladonCity_GameCorner_Text_GruntExit:: + applymovement LOCALID_GAME_CORNER_GRUNT, CeladonCity_GameCorner_Movement_GruntExit + waitmovement 0 + return + +CeladonCity_GameCorner_Movement_GruntExitWest:: + walk_down + walk_right + walk_right + walk_up + walk_right + walk_right + walk_right + walk_right + step_end + +CeladonCity_GameCorner_Movement_GruntExit:: + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + step_end + +CeladonCity_GameCorner_EventScript_UnusableSlotMachine1:: + msgbox CeladonCity_GameCorner_Text_OutOfOrder, MSGBOX_SIGN + end + +CeladonCity_GameCorner_EventScript_UnusableSlotMachine2:: + msgbox CeladonCity_GameCorner_Text_OutToLunch, MSGBOX_SIGN + end + +CeladonCity_GameCorner_EventScript_UnusableSlotMachine3:: + msgbox CeladonCity_GameCorner_Text_SomeonesKeys, MSGBOX_SIGN + end + +CeladonCity_GameCorner_Text_CanExchangeCoinsNextDoor:: + .string "Welcome!\p" + .string "You can exchange your COINS for\n" + .string "fabulous prizes next door.$" + +CeladonCity_GameCorner_Text_WelcomeBuySomeCoins:: + .string "Welcome to ROCKET GAME CORNER!\p" + .string "Do you need some game COINS?\n" + .string "Would you like to buy some?$" + +CeladonCity_GameCorner_Text_ComePlaySometime:: + .string "No?\n" + .string "Please come play sometime!$" + +CeladonCity_GameCorner_Text_SorryDontHaveCoinCase:: + .string "Oh, I'm sorry.\n" + .string "You don't have a COIN CASE.$" + +CeladonCity_GameCorner_Text_CoinCaseIsFull:: + .string "Whoops!\n" + .string "Your COIN CASE is full.$" + +CeladonCity_GameCorner_Text_CantAffordCoins:: + .string "You can't afford the COINS.$" + +CeladonCity_GameCorner_Text_HereAreYourCoins:: + .string "Thank you.\n" + .string "Here are your COINS!$" + +CeladonCity_GameCorner_Text_RumoredTeamRocketRunsThisPlace:: + .string "Keep this quiet.\p" + .string "It's rumored that this place is run\n" + .string "by TEAM ROCKET.$" + +CeladonCity_GameCorner_Text_ThinkMachinesHaveDifferentOdds:: + .string "I think these machines have\n" + .string "different odds.$" + +CeladonCity_GameCorner_Text_DoYouWantToPlay:: + .string "Kid, do you want to play?$" + +CeladonCity_GameCorner_Text_Received10CoinsFromMan:: + .string "{PLAYER} received 10 COINS\n" + .string "from the man.$" + +CeladonCity_GameCorner_Text_DontNeedMyCoins:: + .string "You don't need my COINS!$" + +CeladonCity_GameCorner_Text_WinsComeAndGo:: + .string "Wins seem to come and go.\n" + .string "Nothing's a sure thing.$" + +CeladonCity_GameCorner_Text_WinOrLoseItsOnlyLuck:: + .string "These slot games…\n" + .string "Win or lose, it's only by luck.$" + +CeladonCity_GameCorner_Text_GymGuyAdvice:: + .string "Hey!\p" + .string "You have better things to do,\n" + .string "champ in the making!\p" + .string "CELADON GYM's LEADER is ERIKA.\p" + .string "She is a user of GRASS-type\n" + .string "POKéMON, and at one with nature.\p" + .string "She might appear docile because of\n" + .string "her flower arranging…\p" + .string "But she's not one to be taken\n" + .string "lightly!$" + +CeladonCity_GameCorner_Text_RareMonsForCoins:: + .string "They offer rare POKéMON that can\n" + .string "be exchanged for your COINS.\p" + .string "But, I just can't seem to win!$" + +CeladonCity_GameCorner_Text_SoEasyToGetHooked:: + .string "Games are scary!\n" + .string "It's so easy to get hooked!$" + +CeladonCity_GameCorner_Text_WantSomeCoins:: + .string "What's up?\n" + .string "Want some COINS?$" + +CeladonCity_GameCorner_Text_Received20CoinsFromNiceGuy:: + .string "{PLAYER} received 20 COINS\n" + .string "from the nice guy.$" + +CeladonCity_GameCorner_Text_YouHaveLotsOfCoins:: + .string "You have lots of COINS!$" + +CeladonCity_GameCorner_Text_NeedMoreCoinsForMonIWant:: + .string "Darn! I need more COINS for the\n" + .string "POKéMON I want!$" + +CeladonCity_GameCorner_Text_HereAreSomeCoinsShoo:: + .string "Hey, what? You're throwing me off!\n" + .string "Here are some COINS, so shoo!$" + +CeladonCity_GameCorner_Text_Received20CoinsFromMan:: + .string "{PLAYER} received 20 COINS\n" + .string "from the man.$" + +CeladonCity_GameCorner_Text_YouveGotPlentyCoins:: + .string "You've got plenty of your own\n" + .string "COINS!$" + +CeladonCity_GameCorner_Text_WatchReelsClosely:: + .string "The trick is to watch the reels\n" + .string "closely.$" + +CeladonCity_GameCorner_Text_GruntIntro:: + .string "I'm guarding this poster!\n" + .string "Go away, or else!$" + +CeladonCity_GameCorner_Text_GruntDefeat:: + .string "Dang!$" + +CeladonCity_GameCorner_Text_GruntPostBattle:: + .string "The TEAM ROCKET HIDEOUT might\n" + .string "be discovered!\p" + .string "I better tell BOSS!$" + +CeladonCity_GameCorner_Text_SwitchBehindPosterPushIt:: + .string "Hey!\p" + .string "A switch behind the poster!?\n" + .string "Let's push it!$" + +CeladonCity_GameCorner_Text_CoinCaseIsRequired:: + .string "A COIN CASE is required…$" + +CeladonCity_GameCorner_Text_DontHaveCoinCase:: + .string "Oops!\n" + .string "Don't have the COIN CASE!$" + +CeladonCity_GameCorner_Text_SlotMachineWantToPlay:: + .string "A slot machine!\n" + .string "Want to play?$" + +CeladonCity_GameCorner_Text_OutOfOrder:: + .string "OUT OF ORDER\n" + .string "This is broken.$" + +CeladonCity_GameCorner_Text_OutToLunch:: + .string "OUT TO LUNCH\n" + .string "This is reserved.$" + +CeladonCity_GameCorner_Text_SomeonesKeys:: + .string "Someone's keys!\n" + .string "They'll be back.$" + diff --git a/data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc b/data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc new file mode 100644 index 000000000000..34a63b5da99c --- /dev/null +++ b/data/maps/CeladonCity_GameCorner_PrizeRoom/scripts.inc @@ -0,0 +1,418 @@ +CeladonCity_GameCorner_PrizeRoom_MapScripts:: + .byte 0 + +CeladonCity_GameCorner_PrizeRoom_EventScript_BaldingMan:: + msgbox CeladonCity_GameCorner_PrizeRoom_Text_FancyThatPorygon, MSGBOX_NPC + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_OldMan:: + msgbox CeladonCity_GameCorner_PrizeRoom_Text_RakedItInToday, MSGBOX_NPC + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_PrizeClerkMons:: + lock + faceplayer + goto_if_unset FLAG_GOT_COIN_CASE, CeladonCity_GameCorner_PrizeRoom_EventScript_NeedCoinCase + showcoinsbox 0, 0 + msgbox CeladonCity_GameCorner_PrizeRoom_Text_WeExchangeCoinsForPrizes + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ChoosePrizeMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ChoosePrizeMon:: + message CeladonCity_GameCorner_PrizeRoom_Text_WhichPrize + waitmessage + multichoice 11, 0, MULTI_GAME_CORNER_POKEMON_PRIZES, FALSE + switch VAR_RESULT + case 0, CeladonCity_GameCorner_PrizeRoom_EventScript_Abra + case 1, CeladonCity_GameCorner_PrizeRoom_EventScript_Clefairy + case 2, CeladonCity_GameCorner_PrizeRoom_EventScript_DratiniPinsir + case 3, CeladonCity_GameCorner_PrizeRoom_EventScript_ScytherDratini + case 4, CeladonCity_GameCorner_PrizeRoom_EventScript_Porygon + case 5, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + case 127, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange:: + hidecoinsbox 0, 0 + release + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_Abra:: + #ifdef FIRERED + setvar VAR_TEMP_1, SPECIES_ABRA + setvar VAR_TEMP_2, 180 + #else + #ifdef LEAFGREEN + setvar VAR_TEMP_1, SPECIES_ABRA + setvar VAR_TEMP_2, 120 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_Clefairy:: + #ifdef FIRERED + setvar VAR_TEMP_1, SPECIES_CLEFAIRY + setvar VAR_TEMP_2, 500 + #else + #ifdef LEAFGREEN + setvar VAR_TEMP_1, SPECIES_CLEFAIRY + setvar VAR_TEMP_2, 750 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_DratiniPinsir:: + #ifdef FIRERED + setvar VAR_TEMP_1, SPECIES_DRATINI + setvar VAR_TEMP_2, 2800 + #else + #ifdef LEAFGREEN + setvar VAR_TEMP_1, SPECIES_PINSIR + setvar VAR_TEMP_2, 2500 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ScytherDratini:: + #ifdef FIRERED + setvar VAR_TEMP_1, SPECIES_SCYTHER + setvar VAR_TEMP_2, 5500 + #else + #ifdef LEAFGREEN + setvar VAR_TEMP_1, SPECIES_DRATINI + setvar VAR_TEMP_2, 4600 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_Porygon:: + #ifdef FIRERED + setvar VAR_TEMP_1, SPECIES_PORYGON + setvar VAR_TEMP_2, 9999 + #else + #ifdef LEAFGREEN + setvar VAR_TEMP_1, SPECIES_PORYGON + setvar VAR_TEMP_2, 6500 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeMon:: + bufferspeciesname STR_VAR_1, VAR_TEMP_1 + msgbox CeladonCity_GameCorner_PrizeRoom_Text_YouWantPrize, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + checkcoins VAR_RESULT + goto_if_lt VAR_RESULT, VAR_TEMP_2, CeladonCity_GameCorner_PrizeRoom_EventScript_NotEnoughCoins + textcolor NPC_TEXT_COLOR_NEUTRAL + switch VAR_TEMP_1 + case SPECIES_ABRA, CeladonCity_GameCorner_PrizeRoom_EventScript_GiveAbra + case SPECIES_CLEFAIRY, CeladonCity_GameCorner_PrizeRoom_EventScript_GiveClefairy + case SPECIES_DRATINI, CeladonCity_GameCorner_PrizeRoom_EventScript_GiveDratini + case SPECIES_SCYTHER, CeladonCity_GameCorner_PrizeRoom_EventScript_GiveScyther + case SPECIES_PORYGON, CeladonCity_GameCorner_PrizeRoom_EventScript_GivePorygon + case SPECIES_PINSIR, CeladonCity_GameCorner_PrizeRoom_EventScript_GivePinsir + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_GiveAbra:: + #ifdef FIRERED + givemon VAR_TEMP_1, 9 + #else + #ifdef LEAFGREEN + givemon VAR_TEMP_1, 7 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_CheckReceivedMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_GiveClefairy:: + #ifdef FIRERED + givemon VAR_TEMP_1, 8 + #else + #ifdef LEAFGREEN + givemon VAR_TEMP_1, 12 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_CheckReceivedMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_GiveDratini:: + #ifdef FIRERED + givemon VAR_TEMP_1, 18 + #else + #ifdef LEAFGREEN + givemon VAR_TEMP_1, 24 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_CheckReceivedMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_GiveScyther:: + givemon VAR_TEMP_1, 25 + goto CeladonCity_GameCorner_PrizeRoom_EventScript_CheckReceivedMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_GivePorygon:: + #ifdef FIRERED + givemon VAR_TEMP_1, 26 + #else + #ifdef LEAFGREEN + givemon VAR_TEMP_1, 18 + #endif + #endif + goto CeladonCity_GameCorner_PrizeRoom_EventScript_CheckReceivedMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_GivePinsir:: + givemon VAR_TEMP_1, 18 + goto CeladonCity_GameCorner_PrizeRoom_EventScript_CheckReceivedMon + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_CheckReceivedMon:: + goto_if_eq VAR_RESULT, 0, CeladonCity_GameCorner_PrizeRoom_EventScript_ReceivedMonParty + goto_if_eq VAR_RESULT, 1, CeladonCity_GameCorner_PrizeRoom_EventScript_ReceivedMonPC + goto_if_eq VAR_RESULT, 2, CeladonCity_GameCorner_PrizeRoom_EventScript_PartyFull + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_PartyFull:: + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox gText_NoMoreRoomForPokemon + hidecoinsbox 0, 0 + release + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_NicknamePartyMon:: + getpartysize + subvar VAR_RESULT, 1 + copyvar VAR_0x8004, VAR_RESULT + call Common_EventScript_NameReceivedPartyMon + goto CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_NeedCoinCase:: + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox CeladonCity_GameCorner_PrizeRoom_Text_CoinCaseRequired + release + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_NotEnoughCoins:: + msgbox CeladonCity_GameCorner_PrizeRoom_Text_NeedMoreCoins + goto CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ReceivedMonParty:: + removecoins VAR_TEMP_2 + updatecoinsbox 0, 5 + bufferspeciesname STR_VAR_1, VAR_TEMP_1 + playfanfare MUS_LEVEL_UP + message gText_PlayerObtainedTheMon + waitmessage + waitfanfare + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CeladonCity_GameCorner_PrizeRoom_EventScript_NicknamePartyMon + goto CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ReceivedMonPC:: + removecoins VAR_TEMP_2 + updatecoinsbox 0, 5 + bufferspeciesname STR_VAR_1, VAR_TEMP_1 + playfanfare MUS_LEVEL_UP + message gText_PlayerObtainedTheMon + waitmessage + waitfanfare + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeladonCity_GameCorner_PrizeRoom_EventScript_TransferredToPC + call Common_EventScript_NameReceivedBoxMon + goto CeladonCity_GameCorner_PrizeRoom_EventScript_TransferredToPC + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_TransferredToPC:: + call Common_EventScript_TransferredToPC + goto CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_PrizeClerkTMs:: + lock + faceplayer + goto_if_unset FLAG_GOT_COIN_CASE, CeladonCity_GameCorner_PrizeRoom_EventScript_NeedCoinCase + showcoinsbox 0, 0 + msgbox CeladonCity_GameCorner_PrizeRoom_Text_WeExchangeCoinsForPrizes + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ChoosePrizeTM + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ChoosePrizeTM:: + message CeladonCity_GameCorner_PrizeRoom_Text_WhichPrize + waitmessage + multichoice 11, 0, MULTI_GAME_CORNER_TMPRIZES, FALSE + switch VAR_RESULT + case 0, CeladonCity_GameCorner_PrizeRoom_EventScript_TM13 + case 1, CeladonCity_GameCorner_PrizeRoom_EventScript_TM23 + case 2, CeladonCity_GameCorner_PrizeRoom_EventScript_TM24 + case 3, CeladonCity_GameCorner_PrizeRoom_EventScript_TM30 + case 4, CeladonCity_GameCorner_PrizeRoom_EventScript_TM35 + case 5, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + case 127, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_TM13:: + setvar VAR_TEMP_1, ITEM_TM13 + setvar VAR_TEMP_2, 4000 + buffermovename STR_VAR_2, MOVE_ICE_BEAM + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeTM + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_TM23:: + setvar VAR_TEMP_1, ITEM_TM23 + setvar VAR_TEMP_2, 3500 + buffermovename STR_VAR_2, MOVE_IRON_TAIL + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeTM + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_TM24:: + setvar VAR_TEMP_1, ITEM_TM24 + setvar VAR_TEMP_2, 4000 + buffermovename STR_VAR_2, MOVE_THUNDERBOLT + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeTM + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_TM30:: + setvar VAR_TEMP_1, ITEM_TM30 + setvar VAR_TEMP_2, 4500 + buffermovename STR_VAR_2, MOVE_SHADOW_BALL + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeTM + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_TM35:: + setvar VAR_TEMP_1, ITEM_TM35 + setvar VAR_TEMP_2, 4000 + buffermovename STR_VAR_2, MOVE_FLAMETHROWER + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeTM + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeTM:: + msgbox CeladonCity_GameCorner_PrizeRoom_Text_YouWantTM, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + goto CeladonCity_GameCorner_PrizeRoom_EventScript_TryGivePrize + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeItem:: + bufferitemname STR_VAR_1, VAR_TEMP_1 + msgbox CeladonCity_GameCorner_PrizeRoom_Text_YouWantPrize, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + goto CeladonCity_GameCorner_PrizeRoom_EventScript_TryGivePrize + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_TryGivePrize:: + bufferitemname STR_VAR_1, VAR_TEMP_1 + checkcoins VAR_RESULT + goto_if_lt VAR_RESULT, VAR_TEMP_2, CeladonCity_GameCorner_PrizeRoom_EventScript_NotEnoughCoins + checkitemspace VAR_TEMP_1 + goto_if_eq VAR_RESULT, FALSE, CeladonCity_GameCorner_PrizeRoom_EventScript_BagFull + removecoins VAR_TEMP_2 + updatecoinsbox 0, 5 + giveitem VAR_TEMP_1 + goto CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_BagFull:: + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox gText_TooBadBagIsFull + hidecoinsbox 0, 0 + release + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_PrizeClerkItems:: + lock + faceplayer + goto_if_unset FLAG_GOT_COIN_CASE, CeladonCity_GameCorner_PrizeRoom_EventScript_NeedCoinCase + showcoinsbox 0, 0 + msgbox CeladonCity_GameCorner_PrizeRoom_Text_WeExchangeCoinsForPrizes + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ChoosePrizeItem + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_ChoosePrizeItem:: + message CeladonCity_GameCorner_PrizeRoom_Text_WhichPrize + waitmessage + multichoice 10, 0, MULTI_GAME_CORNER_BATTLE_ITEM_PRIZES, FALSE + switch VAR_RESULT + case 0, CeladonCity_GameCorner_PrizeRoom_EventScript_SmokeBall + case 1, CeladonCity_GameCorner_PrizeRoom_EventScript_MiracleSeed + case 2, CeladonCity_GameCorner_PrizeRoom_EventScript_Charcoal + case 3, CeladonCity_GameCorner_PrizeRoom_EventScript_MysticWater + case 4, CeladonCity_GameCorner_PrizeRoom_EventScript_YellowFlute + case 5, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + case 127, CeladonCity_GameCorner_PrizeRoom_EventScript_EndPrizeExchange + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_SmokeBall:: + setvar VAR_TEMP_1, ITEM_SMOKE_BALL + setvar VAR_TEMP_2, 800 + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeItem + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_MiracleSeed:: + setvar VAR_TEMP_1, ITEM_MIRACLE_SEED + setvar VAR_TEMP_2, 1000 + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeItem + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_Charcoal:: + setvar VAR_TEMP_1, ITEM_CHARCOAL + setvar VAR_TEMP_2, 1000 + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeItem + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_MysticWater:: + setvar VAR_TEMP_1, ITEM_MYSTIC_WATER + setvar VAR_TEMP_2, 1000 + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeItem + end + +CeladonCity_GameCorner_PrizeRoom_EventScript_YellowFlute:: + setvar VAR_TEMP_1, ITEM_YELLOW_FLUTE + setvar VAR_TEMP_2, 1600 + goto CeladonCity_GameCorner_PrizeRoom_EventScript_ConfirmPrizeItem + end + +CeladonCity_GameCorner_PrizeRoom_Text_FancyThatPorygon:: + .string "I sure do fancy that PORYGON!\n" + .string "But, it's hard to win at slots!$" + +CeladonCity_GameCorner_PrizeRoom_Text_RakedItInToday:: + .string "Gahaha! I raked it in today!\n" + .string "If only every day were like this…$" + +CeladonCity_GameCorner_PrizeRoom_Text_CoinCaseRequired:: + .string "A COIN CASE is required…$" + +CeladonCity_GameCorner_PrizeRoom_Text_WeExchangeCoinsForPrizes:: + .string "We exchange your COINS for prizes.$" + +CeladonCity_GameCorner_PrizeRoom_Text_WhichPrize:: + .string "Which prize would you like?$" + +CeladonCity_GameCorner_PrizeRoom_Text_HereYouGo:: + .string "はい どうぞ$" + +CeladonCity_GameCorner_PrizeRoom_Text_YouWantPrize:: + .string "So, you want the {STR_VAR_1}?$" + +CeladonCity_GameCorner_PrizeRoom_Text_YouWantTM:: + .string "Okay, a TM of {STR_VAR_2}\n" + .string "is what you want?$" + +CeladonCity_GameCorner_PrizeRoom_Text_NeedMoreCoins:: + .string "Sorry, you'll need more COINS\n" + .string "than that.$" + +CeladonCity_GameCorner_PrizeRoom_Text_OopsNotEnoughRoom:: + .string "おきゃくさん もう もてないよ$" + +CeladonCity_GameCorner_PrizeRoom_Text_OhFineThen:: + .string "あっ そう$" + diff --git a/data/maps/CeladonCity_Gym/scripts.inc b/data/maps/CeladonCity_Gym/scripts.inc new file mode 100644 index 000000000000..c29b450dbbb4 --- /dev/null +++ b/data/maps/CeladonCity_Gym/scripts.inc @@ -0,0 +1,237 @@ +CeladonCity_Gym_MapScripts:: + .byte 0 + +CeladonCity_Gym_EventScript_Erika:: + famechecker FAMECHECKER_ERIKA, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + trainerbattle_single TRAINER_LEADER_ERIKA, CeladonCity_Gym_Text_ErikaIntro, CeladonCity_Gym_Text_ErikaDefeat, CeladonCity_Gym_EventScript_DefeatedErika, NO_MUSIC + goto_if_unset FLAG_GOT_TM19_FROM_ERIKA, CeladonCity_Gym_EventScript_GiveTM19 + famechecker FAMECHECKER_ERIKA, 4 + msgbox CeladonCity_Gym_Text_ErikaPostBattle + release + end + +CeladonCity_Gym_EventScript_DefeatedErika:: + famechecker FAMECHECKER_ERIKA, 1 + clearflag FLAG_HIDE_FAME_CHECKER_ERIKA_JOURNALS + setflag FLAG_DEFEATED_ERIKA + setflag FLAG_BADGE04_GET + set_gym_trainers_frlg 4 + goto CeladonCity_Gym_EventScript_GiveTM19 + end + +CeladonCity_Gym_EventScript_GiveTM19:: + msgbox CeladonCity_Gym_Text_ExplainRainbowBadgeTakeThis + checkitemspace ITEM_TM19 + goto_if_eq VAR_RESULT, FALSE, CeladonCity_Gym_EventScript_NoRoomForTM19 + giveitem_msg CeladonCity_Gym_Text_ReceivedTM19FromErika, ITEM_TM19 + setflag FLAG_GOT_TM19_FROM_ERIKA + msgbox CeladonCity_Gym_Text_ExplainTM19 + release + end + +CeladonCity_Gym_EventScript_NoRoomForTM19:: + msgbox CeladonCity_Gym_Text_ShouldMakeRoomForThis + release + end + +CeladonCity_Gym_EventScript_Kay:: + trainerbattle_single TRAINER_LASS_KAY, CeladonCity_Gym_Text_KayIntro, CeladonCity_Gym_Text_KayDefeat + msgbox CeladonCity_Gym_Text_KayPostBattle, MSGBOX_AUTOCLOSE + end + +CeladonCity_Gym_EventScript_Lisa:: + trainerbattle_single TRAINER_LASS_LISA, CeladonCity_Gym_Text_LisaIntro, CeladonCity_Gym_Text_LisaDefeat + famechecker FAMECHECKER_ERIKA, 2 + msgbox CeladonCity_Gym_Text_LisaPostBattle, MSGBOX_AUTOCLOSE + end + +CeladonCity_Gym_EventScript_Tina:: + trainerbattle_single TRAINER_PICNICKER_TINA, CeladonCity_Gym_Text_TinaIntro, CeladonCity_Gym_Text_TinaDefeat + msgbox CeladonCity_Gym_Text_TinaPostBattle, MSGBOX_AUTOCLOSE + end + +CeladonCity_Gym_EventScript_Bridget:: + trainerbattle_single TRAINER_BEAUTY_BRIDGET, CeladonCity_Gym_Text_BridgetIntro, CeladonCity_Gym_Text_BridgetDefeat + msgbox CeladonCity_Gym_Text_BridgetPostBattle, MSGBOX_AUTOCLOSE + end + +CeladonCity_Gym_EventScript_Tamia:: + trainerbattle_single TRAINER_BEAUTY_TAMIA, CeladonCity_Gym_Text_TamiaIntro, CeladonCity_Gym_Text_TamiaDefeat + famechecker FAMECHECKER_ERIKA, 3 + msgbox CeladonCity_Gym_Text_TamiaPostBattle, MSGBOX_AUTOCLOSE + end + +CeladonCity_Gym_EventScript_Lori:: + trainerbattle_single TRAINER_BEAUTY_LORI, CeladonCity_Gym_Text_LoriIntro, CeladonCity_Gym_Text_LoriDefeat + msgbox CeladonCity_Gym_Text_LoriPostBattle, MSGBOX_AUTOCLOSE + end + +CeladonCity_Gym_EventScript_Mary:: + trainerbattle_single TRAINER_COOLTRAINER_MARY, CeladonCity_Gym_Text_MaryIntro, CeladonCity_Gym_Text_MaryDefeat + msgbox CeladonCity_Gym_Text_MaryPostBattle, MSGBOX_AUTOCLOSE + end + +CeladonCity_Gym_EventScript_GymStatue:: + lockall + goto_if_set FLAG_BADGE04_GET, CeladonCity_Gym_EventScript_GymStatuePostVictory + msgbox CeladonCity_Gym_Text_GymStatue + releaseall + end + +CeladonCity_Gym_EventScript_GymStatuePostVictory:: + msgbox CeladonCity_Gym_Text_GymStatuePlayerWon + releaseall + end + +CeladonCity_Gym_Text_ErikaIntro:: + .string "Hello…\n" + .string "Lovely weather, isn't it?\l" + .string "It's so pleasant…\p" + .string "…Oh, dear…\n" + .string "I must have dozed off. Welcome.\p" + .string "My name is ERIKA.\n" + .string "I am the LEADER of CELADON GYM.\p" + .string "I am a student of the art of\n" + .string "flower arranging.\p" + .string "My POKéMON are solely of the\n" + .string "GRASS type.\p" + .string "…Oh, I'm sorry, I had no idea that\n" + .string "you wished to challenge me.\p" + .string "Very well, but I shall not lose.{PLAY_BGM MUS_RG_ENCOUNTER_GYM_LEADER}$" + +CeladonCity_Gym_Text_ErikaDefeat:: + .string "Oh!\n" + .string "I concede defeat.\l" + .string "You are remarkably strong.\p" + .string "I must confer on you the\n" + .string "RAINBOWBADGE.$" + +CeladonCity_Gym_Text_ErikaPostBattle:: + .string "You are cataloging POKéMON?\n" + .string "I must say I'm impressed.\p" + .string "I would never collect POKéMON if\n" + .string "they were unattractive.$" + +CeladonCity_Gym_Text_ExplainRainbowBadgeTakeThis:: + .string "The RAINBOWBADGE will make\n" + .string "POKéMON up to Lv. 50 obey.\p" + .string "It also allows POKéMON to use\n" + .string "STRENGTH in and out of battle.\p" + .string "Please also take this with you.$" + +CeladonCity_Gym_Text_ReceivedTM19FromErika:: + .string "{PLAYER} received TM19\n" + .string "from ERIKA.$" + +CeladonCity_Gym_Text_ExplainTM19:: + .string "TM19 contains GIGA DRAIN.\p" + .string "Half the damage it inflicts is\n" + .string "drained to heal your POKéMON.\p" + .string "Wouldn't you agree that it's a\n" + .string "wonderful move?$" + +CeladonCity_Gym_Text_ShouldMakeRoomForThis:: + .string "You should make room for this.$" + +CeladonCity_Gym_Text_KayIntro:: + .string "I should tell you about this GYM.\p" + .string "Only real ladies are allowed in\n" + .string "here!$" + +CeladonCity_Gym_Text_KayDefeat:: + .string "You're too rough!$" + +CeladonCity_Gym_Text_KayPostBattle:: + .string "Bleaah!\n" + .string "I hope ERIKA wipes you out!$" + +CeladonCity_Gym_Text_BridgetIntro:: + .string "Oh, welcome.\n" + .string "I was getting bored.$" + +CeladonCity_Gym_Text_BridgetDefeat:: + .string "My makeup!$" + +CeladonCity_Gym_Text_BridgetPostBattle:: + .string "GRASS-type POKéMON are tough\n" + .string "against the WATER type.\p" + .string "They also have an edge on ROCK-\n" + .string "and GROUND-type POKéMON.$" + +CeladonCity_Gym_Text_TinaIntro:: + .string "…Weren't you peeking in here\n" + .string "earlier?$" + +CeladonCity_Gym_Text_TinaDefeat:: + .string "You're an eye-opener!$" + +CeladonCity_Gym_Text_TinaPostBattle:: + .string "Oh, you were looking at ERIKA…\n" + .string "You weren't looking at me…$" + +CeladonCity_Gym_Text_TamiaIntro:: + .string "Look, look!\n" + .string "See my POKéMON!\p" + .string "I like the GRASS type.\n" + .string "I like how they're easy to raise.$" + +CeladonCity_Gym_Text_TamiaDefeat:: + .string "No!$" + +CeladonCity_Gym_Text_TamiaPostBattle:: + .string "We only use GRASS-type POKéMON at\n" + .string "our GYM.\p" + .string "Why? We also use them for making\n" + .string "flower arrangements!$" + +CeladonCity_Gym_Text_LisaIntro:: + .string "Oh, hey!\p" + .string "We don't like BUG- or FIRE-type\n" + .string "POKéMON in here!$" + +CeladonCity_Gym_Text_LisaDefeat:: + .string "Oh!\n" + .string "You!$" + +CeladonCity_Gym_Text_LisaPostBattle:: + .string "Our LEADER ERIKA might be quiet,\n" + .string "but she's famous around here.$" + +CeladonCity_Gym_Text_LoriIntro:: + .string "Pleased to meet you.\n" + .string "My hobby is POKéMON training.$" + +CeladonCity_Gym_Text_LoriDefeat:: + .string "Oh!\n" + .string "Splendid!$" + +CeladonCity_Gym_Text_LoriPostBattle:: + .string "I have a blind date coming up.\n" + .string "I have to learn to be polite,\l" + .string "especially if I have to battle.$" + +CeladonCity_Gym_Text_MaryIntro:: + .string "Welcome to CELADON GYM!\p" + .string "You'd better not underestimate\n" + .string "the nice ladies here.$" + +CeladonCity_Gym_Text_MaryDefeat:: + .string "Oh!\n" + .string "Beaten!$" + +CeladonCity_Gym_Text_MaryPostBattle:: + .string "I didn't bring my best POKéMON.\n" + .string "Wait until next time!$" + +CeladonCity_Gym_Text_GymStatue:: + .string "CELADON POKéMON GYM\n" + .string "LEADER: ERIKA\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}$" + +CeladonCity_Gym_Text_GymStatuePlayerWon:: + .string "CELADON POKéMON GYM\n" + .string "LEADER: ERIKA\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}, {PLAYER}$" + diff --git a/data/maps/CeladonCity_Hotel/scripts.inc b/data/maps/CeladonCity_Hotel/scripts.inc new file mode 100644 index 000000000000..054ba3181320 --- /dev/null +++ b/data/maps/CeladonCity_Hotel/scripts.inc @@ -0,0 +1,37 @@ +CeladonCity_Hotel_MapScripts:: + .byte 0 + +CeladonCity_Hotel_EventScript_Receptionist:: + msgbox CeladonCity_Hotel_Text_ThisHotelIsForPeople, MSGBOX_NPC + end + +CeladonCity_Hotel_EventScript_Beauty:: + msgbox CeladonCity_Hotel_Text_OnVacationWithBrotherAndBoyfriend, MSGBOX_NPC + end + +CeladonCity_Hotel_EventScript_BeautyBoyfriend:: + msgbox CeladonCity_Hotel_Text_WhyDidSheBringBrother, MSGBOX_NPC + end + +CeladonCity_Hotel_EventScript_BeautyBrother:: + msgbox CeladonCity_Hotel_Text_SisBroughtMeOnVacation, MSGBOX_NPC + end + +CeladonCity_Hotel_Text_ThisHotelIsForPeople:: + .string "POKéMON?\n" + .string "No, this is a hotel for people.\p" + .string "We're full up, unfortunately.$" + +CeladonCity_Hotel_Text_OnVacationWithBrotherAndBoyfriend:: + .string "I'm on vacation with my brother and\n" + .string "boyfriend.\p" + .string "CELADON is such a pretty city!$" + +CeladonCity_Hotel_Text_WhyDidSheBringBrother:: + .string "Why?\n" + .string "Why did she bring her brother?$" + +CeladonCity_Hotel_Text_SisBroughtMeOnVacation:: + .string "Yippee! I'm on vacation!\n" + .string "My sis brought me along! Awesome!$" + diff --git a/data/maps/CeladonCity_House1/scripts.inc b/data/maps/CeladonCity_House1/scripts.inc new file mode 100644 index 000000000000..2e061192c579 --- /dev/null +++ b/data/maps/CeladonCity_House1/scripts.inc @@ -0,0 +1,31 @@ +CeladonCity_House1_MapScripts:: + .byte 0 + +CeladonCity_House1_EventScript_RocketChief:: + msgbox CeladonCity_House1_Text_SlotsReelInTheDough, MSGBOX_NPC + end + +CeladonCity_House1_EventScript_Rocket1:: + msgbox CeladonCity_House1_Text_ShippedMonsAsSlotPrizes, MSGBOX_NPC + end + +CeladonCity_House1_EventScript_Rocket2:: + msgbox CeladonCity_House1_Text_DontTouchGameCornerPoster, MSGBOX_NPC + end + +CeladonCity_House1_Text_SlotsReelInTheDough:: + .string "Hehehe!\p" + .string "The slots just reel in the dough,\n" + .string "big-time!$" + +CeladonCity_House1_Text_ShippedMonsAsSlotPrizes:: + .string "CHIEF!\p" + .string "We just shipped two thousand\n" + .string "more POKéMON as slot prizes\l" + .string "again today!$" + +CeladonCity_House1_Text_DontTouchGameCornerPoster:: + .string "Don't touch the poster at the GAME\n" + .string "CORNER!\p" + .string "There's no secret switch behind it!$" + diff --git a/data/maps/CeladonCity_PokemonCenter_1F/scripts.inc b/data/maps/CeladonCity_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..2eec6123d281 --- /dev/null +++ b/data/maps/CeladonCity_PokemonCenter_1F/scripts.inc @@ -0,0 +1,43 @@ +CeladonCity_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, CeladonCity_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +CeladonCity_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_CELADON_CITY + end + +CeladonCity_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +CeladonCity_PokemonCenter_1F_EventScript_Gentleman:: + msgbox CeladonCity_PokemonCenter_1F_Text_PokeFluteAwakensSleepingMons, MSGBOX_NPC + end + +CeladonCity_PokemonCenter_1F_EventScript_CooltrainerF:: + msgbox CeladonCity_PokemonCenter_1F_Text_RodeHereFromFuchsia, MSGBOX_NPC + end + +CeladonCity_PokemonCenter_1F_EventScript_Youngster:: + msgbox CeladonCity_PokemonCenter_1F_Text_GoToCyclingRoadIfIHadBike, MSGBOX_NPC + end + +CeladonCity_PokemonCenter_1F_Text_PokeFluteAwakensSleepingMons:: + .string "A POKé FLUTE awakens sleeping\n" + .string "POKéMON. You know that.\p" + .string "It does so with a sound that only\n" + .string "they can hear.$" + +CeladonCity_PokemonCenter_1F_Text_RodeHereFromFuchsia:: + .string "I rode here from FUCHSIA.\p" + .string "It's an uphill ride on CYCLING\n" + .string "ROAD, so I'm exhausted.$" + +CeladonCity_PokemonCenter_1F_Text_GoToCyclingRoadIfIHadBike:: + .string "If I had a BIKE, I would go to\n" + .string "CYCLING ROAD!$" + diff --git a/data/maps/CeladonCity_PokemonCenter_2F/scripts.inc b/data/maps/CeladonCity_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..531f8ac3e563 --- /dev/null +++ b/data/maps/CeladonCity_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +CeladonCity_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +CeladonCity_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +CeladonCity_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +CeladonCity_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/CeladonCity_Restaurant/scripts.inc b/data/maps/CeladonCity_Restaurant/scripts.inc new file mode 100644 index 000000000000..77c0ebf2c09c --- /dev/null +++ b/data/maps/CeladonCity_Restaurant/scripts.inc @@ -0,0 +1,78 @@ +CeladonCity_Restaurant_MapScripts:: + .byte 0 + +CeladonCity_Restaurant_EventScript_Chef:: + msgbox CeladonCity_Restaurant_Text_TakingBreakRightNow, MSGBOX_NPC + end + +CeladonCity_Restaurant_EventScript_Woman:: + msgbox CeladonCity_Restaurant_Text_OftenGoToDrugstore, MSGBOX_NPC + end + +CeladonCity_Restaurant_EventScript_CoinCaseMan:: + lock + faceplayer + goto_if_set FLAG_GOT_COIN_CASE, CeladonCity_Restaurant_EventScript_AlreadyGotCoinCase + msgbox CeladonCity_Restaurant_Text_TakeThisImBusted + checkitemspace ITEM_COIN_CASE + goto_if_eq VAR_RESULT, FALSE, CeladonCity_Restaurant_EventScript_NoRoomForCoinCase + giveitem_msg CeladonCity_Restaurant_Text_ReceivedCoinCaseFromMan, ITEM_COIN_CASE + setflag FLAG_GOT_COIN_CASE + release + end + +CeladonCity_Restaurant_EventScript_NoRoomForCoinCase:: + msgbox CeladonCity_Restaurant_Text_MakeRoomForThis + release + end + +CeladonCity_Restaurant_EventScript_AlreadyGotCoinCase:: + msgbox CeladonCity_Restaurant_Text_ThoughtIdWinItBack + release + end + +CeladonCity_Restaurant_EventScript_WorkerM:: + msgbox CeladonCity_Restaurant_Text_PsstBasementUnderGameCorner, MSGBOX_NPC + end + +CeladonCity_Restaurant_EventScript_FatMan:: + msgbox CeladonCity_Restaurant_Text_ManLostItAllAtSlots, MSGBOX_NPC + end + +CeladonCity_Restaurant_Text_TakingBreakRightNow:: + .string "Hi!\p" + .string "Sorry, but we're taking a break\n" + .string "right now.$" + +CeladonCity_Restaurant_Text_OftenGoToDrugstore:: + .string "My POKéMON are weak, so I often\n" + .string "have to go to the DRUGSTORE.$" + +CeladonCity_Restaurant_Text_PsstBasementUnderGameCorner:: + .string "Psst! There's a basement under the\n" + .string "GAME CORNER, I hear.$" + +CeladonCity_Restaurant_Text_ManLostItAllAtSlots:: + .string "Munch…\p" + .string "The man at that table lost it all\n" + .string "at the slots.$" + +CeladonCity_Restaurant_Text_TakeThisImBusted:: + .string "Go ahead! Laugh!\n" + .string "I'm flat-out busted!\p" + .string "No more slots for me!\n" + .string "I'm going straight!\p" + .string "Here!\n" + .string "I won't be needing this anymore!$" + +CeladonCity_Restaurant_Text_ReceivedCoinCaseFromMan:: + .string "{PLAYER} received a COIN CASE\n" + .string "from the man.$" + +CeladonCity_Restaurant_Text_MakeRoomForThis:: + .string "Make room for this!$" + +CeladonCity_Restaurant_Text_ThoughtIdWinItBack:: + .string "I always thought I was going to\n" + .string "win it back…$" + diff --git a/data/maps/CeruleanCave_1F/scripts.inc b/data/maps/CeruleanCave_1F/scripts.inc new file mode 100644 index 000000000000..f3de0a8ff44e --- /dev/null +++ b/data/maps/CeruleanCave_1F/scripts.inc @@ -0,0 +1,7 @@ +CeruleanCave_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, CeruleanCave_1F_OnTransition + .byte 0 + +CeruleanCave_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_CERULEAN_CAVE_1F + end diff --git a/data/maps/CeruleanCave_2F/scripts.inc b/data/maps/CeruleanCave_2F/scripts.inc new file mode 100644 index 000000000000..e83448190084 --- /dev/null +++ b/data/maps/CeruleanCave_2F/scripts.inc @@ -0,0 +1,2 @@ +CeruleanCave_2F_MapScripts:: + .byte 0 diff --git a/data/maps/CeruleanCave_B1F/scripts.inc b/data/maps/CeruleanCave_B1F/scripts.inc new file mode 100644 index 000000000000..7b9d85d5c6f3 --- /dev/null +++ b/data/maps/CeruleanCave_B1F/scripts.inc @@ -0,0 +1,60 @@ +CeruleanCave_B1F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, CeruleanCave_B1F_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, CeruleanCave_B1F_OnTransition + .byte 0 + +CeruleanCave_B1F_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, CeruleanCave_B1F_EventScript_TryRemoveMewtwo + end + +CeruleanCave_B1F_EventScript_TryRemoveMewtwo:: + specialvar VAR_RESULT, GetBattleOutcome + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn + removeobject VAR_LAST_TALKED + return + +CeruleanCave_B1F_OnTransition:: + call_if_unset FLAG_FOUGHT_MEWTWO, CeruleanCave_B1F_EventScript_ShowMewtwo + end + +CeruleanCave_B1F_EventScript_ShowMewtwo:: + clearflag FLAG_HIDE_MEWTWO + return + +CeruleanCave_B1F_EventScript_Mewtwo:: + lock + faceplayer + waitse + playmoncry SPECIES_MEWTWO, CRY_MODE_ENCOUNTER + message CeruleanCave_B1F_Text_Mew + waitmessage + waitmoncry + delay 20 + playbgm MUS_RG_ENCOUNTER_GYM_LEADER, 0 + waitbuttonpress + setwildbattle SPECIES_MEWTWO, 70 + setflag FLAG_SYS_CTRL_OBJ_DELETE + special BattleSetup_StartLegendaryBattle + waitstate + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, CeruleanCave_B1F_EventScript_DefeatedMewtwo + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, CeruleanCave_B1F_EventScript_RanFromMewtwo + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, CeruleanCave_B1F_EventScript_RanFromMewtwo + setflag FLAG_FOUGHT_MEWTWO + release + end + +CeruleanCave_B1F_EventScript_DefeatedMewtwo:: + setflag FLAG_FOUGHT_MEWTWO + goto EventScript_RemoveStaticMon + end + +CeruleanCave_B1F_EventScript_RanFromMewtwo:: + setvar VAR_0x8004, SPECIES_MEWTWO + goto EventScript_MonFlewAway + end + +CeruleanCave_B1F_Text_Mew:: + .string "Mew!$" + diff --git a/data/maps/CeruleanCity/scripts.inc b/data/maps/CeruleanCity/scripts.inc new file mode 100644 index 000000000000..475b0e8bc718 --- /dev/null +++ b/data/maps/CeruleanCity/scripts.inc @@ -0,0 +1,536 @@ +CeruleanCity_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, CeruleanCity_OnTransition + .byte 0 + +CeruleanCity_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_CERULEAN_CITY + call_if_unset FLAG_GOT_SS_TICKET, CeruleanCity_EventScript_BlockExits + end + +CeruleanCity_EventScript_BlockExits:: + setobjectxyperm LOCALID_CERULEAN_POLICEMAN, 30, 12 + setobjectxyperm LOCALID_CERULEAN_SLOWBRO, 26, 31 + setobjectxyperm LOCALID_CERULEAN_LASS, 27, 31 + return + +CeruleanCity_EventScript_RivalTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + goto CeruleanCity_EventScript_Rival + end + +CeruleanCity_EventScript_RivalTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + setobjectxyperm LOCALID_CERULEAN_RIVAL, 23, 0 + goto CeruleanCity_EventScript_Rival + end + +CeruleanCity_EventScript_RivalTriggerRight:: + lockall + setvar VAR_TEMP_1, 2 + setobjectxyperm LOCALID_CERULEAN_RIVAL, 24, 0 + goto CeruleanCity_EventScript_Rival + end + +CeruleanCity_EventScript_Rival:: + textcolor NPC_TEXT_COLOR_MALE + setvar VAR_MAP_SCENE_ROUTE22, 2 + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + addobject LOCALID_CERULEAN_RIVAL + applymovement LOCALID_CERULEAN_RIVAL, CeruleanCity_Movement_RivalEnter + waitmovement 0 + msgbox CeruleanCity_Text_RivalIntro + setvar VAR_LAST_TALKED, LOCALID_CERULEAN_RIVAL + call_if_eq VAR_STARTER_MON, 2, CeruleanCity_EventScript_RivalSquirtle + call_if_eq VAR_STARTER_MON, 1, CeruleanCity_EventScript_RivalBulbasaur + call_if_eq VAR_STARTER_MON, 0, CeruleanCity_EventScript_RivalCharmander + famechecker FAMECHECKER_BILL, 0 + msgbox CeruleanCity_Text_RivalPostBattle + closemessage + playbgm MUS_RG_RIVAL_EXIT, 0 + call_if_eq VAR_TEMP_1, 0, CeruleanCity_EventScript_RivalStartExit + call_if_eq VAR_TEMP_1, 1, CeruleanCity_EventScript_RivalStartExit + call_if_eq VAR_TEMP_1, 2, CeruleanCity_EventScript_RivalStartExitRight + msgbox CeruleanCity_Text_OhRightLittlePresentAsFavor + setvar VAR_MAP_SCENE_CERULEAN_CITY_RIVAL, 1 + setflag FLAG_GOT_FAME_CHECKER + giveitem ITEM_FAME_CHECKER + msgbox CeruleanCity_Text_ExplainFameCheckerSmellYa + closemessage + applymovement LOCALID_CERULEAN_RIVAL, CeruleanCity_Movement_RivalExit + waitmovement 0 + fadedefaultbgm + removeobject LOCALID_CERULEAN_RIVAL + releaseall + end + +CeruleanCity_EventScript_RivalSquirtle:: + trainerbattle_no_intro TRAINER_RIVAL_CERULEAN_SQUIRTLE, CeruleanCity_Text_RivalDefeat + return + +CeruleanCity_EventScript_RivalBulbasaur:: + trainerbattle_no_intro TRAINER_RIVAL_CERULEAN_BULBASAUR, CeruleanCity_Text_RivalDefeat + return + +CeruleanCity_EventScript_RivalCharmander:: + trainerbattle_no_intro TRAINER_RIVAL_CERULEAN_CHARMANDER, CeruleanCity_Text_RivalDefeat + return + +CeruleanCity_EventScript_RivalStartExit:: + applymovement LOCALID_PLAYER, CeruleanCity_Movement_PlayerWatchRivalExit + applymovement LOCALID_CERULEAN_RIVAL, CeruleanCity_Movement_RivalStartExit + waitmovement 0 + return + +CeruleanCity_EventScript_RivalStartExitRight:: + applymovement LOCALID_PLAYER, CeruleanCity_Movement_PlayerWatchRivalExitRight + applymovement LOCALID_CERULEAN_RIVAL, CeruleanCity_Movement_RivalStartExitRight + waitmovement 0 + return + +CeruleanCity_Movement_PlayerWatchRivalExit:: + delay_16 + delay_8 + walk_in_place_faster_right + delay_16 + walk_in_place_faster_down + step_end + +CeruleanCity_Movement_PlayerWatchRivalExitRight:: + delay_16 + delay_8 + walk_in_place_faster_left + delay_16 + walk_in_place_faster_down + step_end + +CeruleanCity_Movement_RivalEnter:: + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +CeruleanCity_Movement_RivalStartExit:: + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + delay_16 + delay_16 + walk_left + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +CeruleanCity_Movement_RivalStartExitRight:: + walk_left + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + delay_16 + delay_16 + walk_right + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +CeruleanCity_Movement_RivalExit:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +CeruleanCity_EventScript_Grunt:: + lock + faceplayer + goto_if_defeated TRAINER_TEAM_ROCKET_GRUNT_5, CeruleanCity_EventScript_GruntDefeated + message CeruleanCity_Text_GruntIntro + waitmessage + playbgm MUS_RG_ENCOUNTER_ROCKET, 0 + waitbuttonpress + trainerbattle_no_intro TRAINER_TEAM_ROCKET_GRUNT_5, CeruleanCity_Text_GruntDefeat + setvar VAR_MAP_SCENE_CERULEAN_CITY_ROCKET, 1 + goto CeruleanCity_EventScript_GruntDefeated + end + +CeruleanCity_EventScript_GruntDefeated:: + msgbox CeruleanCity_Text_OkayIllReturnStolenTM + checkitemspace ITEM_TM28 + goto_if_eq VAR_RESULT, FALSE, CeruleanCity_EventScript_NoRoomForTM28 + giveitem_msg CeruleanCity_Text_RecoveredTM28FromGrunt, ITEM_TM28 + msgbox CeruleanCity_Text_BetterGetMovingBye + closemessage + fadescreenswapbuffers FADE_TO_BLACK + removeobject LOCALID_CERULEAN_GRUNT + fadescreenswapbuffers FADE_FROM_BLACK + setflag FLAG_GOT_TM28_FROM_ROCKET + release + end + +CeruleanCity_EventScript_NoRoomForTM28:: + textcolor NPC_TEXT_COLOR_MALE + msgbox CeruleanCity_Text_MakeRoomForThisCantRun + release + end + +CeruleanCity_EventScript_GruntTriggerTop:: + lockall + setvar VAR_TEMP_1, 0 + applymovement LOCALID_CERULEAN_GRUNT, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + goto CeruleanCity_EventScript_GruntTrigger + end + +CeruleanCity_EventScript_GruntTriggerBottom:: + lockall + setvar VAR_TEMP_1, 1 + applymovement LOCALID_CERULEAN_GRUNT, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + goto CeruleanCity_EventScript_GruntTrigger + end + +CeruleanCity_EventScript_GruntTrigger:: + textcolor NPC_TEXT_COLOR_MALE + msgbox CeruleanCity_Text_GruntIntro + setvar VAR_LAST_TALKED, LOCALID_CERULEAN_GRUNT + trainerbattle_no_intro TRAINER_TEAM_ROCKET_GRUNT_5, CeruleanCity_Text_GruntDefeat + setvar VAR_MAP_SCENE_CERULEAN_CITY_ROCKET, 1 + goto CeruleanCity_EventScript_GruntDefeated + end + +CeruleanCity_EventScript_Policeman:: + lock + faceplayer + msgbox CeruleanCity_Text_PeopleHereWereRobbed + closemessage + applymovement LOCALID_CERULEAN_POLICEMAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +CeruleanCity_EventScript_LittleBoy:: + lock + faceplayer + goto_if_set FLAG_GOT_SS_TICKET, CeruleanCity_EventScript_LittleBoySlowbroMoved + msgbox CeruleanCity_Text_IfSlowbroWasntThereCouldCutTree + release + end + +CeruleanCity_EventScript_LittleBoySlowbroMoved:: + msgbox CeruleanCity_Text_YouCanCutDownSmallTrees + release + end + +CeruleanCity_EventScript_BaldingMan:: + msgbox CeruleanCity_Text_PokemonEncyclopediaAmusing, MSGBOX_NPC + end + +CeruleanCity_EventScript_Youngster:: + msgbox CeruleanCity_Text_TrainerLifeIsToughIsntIt, MSGBOX_NPC + end + +CeruleanCity_EventScript_CeruleanCaveGuard:: + msgbox CeruleanCity_Text_ThisIsCeruleanCave, MSGBOX_NPC + end + +CeruleanCity_EventScript_Woman:: + lock + faceplayer + msgbox CeruleanCity_Text_WantBrightRedBicycle + closemessage + applymovement LOCALID_CERULEAN_WOMAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +CeruleanCity_EventScript_Lass:: + lock + random 3 + copyvar VAR_0x8008, VAR_RESULT + call_if_eq VAR_0x8008, 0, CeruleanCity_EventScript_SlowbroCommand1 + call_if_eq VAR_0x8008, 1, CeruleanCity_EventScript_SlowbroCommand2 + call_if_eq VAR_0x8008, 2, CeruleanCity_EventScript_SlowbroCommand3 + waitmessage + delay 40 + playse SE_PIN + applymovement LOCALID_CERULEAN_SLOWBRO, Common_Movement_QuestionMark + waitmovement 0 + delay 30 + call_if_eq VAR_0x8008, 0, CeruleanCity_EventScript_SlowbroFailed1 + call_if_eq VAR_0x8008, 1, CeruleanCity_EventScript_SlowbroFailed2 + call_if_eq VAR_0x8008, 2, CeruleanCity_EventScript_SlowbroFailed3 + release + end + +CeruleanCity_EventScript_SlowbroCommand1:: + message CeruleanCity_Text_SlowbroUseSonicboom + return + +CeruleanCity_EventScript_SlowbroCommand2:: + message CeruleanCity_Text_SlowbroPunch + return + +CeruleanCity_EventScript_SlowbroCommand3:: + message CeruleanCity_Text_SlowbroWithdraw + return + +CeruleanCity_EventScript_SlowbroFailed1:: + msgbox CeruleanCity_Text_SlowbroPayAttention + return + +CeruleanCity_EventScript_SlowbroFailed2:: + msgbox CeruleanCity_Text_NoYouBlewItAgain + return + +CeruleanCity_EventScript_SlowbroFailed3:: + msgbox CeruleanCity_Text_HardToControlMonsObedience + return + +CeruleanCity_EventScript_Slowbro:: + lock + random 4 + copyvar VAR_0x8008, VAR_RESULT + call_if_eq VAR_0x8008, 0, CeruleanCity_EventScript_SlowbroText1 + call_if_eq VAR_0x8008, 1, CeruleanCity_EventScript_SlowbroText2 + call_if_eq VAR_0x8008, 2, CeruleanCity_EventScript_SlowbroText3 + call_if_eq VAR_0x8008, 3, CeruleanCity_EventScript_SlowbroText4 + release + end + +CeruleanCity_EventScript_SlowbroText1:: + msgbox CeruleanCity_Text_SlowbroTookSnooze + return + +CeruleanCity_EventScript_SlowbroText2:: + msgbox CeruleanCity_Text_SlowbroLoafingAround + return + +CeruleanCity_EventScript_SlowbroText3:: + msgbox CeruleanCity_Text_SlowbroTurnedAway + return + +CeruleanCity_EventScript_SlowbroText4:: + msgbox CeruleanCity_Text_SlowbroIgnoredOrders + return + +CeruleanCity_EventScript_CitySign:: + msgbox CeruleanCity_Text_CitySign, MSGBOX_SIGN + end + +CeruleanCity_EventScript_TrainerTips:: + msgbox CeruleanCity_Text_TrainerTipsHeldItems, MSGBOX_SIGN + end + +CeruleanCity_EventScript_BikeShopSign:: + msgbox CeruleanCity_Text_BikeShopSign, MSGBOX_SIGN + end + +CeruleanCity_EventScript_GymSign:: + lockall + famechecker FAMECHECKER_MISTY, 0 + msgbox CeruleanCity_Text_GymSign + releaseall + end + +CeruleanCity_Text_RivalIntro:: + .string "{RIVAL}: Yo! {PLAYER}!\p" + .string "You're still struggling along back\n" + .string "here?\p" + .string "I'm doing great! I caught a bunch\n" + .string "of strong and smart POKéMON!\p" + .string "Here, let me see what you caught,\n" + .string "{PLAYER}!$" + +CeruleanCity_Text_RivalDefeat:: + .string "Hey!\n" + .string "Take it easy!\l" + .string "You won already!$" + +CeruleanCity_Text_RivalPostBattle:: + .string "{RIVAL}: Hey, guess what?\p" + .string "I went to BILL's and got him to\n" + .string "show me his rare POKéMON.\p" + .string "That added a lot of pages to my\n" + .string "POKéDEX!\p" + .string "After all, BILL's world famous as a\n" + .string "POKéMANIAC.\p" + .string "He invented the POKéMON Storage\n" + .string "System on PC, too.\p" + .string "Since you're using his system,\n" + .string "you should go thank him.\p" + .string "Well, I better get rolling!\n" + .string "Smell ya later!$" + +CeruleanCity_Text_OhRightLittlePresentAsFavor:: + .string "Oh, yeah, right.\p" + .string "I feel sorry for you. No, really.\n" + .string "You're always plodding behind me.\p" + .string "So here, I'll give you a little\n" + .string "present as a favor.$" + +CeruleanCity_Text_ExplainFameCheckerSmellYa:: + .string "A chatty gossip like you…\n" + .string "That thing's perfect.\p" + .string "I don't need it because I don't\n" + .string "give a hoot about others.\p" + .string "All right, this time I really am\n" + .string "gone. Smell ya!$" + +CeruleanCity_Text_GruntIntro:: + .string "Hey! Stay out!\n" + .string "It's not your yard!\p" + .string "…Huh?\n" + .string "Me?\p" + .string "I'm an innocent bystander!\n" + .string "Don't you believe me?{PLAY_BGM}{MUS_RG_ENCOUNTER_ROCKET}$" + +CeruleanCity_Text_GruntDefeat:: + .string "GRUNT: Stop! I give up!\n" + .string "I'll leave quietly!$" + +CeruleanCity_Text_OkayIllReturnStolenTM:: + .string "…Okay.\n" + .string "I'll return the TM I stole.$" + +CeruleanCity_Text_RecoveredTM28FromGrunt:: + .string "{PLAYER} recovered TM28 from\n" + .string "the TEAM ROCKET GRUNT.$" + +CeruleanCity_Text_BetterGetMovingBye:: + .string "I better get moving!\n" + .string "Bye!$" + +CeruleanCity_Text_MakeRoomForThisCantRun:: + .string "Make room for this!\n" + .string "I can't run until I give it to you!$" + +CeruleanCity_Text_TrainerLifeIsToughIsntIt:: + .string "You're a TRAINER, too?\p" + .string "Collecting, battling…\n" + .string "It's a tough life, isn't it?$" + +CeruleanCity_Text_YouCanCutDownSmallTrees:: + .string "Did you know that you can CUT down\n" + .string "small trees?\p" + .string "Even that small tree in front of\n" + .string "the shop can be CUT down.\p" + .string "I think there's a way around it,\n" + .string "though.$" + +CeruleanCity_Text_IfSlowbroWasntThereCouldCutTree:: + .string "If that SLOWBRO wasn't there, you\n" + .string "could CUT down the small tree.\p" + .string "That way, you could get to the\n" + .string "other side.\p" + .string "I think there's a way around it,\n" + .string "though.$" + +CeruleanCity_Text_PokemonEncyclopediaAmusing:: + .string "You're making an encyclopedia on\n" + .string "POKéMON? That sounds amusing.$" + +CeruleanCity_Text_PeopleHereWereRobbed:: + .string "The people here were robbed.\p" + .string "It's obvious that TEAM ROCKET is\n" + .string "behind this most heinous crime!\p" + .string "Even our POLICE FORCE has\n" + .string "trouble with the ROCKETS!$" + +CeruleanCity_Text_SlowbroUseSonicboom:: + .string "Okay! SLOWBRO!\n" + .string "Use SONICBOOM!$" + +CeruleanCity_Text_SlowbroPayAttention:: + .string "Come on, SLOWBRO, pay attention!$" + +CeruleanCity_Text_SlowbroPunch:: + .string "SLOWBRO, punch!$" + +CeruleanCity_Text_NoYouBlewItAgain:: + .string "No!\n" + .string "You blew it again!$" + +CeruleanCity_Text_SlowbroWithdraw:: + .string "SLOWBRO, WITHDRAW!$" + +CeruleanCity_Text_HardToControlMonsObedience:: + .string "No! That's wrong!\n" + .string "It's so hard to control POKéMON!\p" + .string "Your POKéMON's obedience depends\n" + .string "on your abilities as a TRAINER.$" + +CeruleanCity_Text_SlowbroTookSnooze:: + .string "SLOWBRO took a snooze…$" + +CeruleanCity_Text_SlowbroLoafingAround:: + .string "SLOWBRO is loafing around…$" + +CeruleanCity_Text_SlowbroTurnedAway:: + .string "SLOWBRO turned away…$" + +CeruleanCity_Text_SlowbroIgnoredOrders:: + .string "SLOWBRO ignored orders…$" + +CeruleanCity_Text_WantBrightRedBicycle:: + .string "I want a bright red bicycle.\p" + .string "I'll keep it at home, so it won't\n" + .string "get dirty.$" + +CeruleanCity_Text_ThisIsCeruleanCave:: + .string "This is CERULEAN CAVE.\p" + .string "Horribly strong POKéMON live inside\n" + .string "there.\p" + .string "It takes a very special TRAINER to\n" + .string "be allowed inside there.\p" + .string "You'd have to be strong enough to\n" + .string "become the POKéMON LEAGUE\l" + .string "CHAMPION for starters.\p" + .string "And, you would have to have\n" + .string "made a great achievement.$" + +CeruleanCity_Text_CitySign:: + .string "CERULEAN CITY\n" + .string "A Mysterious, Blue Aura Surrounds\l" + .string "It$" + +CeruleanCity_Text_TrainerTipsHeldItems:: + .string "TRAINER TIPS\p" + .string "A POKéMON can be made to hold\n" + .string "an item.\p" + .string "Some items can even be used by\n" + .string "the holding POKéMON in battle.$" + +CeruleanCity_Text_BikeShopSign:: + .string "Grass and caves handled easily!\n" + .string "BIKE SHOP$" + +CeruleanCity_Text_GymSign:: + .string "CERULEAN CITY POKéMON GYM\n" + .string "LEADER: MISTY\l" + .string "The Tomboyish Mermaid!$" + diff --git a/data/maps/CeruleanCity_BikeShop/scripts.inc b/data/maps/CeruleanCity_BikeShop/scripts.inc new file mode 100644 index 000000000000..e60e7e30bd41 --- /dev/null +++ b/data/maps/CeruleanCity_BikeShop/scripts.inc @@ -0,0 +1,129 @@ +CeruleanCity_BikeShop_MapScripts:: + .byte 0 + +CeruleanCity_BikeShop_EventScript_Clerk:: + lock + faceplayer + goto_if_set FLAG_GOT_BICYCLE, CeruleanCity_BikeShop_EventScript_AlreadyGotBicycle + goto_if_set FLAG_GOT_BIKE_VOUCHER, CeruleanCity_BikeShop_EventScript_ExchangeBikeVoucher + showmoneybox 0, 0 + message CeruleanCity_BikeShop_Text_WelcomeToBikeShop + waitmessage + multichoice 11, 0, MULTI_BIKE_SHOP, FALSE + switch VAR_RESULT + case 0, CeruleanCity_BikeShop_EventScript_TryPurchaseBicycle + case 1, CeruleanCity_BikeShop_EventScript_ClerkGoodbye + case 127, CeruleanCity_BikeShop_EventScript_ClerkGoodbye + end + +@ The Bicycle price / players money is never actually checked +CeruleanCity_BikeShop_EventScript_TryPurchaseBicycle:: + msgbox CeruleanCity_BikeShop_Text_SorryYouCantAffordIt + goto CeruleanCity_BikeShop_EventScript_ClerkGoodbye + end + +CeruleanCity_BikeShop_EventScript_ClerkGoodbye:: + msgbox CeruleanCity_BikeShop_Text_ThankYouComeAgain + hidemoneybox + release + end + +CeruleanCity_BikeShop_EventScript_ExchangeBikeVoucher:: + msgbox CeruleanCity_BikeShop_Text_OhBikeVoucherHereYouGo + msgreceiveditem CeruleanCity_BikeShop_Text_ExchangedVoucherForBicycle, ITEM_BICYCLE, 1, MUS_RG_OBTAIN_KEY_ITEM + setflag FLAG_GOT_BICYCLE + additem ITEM_BICYCLE + removeitem ITEM_BIKE_VOUCHER + msgbox CeruleanCity_BikeShop_Text_ThankYouComeAgain + release + end + +CeruleanCity_BikeShop_EventScript_AlreadyGotBicycle:: + msgbox CeruleanCity_BikeShop_Text_HowDoYouLikeNewBicycle + release + end + +@ Unused +CeruleanCity_BikeShop_EventScript_NoRoomForBicycle:: + msgbox CeruleanCity_BikeShop_Text_MakeRoomForBicycle + release + end + +CeruleanCity_BikeShop_EventScript_Woman:: + msgbox CeruleanCity_BikeShop_Text_CityBikeGoodEnoughForMe, MSGBOX_NPC + end + +CeruleanCity_BikeShop_EventScript_Youngster:: + lock + faceplayer + goto_if_set FLAG_GOT_BICYCLE, CeruleanCity_BikeShop_EventScript_YoungsterHaveBike + msgbox CeruleanCity_BikeShop_Text_BikesCoolButExpensive + release + end + +CeruleanCity_BikeShop_EventScript_YoungsterHaveBike:: + msgbox CeruleanCity_BikeShop_Text_WowYourBikeIsCool + release + end + +CeruleanCity_BikeShop_EventScript_Bicycle:: + msgbox CeruleanCity_BikeShop_Text_ShinyNewBicycle, MSGBOX_SIGN + end + +CeruleanCity_BikeShop_Text_WelcomeToBikeShop:: + .string "Hi!\n" + .string "Welcome to our BIKE SHOP.\p" + .string "Have we got just the BIKE for\n" + .string "you!$" + +CeruleanCity_BikeShop_Text_SorryYouCantAffordIt:: + .string "Sorry!\n" + .string "You can't afford it!$" + +CeruleanCity_BikeShop_Text_OhBikeVoucherHereYouGo:: + .string "Oh, that's…\p" + .string "A BIKE VOUCHER!\p" + .string "Okay!\n" + .string "Here you go!$" + +CeruleanCity_BikeShop_Text_ExchangedVoucherForBicycle:: + .string "{PLAYER} exchanged the\n" + .string "BIKE VOUCHER for a BICYCLE.$" + +CeruleanCity_BikeShop_Text_ThankYouComeAgain:: + .string "Thank you!\n" + .string "Come back again sometime!$" + +CeruleanCity_BikeShop_Text_HowDoYouLikeNewBicycle:: + .string "How do you like your new BICYCLE?\n" + .string "Do you like how it rides?\p" + .string "You can take it out on CYCLING\n" + .string "ROAD and even into caves!$" + +CeruleanCity_BikeShop_Text_MakeRoomForBicycle:: + .string "You better make room for your\n" + .string "BICYCLE!$" + +CeruleanCity_BikeShop_Text_CityBikeGoodEnoughForMe:: + .string "A plain city bike is good enough\n" + .string "for me.\p" + .string "After all, you can't put a shopping\n" + .string "basket on a mountain bike.$" + +CeruleanCity_BikeShop_Text_BikesCoolButExpensive:: + .string "These bikes are cool, but they're\n" + .string "way expensive!$" + +CeruleanCity_BikeShop_Text_WowYourBikeIsCool:: + .string "Wow.\n" + .string "Your BIKE is really cool!$" + +@ Unused +CeruleanCity_BikeShop_Text_GermanFoldableBicyleFinallyOnMarket:: + .string "ついに はつばい!\p" + .string "ドイツ せい さいこうきゅう\n" + .string "おりたたみ じてんしゃ!$" + +CeruleanCity_BikeShop_Text_ShinyNewBicycle:: + .string "A shiny new BICYCLE!$" + diff --git a/data/maps/CeruleanCity_Gym/scripts.inc b/data/maps/CeruleanCity_Gym/scripts.inc new file mode 100644 index 000000000000..a49cb76741e1 --- /dev/null +++ b/data/maps/CeruleanCity_Gym/scripts.inc @@ -0,0 +1,163 @@ +CeruleanCity_Gym_MapScripts:: + .byte 0 + +CeruleanCity_Gym_EventScript_Misty:: + famechecker FAMECHECKER_MISTY, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + trainerbattle_single TRAINER_LEADER_MISTY, CeruleanCity_Gym_Text_MistyIntro, CeruleanCity_Gym_Text_MistyDefeat, CeruleanCity_Gym_EventScript_MistyDefeated, NO_MUSIC + goto_if_unset FLAG_GOT_TM03_FROM_MISTY, CeruleanCity_Gym_EventScript_GiveTM03 + msgbox CeruleanCity_Gym_Text_ExplainTM03 + release + end + +CeruleanCity_Gym_EventScript_MistyDefeated:: + famechecker FAMECHECKER_MISTY, 1 + setflag FLAG_DEFEATED_MISTY + setflag FLAG_BADGE02_GET + setrespawn HEAL_LOCATION_CERULEAN_CITY + set_gym_trainers_frlg 2 + goto CeruleanCity_Gym_EventScript_GiveTM03 + end + +CeruleanCity_Gym_EventScript_GiveTM03:: + msgbox CeruleanCity_Gym_Text_ExplainCascadeBadge + checkitemspace ITEM_TM03 + goto_if_eq VAR_RESULT, FALSE, CeruleanCity_Gym_EventScript_NoRoomForTM03 + giveitem_msg CeruleanCity_Gym_Text_ReceivedTM03FromMisty, ITEM_TM03 + setflag FLAG_GOT_TM03_FROM_MISTY + msgbox CeruleanCity_Gym_Text_ExplainTM03 + release + end + +CeruleanCity_Gym_EventScript_NoRoomForTM03:: + msgbox CeruleanCity_Gym_Text_BetterMakeRoomForThis + release + end + +CeruleanCity_Gym_EventScript_Diana:: + trainerbattle_single TRAINER_PICNICKER_DIANA, CeruleanCity_Gym_Text_DianaIntro, CeruleanCity_Gym_Text_DianaDefeat + msgbox CeruleanCity_Gym_Text_DianaPostBattle, MSGBOX_AUTOCLOSE + end + +CeruleanCity_Gym_EventScript_Luis:: + trainerbattle_single TRAINER_SWIMMER_MALE_LUIS, CeruleanCity_Gym_Text_LuisIntro, CeruleanCity_Gym_Text_LuisDefeat + famechecker FAMECHECKER_MISTY, 2 + msgbox CeruleanCity_Gym_Text_LuisPostBattle, MSGBOX_AUTOCLOSE + end + +CeruleanCity_Gym_EventScript_GymGuy:: + lock + faceplayer + goto_if_set FLAG_DEFEATED_MISTY, CeruleanCity_Gym_EventScript_GymGuyPostVictory + msgbox CeruleanCity_Gym_Text_GymGuyAdvice + release + end + +CeruleanCity_Gym_EventScript_GymGuyPostVictory:: + msgbox CeruleanCity_Gym_Text_WeMakePrettyGoodTeam + release + end + +CeruleanCity_Gym_EventScript_GymStatue:: + lockall + goto_if_set FLAG_BADGE02_GET, CeruleanCity_Gym_EventScript_GymStatuePostVictory + msgbox CeruleanCity_Gym_Text_GymStatue + releaseall + end + +CeruleanCity_Gym_EventScript_GymStatuePostVictory:: + msgbox CeruleanCity_Gym_Text_GymStatuePlayerWon + releaseall + end + +CeruleanCity_Gym_Text_MistyIntro:: + .string "Hi, you're a new face!\p" + .string "Only those TRAINERS who have a\n" + .string "policy about POKéMON can turn pro.\p" + .string "What is your approach when you\n" + .string "catch and train POKéMON?\p" + .string "My policy is an all-out offensive\n" + .string "with WATER-type POKéMON!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +CeruleanCity_Gym_Text_ExplainTM03:: + .string "TM03 teaches WATER PULSE.\p" + .string "Use it on an aquatic POKéMON!$" + +CeruleanCity_Gym_Text_ExplainCascadeBadge:: + .string "The CASCADEBADGE makes all\n" + .string "POKéMON up to Lv. 30 obey.\p" + .string "That includes even outsiders you\n" + .string "got in trades.\p" + .string "There's more. You can now use CUT\n" + .string "anytime, even out of battle.\p" + .string "You can CUT down small trees to\n" + .string "open new pathways.\p" + .string "You can also have my favorite TM.$" + +CeruleanCity_Gym_Text_ReceivedTM03FromMisty:: + .string "{PLAYER} received TM03\n" + .string "from MISTY.$" + +CeruleanCity_Gym_Text_BetterMakeRoomForThis:: + .string "You better make room for this!$" + +CeruleanCity_Gym_Text_MistyDefeat:: + .string "Wow!\n" + .string "You're too much!\p" + .string "All right!\p" + .string "You can have the CASCADEBADGE to\n" + .string "show you beat me.$" + +CeruleanCity_Gym_Text_DianaIntro:: + .string "What? You?\n" + .string "I'm more than good enough for you!\p" + .string "MISTY won't have to be bothered.$" + +CeruleanCity_Gym_Text_DianaDefeat:: + .string "You overwhelmed me!$" + +CeruleanCity_Gym_Text_DianaPostBattle:: + .string "You have to face other TRAINERS\n" + .string "to see how good you really are.$" + +CeruleanCity_Gym_Text_LuisIntro:: + .string "Splash!\p" + .string "I'm first up!\n" + .string "Let's do it!$" + +CeruleanCity_Gym_Text_LuisDefeat:: + .string "That can't be!$" + +CeruleanCity_Gym_Text_LuisPostBattle:: + .string "MISTY is a TRAINER who's going to\n" + .string "keep improving.\p" + .string "She won't lose to someone like you!$" + +CeruleanCity_Gym_Text_GymGuyAdvice:: + .string "Yo!\n" + .string "Champ in the making!\p" + .string "Let me give you some advice!\p" + .string "The LEADER, MISTY, is a pro who\n" + .string "uses WATER-type POKéMON.\p" + .string "You can drain all their water with\n" + .string "GRASS-type POKéMON.\p" + .string "Or, you might use ELECTRIC-type\n" + .string "POKéMON and zap them!$" + +CeruleanCity_Gym_Text_WeMakePrettyGoodTeam:: + .string "You beat MISTY!\n" + .string "See, what'd I tell ya?\p" + .string "You and me, kid, we make a pretty\n" + .string "darn-good team!$" + +CeruleanCity_Gym_Text_GymStatue:: + .string "CERULEAN POKéMON GYM\n" + .string "LEADER: MISTY\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}$" + +CeruleanCity_Gym_Text_GymStatuePlayerWon:: + .string "CERULEAN POKéMON GYM\n" + .string "LEADER: MISTY\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}, {PLAYER}$" + diff --git a/data/maps/CeruleanCity_House1/scripts.inc b/data/maps/CeruleanCity_House1/scripts.inc new file mode 100644 index 000000000000..78dd14ae5b0e --- /dev/null +++ b/data/maps/CeruleanCity_House1/scripts.inc @@ -0,0 +1,146 @@ +CeruleanCity_House1_MapScripts:: + .byte 0 + +CeruleanCity_House1_EventScript_BadgeGuy:: + lock + faceplayer + msgbox CeruleanCity_House1_Text_BadgesHaveAmazingSecrets + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_DescribeAnotherBadge:: + message CeruleanCity_House1_Text_DescribeWhichBadge + waitmessage + setvar VAR_0x8004, SCROLL_MULTI_BADGES + special ShowScrollableMultichoice + waitstate + switch VAR_RESULT + case 0, CeruleanCity_House1_EventScript_DescribeBoulderBadge + case 1, CeruleanCity_House1_EventScript_DescribeCascadeBadge + case 2, CeruleanCity_House1_EventScript_DescribeThunderBadge + case 3, CeruleanCity_House1_EventScript_DescribeRainbowBadge + case 4, CeruleanCity_House1_EventScript_DescribeSoulBadge + case 5, CeruleanCity_House1_EventScript_DescribeMarshBadge + case 6, CeruleanCity_House1_EventScript_DescribeVolcanoBadge + case 7, CeruleanCity_House1_EventScript_DescribeEarthBadge + case 8, CeruleanCity_House1_EventScript_StopDescribingBadges + case 127, CeruleanCity_House1_EventScript_StopDescribingBadges + end + +CeruleanCity_House1_EventScript_DescribeBoulderBadge:: + msgbox CeruleanCity_House1_Text_AttackStatFlash + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_DescribeCascadeBadge:: + msgbox CeruleanCity_House1_Text_ObeyLv30Cut + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_DescribeThunderBadge:: + msgbox CeruleanCity_House1_Text_SpeedStatFly + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_DescribeRainbowBadge:: + msgbox CeruleanCity_House1_Text_ObeyLv50Strength + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_DescribeSoulBadge:: + msgbox CeruleanCity_House1_Text_DefenseStatSurf + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_DescribeMarshBadge:: + msgbox CeruleanCity_House1_Text_ObeyLv70RockSmash + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_DescribeVolcanoBadge:: + msgbox CeruleanCity_House1_Text_SpStatsWaterfall + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_DescribeEarthBadge:: + msgbox CeruleanCity_House1_Text_AllMonsWillObeyYou + goto CeruleanCity_House1_EventScript_DescribeAnotherBadge + end + +CeruleanCity_House1_EventScript_StopDescribingBadges:: + msgbox CeruleanCity_House1_Text_ComeVisitAnytime + release + end + +CeruleanCity_House1_Text_BadgesHaveAmazingSecrets:: + .string "Only skilled TRAINERS can collect\n" + .string "POKéMON BADGES.\p" + .string "I see you have at least one.\p" + .string "Those BADGES have amazing secrets,\n" + .string "did you know?$" + +CeruleanCity_House1_Text_DescribeWhichBadge:: + .string "Now then…\p" + .string "Which of the eight BADGES should\n" + .string "I describe?$" + +CeruleanCity_House1_Text_ComeVisitAnytime:: + .string "Come visit me anytime you wish.$" + +CeruleanCity_House1_Text_AttackStatFlash:: + .string "The ATTACK stat of all your\n" + .string "POKéMON increases a little bit.\p" + .string "It also lets you use the move\n" + .string "FLASH outside of battle.$" + +CeruleanCity_House1_Text_ObeyLv30Cut:: + .string "POKéMON up to Lv. 30 will obey\n" + .string "you.\p" + .string "That includes even outsiders you\n" + .string "obtain in trades.\p" + .string "POKéMON of higher levels will\n" + .string "be unruly in battle, however.\p" + .string "It also lets you use the move\n" + .string "CUT outside of battle.$" + +CeruleanCity_House1_Text_SpeedStatFly:: + .string "The SPEED stat of all your\n" + .string "POKéMON increases a little bit.\p" + .string "It also lets you use the move\n" + .string "FLY outside of battle.$" + +CeruleanCity_House1_Text_ObeyLv50Strength:: + .string "POKéMON up to Lv. 50 will obey\n" + .string "you.\p" + .string "That includes even outsiders you\n" + .string "obtain in trades.\p" + .string "POKéMON of higher levels will\n" + .string "be unruly in battle, however.\p" + .string "It also lets you use the move\n" + .string "STRENGTH outside of battle.$" + +CeruleanCity_House1_Text_DefenseStatSurf:: + .string "The DEFENSE stat of all your\n" + .string "POKéMON increases a little bit.\p" + .string "It also lets you use the move\n" + .string "SURF outside of battle.$" + +CeruleanCity_House1_Text_ObeyLv70RockSmash:: + .string "POKéMON up to Lv. 70 will obey\n" + .string "you.\p" + .string "That includes even outsiders you\n" + .string "obtain in trades.\p" + .string "POKéMON of higher levels will\n" + .string "be unruly in battle, however.\p" + .string "It also lets you use the move\n" + .string "ROCK SMASH outside of battle.$" + +CeruleanCity_House1_Text_SpStatsWaterfall:: + .string "The SP. ATK and SP. DEF stats of\n" + .string "all your POKéMON rise a little bit.\p" + .string "It also lets you use the move\n" + .string "WATERFALL outside of battle.$" + +CeruleanCity_House1_Text_AllMonsWillObeyYou:: + .string "All POKéMON will obey you!$" + diff --git a/data/maps/CeruleanCity_House2/scripts.inc b/data/maps/CeruleanCity_House2/scripts.inc new file mode 100644 index 000000000000..311db1fc8425 --- /dev/null +++ b/data/maps/CeruleanCity_House2/scripts.inc @@ -0,0 +1,46 @@ +CeruleanCity_House2_MapScripts:: + .byte 0 + +CeruleanCity_House2_EventScript_Hiker:: + lock + faceplayer + goto_if_set FLAG_GOT_TM28_FROM_ROCKET, CeruleanCity_House2_EventScript_HikerGotTM28 + msgbox CeruleanCity_House2_Text_RocketsStoleTMForDig + release + end + +CeruleanCity_House2_EventScript_HikerGotTM28:: + msgbox CeruleanCity_House2_Text_TeachDiglettDigWithoutTM + release + end + +CeruleanCity_House2_EventScript_Lass:: + msgbox CeruleanCity_House2_Text_TeamRocketTryingToDigIntoNoGood, MSGBOX_NPC + end + +CeruleanCity_House2_EventScript_WallHole:: + msgbox CeruleanCity_House2_Text_TeamRocketLeftWayOut, MSGBOX_SIGN + end + +CeruleanCity_House2_Text_RocketsStoleTMForDig:: + .string "Those miserable ROCKETS!\p" + .string "Look what they've done to my\n" + .string "house!\p" + .string "They stole a TM for teaching\n" + .string "POKéMON how to DIG holes!\p" + .string "I was going to use it on a\n" + .string "MANKEY or a SANDSHREW…\p" + .string "That cost me a bundle, it did!$" + +CeruleanCity_House2_Text_TeachDiglettDigWithoutTM:: + .string "I figure what's lost is lost.\p" + .string "I decided to teach DIGLETT how to\n" + .string "DIG without a TM.$" + +CeruleanCity_House2_Text_TeamRocketTryingToDigIntoNoGood:: + .string "TEAM ROCKET must be trying to DIG\n" + .string "their way into no good!$" + +CeruleanCity_House2_Text_TeamRocketLeftWayOut:: + .string "TEAM ROCKET left a way out!$" + diff --git a/data/maps/CeruleanCity_House3/scripts.inc b/data/maps/CeruleanCity_House3/scripts.inc new file mode 100644 index 000000000000..51e747049fff --- /dev/null +++ b/data/maps/CeruleanCity_House3/scripts.inc @@ -0,0 +1,47 @@ +CeruleanCity_House3_MapScripts:: + .byte 0 + +CeruleanCity_House3_EventScript_OldWoman:: + msgbox CeruleanCity_House3_Text_PleaseTradeWithMyHusband, MSGBOX_NPC + end + +CeruleanCity_House3_EventScript_Dontae:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_JYNX + call EventScript_GetInGameTradeSpeciesInfo + goto_if_set FLAG_DID_ZYNX_TRADE, CeruleanCity_House3_EventScript_AlreadyTraded + msgbox Trade_Text_DoYouHaveMonWouldYouTradeForMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeruleanCity_House3_EventScript_DeclineTrade + call EventScript_ChooseMonForInGameTrade + goto_if_ge VAR_0x8004, PARTY_SIZE, CeruleanCity_House3_EventScript_DeclineTrade + call EventScript_GetInGameTradeSpecies + goto_if_ne VAR_RESULT, VAR_0x8009, CeruleanCity_House3_EventScript_NotRequestedMon + call EventScript_DoInGameTrade + msgbox Trade_Text_Thanks + setflag FLAG_DID_ZYNX_TRADE + release + end + +CeruleanCity_House3_EventScript_DeclineTrade:: + msgbox Trade_Text_WellIfYouDontWantTo + release + end + +CeruleanCity_House3_EventScript_NotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox Trade_Text_ThisIsntMon + release + end + +CeruleanCity_House3_EventScript_AlreadyTraded:: + msgbox Trade_Text_HasTradedMonGrownStronger + release + end + +CeruleanCity_House3_Text_PleaseTradeWithMyHusband:: + .string "My husband likes trading POKéMON.\p" + .string "You're collecting POKéMON for your\n" + .string "POKéDEX, aren't you?\p" + .string "Would you please trade with him?$" + diff --git a/data/maps/CeruleanCity_House4/scripts.inc b/data/maps/CeruleanCity_House4/scripts.inc new file mode 100644 index 000000000000..8d7639026189 --- /dev/null +++ b/data/maps/CeruleanCity_House4/scripts.inc @@ -0,0 +1,154 @@ +.set REWARD_TYPE, VAR_0x8004 +.set REWARD_ITEM, VAR_0x8008 + +CeruleanCity_House4_MapScripts:: + .byte 0 + +CeruleanCity_House4_EventScript_WonderNewsBerryMan:: + lock + specialvar REWARD_TYPE, WonderNews_GetRewardInfo + copyvar REWARD_ITEM, VAR_RESULT + goto_if_eq REWARD_TYPE, NEWS_REWARD_NONE, CeruleanCity_House4_EventScript_NoNews + goto_if_eq REWARD_TYPE, NEWS_REWARD_RECV_SMALL, CeruleanCity_House4_EventScript_Reward_RecvSmall + goto_if_eq REWARD_TYPE, NEWS_REWARD_RECV_BIG, CeruleanCity_House4_EventScript_Reward_RecvBig + goto_if_eq REWARD_TYPE, NEWS_REWARD_WAITING, CeruleanCity_House4_EventScript_Waiting + goto_if_eq REWARD_TYPE, NEWS_REWARD_SENT_SMALL, CeruleanCity_House4_EventScript_Reward_SentSmall + goto_if_eq REWARD_TYPE, NEWS_REWARD_SENT_BIG, CeruleanCity_House4_EventScript_Reward_SentBig + goto_if_eq REWARD_TYPE, NEWS_REWARD_AT_MAX, CeruleanCity_House4_EventScript_AtMax + end + +@ Mystery Gift is not enabled, or the player has no saved Wonder News +CeruleanCity_House4_EventScript_NoNews:: + msgbox CeruleanCity_House4_Text_NothingEntertaining + release + end + +@ Small reward for receiving Wonder News from friend +CeruleanCity_House4_EventScript_Reward_RecvSmall:: + call CeruleanCity_House4_EventScript_MovementReactionToNews + msgbox CeruleanCity_House4_Text_NewNewsInformativeHaveThis + giveitem REWARD_ITEM + goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries + release + end + +@ Big reward for receiving Wonder News from non-friend source +CeruleanCity_House4_EventScript_Reward_RecvBig:: + call CeruleanCity_House4_EventScript_MovementReactionToNews + msgbox CeruleanCity_House4_Text_IncredibleNewsHaveBerries + giveitem REWARD_ITEM, 4 + goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries + release + end + +@ Player has not recently sent Wonder News +CeruleanCity_House4_EventScript_Waiting:: + applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer + waitmovement 0 + msgbox CeruleanCity_House4_Text_WishCouldShareNewsWithOthers + release + end + +@ Small reward for sending Wonder News every 1-3 times +CeruleanCity_House4_EventScript_Reward_SentSmall:: + call CeruleanCity_House4_EventScript_MovementReactionToNews + msgbox CeruleanCity_House4_Text_ThanksForSpreadingNewsTakeThis + giveitem REWARD_ITEM + goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries + release + end + +@ Big reward for sending Wonder News every 4th time +CeruleanCity_House4_EventScript_Reward_SentBig:: + call CeruleanCity_House4_EventScript_MovementReactionToNews + msgbox CeruleanCity_House4_Text_MagnificentNewsSpreadHaveBerries + giveitem REWARD_ITEM, 4 + goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House4_EventScript_NoRoomForBerries + release + end + +@ Player has hit reward limit and must wait to receive new rewards +CeruleanCity_House4_EventScript_AtMax:: + applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer + waitmovement 0 + msgbox CeruleanCity_House4_Text_EnjoyingMyselfWithAllSortsOfNews + release + end + +CeruleanCity_House4_EventScript_MovementReactionToNews:: + playse SE_PIN + applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_FacePlayer + waitmovement 0 + applymovement LOCALID_WONDER_NEWS_BERRY_MAN, Common_Movement_Delay48 + waitmovement 0 + return + +CeruleanCity_House4_EventScript_NoRoomForBerries:: + msgbox CeruleanCity_House4_Text_YourBerryPouchIsFull + release + end + +CeruleanCity_House4_Text_NothingEntertaining:: + .string "Sigh…\n" + .string "Too much time, too little to do…\p" + .string "Is nothing entertaining happening\n" + .string "anywhere?$" + +CeruleanCity_House4_Text_NewNewsInformativeHaveThis:: + .string "Ah!\n" + .string "A new news report!\p" + .string "Hmm…\p" + .string "I see!\n" + .string "That was quite informative!\p" + .string "I applaud you for taking interest\n" + .string "in the news at your young age.\p" + .string "As my thanks for sharing the news\n" + .string "with me, I want you to have this.$" + +CeruleanCity_House4_Text_IncredibleNewsHaveBerries:: + .string "Oh, oh!\n" + .string "Th-this news report!\p" + .string "Hmm…\p" + .string "Amazing!\n" + .string "What an incredible piece of news!\p" + .string "I haven't seen a news story this\n" + .string "incredible in too long a time!\p" + .string "Thanks for sharing this fantastic\n" + .string "news. Have a bunch of BERRIES!$" + +CeruleanCity_House4_Text_WishCouldShareNewsWithOthers:: + .string "It seems such a shame to not share\n" + .string "this news with other folks…\p" + .string "I wish I could tell someone…\n" + .string "Let others know the news…$" + +CeruleanCity_House4_Text_ThanksForSpreadingNewsTakeThis:: + .string "Ah, you've spread the news for me?\p" + .string "Good news becomes worthwhile when\n" + .string "all sorts of people share it.\p" + .string "As my thanks for your spreading\n" + .string "the news, take this!$" + +CeruleanCity_House4_Text_MagnificentNewsSpreadHaveBerries:: + .string "You've spread the news some more?\n" + .string "Magnificent!\p" + .string "That piece of news must be\n" + .string "delighted to be passed around so.\p" + .string "Yes, indeed!\p" + .string "Consider this a show of\n" + .string "appreciation from me and the news.\p" + .string "I'll give you more BERRIES than\n" + .string "I usually do.$" + +CeruleanCity_House4_Text_EnjoyingMyselfWithAllSortsOfNews:: + .string "I'm quite enjoying myself with all\n" + .string "sorts of news.\p" + .string "Yes, I am satisfied!\n" + .string "I won't be bored for a while.$" + +CeruleanCity_House4_Text_YourBerryPouchIsFull:: + .string "Hm? Your BERRY POUCH is full.\n" + .string "My gift remains ungiven, then.$" + diff --git a/data/maps/CeruleanCity_House5/scripts.inc b/data/maps/CeruleanCity_House5/scripts.inc new file mode 100644 index 000000000000..580831dd9f5d --- /dev/null +++ b/data/maps/CeruleanCity_House5/scripts.inc @@ -0,0 +1,245 @@ +CeruleanCity_House5_MapScripts:: + .byte 0 + +CeruleanCity_House5_EventScript_BerryPowderMan:: + lock + faceplayer + goto_if_set FLAG_GOT_POWDER_JAR, CeruleanCity_House5_EventScript_AskToExchangePowder + msgbox CeruleanCity_House1_Text_AnyInterestInBerries, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeruleanCity_House5_EventScript_NoInterestInBerries + goto_if_unset FLAG_SYS_GOT_BERRY_POUCH, CeruleanCity_House5_EventScript_NoBerries + msgbox CeruleanCity_House1_Text_HaveJustTheThing + setflag FLAG_GOT_POWDER_JAR + giveitem ITEM_POWDER_JAR + goto_if_eq VAR_RESULT, FALSE, EventScript_BagIsFull + msgbox CeruleanCity_House1_Text_GoCrushBerriesAtDirectCorner + release + end + +CeruleanCity_House5_EventScript_NoBerries:: + msgbox CeruleanCity_House1_Text_WhyMustYouLieNoBerries + release + end + +CeruleanCity_House5_EventScript_NoInterestInBerries:: + msgbox CeruleanCity_House1_Text_TakeInterestInAllSortsOfThings + release + end + +CeruleanCity_House5_EventScript_AskToExchangePowder:: + special DisplayBerryPowderVendorMenu + msgbox CeruleanCity_House1_Text_HaveYouBroughtBerryPowder + goto CeruleanCity_House5_EventScript_ChooseExchangeItem + end + +CeruleanCity_House5_EventScript_ChooseExchangeItem:: + message CeruleanCity_House5_Text_ExchangeWithWhat + waitmessage + setvar VAR_0x8004, SCROLL_MULTI_BERRY_POWDER_VENDOR + special ShowScrollableMultichoice + waitstate + switch VAR_RESULT + case 0, CeruleanCity_House5_EventScript_EnergyPowder + case 1, CeruleanCity_House5_EventScript_EnergyRoot + case 2, CeruleanCity_House5_EventScript_HealPowder + case 3, CeruleanCity_House5_EventScript_RevivalHerb + case 4, CeruleanCity_House5_EventScript_Protein + case 5, CeruleanCity_House5_EventScript_Iron + case 6, CeruleanCity_House5_EventScript_Carbos + case 7, CeruleanCity_House5_EventScript_Calcium + case 8, CeruleanCity_House5_EventScript_Zinc + case 9, CeruleanCity_House5_EventScript_HPUp + case 10, CeruleanCity_House5_EventScript_PPUp + case 11, CeruleanCity_House5_EventScript_ExitMenu + case 127, CeruleanCity_House5_EventScript_ExitMenu + end + +CeruleanCity_House5_EventScript_EnergyPowder:: + bufferitemname STR_VAR_1, ITEM_ENERGY_POWDER + setvar VAR_0x8008, ITEM_ENERGY_POWDER + setvar VAR_0x8009, 50 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_EnergyRoot:: + bufferitemname STR_VAR_1, ITEM_ENERGY_ROOT + setvar VAR_0x8008, ITEM_ENERGY_ROOT + setvar VAR_0x8009, 80 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_HealPowder:: + bufferitemname STR_VAR_1, ITEM_HEAL_POWDER + setvar VAR_0x8008, ITEM_HEAL_POWDER + setvar VAR_0x8009, 50 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_RevivalHerb:: + bufferitemname STR_VAR_1, ITEM_REVIVAL_HERB + setvar VAR_0x8008, ITEM_REVIVAL_HERB + setvar VAR_0x8009, 300 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_Protein:: + bufferitemname STR_VAR_1, ITEM_PROTEIN + setvar VAR_0x8008, ITEM_PROTEIN + setvar VAR_0x8009, 1000 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_Iron:: + bufferitemname STR_VAR_1, ITEM_IRON + setvar VAR_0x8008, ITEM_IRON + setvar VAR_0x8009, 1000 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_Carbos:: + bufferitemname STR_VAR_1, ITEM_CARBOS + setvar VAR_0x8008, ITEM_CARBOS + setvar VAR_0x8009, 1000 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_Calcium:: + bufferitemname STR_VAR_1, ITEM_CALCIUM + setvar VAR_0x8008, ITEM_CALCIUM + setvar VAR_0x8009, 1000 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_Zinc:: + bufferitemname STR_VAR_1, ITEM_ZINC + setvar VAR_0x8008, ITEM_ZINC + setvar VAR_0x8009, 1000 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_HPUp:: + bufferitemname STR_VAR_1, ITEM_HP_UP + setvar VAR_0x8008, ITEM_HP_UP + setvar VAR_0x8009, 1000 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_PPUp:: + bufferitemname STR_VAR_1, ITEM_PP_UP + setvar VAR_0x8008, ITEM_PP_UP + setvar VAR_0x8009, 3000 + goto CeruleanCity_House5_EventScript_ExchangePowderForItem + end + +CeruleanCity_House5_EventScript_ExitMenu:: + msgbox CeruleanCity_House1_Text_SeeMeIfYoudLikeToTradePowder + special RemoveBerryPowderVendorMenu + release + end + +CeruleanCity_House5_EventScript_ExchangePowderForItem:: + msgbox CeruleanCity_House1_Text_YoullExchangeBerryPowderForItem, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CeruleanCity_House5_EventScript_ChooseExchangeItem + copyvar VAR_0x8004, VAR_0x8009 + specialvar VAR_RESULT, HasEnoughBerryPowder + goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House5_EventScript_NotEnoughBerryPowder + giveitem VAR_0x8008 + goto_if_eq VAR_RESULT, FALSE, CeruleanCity_House5_EventScript_BagIsFull + copyvar VAR_0x8004, VAR_0x8009 + special TakeBerryPowder + special PrintPlayerBerryPowderAmount + msgbox CeruleanCity_House1_Text_TradeMoreBerryPowder, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CeruleanCity_House5_EventScript_ChooseExchangeItem + msgbox CeruleanCity_House1_Text_HopeToSeeYouAgain + special RemoveBerryPowderVendorMenu + release + end + +CeruleanCity_House5_EventScript_BagIsFull:: + msgbox gText_TheBagIsFull + special RemoveBerryPowderVendorMenu + release + end + +CeruleanCity_House5_EventScript_NotEnoughBerryPowder:: + msgbox CeruleanCity_House1_Text_DontHaveEnoughBerryPowder + goto CeruleanCity_House5_EventScript_ChooseExchangeItem + end + +CeruleanCity_House5_EventScript_BerryCrushRankings:: + lockall + special ShowBerryCrushRankings + waitstate + releaseall + end + +CeruleanCity_House1_Text_AnyInterestInBerries:: + .string "I concoct a variety of medicine\n" + .string "from BERRY POWDER.\p" + .string "Using good BERRY POWDER, I can\n" + .string "make any kind of medicine.\p" + .string "Now tell me, have you any interest\n" + .string "in BERRIES?$" + +CeruleanCity_House1_Text_HaveJustTheThing:: + .string "Ah, good! For you, then, I have\n" + .string "just the thing.$" + +CeruleanCity_House1_Text_GoCrushBerriesAtDirectCorner:: + .string "There's something new on the second\n" + .string "floor of POKéMON CENTERS, at the\l" + .string "DIRECT CORNER.\p" + .string "They installed a Wireless Adapter\n" + .string "machine for crushing BERRIES.\p" + .string "This is where you come in.\p" + .string "I have a favor to ask, one that\n" + .string "I can entrust only to you.\p" + .string "Could you make BERRY POWDER for\n" + .string "me using that machine?\p" + .string "Don't forget, the machine is at the\n" + .string "DIRECT CORNER of POKéMON CENTERS.\p" + .string "I'll concoct medicine for you if\n" + .string "you bring me some BERRY POWDER.\p" + .string "Don't forget, crush BERRIES into\n" + .string "BERRY POWDER and bring it to me.$" + +CeruleanCity_House1_Text_WhyMustYouLieNoBerries:: + .string "Why must you lie to me?\p" + .string "How many BERRIES do you have?\n" + .string "Not a one!$" + +CeruleanCity_House1_Text_TakeInterestInAllSortsOfThings:: + .string "You have no interest in BERRIES?\p" + .string "Young one, it's important to take an\n" + .string "interest in all sorts of things.$" + +CeruleanCity_House1_Text_HaveYouBroughtBerryPowder:: + .string "Er-hem! Have you brought me some\n" + .string "BERRY POWDER?$" + +CeruleanCity_House5_Text_ExchangeWithWhat:: + .string "With what would you like to \n" + .string "exchange it?$" + +CeruleanCity_House1_Text_YoullExchangeBerryPowderForItem:: + .string "Fine, you'll exchange your BERRY\n" + .string "POWDER for one {STR_VAR_1}?$" + +CeruleanCity_House1_Text_DontHaveEnoughBerryPowder:: + .string "Hm? You don't have enough\n" + .string "BERRY POWDER.$" + +CeruleanCity_House1_Text_TradeMoreBerryPowder:: + .string "This is fine BERRY POWDER indeed.\n" + .string "It will make excellent medicine.\p" + .string "Would you like to trade more BERRY\n" + .string "POWDER for something else?$" + +CeruleanCity_House1_Text_HopeToSeeYouAgain:: + .string "That's fine, then.\n" + .string "I'll hope to see you back again.$" + +CeruleanCity_House1_Text_SeeMeIfYoudLikeToTradePowder:: + .string "Come see me if you'd like to trade\n" + .string "your BERRY POWDER.$" + diff --git a/data/maps/CeruleanCity_Mart/scripts.inc b/data/maps/CeruleanCity_Mart/scripts.inc new file mode 100644 index 000000000000..e7e1a6d8173a --- /dev/null +++ b/data/maps/CeruleanCity_Mart/scripts.inc @@ -0,0 +1,50 @@ +CeruleanCity_Mart_MapScripts:: + .byte 0 + +CeruleanCity_Mart_EventScript_Youngster:: + msgbox CeruleanCity_Mart_Text_RepelWorksOnWeakMons, MSGBOX_NPC + end + +CeruleanCity_Mart_EventScript_Woman:: + msgbox CeruleanCity_Mart_Text_DoYouKnowAboutRareCandy, MSGBOX_NPC + end + +CeruleanCity_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart CeruleanCity_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +CeruleanCity_Mart_Items:: + .2byte ITEM_POKE_BALL + .2byte ITEM_SUPER_POTION + .2byte ITEM_POTION + .2byte ITEM_ANTIDOTE + .2byte ITEM_PARALYZE_HEAL + .2byte ITEM_AWAKENING + .2byte ITEM_BURN_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_REPEL + .2byte ITEM_NONE + release + end + +CeruleanCity_Mart_Text_RepelWorksOnWeakMons:: + .string "REPEL not only keeps bugs away,\n" + .string "it also works on weak POKéMON.\p" + .string "Put your strongest POKéMON at the\n" + .string "left of the POKéMON LIST.\p" + .string "If your first POKéMON is strong,\n" + .string "REPEL's effect is boosted.$" + +CeruleanCity_Mart_Text_DoYouKnowAboutRareCandy:: + .string "Do you know about RARE CANDY?\n" + .string "They don't sell it in shops.\p" + .string "I think it makes POKéMON grow\n" + .string "very quickly all of a sudden.$" + diff --git a/data/maps/CeruleanCity_PokemonCenter_1F/scripts.inc b/data/maps/CeruleanCity_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..bae58e792be9 --- /dev/null +++ b/data/maps/CeruleanCity_PokemonCenter_1F/scripts.inc @@ -0,0 +1,63 @@ +CeruleanCity_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, CeruleanCity_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +CeruleanCity_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_CERULEAN_CITY + end + +CeruleanCity_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +CeruleanCity_PokemonCenter_1F_EventScript_Gentleman:: + msgbox CeruleanCity_PokemonCenter_1F_Text_EveryoneCallsBillPokemaniac, MSGBOX_NPC + end + +CeruleanCity_PokemonCenter_1F_EventScript_Rocker:: + msgbox CeruleanCity_PokemonCenter_1F_Text_BillDoesWhateverForRareMons, MSGBOX_NPC + end + +CeruleanCity_PokemonCenter_1F_EventScript_Youngster:: + lock + faceplayer + famechecker FAMECHECKER_BILL, 1 + msgbox CeruleanCity_PokemonCenter_1F_Text_BillCollectsRareMons + release + end + +CeruleanCity_PokemonCenter_1F_EventScript_Lass:: + msgbox CeruleanCity_PokemonCenter_1F_Text_TryTradingUpstairs, MSGBOX_NPC + end + +CeruleanCity_PokemonCenter_1F_Text_BillDoesWhateverForRareMons:: + .string "That BILL!\p" + .string "I heard that he'll do whatever it\n" + .string "takes to get rare POKéMON.\p" + .string "He's not above doing all sorts\n" + .string "of things, I've heard.$" + +CeruleanCity_PokemonCenter_1F_Text_EveryoneCallsBillPokemaniac:: + .string "Have you heard about BILL?\p" + .string "Everyone calls him a POKéMANIAC!\p" + .string "I think people are just jealous of\n" + .string "BILL, though.\p" + .string "Who wouldn't want to boast about\n" + .string "their POKéMON?$" + +CeruleanCity_PokemonCenter_1F_Text_BillCollectsRareMons:: + .string "BILL has lots of POKéMON!\n" + .string "He collects rare ones, too!$" + +CeruleanCity_PokemonCenter_1F_Text_TryTradingUpstairs:: + .string "Why don't you go upstairs and try\n" + .string "trading POKéMON with your friends?\p" + .string "You could get a lot more variety\n" + .string "by trading.\p" + .string "The POKéMON you get in trades grow\n" + .string "quickly, too.$" + diff --git a/data/maps/CeruleanCity_PokemonCenter_2F/scripts.inc b/data/maps/CeruleanCity_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..48f6412f78c2 --- /dev/null +++ b/data/maps/CeruleanCity_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +CeruleanCity_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +CeruleanCity_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +CeruleanCity_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +CeruleanCity_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/CinnabarIsland/scripts.inc b/data/maps/CinnabarIsland/scripts.inc new file mode 100644 index 000000000000..202e727cb7e5 --- /dev/null +++ b/data/maps/CinnabarIsland/scripts.inc @@ -0,0 +1,428 @@ +CinnabarIsland_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, CinnabarIsland_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, CinnabarIsland_OnFrame + .byte 0 + +CinnabarIsland_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_CINNABAR_ISLAND + call CinnabarIsland_EventScript_CheckUnlockGym + call_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND, 1, CinnabarIsland_EventScript_ReadyObjectsSailToOneIsland + call_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND, 3, CinnabarIsland_EventScript_ReadyObjectsReturnFromSeviiIslands + call_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND_2, 1, CinnabarIsland_EventScript_ReadyObjectsSailToOneIslandFromPokeCenter + end + +CinnabarIsland_EventScript_ReadyObjectsSailToOneIslandFromPokeCenter:: + savebgm MUS_FOLLOW_ME + setflag FLAG_TEMP_2 + setobjectxyperm LOCALID_CINNABAR_BILL, 15, 12 + setobjectmovementtype LOCALID_CINNABAR_BILL, MOVEMENT_TYPE_FACE_LEFT + setobjectxyperm LOCALID_CINNABAR_SEAGALLOP, 30, 12 + return + +CinnabarIsland_EventScript_ReadyObjectsSailToOneIsland:: + getplayerxy VAR_0x8004, VAR_0x8005 + goto_if_ge VAR_0x8004, 18, CinnabarIsland_EventScript_MoveSeagallopDown + setflag FLAG_TEMP_2 + setobjectxyperm LOCALID_CINNABAR_BILL, 18, 12 + setobjectmovementtype LOCALID_CINNABAR_BILL, MOVEMENT_TYPE_FACE_UP + setobjectxyperm LOCALID_CINNABAR_SEAGALLOP, 30, 12 + return + +CinnabarIsland_EventScript_MoveSeagallopDown:: + setobjectxyperm LOCALID_CINNABAR_SEAGALLOP, 30, 8 + return + +CinnabarIsland_EventScript_ReadyObjectsReturnFromSeviiIslands:: + setobjectxyperm LOCALID_CINNABAR_BILL, 21, 8 + setobjectmovementtype LOCALID_CINNABAR_BILL, MOVEMENT_TYPE_FACE_UP + return + +CinnabarIsland_EventScript_CheckUnlockGym:: + goto_if_set FLAG_HIDE_POKEMON_MANSION_B1F_SECRET_KEY, CinnabarIsland_EventScript_UnlockGym + return + +CinnabarIsland_EventScript_UnlockGym:: + setvar VAR_TEMP_1, 1 + return + +CinnabarIsland_OnFrame:: + map_script_2 VAR_MAP_SCENE_CINNABAR_ISLAND_2, 1, CinnabarIsland_EventScript_ExitPokeCenterForOneIsland + map_script_2 VAR_MAP_SCENE_CINNABAR_ISLAND, 1, CinnabarIsland_EventScript_BillScene + map_script_2 VAR_MAP_SCENE_CINNABAR_ISLAND, 3, CinnabarIsland_EventScript_ReturnFromSeviiIslands + .2byte 0 + +CinnabarIsland_EventScript_ExitPokeCenterForOneIsland:: + lockall + clearflag FLAG_DONT_TRANSITION_MUSIC + savebgm MUS_DUMMY + textcolor NPC_TEXT_COLOR_MALE + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_2, 2 + delay 20 + call CinnabarIsland_EventScript_SailToOneIsland + releaseall + end + +CinnabarIsland_EventScript_ReturnFromSeviiIslands:: + lockall + textcolor NPC_TEXT_COLOR_MALE + msgbox CinnabarIsland_Text_IfYouHaveTriPassYouCanGoAgain + closemessage + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillExit + waitmovement 0 + removeobject LOCALID_CINNABAR_BILL + setvar VAR_MAP_SCENE_CINNABAR_ISLAND, 4 + setflag FLAG_HIDE_TWO_ISLAND_GAME_CORNER_LOSTELLE + clearflag FLAG_HIDE_LOSTELLE_IN_HER_HOME + releaseall + end + +CinnabarIsland_Movement_BillExit:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +CinnabarIsland_EventScript_BillScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + call_if_unset FLAG_TEMP_2, CinnabarIsland_EventScript_BillFacePlayer1 + call_if_set FLAG_TEMP_2, CinnabarIsland_EventScript_BillFacePlayer2 + playse SE_PIN + applymovement LOCALID_CINNABAR_BILL, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_CINNABAR_BILL, Common_Movement_Delay48 + waitmovement 0 + call_if_unset FLAG_TEMP_2, CinnabarIsland_EventScript_BillApproachPlayer1 + call_if_set FLAG_TEMP_2, CinnabarIsland_EventScript_BillApproachPlayer2 + msgbox CinnabarIsland_Text_HeyIfItIsntPlayer + msgbox CinnabarIsland_Text_ComeWithMeToOneIsland, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CinnabarIsland_EventScript_AgreeSailToOneIsland + goto_if_eq VAR_RESULT, NO, CinnabarIsland_EventScript_DeclineSailToOneIsland + end + +CinnabarIsland_EventScript_BillFacePlayer1:: + applymovement LOCALID_CINNABAR_BILL, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +CinnabarIsland_EventScript_BillFacePlayer2:: + applymovement LOCALID_CINNABAR_BILL, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +CinnabarIsland_EventScript_BillApproachPlayer1:: + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillApproachPlayer1 + waitmovement 0 + return + +CinnabarIsland_EventScript_BillApproachPlayer2:: + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillApproachPlayer2 + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + return + +CinnabarIsland_EventScript_AgreeSailToOneIsland:: + msgbox CinnabarIsland_Text_AllRightLetsGo + closemessage + call CinnabarIsland_EventScript_SailToOneIsland + releaseall + end + +CinnabarIsland_EventScript_DeclineSailToOneIsland:: + msgbox CinnabarIsland_Text_IllBeWaitingInPokeCenter + closemessage + call_if_unset FLAG_TEMP_2, CinnabarIsland_EventScript_BillExitToPokeCenter + call_if_set FLAG_TEMP_2, CinnabarIsland_EventScript_BillReturnToPokeCenter + removeobject LOCALID_CINNABAR_BILL + setvar VAR_MAP_SCENE_CINNABAR_ISLAND, 2 + clearflag FLAG_HIDE_CINNABAR_POKECENTER_BILL + releaseall + end + +CinnabarIsland_EventScript_BillExitToPokeCenter:: + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillExitToPokeCenter + waitmovement 0 + return + +CinnabarIsland_Movement_BillExitToPokeCenter:: + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +CinnabarIsland_EventScript_BillReturnToPokeCenter:: + applymovement LOCALID_PLAYER, CinnabarIsland_Movement_PlayerWatchBillExit + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillApproachDoor + waitmovement 0 + opendoor 14, 11 + waitdooranim + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillReEnterPokeCenter + waitmovement 0 + closedoor 14, 11 + waitdooranim + return + +CinnabarIsland_Movement_PlayerWatchBillExit:: + walk_left + walk_in_place_faster_right + step_end + +CinnabarIsland_Movement_BillApproachDoor:: + delay_16 + walk_left + walk_in_place_faster_up + step_end + +CinnabarIsland_Movement_BillReEnterPokeCenter:: + walk_up + delay_4 + set_invisible + step_end + +@ Can be triggered outside, or after talking to Bill in the poke center +CinnabarIsland_EventScript_SailToOneIsland:: + call_if_set FLAG_TEMP_2, CinnabarIsland_EventScript_ApproachShore + addobject LOCALID_CINNABAR_SEAGALLOP + call_if_unset FLAG_TEMP_2, CinnabarIsland_EventScript_BoatArrive + call_if_set FLAG_TEMP_2, CinnabarIsland_EventScript_BoatArriveExitedPokeCenter + msgbox CinnabarIsland_Text_MyPalsBoatArrived + closemessage + call_if_unset FLAG_TEMP_2, CinnabarIsland_EventScript_BoardBoat + call_if_set FLAG_TEMP_2, CinnabarIsland_EventScript_BoardBoatExitedPokeCenter + setvar VAR_MAP_SCENE_CINNABAR_ISLAND, 2 + removeobject LOCALID_CINNABAR_BILL + delay 40 + setflag FLAG_HIDE_CINNABAR_SEAGALLOP + setvar VAR_MAP_SCENE_ONE_ISLAND_HARBOR, 1 + setvar VAR_0x8004, SEAGALLOP_CINNABAR_ISLAND + setvar VAR_0x8006, SEAGALLOP_ONE_ISLAND + goto EventScript_SetSail + end + +CinnabarIsland_EventScript_ApproachShore:: + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_ApproachShore + applymovement LOCALID_PLAYER, CinnabarIsland_Movement_ApproachShore + waitmovement 0 + return + +CinnabarIsland_EventScript_BoatArrive:: + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillFaceBoat + applymovement LOCALID_CINNABAR_SEAGALLOP, CinnabarIsland_Movement_BoatArrive + waitmovement 0 + return + +CinnabarIsland_EventScript_BoatArriveExitedPokeCenter:: + applymovement LOCALID_CINNABAR_SEAGALLOP, CinnabarIsland_Movement_BoatArrive + waitmovement 0 + return + +CinnabarIsland_EventScript_BoardBoat:: + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillBoardBoat + applymovement LOCALID_PLAYER, CinnabarIsland_Movement_PlayerBoardBoat + waitmovement 0 + return + +CinnabarIsland_EventScript_BoardBoatExitedPokeCenter:: + applymovement LOCALID_CINNABAR_BILL, CinnabarIsland_Movement_BillBoardBoatFromShore + applymovement LOCALID_PLAYER, CinnabarIsland_Movement_PlayerBoardBoatFromShore + waitmovement 0 + return + +CinnabarIsland_Movement_BoatArrive:: + delay_16 + delay_16 + walk_fast_left + walk_fast_left + walk_left + walk_slow_left + walk_slow_left + step_end + +CinnabarIsland_Movement_BillBoardBoat:: + walk_right + walk_down + walk_down + walk_right + delay_4 + set_invisible + step_end + +CinnabarIsland_Movement_BillApproachPlayer1:: + walk_up + step_end + +CinnabarIsland_Movement_BillApproachPlayer2:: + walk_left + walk_left + walk_left + step_end + +CinnabarIsland_Movement_BillFaceBoat:: + delay_16 + delay_16 + delay_8 + walk_in_place_faster_right + step_end + +CinnabarIsland_Movement_ApproachShore:: + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + step_end + +CinnabarIsland_Movement_BillBoardBoatFromShore:: + walk_right + delay_4 + set_invisible + step_end + +CinnabarIsland_Movement_PlayerBoardBoat:: + walk_down + walk_right + walk_down + walk_down + walk_in_place_faster_right + delay_4 + walk_right + delay_4 + set_invisible + step_end + +CinnabarIsland_Movement_PlayerBoardBoatFromShore:: + walk_right + delay_4 + walk_right + delay_4 + set_invisible + step_end + +@ Triggered when VAR_TEMP_1 is 0 +CinnabarIsland_EventScript_GymDoorLocked:: + lockall + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + delay 20 + msgbox CinnabarIsland_Text_DoorIsLocked + closemessage + applymovement LOCALID_PLAYER, CinnabarIsland_Movement_ForcePlayerFromDoor + waitmovement 0 + releaseall + end + +CinnabarIsland_Movement_ForcePlayerFromDoor:: + walk_down + step_end + +CinnabarIsland_EventScript_Woman:: + lock + faceplayer + famechecker FAMECHECKER_BLAINE, 3 + msgbox CinnabarIsland_Text_BlaineLivedHereSinceBeforeLab + release + end + +CinnabarIsland_EventScript_OldMan:: + msgbox CinnabarIsland_Text_ScientistsExperimentInMansion, MSGBOX_NPC + end + +CinnabarIsland_EventScript_IslandSign:: + msgbox CinnabarIsland_Text_IslandSign, MSGBOX_SIGN + end + +CinnabarIsland_EventScript_PokemonLabSign:: + msgbox CinnabarIsland_Text_PokemonLab, MSGBOX_SIGN + end + +CinnabarIsland_EventScript_GymSign:: + lockall + famechecker FAMECHECKER_BLAINE, 0 + msgbox CinnabarIsland_Text_GymSign + releaseall + end + +CinnabarIsland_Text_DoorIsLocked:: + .string "The door is locked…$" + +CinnabarIsland_Text_BlaineLivedHereSinceBeforeLab:: + .string "CINNABAR GYM's BLAINE is quite the\n" + .string "odd fellow.\p" + .string "He's lived on the island since way\n" + .string "before the LAB was built.$" + +CinnabarIsland_Text_ScientistsExperimentInMansion:: + .string "Scientists conduct experiments \n" + .string "in the burned-out building.\p" + .string "You know, the one they call the\n" + .string "POKéMON MANSION.$" + +CinnabarIsland_Text_IslandSign:: + .string "CINNABAR ISLAND\n" + .string "The Fiery Town of Burning Desire$" + +CinnabarIsland_Text_PokemonLab:: + .string "POKéMON LAB$" + +CinnabarIsland_Text_GymSign:: + .string "CINNABAR ISLAND POKéMON GYM\n" + .string "LEADER: BLAINE\l" + .string "The Hotheaded Quiz Master!$" + +CinnabarIsland_Text_HeyIfItIsntPlayer:: + .string "Huh?\n" + .string "Hey, if it isn't {PLAYER}!$" + +CinnabarIsland_Text_ComeWithMeToOneIsland:: + .string "Look, it's me, BILL.\n" + .string "Long time no see!\p" + .string "I hope you're still using my\n" + .string "PC system.\p" + .string "Well, listen, since we met up here,\n" + .string "how about spending time with me?\p" + .string "There's this little island in the far\n" + .string "south called ONE ISLAND.\p" + .string "A friend invited me, so I'm on my\n" + .string "way out there.\p" + .string "How about it?\n" + .string "Do you feel like coming with me?$" + +CinnabarIsland_Text_AllRightLetsGo:: + .string "All right, then.\n" + .string "Let's go!$" + +CinnabarIsland_Text_IllBeWaitingInPokeCenter:: + .string "What, are you too busy?\p" + .string "Well, all right.\n" + .string "The boat hasn't arrived yet anyway.\p" + .string "I'll be waiting at the POKéMON\n" + .string "CENTER over there.\p" + .string "Come see me when you're done with\n" + .string "your business here.$" + +CinnabarIsland_Text_MyPalsBoatArrived:: + .string "Looks like my pal's boat arrived,\n" + .string "too.\p" + .string "He sent it specially here to\n" + .string "CINNABAR to pick me up.$" + +CinnabarIsland_Text_IfYouHaveTriPassYouCanGoAgain:: + .string "Hey, wasn't that a long cruise?\p" + .string "My buddy CELIO seemed to enjoy\n" + .string "your company.\p" + .string "I'm sure he'd welcome you if you\n" + .string "were to visit him again.\p" + .string "If you have a TRI-PASS, you can\n" + .string "always take a ferry there from\l" + .string "VERMILION PORT.\p" + .string "All right, thanks for your company!$" + diff --git a/data/maps/CinnabarIsland_Gym/scripts.inc b/data/maps/CinnabarIsland_Gym/scripts.inc new file mode 100644 index 000000000000..61ba4e982fcd --- /dev/null +++ b/data/maps/CinnabarIsland_Gym/scripts.inc @@ -0,0 +1,901 @@ +CinnabarIsland_Gym_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, CinnabarIsland_Gym_OnLoad + .byte 0 + +CinnabarIsland_Gym_OnLoad:: + goto_if_set FLAG_DEFEATED_BLAINE, CinnabarIsland_Gym_OnLoadOpenAllDoors + call_if_set FLAG_CINNABAR_GYM_QUIZ_1, CinnabarIsland_Gym_OnLoadOpenDoor1 + call_if_set FLAG_CINNABAR_GYM_QUIZ_2, CinnabarIsland_Gym_OnLoadOpenDoor2 + call_if_set FLAG_CINNABAR_GYM_QUIZ_3, CinnabarIsland_Gym_OnLoadOpenDoor3 + call_if_set FLAG_CINNABAR_GYM_QUIZ_4, CinnabarIsland_Gym_OnLoadOpenDoor4 + call_if_set FLAG_CINNABAR_GYM_QUIZ_5, CinnabarIsland_Gym_OnLoadOpenDoor5 + call_if_set FLAG_CINNABAR_GYM_QUIZ_6, CinnabarIsland_Gym_OnLoadOpenDoor6 + end + +CinnabarIsland_Gym_OnLoadOpenAllDoors:: + call CinnabarIsland_Gym_EventScript_OpenDoor1 + call CinnabarIsland_Gym_EventScript_OpenDoor2 + call CinnabarIsland_Gym_EventScript_OpenDoor3 + call CinnabarIsland_Gym_EventScript_OpenDoor4 + call CinnabarIsland_Gym_EventScript_OpenDoor5 + call CinnabarIsland_Gym_EventScript_OpenDoor6 + end + +CinnabarIsland_Gym_OnLoadOpenDoor1:: + call CinnabarIsland_Gym_EventScript_OpenDoor1 + return + +CinnabarIsland_Gym_OnLoadOpenDoor2:: + call CinnabarIsland_Gym_EventScript_OpenDoor2 + return + +CinnabarIsland_Gym_OnLoadOpenDoor3:: + call CinnabarIsland_Gym_EventScript_OpenDoor3 + return + +CinnabarIsland_Gym_OnLoadOpenDoor4:: + call CinnabarIsland_Gym_EventScript_OpenDoor4 + return + +CinnabarIsland_Gym_OnLoadOpenDoor5:: + call CinnabarIsland_Gym_EventScript_OpenDoor5 + return + +CinnabarIsland_Gym_OnLoadOpenDoor6:: + call CinnabarIsland_Gym_EventScript_OpenDoor6 + return + +CinnabarIsland_Gym_EventScript_Blaine:: + famechecker FAMECHECKER_BLAINE, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + trainerbattle_single TRAINER_LEADER_BLAINE, CinnabarIsland_Gym_Text_BlaineIntro, CinnabarIsland_Gym_Text_BlaineDefeat, CinnabarIsland_Gym_EventScript_DefeatedBlaine, NO_MUSIC + goto_if_unset FLAG_GOT_TM38_FROM_BLAINE, CinnabarIsland_Gym_EventScript_GiveTM38 + msgbox CinnabarIsland_Gym_Text_BlainePostBattle + release + end + +CinnabarIsland_Gym_EventScript_DefeatedBlaine:: + famechecker FAMECHECKER_BLAINE, 1 + setflag FLAG_DEFEATED_BLAINE + setflag FLAG_BADGE07_GET + setrespawn HEAL_LOCATION_CINNABAR_ISLAND + setvar VAR_MAP_SCENE_CINNABAR_ISLAND, 1 + clearflag FLAG_HIDE_CINNABAR_BILL + set_gym_trainers_frlg 7 + goto CinnabarIsland_Gym_EventScript_GiveTM38 + end + +CinnabarIsland_Gym_EventScript_GiveTM38:: + msgbox CinnabarIsland_Gym_Text_ExplainVolcanoBadge + checkitemspace ITEM_TM38 + goto_if_eq VAR_RESULT, FALSE, CinnabarIsland_Gym_EventScript_NoRoomForTM38 + giveitem_msg CinnabarIsland_Gym_Text_ReceivedTM38FromBlaine, ITEM_TM38 + setflag FLAG_GOT_TM38_FROM_BLAINE + msgbox CinnabarIsland_Gym_Text_FireBlastIsUltimateFireMove + release + end + +CinnabarIsland_Gym_EventScript_NoRoomForTM38:: + msgbox CinnabarIsland_Gym_Text_MakeSpaceForThis + release + end + +CinnabarIsland_Gym_EventScript_Erik:: + trainerbattle_single TRAINER_SUPER_NERD_ERIK, CinnabarIsland_Gym_Text_ErikIntro, CinnabarIsland_Gym_Text_ErikDefeat + msgbox CinnabarIsland_Gym_Text_ErikPostBattle, MSGBOX_AUTOCLOSE + end + +CinnabarIsland_Gym_EventScript_Avery:: + trainerbattle_single TRAINER_SUPER_NERD_AVERY, CinnabarIsland_Gym_Text_AveryIntro, CinnabarIsland_Gym_Text_AveryDefeat, CinnabarIsland_Gym_EventScript_DefeatedAvery + msgbox CinnabarIsland_Gym_Text_AveryPostBattle, MSGBOX_AUTOCLOSE + end + +CinnabarIsland_Gym_EventScript_DefeatedAvery:: + call_if_unset FLAG_CINNABAR_GYM_QUIZ_2, CinnabarIsland_Gym_EventScript_Quiz2CompleteTrainer + release + end + +CinnabarIsland_Gym_EventScript_Quiz2CompleteTrainer:: + call CinnabarIsland_Gym_EventScript_Quiz2Complete + return + +CinnabarIsland_Gym_EventScript_Derek:: + trainerbattle_single TRAINER_SUPER_NERD_DEREK, CinnabarIsland_Gym_Text_DerekIntro, CinnabarIsland_Gym_Text_DerekDefeat, CinnabarIsland_Gym_EventScript_DefeatedDerek + famechecker FAMECHECKER_BLAINE, 2 + msgbox CinnabarIsland_Gym_Text_DerekPostBattle, MSGBOX_AUTOCLOSE + end + +CinnabarIsland_Gym_EventScript_DefeatedDerek:: + call_if_unset FLAG_CINNABAR_GYM_QUIZ_4, CinnabarIsland_Gym_EventScript_Quiz4CompleteTrainer + release + end + +CinnabarIsland_Gym_EventScript_Quiz4CompleteTrainer:: + call CinnabarIsland_Gym_EventScript_Quiz4Complete + return + +CinnabarIsland_Gym_EventScript_Zac:: + trainerbattle_single TRAINER_SUPER_NERD_ZAC, CinnabarIsland_Gym_Text_ZacIntro, CinnabarIsland_Gym_Text_ZacDefeat, CinnabarIsland_Gym_EventScript_DefeatedZac + msgbox CinnabarIsland_Gym_Text_ZacPostBattle, MSGBOX_AUTOCLOSE + end + +CinnabarIsland_Gym_EventScript_DefeatedZac:: + call_if_unset FLAG_CINNABAR_GYM_QUIZ_6, CinnabarIsland_Gym_EventScript_Quiz6CompleteTrainer + release + end + +CinnabarIsland_Gym_EventScript_Quiz6CompleteTrainer:: + call CinnabarIsland_Gym_EventScript_Quiz6Complete + return + +CinnabarIsland_Gym_EventScript_Quinn:: + trainerbattle_single TRAINER_BURGLAR_QUINN, CinnabarIsland_Gym_Text_QuinnIntro, CinnabarIsland_Gym_Text_QuinnDefeat, CinnabarIsland_Gym_EventScript_DefeatedQuinn + msgbox CinnabarIsland_Gym_Text_QuinnPostBattle, MSGBOX_AUTOCLOSE + end + +CinnabarIsland_Gym_EventScript_DefeatedQuinn:: + call_if_unset FLAG_CINNABAR_GYM_QUIZ_1, CinnabarIsland_Gym_EventScript_Quiz1CompleteTrainer + release + end + +CinnabarIsland_Gym_EventScript_Quiz1CompleteTrainer:: + call CinnabarIsland_Gym_EventScript_Quiz1Complete + return + +CinnabarIsland_Gym_EventScript_Ramon:: + trainerbattle_single TRAINER_BURGLAR_RAMON, CinnabarIsland_Gym_Text_RamonIntro, CinnabarIsland_Gym_Text_RamonDefeat, CinnabarIsland_Gym_EventScript_DefeatedRamon + msgbox CinnabarIsland_Gym_Text_RamonPostBattle, MSGBOX_AUTOCLOSE + end + +CinnabarIsland_Gym_EventScript_DefeatedRamon:: + call_if_unset FLAG_CINNABAR_GYM_QUIZ_3, CinnabarIsland_Gym_EventScript_Quiz3CompleteTrainer + release + end + +CinnabarIsland_Gym_EventScript_Quiz3CompleteTrainer:: + call CinnabarIsland_Gym_EventScript_Quiz3Complete + return + +CinnabarIsland_Gym_EventScript_Dusty:: + trainerbattle_single TRAINER_BURGLAR_DUSTY, CinnabarIsland_Gym_Text_DustyIntro, CinnabarIsland_Gym_Text_DustyDefeat, CinnabarIsland_Gym_EventScript_DefeatedDusty + msgbox CinnabarIsland_Gym_Text_DustyPostBattle, MSGBOX_AUTOCLOSE + end + +CinnabarIsland_Gym_EventScript_DefeatedDusty:: + call_if_unset FLAG_CINNABAR_GYM_QUIZ_5, CinnabarIsland_Gym_EventScript_Quiz5CompleteTrainer + release + end + +CinnabarIsland_Gym_EventScript_Quiz5CompleteTrainer:: + call CinnabarIsland_Gym_EventScript_Quiz5Complete + return + +CinnabarIsland_Gym_EventScript_GymGuy:: + lock + faceplayer + goto_if_set FLAG_DEFEATED_BLAINE, CinnabarIsland_Gym_EventScript_GymGuyPostVictory + msgbox CinnabarIsland_Gym_Text_GymGuyAdvice + release + end + +CinnabarIsland_Gym_EventScript_GymGuyPostVictory:: + msgbox CinnabarIsland_Gym_Text_GymGuyPostVictory + release + end + +CinnabarIsland_Gym_EventScript_GymStatue:: + lockall + goto_if_set FLAG_BADGE07_GET, CinnabarIsland_Gym_EventScript_GymStatuePostVictory + msgbox CinnabarIsland_Gym_Text_GymStatue + releaseall + end + +CinnabarIsland_Gym_EventScript_GymStatuePostVictory:: + msgbox CinnabarIsland_Gym_Text_GymStatuePlayerWon + releaseall + end + +CinnabarIsland_Gym_EventScript_Quz1Left:: + lockall + setvar VAR_TEMP_1, 0 + goto CinnabarIsland_Gym_EventScript_Quiz1 + end + +CinnabarIsland_Gym_EventScript_Quz1Right:: + lockall + setvar VAR_TEMP_1, 1 + goto CinnabarIsland_Gym_EventScript_Quiz1 + end + +CinnabarIsland_Gym_EventScript_Quiz1:: + msgbox CinnabarIsland_Gym_Text_PokemonQuizRules + msgbox CinnabarIsland_Gym_Text_QuizQuestion1, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CinnabarIsland_Gym_EventScript_Quiz1Correct + goto_if_eq VAR_RESULT, NO, CinnabarIsland_Gym_EventScript_Quiz1Incorrect + end + +CinnabarIsland_Gym_EventScript_CorrectAnswer:: + playfanfare MUS_LEVEL_UP + waitfanfare + msgbox CinnabarIsland_Gym_Text_CorrectGoOnThrough + return + +CinnabarIsland_Gym_EventScript_IncorrectAnswer:: + waitse + playse SE_BOO + waitse + msgbox CinnabarIsland_Gym_Text_SorryBadCall + closemessage + return + +CinnabarIsland_Gym_EventScript_Quiz1Correct:: + call CinnabarIsland_Gym_EventScript_CorrectAnswer + goto_if_set FLAG_CINNABAR_GYM_QUIZ_1, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz1Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_Quiz1Complete:: + playse SE_UNLOCK + waitse + call CinnabarIsland_Gym_EventScript_OpenDoor1 + special DrawWholeMapView + setflag FLAG_CINNABAR_GYM_QUIZ_1 + return + +CinnabarIsland_Gym_EventScript_DoorAlreadyOpen:: + releaseall + end + +CinnabarIsland_Gym_EventScript_Quiz1Incorrect:: + call CinnabarIsland_Gym_EventScript_IncorrectAnswer + goto_if_not_defeated TRAINER_BURGLAR_QUINN, CinnabarIsland_Gym_EventScript_BattleQuinn + releaseall + end + +CinnabarIsland_Gym_EventScript_BattleQuinn:: + call_if_eq VAR_TEMP_1, 0, CinnabarIsland_Gym_EventScript_QuinnApproachLeft + call_if_eq VAR_TEMP_1, 1, CinnabarIsland_Gym_EventScript_QuinnApproachRight + textcolor NPC_TEXT_COLOR_MALE + msgbox CinnabarIsland_Gym_Text_QuinnIntro + trainerbattle_no_intro TRAINER_BURGLAR_QUINN, CinnabarIsland_Gym_Text_QuinnDefeat + goto_if_set FLAG_CINNABAR_GYM_QUIZ_1, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz1Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_QuinnApproachLeft:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_QUINN, CinnabarIsland_Gym_Movement_QuinnApproachLeft + waitmovement 0 + return + +CinnabarIsland_Gym_EventScript_QuinnApproachRight:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_QUINN, CinnabarIsland_Gym_Movement_QuinnApproachRight + waitmovement 0 + return + +CinnabarIsland_Gym_Movement_QuinnApproachLeft:: + walk_left + walk_left + step_end + +CinnabarIsland_Gym_Movement_QuinnApproachRight:: + walk_left + step_end + +CinnabarIsland_Gym_EventScript_Quiz2Left:: + lockall + setvar VAR_TEMP_1, 0 + goto CinnabarIsland_Gym_EventScript_Quiz2 + end + +CinnabarIsland_Gym_EventScript_Quiz2Right:: + lockall + setvar VAR_TEMP_1, 1 + goto CinnabarIsland_Gym_EventScript_Quiz2 + end + +CinnabarIsland_Gym_EventScript_Quiz2:: + msgbox CinnabarIsland_Gym_Text_PokemonQuizRules + msgbox CinnabarIsland_Gym_Text_QuizQuestion2, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CinnabarIsland_Gym_EventScript_Quiz2Incorrect + goto_if_eq VAR_RESULT, NO, CinnabarIsland_Gym_EventScript_Quiz2Correct + end + +CinnabarIsland_Gym_EventScript_Quiz2Correct:: + call CinnabarIsland_Gym_EventScript_CorrectAnswer + goto_if_set FLAG_CINNABAR_GYM_QUIZ_2, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz2Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_Quiz2Complete:: + playse SE_UNLOCK + waitse + call CinnabarIsland_Gym_EventScript_OpenDoor2 + special DrawWholeMapView + setflag FLAG_CINNABAR_GYM_QUIZ_2 + return + +CinnabarIsland_Gym_EventScript_Quiz2Incorrect:: + call CinnabarIsland_Gym_EventScript_IncorrectAnswer + goto_if_not_defeated TRAINER_SUPER_NERD_AVERY, CinnabarIsland_Gym_EventScript_BattleAvery + releaseall + end + +CinnabarIsland_Gym_EventScript_BattleAvery:: + call_if_eq VAR_TEMP_1, 0, CinnabarIsland_Gym_EventScript_AveryApproachLeft + call_if_eq VAR_TEMP_1, 1, CinnabarIsland_Gym_EventScript_AveryApproachRight + textcolor NPC_TEXT_COLOR_MALE + msgbox CinnabarIsland_Gym_Text_AveryIntro + trainerbattle_no_intro TRAINER_SUPER_NERD_AVERY, CinnabarIsland_Gym_Text_AveryDefeat + goto_if_set FLAG_CINNABAR_GYM_QUIZ_2, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz2Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_AveryApproachLeft:: + applymovement LOCALID_PLAYER, CinnabarIsland_Gym_Movement_PlayerFaceAvery + applymovement LOCALID_AVERY, CinnabarIsland_Gym_Movement_AveryApproachLeft + waitmovement 0 + return + +CinnabarIsland_Gym_EventScript_AveryApproachRight:: + applymovement LOCALID_PLAYER, CinnabarIsland_Gym_Movement_PlayerFaceAvery + applymovement LOCALID_AVERY, CinnabarIsland_Gym_Movement_AveryApproachRight + waitmovement 0 + return + +CinnabarIsland_Gym_Movement_AveryApproachLeft:: + walk_up + walk_up + walk_left + step_end + +CinnabarIsland_Gym_Movement_AveryApproachRight:: + walk_up + walk_up + walk_in_place_faster_left + step_end + +CinnabarIsland_Gym_Movement_PlayerFaceAvery:: + delay_16 + delay_16 + walk_in_place_faster_right + step_end + +CinnabarIsland_Gym_EventScript_Quiz3Left:: + lockall + setvar VAR_TEMP_1, 0 + goto CinnabarIsland_Gym_EventScript_Quiz3 + end + +CinnabarIsland_Gym_EventScript_Quiz3Right:: + lockall + setvar VAR_TEMP_1, 1 + goto CinnabarIsland_Gym_EventScript_Quiz3 + end + +CinnabarIsland_Gym_EventScript_Quiz3:: + msgbox CinnabarIsland_Gym_Text_PokemonQuizRules + msgbox CinnabarIsland_Gym_Text_QuizQuestion3, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CinnabarIsland_Gym_EventScript_Quiz3Incorrect + goto_if_eq VAR_RESULT, NO, CinnabarIsland_Gym_EventScript_Quiz3Correct + end + +CinnabarIsland_Gym_EventScript_Quiz3Correct:: + call CinnabarIsland_Gym_EventScript_CorrectAnswer + goto_if_set FLAG_CINNABAR_GYM_QUIZ_3, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz3Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_Quiz3Complete:: + playse SE_UNLOCK + waitse + call CinnabarIsland_Gym_EventScript_OpenDoor3 + special DrawWholeMapView + setflag FLAG_CINNABAR_GYM_QUIZ_3 + return + +CinnabarIsland_Gym_EventScript_Quiz3Incorrect:: + call CinnabarIsland_Gym_EventScript_IncorrectAnswer + goto_if_not_defeated TRAINER_BURGLAR_RAMON, CinnabarIsland_Gym_EventScript_BattleRamon + releaseall + end + +CinnabarIsland_Gym_EventScript_BattleRamon:: + call_if_eq VAR_TEMP_1, 0, CinnabarIsland_Gym_EventScript_RamonApproachLeft + call_if_eq VAR_TEMP_1, 1, CinnabarIsland_Gym_EventScript_RamonApproachRight + textcolor NPC_TEXT_COLOR_MALE + msgbox CinnabarIsland_Gym_Text_RamonIntro + trainerbattle_no_intro TRAINER_BURGLAR_RAMON, CinnabarIsland_Gym_Text_RamonDefeat + goto_if_set FLAG_CINNABAR_GYM_QUIZ_3, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz3Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_RamonApproachLeft:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_RAMON, CinnabarIsland_Gym_Movement_RamonApproachLeft + waitmovement 0 + return + +CinnabarIsland_Gym_EventScript_RamonApproachRight:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_RAMON, CinnabarIsland_Gym_Movement_RamonApproachRight + waitmovement 0 + return + +CinnabarIsland_Gym_Movement_RamonApproachLeft:: + walk_left + walk_left + step_end + +CinnabarIsland_Gym_Movement_RamonApproachRight:: + walk_left + step_end + +CinnabarIsland_Gym_EventScript_Quiz4Left:: + lockall + setvar VAR_TEMP_1, 0 + goto CinnabarIsland_Gym_EventScript_Quiz4 + end + +CinnabarIsland_Gym_EventScript_Quiz4Right:: + lockall + setvar VAR_TEMP_1, 1 + goto CinnabarIsland_Gym_EventScript_Quiz4 + end + +CinnabarIsland_Gym_EventScript_Quiz4:: + msgbox CinnabarIsland_Gym_Text_PokemonQuizRules + msgbox CinnabarIsland_Gym_Text_QuizQuestion4, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CinnabarIsland_Gym_EventScript_Quiz4Incorrect + goto_if_eq VAR_RESULT, NO, CinnabarIsland_Gym_EventScript_Quiz4Correct + end + +CinnabarIsland_Gym_EventScript_Quiz4Correct:: + call CinnabarIsland_Gym_EventScript_CorrectAnswer + goto_if_set FLAG_CINNABAR_GYM_QUIZ_4, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz4Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_Quiz4Complete:: + playse SE_UNLOCK + waitse + call CinnabarIsland_Gym_EventScript_OpenDoor4 + special DrawWholeMapView + setflag FLAG_CINNABAR_GYM_QUIZ_4 + return + +CinnabarIsland_Gym_EventScript_Quiz4Incorrect:: + call CinnabarIsland_Gym_EventScript_IncorrectAnswer + goto_if_not_defeated TRAINER_SUPER_NERD_DEREK, CinnabarIsland_Gym_EventScript_BattleDerek + releaseall + end + +CinnabarIsland_Gym_EventScript_BattleDerek:: + call_if_eq VAR_TEMP_1, 0, CinnabarIsland_Gym_EventScript_DerekApproachLeft + call_if_eq VAR_TEMP_1, 1, CinnabarIsland_Gym_EventScript_DerekApproachRight + textcolor NPC_TEXT_COLOR_MALE + msgbox CinnabarIsland_Gym_Text_DerekIntro + trainerbattle_no_intro TRAINER_SUPER_NERD_DEREK, CinnabarIsland_Gym_Text_DerekDefeat + goto_if_set FLAG_CINNABAR_GYM_QUIZ_4, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz4Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_DerekApproachLeft:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_DEREK, CinnabarIsland_Gym_Movement_DerekApproachLeft + waitmovement 0 + return + +CinnabarIsland_Gym_EventScript_DerekApproachRight:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_DEREK, CinnabarIsland_Gym_Movement_DerekApproachRight + waitmovement 0 + return + +CinnabarIsland_Gym_Movement_DerekApproachLeft:: + walk_left + walk_left + step_end + +CinnabarIsland_Gym_Movement_DerekApproachRight:: + walk_left + step_end + +CinnabarIsland_Gym_EventScript_Quiz5Left:: + lockall + setvar VAR_TEMP_1, 0 + goto CinnabarIsland_Gym_EventScript_Quiz5 + end + +CinnabarIsland_Gym_EventScript_Quiz5Right:: + lockall + setvar VAR_TEMP_1, 1 + goto CinnabarIsland_Gym_EventScript_Quiz5 + end + +CinnabarIsland_Gym_EventScript_Quiz5:: + msgbox CinnabarIsland_Gym_Text_PokemonQuizRules + msgbox CinnabarIsland_Gym_Text_QuizQuestion5, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CinnabarIsland_Gym_EventScript_Quiz5Correct + goto_if_eq VAR_RESULT, NO, CinnabarIsland_Gym_EventScript_Quiz5Incorrect + end + +CinnabarIsland_Gym_EventScript_Quiz5Correct:: + call CinnabarIsland_Gym_EventScript_CorrectAnswer + goto_if_set FLAG_CINNABAR_GYM_QUIZ_5, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz5Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_Quiz5Complete:: + playse SE_UNLOCK + waitse + call CinnabarIsland_Gym_EventScript_OpenDoor5 + special DrawWholeMapView + setflag FLAG_CINNABAR_GYM_QUIZ_5 + return + +CinnabarIsland_Gym_EventScript_Quiz5Incorrect:: + call CinnabarIsland_Gym_EventScript_IncorrectAnswer + goto_if_not_defeated TRAINER_BURGLAR_DUSTY, CinnabarIsland_Gym_EventScript_BattleDusty + releaseall + end + +CinnabarIsland_Gym_EventScript_BattleDusty:: + call_if_eq VAR_TEMP_1, 0, CinnabarIsland_Gym_EventScript_DustyApproachLeft + call_if_eq VAR_TEMP_1, 1, CinnabarIsland_Gym_EventScript_DustyApproachRight + textcolor NPC_TEXT_COLOR_MALE + msgbox CinnabarIsland_Gym_Text_DustyIntro + trainerbattle_no_intro TRAINER_BURGLAR_DUSTY, CinnabarIsland_Gym_Text_DustyDefeat + goto_if_set FLAG_CINNABAR_GYM_QUIZ_5, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz5Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_DustyApproachLeft:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_DUSTY, CinnabarIsland_Gym_Movement_DustyApproachLeft + waitmovement 0 + return + +CinnabarIsland_Gym_EventScript_DustyApproachRight:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_DUSTY, CinnabarIsland_Gym_Movement_DustyApproachRight + waitmovement 0 + return + +CinnabarIsland_Gym_Movement_DustyApproachLeft:: + walk_left + walk_left + step_end + +CinnabarIsland_Gym_Movement_DustyApproachRight:: + walk_left + step_end + +CinnabarIsland_Gym_EventScript_Quiz6Left:: + lockall + setvar VAR_TEMP_1, 0 + goto CinnabarIsland_Gym_EventScript_Quiz6 + end + +CinnabarIsland_Gym_EventScript_Quiz6Right:: + lockall + setvar VAR_TEMP_1, 1 + goto CinnabarIsland_Gym_EventScript_Quiz6 + end + +CinnabarIsland_Gym_EventScript_Quiz6:: + msgbox CinnabarIsland_Gym_Text_PokemonQuizRules + msgbox CinnabarIsland_Gym_Text_QuizQuestion6, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, CinnabarIsland_Gym_EventScript_Quiz6Incorrect + goto_if_eq VAR_RESULT, NO, CinnabarIsland_Gym_EventScript_Quiz6Correct + end + +CinnabarIsland_Gym_EventScript_Quiz6Correct:: + call CinnabarIsland_Gym_EventScript_CorrectAnswer + goto_if_set FLAG_CINNABAR_GYM_QUIZ_6, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz6Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_Quiz6Complete:: + playse SE_UNLOCK + waitse + call CinnabarIsland_Gym_EventScript_OpenDoor6 + special DrawWholeMapView + setflag FLAG_CINNABAR_GYM_QUIZ_6 + return + +CinnabarIsland_Gym_EventScript_Quiz6Incorrect:: + call CinnabarIsland_Gym_EventScript_IncorrectAnswer + goto_if_not_defeated TRAINER_SUPER_NERD_ZAC, CinnabarIsland_Gym_EventScript_BattleZac + releaseall + end + +CinnabarIsland_Gym_EventScript_BattleZac:: + call_if_eq VAR_TEMP_1, 0, CinnabarIsland_Gym_EventScript_ZacApproachLeft + call_if_eq VAR_TEMP_1, 1, CinnabarIsland_Gym_EventScript_ZacApproachRight + textcolor NPC_TEXT_COLOR_MALE + msgbox CinnabarIsland_Gym_Text_ZacIntro + trainerbattle_no_intro TRAINER_SUPER_NERD_ZAC, CinnabarIsland_Gym_Text_ZacDefeat + goto_if_set FLAG_CINNABAR_GYM_QUIZ_6, CinnabarIsland_Gym_EventScript_DoorAlreadyOpen + call CinnabarIsland_Gym_EventScript_Quiz6Complete + releaseall + end + +CinnabarIsland_Gym_EventScript_ZacApproachLeft:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_ZAC, CinnabarIsland_Gym_Movement_ZacApproachLeft + waitmovement 0 + return + +CinnabarIsland_Gym_EventScript_ZacApproachRight:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_ZAC, CinnabarIsland_Gym_Movement_ZacApproachRight + waitmovement 0 + return + +CinnabarIsland_Gym_Movement_ZacApproachLeft:: + walk_left + walk_left + step_end + +CinnabarIsland_Gym_Movement_ZacApproachRight:: + walk_left + step_end + +CinnabarIsland_Gym_EventScript_OpenDoor1:: + setmetatile 26, 8, METATILE_CinnabarGym_Floor_WallLeftCorner, 0 + setmetatile 27, 8, METATILE_CinnabarGym_Floor_WallRightCorner, 0 + setmetatile 26, 9, METATILE_CinnabarGym_Floor_WallLeftEdge, 0 + setmetatile 27, 9, METATILE_CinnabarGym_Floor_WallRightEdge, 0 + setmetatile 26, 10, METATILE_CinnabarGym_Floor_ShadeFull, 0 + setmetatile 27, 10, METATILE_CinnabarGym_Floor, 0 + setmetatile 28, 10, METATILE_CinnabarGym_Floor_ShadeDiagonal, 0 + return + +CinnabarIsland_Gym_EventScript_OpenDoor2:: + setmetatile 17, 8, METATILE_CinnabarGym_Floor_WallLeftCorner, 0 + setmetatile 18, 8, METATILE_CinnabarGym_Floor_WallRightCorner, 0 + setmetatile 17, 9, METATILE_CinnabarGym_Floor_WallLeftEdge, 0 + setmetatile 18, 9, METATILE_CinnabarGym_Floor_WallRightEdge, 0 + setmetatile 17, 10, METATILE_CinnabarGym_Floor_ShadeFull, 0 + setmetatile 18, 10, METATILE_CinnabarGym_Floor, 0 + setmetatile 19, 10, METATILE_CinnabarGym_Floor_ShadeDiagonal, 0 + return + +CinnabarIsland_Gym_EventScript_OpenDoor3:: + setmetatile 17, 15, METATILE_CinnabarGym_Floor_WallLeftCorner, 0 + setmetatile 18, 15, METATILE_CinnabarGym_Floor_WallRightCorner, 0 + setmetatile 17, 16, METATILE_CinnabarGym_Floor_WallLeftEdge, 0 + setmetatile 18, 16, METATILE_CinnabarGym_Floor_WallRightEdge, 0 + setmetatile 17, 17, METATILE_CinnabarGym_Floor_ShadeFull, 0 + setmetatile 18, 17, METATILE_CinnabarGym_Floor, 0 + setmetatile 19, 17, METATILE_CinnabarGym_Floor_ShadeDiagonal, 0 + return + +CinnabarIsland_Gym_EventScript_OpenDoor4:: + setmetatile 11, 21, METATILE_CinnabarGym_Wall_RetractedBarrier, 1 + setmetatile 11, 22, METATILE_CinnabarGym_Floor_ShadeFull, 0 + setmetatile 11, 23, METATILE_CinnabarGym_Floor, 0 + return + +CinnabarIsland_Gym_EventScript_OpenDoor5:: + setmetatile 5, 16, METATILE_CinnabarGym_Floor_WallLeftCorner, 0 + setmetatile 6, 16, METATILE_CinnabarGym_Floor_WallRightCorner, 0 + setmetatile 5, 17, METATILE_CinnabarGym_Floor_WallLeftEdge, 0 + setmetatile 6, 17, METATILE_CinnabarGym_Floor_WallRightEdge, 0 + setmetatile 5, 18, METATILE_CinnabarGym_Floor_ShadeFull, 0 + setmetatile 6, 18, METATILE_CinnabarGym_Floor, 0 + setmetatile 7, 18, METATILE_CinnabarGym_Floor_ShadeDiagonal, 0 + return + +CinnabarIsland_Gym_EventScript_OpenDoor6:: + setmetatile 5, 8, METATILE_CinnabarGym_Floor_WallLeftCorner, 0 + setmetatile 6, 8, METATILE_CinnabarGym_Floor_WallRightCorner, 0 + setmetatile 5, 9, METATILE_CinnabarGym_Floor_WallLeftEdge, 0 + setmetatile 6, 9, METATILE_CinnabarGym_Floor_WallRightEdge, 0 + setmetatile 5, 10, METATILE_CinnabarGym_Floor_ShadeFull, 0 + setmetatile 6, 10, METATILE_CinnabarGym_Floor, 0 + setmetatile 7, 10, METATILE_CinnabarGym_Floor_ShadeDiagonal, 0 + return + +CinnabarIsland_Gym_Text_BlaineIntro:: + .string "Hah!\p" + .string "I am BLAINE, the red-hot LEADER\n" + .string "of CINNABAR GYM!\p" + .string "My fiery POKéMON are all rough\n" + .string "and ready with intense heat!\p" + .string "They incinerate all challengers!\p" + .string "Hah!\n" + .string "You better have BURN HEAL!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +CinnabarIsland_Gym_Text_BlaineDefeat:: + .string "I have burned down to nothing!\n" + .string "Not even ashes remain!\p" + .string "You have earned the VOLCANOBADGE.$" + +CinnabarIsland_Gym_Text_FireBlastIsUltimateFireMove:: + .string "FIRE BLAST is the ultimate fire\n" + .string "technique.\p" + .string "Don't waste it on WATER POKéMON.$" + +CinnabarIsland_Gym_Text_ExplainVolcanoBadge:: + .string "Hah!\p" + .string "The VOLCANOBADGE heightens the\n" + .string "SPECIAL stats of your POKéMON.\p" + .string "Here, you can have this, too!$" + +CinnabarIsland_Gym_Text_ReceivedTM38FromBlaine:: + .string "{PLAYER} received TM38\n" + .string "from BLAINE.$" + +CinnabarIsland_Gym_Text_BlainePostBattle:: + .string "TM38 contains FIRE BLAST.\n" + .string "Teach it to FIRE-type POKéMON.\p" + .string "VULPIX or CHARMELEON would be\n" + .string "ideal for that move.$" + +CinnabarIsland_Gym_Text_MakeSpaceForThis:: + .string "Make space for this, child!$" + +CinnabarIsland_Gym_Text_ErikIntro:: + .string "Do you know how hot POKéMON fire\n" + .string "breath can get?$" + +CinnabarIsland_Gym_Text_ErikDefeat:: + .string "Yow!\n" + .string "Hot, hot, hot!$" + +CinnabarIsland_Gym_Text_ErikPostBattle:: + .string "Fire, or to be more precise,\n" + .string "combustion…\p" + .string "…Oxygen in the air…\n" + .string "Blah, blah, blah, blah…$" + +CinnabarIsland_Gym_Text_QuinnIntro:: + .string "I was a thief, but I went straight\n" + .string "as a TRAINER.$" + +CinnabarIsland_Gym_Text_QuinnDefeat:: + .string "I surrender!$" + +CinnabarIsland_Gym_Text_QuinnPostBattle:: + .string "I get this uncontrollable urge to\n" + .string "steal other people's POKéMON.$" + +CinnabarIsland_Gym_Text_AveryIntro:: + .string "I've studied POKéMON thoroughly.\n" + .string "You can't win!$" + +CinnabarIsland_Gym_Text_AveryDefeat:: + .string "Waah!\n" + .string "My studies were insufficient!$" + +CinnabarIsland_Gym_Text_AveryPostBattle:: + .string "My theories are too complicated\n" + .string "for you to understand.$" + +CinnabarIsland_Gym_Text_RamonIntro:: + .string "I like using FIRE-type POKéMON.\n" + .string "I just do.$" + +CinnabarIsland_Gym_Text_RamonDefeat:: + .string "Too hot to handle!$" + +CinnabarIsland_Gym_Text_RamonPostBattle:: + .string "I wish there were a thief POKéMON.\n" + .string "I'd use that!$" + +CinnabarIsland_Gym_Text_DerekIntro:: + .string "I know why BLAINE became a\n" + .string "TRAINER.$" + +CinnabarIsland_Gym_Text_DerekDefeat:: + .string "Ow!$" + +CinnabarIsland_Gym_Text_DerekPostBattle:: + .string "Our LEADER, BLAINE, became lost\n" + .string "in the mountains but good.\p" + .string "Night fell when a fiery bird\n" + .string "POKéMON appeared.\p" + .string "Its light allowed BLAINE to find\n" + .string "his way down safely.$" + +CinnabarIsland_Gym_Text_DustyIntro:: + .string "I've been to many GYMS, but this\n" + .string "one best suits my style.$" + +CinnabarIsland_Gym_Text_DustyDefeat:: + .string "Yowza!\n" + .string "Too hot!$" + +CinnabarIsland_Gym_Text_DustyPostBattle:: + .string "PONYTA, NINETALES…\n" + .string "Those are popular FIRE POKéMON.$" + +CinnabarIsland_Gym_Text_ZacIntro:: + .string "Fire is weak against H2O.$" + +CinnabarIsland_Gym_Text_ZacDefeat:: + .string "Oh!\n" + .string "Snuffed out!$" + +CinnabarIsland_Gym_Text_ZacPostBattle:: + .string "Water beats fire, of course.\p" + .string "But fire melts ice, so the FIRE\n" + .string "type beats ICE-type POKéMON.$" + +CinnabarIsland_Gym_Text_GymGuyAdvice:: + .string "Yo!\n" + .string "Champ in the making!\p" + .string "The hotheaded BLAINE is a FIRE\n" + .string "POKéMON pro.\p" + .string "Douse his spirits with water!\p" + .string "You'd better take some\n" + .string "BURN HEALS, too.$" + +CinnabarIsland_Gym_Text_GymGuyPostVictory:: + .string "{PLAYER}!\n" + .string "You beat that firebrand!$" + +CinnabarIsland_Gym_Text_GymStatue:: + .string "CINNABAR POKéMON GYM\n" + .string "LEADER: BLAINE\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}$" + +CinnabarIsland_Gym_Text_GymStatuePlayerWon:: + .string "CINNABAR POKéMON GYM\n" + .string "LEADER: BLAINE\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}, {PLAYER}$" + +CinnabarIsland_Gym_Text_PokemonQuizRules:: + .string "POKéMON Quiz!\p" + .string "Get it right, and the door opens to\n" + .string "the next room.\p" + .string "Get it wrong, and face a TRAINER!\p" + .string "If you want to conserve your\n" + .string "POKéMON for the GYM LEADER…\p" + .string "Then get it right!\n" + .string "Here we go!$" + +CinnabarIsland_Gym_Text_QuizQuestion1:: + .string "CATERPIE evolves into METAPOD?$" + +CinnabarIsland_Gym_Text_QuizQuestion2:: + .string "There are nine certified POKéMON\n" + .string "LEAGUE BADGES?$" + +CinnabarIsland_Gym_Text_QuizQuestion3:: + .string "POLIWAG evolves three times?$" + +CinnabarIsland_Gym_Text_QuizQuestion4:: + .string "Are electric moves effective\n" + .string "against GROUND-type POKéMON?$" + +CinnabarIsland_Gym_Text_QuizQuestion5:: + .string "POKéMON of the same kind and level\n" + .string "are not identical?$" + +CinnabarIsland_Gym_Text_QuizQuestion6:: + .string "TM28 contains TOMBSTONY?$" + +CinnabarIsland_Gym_Text_CorrectGoOnThrough:: + .string "You're absolutely correct!\p" + .string "Go on through!$" + +CinnabarIsland_Gym_Text_SorryBadCall:: + .string "Sorry!\n" + .string "Bad call!$" + diff --git a/data/maps/CinnabarIsland_Mart/scripts.inc b/data/maps/CinnabarIsland_Mart/scripts.inc new file mode 100644 index 000000000000..5fdeb8fbdc78 --- /dev/null +++ b/data/maps/CinnabarIsland_Mart/scripts.inc @@ -0,0 +1,43 @@ +CinnabarIsland_Mart_MapScripts:: + .byte 0 + +CinnabarIsland_Mart_EventScript_Woman:: + msgbox CinnabarIsland_Mart_Text_DontTheyHaveXAttack, MSGBOX_NPC + end + +CinnabarIsland_Mart_EventScript_Scientist:: + msgbox CinnabarIsland_Mart_Text_ExtraItemsNeverHurt, MSGBOX_NPC + end + +CinnabarIsland_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart CinnabarIsland_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +CinnabarIsland_Mart_Items:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_GREAT_BALL + .2byte ITEM_HYPER_POTION + .2byte ITEM_REVIVE + .2byte ITEM_FULL_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_MAX_REPEL + .2byte ITEM_NONE + release + end + +CinnabarIsland_Mart_Text_DontTheyHaveXAttack:: + .string "Don't they have X ATTACK?\p" + .string "I like it because it raises the\n" + .string "ATTACK stat in battle.$" + +CinnabarIsland_Mart_Text_ExtraItemsNeverHurt:: + .string "It never hurts to have extra items.\n" + .string "You never know what might happen.$" + diff --git a/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc b/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..c2d7943494c5 --- /dev/null +++ b/data/maps/CinnabarIsland_PokemonCenter_1F/scripts.inc @@ -0,0 +1,179 @@ +CinnabarIsland_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, CinnabarIsland_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +CinnabarIsland_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_CINNABAR_ISLAND + end + +CinnabarIsland_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +CinnabarIsland_PokemonCenter_1F_EventScript_Gentleman:: + msgbox CinnabarIsland_PokemonCenter_1F_Text_VisitUnionRoom, MSGBOX_NPC + end + +CinnabarIsland_PokemonCenter_1F_EventScript_CooltrainerF:: + msgbox CinnabarIsland_PokemonCenter_1F_Text_CinnabarGymLocked, MSGBOX_NPC + end + +CinnabarIsland_PokemonCenter_1F_EventScript_Youngster:: + msgbox CinnabarIsland_PokemonCenter_1F_Text_EvolutionCanWaitForNewMoves, MSGBOX_NPC + end + +CinnabarIsland_PokemonCenter_1F_EventScript_Bill:: + lock + faceplayer + msgbox CinnabarIsland_PokemonCenter_1F_Text_ReadyToSailToOneIsland, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonCenter_1F_EventScript_NotReadyToSail + msgbox CinnabarIsland_PokemonCenter_1F_Text_LetsGo + closemessage + playbgm MUS_FOLLOW_ME, 1 + savebgm MUS_FOLLOW_ME + setflag FLAG_DONT_TRANSITION_MUSIC + setflag FLAG_HIDE_CINNABAR_POKECENTER_BILL + delay 20 + call_if_eq VAR_FACING, DIR_SOUTH, CinnabarIsland_PokemonCenter_1F_EventScript_ExitWithBillSouth + call_if_eq VAR_FACING, DIR_EAST, CinnabarIsland_PokemonCenter_1F_EventScript_ExitWithBillEast + call_if_eq VAR_FACING, DIR_WEST, CinnabarIsland_PokemonCenter_1F_EventScript_ExitWithBillWest + removeobject LOCALID_CINNABAR_POKEMON_CENTER_BILL + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_2, 1 + clearflag FLAG_HIDE_CINNABAR_BILL + warp MAP_CINNABAR_ISLAND, 14, 11 + waitstate + release + end + +CinnabarIsland_PokemonCenter_1F_EventScript_ExitWithBillSouth:: + applymovement LOCALID_CINNABAR_POKEMON_CENTER_BILL, CinnabarIsland_PokemonCenter_1F_Movement_BillExit + applymovement LOCALID_PLAYER, CinnabarIsland_PokemonCenter_1F_Movement_PlayerExitSouth + waitmovement 0 + return + +CinnabarIsland_PokemonCenter_1F_EventScript_ExitWithBillEast:: + applymovement LOCALID_CINNABAR_POKEMON_CENTER_BILL, CinnabarIsland_PokemonCenter_1F_Movement_BillExitEast + applymovement LOCALID_PLAYER, CinnabarIsland_PokemonCenter_1F_Movement_PlayerExitEast + waitmovement 0 + return + +CinnabarIsland_PokemonCenter_1F_EventScript_ExitWithBillWest:: + applymovement LOCALID_CINNABAR_POKEMON_CENTER_BILL, CinnabarIsland_PokemonCenter_1F_Movement_BillExit + applymovement LOCALID_PLAYER, CinnabarIsland_PokemonCenter_1F_Movement_PlayerExitWest + waitmovement 0 + return + +CinnabarIsland_PokemonCenter_1F_EventScript_NotReadyToSail:: + msgbox CinnabarIsland_PokemonCenter_1F_Text_OhNotDoneYet + release + end + +CinnabarIsland_PokemonCenter_1F_Movement_BillExit:: + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + walk_down + delay_8 + set_invisible + step_end + +CinnabarIsland_PokemonCenter_1F_Movement_PlayerExitSouth:: + walk_down + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + delay_16 + walk_down + step_end + +CinnabarIsland_PokemonCenter_1F_Movement_BillExitEast:: + walk_up + walk_left + walk_left + walk_down + walk_left + walk_left + walk_down + walk_down + walk_down + delay_8 + set_invisible + step_end + +CinnabarIsland_PokemonCenter_1F_Movement_PlayerExitEast:: + delay_16 + delay_16 + delay_16 + face_left + delay_16 + walk_left + walk_left + walk_left + walk_down + walk_down + delay_8 + walk_down + delay_8 + set_invisible + step_end + +CinnabarIsland_PokemonCenter_1F_Movement_PlayerExitWest:: + walk_left + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + delay_16 + walk_down + step_end + +CinnabarIsland_PokemonCenter_1F_Text_CinnabarGymLocked:: + .string "I came to visit the CINNABAR GYM,\n" + .string "but the door is locked tight.\p" + .string "There should be a key for it\n" + .string "somewhere.\p" + .string "Could it be in that burned-out\n" + .string "mansion?\p" + .string "The GYM LEADER's friend used to\n" + .string "live there, they say.$" + +CinnabarIsland_PokemonCenter_1F_Text_VisitUnionRoom:: + .string "Do you have lots of friends?\p" + .string "Linking up with the usual friends\n" + .string "is fun, of course.\p" + .string "But how about visiting the\n" + .string "UNION ROOM every so often?\p" + .string "Who knows, you may end up making\n" + .string "new friends.\p" + .string "I think it would be worth your time\n" + .string "to check the UNION ROOM.$" + +CinnabarIsland_PokemonCenter_1F_Text_EvolutionCanWaitForNewMoves:: + .string "POKéMON can still learn techniques\n" + .string "after canceling evolution.\p" + .string "Evolution can wait until new moves\n" + .string "have been learned.$" + +CinnabarIsland_PokemonCenter_1F_Text_ReadyToSailToOneIsland:: + .string "BILL: Hey, you kept me waiting!\n" + .string "Ready to set sail to ONE ISLAND?$" + +CinnabarIsland_PokemonCenter_1F_Text_OhNotDoneYet:: + .string "Oh, you're still not done yet?$" + +CinnabarIsland_PokemonCenter_1F_Text_LetsGo:: + .string "Well, that's it.\n" + .string "Let's go!$" + diff --git a/data/maps/CinnabarIsland_PokemonCenter_2F/scripts.inc b/data/maps/CinnabarIsland_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..68721f82b170 --- /dev/null +++ b/data/maps/CinnabarIsland_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +CinnabarIsland_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +CinnabarIsland_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +CinnabarIsland_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +CinnabarIsland_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/CinnabarIsland_PokemonLab_Entrance/scripts.inc b/data/maps/CinnabarIsland_PokemonLab_Entrance/scripts.inc new file mode 100644 index 000000000000..3fd2ead91ff0 --- /dev/null +++ b/data/maps/CinnabarIsland_PokemonLab_Entrance/scripts.inc @@ -0,0 +1,60 @@ +CinnabarIsland_PokemonLab_Entrance_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, CinnabarIsland_PokemonLab_Entrance_OnTransition + .byte 0 + +CinnabarIsland_PokemonLab_Entrance_OnTransition:: + call_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 1, CinnabarIsland_PokemonLab_Entrance_EventScript_ReadyFossil + end + +CinnabarIsland_PokemonLab_Entrance_EventScript_ReadyFossil:: + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 2 + return + +CinnabarIsland_PokemonLab_Entrance_EventScript_Scientist:: + msgbox CinnabarIsland_PokemonLab_Entrance_Text_StudyMonsExtensively, MSGBOX_NPC + end + +CinnabarIsland_PokemonLab_Entrance_EventScript_DrFujiPhoto:: + msgbox CinnabarIsland_PokemonLab_Entrance_Text_PhotoOfLabFounderDrFuji, MSGBOX_SIGN + end + +CinnabarIsland_PokemonLab_Entrance_EventScript_MeetingRoomSign:: + msgbox CinnabarIsland_PokemonLab_Entrance_Text_MeetingRoomSign, MSGBOX_SIGN + end + +CinnabarIsland_PokemonLab_Entrance_EventScript_RAndDRoomSign:: + msgbox CinnabarIsland_PokemonLab_Entrance_Text_RAndDRoomSign, MSGBOX_SIGN + end + +CinnabarIsland_PokemonLab_Entrance_EventScript_TestingRoomSign:: + msgbox CinnabarIsland_PokemonLab_Entrance_Text_TestingRoomSign, MSGBOX_SIGN + end + +CinnabarIsland_Gym_Text_PhotoOfBlaineAndFuji:: + .string "It's a photo of BLAINE and\n" + .string "MR. FUJI.\p" + .string "They're standing shoulder to\n" + .string "shoulder with big grins.$" + +CinnabarIsland_PokemonLab_Entrance_Text_StudyMonsExtensively:: + .string "We study POKéMON extensively\n" + .string "every day.\p" + .string "People often bring us rare POKéMON\n" + .string "for examination.$" + +CinnabarIsland_PokemonLab_Entrance_Text_PhotoOfLabFounderDrFuji:: + .string "A photo of the LAB's founder…\n" + .string "DR. FUJI?!$" + +CinnabarIsland_PokemonLab_Entrance_Text_MeetingRoomSign:: + .string "POKéMON LAB\n" + .string "Meeting Room$" + +CinnabarIsland_PokemonLab_Entrance_Text_RAndDRoomSign:: + .string "POKéMON LAB\n" + .string "R & D Room$" + +CinnabarIsland_PokemonLab_Entrance_Text_TestingRoomSign:: + .string "POKéMON LAB\n" + .string "Testing Room$" + diff --git a/data/maps/CinnabarIsland_PokemonLab_ExperimentRoom/scripts.inc b/data/maps/CinnabarIsland_PokemonLab_ExperimentRoom/scripts.inc new file mode 100644 index 000000000000..0487d4340c97 --- /dev/null +++ b/data/maps/CinnabarIsland_PokemonLab_ExperimentRoom/scripts.inc @@ -0,0 +1,363 @@ +.equ HELIX_FOSSIL, 1 +.equ DOME_FOSSIL, 2 +.equ OLD_AMBER, 3 + +CinnabarIsland_PokemonLab_ExperimentRoom_MapScripts:: + .byte 0 + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_Garett:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_SEEL + call EventScript_GetInGameTradeSpeciesInfo + goto_if_set FLAG_DID_SEELOR_TRADE, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_AlreadyTraded + msgbox Trade_Text_LookingForMonWannaTradeForMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DeclineTrade + call EventScript_ChooseMonForInGameTrade + goto_if_ge VAR_0x8004, PARTY_SIZE, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DeclineTrade + call EventScript_GetInGameTradeSpecies + goto_if_ne VAR_RESULT, VAR_0x8009, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NotRequestedMon + call EventScript_DoInGameTrade + msgbox Trade_Text_HeyThanks + setflag FLAG_DID_SEELOR_TRADE + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DeclineTrade:: + msgbox Trade_Text_AwwOhWell + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox Trade_Text_WhatThatsNoMon + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_AlreadyTraded:: + msgbox Trade_Text_IsntMyOldMonGreat + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_FossilScientist:: + lock + faceplayer + setvar VAR_RESULT, FALSE + call_if_set FLAG_REVIVED_AMBER, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckRevivedMtMoonFossil + goto_if_eq VAR_RESULT, TRUE, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_RevivedAllFossils + goto_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 2, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_GiveRevivedMon + goto_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_FossilStillReviving + call CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckAddHelixFossilToList + goto_if_eq VAR_RESULT, TRUE, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilHelix + call CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckAddDomeFossilToList + goto_if_eq VAR_RESULT, TRUE, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilDome + call CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckAddOldAmberToList + goto_if_eq VAR_RESULT, TRUE, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilAmber + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_HaveYouAFossilForMe + goto CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckAddHelixFossilToList:: + goto_if_unset FLAG_GOT_HELIX_FOSSIL, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + goto_if_set FLAG_REVIVED_HELIX, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + setvar VAR_RESULT, TRUE + return + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckAddDomeFossilToList:: + goto_if_unset FLAG_GOT_DOME_FOSSIL, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + goto_if_set FLAG_REVIVED_DOME, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + setvar VAR_RESULT, TRUE + return + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckAddOldAmberToList:: + goto_if_unset FLAG_GOT_OLD_AMBER, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + goto_if_set FLAG_REVIVED_AMBER, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + setvar VAR_RESULT, TRUE + return + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse:: + setvar VAR_RESULT, FALSE + return + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil:: + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_NoIsTooBad + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilHelix:: + message CinnabarIsland_PokemonLab_ExperimentRoom_Text_HaveYouAFossilForMe + waitmessage + call CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckAddOldAmberToList + goto_if_eq VAR_RESULT, TRUE, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilHelixAmber + multichoice 0, 0, MULTI_HELIX, FALSE + switch VAR_RESULT + case 0, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowHelixFossil + case 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + case 127, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilDome:: + message CinnabarIsland_PokemonLab_ExperimentRoom_Text_HaveYouAFossilForMe + waitmessage + call CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckAddOldAmberToList + goto_if_eq VAR_RESULT, TRUE, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilDomeAmber + multichoice 0, 0, MULTI_DOME, FALSE + switch VAR_RESULT + case 0, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowDomeFossil + case 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + case 127, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilAmber:: + message CinnabarIsland_PokemonLab_ExperimentRoom_Text_HaveYouAFossilForMe + waitmessage + multichoice 0, 0, MULTI_AMBER, FALSE + switch VAR_RESULT + case 0, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowOldAmber + case 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + case 127, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilHelixAmber:: + multichoice 0, 0, MULTI_HELIX_AMBER, FALSE + switch VAR_RESULT + case 0, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowHelixFossil + case 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowOldAmber + case 2, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + case 127, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ChooseFossilDomeAmber:: + multichoice 0, 0, MULTI_DOME_AMBER, FALSE + switch VAR_RESULT + case 0, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowDomeFossil + case 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowOldAmber + case 2, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + case 127, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DontShowFossil + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowHelixFossil:: + bufferspeciesname STR_VAR_1, SPECIES_OMANYTE + bufferitemname STR_VAR_2, ITEM_HELIX_FOSSIL + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_ThatFossilIsOfMonMakeItLiveAgain, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DeclineReviveFossil + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_HandedFossilToWeirdDoctor + textcolor NPC_TEXT_COLOR_MALE + removeitem ITEM_HELIX_FOSSIL + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_TakesTimeGoForWalk + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 1 + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_WHICH_FOSSIL, HELIX_FOSSIL + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowDomeFossil:: + bufferspeciesname STR_VAR_1, SPECIES_KABUTO + bufferitemname STR_VAR_2, ITEM_DOME_FOSSIL + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_ThatFossilIsOfMonMakeItLiveAgain, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DeclineReviveFossil + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_HandedFossilToWeirdDoctor + textcolor NPC_TEXT_COLOR_MALE + removeitem ITEM_DOME_FOSSIL + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_TakesTimeGoForWalk + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 1 + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_WHICH_FOSSIL, DOME_FOSSIL + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_ShowOldAmber:: + bufferspeciesname STR_VAR_1, SPECIES_AERODACTYL + bufferitemname STR_VAR_2, ITEM_OLD_AMBER + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_ThatFossilIsOfMonMakeItLiveAgain, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DeclineReviveFossil + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_HandedFossilToWeirdDoctor + textcolor NPC_TEXT_COLOR_MALE + removeitem ITEM_OLD_AMBER + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_TakesTimeGoForWalk + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 1 + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_WHICH_FOSSIL, OLD_AMBER + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_DeclineReviveFossil:: + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_YouComeAgain + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_FossilStillReviving:: + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_TakesTimeGoForWalk + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_GiveRevivedMon:: + goto_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_WHICH_FOSSIL, HELIX_FOSSIL, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_GiveOmanyte + goto_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_WHICH_FOSSIL, DOME_FOSSIL, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_GiveKabuto + goto_if_eq VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_WHICH_FOSSIL, OLD_AMBER, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_GiveAerodactyl + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_GiveOmanyte:: + setvar VAR_TEMP_1, SPECIES_OMANYTE + bufferspeciesname STR_VAR_1, SPECIES_OMANYTE + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_FossilMonBackToLife + givemon SPECIES_OMANYTE, 5 + goto_if_eq VAR_RESULT, 2, Common_EventScript_NoMoreRoomForPokemon + setflag FLAG_REVIVED_HELIX + goto_if_eq VAR_RESULT, 0, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NicknameMonParty + goto_if_eq VAR_RESULT, 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NicknameMonPC + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_GiveKabuto:: + setvar VAR_TEMP_1, SPECIES_KABUTO + bufferspeciesname STR_VAR_1, SPECIES_KABUTO + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_FossilMonBackToLife + givemon SPECIES_KABUTO, 5 + goto_if_eq VAR_RESULT, 2, Common_EventScript_NoMoreRoomForPokemon + setflag FLAG_REVIVED_DOME + goto_if_eq VAR_RESULT, 0, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NicknameMonParty + goto_if_eq VAR_RESULT, 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NicknameMonPC + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_GiveAerodactyl:: + setvar VAR_TEMP_1, SPECIES_AERODACTYL + bufferspeciesname STR_VAR_1, SPECIES_AERODACTYL + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_FossilMonBackToLife + givemon SPECIES_AERODACTYL, 5 + goto_if_eq VAR_RESULT, 2, Common_EventScript_NoMoreRoomForPokemon + setflag FLAG_REVIVED_AMBER + goto_if_eq VAR_RESULT, 0, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NicknameMonParty + goto_if_eq VAR_RESULT, 1, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NicknameMonPC + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NicknameMonParty:: + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_LEVEL_UP + message CinnabarIsland_PokemonLab_ExperimentRoom_Text_ReceivedMonFromDoctor + waitmessage + waitfanfare + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 0 + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_EndGiveMon + call Common_EventScript_GetGiftMonPartySlot + call Common_EventScript_NameReceivedPartyMon + goto CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_EndGiveMon + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_NicknameMonPC:: + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_LEVEL_UP + message CinnabarIsland_PokemonLab_ExperimentRoom_Text_ReceivedMonFromDoctor + waitmessage + waitfanfare + setvar VAR_MAP_SCENE_CINNABAR_ISLAND_POKEMON_LAB_EXPERIMENT_ROOM_REVIVE_STATE, 0 + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_MonSentToPC + call Common_EventScript_NameReceivedBoxMon + goto CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_MonSentToPC + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_MonSentToPC:: + call Common_EventScript_TransferredToPC + goto CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_EndGiveMon + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_EndGiveMon:: + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_RevivedAllFossils:: + msgbox CinnabarIsland_PokemonLab_ExperimentRoom_Text_YouComeAgain + release + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckRevivedMtMoonFossil:: + goto_if_set FLAG_GOT_HELIX_FOSSIL, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckRevivedHelix + goto_if_set FLAG_GOT_DOME_FOSSIL, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckRevivedDome + goto CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + end + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckRevivedHelix:: + goto_if_unset FLAG_REVIVED_HELIX, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + setvar VAR_RESULT, TRUE + return + +CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_CheckRevivedDome:: + goto_if_unset FLAG_REVIVED_DOME, CinnabarIsland_PokemonLab_ExperimentRoom_EventScript_SetResultFalse + setvar VAR_RESULT, TRUE + return + +Text_MetronomeTeach:: + .string "Tch-tch-tch!\n" + .string "I'll teach you a nifty move.\p" + .string "Teach it to a POKéMON, and watch\n" + .string "the fun unfold!\p" + .string "It's a move called METRONOME.\n" + .string "Does it strike your fancy?$" + +Text_MetronomeDeclined:: + .string "I tell you, it's a lot of fun!$" + +Text_MetronomeWhichMon:: + .string "Okay!\n" + .string "Which POKéMON should I teach?$" + +Text_MetronomeTaught:: + .string "Tch-tch-tch!\n" + .string "That's the sound of a METRONOME.\p" + .string "It tweaks your POKéMON's brain into\n" + .string "using moves it doesn't even know.$" + +CinnabarIsland_PokemonLab_ExperimentRoom_Text_HaveYouAFossilForMe:: + .string "Hiya!\p" + .string "I am important doctor.\n" + .string "Yes, very much so, indeed.\p" + .string "Here, I study rare POKéMON fossils.\n" + .string "All the time, I study.\p" + .string "You!\n" + .string "Have you a fossil for me?$" + +CinnabarIsland_PokemonLab_ExperimentRoom_Text_NoIsTooBad:: + .string "No!\n" + .string "Is too bad!$" + +@ Unused +CinnabarIsland_PokemonLab_ExperimentRoom_Text_TakesTimeGoForWalkJP:: + .string "ちょっと じかん かかるよ!\p" + .string "そこらへんを すこし\n" + .string "ブラブラ してくると よろしー!$" + +CinnabarIsland_PokemonLab_ExperimentRoom_Text_FossilMonBackToLife:: + .string "You late.\n" + .string "Where were you?\p" + .string "Your fossil is back to life!\n" + .string "It was {STR_VAR_1} like I think!$" + +CinnabarIsland_PokemonLab_ExperimentRoom_Text_ReceivedMonFromDoctor:: + .string "{PLAYER} received the {STR_VAR_1}\n" + .string "from the doctor.$" + +@ Unused +CinnabarIsland_PokemonLab_ExperimentRoom_Text_NoRoomForPokemon:: + .string "ポケモン いっぱいで もてないね!$" + +CinnabarIsland_PokemonLab_ExperimentRoom_Text_ThatFossilIsOfMonMakeItLiveAgain:: + .string "Oh!\n" + .string "That is {STR_VAR_2}, it is!\p" + .string "It is fossil of {STR_VAR_1},\n" + .string "a POKéMON that is already extinct!\p" + .string "My Resurrection Machine will make\n" + .string "that POKéMON live again!$" + +@ TODO: Resolve text dump error below? +CinnabarIsland_PokemonLab_ExperimentRoom_Text_HandedFossilToWeirdDoctor:: + .string "So!\n" + .string "You hurry and give me that!\p" + .string "{FONT_NORMAL}{PLAYER} handed over the\n" + .string "{STR_VAR_2} to the weird doctor.$" + +CinnabarIsland_PokemonLab_ExperimentRoom_Text_TakesTimeGoForWalk:: + .string "I take a little time!\n" + .string "You go for walk a little while!$" + +CinnabarIsland_PokemonLab_ExperimentRoom_Text_YouComeAgain:: + .string "Aiyah!\n" + .string "You come again!$" + diff --git a/data/maps/CinnabarIsland_PokemonLab_Lounge/scripts.inc b/data/maps/CinnabarIsland_PokemonLab_Lounge/scripts.inc new file mode 100644 index 000000000000..3f30558f857f --- /dev/null +++ b/data/maps/CinnabarIsland_PokemonLab_Lounge/scripts.inc @@ -0,0 +1,91 @@ +CinnabarIsland_PokemonLab_Lounge_MapScripts:: + .byte 0 + +CinnabarIsland_PokemonLab_Lounge_EventScript_Scientist:: + msgbox CinnabarIsland_PokemonLab_Lounge_Text_FoundFossilInMtMoon, MSGBOX_NPC + end + +CinnabarIsland_PokemonLab_Lounge_EventScript_Clifton:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_ELECTRODE + call EventScript_GetInGameTradeSpeciesInfo + goto_if_set FLAG_DID_ESPHERE_TRADE, CinnabarIsland_PokemonLab_Lounge_EventScript_CliftonAlreadyTraded + msgbox Trade_Text_DoYouHaveMonWouldYouTradeForMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonLab_Lounge_EventScript_CliftonDeclineTrade + call EventScript_ChooseMonForInGameTrade + goto_if_ge VAR_0x8004, PARTY_SIZE, CinnabarIsland_PokemonLab_Lounge_EventScript_CliftonDeclineTrade + call EventScript_GetInGameTradeSpecies + goto_if_ne VAR_RESULT, VAR_0x8009, CinnabarIsland_PokemonLab_Lounge_EventScript_CliftonNotRequestedMon + call EventScript_DoInGameTrade + msgbox Trade_Text_Thanks + setflag FLAG_DID_ESPHERE_TRADE + release + end + +CinnabarIsland_PokemonLab_Lounge_EventScript_CliftonDeclineTrade:: + msgbox Trade_Text_WellIfYouDontWantTo + release + end + +CinnabarIsland_PokemonLab_Lounge_EventScript_CliftonNotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox Trade_Text_ThisIsntMon + release + end + +CinnabarIsland_PokemonLab_Lounge_EventScript_CliftonAlreadyTraded:: + msgbox Trade_Text_HasTradedMonGrownStronger + release + end + +CinnabarIsland_PokemonLab_Lounge_EventScript_Norma:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_TANGELA + copyvar VAR_0x8004, VAR_0x8008 + specialvar VAR_RESULT, GetInGameTradeSpeciesInfo + copyvar VAR_0x8009, VAR_RESULT + goto_if_set FLAG_DID_TANGENY_TRADE, CinnabarIsland_PokemonLab_Lounge_EventScript_NormaAlreadyTraded + msgbox Trade_Text_DoYouHaveMonWantToTradeForMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, CinnabarIsland_PokemonLab_Lounge_EventScript_NormaDeclineTrade + special ChoosePartyMon + waitstate + copyvar VAR_0x800A, VAR_0x8004 + goto_if_ge VAR_0x8004, PARTY_SIZE, CinnabarIsland_PokemonLab_Lounge_EventScript_NormaDeclineTrade + copyvar VAR_0x8005, VAR_0x800A + specialvar VAR_RESULT, GetTradeSpecies + copyvar VAR_0x800B, VAR_RESULT + goto_if_ne VAR_RESULT, VAR_0x8009, CinnabarIsland_PokemonLab_Lounge_EventScript_NormaNotRequestedMon + copyvar VAR_0x8004, VAR_0x8008 + copyvar VAR_0x8005, VAR_0x800A + special CreateInGameTradePokemon + special DoInGameTradeScene + waitstate + msgbox Trade_Text_ThanksYoureAPal + setflag FLAG_DID_TANGENY_TRADE + release + end + +CinnabarIsland_PokemonLab_Lounge_EventScript_NormaDeclineTrade:: + msgbox Trade_Text_ThatsTooBad + release + end + +CinnabarIsland_PokemonLab_Lounge_EventScript_NormaNotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox Trade_Text_ThisIsNoMon + release + end + +CinnabarIsland_PokemonLab_Lounge_EventScript_NormaAlreadyTraded:: + msgbox Trade_Text_HowIsMyOldMon + release + end + +CinnabarIsland_PokemonLab_Lounge_Text_FoundFossilInMtMoon:: + .string "I found this most remarkable fossil\n" + .string "inside MT. MOON.\p" + .string "I think it's of a rare, prehistoric\n" + .string "POKéMON.$" + diff --git a/data/maps/CinnabarIsland_PokemonLab_ResearchRoom/scripts.inc b/data/maps/CinnabarIsland_PokemonLab_ResearchRoom/scripts.inc new file mode 100644 index 000000000000..696077379131 --- /dev/null +++ b/data/maps/CinnabarIsland_PokemonLab_ResearchRoom/scripts.inc @@ -0,0 +1,38 @@ +CinnabarIsland_PokemonLab_ResearchRoom_MapScripts:: + .byte 0 + +CinnabarIsland_PokemonLab_ResearchRoom_EventScript_MetronomeTutor:: + goto EventScript_MetronomeTutor + end + +CinnabarIsland_PokemonLab_ResearchRoom_EventScript_Scientist:: + msgbox CinnabarIsland_PokemonLab_ResearchRoom_Text_EeveeCanEvolveIntroThreeMons, MSGBOX_NPC + end + +CinnabarIsland_PokemonLab_ResearchRoom_EventScript_Computer:: + msgbox CinnabarIsland_PokemonLab_ResearchRoom_Text_LegendaryBirdEmail, MSGBOX_SIGN + end + +CinnabarIsland_PokemonLab_ResearchRoom_EventScript_AmberPipe:: + msgbox CinnabarIsland_PokemonLab_ResearchRoom_Text_AnAmberPipe, MSGBOX_SIGN + end + +CinnabarIsland_PokemonLab_ResearchRoom_Text_EeveeCanEvolveIntroThreeMons:: + .string "EEVEE can evolve into one of three\n" + .string "kinds of POKéMON.$" + +CinnabarIsland_PokemonLab_ResearchRoom_Text_LegendaryBirdEmail:: + .string "There's an e-mail message.\p" + .string "… … …\p" + .string "There are three legendary bird\n" + .string "POKéMON.\p" + .string "They are ARTICUNO, ZAPDOS, and\n" + .string "MOLTRES.\p" + .string "Their whereabouts are unknown.\p" + .string "We plan to explore the cavern\n" + .string "close to CERULEAN.\p" + .string "From: POKéMON RESEARCH TEAM…$" + +CinnabarIsland_PokemonLab_ResearchRoom_Text_AnAmberPipe:: + .string "An amber pipe!$" + diff --git a/data/maps/DiglettsCave_B1F/scripts.inc b/data/maps/DiglettsCave_B1F/scripts.inc new file mode 100644 index 000000000000..093f485980c7 --- /dev/null +++ b/data/maps/DiglettsCave_B1F/scripts.inc @@ -0,0 +1,7 @@ +DiglettsCave_B1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, DiglettsCave_B1F_OnTransition + .byte 0 + +DiglettsCave_B1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_DIGLETTS_CAVE_B1F + end diff --git a/data/maps/DiglettsCave_NorthEntrance/scripts.inc b/data/maps/DiglettsCave_NorthEntrance/scripts.inc new file mode 100644 index 000000000000..439fff521d70 --- /dev/null +++ b/data/maps/DiglettsCave_NorthEntrance/scripts.inc @@ -0,0 +1,13 @@ +DiglettsCave_NorthEntrance_MapScripts:: + .byte 0 + +DiglettsCave_NorthEntrance_EventScript_Hiker:: + msgbox DiglettsCave_NorthEntrance_RockTunnelPitchBlack, MSGBOX_NPC + end + +DiglettsCave_NorthEntrance_RockTunnelPitchBlack:: + .string "I went inside ROCK TUNNEL, but it's\n" + .string "pitch-black and scary in there.\p" + .string "If I could get a POKéMON to use\n" + .string "FLASH and light it up…$" + diff --git a/data/maps/DiglettsCave_SouthEntrance/scripts.inc b/data/maps/DiglettsCave_SouthEntrance/scripts.inc new file mode 100644 index 000000000000..146726828676 --- /dev/null +++ b/data/maps/DiglettsCave_SouthEntrance/scripts.inc @@ -0,0 +1,13 @@ +DiglettsCave_SouthEntrance_MapScripts:: + .byte 0 + +DiglettsCave_SouthEntrance_EventScript_OldMan:: + msgbox DiglettsCave_SouthEntrance_Text_DiglettDugThisTunnel, MSGBOX_NPC + end + +DiglettsCave_SouthEntrance_Text_DiglettDugThisTunnel:: + .string "Well, isn't this a surprise!\n" + .string "DIGLETT dug this long tunnel!\p" + .string "It goes right to VIRIDIAN CITY,\n" + .string "they tell me.$" + diff --git a/data/maps/FiveIsland/scripts.inc b/data/maps/FiveIsland/scripts.inc new file mode 100644 index 000000000000..e6b7935107ad --- /dev/null +++ b/data/maps/FiveIsland/scripts.inc @@ -0,0 +1,36 @@ +FiveIsland_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FiveIsland_OnTransition + .byte 0 + +FiveIsland_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_FIVE_ISLAND + end + +FiveIsland_EventScript_IslandSign:: + msgbox FiveIsland_Text_IslandSign, MSGBOX_SIGN + end + +FiveIsland_EventScript_BugCatcher:: + msgbox FiveIsland_Text_WeirdBuildingInMeadow, MSGBOX_NPC + end + +FiveIsland_EventScript_Fisher:: + msgbox FiveIsland_Text_BeenGettingBusierAroundHere, MSGBOX_NPC + end + +FiveIsland_Text_IslandSign:: + .string "FIVE ISLAND\n" + .string "Chrono Island: Where Time Goes$" + +FiveIsland_Text_WeirdBuildingInMeadow:: + .string "Oh, this stinks. I wanted to play in\n" + .string "the MEADOW.\p" + .string "But they put up a weird building\n" + .string "on it, so I can't play there.$" + +FiveIsland_Text_BeenGettingBusierAroundHere:: + .string "It's been getting busier around\n" + .string "these parts lately.\p" + .string "I haven't been catching many good\n" + .string "fish lately, either.$" + diff --git a/data/maps/FiveIsland_Harbor/scripts.inc b/data/maps/FiveIsland_Harbor/scripts.inc new file mode 100644 index 000000000000..9d4f39c7d1c7 --- /dev/null +++ b/data/maps/FiveIsland_Harbor/scripts.inc @@ -0,0 +1,11 @@ +FiveIsland_Harbor_MapScripts:: + .byte 0 + +FiveIsland_Harbor_EventScript_Sailor:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_FIVE_ISLAND + goto EventScript_ChooseDestFromIsland + end diff --git a/data/maps/FiveIsland_House1/scripts.inc b/data/maps/FiveIsland_House1/scripts.inc new file mode 100644 index 000000000000..9f261c66f0f5 --- /dev/null +++ b/data/maps/FiveIsland_House1/scripts.inc @@ -0,0 +1,15 @@ +FiveIsland_House1_MapScripts:: + .byte 0 + +FiveIsland_House1_EventScript_Woman:: + msgbox FiveIsland_House1_Text_HusbandWentOffFishing, MSGBOX_NPC + end + +FiveIsland_House1_Text_HusbandWentOffFishing:: + .string "Don't worry about buying anything\n" + .string "for dinner tonight!\p" + .string "…That's what my husband said when\n" + .string "he went off fishing today.\p" + .string "I'm not sure if I can count on him\n" + .string "to live up to that promise.$" + diff --git a/data/maps/FiveIsland_House2/scripts.inc b/data/maps/FiveIsland_House2/scripts.inc new file mode 100644 index 000000000000..6a3b76ab0798 --- /dev/null +++ b/data/maps/FiveIsland_House2/scripts.inc @@ -0,0 +1,15 @@ +FiveIsland_House2_MapScripts:: + .byte 0 + +FiveIsland_House2_EventScript_OldMan:: + msgbox FiveIsland_House2_Text_MeadowBelongedToFamily, MSGBOX_NPC + end + +FiveIsland_House2_Text_MeadowBelongedToFamily:: + .string "That MEADOW has belonged to our\n" + .string "family for generations.\p" + .string "I should have had a giant mansion\n" + .string "built on it.\p" + .string "It would be preferable to having\n" + .string "those thugs run wild on it!$" + diff --git a/data/maps/FiveIsland_LostCave_Entrance/scripts.inc b/data/maps/FiveIsland_LostCave_Entrance/scripts.inc new file mode 100644 index 000000000000..3aba609f373c --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Entrance/scripts.inc @@ -0,0 +1,7 @@ +FiveIsland_LostCave_Entrance_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FiveIsland_LostCave_Entrance_OnTransition + .byte 0 + +FiveIsland_LostCave_Entrance_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_FIVE_ISLAND_LOST_CAVE_ENTRANCE + end diff --git a/data/maps/FiveIsland_LostCave_Room1/scripts.inc b/data/maps/FiveIsland_LostCave_Room1/scripts.inc new file mode 100644 index 000000000000..e276348b7687 --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room1/scripts.inc @@ -0,0 +1,23 @@ +FiveIsland_LostCave_Room1_MapScripts:: + .byte 0 + +FiveIsland_LostCave_Room1_EventScript_Lawson:: + trainerbattle_single TRAINER_RUIN_MANIAC_LAWSON, FiveIsland_LostCave_Room1_Text_LawsonIntro, FiveIsland_LostCave_Room1_Text_LawsonDefeat + msgbox FiveIsland_LostCave_Room1_Text_LawsonPostBattle, MSGBOX_AUTOCLOSE + end + +FiveIsland_LostCave_Room1_Text_LawsonIntro:: + .string "Aiyeeeeeh!\p" + .string "I thought this was an ancient ruin.\n" + .string "But it's teeming with ghosts!$" + +FiveIsland_LostCave_Room1_Text_LawsonDefeat:: + .string "Aiyeeeeeh!\n" + .string "Mercy!$" + +FiveIsland_LostCave_Room1_Text_LawsonPostBattle:: + .string "I'm trying to get out of here, but\n" + .string "I always end up at the same spot.\p" + .string "Maybe the number of boulders is\n" + .string "a hint…$" + diff --git a/data/maps/FiveIsland_LostCave_Room10/scripts.inc b/data/maps/FiveIsland_LostCave_Room10/scripts.inc new file mode 100644 index 000000000000..70d8eb93e135 --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room10/scripts.inc @@ -0,0 +1,79 @@ +FiveIsland_LostCave_Room10_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, FiveIsland_LostCave_Room10_OnResume + map_script MAP_SCRIPT_ON_FRAME_TABLE, FiveIsland_LostCave_Room10_OnFrame + .byte 0 + +FiveIsland_LostCave_Room10_OnResume:: + call_if_defeated TRAINER_LADY_SELPHY, FiveIsland_LostCave_Room10_EventScript_StopSelphySceneTrigger + end + +FiveIsland_LostCave_Room10_EventScript_StopSelphySceneTrigger:: + setvar VAR_MAP_SCENE_FIVE_ISLAND_LOST_CAVE_ROOM10, 1 + return + +FiveIsland_LostCave_Room10_OnFrame:: + map_script_2 VAR_MAP_SCENE_FIVE_ISLAND_LOST_CAVE_ROOM10, 0, FiveIsland_LostCave_Room10_EventScript_FindSelphyScene + .2byte 0 + +FiveIsland_LostCave_Room10_EventScript_FindSelphyScene:: + lockall + textcolor NPC_TEXT_COLOR_FEMALE + applymovement LOCALID_LOST_CAVE_SELPHY, FiveIsland_LostCave_Room10_Movement_SelphyWander + waitmovement 0 + delay 100 + applymovement LOCALID_LOST_CAVE_SELPHY, FiveIsland_LostCave_Room10_Movement_SelphyApproach + waitmovement 0 + msgbox FiveIsland_LostCave_Room10_Text_SelphyIntro + trainerbattle_no_intro TRAINER_LADY_SELPHY, FiveIsland_LostCave_Room10_Text_SelphyDefeat + msgbox FiveIsland_LostCave_Room10_Text_MayIAskYouToTakeMeHome + closemessage + call FiveIsland_LostCave_Room10_EventScript_SetSelphyFound + warp MAP_FIVE_ISLAND_RESORT_GORGEOUS, 39, 10 + waitstate + releaseall + end + +FiveIsland_LostCave_Room10_EventScript_SetSelphyFound:: + setflag FLAG_HIDE_LOST_CAVE_SELPHY + clearflag FLAG_HIDE_RESORT_GORGEOUS_SELPHY + setvar VAR_MAP_SCENE_FIVE_ISLAND_LOST_CAVE_ROOM10, 1 + setvar VAR_MAP_SCENE_FIVE_ISLAND_RESORT_GORGEOUS, 1 + return + +FiveIsland_LostCave_Room10_EventScript_SelphyQuestLog:: + settrainerflag TRAINER_LADY_SELPHY + call FiveIsland_LostCave_Room10_EventScript_SetSelphyFound + releaseall + end + +FiveIsland_LostCave_Room10_Movement_SelphyWander:: + walk_left + delay_16 + walk_right + delay_16 + walk_in_place_faster_up + delay_16 + walk_in_place_faster_down + step_end + +FiveIsland_LostCave_Room10_Movement_SelphyApproach:: + walk_down + walk_down + step_end + +FiveIsland_LostCave_Room10_Text_SelphyIntro:: + .string "W-what do you intend to do with\n" + .string "me?$" + +FiveIsland_LostCave_Room10_Text_SelphyDefeat:: + .string "Oh… I was afraid that you meant to\n" + .string "harm me.$" + +FiveIsland_LostCave_Room10_Text_MayIAskYouToTakeMeHome:: + .string "I am so glad that you happened\n" + .string "here.\p" + .string "I grew rather bored of walking,\n" + .string "and I am feeling fatigued.\p" + .string "May I ask you to take me home\n" + .string "from here?$" + diff --git a/data/maps/FiveIsland_LostCave_Room11/scripts.inc b/data/maps/FiveIsland_LostCave_Room11/scripts.inc new file mode 100644 index 000000000000..30c3f36709c3 --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room11/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room11_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room12/scripts.inc b/data/maps/FiveIsland_LostCave_Room12/scripts.inc new file mode 100644 index 000000000000..c67df0594afa --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room12/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room12_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room13/scripts.inc b/data/maps/FiveIsland_LostCave_Room13/scripts.inc new file mode 100644 index 000000000000..fdd7296a7fad --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room13/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room13_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room14/scripts.inc b/data/maps/FiveIsland_LostCave_Room14/scripts.inc new file mode 100644 index 000000000000..53b2f20f625d --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room14/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room14_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room2/scripts.inc b/data/maps/FiveIsland_LostCave_Room2/scripts.inc new file mode 100644 index 000000000000..cf3e137b3200 --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room2/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room2_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room3/scripts.inc b/data/maps/FiveIsland_LostCave_Room3/scripts.inc new file mode 100644 index 000000000000..cc4f546ea3a0 --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room3/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room3_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room4/scripts.inc b/data/maps/FiveIsland_LostCave_Room4/scripts.inc new file mode 100644 index 000000000000..4247712e3cee --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room4/scripts.inc @@ -0,0 +1,20 @@ +FiveIsland_LostCave_Room4_MapScripts:: + .byte 0 + +FiveIsland_LostCave_Room4_EventScript_Laura:: + trainerbattle_single TRAINER_PSYCHIC_LAURA, FiveIsland_LostCave_Room4_Text_LauraIntro, FiveIsland_LostCave_Room4_Text_LauraDefeat + msgbox FiveIsland_LostCave_Room4_Text_LauraPostBattle, MSGBOX_AUTOCLOSE + end + +FiveIsland_LostCave_Room4_Text_LauraIntro:: + .string "I think there is a mysterious power\n" + .string "at work in this cave.$" + +FiveIsland_LostCave_Room4_Text_LauraDefeat:: + .string "If you don't go into the right\n" + .string "tunnel, you won't get ahead.$" + +FiveIsland_LostCave_Room4_Text_LauraPostBattle:: + .string "Earlier, a lady went into the caves\n" + .string "ahead.$" + diff --git a/data/maps/FiveIsland_LostCave_Room5/scripts.inc b/data/maps/FiveIsland_LostCave_Room5/scripts.inc new file mode 100644 index 000000000000..a2de1157ef20 --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room5/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room5_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room6/scripts.inc b/data/maps/FiveIsland_LostCave_Room6/scripts.inc new file mode 100644 index 000000000000..802cd2c9f81a --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room6/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room6_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room7/scripts.inc b/data/maps/FiveIsland_LostCave_Room7/scripts.inc new file mode 100644 index 000000000000..6006af79e9bf --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room7/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room7_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room8/scripts.inc b/data/maps/FiveIsland_LostCave_Room8/scripts.inc new file mode 100644 index 000000000000..16c5a85a0f7e --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room8/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room8_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_LostCave_Room9/scripts.inc b/data/maps/FiveIsland_LostCave_Room9/scripts.inc new file mode 100644 index 000000000000..1f1901ad6aca --- /dev/null +++ b/data/maps/FiveIsland_LostCave_Room9/scripts.inc @@ -0,0 +1,2 @@ +FiveIsland_LostCave_Room9_MapScripts:: + .byte 0 diff --git a/data/maps/FiveIsland_Meadow/scripts.inc b/data/maps/FiveIsland_Meadow/scripts.inc new file mode 100644 index 000000000000..f6a2dddaf077 --- /dev/null +++ b/data/maps/FiveIsland_Meadow/scripts.inc @@ -0,0 +1,111 @@ +FiveIsland_Meadow_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, FiveIsland_Meadow_OnLoad + .byte 0 + +FiveIsland_Meadow_OnLoad:: + call_if_set FLAG_UNLOCKED_ROCKET_WAREHOUSE, FiveIsland_Meadow_EventScript_SetWarehouseDoorUnlocked + end + +FiveIsland_Meadow_EventScript_WarehouseDoor:: + lockall + goto_if_set FLAG_UNLOCKED_ROCKET_WAREHOUSE, FiveIsland_Meadow_EventScript_WarehouseDoorAlreadyOpen + goto_if_set FLAG_LEARNED_YES_NAH_CHANSEY, FiveIsland_Meadow_EventScript_OpenWarehouseDoor + msgbox FiveIsland_Meadow_Text_EnteredPasswordAnotherNeeded + releaseall + end + +FiveIsland_Meadow_EventScript_OpenWarehouseDoor:: + setflag FLAG_UNLOCKED_ROCKET_WAREHOUSE + message FiveIsland_Meadow_Text_EnteredPasswordDoorOpened + waitmessage + delay 60 + call FiveIsland_Meadow_EventScript_SetWarehouseDoorUnlocked + special DrawWholeMapView + playse SE_PIN + waitse + releaseall + end + +FiveIsland_Meadow_EventScript_WarehouseDoorAlreadyOpen:: + msgbox FiveIsland_Meadow_Text_WarehouseDoorAlreadyOpen + releaseall + end + +FiveIsland_Meadow_EventScript_SetWarehouseDoorUnlocked:: + setmetatile 12, 21, METATILE_SeviiIslands45_RocketWarehouseDoor_Unlocked, 1 + return + +FiveIsland_Meadow_EventScript_Rocket1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_49, FiveIsland_Meadow_Text_Rocket1Intro, FiveIsland_Meadow_Text_Rocket1Defeat + msgbox FiveIsland_Meadow_Text_Rocket1PostBattle, MSGBOX_AUTOCLOSE + end + +FiveIsland_Meadow_EventScript_Rocket2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_50, FiveIsland_Meadow_Text_Rocket2Intro, FiveIsland_Meadow_Text_Rocket2Defeat + msgbox FiveIsland_Meadow_Text_Rocket2PostBattle, MSGBOX_AUTOCLOSE + end + +FiveIsland_Meadow_EventScript_Rocket3:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_51, FiveIsland_Meadow_Text_Rocket3Intro, FiveIsland_Meadow_Text_Rocket3Defeat + msgbox FiveIsland_Meadow_Text_Rocket3PostBattle, MSGBOX_AUTOCLOSE + end + +@ Unused +FiveIsland_Meadow_Text_DoorNeedsTwoPasswords:: + .string "とびらを あけるには\n" + .string "パスワードが 2つ いるようだ$" + +FiveIsland_Meadow_Text_EnteredPasswordAnotherNeeded:: + .string "{PLAYER} entered a password.\p" + .string "“GOLDEEN need log.”\p" + .string "… … … … … …\p" + .string "Another password is needed to\n" + .string "open the door…$" + +FiveIsland_Meadow_Text_EnteredPasswordDoorOpened:: + .string "{PLAYER} entered two passwords.\p" + .string "“GOLDEEN need log.”\n" + .string "“Yes, nah, CHANSEY.”\p" + .string "… … … … … …\p" + .string "The WAREHOUSE's door opened!$" + +FiveIsland_Meadow_Text_WarehouseDoorAlreadyOpen:: + .string "The WAREHOUSE's door is already\n" + .string "open.$" + +FiveIsland_Meadow_Text_Rocket1Intro:: + .string "This area's strictly off-limits!\n" + .string "Out, out!$" + +FiveIsland_Meadow_Text_Rocket1Defeat:: + .string "Is this for real?$" + +FiveIsland_Meadow_Text_Rocket1PostBattle:: + .string "You don't have any business here!\n" + .string "Go home!$" + +FiveIsland_Meadow_Text_Rocket2Intro:: + .string "There's nothing past here except\n" + .string "our WAREHOUSE.\p" + .string "So what brings you here?$" + +FiveIsland_Meadow_Text_Rocket2Defeat:: + .string "That wasn't supposed to happen…$" + +FiveIsland_Meadow_Text_Rocket2PostBattle:: + .string "You're wanting to know what's inside\n" + .string "this WAREHOUSE?\p" + .string "It's better you didn't know.\n" + .string "For your own sake, I mean.$" + +FiveIsland_Meadow_Text_Rocket3Intro:: + .string "You'd be wasting time even if you\n" + .string "were to get by me.$" + +FiveIsland_Meadow_Text_Rocket3Defeat:: + .string "Oh, that makes me furious!$" + +FiveIsland_Meadow_Text_Rocket3PostBattle:: + .string "You won't be able to get in without\n" + .string "the passwords anyway.$" + diff --git a/data/maps/FiveIsland_MemorialPillar/scripts.inc b/data/maps/FiveIsland_MemorialPillar/scripts.inc new file mode 100644 index 000000000000..d2240831ffb2 --- /dev/null +++ b/data/maps/FiveIsland_MemorialPillar/scripts.inc @@ -0,0 +1,182 @@ +FiveIsland_MemorialPillar_MapScripts:: + .byte 0 + +FiveIsland_MemorialPillar_EventScript_MemorialMan:: + lock + goto_if_set FLAG_GOT_TM42_AT_MEMORIAL_PILLAR, FiveIsland_MemorialPillar_EventScript_AlreadyGotTM42 + goto_if_set FLAG_NO_ROOM_FOR_TM42_AT_MEMORIAL_PILLAR, FiveIsland_MemorialPillar_EventScript_ReturnedForTM42 + msgbox FiveIsland_MemorialPillar_Text_ScrubScrub + closemessage + applymovement LOCALID_MEMORIAL_MAN, Common_Movement_FacePlayer + waitmovement 0 + delay 45 + msgbox FiveIsland_MemorialPillar_Text_YourMonsLookHealthy + applymovement LOCALID_MEMORIAL_MAN, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + msgbox FiveIsland_MemorialPillar_Text_ThisIsWhereIBuriedMyOnix + release + end + +FiveIsland_MemorialPillar_EventScript_AlreadyGotTM42:: + msgbox FiveIsland_MemorialPillar_Text_ScrubScrubTectonix + release + end + +FiveIsland_MemorialPillar_EventScript_ReturnedForTM42:: + msgbox FiveIsland_MemorialPillar_Text_StillHaveThingAsMyThanks + giveitem ITEM_TM42 + goto_if_eq VAR_RESULT, FALSE, FiveIsland_MemorialPillar_EventScript_NoRoomForTM42 + call FiveIsland_MemorialPillar_EventScript_ReceivedTM42 + release + end + +FiveIsland_MemorialPillar_EventScript_Memorial:: + lockall + goto_if_set FLAG_GOT_TM42_AT_MEMORIAL_PILLAR, FiveIsland_MemorialPillar_EventScript_MemorialLemonadeAlreadyPlaced + goto_if_set FLAG_NO_ROOM_FOR_TM42_AT_MEMORIAL_PILLAR, FiveIsland_MemorialPillar_EventScript_MemorialLemonadeAlreadyPlaced + msgbox FiveIsland_MemorialPillar_Text_HereLiesTectonixLemonadeOffering + checkitem ITEM_LEMONADE + goto_if_eq VAR_RESULT, TRUE, FiveIsland_MemorialPillar_EventScript_AskPlaceLemonade + releaseall + end + +FiveIsland_MemorialPillar_EventScript_AskPlaceLemonade:: + msgbox FiveIsland_MemorialPillar_Text_LeaveAnotherLemonadeOffering, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FiveIsland_MemorialPillar_EventScript_PlaceLemonade + releaseall + end + +FiveIsland_MemorialPillar_EventScript_PlaceLemonade:: + removeitem ITEM_LEMONADE + msgbox FiveIsland_MemorialPillar_Text_PlacedCanOfLemonade + closemessage + applymovement LOCALID_MEMORIAL_MAN, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + delay 45 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + textcolor NPC_TEXT_COLOR_MALE + msgbox FiveIsland_MemorialPillar_Text_ThankYouPleaseTakeThis + giveitem ITEM_TM42 + goto_if_eq VAR_RESULT, FALSE, FiveIsland_MemorialPillar_EventScript_NoRoomForTM42 + call FiveIsland_MemorialPillar_EventScript_ReceivedTM42 + releaseall + end + +FiveIsland_MemorialPillar_EventScript_ReceivedTM42:: + msgbox FiveIsland_MemorialPillar_Text_BeGoodToYourMonsToo + applymovement LOCALID_MEMORIAL_MAN, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + setflag FLAG_GOT_TM42_AT_MEMORIAL_PILLAR + return + +FiveIsland_MemorialPillar_EventScript_NoRoomForTM42:: + setflag FLAG_NO_ROOM_FOR_TM42_AT_MEMORIAL_PILLAR + msgbox FiveIsland_MemorialPillar_Text_DontHaveRoomForIt + releaseall + end + +FiveIsland_MemorialPillar_EventScript_MemorialLemonadeAlreadyPlaced:: + msgbox FiveIsland_MemorialPillar_Text_HereLiesTectonix + releaseall + end + +FiveIsland_MemorialPillar_Text_MiloIntro:: + .string "I'm the eldest of the BIRD\n" + .string "BROTHERS.\p" + .string "The best thing about birds…\n" + .string "It has to be the beak.$" + +FiveIsland_MemorialPillar_Text_MiloDefeat:: + .string "Oh, so sharp!$" + +FiveIsland_MemorialPillar_Text_MiloPostBattle:: + .string "You can fly to FOUR ISLAND from\n" + .string "here.$" + +FiveIsland_MemorialPillar_Text_ChazIntro:: + .string "I'm the middle kid of the BIRD\n" + .string "BROTHERS.\p" + .string "The best thing about birds…\n" + .string "It has to be the wings.$" + +FiveIsland_MemorialPillar_Text_ChazDefeat:: + .string "Flap, flap!$" + +FiveIsland_MemorialPillar_Text_ChazPostBattle:: + .string "There was a really somber guy\n" + .string "over that way.$" + +FiveIsland_MemorialPillar_Text_HaroldIntro:: + .string "I'm the youngest of the BIRD\n" + .string "BROTHERS.\p" + .string "The best thing about birds…\n" + .string "It has to be the down.$" + +FiveIsland_MemorialPillar_Text_HaroldDefeat:: + .string "Down is so comfy…\n" + .string "It makes me drowsy…$" + +FiveIsland_MemorialPillar_Text_HaroldPostBattle:: + .string "It fills me with happiness when\n" + .string "bird POKéMON beg playfully…$" + +FiveIsland_MemorialPillar_Text_ScrubScrub:: + .string "Scrub, scrub…$" + +FiveIsland_MemorialPillar_Text_YourMonsLookHealthy:: + .string "Hello…\n" + .string "Your POKéMON look healthy…$" + +FiveIsland_MemorialPillar_Text_ThisIsWhereIBuriedMyOnix:: + .string "This is where I buried my ONIX…\n" + .string "It was named TECTONIX…$" + +FiveIsland_MemorialPillar_Text_HereLiesTectonixLemonadeOffering:: + .string "“Here lies TECTONIX” is engraved\n" + .string "on a boulder.\p" + .string "There is a LEMONADE placed as an\n" + .string "offering in front of the grave.$" + +FiveIsland_MemorialPillar_Text_LeaveAnotherLemonadeOffering:: + .string "Would you like to leave another\n" + .string "LEMONADE as an offering?$" + +FiveIsland_MemorialPillar_Text_PlacedCanOfLemonade:: + .string "{PLAYER} placed a can of LEMONADE\n" + .string "in front of the grave.$" + +FiveIsland_MemorialPillar_Text_ThankYouPleaseTakeThis:: + .string "Th-thank you…\p" + .string "That was my TECTONIX's favorite\n" + .string "drink…\p" + .string "I don't even know you, but your\n" + .string "act of kindness…\p" + .string "It's uplifted me a little.\p" + .string "Can you please take this as my\n" + .string "thanks?$" + +FiveIsland_MemorialPillar_Text_BeGoodToYourMonsToo:: + .string "Please be good to your POKéMON,\n" + .string "too.$" + +FiveIsland_MemorialPillar_Text_DontHaveRoomForIt:: + .string "If you don't have room for it,\n" + .string "I'll hold it for you till next time.$" + +FiveIsland_MemorialPillar_Text_StillHaveThingAsMyThanks:: + .string "Oh, it's you from that time…\p" + .string "I still have that thing I wanted\n" + .string "you to have as my thanks.$" + +FiveIsland_MemorialPillar_Text_ScrubScrubTectonix:: + .string "Scrub, scrub…\p" + .string "… … …\n" + .string "TECTONIX…$" + +FiveIsland_MemorialPillar_Text_HereLiesTectonix:: + .string "Boulders and rocks are neatly piled\n" + .string "up as a cairn.\p" + .string "“Here lies TECTONIX” is engraved\n" + .string "on a boulder.$" + diff --git a/data/maps/FiveIsland_PokemonCenter_1F/scripts.inc b/data/maps/FiveIsland_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..163787ef0c44 --- /dev/null +++ b/data/maps/FiveIsland_PokemonCenter_1F/scripts.inc @@ -0,0 +1,34 @@ +FiveIsland_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FiveIsland_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +FiveIsland_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_FIVE_ISLAND + end + +FiveIsland_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +FiveIsland_PokemonCenter_1F_EventScript_Chef:: + msgbox FiveIsland_PokemonCenter_1F_Text_OnMyWayToPrepareMeal, MSGBOX_NPC + end + +FiveIsland_PokemonCenter_1F_EventScript_CooltrainerF:: + msgbox FiveIsland_PokemonCenter_1F_Text_YoureOnQuestToCatchEveryMon, MSGBOX_NPC + end + +FiveIsland_PokemonCenter_1F_Text_OnMyWayToPrepareMeal:: + .string "I'm on my way to prepare a meal\n" + .string "for a certain high-society person.$" + +FiveIsland_PokemonCenter_1F_Text_YoureOnQuestToCatchEveryMon:: + .string "You're on a quest to catch every\n" + .string "single kind of POKéMON?\p" + .string "…How incredible. Please tell me if\n" + .string "you catch a strong one!$" + diff --git a/data/maps/FiveIsland_PokemonCenter_2F/scripts.inc b/data/maps/FiveIsland_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..f008eb3ac173 --- /dev/null +++ b/data/maps/FiveIsland_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +FiveIsland_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +FiveIsland_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +FiveIsland_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +FiveIsland_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/FiveIsland_ResortGorgeous/scripts.inc b/data/maps/FiveIsland_ResortGorgeous/scripts.inc new file mode 100644 index 000000000000..7341dfbf3670 --- /dev/null +++ b/data/maps/FiveIsland_ResortGorgeous/scripts.inc @@ -0,0 +1,138 @@ +FiveIsland_ResortGorgeous_MapScripts:: + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, FiveIsland_ResortGorgeous_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, FiveIsland_ResortGorgeous_OnFrame + .byte 0 + +FiveIsland_ResortGorgeous_OnWarp:: + map_script_2 VAR_MAP_SCENE_FIVE_ISLAND_RESORT_GORGEOUS, 1, FiveIsland_ResortGorgeous_EventScript_TurnPlayerNorth + .2byte 0 + +FiveIsland_ResortGorgeous_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +FiveIsland_ResortGorgeous_OnFrame:: + map_script_2 VAR_MAP_SCENE_FIVE_ISLAND_RESORT_GORGEOUS, 1, FiveIsland_ResortGorgeous_EventScript_SelphyReturnHomeScene + .2byte 0 + +FiveIsland_ResortGorgeous_EventScript_SelphyReturnHomeScene:: + lockall + textcolor NPC_TEXT_COLOR_FEMALE + msgbox FiveIsland_ResortGorgeous_Text_SelphyThanksYouMayGoNow + closemessage + applymovement LOCALID_RESORT_GORGEOUS_SELPHY, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + opendoor 39, 8 + waitdooranim + applymovement LOCALID_RESORT_GORGEOUS_SELPHY, FiveIsland_ResortGorgeous_Movement_SelphyEnterHome + waitmovement 0 + closedoor 39, 8 + waitdooranim + removeobject LOCALID_RESORT_GORGEOUS_SELPHY + clearflag FLAG_HIDE_RESORT_GORGEOUS_INSIDE_SELPHY + setvar VAR_MAP_SCENE_FIVE_ISLAND_RESORT_GORGEOUS, 2 + releaseall + end + +FiveIsland_ResortGorgeous_Movement_SelphyEnterHome:: + walk_up + set_invisible + step_end + +FiveIsland_ResortGorgeous_EventScript_SelphysHouseSign:: + msgbox FiveIsland_ResortGorgeous_Text_SelphysHouse, MSGBOX_SIGN + end + +FiveIsland_ResortGorgeous_Text_DaisyIntro:: + .string "With these hands, I will create\n" + .string "my victory!$" + +FiveIsland_ResortGorgeous_Text_DaisyDefeat:: + .string "The shame of this…\n" + .string "I'm red-faced…$" + +FiveIsland_ResortGorgeous_Text_DaisyPostBattle:: + .string "Uh-oh, my paint tubes have\n" + .string "scattered everywhere!$" + +FiveIsland_ResortGorgeous_Text_CelinaIntro:: + .string "Excuse me!\n" + .string "I'm trying to paint.\l" + .string "Please keep out of my sight!$" + +FiveIsland_ResortGorgeous_Text_CelinaDefeat:: + .string "This loss…\n" + .string "I feel like I'm whiting out…$" + +FiveIsland_ResortGorgeous_Text_CelinaPostBattle:: + .string "GILLIAN?\n" + .string "Please tilt your head slightly…\l" + .string "There! That's the look I want!$" + +FiveIsland_ResortGorgeous_Text_RaynaIntro:: + .string "Hmm…\n" + .string "The angle, it is not quite there…$" + +FiveIsland_ResortGorgeous_Text_RaynaDefeat:: + .string "Oh…\n" + .string "My feelings, they are blue…$" + +FiveIsland_ResortGorgeous_Text_RaynaPostBattle:: + .string "The sky and the sea…\n" + .string "They are so fickle.\p" + .string "Their changing expressions make\n" + .string "them difficult to capture.$" + +FiveIsland_ResortGorgeous_Text_JackiIntro:: + .string "I am visiting my friend's retreat,\n" + .string "if you must know.$" + +FiveIsland_ResortGorgeous_Text_JackiDefeat:: + .string "Oh, my, so strong.$" + +FiveIsland_ResortGorgeous_Text_JackiPostBattle:: + .string "I find it pleasurable to leisurely\n" + .string "battle in the gentle sea breeze.$" + +FiveIsland_ResortGorgeous_Text_GillianIntro:: + .string "I'm thinking of having a pool\n" + .string "made specially for POKéMON.$" + +FiveIsland_ResortGorgeous_Text_GillianDefeat:: + .string "Oh, my goodness gracious!$" + +FiveIsland_ResortGorgeous_Text_GillianPostBattle:: + .string "A pool would be nice, but I must\n" + .string "say, a sun-room may be sublime.$" + +FiveIsland_ResortGorgeous_Text_DestinIntro:: + .string "I'm a good runner.\n" + .string "I'm really fast!$" + +FiveIsland_ResortGorgeous_Text_DestinDefeat:: + .string "Oops!\n" + .string "I rushed things!$" + +FiveIsland_ResortGorgeous_Text_DestinPostBattle:: + .string "When I run with the wind, it feels\n" + .string "like I could fly!$" + +FiveIsland_ResortGorgeous_Text_TobyIntro:: + .string "I say, this marine life here at\n" + .string "this resort agrees with me.$" + +FiveIsland_ResortGorgeous_Text_TobyDefeat:: + .string "That's a shocker!\n" + .string "You must be joking.$" + +FiveIsland_ResortGorgeous_Text_TobyPostBattle:: + .string "Getting so serious over this…\n" + .string "How nonsensical.$" + +FiveIsland_ResortGorgeous_Text_SelphyThanksYouMayGoNow:: + .string "SELPHY: Thank you.\p" + .string "You may go now.$" + +FiveIsland_ResortGorgeous_Text_SelphysHouse:: + .string "SELPHY'S HOUSE$" + diff --git a/data/maps/FiveIsland_ResortGorgeous_House/scripts.inc b/data/maps/FiveIsland_ResortGorgeous_House/scripts.inc new file mode 100644 index 000000000000..e527ae97a4ea --- /dev/null +++ b/data/maps/FiveIsland_ResortGorgeous_House/scripts.inc @@ -0,0 +1,210 @@ +.equ SHOWN_REQUESTED_MON, FLAG_TEMP_2 + +FiveIsland_ResortGorgeous_House_MapScripts:: + .byte 0 + +FiveIsland_ResortGorgeous_House_EventScript_Selphy:: + lock + faceplayer + goto_if_set SHOWN_REQUESTED_MON, FiveIsland_ResortGorgeous_House_EventScript_JustFulfilledRequest + goto_if_eq VAR_RESORT_GORGEOUS_REQUESTED_MON, 0xFFFF, FiveIsland_ResortGorgeous_House_EventScript_RequestTookTooLong + goto_if_ne VAR_RESORT_GORGEOUS_REQUESTED_MON, SPECIES_NONE, FiveIsland_ResortGorgeous_House_EventScript_CheckForRequestedMon + msgbox FiveIsland_ResortGorgeous_House_Text_PleaseHearMyWish + goto FiveIsland_ResortGorgeous_House_EventScript_RequestMon + end + +FiveIsland_ResortGorgeous_House_EventScript_RequestMon:: + special SampleResortGorgeousMonAndReward + msgbox FiveIsland_ResortGorgeous_House_Text_WishToSeeMonPlease + release + end + +FiveIsland_ResortGorgeous_House_EventScript_RequestTookTooLong:: + msgbox FiveIsland_ResortGorgeous_House_Text_OhImTiredOfWaiting + goto FiveIsland_ResortGorgeous_House_EventScript_RequestMon + end + +FiveIsland_ResortGorgeous_House_EventScript_CheckForRequestedMon:: + copyvar VAR_0x8004, VAR_RESORT_GORGEOUS_REQUESTED_MON + specialvar VAR_RESULT, DoesPlayerPartyContainSpecies + goto_if_eq VAR_RESULT, TRUE, FiveIsland_ResortGorgeous_House_EventScript_ShowRequestedMon + goto FiveIsland_ResortGorgeous_House_EventScript_RequestMon + end + +FiveIsland_ResortGorgeous_House_EventScript_ShowRequestedMon:: + special SampleResortGorgeousMonAndReward + msgbox FiveIsland_ResortGorgeous_House_Text_MonYouCaughtForMeThankYou + addobject LOCALID_RESORT_GORGEOUS_HOUSE_BUTLER + applymovement LOCALID_RESORT_GORGEOUS_HOUSE_BUTLER, FiveIsland_ResortGorgeous_House_Movement_ButlerEnter + waitmovement 0 + textcolor NPC_TEXT_COLOR_MALE + msgbox FiveIsland_ResortGorgeous_House_Text_ButlerYesMyLady + applymovement LOCALID_RESORT_GORGEOUS_HOUSE_SELPHY, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + textcolor NPC_TEXT_COLOR_FEMALE + msgbox FiveIsland_ResortGorgeous_House_Text_SelphyGiveTokenOfAppreciation + textcolor NPC_TEXT_COLOR_MALE + msgbox FiveIsland_ResortGorgeous_House_Text_ButlerIShallDoAsYouBid + closemessage + call_if_eq VAR_FACING, DIR_NORTH, FiveIsland_ResortGorgeous_House_EventScript_ButlerApproachPlayerNorth + call_if_eq VAR_FACING, DIR_SOUTH, FiveIsland_ResortGorgeous_House_EventScript_ButlerApproachPlayerSouth + call_if_eq VAR_FACING, DIR_EAST, FiveIsland_ResortGorgeous_House_EventScript_ButlerApproachPlayerEast + call_if_eq VAR_FACING, DIR_WEST, FiveIsland_ResortGorgeous_House_EventScript_ButlerApproachPlayerWest + copyobjectxytoperm LOCALID_RESORT_GORGEOUS_HOUSE_BUTLER + msgbox FiveIsland_ResortGorgeous_House_Text_ButlerPleaseAcceptThisAsHerThanks + giveitem VAR_RESORT_GORGEOUS_REWARD + goto_if_eq VAR_RESULT, FALSE, FiveIsland_ResortGorgeous_House_EventScript_NoRoomForReward + setflag SHOWN_REQUESTED_MON + setvar VAR_RESORT_GORGEOUS_REQUESTED_MON, SPECIES_NONE + release + end + +FiveIsland_ResortGorgeous_House_EventScript_ButlerApproachPlayerNorth:: + applymovement LOCALID_RESORT_GORGEOUS_HOUSE_SELPHY, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_RESORT_GORGEOUS_HOUSE_BUTLER, FiveIsland_ResortGorgeous_House_Movement_ButlerApproachPlayerNorth + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +FiveIsland_ResortGorgeous_House_EventScript_ButlerApproachPlayerSouth:: + applymovement LOCALID_RESORT_GORGEOUS_HOUSE_BUTLER, FiveIsland_ResortGorgeous_House_Movement_ButlerApproachPlayerSouth + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +FiveIsland_ResortGorgeous_House_EventScript_ButlerApproachPlayerEast:: + applymovement LOCALID_RESORT_GORGEOUS_HOUSE_SELPHY, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_RESORT_GORGEOUS_HOUSE_BUTLER, FiveIsland_ResortGorgeous_House_Movement_ButlerApproachPlayerEast + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +FiveIsland_ResortGorgeous_House_EventScript_ButlerApproachPlayerWest:: + applymovement LOCALID_RESORT_GORGEOUS_HOUSE_BUTLER, FiveIsland_ResortGorgeous_House_Movement_ButlerApproachPlayerWest + waitmovement 0 + return + +FiveIsland_ResortGorgeous_House_EventScript_NoRoomForReward:: + textcolor NPC_TEXT_COLOR_MALE + msgbox FiveIsland_ResortGorgeous_House_Text_ButlerBagAppearsToBeFull + textcolor NPC_TEXT_COLOR_FEMALE + msgbox FiveIsland_ResortGorgeous_House_Text_OhHowDisappointing + setflag SHOWN_REQUESTED_MON + setvar VAR_RESORT_GORGEOUS_REQUESTED_MON, SPECIES_NONE + release + end + +FiveIsland_ResortGorgeous_House_EventScript_JustFulfilledRequest:: + msgbox FiveIsland_ResortGorgeous_House_Text_SelphyWishYouBestOfLuck + release + end + +FiveIsland_ResortGorgeous_House_Movement_ButlerApproachPlayerNorth:: + walk_left + walk_left + walk_left + walk_down + walk_down + walk_down + walk_in_place_faster_right + step_end + +FiveIsland_ResortGorgeous_House_Movement_ButlerApproachPlayerSouth:: + walk_left + walk_left + walk_in_place_faster_down + step_end + +FiveIsland_ResortGorgeous_House_Movement_ButlerApproachPlayerEast:: + walk_left + walk_left + walk_left + walk_down + step_end + +@ Very odd. If the player is talking to Selphy facing West, then the player has clipped through the table +@ In this case rather than approach the player the Butler walks up, which clips the Butler into a wall +FiveIsland_ResortGorgeous_House_Movement_ButlerApproachPlayerWest:: + walk_up + step_end + +FiveIsland_ResortGorgeous_House_Movement_ButlerEnter:: + walk_in_place_down + step_end + +@ Addressed as "Sebastian" but speaks only as "Butler" +FiveIsland_ResortGorgeous_House_EventScript_Butler:: + msgbox FiveIsland_ResortGorgeous_House_Text_LadySelphySmileHasBrillianceOfSun, MSGBOX_NPC + end + +FiveIsland_ResortGorgeous_House_Text_PleaseHearMyWish:: + .string "SELPHY: Oh?\n" + .string "Do I know you from somewhere?\p" + .string "Oh, but that doesn't matter.\p" + .string "I am exquisitely bored.\n" + .string "Please, hear my wish.$" + +FiveIsland_ResortGorgeous_House_Text_WishToSeeMonPlease:: + .string "I wish to see a POKéMON.\n" + .string "A darling {STR_VAR_1}.\p" + .string "I want to see one right away.\n" + .string "Please, make my wish come true.$" + +FiveIsland_ResortGorgeous_House_Text_OhImTiredOfWaiting:: + .string "SELPHY: Oh, I'm tired of this.\n" + .string "I'm tired of waiting for you.\p" + .string "I'll forgive you this time, but\n" + .string "please don't fail me next time.$" + +FiveIsland_ResortGorgeous_House_Text_MonYouCaughtForMeThankYou:: + .string "SELPHY: Oh, hello, there.\p" + .string "Oh, my gracious. That must be the\n" + .string "{STR_VAR_1} you caught for me.\p" + .string "Giggle…\n" + .string "I see a resemblance to you.\p" + .string "Thank you so kindly.\p" + .string "… … … … … …\n" + .string "Is something the matter?\p" + .string "You may leave.\p" + .string "… … … … … …\n" + .string "Oh, fine. I understand now.\p" + .string "SEBASTIAN!\n" + .string "I need you here this instant!$" + +FiveIsland_ResortGorgeous_House_Text_ButlerYesMyLady:: + .string "Butler: Yes, my lady.$" + +FiveIsland_ResortGorgeous_House_Text_SelphyGiveTokenOfAppreciation:: + .string "SELPHY: See to it that this person\n" + .string "is given a token of appreciation.$" + +FiveIsland_ResortGorgeous_House_Text_ButlerIShallDoAsYouBid:: + .string "Butler: I shall do as you bid,\n" + .string "my lady.$" + +FiveIsland_ResortGorgeous_House_Text_ButlerPleaseAcceptThisAsHerThanks:: + .string "Butler: I sincerely thank you for\n" + .string "pleasing Lady SELPHY.\p" + .string "Please accept this as her thanks…$" + +FiveIsland_ResortGorgeous_House_Text_ButlerBagAppearsToBeFull:: + .string "Butler: Your BAG appears to be\n" + .string "unfortunately full.$" + +FiveIsland_ResortGorgeous_House_Text_OhHowDisappointing:: + .string "Oh…\n" + .string "How disappointing.$" + +FiveIsland_ResortGorgeous_House_Text_SelphyWishYouBestOfLuck:: + .string "SELPHY: I wish you the best of\n" + .string "luck.$" + +FiveIsland_ResortGorgeous_House_Text_LadySelphySmileHasBrillianceOfSun:: + .string "Butler: The smile of Lady SELPHY\n" + .string "has the brilliance of the sun.\p" + .string "Please, I beg you to bring joy\n" + .string "to Lady SELPHY.$" + diff --git a/data/maps/FiveIsland_RocketWarehouse/scripts.inc b/data/maps/FiveIsland_RocketWarehouse/scripts.inc new file mode 100644 index 000000000000..004ea2db35d9 --- /dev/null +++ b/data/maps/FiveIsland_RocketWarehouse/scripts.inc @@ -0,0 +1,311 @@ +.equ PLAYER_X_POS, VAR_0x8004 +.equ PLAYER_Y_POS, VAR_0x8005 + +FiveIsland_RocketWarehouse_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, FiveIsland_RocketWarehouse_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, FiveIsland_RocketWarehouse_OnTransition + .byte 0 + +FiveIsland_RocketWarehouse_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_FIVE_ISLAND_ROCKET_WAREHOUSE + end + +FiveIsland_RocketWarehouse_OnLoad:: + call_if_defeated TRAINER_TEAM_ROCKET_ADMIN, FiveIsland_RocketWarehouse_EventScript_SetArrowsForReEntry + end + +FiveIsland_RocketWarehouse_EventScript_SetArrowsForReEntry:: + setmetatile 26, 20, METATILE_SilphCo_Arrow_Up, 0 + setmetatile 27, 20, METATILE_SilphCo_Arrow_Up, 0 + return + +FiveIsland_RocketWarehouse_EventScript_Cage:: + lockall + goto_if_set FLAG_DEFEATED_ROCKETS_IN_WAREHOUSE, FiveIsland_RocketWarehouse_EventScript_CageUnlocked + msgbox FiveIsland_RocketWarehouse_Text_ManyMonsLockedInPen + releaseall + end + +FiveIsland_RocketWarehouse_EventScript_CageUnlocked:: + msgbox FiveIsland_RocketWarehouse_Text_PenUnlockedMonsFled + releaseall + end + +FiveIsland_RocketWarehouse_EventScript_Computer:: + msgbox FiveIsland_RocketWarehouse_Text_ReportWithGraphsAndText, MSGBOX_SIGN + end + +FiveIsland_RocketWarehouse_EventScript_Admin2Trigger:: + lockall + applymovement LOCALID_WAREHOUSE_ADMIN2, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + setvar VAR_MAP_SCENE_ROCKET_WAREHOUSE, 1 + releaseall + end + +FiveIsland_RocketWarehouse_EventScript_Gideon:: + trainerbattle_single TRAINER_SCIENTIST_GIDEON, FiveIsland_RocketWarehouse_Text_GideonIntro, FiveIsland_RocketWarehouse_Text_GideonDefeat, FiveIsland_RocketWarehouse_EventScript_DefeatedGideon + goto_if_set FLAG_IS_CHAMPION, FiveIsland_RocketWarehouse_EventScript_MentionGiovannisKid + msgbox FiveIsland_RocketWarehouse_Text_GetLostLeaveMeBe, MSGBOX_AUTOCLOSE + end + +FiveIsland_RocketWarehouse_EventScript_MentionGiovannisKid:: + famechecker FAMECHECKER_GIOVANNI, 5 + msgbox FiveIsland_RocketWarehouse_Text_GiovannisKidHasRedHair, MSGBOX_AUTOCLOSE + end + +FiveIsland_RocketWarehouse_EventScript_DefeatedGideon:: + msgbox FiveIsland_RocketWarehouse_Text_GideonPostBattle + setflag FLAG_RECOVERED_SAPPHIRE + giveitem ITEM_SAPPHIRE + release + end + +FiveIsland_RocketWarehouse_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_47, FiveIsland_RocketWarehouse_Text_Grunt2Intro, FiveIsland_RocketWarehouse_Text_Grunt2Defeat + msgbox FiveIsland_RocketWarehouse_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +FiveIsland_RocketWarehouse_EventScript_Grunt3:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_48, FiveIsland_RocketWarehouse_Text_Grunt3Intro, FiveIsland_RocketWarehouse_Text_Grunt3Defeat + msgbox FiveIsland_RocketWarehouse_Text_Grunt3PostBattle, MSGBOX_AUTOCLOSE + end + +FiveIsland_RocketWarehouse_EventScript_Admin2:: + trainerbattle_single TRAINER_TEAM_ROCKET_ADMIN_2, FiveIsland_RocketWarehouse_Text_Admin2Intro, FiveIsland_RocketWarehouse_Text_Admin2Defeat, FiveIsland_RocketWarehouse_EventScript_DefeatedAdmin2 + msgbox FiveIsland_RocketWarehouse_Text_Admin2PostBattle, MSGBOX_AUTOCLOSE + end + +FiveIsland_RocketWarehouse_EventScript_DefeatedAdmin2:: + getplayerxy PLAYER_X_POS, PLAYER_Y_POS + call_if_le PLAYER_X_POS, 24, FiveIsland_RocketWarehouse_EventScript_PlayerFaceAdmin2 + msgbox FiveIsland_RocketWarehouse_Text_Admin2PostBattle + closemessage + fadescreen FADE_TO_BLACK + removeobject LOCALID_WAREHOUSE_GRUNT2 + removeobject LOCALID_WAREHOUSE_GRUNT3 + removeobject LOCALID_WAREHOUSE_ADMIN2 + removeobject LOCALID_WAREHOUSE_ADMIN1 + setflag FLAG_HIDE_FIVE_ISLAND_ROCKETS + fadescreen FADE_FROM_BLACK + setvar VAR_MAP_SCENE_ROCKET_WAREHOUSE, 1 + setflag FLAG_DEFEATED_ROCKETS_IN_WAREHOUSE + release + end + +FiveIsland_RocketWarehouse_EventScript_PlayerFaceAdmin2:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + return + +FiveIsland_RocketWarehouse_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_42, FiveIsland_RocketWarehouse_Text_Grunt1Intro, FiveIsland_RocketWarehouse_Text_Grunt1Defeat + msgbox FiveIsland_RocketWarehouse_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +FiveIsland_RocketWarehouse_EventScript_Admin1:: + trainerbattle_single TRAINER_TEAM_ROCKET_ADMIN, FiveIsland_RocketWarehouse_Text_Admin1Intro, FiveIsland_RocketWarehouse_Text_Admin1Defeat, FiveIsland_RocketWarehouse_EventScript_DefeatedAdmin1 + msgbox FiveIsland_RocketWarehouse_Text_MadeItSoYouCanComeBackThrough, MSGBOX_AUTOCLOSE + end + +FiveIsland_RocketWarehouse_EventScript_DefeatedAdmin1:: + getplayerxy PLAYER_X_POS, PLAYER_Y_POS + specialvar VAR_RESULT, GetPlayerFacingDirection + call_if_eq VAR_RESULT, DIR_NORTH, FiveIsland_RocketWarehouse_EventScript_PlayerFaceAdmin1 + msgbox FiveIsland_RocketWarehouse_Text_Admin1PostBattle + closemessage + call_if_le PLAYER_X_POS, 24, FiveIsland_RocketWarehouse_EventScript_AdminWalkToSwitchFar + call_if_eq PLAYER_X_POS, 25, FiveIsland_RocketWarehouse_EventScript_AdminWalkToSwitch + call_if_eq PLAYER_X_POS, 26, FiveIsland_RocketWarehouse_EventScript_AdminFaceSwitch + call_if_eq PLAYER_X_POS, 27, FiveIsland_RocketWarehouse_EventScript_AdminFaceSwitch + playse SE_PIN + call FiveIsland_RocketWarehouse_EventScript_SetArrowsForReEntry + special DrawWholeMapView + waitse + call_if_le PLAYER_X_POS, 24, FiveIsland_RocketWarehouse_EventScript_AdminFacePlayerLeft + call_if_eq PLAYER_X_POS, 25, FiveIsland_RocketWarehouse_EventScript_AdminFacePlayerLeft + call_if_eq PLAYER_X_POS, 26, FiveIsland_RocketWarehouse_EventScript_AdminFacePlayerLeft + call_if_eq PLAYER_X_POS, 27, FiveIsland_RocketWarehouse_EventScript_AdminFacePlayerDown + msgbox FiveIsland_RocketWarehouse_Text_MadeItSoYouCanComeBackThrough + release + end + +FiveIsland_RocketWarehouse_EventScript_PlayerFaceAdmin1:: + goto_if_eq PLAYER_X_POS, 27, Common_EventScript_NopReturn + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + return + +FiveIsland_RocketWarehouse_EventScript_AdminWalkToSwitchFar:: + applymovement LOCALID_WAREHOUSE_ADMIN1, FiveIsland_RocketWarehouse_Movement_AdminWalkToSwitchFar + waitmovement 0 + return + +FiveIsland_RocketWarehouse_EventScript_AdminWalkToSwitch:: + applymovement LOCALID_WAREHOUSE_ADMIN1, FiveIsland_RocketWarehouse_Movement_AdminWalkToSwitch + waitmovement 0 + return + +FiveIsland_RocketWarehouse_EventScript_AdminFaceSwitch:: + applymovement LOCALID_WAREHOUSE_ADMIN1, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +FiveIsland_RocketWarehouse_EventScript_AdminFacePlayerLeft:: + applymovement LOCALID_WAREHOUSE_ADMIN1, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +FiveIsland_RocketWarehouse_EventScript_AdminFacePlayerDown:: + applymovement LOCALID_WAREHOUSE_ADMIN1, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +FiveIsland_RocketWarehouse_Movement_AdminWalkToSwitchFar:: + walk_right + walk_right + walk_in_place_faster_up + step_end + +FiveIsland_RocketWarehouse_Movement_AdminWalkToSwitch:: + walk_right + walk_in_place_faster_up + step_end + +FiveIsland_RocketWarehouse_Text_ManyMonsLockedInPen:: + .string "There are many POKéMON locked\n" + .string "away in the pen…$" + +FiveIsland_RocketWarehouse_Text_PenUnlockedMonsFled:: + .string "The pen door is unlocked.\n" + .string "The POKéMON appear to have fled.$" + +FiveIsland_RocketWarehouse_Text_Grunt2Intro:: + .string "Did you come here knowing it's\n" + .string "TEAM ROCKET's WAREHOUSE?$" + +FiveIsland_RocketWarehouse_Text_Grunt2Defeat:: + .string "What do you think you're doing?!$" + +FiveIsland_RocketWarehouse_Text_Grunt2PostBattle:: + .string "TEAM ROCKET broke up?\n" + .string "What planet are you from?$" + +FiveIsland_RocketWarehouse_Text_Grunt1Intro:: + .string "Oh, now your POKéMON look strong.\n" + .string "You're willing to sell them?\p" + .string "Oh?\n" + .string "You wanted to battle?$" + +FiveIsland_RocketWarehouse_Text_Grunt1Defeat:: + .string "Oh, but…\n" + .string "Too much!$" + +FiveIsland_RocketWarehouse_Text_Grunt1PostBattle:: + .string "We can give you a great price.\n" + .string "Sell us your POKéMON!$" + +FiveIsland_RocketWarehouse_Text_Grunt3Intro:: + .string "I got word about you from the\n" + .string "others.\p" + .string "But there's no way a kid like you'd\n" + .string "know our BOSS GIOVANNI!$" + +FiveIsland_RocketWarehouse_Text_Grunt3Defeat:: + .string "Don't…you…dare…laugh…$" + +FiveIsland_RocketWarehouse_Text_Grunt3PostBattle:: + .string "Don't mess in the doings of adults,\n" + .string "you jumped-up pip-squeak!$" + +FiveIsland_RocketWarehouse_Text_Admin1Intro:: + .string "I don't know or care if what I'm\n" + .string "doing is right or wrong…\p" + .string "I just put my faith in GIOVANNI\n" + .string "and do as I am told.$" + +FiveIsland_RocketWarehouse_Text_Admin1Defeat:: + .string "I…\n" + .string "I'm shattered…$" + +FiveIsland_RocketWarehouse_Text_Admin1PostBattle:: + .string "You're doing things according to\n" + .string "your beliefs and morals.\p" + .string "I understand now…$" + +FiveIsland_RocketWarehouse_Text_MadeItSoYouCanComeBackThrough:: + .string "I've made it so you can come back\n" + .string "in through there.\p" + .string "Why don't you go get rested and\n" + .string "refreshed for what lies ahead?\p" + .string "The ADMIN after me outranks me\n" + .string "thoroughly as a TRAINER.\p" + .string "You'd better steel yourself for one\n" + .string "harsh challenge.$" + +FiveIsland_RocketWarehouse_Text_Admin2Intro:: + .string "That's quite enough of you \n" + .string "playing the hero, kid.\p" + .string "Spreading lies about how TEAM\n" + .string "ROCKET has disbanded…\p" + .string "It's such an obvious attempt to\n" + .string "cause confusion in our ranks.\p" + .string "Fortunately, we're not so ignorant\n" + .string "to fall for the lies of a child!\p" + .string "And now, I'll show you how scary\n" + .string "an angry adult can be!$" + +FiveIsland_RocketWarehouse_Text_Admin2Defeat:: + .string "Urgh…\n" + .string "You were too strong…\p" + .string "…\n" + .string "Th-that's GIOVANNI's BADGE!\p" + .string "So it's true?\n" + .string "TEAM ROCKET really has disbanded?$" + +FiveIsland_RocketWarehouse_Text_Admin2PostBattle:: + .string "We will abandon this WAREHOUSE…\p" + .string "But don't think this is over.\n" + .string "I won't let this be the end.\p" + .string "I will find GIOVANNI.\n" + .string "And I will resurrect TEAM ROCKET!\l" + .string "I will…\p" + .string "Until then, farewell!$" + +FiveIsland_RocketWarehouse_Text_ReportWithGraphsAndText:: + .string "A report with graphs and text is on\n" + .string "the PC monitor.\p" + .string "“The Influence of Magnetic Waves\n" + .string "on POKéMON Evolution”…\p" + .string "… … … … … …\p" + .string "It's too difficult to understand…$" + +FiveIsland_RocketWarehouse_Text_GideonIntro:: + .string "I almost managed to sell the\n" + .string "SAPPHIRE for huge money…\p" + .string "Then, you just had to come along\n" + .string "and blow the whole deal apart!\p" + .string "Fufu… Fufufufu…\n" + .string "There's no forgiveness for you!$" + +FiveIsland_RocketWarehouse_Text_GideonDefeat:: + .string "Gah! Darn!\n" + .string "Darn! Darn!$" + +FiveIsland_RocketWarehouse_Text_GideonPostBattle:: + .string "If I can't sell it, it's worthless!\n" + .string "Go ahead, take it!$" + +FiveIsland_RocketWarehouse_Text_GetLostLeaveMeBe:: + .string "What do you want now?\n" + .string "Go on, get lost, leave me be.$" + +FiveIsland_RocketWarehouse_Text_GiovannisKidHasRedHair:: + .string "What, you again?\p" + .string "You… You're not GIOVANNI's kid,\n" + .string "are you?\p" + .string "No, that can't be right!\n" + .string "GIOVANNI's kid has red hair.\p" + .string "You don't have any reasons for\n" + .string "bugging me. Leave me alone!$" + diff --git a/data/maps/FiveIsland_WaterLabyrinth/scripts.inc b/data/maps/FiveIsland_WaterLabyrinth/scripts.inc new file mode 100644 index 000000000000..5df96dc9c795 --- /dev/null +++ b/data/maps/FiveIsland_WaterLabyrinth/scripts.inc @@ -0,0 +1,126 @@ +FiveIsland_WaterLabyrinth_MapScripts:: + .byte 0 + +FiveIsland_WaterLabyrinth_EventScript_EggGentleman:: + lock + faceplayer + goto_if_set FLAG_GOT_TOGEPI_EGG, FiveIsland_WaterLabyrinth_EventScript_PostEggComment + goto_if_set FLAG_NO_ROOM_FOR_TOGEPI_EGG, FiveIsland_WaterLabyrinth_EventScript_ReturnForEgg + msgbox FiveIsland_WaterLabyrinth_Text_LetMeTakeLookAtMons + specialvar VAR_RESULT, GetLeadMonFriendship + goto_if_eq VAR_RESULT, 6, FiveIsland_WaterLabyrinth_EventScript_LeadMonMaxFriendship + msgbox FiveIsland_WaterLabyrinth_Text_HmmISeeIsee + release + end + +FiveIsland_WaterLabyrinth_EventScript_MonDaisyComment:: + famechecker FAMECHECKER_DAISY, 2 + msgbox FiveIsland_WaterLabyrinth_Text_CuteMonRemindsMeOfDaisy + release + end + +FiveIsland_WaterLabyrinth_EventScript_LeadMonMaxFriendship:: + msgbox FiveIsland_WaterLabyrinth_Text_TreatMonRightHaveThis + goto FiveIsland_WaterLabyrinth_EventScript_TryGiveEgg + end + +FiveIsland_WaterLabyrinth_EventScript_TryGiveEgg:: + getpartysize + goto_if_eq VAR_RESULT, PARTY_SIZE, FiveIsland_WaterLabyrinth_EventScript_NoRoomForEgg + setflag FLAG_GOT_TOGEPI_EGG + giveegg SPECIES_TOGEPI + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_LEVEL_UP + message FiveIsland_WaterLabyrinth_Text_ReceivedEggFromMan + waitfanfare + waitmessage + call EventScript_RestorePrevTextColor + goto FiveIsland_WaterLabyrinth_EventScript_PostEggComment + end + +@ If the player has a Togepi/Togetic from this game (assumed to be the one the man gave you) then comment on it +@ Otherwise make normal comment +FiveIsland_WaterLabyrinth_EventScript_PostEggComment:: + bufferspeciesname STR_VAR_2, SPECIES_TOGEPI + setvar VAR_0x8004, SPECIES_TOGEPI + specialvar VAR_RESULT, PlayerPartyContainsSpeciesWithPlayerID + goto_if_eq VAR_RESULT, TRUE, FiveIsland_WaterLabyrinth_EventScript_MonDaisyComment + bufferspeciesname STR_VAR_2, SPECIES_TOGETIC + setvar VAR_0x8004, SPECIES_TOGETIC + specialvar VAR_RESULT, PlayerPartyContainsSpeciesWithPlayerID + goto_if_eq VAR_RESULT, TRUE, FiveIsland_WaterLabyrinth_EventScript_MonDaisyComment + msgbox FiveIsland_WaterLabyrinth_Text_GladIMetSomeoneLikeYou + release + end + +FiveIsland_WaterLabyrinth_EventScript_NoRoomForEgg:: + setflag FLAG_NO_ROOM_FOR_TOGEPI_EGG + msgbox FiveIsland_WaterLabyrinth_Text_DontHaveSpaceInYourParty + release + end + +FiveIsland_WaterLabyrinth_EventScript_ReturnForEgg:: + goto FiveIsland_WaterLabyrinth_EventScript_TryGiveEgg + end + +FiveIsland_WaterLabyrinth_Text_LetMeTakeLookAtMons:: + .string "You travel all over the place,\n" + .string "don't you?\p" + .string "You're not driving your POKéMON\n" + .string "too harshly, are you?\p" + .string "Let me take a look.\n" + .string "… … … … … …$" + +FiveIsland_WaterLabyrinth_Text_HmmISeeIsee:: + .string "Ah, hmm…\n" + .string "I see, I see…$" + +FiveIsland_WaterLabyrinth_Text_TreatMonRightHaveThis:: + .string "Oh, impressive.\n" + .string "You treat your POKéMON right.\p" + .string "I think you can be entrusted with\n" + .string "this.\p" + .string "Please, I'd like you to have this.$" + +FiveIsland_WaterLabyrinth_Text_ReceivedEggFromMan:: + .string "{PLAYER} received an EGG\n" + .string "from the man!$" + +FiveIsland_WaterLabyrinth_Text_DontHaveSpaceInYourParty:: + .string "…Unfortunately, you don't have\n" + .string "space for this in your party.\p" + .string "You'd better come back for it\n" + .string "another time.$" + +@ Unused +FiveIsland_WaterLabyrinth_Text_YouveComeBackForTheEgg:: + .string "やあ\n" + .string "タマゴを もらいに\l" + .string "きて くれたんだね$" + +FiveIsland_WaterLabyrinth_Text_GladIMetSomeoneLikeYou:: + .string "I received that EGG while I was\n" + .string "traveling.\p" + .string "I'm glad I met someone like you.$" + +FiveIsland_WaterLabyrinth_Text_CuteMonRemindsMeOfDaisy:: + .string "Oh, hello.\n" + .string "That's a cute {STR_VAR_2}.\p" + .string "Seeing it reminds me of a sweet \n" + .string "little girl I met while traveling.\p" + .string "She was gently grooming POKéMON…\n" + .string "She was a little angel.\p" + .string "That little girl's name…\n" + .string "I think it was DAISY.$" + +FiveIsland_WaterLabyrinth_Text_AlizeIntro:: + .string "This is an excellent environment\n" + .string "for raising POKéMON.$" + +FiveIsland_WaterLabyrinth_Text_AlizeDefeat:: + .string "Your POKéMON are growing up\n" + .string "admirably well!$" + +FiveIsland_WaterLabyrinth_Text_AlizePostBattle:: + .string "You know, I think you have the\n" + .string "talent to be a good BREEDER.$" diff --git a/data/maps/FourIsland/scripts.inc b/data/maps/FourIsland/scripts.inc new file mode 100644 index 000000000000..9ba78470fd9c --- /dev/null +++ b/data/maps/FourIsland/scripts.inc @@ -0,0 +1,218 @@ +FourIsland_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FourIsland_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, FourIsland_OnFrame + .byte 0 + +FourIsland_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_FOUR_ISLAND + call_if_eq VAR_MAP_SCENE_FOUR_ISLAND, 0, FourIsland_EventScript_ShowRival + call FourIsland_EventScript_TrySetDayCareManPos + end + +FourIsland_EventScript_ShowRival:: + clearflag FLAG_HIDE_FOUR_ISLAND_RIVAL + return + +FourIsland_EventScript_TrySetDayCareManPos:: + goto_if_unset FLAG_PENDING_DAYCARE_EGG, FourIsland_EventScript_EndSetDayCareManPos + setobjectxyperm LOCALID_FOUR_ISLAND_DAYCARE_MAN, 16, 14 +FourIsland_EventScript_EndSetDayCareManPos:: + return + +FourIsland_OnFrame:: + map_script_2 VAR_MAP_SCENE_FOUR_ISLAND, 0, FourIsland_EventScript_RivalScene + .2byte 0 + +FourIsland_EventScript_RivalScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_FOUR_ISLAND_RIVAL, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + applymovement LOCALID_FOUR_ISLAND_RIVAL, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_FOUR_ISLAND_RIVAL, Common_Movement_Delay48 + waitmovement 0 + delay 25 + applymovement LOCALID_FOUR_ISLAND_RIVAL, FourIsland_Movement_RivalApproach + waitmovement 0 + msgbox FourIsland_Text_RivalAlreadyGotEggBeSmellingYa + closemessage + applymovement LOCALID_PLAYER, FourIsland_Movement_PlayerWatchRivalExit + applymovement LOCALID_FOUR_ISLAND_RIVAL, FourIsland_Movement_RivalExit + waitmovement 0 + fadedefaultbgm + playse SE_EXIT + delay 35 + removeobject LOCALID_FOUR_ISLAND_RIVAL + setvar VAR_MAP_SCENE_FOUR_ISLAND, 1 + releaseall + end + +FourIsland_Movement_RivalApproach:: + walk_right + walk_right + walk_down + walk_down + step_end + +FourIsland_Movement_RivalExit:: + delay_16 + delay_4 + walk_down + step_end + +FourIsland_Movement_PlayerWatchRivalExit:: + walk_left + walk_in_place_faster_right + step_end + +FourIsland_EventScript_DaycareMan:: + lock + faceplayer + special GetDaycareMonNicknames + specialvar VAR_RESULT, GetDaycareState + goto_if_eq VAR_RESULT, DAYCARE_EGG_WAITING, FourIsland_EventScript_DaycareEggWaiting + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, FourIsland_EventScript_CheckOnOneMon + goto_if_eq VAR_RESULT, DAYCARE_TWO_MONS, FourIsland_EventScript_CheckOnTwoMons + msgbox DayCare_Text_ImDaycareManSpeakToMyWife + release + end + +FourIsland_EventScript_DaycareEggWaiting:: + msgbox DayCare_Text_DoYouWantEgg, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_EventScript_DaycareAcceptEgg + msgbox DayCare_Text_IWillKeepDoYouWantIt, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_EventScript_DaycareAcceptEgg + msgbox DayCare_Text_IllKeepIt + clearflag FLAG_PENDING_DAYCARE_EGG + special RejectEggFromDayCare + release + end + +FourIsland_EventScript_DaycareAcceptEgg:: + specialvar VAR_RESULT, CalculatePlayerPartyCount + goto_if_ne VAR_RESULT, PARTY_SIZE, FourIsland_EventScript_DaycareReceivedEgg + msgbox DayCare_Text_YouHaveNoRoomForIt + release + end + +FourIsland_EventScript_DaycareReceivedEgg:: + textcolor NPC_TEXT_COLOR_NEUTRAL + message DayCare_Text_ReceivedEgg + call EventScript_RestorePrevTextColor + playfanfare MUS_LEVEL_UP + waitfanfare + waitbuttonpress + msgbox DayCare_Text_TakeGoodCareOfIt + special GiveEggFromDaycare + clearflag FLAG_PENDING_DAYCARE_EGG + release + end + +FourIsland_EventScript_CheckOnOneMon:: + special GetDaycareMonNicknames + msgbox DayCare_Text_YourMonIsDoingFine + release + end + +FourIsland_EventScript_CheckOnTwoMons:: + special GetDaycareMonNicknames + msgbox DayCare_Text_YourMonsAreDoingFine + special SetDaycareCompatibilityString + special ShowFieldMessageStringVar4 + waitmessage + waitbuttonpress + release + end + +FourIsland_EventScript_OldWoman:: + lock + faceplayer + goto_if_set FLAG_IS_CHAMPION, FourIsland_EventScript_OldWomanLoreleiLeft + msgbox FourIsland_Text_LoreleiHasReturned + release + end + +FourIsland_EventScript_OldWomanLoreleiLeft:: + famechecker FAMECHECKER_LORELEI, 5 + msgbox FourIsland_Text_LoreleiMetLaprasAsChild + release + end + +FourIsland_EventScript_LittleGirl:: + lock + faceplayer + famechecker FAMECHECKER_LORELEI, 4 + msgbox FourIsland_Text_LoreleiHasLotsOfStuffedDolls + release + end + +FourIsland_EventScript_FatMan:: + msgbox FourIsland_Text_MadeSlushieUsingIcefallCaveIce, MSGBOX_NPC + end + +FourIsland_EventScript_IslandSign:: + msgbox FourIsland_Text_IslandSign, MSGBOX_SIGN + end + +FourIsland_EventScript_LoreleisHouseSign:: + msgbox FourIsland_Text_LoreleisHouse, MSGBOX_SIGN + end + +FourIsland_Text_IslandSign:: + .string "FOUR ISLAND\n" + .string "The Warm, Blue, Floe Island$" + +FourIsland_Text_LoreleiHasReturned:: + .string "LORELEI has returned.\p" + .string "Did she find the city life too\n" + .string "stressful, I wonder?$" + +FourIsland_Text_LoreleiMetLaprasAsChild:: + .string "LORELEI has gone back.\p" + .string "The LAPRAS she has, I imagine it\n" + .string "to be the one she met as a child.\p" + .string "I believe it was in ICEFALL CAVE\n" + .string "that she caught it.\p" + .string "Perhaps that POKéMON has been with\n" + .string "her ever since.$" + +FourIsland_Text_RivalAlreadyGotEggBeSmellingYa:: + .string "{RIVAL}: Hey!\n" + .string "{PLAYER}!\p" + .string "What are you doing here in the\n" + .string "SEVII ISLANDS?\p" + .string "You should quit copying me,\n" + .string "you know?\p" + .string "Anyways, I already got my POKéMON\n" + .string "EGG, so I'm done with this island.\p" + .string "Heh, I bet you don't even know\n" + .string "about POKéMON EGGS.\p" + .string "You'll never fill your NATIONAL\n" + .string "POKéDEX that way.\p" + .string "By the way, I saw someone we both\n" + .string "know on this island.\p" + .string "Why don't you go look around if\n" + .string "it makes you curious?\p" + .string "Me, I don't have the time to\n" + .string "waste.\p" + .string "Be smelling ya!$" + +FourIsland_Text_LoreleiHasLotsOfStuffedDolls:: + .string "Oh, you found me!\n" + .string "Please don't tell LORELEI.\p" + .string "Did you know that LORELEI has lots\n" + .string "and lots of stuffed dolls?\p" + .string "Every time she comes back to\n" + .string "FOUR ISLAND, her collection grows!$" + +FourIsland_Text_MadeSlushieUsingIcefallCaveIce:: + .string "Ooh, chilly!\p" + .string "I made a slushie using ice I\n" + .string "shaved inside ICEFALL CAVE.\p" + .string "It's chilly and tasty!$" + +FourIsland_Text_LoreleisHouse:: + .string "LORELEI'S HOUSE$" + diff --git a/data/maps/FourIsland_Harbor/scripts.inc b/data/maps/FourIsland_Harbor/scripts.inc new file mode 100644 index 000000000000..ad85a3bce56a --- /dev/null +++ b/data/maps/FourIsland_Harbor/scripts.inc @@ -0,0 +1,11 @@ +FourIsland_Harbor_MapScripts:: + .byte 0 + +FourIsland_Harbor_EventScript_Sailor:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_FOUR_ISLAND + goto EventScript_ChooseDestFromIsland + end diff --git a/data/maps/FourIsland_House1/scripts.inc b/data/maps/FourIsland_House1/scripts.inc new file mode 100644 index 000000000000..9cdf2c5d37ea --- /dev/null +++ b/data/maps/FourIsland_House1/scripts.inc @@ -0,0 +1,11 @@ +FourIsland_House1_MapScripts:: + .byte 0 + +FourIsland_House1_EventScript_FatMan:: + msgbox FourIsland_House1_Text_YoureAwfullyHeavy, MSGBOX_NPC + end + +FourIsland_House1_Text_YoureAwfullyHeavy:: + .string "There! Boing!\n" + .string "You're awfully heavy!$" + diff --git a/data/maps/FourIsland_House2/scripts.inc b/data/maps/FourIsland_House2/scripts.inc new file mode 100644 index 000000000000..13f6ec526860 --- /dev/null +++ b/data/maps/FourIsland_House2/scripts.inc @@ -0,0 +1,2 @@ +FourIsland_House2_MapScripts:: + .byte 0 diff --git a/data/maps/FourIsland_IcefallCave_1F/scripts.inc b/data/maps/FourIsland_IcefallCave_1F/scripts.inc new file mode 100644 index 000000000000..ec6fd2ea835c --- /dev/null +++ b/data/maps/FourIsland_IcefallCave_1F/scripts.inc @@ -0,0 +1,33 @@ +FourIsland_IcefallCave_1F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, FourIsland_IcefallCave_1F_OnResume + map_script MAP_SCRIPT_ON_LOAD, FourIsland_IcefallCave_1F_OnLoad + map_script MAP_SCRIPT_ON_FRAME_TABLE, FourIsland_IcefallCave_1F_OnFrame + .byte 0 + +FourIsland_IcefallCave_1F_OnResume:: + setstepcallback STEP_CB_ICEFALL_CAVE + end + +FourIsland_IcefallCave_1F_OnLoad:: + special SetIcefallCaveCrackedIceMetatiles + end + +FourIsland_IcefallCave_1F_OnFrame:: + map_script_2 VAR_TEMP_1, 1, FourIsland_IcefallCave_1F_EventScript_FallDownHole + .2byte 0 + +FourIsland_IcefallCave_1F_EventScript_FallDownHole:: + lockall + delay 20 + applymovement LOCALID_PLAYER, FourIsland_IcefallCave_1F_Movement_SetInvisible + waitmovement 0 + playse SE_FALL + delay 60 + warphole MAP_FOUR_ISLAND_ICEFALL_CAVE_B1F + waitstate + releaseall + end + +FourIsland_IcefallCave_1F_Movement_SetInvisible:: + set_invisible + step_end diff --git a/data/maps/FourIsland_IcefallCave_B1F/scripts.inc b/data/maps/FourIsland_IcefallCave_B1F/scripts.inc new file mode 100644 index 000000000000..1d60dd7397ea --- /dev/null +++ b/data/maps/FourIsland_IcefallCave_B1F/scripts.inc @@ -0,0 +1,2 @@ +FourIsland_IcefallCave_B1F_MapScripts:: + .byte 0 diff --git a/data/maps/FourIsland_IcefallCave_Back/scripts.inc b/data/maps/FourIsland_IcefallCave_Back/scripts.inc new file mode 100644 index 000000000000..a4bcfb791c73 --- /dev/null +++ b/data/maps/FourIsland_IcefallCave_Back/scripts.inc @@ -0,0 +1,265 @@ +FourIsland_IcefallCave_Back_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FourIsland_IcefallCave_Back_OnTransition + .byte 0 + +FourIsland_IcefallCave_Back_OnTransition:: + call_if_eq VAR_MAP_SCENE_ICEFALL_CAVE_BACK, 1, FourIsland_IcefallCave_Back_EventScript_HideLorelei + end + +FourIsland_IcefallCave_Back_EventScript_HideLorelei:: + setflag FLAG_HIDE_ICEFALL_CAVE_LORELEI + return + +FourIsland_IcefallCave_Back_EventScript_LoreleiRocketsScene:: + lockall + textcolor NPC_TEXT_COLOR_FEMALE + msgbox FourIsland_IcefallCave_Back_Text_LoreleiKeepHandsOffMons + applymovement LOCALID_ICEFALL_ROCKET1, FourIsland_IcefallCave_Back_Movement_WalkInPlaceDown + waitmovement 0 + textcolor NPC_TEXT_COLOR_MALE + msgbox FourIsland_IcefallCave_Back_Text_ShutItLadyLeaveUsBe + closemessage + playse SE_PIN + applymovement LOCALID_ICEFALL_LORELEI, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_ICEFALL_LORELEI, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + applymovement LOCALID_ICEFALL_LORELEI, Common_Movement_Delay48 + waitmovement 0 + textcolor NPC_TEXT_COLOR_FEMALE + msgbox FourIsland_IcefallCave_Back_Text_LoreleiPlayerHelpMeKickPoachersOut + closemessage + applymovement LOCALID_ICEFALL_LORELEI, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + delay 18 + applymovement LOCALID_ICEFALL_LORELEI, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + delay 35 + applymovement LOCALID_ICEFALL_ROCKET3, FourIsland_IcefallCave_Back_Movement_Rocket3FaceLorelei + applymovement LOCALID_ICEFALL_LORELEI, FourIsland_IcefallCave_Back_Movement_LoreleiToRockets + applymovement LOCALID_PLAYER, FourIsland_IcefallCave_Back_Movement_PlayerToRockets + waitmovement 0 + applymovement LOCALID_ICEFALL_ROCKET2, FourIsland_IcefallCave_Back_Movement_WalkInPlaceDown + waitmovement 0 + playbgm MUS_RG_ENCOUNTER_ROCKET, 0 + textcolor NPC_TEXT_COLOR_MALE + msgbox FourIsland_IcefallCave_Back_Text_GruntIntro + setvar VAR_LAST_TALKED, LOCALID_ICEFALL_ROCKET3 + trainerbattle_no_intro TRAINER_TEAM_ROCKET_GRUNT_45, FourIsland_IcefallCave_Back_Text_GruntDefeat + applymovement LOCALID_ICEFALL_LORELEI, FourIsland_IcefallCave_Back_Movement_WalkInPlaceUp + waitmovement 0 + textcolor NPC_TEXT_COLOR_FEMALE + msgbox FourIsland_IcefallCave_Back_Text_LoreleiWhereHaveYouTakenMons + textcolor NPC_TEXT_COLOR_MALE + msgbox FourIsland_IcefallCave_Back_Text_NotTellingYouThat + textcolor NPC_TEXT_COLOR_FEMALE + message FourIsland_IcefallCave_Back_Text_LoreleiWellDeepFreezeYou + waitmessage + waitse + playmoncry SPECIES_LAPRAS, CRY_MODE_ENCOUNTER + waitbuttonpress + waitmoncry + applymovement LOCALID_ICEFALL_ROCKET1, FourIsland_IcefallCave_Back_Movement_Rocket1ReactToThreat + waitmovement 0 + textcolor NPC_TEXT_COLOR_MALE + msgbox FourIsland_IcefallCave_Back_Text_OkayRocketWareHouseFiveIsland + closemessage + applymovement LOCALID_ICEFALL_LORELEI, FourIsland_IcefallCave_Back_Movement_LoreleiWatchRocketsExit + applymovement LOCALID_PLAYER, FourIsland_IcefallCave_Back_Movement_PlayerWatchRocketsExit + applymovement LOCALID_ICEFALL_ROCKET1, FourIsland_IcefallCave_Back_Movement_Rocket1Exit + applymovement LOCALID_ICEFALL_ROCKET2, FourIsland_IcefallCave_Back_Movement_Rocket2Exit + applymovement LOCALID_ICEFALL_ROCKET3, FourIsland_IcefallCave_Back_Movement_Rocket3Exit + waitmovement 0 + removeobject LOCALID_ICEFALL_ROCKET1 + removeobject LOCALID_ICEFALL_ROCKET2 + removeobject LOCALID_ICEFALL_ROCKET3 + delay 50 + applymovement LOCALID_ICEFALL_LORELEI, FourIsland_IcefallCave_Back_Movement_LoreleiWalkToPlayer + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + textcolor NPC_TEXT_COLOR_FEMALE + msgbox FourIsland_IcefallCave_Back_Text_ThankYouThisIsAwful + setflag FLAG_HIDE_RUIN_VALLEY_SCIENTIST + clearflag FLAG_HIDE_LORELEI_IN_HER_HOUSE + setvar VAR_MAP_SCENE_ICEFALL_CAVE_BACK, 1 + releaseall + end + +FourIsland_IcefallCave_Back_Movement_PlayerToRockets:: + walk_up + walk_up + walk_right + walk_up + step_end + +FourIsland_IcefallCave_Back_Movement_PlayerWatchRocketsExit:: + delay_16 + walk_in_place_faster_left + delay_16 + delay_16 + walk_in_place_faster_down + step_end + +FourIsland_IcefallCave_Back_Movement_WalkInPlaceDown:: + walk_in_place_down + step_end + +FourIsland_IcefallCave_Back_Movement_UnusedPushRight:: + lock_facing_direction + walk_right + unlock_facing_direction + step_end + +FourIsland_IcefallCave_Back_Movement_Rocket1ReactToThreat:: + walk_in_place_fast_down + step_end + +FourIsland_IcefallCave_Back_Movement_Rocket1Exit:: + walk_right + walk_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + step_end + +FourIsland_IcefallCave_Back_Movement_Rocket2Exit:: + delay_16 + walk_left + walk_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + step_end + +FourIsland_IcefallCave_Back_Movement_Rocket3Exit:: + delay_16 + walk_down + delay_16 + walk_down + walk_fast_right + walk_fast_right + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + step_end + +FourIsland_IcefallCave_Back_Movement_Rocket3FaceLorelei:: + delay_16 + delay_8 + walk_in_place_faster_right + step_end + +FourIsland_IcefallCave_Back_Movement_UnusedWalkLeft:: + walk_left + walk_left + step_end + +FourIsland_IcefallCave_Back_Movement_LoreleiToRockets:: + walk_left + walk_up + step_end + +FourIsland_IcefallCave_Back_Movement_WalkInPlaceUp:: + walk_in_place_up + step_end + +FourIsland_IcefallCave_Back_Movement_LoreleiWatchRocketsExit:: + delay_8 + walk_in_place_faster_right + delay_16 + delay_16 + walk_in_place_faster_down + step_end + +FourIsland_IcefallCave_Back_Movement_LoreleiWalkToPlayer:: + walk_right + step_end + +FourIsland_IcefallCave_Back_EventScript_Lorelei:: + msgbox FourIsland_IcefallCave_Back_Text_ThankYouThisIsAwful, MSGBOX_NPC + end + +FourIsland_IcefallCave_Back_Text_LoreleiKeepHandsOffMons:: + .string "LORELEI: Keep your filthy hands\n" + .string "off the POKéMON in the cave!\p" + .string "Do as I say, or you'll have me to\n" + .string "answer to!$" + +FourIsland_IcefallCave_Back_Text_ShutItLadyLeaveUsBe:: + .string "Aww, shut it, lady, and leave\n" + .string "us be.\p" + .string "Don't let your glasses get all\n" + .string "steamed up!$" + +FourIsland_IcefallCave_Back_Text_LoreleiPlayerHelpMeKickPoachersOut:: + .string "LORELEI: {PLAYER}?!\n" + .string "What are you doing here?\p" + .string "No, we can catch up later.\n" + .string "Right now, I need your help.\p" + .string "Help me kick these poachers out\n" + .string "before they do anything else.\p" + .string "They've been catching POKéMON\n" + .string "here, then selling them off!\p" + .string "Are you ready?\n" + .string "You take that one, please!$" + +FourIsland_IcefallCave_Back_Text_GruntIntro:: + .string "W-what?!\p" + .string "Who says we can't do what we want\n" + .string "with the POKéMON we catch?$" + +FourIsland_IcefallCave_Back_Text_GruntDefeat:: + .string "We didn't plan on this!$" + +FourIsland_IcefallCave_Back_Text_LoreleiWhereHaveYouTakenMons:: + .string "LORELEI: Humph.\n" + .string "So despicably weak.\p" + .string "You!\n" + .string "Tell me!\p" + .string "Where have you taken the captured\n" + .string "POKéMON?\p" + .string "I'm smashing your ring once and\n" + .string "for all!$" + +FourIsland_IcefallCave_Back_Text_NotTellingYouThat:: + .string "N-no way!\n" + .string "I'm not telling you that!$" + +FourIsland_IcefallCave_Back_Text_LoreleiWellDeepFreezeYou:: + .string "LORELEI: If you won't confess,\n" + .string "we'll deep-freeze you.\p" + .string "My LAPRAS is furious for what\n" + .string "you've done to its friends.\p" + .string "Go, LAPRAS!\n" + .string "ICE BEAM…$" + +FourIsland_IcefallCave_Back_Text_OkayRocketWareHouseFiveIsland:: + .string "Wawaah! Okay!\n" + .string "I'll talk!\p" + .string "The POKéMON are in the ROCKET\n" + .string "WAREHOUSE on FIVE ISLAND.\p" + .string "There! I said it!\n" + .string "We'll be going now!\p" + .string "…But I doubt you'll ever make it\n" + .string "into the ROCKET WAREHOUSE!\p" + .string "Heheheheh!$" + +FourIsland_IcefallCave_Back_Text_ThankYouThisIsAwful:: + .string "{PLAYER}, thank you.\n" + .string "But this is awful…\p" + .string "I was born and raised here on\n" + .string "these islands.\p" + .string "I had no idea that those horrible\n" + .string "criminals were loose here…$" + diff --git a/data/maps/FourIsland_IcefallCave_Entrance/scripts.inc b/data/maps/FourIsland_IcefallCave_Entrance/scripts.inc new file mode 100644 index 000000000000..c0051b9b9e3d --- /dev/null +++ b/data/maps/FourIsland_IcefallCave_Entrance/scripts.inc @@ -0,0 +1,7 @@ +FourIsland_IcefallCave_Entrance_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FourIsland_IcefallCave_Entrance_OnTransition + .byte 0 + +FourIsland_IcefallCave_Entrance_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_FOUR_ISLAND_ICEFALL_CAVE_ENTRANCE + end diff --git a/data/maps/FourIsland_LoreleisHouse/scripts.inc b/data/maps/FourIsland_LoreleisHouse/scripts.inc new file mode 100644 index 000000000000..1ff50f6a503a --- /dev/null +++ b/data/maps/FourIsland_LoreleisHouse/scripts.inc @@ -0,0 +1,63 @@ +FourIsland_LoreleisHouse_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FourIsland_LoreleisHouse_OnTransition + .byte 0 + +FourIsland_LoreleisHouse_OnTransition:: + special UpdateLoreleiDollCollection + end + +FourIsland_LoreleisHouse_EventScript_Lorelei:: + lock + faceplayer + goto_if_set FLAG_TALKED_TO_LORELEI_AFTER_WAREHOUSE, FourIsland_LoreleisHouse_EventScript_Lorelei3 + goto_if_set FLAG_DEFEATED_ROCKETS_IN_WAREHOUSE, FourIsland_LoreleisHouse_EventScript_Lorelei2 + msgbox FourIsland_LoreleisHouse_Text_IfAnythingWereToHappenToIsland + release + end + +FourIsland_LoreleisHouse_EventScript_Lorelei2:: + setflag FLAG_TALKED_TO_LORELEI_AFTER_WAREHOUSE + msgbox FourIsland_LoreleisHouse_Text_IllReturnToLeagueInShortWhile + release + end + +FourIsland_LoreleisHouse_EventScript_Lorelei3:: + msgbox FourIsland_LoreleisHouse_Text_WillDoWhatICanHereAndNow + release + end + +FourIsland_LoreleisHouse_EventScript_Doll:: + lock + msgbox FourIsland_LoreleisHouse_Text_StuffedMonDollsGalore + release + end + +FourIsland_LoreleisHouse_Text_IfAnythingWereToHappenToIsland:: + .string "LORELEI: There's something weighing\n" + .string "heavily on my mind.\p" + .string "If anything were to happen on\n" + .string "the island where I was born…\p" + .string "I wouldn't know about it if I were\n" + .string "in the POKéMON LEAGUE.\p" + .string "I wonder if that would make me\n" + .string "irresponsible to my home…$" + +FourIsland_LoreleisHouse_Text_IllReturnToLeagueInShortWhile:: + .string "LORELEI: So, you managed to solve\n" + .string "all the problems here?\p" + .string "That's wonderful.\p" + .string "That means there isn't any reason\n" + .string "for me to be here all the time.\p" + .string "Thank you…\p" + .string "I'll return to the POKéMON LEAGUE\n" + .string "in a short while.$" + +FourIsland_LoreleisHouse_Text_WillDoWhatICanHereAndNow:: + .string "I don't know what will happen in\n" + .string "the future, but…\p" + .string "I will do what I can here and now.\n" + .string "That's all I can do.$" + +FourIsland_LoreleisHouse_Text_StuffedMonDollsGalore:: + .string "Stuffed POKéMON dolls galore!$" + diff --git a/data/maps/FourIsland_Mart/scripts.inc b/data/maps/FourIsland_Mart/scripts.inc new file mode 100644 index 000000000000..b3ff98242991 --- /dev/null +++ b/data/maps/FourIsland_Mart/scripts.inc @@ -0,0 +1,47 @@ +FourIsland_Mart_MapScripts:: + .byte 0 + +FourIsland_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart FourIsland_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +FourIsland_Mart_Items:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_FULL_RESTORE + .2byte ITEM_MAX_POTION + .2byte ITEM_REVIVE + .2byte ITEM_ICE_HEAL + .2byte ITEM_FULL_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_MAX_REPEL + .2byte ITEM_NONE + release + end + +FourIsland_Mart_EventScript_Camper:: + msgbox FourIsland_Mart_Text_IcefallCaveIsFrigid, MSGBOX_NPC + end + +FourIsland_Mart_Text_LoreleiGrewUpOnThisIsland:: + .string "We've had a great and powerful\n" + .string "TRAINER grow up on this island.\p" + .string "I bet even you'd know her.\n" + .string "It's LORELEI of the ELITE FOUR!\p" + .string "When LORELEI was just a tyke,\n" + .string "I taught her about POKéMON.$" + +FourIsland_Mart_Text_IcefallCaveIsFrigid:: + .string "The SEVII ISLANDS are in a warm\n" + .string "region overall.\p" + .string "But there is one exception you\n" + .string "need to know about.\p" + .string "The ICEFALL CAVE is frigid because\n" + .string "of the POKéMON that live in it.$" + diff --git a/data/maps/FourIsland_PokemonCenter_1F/scripts.inc b/data/maps/FourIsland_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..446e4cb5cde5 --- /dev/null +++ b/data/maps/FourIsland_PokemonCenter_1F/scripts.inc @@ -0,0 +1,73 @@ +FourIsland_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FourIsland_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +FourIsland_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_FOUR_ISLAND + end + +FourIsland_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +FourIsland_PokemonCenter_1F_EventScript_Man:: + msgbox FourIsland_PokemonCenter_1F_Text_RareIceMonsInCave, MSGBOX_NPC + end + +FourIsland_PokemonCenter_1F_EventScript_Woman:: + msgbox FourIsland_PokemonCenter_1F_Text_DayCarePeopleFoundEggBefore, MSGBOX_NPC + end + +FourIsland_PokemonCenter_1F_EventScript_Gentleman:: + msgbox FourIsland_PokemonCenter_1F_Text_NewPokemonJournalHasntArrived, MSGBOX_NPC + end + +@ The 5 texts below are supposed to be in FourIsland_House1 +Text_BodySlamTeach:: + .string "Ready?\n" + .string "Boing!\p" + .string "We're having a BODY SLAM match\n" + .string "to see who wimps out first.\p" + .string "If you were to join us, you'd be\n" + .string "squashed like a bug, though…\p" + .string "How about I teach BODY SLAM to\n" + .string "a POKéMON of yours instead?$" + +Text_BodySlamDeclined:: + .string "Come again!\n" + .string "Boing!$" + +Text_BodySlamWhichMon:: + .string "Which POKéMON wants to learn how\n" + .string "to BODY SLAM?$" + +Text_BodySlamTaught:: + .string "Boioing!$" + +FourIsland_House1_Text_FatMan:: + .string "それ ぼよーん!\n" + .string "おまえ おもいなあー!$" + +FourIsland_PokemonCenter_1F_Text_RareIceMonsInCave:: + .string "There's a rare kind of ICE POKéMON\n" + .string "that lives in the cave.\p" + .string "We get a lot of visitors hoping to\n" + .string "see that POKéMON.$" + +FourIsland_PokemonCenter_1F_Text_DayCarePeopleFoundEggBefore:: + .string "Oh? A POKéMON EGG?\n" + .string "…I have no idea.\p" + .string "…Oh, wait. The DAY-CARE people\n" + .string "in town were saying something.\p" + .string "They said that they'd found EGGS\n" + .string "before on their property.$" + +FourIsland_PokemonCenter_1F_Text_NewPokemonJournalHasntArrived:: + .string "What's this?\p" + .string "The new POKéMON JOURNAL hasn't\n" + .string "arrived on this island?$" + diff --git a/data/maps/FourIsland_PokemonCenter_2F/scripts.inc b/data/maps/FourIsland_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..c02811b7fe10 --- /dev/null +++ b/data/maps/FourIsland_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +FourIsland_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +FourIsland_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +FourIsland_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +FourIsland_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/FourIsland_PokemonDayCare/scripts.inc b/data/maps/FourIsland_PokemonDayCare/scripts.inc new file mode 100644 index 000000000000..6a8c5eb7aa3d --- /dev/null +++ b/data/maps/FourIsland_PokemonDayCare/scripts.inc @@ -0,0 +1,190 @@ +FourIsland_PokemonDayCare_MapScripts:: + .byte 0 + +FourIsland_PokemonDayCare_EventScript_DaycareWoman:: + lock + faceplayer + specialvar VAR_RESULT, GetDaycareState + goto_if_eq VAR_RESULT, DAYCARE_EGG_WAITING, FourIsland_PokemonDayCare_EggWaiting + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, FourIsland_PokemonDayCare_OneMonInDaycare + goto_if_eq VAR_RESULT, DAYCARE_TWO_MONS, FourIsland_PokemonDayCare_TwoMonsInDaycare + msgbox DayCare_Text_WouldYouLikeUsToRaiseMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_PokemonDayCare_GiveMonToRaise + msgbox DayCare_Text_FineThenComeAgain + release + end + +FourIsland_PokemonDayCare_GiveMonToRaise:: + specialvar VAR_RESULT, CountPartyNonEggMons + goto_if_eq VAR_RESULT, 1, FourIsland_PokemonDayCare_OnlyOneMonInParty + msgbox DayCare_Text_WhichMonShouldWeRaise + fadescreen FADE_TO_BLACK + special ChooseSendDaycareMon + waitstate + goto_if_ge VAR_0x8004, PARTY_SIZE, FourIsland_PokemonDayCare_ComeAgain + specialvar VAR_RESULT, CountPartyAliveNonEggMons_IgnoreVar0x8004Slot + goto_if_eq VAR_RESULT, 0, FourIsland_PokemonDayCare_OnlyOneAliveMonInParty + specialvar VAR_0x8005, GetSelectedMonNicknameAndSpecies + waitse + playmoncry VAR_0x8005, CRY_MODE_NORMAL + msgbox DayCare_Text_WellRaiseYourMon + waitmoncry + special StoreSelectedPokemonInDaycare + callnative UpdateFollowingPokemon + incrementgamestat GAME_STAT_USED_DAYCARE + specialvar VAR_RESULT, GetDaycareState + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, FourIsland_PokemonDayCare_CanRaiseOneMore + release + end + +FourIsland_PokemonDayCare_ComeAgain:: + msgbox DayCare_Text_ComeAgain + release + end + +FourIsland_PokemonDayCare_CanRaiseOneMore:: + msgbox DayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_PokemonDayCare_GiveMonToRaise + goto FourIsland_PokemonDayCare_ComeAgain + end + +FourIsland_PokemonDayCare_OnlyOneMonInParty:: + msgbox DayCare_Text_YouHaveJustOneMon + release + end + +FourIsland_PokemonDayCare_OnlyOneAliveMonInParty:: + msgbox DayCare_Text_WhatWillYouBattleWith + release + end + +FourIsland_PokemonDayCare_EggWaiting:: + msgbox DayCare_Text_HusbandWasLookingForYou + release + end + +FourIsland_PokemonDayCare_MonHasGrownXLevels:: + msgbox DayCare_Text_YourMonHasGrownXLevels + return + +FourIsland_PokemonDayCare_DisplayLevelsGained:: + specialvar VAR_RESULT, GetNumLevelsGainedFromDaycare + call_if_ne VAR_RESULT, 0, FourIsland_PokemonDayCare_MonHasGrownXLevels + return + +FourIsland_PokemonDayCare_OneMonInDaycare:: + msgbox DayCare_Text_GoodToSeeYou + setvar VAR_0x8004, 0 + call FourIsland_PokemonDayCare_DisplayLevelsGained + msgbox DayCare_Text_WeCanRaiseOneMore, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_PokemonDayCare_GiveMonToRaise + msgbox DayCare_Text_TakeYourMonBack, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_PokemonDayCare_TryRetrieveMon + goto FourIsland_PokemonDayCare_ComeAgain + end + +FourIsland_PokemonDayCare_TryRetrieveMon:: + specialvar VAR_RESULT, CalculatePlayerPartyCount + goto_if_eq VAR_RESULT, PARTY_SIZE, FourIsland_PokemonDayCare_NoRoomInParty + specialvar VAR_RESULT, GetDaycareState + setvar VAR_0x8004, 0 + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, FourIsland_PokemonDayCare_CostPrompt + special ShowDaycareLevelMenu + waitstate + copyvar VAR_0x8004, VAR_RESULT + goto_if_eq VAR_RESULT, DAYCARE_EXITED_LEVEL_MENU, FourIsland_PokemonDayCare_ComeAgain + goto FourIsland_PokemonDayCare_CostPrompt + end + +FourIsland_PokemonDayCare_CostPrompt:: + special GetDaycareCost + msgbox DayCare_Text_ItWillCostX, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_PokemonDayCare_CheckEnoughMoney + goto FourIsland_PokemonDayCare_ComeAgain + end + +FourIsland_PokemonDayCare_CheckEnoughMoney:: + specialvar VAR_RESULT, IsEnoughForCostInVar0x8005 + goto_if_eq VAR_RESULT, TRUE, FourIsland_PokemonDayCare_RetrieveMon + msgbox DayCare_Text_NotEnoughMoney + release + end + +FourIsland_PokemonDayCare_RetrieveMon:: + applymovement LOCALID_FOUR_ISLAND_DAYCARE_WOMAN, FourIsland_PokemonDayCare_Movement_RetrieveMon + waitmovement 0 + specialvar VAR_RESULT, TakePokemonFromDaycare + special SubtractMoneyFromVar0x8005 + playse SE_SHOP + msgbox DayCare_Text_HeresYourMon + waitse + playmoncry VAR_RESULT, CRY_MODE_NORMAL + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox DayCare_Text_TookBackMon + call EventScript_RestorePrevTextColor + waitmoncry + specialvar VAR_RESULT, GetDaycareState + goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, FourIsland_PokemonDayCare_AskRetrieveOtherMon + goto FourIsland_PokemonDayCare_ComeAgain + end + +FourIsland_PokemonDayCare_AskRetrieveOtherMon:: + msgbox DayCare_Text_TakeOtherOneBackToo, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_PokemonDayCare_TryRetrieveMon + goto FourIsland_PokemonDayCare_ComeAgain + end + +FourIsland_PokemonDayCare_NoRoomInParty:: + msgbox DayCare_Text_YourPartyIsFull + release + end + +FourIsland_PokemonDayCare_Movement_RetrieveMon:: + delay_16 + delay_16 + face_right + delay_16 + delay_16 + face_left + delay_16 + delay_16 + face_up + walk_slow_up + set_invisible + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + face_down + set_visible + walk_slow_down + step_end + +@ Unused. Possibly a commented script, or a typo end added to the above Movement script +FourIsland_PokemonDayCare_EventScript_UnusedEnd:: + end + +FourIsland_PokemonDayCare_TwoMonsInDaycare:: + msgbox DayCare_Text_GoodToSeeYou + setvar VAR_0x8004, 0 + call FourIsland_PokemonDayCare_DisplayLevelsGained + setvar VAR_0x8004, 1 + call FourIsland_PokemonDayCare_DisplayLevelsGained + msgbox DayCare_Text_TakeYourMonBack, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FourIsland_PokemonDayCare_TryRetrieveMon + msgbox DayCare_Text_ComeAgain + release + end + +@ Unused +FourIsland_PokemonDayCare_EventScript_UnusedRetrieveMon:: + special ShowDaycareLevelMenu + waitstate + goto_if_eq VAR_RESULT, 2, FourIsland_PokemonDayCare_ComeAgain + copyvar VAR_0x8004, VAR_RESULT + specialvar VAR_RESULT, TakePokemonFromDaycare + msgbox DayCare_Text_HeresYourMon + msgbox DayCare_Text_ComeAgain + release + end diff --git a/data/maps/FuchsiaCity/scripts.inc b/data/maps/FuchsiaCity/scripts.inc new file mode 100644 index 000000000000..ddcae8886d04 --- /dev/null +++ b/data/maps/FuchsiaCity/scripts.inc @@ -0,0 +1,252 @@ +FuchsiaCity_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FuchsiaCity_OnTransition + .byte 0 + +FuchsiaCity_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_FUCHSIA_CITY + call_if_set FLAG_GOT_DOME_FOSSIL, FuchsiaCity_EventScript_SetOmanyteGfx + call_if_unset FLAG_GOT_DOME_FOSSIL, FuchsiaCity_EventScript_SetKabutoGfx + end + +FuchsiaCity_EventScript_SetOmanyteGfx:: + setvar VAR_OBJ_GFX_ID_0, OBJ_EVENT_GFX_OMANYTE + return + +FuchsiaCity_EventScript_SetKabutoGfx:: + setvar VAR_OBJ_GFX_ID_0, OBJ_EVENT_GFX_KABUTO + return + +FuchsiaCity_EventScript_LittleBoy:: + msgbox FuchsiaCity_Text_DidYouTrySafariGame, MSGBOX_NPC + end + +FuchsiaCity_EventScript_OldMan:: + msgbox FuchsiaCity_Text_SafariZoneZooInFront, MSGBOX_NPC + end + +FuchsiaCity_EventScript_Erik:: + msgbox FuchsiaCity_Text_WheresSara, MSGBOX_NPC + end + +FuchsiaCity_EventScript_Youngster:: + msgbox FuchsiaCity_Text_ItemBallInThere, MSGBOX_NPC + end + +FuchsiaCity_EventScript_Lass:: + lock + faceplayer + famechecker FAMECHECKER_KOGA, 3 + msgbox FuchsiaCity_Text_MyFatherIsGymLeader + release + end + +FuchsiaCity_EventScript_CitySign:: + msgbox FuchsiaCity_Text_CitySign, MSGBOX_SIGN + end + +FuchsiaCity_EventScript_SafariZoneSign:: + msgbox FuchsiaCity_Text_SafariZoneSign, MSGBOX_SIGN + end + +FuchsiaCity_EventScript_SafariGameSign:: + msgbox FuchsiaCity_Text_SafariGameSign, MSGBOX_SIGN + end + +FuchsiaCity_EventScript_WardensHomeSign:: + msgbox FuchsiaCity_Text_WardensHomeSign, MSGBOX_SIGN + end + +@ Unused +FuchsiaCity_EventScript_SafariZoneOfficeSign:: + msgbox FuchsiaCity_Text_SafariZoneOfficeSign, MSGBOX_SIGN + end + +FuchsiaCity_EventScript_GymSign:: + lockall + famechecker FAMECHECKER_KOGA, 0 + msgbox FuchsiaCity_Text_GymSign + releaseall + end + +FuchsiaCity_EventScript_ChanseySign:: + lockall + setvar VAR_0x8004, SPECIES_CHANSEY + special SetSeenMon + showmonpic SPECIES_CHANSEY, 10, 3 + msgbox FuchsiaCity_Text_ChanseySign + hidemonpic + releaseall + end + +FuchsiaCity_EventScript_VoltorbSign:: + lockall + setvar VAR_0x8004, SPECIES_VOLTORB + special SetSeenMon + showmonpic SPECIES_VOLTORB, 10, 3 + msgbox FuchsiaCity_Text_VoltorbSign + hidemonpic + releaseall + end + +FuchsiaCity_EventScript_KangaskhanSign:: + lockall + setvar VAR_0x8004, SPECIES_KANGASKHAN + special SetSeenMon + showmonpic SPECIES_KANGASKHAN, 10, 3 + msgbox FuchsiaCity_Text_KangaskhanSign + hidemonpic + releaseall + end + +FuchsiaCity_EventScript_SlowpokeSign:: + lockall + setvar VAR_0x8004, SPECIES_SLOWPOKE + special SetSeenMon + showmonpic SPECIES_SLOWPOKE, 10, 3 + msgbox FuchsiaCity_Text_SlowpokeSign + hidemonpic + releaseall + end + +FuchsiaCity_EventScript_LaprasSign:: + lockall + setvar VAR_0x8004, SPECIES_LAPRAS + special SetSeenMon + showmonpic SPECIES_LAPRAS, 10, 3 + msgbox FuchsiaCity_Text_LaprasSign + hidemonpic + releaseall + end + +FuchsiaCity_EventScript_FossilMonSign:: + lockall + goto_if_set FLAG_GOT_DOME_FOSSIL, FuchsiaCity_EventScript_OmanyteSign + setvar VAR_0x8004, SPECIES_KABUTO + special SetSeenMon + showmonpic SPECIES_KABUTO, 10, 3 + msgbox FuchsiaCity_Text_KabutoSign + hidemonpic + releaseall + end + +FuchsiaCity_EventScript_OmanyteSign:: + setvar VAR_0x8004, SPECIES_OMANYTE + special SetSeenMon + showmonpic SPECIES_OMANYTE, 10, 3 + msgbox FuchsiaCity_Text_OmanyteSign + hidemonpic + releaseall + end + +FuchsiaCity_Text_DidYouTrySafariGame:: + .string "Did you try the SAFARI GAME?\p" + .string "There are some rare POKéMON that\n" + .string "can only be caught there.$" + +FuchsiaCity_Text_SafariZoneZooInFront:: + .string "The SAFARI ZONE has a zoo in front\n" + .string "of the entrance.\p" + .string "Out back is the SAFARI GAME for\n" + .string "catching POKéMON.$" + +FuchsiaCity_Text_WheresSara:: + .string "ERIK: Where's SARA?\n" + .string "I said I'd meet her here.$" + +FuchsiaCity_Text_ItemBallInThere:: + .string "That item ball in there…\n" + .string "Were you wanting that?\p" + .string "Me, too!\n" + .string "…Huh? That's a POKéMON?$" + +FuchsiaCity_Text_CitySign:: + .string "FUCHSIA CITY\n" + .string "Behold! It's Passion Pink!$" + +FuchsiaCity_Text_SafariZoneSign:: + .string "POKéMON PARADISE\n" + .string "SAFARI ZONE$" + +FuchsiaCity_Text_SafariGameSign:: + .string "SAFARI GAME\n" + .string "POKéMON-U-CATCH!$" + +FuchsiaCity_Text_WardensHomeSign:: + .string "SAFARI ZONE\n" + .string "WARDEN'S HOME$" + +FuchsiaCity_Text_SafariZoneOfficeSign:: + .string "POKéMON PARADISE!\n" + .string "Welcome to the SAFARI ZONE!\l" + .string "SAFARI ZONE OFFICE$" + +FuchsiaCity_Text_GymSign:: + .string "FUCHSIA CITY POKéMON GYM\n" + .string "LEADER: KOGA\l" + .string "The Poisonous Ninja Master$" + +FuchsiaCity_Text_ChanseySign:: + .string "Name: CHANSEY\n" + .string "Catching one is all up to chance.$" + +FuchsiaCity_Text_VoltorbSign:: + .string "Name: VOLTORB\n" + .string "The very image of a POKé BALL.$" + +FuchsiaCity_Text_KangaskhanSign:: + .string "Name: KANGASKHAN\p" + .string "A maternal POKéMON that raises its\n" + .string "young in a pouch on its belly.$" + +FuchsiaCity_Text_SlowpokeSign:: + .string "Name: SLOWPOKE\n" + .string "Friendly and very slow moving.$" + +FuchsiaCity_Text_LaprasSign:: + .string "Name: LAPRAS\n" + .string "AKA the king of the seas.$" + +FuchsiaCity_Text_OmanyteSign:: + .string "Name: OMANYTE\n" + .string "An extremely rare POKéMON that was\l" + .string "regenerated from a fossil.$" + +FuchsiaCity_Text_KabutoSign:: + .string "Name: KABUTO\n" + .string "An extremely rare POKéMON that was\l" + .string "regenerated from a fossil.$" + +@ Unused. May have been meant to be the placeholder text for the zoo mons, similar to RB's "!" text +FuchsiaCity_Text_Ellipsis:: + .string "……$" + +Text_SubstituteTeach:: + .string "Aww, I wish I was a KANGASKHAN\n" + .string "baby.\p" + .string "I'd love to be a substitute for the\n" + .string "baby…\p" + .string "And snuggle in the mother\n" + .string "KANGASKHAN's belly pouch.\p" + .string "But only POKéMON can use the\n" + .string "technique SUBSTITUTE…\p" + .string "Want me to teach SUBSTITUTE to\n" + .string "one of your POKéMON?$" + +Text_SubstituteDeclined:: + .string "Oh, really?\n" + .string "SUBSTITUTE seems so fun…$" + +Text_SubstituteWhichMon:: + .string "Which POKéMON wants to learn\n" + .string "SUBSTITUTE?$" + +Text_SubstituteTaught:: + .string "Boy, what I'd give to crawl inside\n" + .string "a KANGASKHAN belly pouch…$" + +FuchsiaCity_Text_MyFatherIsGymLeader:: + .string "My father is the GYM LEADER of\n" + .string "this town.\p" + .string "I'm training to use POISON POKéMON\n" + .string "as well as my father.$" + diff --git a/data/maps/FuchsiaCity_Gym/scripts.inc b/data/maps/FuchsiaCity_Gym/scripts.inc new file mode 100644 index 000000000000..0d484d6f48ef --- /dev/null +++ b/data/maps/FuchsiaCity_Gym/scripts.inc @@ -0,0 +1,247 @@ +FuchsiaCity_Gym_MapScripts:: + .byte 0 + +FuchsiaCity_Gym_EventScript_Koga:: + famechecker FAMECHECKER_KOGA, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + trainerbattle_single TRAINER_LEADER_KOGA, FuchsiaCity_Gym_Text_KogaIntro, FuchsiaCity_Gym_Text_KogaDefeat, FuchsiaCity_Gym_EventScript_DefeatedKoga, NO_MUSIC + goto_if_unset FLAG_GOT_TM06_FROM_KOGA, FuchsiaCity_Gym_EventScript_GiveTM06 + msgbox FuchsiaCity_Gym_Text_KogaPostBattle + release + end + +FuchsiaCity_Gym_EventScript_DefeatedKoga:: + famechecker FAMECHECKER_KOGA, 1 + clearflag FLAG_HIDE_FAME_CHECKER_KOGA_JOURNAL + setflag FLAG_DEFEATED_KOGA + setflag FLAG_BADGE05_GET + set_gym_trainers_frlg 5 + goto FuchsiaCity_Gym_EventScript_GiveTM06 + end + +FuchsiaCity_Gym_EventScript_GiveTM06:: + msgbox FuchsiaCity_Gym_Text_KogaExplainSoulBadge + checkitemspace ITEM_TM06 + goto_if_eq VAR_RESULT, FALSE, FuchsiaCity_Gym_EventScript_NoRoomForTM06 + giveitem_msg FuchsiaCity_Gym_Text_ReceivedTM06FromKoga, ITEM_TM06 + setflag FLAG_GOT_TM06_FROM_KOGA + msgbox FuchsiaCity_Gym_Text_KogaExplainTM06 + release + end + +FuchsiaCity_Gym_EventScript_NoRoomForTM06:: + msgbox FuchsiaCity_Gym_Text_MakeSpaceForThis + release + end + +FuchsiaCity_Gym_EventScript_Phil:: + trainerbattle_single TRAINER_TAMER_PHIL, FuchsiaCity_Gym_Text_PhilIntro, FuchsiaCity_Gym_Text_PhilDefeat + msgbox FuchsiaCity_Gym_Text_PhilPostBattle, MSGBOX_AUTOCLOSE + end + +FuchsiaCity_Gym_EventScript_Edgar:: + trainerbattle_single TRAINER_TAMER_EDGAR, FuchsiaCity_Gym_Text_EdgarIntro, FuchsiaCity_Gym_Text_EdgarDefeat + msgbox FuchsiaCity_Gym_Text_EdgarPostBattle, MSGBOX_AUTOCLOSE + end + +FuchsiaCity_Gym_EventScript_Kirk:: + trainerbattle_single TRAINER_JUGGLER_KIRK, FuchsiaCity_Gym_Text_KirkIntro, FuchsiaCity_Gym_Text_KirkDefeat + famechecker FAMECHECKER_KOGA, 2 + msgbox FuchsiaCity_Gym_Text_KirkPostBattle, MSGBOX_AUTOCLOSE + end + +FuchsiaCity_Gym_EventScript_Shawn:: + trainerbattle_single TRAINER_JUGGLER_SHAWN, FuchsiaCity_Gym_Text_ShawnIntro, FuchsiaCity_Gym_Text_ShawnDefeat + msgbox FuchsiaCity_Gym_Text_ShawnPostBattle, MSGBOX_AUTOCLOSE + end + +FuchsiaCity_Gym_EventScript_Kayden:: + trainerbattle_single TRAINER_JUGGLER_KAYDEN, FuchsiaCity_Gym_Text_KaydenIntro, FuchsiaCity_Gym_Text_KaydenDefeat + msgbox FuchsiaCity_Gym_Text_KaydenPostBattle, MSGBOX_AUTOCLOSE + end + +FuchsiaCity_Gym_EventScript_Nate:: + trainerbattle_single TRAINER_JUGGLER_NATE, FuchsiaCity_Gym_Text_NateIntro, FuchsiaCity_Gym_Text_NateDefeat + msgbox FuchsiaCity_Gym_Text_NatePostBattle, MSGBOX_AUTOCLOSE + end + +FuchsiaCity_Gym_EventScript_GymGuy:: + lock + faceplayer + goto_if_set FLAG_DEFEATED_KOGA, FuchsiaCity_Gym_EventScript_GymGuyPostVictory + msgbox FuchsiaCity_Gym_Text_GymGuyAdvice + release + end + +FuchsiaCity_Gym_EventScript_GymGuyPostVictory:: + msgbox FuchsiaCity_Gym_Text_GymGuyPostVictory + release + end + +FuchsiaCity_Gym_EventScript_GymStatue:: + lockall + goto_if_set FLAG_BADGE05_GET, FuchsiaCity_Gym_EventScript_GymStatuePostVictory + msgbox FuchsiaCity_Gym_Text_GymStatue + releaseall + end + +FuchsiaCity_Gym_EventScript_GymStatuePostVictory:: + msgbox FuchsiaCity_Gym_Text_GymStatuePlayerWon + releaseall + end + +FuchsiaCity_Gym_Text_KogaIntro:: + .string "KOGA: Fwahahaha!\p" + .string "A mere child like you dares to\n" + .string "challenge me?\p" + .string "The very idea makes me shiver\n" + .string "with mirth!\p" + .string "Very well, I shall show you true\n" + .string "terror as a ninja master.\p" + .string "Poison brings steady doom.\n" + .string "Sleep renders foes helpless.\p" + .string "Despair to the creeping horror of\n" + .string "POISON-type POKéMON!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +FuchsiaCity_Gym_Text_KogaDefeat:: + .string "Humph!\n" + .string "You have proven your worth!\p" + .string "Here!\n" + .string "Take the SOULBADGE!$" + +FuchsiaCity_Gym_Text_KogaPostBattle:: + .string "When afflicted by TOXIC, a POKéMON\n" + .string "suffers more and more.\p" + .string "It suffers worsening damage as the\n" + .string "battle wears on!\p" + .string "It will surely terrorize foes!$" + +FuchsiaCity_Gym_Text_KogaExplainSoulBadge:: + .string "Now that you have the SOULBADGE,\n" + .string "the DEFENSE of your POKéMON rises.\p" + .string "It also lets you SURF outside of\n" + .string "battle.\p" + .string "Ah!\n" + .string "Take this, too!$" + +FuchsiaCity_Gym_Text_ReceivedTM06FromKoga:: + .string "{PLAYER} received TM06\n" + .string "from KOGA.$" + +FuchsiaCity_Gym_Text_KogaExplainTM06:: + .string "Sealed within that TM06 lies\n" + .string "TOXIC!\p" + .string "It is a secret technique dating\n" + .string "back some four hundred years.$" + +FuchsiaCity_Gym_Text_MakeSpaceForThis:: + .string "Make space for this, child!$" + +FuchsiaCity_Gym_Text_KaydenIntro:: + .string "Strength isn't the key for POKéMON.\n" + .string "Do you understand this?\p" + .string "POKéMON is about strategy!\p" + .string "I'll show you how strategy can\n" + .string "beat brute strength.$" + +FuchsiaCity_Gym_Text_KaydenDefeat:: + .string "What?\n" + .string "Extraordinary!$" + +FuchsiaCity_Gym_Text_KaydenPostBattle:: + .string "So, you mix brawn with brains?\n" + .string "Good strategy!\p" + .string "That's remarkable for a child\n" + .string "TRAINER.$" + +FuchsiaCity_Gym_Text_KirkIntro:: + .string "I was a magician once upon a time.\p" + .string "But I dreamt of becoming a ninja,\n" + .string "so I joined this GYM.$" + +FuchsiaCity_Gym_Text_KirkDefeat:: + .string "I'm done for!$" + +FuchsiaCity_Gym_Text_KirkPostBattle:: + .string "Even though I've lost, I will keep\n" + .string "training according to the teachings\l" + .string "of KOGA, my ninja master.$" + +FuchsiaCity_Gym_Text_NateIntro:: + .string "Let's see you beat my special\n" + .string "techniques!$" + +FuchsiaCity_Gym_Text_NateDefeat:: + .string "You had me fooled!$" + +FuchsiaCity_Gym_Text_NatePostBattle:: + .string "I like poison and sleep techniques,\n" + .string "as they linger after battle!$" + +FuchsiaCity_Gym_Text_PhilIntro:: + .string "Stop right there!\p" + .string "The famed invisible walls of\n" + .string "FUCHSIA GYM have you frustrated?$" + +FuchsiaCity_Gym_Text_PhilDefeat:: + .string "Whoa!\n" + .string "You've got it!$" + +FuchsiaCity_Gym_Text_PhilPostBattle:: + .string "You impressed me!\n" + .string "Here's a hint!\p" + .string "Look very closely for gaps in the\n" + .string "invisible walls!$" + +FuchsiaCity_Gym_Text_EdgarIntro:: + .string "I also study the way of the ninja\n" + .string "with Master KOGA!\p" + .string "Ninja have a long history of using\n" + .string "animals!$" + +FuchsiaCity_Gym_Text_EdgarDefeat:: + .string "Awoo!$" + +FuchsiaCity_Gym_Text_EdgarPostBattle:: + .string "I still have much to learn.$" + +FuchsiaCity_Gym_Text_ShawnIntro:: + .string "Master KOGA comes from a long line\n" + .string "of ninjas.\p" + .string "What did you descend from?$" + +FuchsiaCity_Gym_Text_ShawnDefeat:: + .string "You're more skilled than I'd\n" + .string "thought!$" + +FuchsiaCity_Gym_Text_ShawnPostBattle:: + .string "Where there is light, there is\n" + .string "shadow!\p" + .string "Light and shadow!\n" + .string "Which do you choose?$" + +FuchsiaCity_Gym_Text_GymGuyAdvice:: + .string "Yo!\n" + .string "Champ in the making!\p" + .string "FUCHSIA GYM is a tricked-up place.\n" + .string "It's riddled with invisible walls!\p" + .string "KOGA might appear close, but he's\n" + .string "blocked off.\p" + .string "You have to find gaps in the walls\n" + .string "to reach him.$" + +FuchsiaCity_Gym_Text_GymGuyPostVictory:: + .string "It's amazing how ninja can terrify,\n" + .string "even now!$" + +FuchsiaCity_Gym_Text_GymStatue:: + .string "FUCHSIA POKéMON GYM\n" + .string "LEADER: KOGA\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}$" + +FuchsiaCity_Gym_Text_GymStatuePlayerWon:: + .string "FUCHSIA POKéMON GYM\n" + .string "LEADER: KOGA\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}, {PLAYER}$" + diff --git a/data/maps/FuchsiaCity_House1/scripts.inc b/data/maps/FuchsiaCity_House1/scripts.inc new file mode 100644 index 000000000000..847fc01945a5 --- /dev/null +++ b/data/maps/FuchsiaCity_House1/scripts.inc @@ -0,0 +1,36 @@ +FuchsiaCity_House1_MapScripts:: + .byte 0 + +FuchsiaCity_House1_EventScript_Woman:: + msgbox FuchsiaCity_House1_Text_WardenIsOldHasFalseTeeth, MSGBOX_NPC + end + +FuchsiaCity_House1_EventScript_OldMan:: + lock + faceplayer + famechecker FAMECHECKER_BILL, 2 + msgbox FuchsiaCity_House1_Text_BillIsMyGrandson + release + end + +FuchsiaCity_House1_EventScript_LittleBoy:: + msgbox FuchsiaCity_House1_Text_BillFilesHisOwnMonData, MSGBOX_NPC + end + +FuchsiaCity_House1_Text_WardenIsOldHasFalseTeeth:: + .string "The SAFARI ZONE's WARDEN is old, \n" + .string "but he's still very much active.\p" + .string "All his teeth are false, though.$" + +FuchsiaCity_House1_Text_BillIsMyGrandson:: + .string "Hmm?\n" + .string "You've met BILL?\p" + .string "He's my grandson!\p" + .string "He always liked collecting things,\n" + .string "even as a child!$" + +FuchsiaCity_House1_Text_BillFilesHisOwnMonData:: + .string "BILL files his own POKéMON data on\n" + .string "his PC.\p" + .string "Did he show you?$" + diff --git a/data/maps/FuchsiaCity_House2/scripts.inc b/data/maps/FuchsiaCity_House2/scripts.inc new file mode 100644 index 000000000000..e2c8c3654be6 --- /dev/null +++ b/data/maps/FuchsiaCity_House2/scripts.inc @@ -0,0 +1,70 @@ +FuchsiaCity_House2_MapScripts:: + .byte 0 + +FuchsiaCity_House2_EventScript_FishingGurusBrother:: + lock + faceplayer + goto_if_set FLAG_GOT_GOOD_ROD, FuchsiaCity_House2_EventScript_AlreadyGotGoodRod + msgbox FuchsiaCity_House2_Text_DoYouLikeToFish, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FuchsiaCity_House2_EventScript_GiveGoodRod + msgbox FuchsiaCity_House2_Text_OhThatsDisappointing + release + end + +FuchsiaCity_House2_EventScript_AlreadyGotGoodRod:: + msgbox FuchsiaCity_House2_Text_HowAreTheFishBiting + release + end + +FuchsiaCity_House2_EventScript_GiveGoodRod:: + msgbox FuchsiaCity_House2_Text_LikeYourStyleTakeThis + checkitemspace ITEM_GOOD_ROD + goto_if_eq VAR_RESULT, FALSE, FuchsiaCity_House2_EventScript_NoRoomForGoodRod + giveitem_msg FuchsiaCity_House2_Text_ReceivedGoodRod, ITEM_GOOD_ROD + msgbox FuchsiaCity_House2_Text_GoodRodCanCatchBetterMons + setflag FLAG_GOT_GOOD_ROD + release + end + +FuchsiaCity_House2_EventScript_NoRoomForGoodRod:: + msgbox FuchsiaCity_House2_Text_YouHaveNoRoomForGift + release + end + +FuchsiaCity_House2_Text_DoYouLikeToFish:: + .string "I'm the FISHING GURU's older\n" + .string "brother.\p" + .string "I simply looove fishing!\n" + .string "I can't bear to go without.\p" + .string "Tell me, do you like to fish?$" + +FuchsiaCity_House2_Text_LikeYourStyleTakeThis:: + .string "Grand! I like your style.\n" + .string "I think we can be friends.\p" + .string "Take this and fish, young friend!$" + +FuchsiaCity_House2_Text_ReceivedGoodRod:: + .string "{PLAYER} received a GOOD ROD from\n" + .string "the FISHING GURU's brother.$" + +FuchsiaCity_House2_Text_GoodRodCanCatchBetterMons:: + .string "Fishing is a way of life!\n" + .string "It is like the finest poetry.\p" + .string "A crummy OLD ROD could only catch\n" + .string "MAGIKARP, yes?\p" + .string "But with a GOOD ROD, you can\n" + .string "catch much better POKéMON.$" + +FuchsiaCity_House2_Text_OhThatsDisappointing:: + .string "Oh…\n" + .string "That's so disappointing…$" + +FuchsiaCity_House2_Text_HowAreTheFishBiting:: + .string "Hello there, {PLAYER}!\p" + .string "How are the fish biting?$" + +FuchsiaCity_House2_Text_YouHaveNoRoomForGift:: + .string "Oh, no!\p" + .string "I had a gift for you, but you have\n" + .string "no room for it!$" + diff --git a/data/maps/FuchsiaCity_House3/scripts.inc b/data/maps/FuchsiaCity_House3/scripts.inc new file mode 100644 index 000000000000..7008e9ad55f1 --- /dev/null +++ b/data/maps/FuchsiaCity_House3/scripts.inc @@ -0,0 +1,90 @@ +FuchsiaCity_House3_MapScripts:: + .byte 0 + +FuchsiaCity_House3_EventScript_MoveDeleter:: + lock + faceplayer + msgbox FuchsiaCity_House3_Text_WouldYouLikeToForgetMove, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FuchsiaCity_House3_EventScript_ChooseMonForMoveDeleter + goto FuchsiaCity_House3_EventScript_CancelForgetMove + end + +FuchsiaCity_House3_EventScript_ChooseMonForMoveDeleter:: + msgbox FuchsiaCity_House3_Text_WhichMonShouldForgetMove + special ChoosePartyMon + waitstate + goto_if_ge VAR_0x8004, PARTY_SIZE, FuchsiaCity_House3_EventScript_CancelForgetMove + special IsSelectedMonEgg + goto_if_eq VAR_RESULT, TRUE, FuchsiaCity_House3_EventScript_CantForgetMoveEgg + special GetNumMovesSelectedMonHas + goto_if_eq VAR_RESULT, 1, FuchsiaCity_House3_EventScript_CantForgetOnlyMove + msgbox FuchsiaCity_House3_Text_WhichMoveShouldBeForgotten + fadescreen FADE_TO_BLACK + special MoveDeleterChooseMoveToForget + fadescreen FADE_FROM_BLACK + goto_if_eq VAR_0x8005, MAX_MON_MOVES, FuchsiaCity_House3_EventScript_ChooseMonForMoveDeleter + special BufferMoveDeleterNicknameAndMove + msgbox FuchsiaCity_House3_Text_MonsMoveShouldBeForgotten, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FuchsiaCity_House3_EventScript_ForgetMove + goto FuchsiaCity_House3_EventScript_CancelForgetMove + end + +FuchsiaCity_House3_EventScript_ForgetMove:: + special MoveDeleterForgetMove + playfanfare MUS_MOVE_DELETED + waitfanfare + msgbox FuchsiaCity_House3_Text_MonHasForgottenMoveCompletely + release + end + +FuchsiaCity_House3_EventScript_CantForgetOnlyMove:: + special BufferMoveDeleterNicknameAndMove + msgbox FuchsiaCity_House3_Text_MonOnlyKnowsOneMove + release + end + +FuchsiaCity_House3_EventScript_CantForgetMoveEgg:: + msgbox FuchsiaCity_House3_Text_NoEggShouldKnowMoves + release + end + +FuchsiaCity_House3_EventScript_CancelForgetMove:: + msgbox FuchsiaCity_House3_Text_ComeAgainToForgetOtherMoves + release + end + +FuchsiaCity_House3_Text_WouldYouLikeToForgetMove:: + .string "Uh…\n" + .string "Oh, yes, I'm the MOVE DELETER.\p" + .string "I can make POKéMON forget their\n" + .string "moves.\p" + .string "Would you like me to do that?$" + +FuchsiaCity_House3_Text_WhichMonShouldForgetMove:: + .string "Which POKéMON should forget a\n" + .string "move?$" + +FuchsiaCity_House3_Text_WhichMoveShouldBeForgotten:: + .string "Which move should be forgotten?$" + +FuchsiaCity_House3_Text_MonOnlyKnowsOneMove:: + .string "{STR_VAR_1} seems to know only one\n" + .string "move…$" + +FuchsiaCity_House3_Text_MonsMoveShouldBeForgotten:: + .string "Hm! {STR_VAR_1}'s {STR_VAR_2}?\n" + .string "That move should be forgotten?$" + +FuchsiaCity_House3_Text_MonHasForgottenMoveCompletely:: + .string "It worked to perfection!\p" + .string "{STR_VAR_1} has forgotten\n" + .string "{STR_VAR_2} completely.$" + +FuchsiaCity_House3_Text_ComeAgainToForgetOtherMoves:: + .string "Come again if there are other\n" + .string "moves to be forgotten.$" + +FuchsiaCity_House3_Text_NoEggShouldKnowMoves:: + .string "What?\n" + .string "No EGG should know any moves.$" + diff --git a/data/maps/FuchsiaCity_Mart/scripts.inc b/data/maps/FuchsiaCity_Mart/scripts.inc new file mode 100644 index 000000000000..028ec6aeaea0 --- /dev/null +++ b/data/maps/FuchsiaCity_Mart/scripts.inc @@ -0,0 +1,43 @@ +FuchsiaCity_Mart_MapScripts:: + .byte 0 + +FuchsiaCity_Mart_EventScript_CooltrainerF:: + msgbox FuchsiaCity_Mart_Text_DidYouTryXSpeed, MSGBOX_NPC + end + +FuchsiaCity_Mart_EventScript_Gentleman:: + msgbox FuchsiaCity_Mart_Text_DontTheyHaveSafariZonePennants, MSGBOX_NPC + end + +FuchsiaCity_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart FuchsiaCity_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +FuchsiaCity_Mart_Items:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_GREAT_BALL + .2byte ITEM_SUPER_POTION + .2byte ITEM_REVIVE + .2byte ITEM_FULL_HEAL + .2byte ITEM_MAX_REPEL + .2byte ITEM_NONE + release + end + +FuchsiaCity_Mart_Text_DontTheyHaveSafariZonePennants:: + .string "Don't they have any pennants\n" + .string "promoting the SAFARI ZONE?\p" + .string "How about some paper lanterns?\n" + .string "Aren't there even any calendars?$" + +FuchsiaCity_Mart_Text_DidYouTryXSpeed:: + .string "Did you try X SPEED?\n" + .string "It speeds up a POKéMON in battle.$" + diff --git a/data/maps/FuchsiaCity_PokemonCenter_1F/scripts.inc b/data/maps/FuchsiaCity_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..64ffb775571c --- /dev/null +++ b/data/maps/FuchsiaCity_PokemonCenter_1F/scripts.inc @@ -0,0 +1,46 @@ +FuchsiaCity_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, FuchsiaCity_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +FuchsiaCity_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_FUCHSIA_CITY + end + +FuchsiaCity_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +FuchsiaCity_PokemonCenter_1F_EventScript_Man:: + msgbox FuchsiaCity_PokemonCenter_1F_Text_CantBecomeGoodTrainerWithOneMon, MSGBOX_NPC + end + +FuchsiaCity_PokemonCenter_1F_EventScript_CooltrainerF:: + msgbox FuchsiaCity_PokemonCenter_1F_Text_PokemonLeagueWestOfViridian, MSGBOX_NPC + end + +FuchsiaCity_PokemonCenter_1F_EventScript_Youngster:: + msgbox FuchsiaCity_PokemonCenter_1F_Text_VisitSafariZoneForPokedex, MSGBOX_NPC + end + +FuchsiaCity_PokemonCenter_1F_Text_CantBecomeGoodTrainerWithOneMon:: + .string "You can't become a good TRAINER\n" + .string "with just one strong POKéMON.\p" + .string "But raising many POKéMON evenly\n" + .string "is no easy task, either.$" + +FuchsiaCity_PokemonCenter_1F_Text_PokemonLeagueWestOfViridian:: + .string "There's a narrow trail west of\n" + .string "VIRIDIAN CITY.\p" + .string "It goes to the POKéMON LEAGUE HQ.\n" + .string "The HQ governs all TRAINERS.$" + +FuchsiaCity_PokemonCenter_1F_Text_VisitSafariZoneForPokedex:: + .string "If you're working on a POKéDEX,\n" + .string "visit the SAFARI ZONE.\p" + .string "All sorts of rare POKéMON breed\n" + .string "there.$" + diff --git a/data/maps/FuchsiaCity_PokemonCenter_2F/scripts.inc b/data/maps/FuchsiaCity_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..01cc55b84c15 --- /dev/null +++ b/data/maps/FuchsiaCity_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +FuchsiaCity_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +FuchsiaCity_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +FuchsiaCity_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +FuchsiaCity_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/FuchsiaCity_SafariZone_Entrance/scripts.inc b/data/maps/FuchsiaCity_SafariZone_Entrance/scripts.inc new file mode 100644 index 000000000000..170cbac9aebe --- /dev/null +++ b/data/maps/FuchsiaCity_SafariZone_Entrance/scripts.inc @@ -0,0 +1,280 @@ +FuchsiaCity_SafariZone_Entrance_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, FuchsiaCity_SafariZone_Entrance_OnFrame + .byte 0 + +FuchsiaCity_SafariZone_Entrance_OnFrame:: + map_script_2 VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 1, FuchsiaCity_SafariZone_Entrance_EventScript_ExitWarpIn + map_script_2 VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 2, FuchsiaCity_SafariZone_Entrance_EventScript_ExitEarly + map_script_2 VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 3, FuchsiaCity_SafariZone_Entrance_EventScript_ExitWalkIn + .2byte 0 + +@ When player runs out of balls mid-battle +FuchsiaCity_SafariZone_Entrance_EventScript_ExitWalkIn:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_ApproachCounter + waitmovement 0 + msgbox FuchsiaCity_SafariZone_Entrance_Text_CatchFairShareComeAgain + closemessage + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_Exit2 + waitmovement 0 + special ExitSafariMode + setvar VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0 + releaseall + end + +@ When player runs of out balls after catching a pokemon, or runs out of steps +FuchsiaCity_SafariZone_Entrance_EventScript_ExitWarpIn:: + lockall + textcolor NPC_TEXT_COLOR_MALE + msgbox FuchsiaCity_SafariZone_Entrance_Text_CatchFairShareComeAgain + closemessage + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_Exit + waitmovement 0 + special ExitSafariMode + setvar VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0 + releaseall + end + +@ When player re-enters the entrance building with balls/steps remaining +FuchsiaCity_SafariZone_Entrance_EventScript_ExitEarly:: + lockall + textcolor NPC_TEXT_COLOR_MALE + msgbox FuchsiaCity_SafariZone_Entrance_Text_GoingToLeaveSafariZoneEarly, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, FuchsiaCity_SafariZone_Entrance_EventScript_ReturnToSafariZone + msgbox FuchsiaCity_SafariZone_Entrance_Text_PleaseReturnSafariBalls + closemessage + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_Exit + waitmovement 0 + special ExitSafariMode + setvar VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 0 + releaseall + end + +FuchsiaCity_SafariZone_Entrance_EventScript_ReturnToSafariZone:: + msgbox FuchsiaCity_SafariZone_Entrance_Text_GoodLuck + closemessage + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_ReEnter + waitmovement 0 + warp MAP_SAFARI_ZONE_CENTER, 26, 30 + waitstate + end + +FuchsiaCity_SafariZone_Entrance_Movement_Exit:: + walk_down + walk_down + step_end + +FuchsiaCity_SafariZone_Entrance_Movement_ReEnter:: + walk_up + step_end + +FuchsiaCity_SafariZone_Entrance_Movement_Exit2:: + walk_down + walk_down + step_end + +FuchsiaCity_SafariZone_Entrance_Movement_ApproachCounter:: + walk_down + delay_8 + step_end + +FuchsiaCity_SafariZone_Entrance_EventScript_EntryTriggerMid:: + lockall + setvar VAR_TEMP_2, 0 + goto FuchsiaCity_SafariZone_Entrance_EventScript_AskEnterSafariZone + end + +FuchsiaCity_SafariZone_Entrance_EventScript_EntryTriggerRight:: + lockall + setvar VAR_TEMP_2, 1 + goto FuchsiaCity_SafariZone_Entrance_EventScript_AskEnterSafariZone + end + +FuchsiaCity_SafariZone_Entrance_EventScript_EntryTriggerLeft:: + lockall + setvar VAR_TEMP_2, 2 + goto FuchsiaCity_SafariZone_Entrance_EventScript_AskEnterSafariZone + end + +FuchsiaCity_SafariZone_Entrance_EventScript_AskEnterSafariZone:: + textcolor NPC_TEXT_COLOR_MALE + msgbox FuchsiaCity_SafariZone_Entrance_Text_WelcomeToSafariZone + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + showmoneybox 0, 0 + msgbox FuchsiaCity_SafariZone_Entrance_Text_PlaySafariGameFor500, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FuchsiaCity_SafariZone_Entrance_EventScript_TryEnterSafariZone + msgbox FuchsiaCity_SafariZone_Entrance_Text_OkayPleaseComeAgain + goto FuchsiaCity_SafariZone_Entrance_EventScript_ForcePlayerBack + end + +FuchsiaCity_SafariZone_Entrance_EventScript_TryEnterSafariZone:: + call FuchsiaCity_SafariZone_Entrance_EventScript_CheckSpaceForMons + checkmoney 500 + goto_if_eq VAR_RESULT, FALSE, FuchsiaCity_SafariZone_Entrance_EventScript_NotEnoughMoney + removemoney 500 + updatemoneybox + msgbox FuchsiaCity_SafariZone_Entrance_Text_ThatllBe500WeOnlyUseSpecialBalls + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_LEVEL_UP + message FuchsiaCity_SafariZone_Entrance_Text_PlayerReceived30SafariBalls + waitfanfare + call EventScript_RestorePrevTextColor + msgbox FuchsiaCity_SafariZone_Entrance_Text_CallYouOnPAWhenYouRunOut + closemessage + hidemoneybox + call_if_eq VAR_TEMP_2, 0, FuchsiaCity_SafariZone_Entrance_EventScript_EnterSafariZoneMid + call_if_eq VAR_TEMP_2, 1, FuchsiaCity_SafariZone_Entrance_EventScript_EnterSafariZoneRight + call_if_eq VAR_TEMP_2, 2, FuchsiaCity_SafariZone_Entrance_EventScript_EnterSafariZoneLeft + special EnterSafariMode + setvar VAR_MAP_SCENE_FUCHSIA_CITY_SAFARI_ZONE_ENTRANCE, 2 + warp MAP_SAFARI_ZONE_CENTER, 255, 26, 30 + waitstate + end + +FuchsiaCity_SafariZone_Entrance_EventScript_EnterSafariZoneRight:: + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_EnterSafariZoneRight + waitmovement 0 + return + +FuchsiaCity_SafariZone_Entrance_EventScript_EnterSafariZoneMid:: + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_EnterSafariZoneMid + waitmovement 0 + return + +FuchsiaCity_SafariZone_Entrance_EventScript_EnterSafariZoneLeft:: + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_EnterSafariZoneLeft + waitmovement 0 + return + +FuchsiaCity_SafariZone_Entrance_EventScript_CheckSpaceForMons:: + getpartysize + goto_if_ne VAR_RESULT, PARTY_SIZE, Common_EventScript_NopReturn + specialvar VAR_RESULT, ScriptCheckFreePokemonStorageSpace + goto_if_eq VAR_RESULT, TRUE, Common_EventScript_NopReturn + msgbox Route121_SafariZoneEntrance_Text_PCIsFull + goto FuchsiaCity_SafariZone_Entrance_EventScript_ForcePlayerBack + end + +FuchsiaCity_SafariZone_Entrance_EventScript_NotEnoughMoney:: + msgbox FuchsiaCity_SafariZone_Entrance_Text_OopsNotEnoughMoney + goto FuchsiaCity_SafariZone_Entrance_EventScript_ForcePlayerBack + end + +FuchsiaCity_SafariZone_Entrance_EventScript_ForcePlayerBack:: + closemessage + hidemoneybox + applymovement LOCALID_PLAYER, FuchsiaCity_SafariZone_Entrance_Movement_ForceBack + waitmovement 0 + releaseall + end + +FuchsiaCity_SafariZone_Entrance_Movement_ForceBack:: + walk_down + step_end + +FuchsiaCity_SafariZone_Entrance_Movement_EnterSafariZoneMid:: + walk_up + walk_up + step_end + +FuchsiaCity_SafariZone_Entrance_Movement_EnterSafariZoneRight:: + walk_up + walk_left + walk_up + step_end + +FuchsiaCity_SafariZone_Entrance_Movement_EnterSafariZoneLeft:: + walk_up + walk_right + walk_up + step_end + +FuchsiaCity_SafariZone_Entrance_EventScript_InfoAttendant:: + lock + faceplayer + msgbox FuchsiaCity_SafariZone_Entrance_Text_FirstTimeAtSafariZone, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, FuchsiaCity_SafariZone_Entrance_EventScript_ExplainSafariZone + msgbox FuchsiaCity_SafariZone_Entrance_Text_SorryYoureARegularHere + release + end + +FuchsiaCity_SafariZone_Entrance_EventScript_ExplainSafariZone:: + msgbox FuchsiaCity_SafariZone_Entrance_Text_ExplainSafariZone + release + end + +FuchsiaCity_SafariZone_Entrance_Text_WelcomeToSafariZone:: + .string "Welcome to the SAFARI ZONE!$" + +FuchsiaCity_SafariZone_Entrance_Text_PlaySafariGameFor500:: + .string "For just ¥500, you can play the\n" + .string "SAFARI GAME.\p" + .string "You can roam the wide-open safari\n" + .string "and catch what you like.\p" + .string "Would you like to play?$" + +FuchsiaCity_SafariZone_Entrance_Text_ThatllBe500WeOnlyUseSpecialBalls:: + .string "That'll be ¥500, please!\p" + .string "We only use a special kind of \n" + .string "POKé BALLS here.$" + +FuchsiaCity_SafariZone_Entrance_Text_PlayerReceived30SafariBalls:: + .string "{PLAYER} received 30 SAFARI BALLS\n" + .string "from the attendant.$" + +FuchsiaCity_SafariZone_Entrance_Text_CallYouOnPAWhenYouRunOut:: + .string "We'll call you on the PA when you\n" + .string "run out of time or SAFARI BALLS.\p" + .string "Well, I'll wish you the best of\n" + .string "luck!$" + +FuchsiaCity_SafariZone_Entrance_Text_OkayPleaseComeAgain:: + .string "Okay.\n" + .string "Please come again!$" + +FuchsiaCity_SafariZone_Entrance_Text_OopsNotEnoughMoney:: + .string "Oops!\n" + .string "Not enough money!$" + +FuchsiaCity_SafariZone_Entrance_Text_GoingToLeaveSafariZoneEarly:: + .string "Are you going to leave the\n" + .string "SAFARI ZONE early?$" + +FuchsiaCity_SafariZone_Entrance_Text_PleaseReturnSafariBalls:: + .string "Please return any SAFARI BALLS\n" + .string "you may have left.$" + +FuchsiaCity_SafariZone_Entrance_Text_GoodLuck:: + .string "Good luck!$" + +FuchsiaCity_SafariZone_Entrance_Text_CatchFairShareComeAgain:: + .string "Did you catch your fair share?\n" + .string "Come again!$" + +FuchsiaCity_SafariZone_Entrance_Text_FirstTimeAtSafariZone:: + .string "Hi! Is it your first time here at\n" + .string "the SAFARI ZONE?$" + +FuchsiaCity_SafariZone_Entrance_Text_ExplainSafariZone:: + .string "The SAFARI ZONE actually has\n" + .string "four zones in it.\p" + .string "Each zone has different kinds of\n" + .string "POKéMON, even some rare ones.\p" + .string "Use the supplied SAFARI BALLS to\n" + .string "catch them.\p" + .string "You can also throw BAIT or ROCKS\n" + .string "besides the SAFARI BALLS.\p" + .string "If you throw BAIT, the POKéMON\n" + .string "becomes less likely to flee, but\l" + .string "harder to catch.\p" + .string "If you throw ROCKS, the POKéMON\n" + .string "becomes more likely to flee, but\l" + .string "easier to catch.\p" + .string "When you run out of time or SAFARI\n" + .string "BALLS, it's game over for you!$" + +FuchsiaCity_SafariZone_Entrance_Text_SorryYoureARegularHere:: + .string "Sorry, you're a regular here!$" + diff --git a/data/maps/FuchsiaCity_SafariZone_Office/scripts.inc b/data/maps/FuchsiaCity_SafariZone_Office/scripts.inc new file mode 100644 index 000000000000..3da8701a76c4 --- /dev/null +++ b/data/maps/FuchsiaCity_SafariZone_Office/scripts.inc @@ -0,0 +1,44 @@ +FuchsiaCity_SafariZone_Office_MapScripts:: + .byte 0 + +FuchsiaCity_SafariZone_Office_EventScript_Worker1:: + msgbox FuchsiaCity_SafariZone_Office_Text_NicknamedWardenSlowpoke, MSGBOX_NPC + end + +FuchsiaCity_SafariZone_Office_EventScript_Worker2:: + msgbox FuchsiaCity_SafariZone_Office_Text_WardenIsVeryKnowledgeable, MSGBOX_NPC + end + +FuchsiaCity_SafariZone_Office_EventScript_Worker3:: + msgbox FuchsiaCity_SafariZone_Office_Text_CouldntUnderstandWarden, MSGBOX_NPC + end + +FuchsiaCity_SafariZone_Office_EventScript_Worker4:: + msgbox FuchsiaCity_SafariZone_Office_Text_PrizeInSafariZone, MSGBOX_NPC + end + +FuchsiaCity_SafariZone_Office_Text_NicknamedWardenSlowpoke:: + .string "We nicknamed the WARDEN\n" + .string "“SLOWPOKE.”\p" + .string "You know, he has that vacant look\n" + .string "like a SLOWPOKE.$" + +FuchsiaCity_SafariZone_Office_Text_WardenIsVeryKnowledgeable:: + .string "WARDEN SLOWPOKE is very\n" + .string "knowledgeable about POKéMON.\p" + .string "He even has some fossils of rare,\n" + .string "extinct POKéMON.$" + +FuchsiaCity_SafariZone_Office_Text_CouldntUnderstandWarden:: + .string "WARDEN SLOWPOKE came in, but\n" + .string "I couldn't understand him.\p" + .string "I think he's got a speech problem!$" + +FuchsiaCity_SafariZone_Office_Text_PrizeInSafariZone:: + .string "WARDEN SLOWPOKE is running a\n" + .string "promotion campaign right now.\p" + .string "Try to get to the farthest corner\n" + .string "of the SAFARI ZONE.\p" + .string "If you can make it, you'll win a\n" + .string "very convenient prize.$" + diff --git a/data/maps/FuchsiaCity_WardensHouse/scripts.inc b/data/maps/FuchsiaCity_WardensHouse/scripts.inc new file mode 100644 index 000000000000..748cef842820 --- /dev/null +++ b/data/maps/FuchsiaCity_WardensHouse/scripts.inc @@ -0,0 +1,125 @@ +FuchsiaCity_WardensHouse_MapScripts:: + .byte 0 + +FuchsiaCity_WardensHouse_EventScript_Warden:: + lock + faceplayer + goto_if_set FLAG_GOT_HM04, FuchsiaCity_WardensHouse_EventScript_ExplainStrength + goto_if_set FLAG_HIDE_SAFARI_ZONE_WEST_GOLD_TEETH, FuchsiaCity_WardensHouse_EventScript_GiveGoldTeeth + msgbox FuchsiaCity_WardensHouse_Text_HifFuffHefifoo, MSGBOX_YESNO + call_if_eq VAR_RESULT, YES, FuchsiaCity_WardensHouse_EventScript_WardenYes + call_if_eq VAR_RESULT, NO, FuchsiaCity_WardensHouse_EventScript_WardenNo + release + end + +FuchsiaCity_WardensHouse_EventScript_GiveGoldTeeth:: + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_OBTAIN_TMHM + message FuchsiaCity_WardensHouse_Text_GaveGoldTeethToWarden + waitmessage + waitfanfare + msgbox FuchsiaCity_WardensHouse_Text_WardenPoppedInHisTeeth + call EventScript_RestorePrevTextColor + checkplayergender + call_if_eq VAR_RESULT, MALE, FuchsiaCity_WardensHouse_EventScript_WardenThanksMale + call_if_eq VAR_RESULT, FEMALE, FuchsiaCity_WardensHouse_EventScript_WardenThanksFemale + giveitem_msg FuchsiaCity_WardensHouse_Text_ReceivedHM04FromWarden, ITEM_HM04 + setflag FLAG_GOT_HM04 + removeitem ITEM_GOLD_TEETH + release + end + +FuchsiaCity_WardensHouse_EventScript_WardenThanksMale:: + msgbox FuchsiaCity_WardensHouse_Text_ThanksSonGiveYouSomething + return + +FuchsiaCity_WardensHouse_EventScript_WardenThanksFemale:: + msgbox FuchsiaCity_WardensHouse_Text_ThanksLassieGiveYouSomething + return + +FuchsiaCity_WardensHouse_EventScript_WardenYes:: + msgbox FuchsiaCity_WardensHouse_Text_AhHowheeHoHoo + return + +FuchsiaCity_WardensHouse_EventScript_WardenNo:: + msgbox FuchsiaCity_WardensHouse_Text_HeOhayHeHaHoo + return + +FuchsiaCity_WardensHouse_EventScript_ExplainStrength:: + msgbox FuchsiaCity_WardensHouse_Text_ExplainStrength + release + end + +FuchsiaCity_WardensHouse_EventScript_DisplaySign1:: + msgbox FuchsiaCity_WardensHouse_Text_MonPhotosFossilsOnDisplay, MSGBOX_SIGN + end + +FuchsiaCity_WardensHouse_EventScript_DisplaySign2:: + msgbox FuchsiaCity_WardensHouse_Text_OldMonMerchandiseOnDisplay, MSGBOX_SIGN + end + +FuchsiaCity_WardensHouse_Text_HifFuffHefifoo:: + .string "WARDEN: Hif fuff hefifoo!\p" + .string "Ha lof ha feef ee hafahi ho.\n" + .string "Heff hee fwee!$" + +FuchsiaCity_WardensHouse_Text_AhHowheeHoHoo:: + .string "Ah howhee ho hoo!\n" + .string "Eef ee hafahi ho!$" + +FuchsiaCity_WardensHouse_Text_HeOhayHeHaHoo:: + .string "Ha?\n" + .string "He ohay heh ha hoo ee haheh!$" + +FuchsiaCity_WardensHouse_Text_GaveGoldTeethToWarden:: + .string "{PLAYER} gave the GOLD TEETH\n" + .string "to the WARDEN.$" + +FuchsiaCity_WardensHouse_Text_WardenPoppedInHisTeeth:: + .string "The WARDEN popped in his teeth!$" + +FuchsiaCity_WardensHouse_Text_ThanksSonGiveYouSomething:: + .string "WARDEN: Thanks, son!\n" + .string "You're a real lifesaver!\p" + .string "No one could understand a word\n" + .string "that I said, not a one!\p" + .string "I was too ashamed to show my face\n" + .string "around the OFFICE, even.\p" + .string "Let me give you something for your\n" + .string "trouble.$" + +FuchsiaCity_WardensHouse_Text_ThanksLassieGiveYouSomething:: + .string "WARDEN: Thank you, lassie!\n" + .string "You're a real lifesaver!\p" + .string "No one could understand a word\n" + .string "that I said, not a one!\p" + .string "I was too ashamed to show my face\n" + .string "around the OFFICE, even.\p" + .string "Let me give you something for your\n" + .string "trouble.$" + +FuchsiaCity_WardensHouse_Text_ReceivedHM04FromWarden:: + .string "{PLAYER} received HM04\n" + .string "from the WARDEN.$" + +FuchsiaCity_WardensHouse_Text_ExplainStrength:: + .string "WARDEN: Inside HM04 you'll find\n" + .string "STRENGTH.\p" + .string "It lets POKéMON move boulders when\n" + .string "you're outside of battle.\p" + .string "Oh yes, did you find the SECRET\n" + .string "HOUSE in the SAFARI ZONE?$" + +@ Unused +FuchsiaCity_WardensHouse_Text_YouHaveTooMuchStuff:: + .string "なんや にもつ\n" + .string "いっぱいやんけ!$" + +FuchsiaCity_WardensHouse_Text_MonPhotosFossilsOnDisplay:: + .string "POKéMON photos and fossils are on\n" + .string "display.$" + +FuchsiaCity_WardensHouse_Text_OldMonMerchandiseOnDisplay:: + .string "Old POKéMON merchandise is on\n" + .string "display.$" + diff --git a/data/maps/IndigoPlateau_Exterior/scripts.inc b/data/maps/IndigoPlateau_Exterior/scripts.inc new file mode 100644 index 000000000000..6f055f885586 --- /dev/null +++ b/data/maps/IndigoPlateau_Exterior/scripts.inc @@ -0,0 +1,186 @@ +IndigoPlateau_Exterior_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, IndigoPlateau_Exterior_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, IndigoPlateau_Exterior_OnFrame + .byte 0 + +IndigoPlateau_Exterior_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_INDIGO_PLATEAU_EXTERIOR + call_if_eq VAR_MAP_SCENE_INDIGO_PLATEAU_EXTERIOR, 1, IndigoPlateau_Exterior_EventScript_PlayCreditsMusic + end + +IndigoPlateau_Exterior_EventScript_PlayCreditsMusic:: + playbgm MUS_CREDITS, 0 + return + +IndigoPlateau_Exterior_OnFrame:: + map_script_2 VAR_MAP_SCENE_INDIGO_PLATEAU_EXTERIOR, 1, IndigoPlateau_Exterior_EventScript_Credits + .2byte 0 + + +@ After beating the champion, you are warped to the main +@ entrance of Indigo Plateau. This script starts running +@ immediately after your walking animation. +@ The script is timed to the music. +IndigoPlateau_Exterior_EventScript_Credits:: + lockall + delay 105 + + @ Rival exits building. Spawn a dummy object to lock the camera. + opendoor 11, 6 + waitdooranim + special SpawnCameraObject + addobject LOCALID_CREDITS_RIVAL + applymovement LOCALID_CREDITS_RIVAL, IndigoPlateau_Exterior_Movement_RivalExitBuilding + applymovement LOCALID_PLAYER, IndigoPlateau_Exterior_Movement_PushPlayerOutOfWay + waitmovement 0 + closedoor 11, 6 + waitdooranim + + @ Rival runs off + applymovement LOCALID_PLAYER, IndigoPlateau_Exterior_Movement_PlayerWatchRivalLeave + applymovement LOCALID_CREDITS_RIVAL, IndigoPlateau_Exterior_Movement_RivalLeave + waitmovement 0 + delay 100 + + @ Oak exits building + opendoor 11, 6 + waitdooranim + addobject LOCALID_CREDITS_PROF_OAK + applymovement LOCALID_CREDITS_PROF_OAK, IndigoPlateau_Exterior_Movement_OakExitBuilding + waitmovement 0 + closedoor 11, 6 + waitdooranim + delay 160 + + @ Oak looks at player, then walks off + applymovement LOCALID_PLAYER, IndigoPlateau_Exterior_Movement_PlayerWatchOakLeave + applymovement LOCALID_CREDITS_PROF_OAK, IndigoPlateau_Exterior_Movement_OakLeave + waitmovement 0 + delay 100 + + @ Player begin to leave + applymovement LOCALID_PLAYER, IndigoPlateau_Exterior_Movement_PlayerBeginLeave + waitmovement 0 + delay 155 + applymovement LOCALID_PLAYER, IndigoPlateau_Exterior_Movement_PlayerFaceLeague + waitmovement 0 + delay 90 + + @ Player runs off + applymovement LOCALID_PLAYER, IndigoPlateau_Exterior_Movement_PlayerTurnAround + waitmovement 0 + applymovement LOCALID_PLAYER, IndigoPlateau_Exterior_Movement_PlayerLeave + waitmovement 0 + + @ Reset the map state and roll the credits + special RemoveCameraObject + setvar VAR_MAP_SCENE_INDIGO_PLATEAU_EXTERIOR, 0 + removeobject LOCALID_CREDITS_RIVAL + removeobject LOCALID_CREDITS_PROF_OAK + special CB2_StartCreditsSequence + waitstate + releaseall + end + +IndigoPlateau_Exterior_Movement_PlayerLeave:: + player_run_down + player_run_down + player_run_down + player_run_down + player_run_down + player_run_down + step_end + +@ Unused +IndigoPlateau_Exterior_Movement_PlayerExitBuilding:: + walk_down + walk_down + step_end + +IndigoPlateau_Exterior_Movement_PlayerWatchRivalLeave:: + delay_16 + delay_4 + walk_in_place_faster_down + step_end + +IndigoPlateau_Exterior_Movement_PlayerWatchOakLeave:: + delay_8 + walk_in_place_faster_right + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + walk_in_place_faster_down + step_end + +IndigoPlateau_Exterior_Movement_PlayerBeginLeave:: + walk_right + delay_16 + walk_down + walk_down + delay_16 + delay_16 + step_end + +IndigoPlateau_Exterior_Movement_PlayerTurnAround:: + walk_in_place_faster_down + step_end + +IndigoPlateau_Exterior_Movement_PushPlayerOutOfWay:: + face_right + lock_facing_direction + walk_left + unlock_facing_direction + step_end + +IndigoPlateau_Exterior_Movement_PlayerFaceLeague:: + walk_in_place_faster_up + step_end + +IndigoPlateau_Exterior_Movement_RivalLeave:: + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + step_end + +IndigoPlateau_Exterior_Movement_RivalExitBuilding:: + walk_fast_down + step_end + +IndigoPlateau_Exterior_Movement_OakLeave:: + walk_in_place_faster_left + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + walk_in_place_faster_down + delay_16 + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +IndigoPlateau_Exterior_Movement_OakExitBuilding:: + walk_down + step_end diff --git a/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc b/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..484d96abd160 --- /dev/null +++ b/data/maps/IndigoPlateau_PokemonCenter_1F/scripts.inc @@ -0,0 +1,113 @@ +IndigoPlateau_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, IndigoPlateau_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +IndigoPlateau_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_INDIGO_PLATEAU + specialvar VAR_RESULT, IsNationalPokedexEnabled + call_if_eq VAR_RESULT, TRUE, IndigoPlateau_PokemonCenter_1F_EventScript_CheckBlockDoor + end + +IndigoPlateau_PokemonCenter_1F_EventScript_CheckBlockDoor:: + goto_if_set FLAG_IS_CHAMPION, Common_EventScript_NopReturn + setobjectxyperm LOCALID_LEAGUE_DOOR_GUARD, 4, 2 + return + +IndigoPlateau_PokemonCenter_1F_EventScript_DoorGuard:: + lock + faceplayer + specialvar VAR_RESULT, IsNationalPokedexEnabled + goto_if_eq VAR_RESULT, TRUE, IndigoPlateau_PokemonCenter_1F_EventScript_CheckSeviiIslandComplete + msgbox IndigoPlateau_PokemonCenter_1F_Text_FaceEliteFourGoodLuck + release + end + +IndigoPlateau_PokemonCenter_1F_EventScript_CheckSeviiIslandComplete:: + goto_if_set FLAG_IS_CHAMPION, IndigoPlateau_PokemonCenter_1F_EventScript_SeviiIslandComplete + msgbox IndigoPlateau_PokemonCenter_1F_Text_LoreleiIsAbsentClosedForTimeBeing + release + end + +IndigoPlateau_PokemonCenter_1F_EventScript_SeviiIslandComplete:: + msgbox IndigoPlateau_PokemonCenter_1F_Text_FaceEliteFourGoodLuck + release + end + +IndigoPlateau_PokemonCenter_1F_EventScript_GymGuy:: + msgbox IndigoPlateau_PokemonCenter_1F_Text_GymGuyAdvice, MSGBOX_NPC + end + +IndigoPlateau_PokemonCenter_1F_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart IndigoPlateau_PokemonCenter_1F_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +IndigoPlateau_PokemonCenter_1F_Items:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_GREAT_BALL + .2byte ITEM_FULL_RESTORE + .2byte ITEM_MAX_POTION + .2byte ITEM_REVIVE + .2byte ITEM_FULL_HEAL + .2byte ITEM_MAX_REPEL + .2byte ITEM_NONE + release + end + +IndigoPlateau_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +IndigoPlateau_PokemonCenter_1F_Text_GymGuyAdvice:: + .string "Yo!\n" + .string "Champ in the making!\p" + .string "At the POKéMON LEAGUE, you will\n" + .string "face the ELITE FOUR all in a row.\p" + .string "If you lose, you have to start all\n" + .string "over again!\p" + .string "This is it!\n" + .string "Go for it!$" + +IndigoPlateau_PokemonCenter_1F_Text_FaceEliteFourGoodLuck:: + .string "From here on, you face the\n" + .string "ELITE FOUR one by one.\p" + .string "If you win, a door opens to the\n" + .string "next TRAINER. Good luck!$" + +IndigoPlateau_PokemonCenter_1F_Text_LoreleiIsAbsentClosedForTimeBeing:: + .string "I am so sorry, but you've wasted\n" + .string "your time coming here.\p" + .string "LORELEI of the ELITE FOUR is\n" + .string "absent, you see.\p" + .string "As a result, the POKéMON LEAGUE is\n" + .string "closed for the time being.$" + +IndigoPlateau_PokemonCenter_1F_Text_AgathaWhuppedUs:: + .string "AGATHA's GHOST-type POKéMON are\n" + .string "horrifically terrifying in toughness.\p" + .string "I took my FIGHTING-type POKéMON\n" + .string "and raised them to the max.\p" + .string "I went at AGATHA feeling pretty\n" + .string "confident, but she whupped us.\p" + .string "That old lady's also got a really\n" + .string "short fuse, too.\p" + .string "It doesn't take anything to get\n" + .string "that scary lady hollering.$" + +IndigoPlateau_PokemonCenter_1F_Text_LancesCousinGymLeaderFarAway:: + .string "Maybe becoming an ELITE FOUR\n" + .string "member is in the blood.\p" + .string "From what I've heard, LANCE has\n" + .string "a cousin who's a GYM LEADER\l" + .string "somewhere far away.$" + diff --git a/data/maps/IndigoPlateau_PokemonCenter_2F/scripts.inc b/data/maps/IndigoPlateau_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..841712a89660 --- /dev/null +++ b/data/maps/IndigoPlateau_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +IndigoPlateau_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +IndigoPlateau_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +IndigoPlateau_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +IndigoPlateau_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/LavenderTown/scripts.inc b/data/maps/LavenderTown/scripts.inc new file mode 100644 index 000000000000..f14c738de3da --- /dev/null +++ b/data/maps/LavenderTown/scripts.inc @@ -0,0 +1,88 @@ +LavenderTown_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, LavenderTown_OnTransition + .byte 0 + +LavenderTown_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_LAVENDER_TOWN + setvar VAR_MAP_SCENE_S_S_ANNE_2F_CORRIDOR, 1 + setflag FLAG_HIDE_SS_ANNE_RIVAL + end + +LavenderTown_EventScript_LittleGirl:: + lock + faceplayer + msgbox LavenderTown_Text_DoYouBelieveInGhosts, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LavenderTown_EventScript_LittleGirlBelieve + msgbox LavenderTown_Text_JustImaginingWhiteHand + release + end + +LavenderTown_EventScript_LittleGirlBelieve:: + msgbox LavenderTown_Text_SoThereAreBelievers + release + end + +LavenderTown_EventScript_WorkerM:: + msgbox LavenderTown_Text_TownKnownAsMonGraveSite, MSGBOX_NPC + end + +LavenderTown_EventScript_Boy:: + msgbox LavenderTown_Text_GhostsAppearedInTower, MSGBOX_NPC + end + +LavenderTown_EventScript_TownSign:: + msgbox LavenderTown_Text_TownSign, MSGBOX_SIGN + end + +LavenderTown_EventScript_SilphScopeNotice:: + msgbox LavenderTown_Text_SilphScopeNotice, MSGBOX_SIGN + end + +LavenderTown_EventScript_VolunteerHouseSign:: + msgbox LavenderTown_Text_VolunteerPokemonHouse, MSGBOX_SIGN + end + +LavenderTown_EventScript_PokemonTowerSign:: + msgbox LavenderTown_Text_PokemonTowerSign, MSGBOX_SIGN + end + +LavenderTown_Text_DoYouBelieveInGhosts:: + .string "Do you believe in ghosts?$" + +LavenderTown_Text_SoThereAreBelievers:: + .string "Really?\n" + .string "So there are believers…$" + +LavenderTown_Text_JustImaginingWhiteHand:: + .string "Hahaha, I guess not.\p" + .string "That white hand on your shoulder…\n" + .string "I'm just imagining it.$" + +LavenderTown_Text_TownKnownAsMonGraveSite:: + .string "This town is known as the grave\n" + .string "site of POKéMON.\p" + .string "Memorial services are held in\n" + .string "POKéMON TOWER.$" + +LavenderTown_Text_GhostsAppearedInTower:: + .string "Ghosts appeared in POKéMON TOWER.\p" + .string "I think they're the spirits of\n" + .string "POKéMON that the ROCKETS killed.$" + +LavenderTown_Text_TownSign:: + .string "LAVENDER TOWN\n" + .string "The Noble Purple Town$" + +LavenderTown_Text_SilphScopeNotice:: + .string "New SILPH SCOPE!\n" + .string "Make the Invisible Plain to See!\p" + .string "SILPH CO.$" + +LavenderTown_Text_VolunteerPokemonHouse:: + .string "LAVENDER VOLUNTEER\n" + .string "POKéMON HOUSE$" + +LavenderTown_Text_PokemonTowerSign:: + .string "POKéMON TOWER\n" + .string "Becalm the Spirits of POKéMON$" + diff --git a/data/maps/LavenderTown_House1/scripts.inc b/data/maps/LavenderTown_House1/scripts.inc new file mode 100644 index 000000000000..b16f1585922b --- /dev/null +++ b/data/maps/LavenderTown_House1/scripts.inc @@ -0,0 +1,42 @@ +LavenderTown_House1_MapScripts:: + .byte 0 + +LavenderTown_House1_EventScript_CooltrainerF:: + lock + faceplayer + goto_if_set FLAG_RESCUED_MR_FUJI, LavenderTown_House1_EventScript_CooltrainerFGhostGone + msgbox LavenderTown_House1_Text_RocketsKilledCubonesMother + release + end + +LavenderTown_House1_EventScript_CooltrainerFGhostGone:: + msgbox LavenderTown_House1_Text_GhostOfPokemonTowerIsGone + release + end + +LavenderTown_House1_EventScript_Cubone:: + lock + faceplayer + waitse + playmoncry SPECIES_CUBONE, CRY_MODE_NORMAL + msgbox LavenderTown_House1_Text_Cubone + waitmoncry + release + end + +LavenderTown_House1_Text_Cubone:: + .string "CUBONE: Kyarugoo!$" + +LavenderTown_House1_Text_RocketsKilledCubonesMother:: + .string "Those horrible ROCKETS!\n" + .string "They deserve no mercy!\p" + .string "That poor CUBONE's mother…\p" + .string "It was killed trying to escape from\n" + .string "TEAM ROCKET.$" + +LavenderTown_House1_Text_GhostOfPokemonTowerIsGone:: + .string "The ghost of POKéMON TOWER is\n" + .string "gone!\p" + .string "Someone must have soothed its\n" + .string "restless spirit!$" + diff --git a/data/maps/LavenderTown_House2/scripts.inc b/data/maps/LavenderTown_House2/scripts.inc new file mode 100644 index 000000000000..de8d2675363e --- /dev/null +++ b/data/maps/LavenderTown_House2/scripts.inc @@ -0,0 +1,110 @@ +LavenderTown_House2_MapScripts:: + .byte 0 + +LavenderTown_House2_EventScript_NameRater:: + lock + faceplayer + msgbox LavenderTown_House2_Text_WantMeToRateNicknames, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LavenderTown_House2_EventScript_ChooseMon + goto_if_eq VAR_RESULT, NO, LavenderTown_House2_EventScript_DontRateNickname + end + +LavenderTown_House2_EventScript_ChooseMon:: + msgbox LavenderTown_House2_Text_CritiqueWhichMonsNickname + special ChoosePartyMon + waitstate + goto_if_lt VAR_0x8004, PARTY_SIZE, LavenderTown_House2_EventScript_CheckCanRateMon + goto_if_ge VAR_0x8004, PARTY_SIZE, LavenderTown_House2_EventScript_DontRateNickname + end + +LavenderTown_House2_EventScript_DontRateNickname:: + msgbox LavenderTown_House2_Text_ISeeComeVisitAgain + release + end + +LavenderTown_House2_EventScript_CheckCanRateMon:: + specialvar VAR_RESULT, ScriptGetPartyMonSpecies + goto_if_eq VAR_RESULT, SPECIES_EGG, LavenderTown_House2_EventScript_CantNicknameEgg + special BufferMonNickname + special IsMonOTIDNotPlayers + goto_if_eq VAR_RESULT, TRUE, LavenderTown_House2_EventScript_CantNicknameTradeMon + specialvar VAR_RESULT, MonOTNameNotPlayer + special BufferMonNickname + goto_if_eq VAR_RESULT, TRUE, LavenderTown_House2_EventScript_CantNicknameTradeMon + msgbox LavenderTown_House2_Text_GiveItANicerName, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, LavenderTown_House2_EventScript_ChooseNewNickname + goto_if_eq VAR_RESULT, NO, LavenderTown_House2_EventScript_DontRateNickname + end + +LavenderTown_House2_EventScript_CantNicknameEgg:: + msgbox LavenderTown_House2_Text_ThatIsMerelyAnEgg + release + end + +LavenderTown_House2_EventScript_CantNicknameTradeMon:: + msgbox LavenderTown_House2_Text_TrulyImpeccableName + release + end + +LavenderTown_House2_EventScript_ChooseNewNickname:: + msgbox LavenderTown_House2_Text_WhatShallNewNicknameBe + call Common_EventScript_NameReceivedPartyMon + specialvar VAR_RESULT, TryPutNameRaterShowOnTheAir + special BufferMonNickname + goto_if_eq VAR_RESULT, TRUE, LavenderTown_House2_EventScript_ChoseNewNickname + msgbox LavenderTown_House2_Text_FromNowOnShallBeKnownAsSameName + release + end + +LavenderTown_House2_EventScript_ChoseNewNickname:: + msgbox LavenderTown_House2_Text_FromNowOnShallBeKnownAsName + release + end + +LavenderTown_House2_Text_WantMeToRateNicknames:: + .string "Hello, hello!\n" + .string "I am the official NAME RATER!\p" + .string "Want me to rate the nicknames of\n" + .string "your POKéMON?$" + +LavenderTown_House2_Text_CritiqueWhichMonsNickname:: + .string "Which POKéMON's nickname should\n" + .string "I critique?$" + +LavenderTown_House2_Text_GiveItANicerName:: + .string "{STR_VAR_1}, is it?\n" + .string "That is a decent nickname!\p" + .string "But, would you like me to give it\n" + .string "a nicer name?\p" + .string "How about it?$" + +LavenderTown_House2_Text_WhatShallNewNicknameBe:: + .string "Ah, good. Then, what shall the new\n" + .string "nickname be?$" + +LavenderTown_House2_Text_FromNowOnShallBeKnownAsName:: + .string "Done! From now on, this POKéMON\n" + .string "shall be known as {STR_VAR_1}!\p" + .string "It is a better name than before!\n" + .string "How fortunate for you!$" + +LavenderTown_House2_Text_ISeeComeVisitAgain:: + .string "I see.\n" + .string "Do come visit again.$" + +LavenderTown_House2_Text_FromNowOnShallBeKnownAsSameName:: + .string "Done! From now on, this POKéMON\n" + .string "shall be known as {STR_VAR_1}!\p" + .string "It looks no different from before,\n" + .string "and yet, this is vastly superior!\p" + .string "How fortunate for you!$" + +LavenderTown_House2_Text_TrulyImpeccableName:: + .string "{STR_VAR_1}, is it?\n" + .string "That is a truly impeccable name!\p" + .string "Take good care of {STR_VAR_1}!$" + +LavenderTown_House2_Text_ThatIsMerelyAnEgg:: + .string "Now, now.\n" + .string "That is merely an EGG!$" + diff --git a/data/maps/LavenderTown_Mart/scripts.inc b/data/maps/LavenderTown_Mart/scripts.inc new file mode 100644 index 000000000000..63317ea26093 --- /dev/null +++ b/data/maps/LavenderTown_Mart/scripts.inc @@ -0,0 +1,65 @@ +LavenderTown_Mart_MapScripts:: + .byte 0 + +LavenderTown_Mart_EventScript_BaldingMan:: + msgbox LavenderTown_Mart_Text_SearchingForStatRaiseItems, MSGBOX_NPC + end + +LavenderTown_Mart_EventScript_Rocker:: + msgbox LavenderTown_Mart_Text_DidYouBuyRevives, MSGBOX_NPC + end + +LavenderTown_Mart_EventScript_Youngster:: + msgbox LavenderTown_Mart_Text_TrainerDuosCanChallengeYou, MSGBOX_NPC + end + +LavenderTown_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart LavenderTown_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +LavenderTown_Mart_Items:: + .2byte ITEM_GREAT_BALL + .2byte ITEM_SUPER_POTION + .2byte ITEM_REVIVE + .2byte ITEM_ANTIDOTE + .2byte ITEM_PARALYZE_HEAL + .2byte ITEM_BURN_HEAL + .2byte ITEM_ICE_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_SUPER_REPEL + .2byte ITEM_NONE + release + end + +LavenderTown_Mart_Text_SearchingForStatRaiseItems:: + .string "I'm searching for items that raise\n" + .string "the stats of POKéMON.\p" + .string "They're effective over the course\n" + .string "of a single battle.\p" + .string "X ATTACK, X DEFEND, X SPEED, \n" + .string "and X SPECIAL are what I'm after.\p" + .string "Do you know where I can get them?$" + +LavenderTown_Mart_Text_DidYouBuyRevives:: + .string "Did you buy some REVIVES?\n" + .string "They revive any fainted POKéMON!$" + +LavenderTown_Mart_Text_TrainerDuosCanChallengeYou:: + .string "Sometimes, a TRAINER duo will\n" + .string "challenge you with two POKéMON\l" + .string "at the same time.\p" + .string "If that happens, you have to send\n" + .string "out two POKéMON to battle, too.$" + +LavenderTown_Mart_Text_SoldNuggetFromMountainsFor5000:: + .string "この あいだ やまおくで\n" + .string "きんのたまを ひろい ましてね!\p" + .string "つかえない しなもの ですが\n" + .string "うったら なんと 5000¥でした$" diff --git a/data/maps/LavenderTown_PokemonCenter_1F/scripts.inc b/data/maps/LavenderTown_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..663452bcdb49 --- /dev/null +++ b/data/maps/LavenderTown_PokemonCenter_1F/scripts.inc @@ -0,0 +1,44 @@ +LavenderTown_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, LavenderTown_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +LavenderTown_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_LAVENDER_TOWN + end + +LavenderTown_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +LavenderTown_PokemonCenter_1F_EventScript_Gentleman:: + msgbox LavenderTown_PokemonCenter_1F_Text_RocketsDoAnythingForMoney, MSGBOX_NPC + end + +LavenderTown_PokemonCenter_1F_EventScript_Lass:: + msgbox LavenderTown_PokemonCenter_1F_Text_CubonesMotherKilledByRockets, MSGBOX_NPC + end + +LavenderTown_PokemonCenter_1F_EventScript_Youngster:: + msgbox LavenderTown_PokemonCenter_1F_Text_PeoplePayForCuboneSkulls, MSGBOX_NPC + end + +LavenderTown_PokemonCenter_1F_Text_RocketsDoAnythingForMoney:: + .string "TEAM ROCKET will do anything for\n" + .string "the sake of money!\p" + .string "There is no job too dirty, no deed\n" + .string "too heinous, no crime too wicked!$" + +LavenderTown_PokemonCenter_1F_Text_CubonesMotherKilledByRockets:: + .string "I saw CUBONE's mother trying to\n" + .string "escape from TEAM ROCKET.\p" + .string "She was killed trying to get away…$" + +LavenderTown_PokemonCenter_1F_Text_PeoplePayForCuboneSkulls:: + .string "You know how the CUBONE species\n" + .string "wears skulls, right?\p" + .string "People will pay a lot for one.$" + diff --git a/data/maps/LavenderTown_PokemonCenter_2F/scripts.inc b/data/maps/LavenderTown_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..08a3478d325f --- /dev/null +++ b/data/maps/LavenderTown_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +LavenderTown_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +LavenderTown_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +LavenderTown_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +LavenderTown_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/LavenderTown_VolunteerPokemonHouse/scripts.inc b/data/maps/LavenderTown_VolunteerPokemonHouse/scripts.inc new file mode 100644 index 000000000000..60acf4b50e9f --- /dev/null +++ b/data/maps/LavenderTown_VolunteerPokemonHouse/scripts.inc @@ -0,0 +1,149 @@ +LavenderTown_VolunteerPokemonHouse_MapScripts:: + .byte 0 + +LavenderTown_VolunteerPokemonHouse_EventScript_MrFuji:: + lock + faceplayer + goto_if_set FLAG_GOT_POKE_FLUTE, LavenderTown_VolunteerPokemonHouse_EventScript_AlreadyHavePokeFlute + msgbox LavenderTown_VolunteerPokemonHouse_Text_IdLikeYouToHaveThis + checkitemspace ITEM_POKE_FLUTE + goto_if_eq VAR_RESULT, FALSE, LavenderTown_VolunteerPokemonHouse_EventScript_NoRoomForPokeFlute + setflag FLAG_GOT_POKE_FLUTE + giveitem_msg LavenderTown_VolunteerPokemonHouse_Text_ReceivedPokeFluteFromMrFuji, ITEM_POKE_FLUTE, 1, MUS_RG_OBTAIN_KEY_ITEM + msgbox LavenderTown_VolunteerPokemonHouse_Text_ExplainPokeFlute + release + end + +LavenderTown_VolunteerPokemonHouse_EventScript_AlreadyHavePokeFlute:: + msgbox LavenderTown_VolunteerPokemonHouse_Text_HasPokeFluteHelpedYou + release + end + +LavenderTown_VolunteerPokemonHouse_EventScript_NoRoomForPokeFlute:: + msgbox LavenderTown_VolunteerPokemonHouse_Text_MustMakeRoomForThis + release + end + +LavenderTown_VolunteerPokemonHouse_EventScript_LittleGirl:: + lock + faceplayer + famechecker FAMECHECKER_MRFUJI, 0 + msgbox LavenderTown_VolunteerPokemonHouse_Text_MrFujiLooksAfterOrphanedMons + release + end + +LavenderTown_VolunteerPokemonHouse_EventScript_LittleBoy:: + msgbox LavenderTown_VolunteerPokemonHouse_Text_MonsNiceToHug, MSGBOX_NPC + end + +LavenderTown_VolunteerPokemonHouse_EventScript_Youngster:: + lock + faceplayer + goto_if_set FLAG_RESCUED_MR_FUJI, LavenderTown_VolunteerPokemonHouse_EventScript_YoungsterFujiBack + msgbox LavenderTown_VolunteerPokemonHouse_Text_WhereDidMrFujiGo + release + end + +LavenderTown_VolunteerPokemonHouse_EventScript_YoungsterFujiBack:: + msgbox LavenderTown_VolunteerPokemonHouse_Text_MrFujiWasPrayingForCubonesMother + release + end + +LavenderTown_VolunteerPokemonHouse_EventScript_Nidorino:: + lock + faceplayer + waitse + playmoncry SPECIES_NIDORINO, CRY_MODE_NORMAL + msgbox LavenderTown_VolunteerPokemonHouse_Text_Nidorino + waitmoncry + release + end + +LavenderTown_VolunteerPokemonHouse_EventScript_Psyduck:: + lock + faceplayer + waitse + playmoncry SPECIES_PSYDUCK, CRY_MODE_NORMAL + msgbox LavenderTown_VolunteerPokemonHouse_Text_Psyduck + waitmoncry + release + end + +LavenderTown_VolunteerPokemonHouse_EventScript_PokemonFanMagazine:: + lockall + famechecker FAMECHECKER_MRFUJI, 2 + msgbox LavenderTown_VolunteerPokemonHouse_Text_GrandPrizeDrawingClipped + releaseall + end + +LavenderTown_VolunteerPokemonHouse_EventScript_Bookshelf:: + msgbox LavenderTown_VolunteerPokemonHouse_Text_PokemonMagazinesLineShelf, MSGBOX_SIGN + end + +LavenderTown_PokemonCenter_1F_Text_HearMrFujiNotFromAroundHere:: + .string "I recently moved to this town.\p" + .string "I hear that MR. FUJI's not from\n" + .string "these parts originally, either.$" + +LavenderTown_VolunteerPokemonHouse_Text_WhereDidMrFujiGo:: + .string "That's odd, MR. FUJI isn't here.\n" + .string "Where'd he go?$" + +LavenderTown_VolunteerPokemonHouse_Text_MrFujiWasPrayingForCubonesMother:: + .string "MR. FUJI had been praying alone\n" + .string "for CUBONE's mother.$" + +LavenderTown_VolunteerPokemonHouse_Text_MrFujiLooksAfterOrphanedMons:: + .string "This is really MR. FUJI's house.\p" + .string "He's really kind.\p" + .string "He looks after abandoned and\n" + .string "orphaned POKéMON.$" + +LavenderTown_VolunteerPokemonHouse_Text_MonsNiceToHug:: + .string "It's so warm!\n" + .string "POKéMON are so nice to hug.$" + +LavenderTown_VolunteerPokemonHouse_Text_Nidorino:: + .string "NIDORINO: Gaoo!$" + +LavenderTown_VolunteerPokemonHouse_Text_Psyduck:: + .string "PSYDUCK: Gwappa!$" + +LavenderTown_VolunteerPokemonHouse_Text_IdLikeYouToHaveThis:: + .string "MR. FUJI: {PLAYER}…\p" + .string "Your POKéDEX quest is one that\n" + .string "requires strong dedication.\p" + .string "Without deep love for POKéMON,\n" + .string "your quest may fail.\p" + .string "I'm not sure if this will help you,\n" + .string "but I'd like you to have it.$" + +LavenderTown_VolunteerPokemonHouse_Text_ReceivedPokeFluteFromMrFuji:: + .string "{PLAYER} received a POKé FLUTE\n" + .string "from MR. FUJI.$" + +LavenderTown_VolunteerPokemonHouse_Text_ExplainPokeFlute:: + .string "Upon hearing the POKé FLUTE,\n" + .string "sleeping POKéMON will spring awake.\p" + .string "Try using it on POKéMON that are\n" + .string "sleeping obstacles.$" + +LavenderTown_VolunteerPokemonHouse_Text_MustMakeRoomForThis:: + .string "You must make room for this!$" + +LavenderTown_VolunteerPokemonHouse_Text_HasPokeFluteHelpedYou:: + .string "MR. FUJI: Has my POKé FLUTE\n" + .string "helped you?$" + +LavenderTown_VolunteerPokemonHouse_Text_GrandPrizeDrawingClipped:: + .string "POKéMON FAN MAGAZINE\n" + .string "Monthly Grand Prize Drawing!\p" + .string "The application form is…\p" + .string "Gone! It's been clipped out.\n" + .string "Someone must have applied already.$" + +LavenderTown_VolunteerPokemonHouse_Text_PokemonMagazinesLineShelf:: + .string "POKéMON magazines line the shelf.\p" + .string "POKéMON INSIDER…\p" + .string "POKéMON FAN…$" + diff --git a/data/maps/MtEmber_Exterior/scripts.inc b/data/maps/MtEmber_Exterior/scripts.inc new file mode 100644 index 000000000000..b57fae5ca84e --- /dev/null +++ b/data/maps/MtEmber_Exterior/scripts.inc @@ -0,0 +1,247 @@ +MtEmber_Exterior_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, MtEmber_Exterior_OnTransition + map_script MAP_SCRIPT_ON_LOAD, MtEmber_Exterior_OnLoad + .byte 0 + +MtEmber_Exterior_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_MT_EMBER_EXTERIOR + call_if_eq VAR_MAP_SCENE_MT_EMBER_EXTERIOR, 2, MtEmber_Exterior_EventScript_RocketsFaceDown + end + +MtEmber_Exterior_EventScript_RocketsFaceDown:: + setobjectmovementtype LOCALID_MT_EMBER_GRUNT1, MOVEMENT_TYPE_FACE_DOWN + setobjectmovementtype LOCALID_MT_EMBER_GRUNT2, MOVEMENT_TYPE_FACE_DOWN + return + +MtEmber_Exterior_OnLoad:: + call_if_ge VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 4, MtEmber_Exterior_EventScript_OpenCave + end + +MtEmber_Exterior_EventScript_OpenCave:: + setmetatile 42, 39, METATILE_MtEmber_CaveEntrance, 0 + return + +MtEmber_Exterior_EventScript_Grunt1:: + lock + goto_if_defeated TRAINER_TEAM_ROCKET_GRUNT_43, MtEmber_Exterior_EventScript_Grunt1Defeated + goto_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 4, MtEmber_Exterior_EventScript_BattleGrunt1 + msgbox MtEmber_Exterior_Text_WellTryDiggingHere + release + end + +MtEmber_Exterior_EventScript_Grunt1Defeated:: + msgbox MtEmber_Exterior_Text_Grunt1PostBattle + release + end + +MtEmber_Exterior_EventScript_BattleGrunt1:: + applymovement LOCALID_MT_EMBER_GRUNT1, Common_Movement_FacePlayer + waitmovement 0 + playbgm MUS_RG_ENCOUNTER_ROCKET, 0 + msgbox MtEmber_Exterior_Text_Grunt1Intro + trainerbattle_no_intro TRAINER_TEAM_ROCKET_GRUNT_43, MtEmber_Exterior_Text_Grunt1Defeat + msgbox MtEmber_Exterior_Text_Grunt1PostBattle + goto_if_defeated TRAINER_TEAM_ROCKET_GRUNT_44, MtEmber_Exterior_EventScript_DefeatedBothGrunts + release + end + +MtEmber_Exterior_EventScript_DefeatedBothGrunts:: + msgbox MtEmber_Exterior_Text_WellRegroupDontStepInsideThere + closemessage + fadescreenswapbuffers FADE_TO_BLACK + removeobject LOCALID_MT_EMBER_GRUNT1 + removeobject LOCALID_MT_EMBER_GRUNT2 + fadescreenswapbuffers FADE_FROM_BLACK + release + end + +MtEmber_Exterior_EventScript_Grunt2:: + lock + faceplayer + goto_if_defeated TRAINER_TEAM_ROCKET_GRUNT_44, MtEmber_Exterior_EventScript_DefeatedGrunt2 + goto_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 4, MtEmber_Exterior_EventScript_BattleGrunt2 + msgbox MtEmber_Exterior_Text_YoureInTheWayGetLost + closemessage + applymovement LOCALID_MT_EMBER_GRUNT2, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +MtEmber_Exterior_EventScript_DefeatedGrunt2:: + msgbox MtEmber_Exterior_Text_Grunt2PostBattle + release + end + +MtEmber_Exterior_EventScript_BattleGrunt2:: + playbgm MUS_RG_ENCOUNTER_ROCKET, 0 + msgbox MtEmber_Exterior_Text_Grunt2Intro + trainerbattle_no_intro TRAINER_TEAM_ROCKET_GRUNT_44, MtEmber_Exterior_Text_Grunt2Defeat + msgbox MtEmber_Exterior_Text_Grunt2PostBattle + goto_if_defeated TRAINER_TEAM_ROCKET_GRUNT_43, MtEmber_Exterior_EventScript_DefeatedBothGrunts + release + end + +MtEmber_Exterior_EventScript_RocketPasswordScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + msgbox MtEmber_Exterior_Text_PunchedThroughAtLast + message MtEmber_Exterior_Text_WhatsPasswordAgain + waitmessage + playse SE_PIN + applymovement LOCALID_MT_EMBER_GRUNT2, Common_Movement_QuestionMark + waitmovement 0 + waitbuttonpress + msgbox MtEmber_Exterior_Text_FirstPasswordGoldeen + applymovement LOCALID_MT_EMBER_GRUNT1, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + playse SE_PIN + applymovement LOCALID_MT_EMBER_GRUNT1, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_MT_EMBER_GRUNT1, Common_Movement_Delay48 + waitmovement 0 + applymovement LOCALID_MT_EMBER_GRUNT2, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + call MtEmber_Exterior_EventScript_RocketsFaceDown + msgbox MtEmber_Exterior_Text_SnoopsBeenListeningIn + setvar VAR_MAP_SCENE_MT_EMBER_EXTERIOR, 2 + releaseall + end + +MtEmber_Exterior_EventScript_Logan:: + trainerbattle_single TRAINER_PKMN_RANGER_LOGAN, MtEmber_Exterior_Text_LoganIntro, MtEmber_Exterior_Text_LoganDefeat + msgbox MtEmber_Exterior_Text_LoganPostBattle, MSGBOX_AUTOCLOSE + end + +MtEmber_Exterior_EventScript_Beth:: + trainerbattle_single TRAINER_PKMN_RANGER_BETH, MtEmber_Exterior_Text_BethIntro, MtEmber_Exterior_Text_BethDefeat + msgbox MtEmber_Exterior_Text_BethPostBattle, MSGBOX_AUTOCLOSE + end + +MtEmber_Exterior_EventScript_Jocelyn:: + trainerbattle_single TRAINER_CRUSH_GIRL_JOCELYN, MtEmber_Exterior_Text_JocelynIntro, MtEmber_Exterior_Text_JocelynDefeat + msgbox MtEmber_Exterior_Text_JocelynPostBattle, MSGBOX_AUTOCLOSE + end + +Text_ExplosionTeach:: + .string "Can you imagine?\n" + .string "If this volcano were to erupt?\p" + .string "The explosion would be the end of\n" + .string "us. How terrifying is that?\p" + .string "While we're terrified, would you\n" + .string "like me to teach EXPLOSION?$" + +Text_ExplosionDeclined:: + .string "Yeah, you're right.\n" + .string "It is too terrifying.$" + +Text_ExplosionWhichMon:: + .string "You're terribly brave!\p" + .string "Which POKéMON should I teach\n" + .string "EXPLOSION?$" + +Text_ExplosionTaught:: + .string "Using EXPLOSION while on this\n" + .string "volcano…\p" + .string "What a terrifying thrill!$" + +MtEmber_Exterior_Text_WellTryDiggingHere:: + .string "Over here.\n" + .string "We'll try digging here.\p" + .string "That treasure the ADMINS've been\n" + .string "talking about should be here.$" + +MtEmber_Exterior_Text_YoureInTheWayGetLost:: + .string "What the…?\n" + .string "You're in the way. Get lost.$" + +MtEmber_Exterior_Text_PunchedThroughAtLast:: + .string "Whew, punched through at last.\n" + .string "Let's go treasure hunting!$" + +MtEmber_Exterior_Text_WhatsPasswordAgain:: + .string "Any treasure we find, we haul back\n" + .string "to the WAREHOUSE, understood?\p" + .string "…Oh, and what're the passwords?\n" + .string "At the ROCKET WAREHOUSE, I mean.$" + +MtEmber_Exterior_Text_FirstPasswordGoldeen:: + .string "What, you forgot the password?\n" + .string "There're actually two.\p" + .string "The first one's “GOLDEEN need\n" + .string "log.”\p" + .string "And the second one is…$" + +MtEmber_Exterior_Text_SnoopsBeenListeningIn:: + .string "Hey!\n" + .string "This snoop's been listening in!$" + +MtEmber_Exterior_Text_Grunt1Intro:: + .string "You've been eavesdropping on us,\n" + .string "haven't you?$" + +MtEmber_Exterior_Text_Grunt1Defeat:: + .string "Huh, what?$" + +MtEmber_Exterior_Text_Grunt1PostBattle:: + .string "Why'd you have to win?$" + +MtEmber_Exterior_Text_Grunt2Intro:: + .string "Trying to horn in on our treasure?\n" + .string "Don't bet on it!$" + +MtEmber_Exterior_Text_Grunt2Defeat:: + .string "Wait!\n" + .string "But how?$" + +MtEmber_Exterior_Text_Grunt2PostBattle:: + .string "Develop amnesia conveniently and\n" + .string "forget everything you heard!$" + +MtEmber_Exterior_Text_WellRegroupDontStepInsideThere:: + .string "What a setback…\n" + .string "We'll have to regroup.\p" + .string "You! Don't even think about taking\n" + .string "a step inside here!\p" + .string "If you know what's good for you,\n" + .string "don't even think about this!$" + +MtEmber_Exterior_Text_LoganIntro:: + .string "An active volcano is one that's\n" + .string "erupting, or about to.$" + +MtEmber_Exterior_Text_LoganDefeat:: + .string "Whew… That was hot!\n" + .string "Sweat's erupting from me!$" + +MtEmber_Exterior_Text_LoganPostBattle:: + .string "They say there're over 1,500\n" + .string "active volcanoes in the world.\p" + .string "Just thinking about them makes me\n" + .string "feel all hot and gooey inside!$" + +MtEmber_Exterior_Text_BethIntro:: + .string "Do you know how caves form inside\n" + .string "volcanoes?$" + +MtEmber_Exterior_Text_BethDefeat:: + .string "Atchah!\n" + .string "You're shockingly good!$" + +MtEmber_Exterior_Text_BethPostBattle:: + .string "When lava at the surface of magma\n" + .string "hardens, and the magma inside flows\l" + .string "out, caverns are left behind.$" + +MtEmber_Exterior_Text_JocelynIntro:: + .string "I've been in training so I can mend\n" + .string "my broken heart…\p" + .string "It toughened me up physically at\n" + .string "least! Hi-yah!$" + +MtEmber_Exterior_Text_JocelynDefeat:: + .string "I think I tried to overdo it…$" + +MtEmber_Exterior_Text_JocelynPostBattle:: + .string "The way you battle, it reminds me\n" + .string "of the guy who dumped me…$" + diff --git a/data/maps/MtEmber_RubyPath_1F/scripts.inc b/data/maps/MtEmber_RubyPath_1F/scripts.inc new file mode 100644 index 000000000000..44f94434ffff --- /dev/null +++ b/data/maps/MtEmber_RubyPath_1F/scripts.inc @@ -0,0 +1,2 @@ +MtEmber_RubyPath_1F_MapScripts:: + .byte 0 diff --git a/data/maps/MtEmber_RubyPath_B1F/scripts.inc b/data/maps/MtEmber_RubyPath_B1F/scripts.inc new file mode 100644 index 000000000000..808d6d275b9d --- /dev/null +++ b/data/maps/MtEmber_RubyPath_B1F/scripts.inc @@ -0,0 +1,2 @@ +MtEmber_RubyPath_B1F_MapScripts:: + .byte 0 diff --git a/data/maps/MtEmber_RubyPath_B1F_Stairs/scripts.inc b/data/maps/MtEmber_RubyPath_B1F_Stairs/scripts.inc new file mode 100644 index 000000000000..032117296694 --- /dev/null +++ b/data/maps/MtEmber_RubyPath_B1F_Stairs/scripts.inc @@ -0,0 +1,2 @@ +MtEmber_RubyPath_B1F_Stairs_MapScripts:: + .byte 0 diff --git a/data/maps/MtEmber_RubyPath_B2F/scripts.inc b/data/maps/MtEmber_RubyPath_B2F/scripts.inc new file mode 100644 index 000000000000..ef87dbfc85ef --- /dev/null +++ b/data/maps/MtEmber_RubyPath_B2F/scripts.inc @@ -0,0 +1,2 @@ +MtEmber_RubyPath_B2F_MapScripts:: + .byte 0 diff --git a/data/maps/MtEmber_RubyPath_B2F_Stairs/scripts.inc b/data/maps/MtEmber_RubyPath_B2F_Stairs/scripts.inc new file mode 100644 index 000000000000..2bee45391957 --- /dev/null +++ b/data/maps/MtEmber_RubyPath_B2F_Stairs/scripts.inc @@ -0,0 +1,2 @@ +MtEmber_RubyPath_B2F_Stairs_MapScripts:: + .byte 0 diff --git a/data/maps/MtEmber_RubyPath_B3F/scripts.inc b/data/maps/MtEmber_RubyPath_B3F/scripts.inc new file mode 100644 index 000000000000..1ad864f4f752 --- /dev/null +++ b/data/maps/MtEmber_RubyPath_B3F/scripts.inc @@ -0,0 +1,16 @@ +MtEmber_RubyPath_B3F_MapScripts:: + .byte 0 + +@ Odd that this is here and not in MtEmber_RubyPath_B5F/scripts.inc +MtEmber_RubyPath_B5F_EventScript_Ruby:: + lock + faceplayer + setflag FLAG_GOT_RUBY + removeobject LOCALID_RUBY + giveitem_msg MtEmber_RubyPath_B3F_Text_FoundARuby, ITEM_RUBY, 1, MUS_RG_OBTAIN_KEY_ITEM + release + end + +MtEmber_RubyPath_B3F_Text_FoundARuby:: + .string "{PLAYER} found a RUBY!$" + diff --git a/data/maps/MtEmber_RubyPath_B4F/scripts.inc b/data/maps/MtEmber_RubyPath_B4F/scripts.inc new file mode 100644 index 000000000000..2c1e76041b8e --- /dev/null +++ b/data/maps/MtEmber_RubyPath_B4F/scripts.inc @@ -0,0 +1,62 @@ +MtEmber_RubyPath_B4F_MapScripts:: + .byte 0 + +MtEmber_RubyPath_B4F_EventScript_BrailleABC:: + lockall + braillemsgbox Braille_Text_ABC + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BrailleGHI:: + lockall + braillemsgbox Braille_Text_GHI + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BrailleMNO:: + lockall + braillemsgbox Braille_Text_MNO + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BrailleTUV:: + lockall + braillemsgbox Braille_Text_TUV + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BrailleDEF:: + lockall + braillemsgbox Braille_Text_DEF + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BrailleJKL:: + lockall + braillemsgbox Braille_Text_JKL + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BraillePQRS:: + lockall + braillemsgbox Braille_Text_PQRS + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BrailleWXYZ:: + lockall + braillemsgbox Braille_Text_WXYZ + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BraillePeriod:: + lockall + braillemsgbox Braille_Text_Period + releaseall + end + +MtEmber_RubyPath_B4F_EventScript_BrailleComma:: + lockall + braillemsgbox Braille_Text_Comma + releaseall + end diff --git a/data/maps/MtEmber_RubyPath_B5F/scripts.inc b/data/maps/MtEmber_RubyPath_B5F/scripts.inc new file mode 100644 index 000000000000..5a5d17684feb --- /dev/null +++ b/data/maps/MtEmber_RubyPath_B5F/scripts.inc @@ -0,0 +1,16 @@ +MtEmber_RubyPath_B5F_MapScripts:: + .byte 0 + +MtEmber_RubyPath_B5F_EventScript_BrailleMessage:: + lockall + setvar VAR_0x8005, 130 + braillemessage_wait Braille_Text_Everything + braillemessage_wait Braille_Text_HasMeaning1 + braillemessage_wait Braille_Text_Existence + braillemessage_wait Braille_Text_HasMeaning2 + braillemessage_wait Braille_Text_BeingAlive + braillemessage_wait Braille_Text_HasMeaning3 + braillemessage_wait Braille_Text_HaveDreams + braillemsgbox Braille_Text_UsePower + releaseall + end diff --git a/data/maps/MtEmber_Summit/scripts.inc b/data/maps/MtEmber_Summit/scripts.inc new file mode 100644 index 000000000000..dd67644036f8 --- /dev/null +++ b/data/maps/MtEmber_Summit/scripts.inc @@ -0,0 +1,56 @@ +MtEmber_Summit_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, MtEmber_Summit_OnTransition + map_script MAP_SCRIPT_ON_RESUME, MtEmber_Summit_OnResume + .byte 0 + +MtEmber_Summit_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, MtEmber_Summit_EventScript_TryRemoveMoltres + end + +MtEmber_Summit_EventScript_TryRemoveMoltres:: + specialvar VAR_RESULT, GetBattleOutcome + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn + removeobject VAR_LAST_TALKED + return + +MtEmber_Summit_OnTransition:: + call_if_unset FLAG_FOUGHT_MOLTRES, MtEmber_Summit_EventScript_ShowMoltres + end + +MtEmber_Summit_EventScript_ShowMoltres:: + clearflag FLAG_HIDE_MOLTRES + return + +MtEmber_Summit_EventScript_Moltres:: + lock + faceplayer + setwildbattle SPECIES_MOLTRES, 50 + waitse + playmoncry SPECIES_MOLTRES, CRY_MODE_ENCOUNTER + message Text_Gyaoo + waitmessage + waitmoncry + delay 10 + playbgm MUS_RG_ENCOUNTER_GYM_LEADER, 0 + waitbuttonpress + setflag FLAG_SYS_CTRL_OBJ_DELETE + special BattleSetup_StartLegendaryBattle + waitstate + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, MtEmber_Summit_EventScript_DefeatedMoltres + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, MtEmber_Summit_EventScript_RanFromMoltres + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, MtEmber_Summit_EventScript_RanFromMoltres + setflag FLAG_FOUGHT_MOLTRES + release + end + +MtEmber_Summit_EventScript_DefeatedMoltres:: + setflag FLAG_FOUGHT_MOLTRES + goto EventScript_RemoveStaticMon + end + +MtEmber_Summit_EventScript_RanFromMoltres:: + setvar VAR_0x8004, SPECIES_MOLTRES + goto EventScript_MonFlewAway + end diff --git a/data/maps/MtEmber_SummitPath_1F/scripts.inc b/data/maps/MtEmber_SummitPath_1F/scripts.inc new file mode 100644 index 000000000000..3d18a162bb7b --- /dev/null +++ b/data/maps/MtEmber_SummitPath_1F/scripts.inc @@ -0,0 +1,2 @@ +MtEmber_SummitPath_1F_MapScripts:: + .byte 0 diff --git a/data/maps/MtEmber_SummitPath_2F/scripts.inc b/data/maps/MtEmber_SummitPath_2F/scripts.inc new file mode 100644 index 000000000000..422f5512ae09 --- /dev/null +++ b/data/maps/MtEmber_SummitPath_2F/scripts.inc @@ -0,0 +1,2 @@ +MtEmber_SummitPath_2F_MapScripts:: + .byte 0 diff --git a/data/maps/MtEmber_SummitPath_3F/scripts.inc b/data/maps/MtEmber_SummitPath_3F/scripts.inc new file mode 100644 index 000000000000..50fe397f6a28 --- /dev/null +++ b/data/maps/MtEmber_SummitPath_3F/scripts.inc @@ -0,0 +1,2 @@ +MtEmber_SummitPath_3F_MapScripts:: + .byte 0 diff --git a/data/maps/MtMoon_1F/scripts.inc b/data/maps/MtMoon_1F/scripts.inc new file mode 100644 index 000000000000..54937b205fd2 --- /dev/null +++ b/data/maps/MtMoon_1F/scripts.inc @@ -0,0 +1,139 @@ +MtMoon_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, MtMoon_1F_OnTransition + .byte 0 + +MtMoon_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_MT_MOON_1F + end + +MtMoon_1F_EventScript_ZubatSign:: + msgbox MtMoon_1F_Text_ZubatIsABloodsucker, MSGBOX_SIGN + end + +MtMoon_1F_EventScript_Marcos:: + trainerbattle_single TRAINER_HIKER_MARCOS, MtMoon_1F_Text_MarcosIntro, MtMoon_1F_Text_MarcosDefeat + msgbox MtMoon_1F_Text_MarcosPostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_1F_EventScript_Josh:: + trainerbattle_single TRAINER_YOUNGSTER_JOSH, MtMoon_1F_Text_JoshIntro, MtMoon_1F_Text_JoshDefeat + msgbox MtMoon_1F_Text_JoshPostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_1F_EventScript_Miriam:: + trainerbattle_single TRAINER_LASS_MIRIAM, MtMoon_1F_Text_MiriamIntro, MtMoon_1F_Text_MiriamDefeat + msgbox MtMoon_1F_Text_MiriamPostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_1F_EventScript_Iris:: + trainerbattle_single TRAINER_LASS_IRIS, MtMoon_1F_Text_IrisIntro, MtMoon_1F_Text_IrisDefeat + msgbox MtMoon_1F_Text_IrisPostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_1F_EventScript_Jovan:: + trainerbattle_single TRAINER_SUPER_NERD_JOVAN, MtMoon_1F_Text_JovanIntro, MtMoon_1F_Text_JovanDefeat + msgbox MtMoon_1F_Text_JovanPostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_1F_EventScript_Kent:: + trainerbattle_single TRAINER_BUG_CATCHER_KENT, MtMoon_1F_Text_KentIntro, MtMoon_1F_Text_KentDefeat + msgbox MtMoon_1F_Text_KentPostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_1F_EventScript_Robby:: + trainerbattle_single TRAINER_BUG_CATCHER_ROBBY, MtMoon_1F_Text_RobbyIntro, MtMoon_1F_Text_RobbyDefeat + msgbox MtMoon_1F_Text_RobbyPostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_1F_Text_MarcosIntro:: + .string "WHOA!\n" + .string "You shocked me!\l" + .string "…Oh, you're just a kid!$" + +MtMoon_1F_Text_MarcosDefeat:: + .string "Wow!\n" + .string "Shocked again!$" + +MtMoon_1F_Text_MarcosPostBattle:: + .string "Kids like you shouldn't be\n" + .string "wandering around here in the dark.$" + +MtMoon_1F_Text_JoshIntro:: + .string "Did you come to explore the cave,\n" + .string "too?$" + +MtMoon_1F_Text_JoshDefeat:: + .string "Losing stinks!\n" + .string "It's so uncool.$" + +MtMoon_1F_Text_JoshPostBattle:: + .string "I came all the way down here to\n" + .string "show off to girls.$" + +MtMoon_1F_Text_MiriamIntro:: + .string "Wow! It's way bigger in here than\n" + .string "I thought!$" + +MtMoon_1F_Text_MiriamDefeat:: + .string "Oh!\n" + .string "I lost it!$" + +MtMoon_1F_Text_MiriamPostBattle:: + .string "How do you get out of here?\n" + .string "It's so big, I may get lost.$" + +MtMoon_1F_Text_JovanIntro:: + .string "What!\n" + .string "Don't sneak up on me!$" + +MtMoon_1F_Text_JovanDefeat:: + .string "My POKéMON won't do!$" + +MtMoon_1F_Text_JovanPostBattle:: + .string "I have to find stronger POKéMON.\n" + .string "Where might they be?$" + +MtMoon_1F_Text_IrisIntro:: + .string "What?\n" + .string "I'm waiting for my friends to find\l" + .string "me here.$" + +MtMoon_1F_Text_IrisDefeat:: + .string "I lost?$" + +MtMoon_1F_Text_IrisPostBattle:: + .string "I came because I heard there are\n" + .string "some very rare fossils here.$" + +MtMoon_1F_Text_KentIntro:: + .string "Suspicious men are in the cave.\n" + .string "What about you?$" + +MtMoon_1F_Text_KentDefeat:: + .string "You got me!$" + +MtMoon_1F_Text_KentPostBattle:: + .string "I saw them!\n" + .string "I'm sure they're from TEAM ROCKET!$" + +MtMoon_1F_Text_RobbyIntro:: + .string "You need to go through this cave\n" + .string "to get to CERULEAN CITY.$" + +MtMoon_1F_Text_RobbyDefeat:: + .string "I lost.$" + +MtMoon_1F_Text_RobbyPostBattle:: + .string "ZUBAT is tough!\n" + .string "But if you can catch one, you'll\l" + .string "be able to count on it.$" + +MtMoon_1F_Text_ZubatIsABloodsucker:: + .string "Beware!\n" + .string "ZUBAT is a bloodsucker!$" + +MtMoon_1F_Text_BrockHelpsExcavateFossils:: + .string "Hi, I'm excavating for fossils here\n" + .string "under MT. MOON.\p" + .string "Sometimes, BROCK of PEWTER GYM\n" + .string "lends me a hand.$" diff --git a/data/maps/MtMoon_B1F/scripts.inc b/data/maps/MtMoon_B1F/scripts.inc new file mode 100644 index 000000000000..ef138459a648 --- /dev/null +++ b/data/maps/MtMoon_B1F/scripts.inc @@ -0,0 +1,2 @@ +MtMoon_B1F_MapScripts:: + .byte 0 diff --git a/data/maps/MtMoon_B2F/scripts.inc b/data/maps/MtMoon_B2F/scripts.inc new file mode 100644 index 000000000000..51ce76a47963 --- /dev/null +++ b/data/maps/MtMoon_B2F/scripts.inc @@ -0,0 +1,219 @@ +MtMoon_B2F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, MtMoon_B2F_OnTransition + .byte 0 + +MtMoon_B2F_OnTransition:: + call_if_unset FLAG_GOT_FOSSIL_FROM_MT_MOON, MtMoon_B2F_EventScript_ShowFossils + end + +MtMoon_B2F_EventScript_ShowFossils:: + clearflag FLAG_HIDE_DOME_FOSSIL + clearflag FLAG_HIDE_HELIX_FOSSIL + return + +MtMoon_B2F_EventScript_MiguelTrigger:: + lockall + applymovement LOCALID_MIGUEL, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + call MtMoon_B2F_EventScript_BattleMiguel + releaseall + end + +MtMoon_B2F_EventScript_Miguel:: + lock + faceplayer + goto_if_set FLAG_GOT_FOSSIL_FROM_MT_MOON, MtMoon_B2F_EventScript_MiguelFossilPicked + goto_if_defeated TRAINER_SUPER_NERD_MIGUEL, MtMoon_B2F_EventScript_MiguelGoPickFossil + call MtMoon_B2F_EventScript_BattleMiguel + release + end + +MtMoon_B2F_EventScript_BattleMiguel:: + textcolor NPC_TEXT_COLOR_MALE + message MtMoon_B2F_Text_MiguelIntro + waitmessage + playbgm MUS_RG_ENCOUNTER_GYM_LEADER, 0 + waitbuttonpress + setvar VAR_LAST_TALKED, LOCALID_MIGUEL + trainerbattle_no_intro TRAINER_SUPER_NERD_MIGUEL, MtMoon_B2F_Text_MiguelDefeat + setvar VAR_MAP_SCENE_MT_MOON_B2F, 1 + msgbox MtMoon_B2F_Text_WellEachTakeAFossil + return + +MtMoon_B2F_EventScript_MiguelFossilPicked:: + msgbox MtMoon_B2F_Text_LabOnCinnabarRegeneratesFossils + release + end + +MtMoon_B2F_EventScript_MiguelGoPickFossil:: + msgbox MtMoon_B2F_Text_WellEachTakeAFossil + release + end + +MtMoon_B2F_EventScript_DomeFossil:: + lock + faceplayer + msgbox MtMoon_B2F_Text_YouWantDomeFossil, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, MtMoon_B2F_EventScript_DontTakeFossil + removeobject LOCALID_DOME_FOSSIL + giveitem_msg MtMoon_B2F_Text_ObtainedDomeFossil, ITEM_DOME_FOSSIL, 1, MUS_RG_OBTAIN_KEY_ITEM + closemessage + delay 10 + applymovement LOCALID_MIGUEL, MtMoon_B2F_Movement_MiguelToHelixFossil + waitmovement 0 + copyobjectxytoperm LOCALID_MIGUEL + textcolor NPC_TEXT_COLOR_MALE + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message MtMoon_B2F_Text_ThenThisFossilIsMine + waitmessage + waitfanfare + removeobject LOCALID_HELIX_FOSSIL + setflag FLAG_GOT_DOME_FOSSIL + setflag FLAG_GOT_FOSSIL_FROM_MT_MOON + release + end + +MtMoon_B2F_Movement_MiguelToHelixFossil:: + walk_right + walk_up + walk_up + walk_up + step_end + +MtMoon_B2F_EventScript_HelixFossil:: + lock + faceplayer + msgbox MtMoon_B2F_Text_YouWantHelixFossil, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, MtMoon_B2F_EventScript_DontTakeFossil + removeobject LOCALID_HELIX_FOSSIL + giveitem_msg MtMoon_B2F_Text_ObtainedHelixFossil, ITEM_HELIX_FOSSIL, 1, MUS_RG_OBTAIN_KEY_ITEM + closemessage + delay 10 + applymovement LOCALID_MIGUEL, MtMoon_B2F_Movement_MiguelToDomeFossil + waitmovement 0 + copyobjectxytoperm LOCALID_MIGUEL + textcolor NPC_TEXT_COLOR_MALE + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message MtMoon_B2F_Text_ThenThisFossilIsMine + waitmessage + waitfanfare + removeobject LOCALID_DOME_FOSSIL + setflag FLAG_GOT_HELIX_FOSSIL + setflag FLAG_GOT_FOSSIL_FROM_MT_MOON + release + end + +MtMoon_B2F_EventScript_DontTakeFossil:: + release + end + +MtMoon_B2F_Movement_MiguelToDomeFossil:: + walk_up + walk_up + walk_up + step_end + +MtMoon_B2F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT, MtMoon_B2F_Text_Grunt1Intro, MtMoon_B2F_Text_Grunt1Defeat + msgbox MtMoon_B2F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_B2F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_2, MtMoon_B2F_Text_Grunt2Intro, MtMoon_B2F_Text_Grunt2Defeat + msgbox MtMoon_B2F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_B2F_EventScript_Grunt3:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_3, MtMoon_B2F_Text_Grunt3Intro, MtMoon_B2F_Text_Grunt3Defeat + msgbox MtMoon_B2F_Text_Grunt3PostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_B2F_EventScript_Grunt4:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_4, MtMoon_B2F_Text_Grunt4Intro, MtMoon_B2F_Text_Grunt4Defeat + msgbox MtMoon_B2F_Text_Grunt4PostBattle, MSGBOX_AUTOCLOSE + end + +MtMoon_B2F_Text_MiguelIntro:: + .string "Hey, stop!\p" + .string "I found these fossils!\n" + .string "They're both mine!$" + +MtMoon_B2F_Text_MiguelDefeat:: + .string "Okay!\n" + .string "I'll share!$" + +MtMoon_B2F_Text_WellEachTakeAFossil:: + .string "We'll each take a fossil!\n" + .string "No being greedy!$" + +MtMoon_B2F_Text_ThenThisFossilIsMine:: + .string "All right.\n" + .string "Then this fossil is mine!$" + +MtMoon_B2F_Text_LabOnCinnabarRegeneratesFossils:: + .string "Far away, on CINNABAR ISLAND,\n" + .string "there's a POKéMON LAB.\p" + .string "They do research on regenerating\n" + .string "fossils.$" + +MtMoon_B2F_Text_Grunt1Intro:: + .string "We, TEAM ROCKET, shall find the\n" + .string "fossils!\p" + .string "Reviving POKéMON from them will\n" + .string "earn us huge riches!$" + +MtMoon_B2F_Text_Grunt1Defeat:: + .string "Urgh!\n" + .string "Now I'm mad!$" + +MtMoon_B2F_Text_Grunt1PostBattle:: + .string "You made me mad!\n" + .string "TEAM ROCKET will blacklist you!$" + +MtMoon_B2F_Text_Grunt2Intro:: + .string "We, TEAM ROCKET, are POKéMON\n" + .string "gangsters!\l" + .string "We strike fear with our strength!$" + +MtMoon_B2F_Text_Grunt2Defeat:: + .string "I blew it!$" + +MtMoon_B2F_Text_Grunt2PostBattle:: + .string "Darn it all!\n" + .string "My associates won't stand for this!$" + +MtMoon_B2F_Text_Grunt3Intro:: + .string "We're pulling a big job here!\n" + .string "Get lost, kid!$" + +MtMoon_B2F_Text_Grunt3Defeat:: + .string "So, you are good…$" + +MtMoon_B2F_Text_Grunt3PostBattle:: + .string "If you find a fossil, give it to me\n" + .string "and scram!$" + +MtMoon_B2F_Text_Grunt4Intro:: + .string "Little kids shouldn't be messing\n" + .string "around with grown-ups!\p" + .string "It could be bad news!$" + +MtMoon_B2F_Text_Grunt4Defeat:: + .string "I'm steamed!$" + +MtMoon_B2F_Text_Grunt4PostBattle:: + .string "POKéMON lived here long before\n" + .string "people came.$" + +MtMoon_B2F_Text_YouWantDomeFossil:: + .string "Do you want the DOME FOSSIL?$" + +MtMoon_B2F_Text_YouWantHelixFossil:: + .string "Do you want the HELIX FOSSIL?$" + +MtMoon_B2F_Text_ObtainedHelixFossil:: + .string "Obtained the HELIX FOSSIL!$" + +MtMoon_B2F_Text_ObtainedDomeFossil:: + .string "Obtained the DOME FOSSIL!$" + diff --git a/data/maps/NavelRock_1F/scripts.inc b/data/maps/NavelRock_1F/scripts.inc new file mode 100644 index 000000000000..3ac8564b384f --- /dev/null +++ b/data/maps/NavelRock_1F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_1F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_B1F_Frlg/scripts.inc b/data/maps/NavelRock_B1F_Frlg/scripts.inc new file mode 100644 index 000000000000..b96afb4a3cd6 --- /dev/null +++ b/data/maps/NavelRock_B1F_Frlg/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_B1F_Frlg_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B10F/scripts.inc b/data/maps/NavelRock_BasePath_B10F/scripts.inc new file mode 100644 index 000000000000..9c6026902700 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B10F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B10F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B11F/scripts.inc b/data/maps/NavelRock_BasePath_B11F/scripts.inc new file mode 100644 index 000000000000..5801573dab59 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B11F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B11F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B1F/scripts.inc b/data/maps/NavelRock_BasePath_B1F/scripts.inc new file mode 100644 index 000000000000..6c3f10eddf82 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B1F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B1F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B2F/scripts.inc b/data/maps/NavelRock_BasePath_B2F/scripts.inc new file mode 100644 index 000000000000..d2768eecb247 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B2F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B2F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B3F/scripts.inc b/data/maps/NavelRock_BasePath_B3F/scripts.inc new file mode 100644 index 000000000000..24bb30341c32 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B3F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B3F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B4F/scripts.inc b/data/maps/NavelRock_BasePath_B4F/scripts.inc new file mode 100644 index 000000000000..3503abe2da16 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B4F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B4F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B5F/scripts.inc b/data/maps/NavelRock_BasePath_B5F/scripts.inc new file mode 100644 index 000000000000..98b21a02b144 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B5F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B5F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B6F/scripts.inc b/data/maps/NavelRock_BasePath_B6F/scripts.inc new file mode 100644 index 000000000000..a9cc1794b80f --- /dev/null +++ b/data/maps/NavelRock_BasePath_B6F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B6F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B7F/scripts.inc b/data/maps/NavelRock_BasePath_B7F/scripts.inc new file mode 100644 index 000000000000..c5cca101b5f7 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B7F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B7F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B8F/scripts.inc b/data/maps/NavelRock_BasePath_B8F/scripts.inc new file mode 100644 index 000000000000..a24f0bf32ae3 --- /dev/null +++ b/data/maps/NavelRock_BasePath_B8F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B8F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_BasePath_B9F/scripts.inc b/data/maps/NavelRock_BasePath_B9F/scripts.inc new file mode 100644 index 000000000000..0342ebd1035d --- /dev/null +++ b/data/maps/NavelRock_BasePath_B9F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_BasePath_B9F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_Bottom_Frlg/scripts.inc b/data/maps/NavelRock_Bottom_Frlg/scripts.inc new file mode 100644 index 000000000000..3d8c06c06e9c --- /dev/null +++ b/data/maps/NavelRock_Bottom_Frlg/scripts.inc @@ -0,0 +1,76 @@ +NavelRock_Bottom_Frlg_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, NavelRock_Bottom_Frlg_OnTransition + map_script MAP_SCRIPT_ON_RESUME, NavelRock_Bottom_Frlg_OnResume + .byte 0 + +NavelRock_Bottom_Frlg_OnTransition:: + call_if_set FLAG_FOUGHT_LUGIA, NavelRock_Bottom_Frlg_EventScript_HideLugia + call_if_unset FLAG_FOUGHT_LUGIA, NavelRock_Bottom_Frlg_EventScript_TryShowLugia + end + +NavelRock_Bottom_Frlg_EventScript_HideLugia:: + setflag FLAG_HIDE_LUGIA + return + +NavelRock_Bottom_Frlg_EventScript_TryShowLugia:: + goto_if_set FLAG_LUGIA_FLEW_AWAY, Common_EventScript_NopReturn + clearflag FLAG_HIDE_LUGIA + return + +NavelRock_Bottom_Frlg_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, NavelRock_Bottom_Frlg_EventScript_TryRemoveLugia + end + +NavelRock_Bottom_Frlg_EventScript_TryRemoveLugia:: + specialvar VAR_RESULT, GetBattleOutcome + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn + removeobject LOCALID_NAVEL_ROCK_LUGIA + return + +NavelRock_Bottom_Frlg_EventScript_Lugia:: + lock + faceplayer + waitse + delay 20 + playse SE_THUNDERSTORM_STOP + setvar VAR_0x8004, 0 @ Vertical pan + setvar VAR_0x8005, 3 @ Horizontal pan + setvar VAR_0x8006, 4 @ Num shakes + setvar VAR_0x8007, 2 @ Shake delay + special ShakeScreen + delay 30 + playse SE_THUNDERSTORM_STOP + setvar VAR_0x8004, 0 @ Vertical pan + setvar VAR_0x8005, 3 @ Horizontal pan + setvar VAR_0x8006, 4 @ Num shakes + setvar VAR_0x8007, 2 @ Shake delay + special ShakeScreen + delay 30 + delay 50 + waitse + playmoncry SPECIES_LUGIA, CRY_MODE_ENCOUNTER + waitmoncry + delay 20 + seteventmon SPECIES_LUGIA, 70 + setflag FLAG_SYS_CTRL_OBJ_DELETE + special BattleSetup_StartLegendaryBattle + waitstate + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, NavelRock_Bottom_Frlg_EventScript_DefeatedLugia + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, NavelRock_Bottom_Frlg_EventScript_RanFromLugia + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, NavelRock_Bottom_Frlg_EventScript_RanFromLugia + setflag FLAG_FOUGHT_LUGIA + release + end + +NavelRock_Bottom_Frlg_EventScript_DefeatedLugia:: + setflag FLAG_LUGIA_FLEW_AWAY + setvar VAR_0x8004, SPECIES_LUGIA + goto EventScript_MonFlewAway + end + +NavelRock_Bottom_Frlg_EventScript_RanFromLugia:: + setvar VAR_0x8004, SPECIES_LUGIA + goto EventScript_MonFlewAway + end diff --git a/data/maps/NavelRock_Exterior_Frlg/scripts.inc b/data/maps/NavelRock_Exterior_Frlg/scripts.inc new file mode 100644 index 000000000000..b4be1184aa61 --- /dev/null +++ b/data/maps/NavelRock_Exterior_Frlg/scripts.inc @@ -0,0 +1,7 @@ +NavelRock_Exterior_Frlg_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, NavelRock_Exterior_OnTransition + .byte 0 + +NavelRock_Exterior_Frlg_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_NAVEL_ROCK_EXTERIOR + end diff --git a/data/maps/NavelRock_Fork_Frlg/scripts.inc b/data/maps/NavelRock_Fork_Frlg/scripts.inc new file mode 100644 index 000000000000..cdcd21a7d76e --- /dev/null +++ b/data/maps/NavelRock_Fork_Frlg/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_Fork_Frlg_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_Harbor_Frlg/scripts.inc b/data/maps/NavelRock_Harbor_Frlg/scripts.inc new file mode 100644 index 000000000000..b921ffacbec8 --- /dev/null +++ b/data/maps/NavelRock_Harbor_Frlg/scripts.inc @@ -0,0 +1,15 @@ +NavelRock_Harbor_Frlg_MapScripts:: + .byte 0 + +NavelRock_Harbor_Frlg_EventScript_Sailor:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_NAVEL_ROCK + multichoice 20, 8, MULTI_SEAGALLOP_VERMILION, FALSE + switch VAR_RESULT + case 0, EventScript_SailToVermilionCity + case 1, EventScript_CancelSail + case 127, EventScript_CancelSail + end diff --git a/data/maps/NavelRock_Summit/scripts.inc b/data/maps/NavelRock_Summit/scripts.inc new file mode 100644 index 000000000000..8ef5573958b9 --- /dev/null +++ b/data/maps/NavelRock_Summit/scripts.inc @@ -0,0 +1,115 @@ +NavelRock_Summit_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, NavelRock_Summit_OnTransition + map_script MAP_SCRIPT_ON_RESUME, NavelRock_Summit_OnResume + .byte 0 + +NavelRock_Summit_OnTransition:: + call_if_set FLAG_FOUGHT_HO_OH, NavelRock_Summit_EventScript_HideHoOh + call_if_unset FLAG_FOUGHT_HO_OH, NavelRock_Summit_EventScript_TryShowHoOh + end + +NavelRock_Summit_EventScript_HideHoOh:: + setvar VAR_TEMP_1, 1 + setflag FLAG_HIDE_HO_OH + return + +NavelRock_Summit_EventScript_TryShowHoOh:: + setvar VAR_TEMP_1, 1 + goto_if_set FLAG_HO_OH_FLEW_AWAY, Common_EventScript_NopReturn + setvar VAR_TEMP_1, 0 + clearflag FLAG_HIDE_HO_OH + return + +NavelRock_Summit_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, NavelRock_Summit_EventScript_TryRemoveHoOh + end + +NavelRock_Summit_EventScript_TryRemoveHoOh:: + specialvar VAR_RESULT, GetBattleOutcome + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn + removeobject LOCALID_NAVEL_ROCK_HO_OH + return + +NavelRock_Summit_EventScript_HoOh:: + lockall + setvar VAR_TEMP_1, 1 + special SpawnCameraObject + setvar VAR_0x8004, 3 @ Num loops + setvar VAR_0x8005, 35 @ Delay + special LoopWingFlapSE + applymovement LOCALID_NAVEL_ROCK_HO_OH, Movement_HoOhAppear + applymovement LOCALID_CAMERA, Movement_CameraPanUp + waitmovement 0 + delay 50 + setweather 0 + doweather + waitse + playmoncry SPECIES_HO_OH, CRY_MODE_ENCOUNTER + delay 30 + waitmoncry + delay 60 + setvar VAR_0x8004, 3 @ Num loops + setvar VAR_0x8005, 35 @ Delay + special LoopWingFlapSE + applymovement LOCALID_CAMERA, Movement_CameraPanDown + applymovement LOCALID_NAVEL_ROCK_HO_OH, Movement_HoOhApproach + waitmovement 0 + special RemoveCameraObject + seteventmon SPECIES_HO_OH, 70 + setflag FLAG_SYS_CTRL_OBJ_DELETE + special BattleSetup_StartLegendaryBattle + waitstate + clearflag FLAG_SYS_CTRL_OBJ_DELETE + setvar VAR_LAST_TALKED, LOCALID_NAVEL_ROCK_HO_OH + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, NavelRock_Summit_EventScript_DefeatedHoOh + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, NavelRock_Summit_EventScript_RanFromHoOh + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, NavelRock_Summit_EventScript_RanFromHoOh + setflag FLAG_FOUGHT_HO_OH + releaseall + end + +NavelRock_Summit_EventScript_DefeatedHoOh:: + setflag FLAG_HO_OH_FLEW_AWAY + setvar VAR_0x8004, SPECIES_HO_OH + goto EventScript_MonFlewAway + end + +NavelRock_Summit_EventScript_RanFromHoOh:: + setvar VAR_0x8004, SPECIES_HO_OH + goto EventScript_MonFlewAway + end + +Movement_CameraPanUp: + walk_up + walk_up + walk_up + step_end + +Movement_CameraPanDown: + delay_16 + delay_16 + walk_down + walk_down + walk_down + step_end + +Movement_HoOhApproach: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_in_place_down + delay_16 + delay_16 + step_end + +Movement_HoOhAppear: + delay_16 + delay_16 + walk_in_place_down + walk_in_place_down + walk_in_place_down + walk_in_place_down + step_end diff --git a/data/maps/NavelRock_SummitPath_2F/scripts.inc b/data/maps/NavelRock_SummitPath_2F/scripts.inc new file mode 100644 index 000000000000..c91a45c76219 --- /dev/null +++ b/data/maps/NavelRock_SummitPath_2F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_SummitPath_2F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_SummitPath_3F/scripts.inc b/data/maps/NavelRock_SummitPath_3F/scripts.inc new file mode 100644 index 000000000000..5ab8b4c88f39 --- /dev/null +++ b/data/maps/NavelRock_SummitPath_3F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_SummitPath_3F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_SummitPath_4F/scripts.inc b/data/maps/NavelRock_SummitPath_4F/scripts.inc new file mode 100644 index 000000000000..ee746e499fc0 --- /dev/null +++ b/data/maps/NavelRock_SummitPath_4F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_SummitPath_4F_MapScripts:: + .byte 0 diff --git a/data/maps/NavelRock_SummitPath_5F/scripts.inc b/data/maps/NavelRock_SummitPath_5F/scripts.inc new file mode 100644 index 000000000000..910a13e3c3e8 --- /dev/null +++ b/data/maps/NavelRock_SummitPath_5F/scripts.inc @@ -0,0 +1,2 @@ +NavelRock_SummitPath_5F_MapScripts:: + .byte 0 diff --git a/data/maps/OneIsland/scripts.inc b/data/maps/OneIsland/scripts.inc new file mode 100644 index 000000000000..bdb6f528df8b --- /dev/null +++ b/data/maps/OneIsland/scripts.inc @@ -0,0 +1,169 @@ +OneIsland_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, OneIsland_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, OneIsland_OnFrame + .byte 0 + +OneIsland_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_ONE_ISLAND + end + +OneIsland_OnFrame:: + map_script_2 VAR_MAP_SCENE_ONE_ISLAND_HARBOR, 2, OneIsland_EventScript_EnterOneIslandFirstTime + .2byte 0 + +OneIsland_EventScript_EnterOneIslandFirstTime:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, OneIsland_Movement_PlayerExitHarbor + waitmovement 0 + msgbox OneIsland_Text_BillLetsGoSeeCelio + closemessage + applymovement LOCALID_ONE_ISLAND_BILL, OneIsland_Movement_BillWalkToPokeCenter + applymovement LOCALID_PLAYER, OneIsland_Movement_PlayerWalkToPokeCenter + waitmovement 0 + opendoor 14, 5 + waitdooranim + applymovement LOCALID_ONE_ISLAND_BILL, OneIsland_Movement_BillEnterPokeCenter + applymovement LOCALID_PLAYER, OneIsland_Movement_PlayerEnterPokeCenter + waitmovement 0 + closedoor 14, 5 + waitdooranim + removeobject LOCALID_ONE_ISLAND_BILL + setvar VAR_MAP_SCENE_ONE_ISLAND_HARBOR, 3 + warp MAP_ONE_ISLAND_POKEMON_CENTER_1F, 9, 9 + waitstate + releaseall + end + + .macro walk_to_pokecenter + walk_up + walk_up + walk_up + walk_up + walk_right + walk_right + walk_up + walk_up + walk_up + walk_up + walk_up + .endm + +OneIsland_Movement_PlayerWalkToPokeCenter:: + walk_up + walk_to_pokecenter + step_end + +OneIsland_Movement_PlayerEnterPokeCenter:: + walk_up + walk_up + set_invisible + step_end + +OneIsland_Movement_PlayerExitHarbor:: + walk_up + step_end + +OneIsland_Movement_BillWalkToPokeCenter:: + walk_to_pokecenter + walk_up + step_end + +OneIsland_Movement_BillEnterPokeCenter:: + walk_up + set_invisible + step_end + +OneIsland_EventScript_OldMan:: + lock + faceplayer + goto_if_set FLAG_IS_CHAMPION, OneIsland_EventScript_OldManLinkHoenn + goto_if_set FLAG_SEVII_DETOUR_FINISHED, OneIsland_EventScript_OldManLinkKanto + msgbox OneIsland_Text_LuckyToHaveCelioHere + release + end + +OneIsland_EventScript_OldManLinkKanto:: + msgbox OneIsland_Text_HavePCLinkageWithKanto + release + end + +OneIsland_EventScript_OldManLinkHoenn:: + msgbox OneIsland_Text_HavePCLinkageWithHoenn + release + end + +OneIsland_EventScript_BaldingMan:: + msgbox OneIsland_Text_IsntWarmClimateHereGreat, MSGBOX_NPC + end + +OneIsland_EventScript_IslandSign:: + msgbox OneIsland_Text_IslandSign, MSGBOX_SIGN + end + +OneIsland_EventScript_PokemonNetCenterSign:: + msgbox OneIsland_Text_PokemonNetCenterSign, MSGBOX_SIGN + end + +OneIsland_Text_BillLetsGoSeeCelio:: + .string "BILL: Here we are!\n" + .string "This is ONE ISLAND.\p" + .string "There are several islands around\n" + .string "here, and this is one of them.\p" + .string "My friend CELIO sent the boat to\n" + .string "fetch me here.\p" + .string "He's in charge of the island's PC\n" + .string "network by his lonesome.\p" + .string "…Why am I telling you this now?\n" + .string "Let's just go see CELIO!$" + +Text_WhereDoYouWantToSail:: + .string "Ahoy, there!\n" + .string "Where do you want to sail?$" + +OneIsland_Text_LuckyToHaveCelioHere:: + .string "Here we are on an island smack in\n" + .string "the middle of nowhere.\p" + .string "We're lucky to have an upstanding\n" + .string "young man like CELIO here.\p" + .string "My granddaughter was in a tizzy\n" + .string "over CELIO's friend.\p" + .string "Something about a famous\n" + .string "POKéMANIAC?\p" + .string "I'm not sure what that means, but\n" + .string "CELIO is quite the man!$" + +OneIsland_Text_HavePCLinkageWithKanto:: + .string "My granddaughter was in a tizzy\n" + .string "over a new breakthrough.\p" + .string "She said we now have PC linkage\n" + .string "with people in KANTO.\p" + .string "I'm not sure what that means, but\n" + .string "CELIO is quite the man!$" + +OneIsland_Text_HavePCLinkageWithHoenn:: + .string "My granddaughter was in a tizzy\n" + .string "over a new breakthrough.\p" + .string "She said we finally have PC linkage\n" + .string "with people in HOENN.\p" + .string "I'm not sure what that means, but\n" + .string "CELIO is quite the man.\p" + .string "He would make a fine husband for\n" + .string "my granddaughter!$" + +OneIsland_Text_IslandSign:: + .string "ONE ISLAND\n" + .string "Friends Gather at Knot Island$" + +OneIsland_Text_PokemonNetCenterSign:: + .string "Expanding the POKéMON World!\n" + .string "POKéMON NET CENTER$" + +@ Unused +OneIsland_Text_ReturnToCinnabar:: + .string "グレンタウンに もどりますか?$" + +OneIsland_Text_IsntWarmClimateHereGreat:: + .string "Hi, sight-seeing, are you?\n" + .string "Isn't the warm climate here great?$" + diff --git a/data/maps/OneIsland_Harbor/scripts.inc b/data/maps/OneIsland_Harbor/scripts.inc new file mode 100644 index 000000000000..84006d70e9b3 --- /dev/null +++ b/data/maps/OneIsland_Harbor/scripts.inc @@ -0,0 +1,42 @@ +OneIsland_Harbor_MapScripts:: + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, OneIsland_Harbor_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, OneIsland_Harbor_OnFrame + .byte 0 + +OneIsland_Harbor_OnWarp:: + map_script_2 VAR_MAP_SCENE_ONE_ISLAND_HARBOR, 1, OneIsland_Harbor_EventScript_TurnPlayerNorth + .2byte 0 + +OneIsland_Harbor_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +OneIsland_Harbor_OnFrame:: + map_script_2 VAR_MAP_SCENE_ONE_ISLAND_HARBOR, 1, OneIsland_Harbor_EventScript_PlayerEnterHarborFirstTime + .2byte 0 + +OneIsland_Harbor_EventScript_PlayerEnterHarborFirstTime:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, OneIsland_Harbor_Movement_PlayerExitHarbor + waitmovement 0 + setvar VAR_MAP_SCENE_ONE_ISLAND_HARBOR, 2 + warp MAP_ONE_ISLAND, 12, 18 + waitstate + releaseall + end + +OneIsland_Harbor_Movement_PlayerExitHarbor:: + walk_up + walk_up + walk_up + step_end + +OneIsland_Harbor_EventScript_Sailor:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_ONE_ISLAND + goto EventScript_ChooseDestFromOneIsland + end diff --git a/data/maps/OneIsland_House1/scripts.inc b/data/maps/OneIsland_House1/scripts.inc new file mode 100644 index 000000000000..374228d6f2c6 --- /dev/null +++ b/data/maps/OneIsland_House1/scripts.inc @@ -0,0 +1,20 @@ +OneIsland_House1_MapScripts:: + .byte 0 + +OneIsland_House1_EventScript_OldMan:: + msgbox OneIsland_House1_Text_GazeUponVolcanoOnSunnyDays, MSGBOX_NPC + end + +OneIsland_House1_EventScript_OldWoman:: + msgbox OneIsland_House1_Text_LastTimeMtEmberErupted, MSGBOX_NPC + end + +OneIsland_House1_Text_GazeUponVolcanoOnSunnyDays:: + .string "On sunny days, I step out and gaze\n" + .string "upon the volcano.\p" + .string "That's my daily routine.$" + +OneIsland_House1_Text_LastTimeMtEmberErupted:: + .string "Let me think… When was the last\n" + .string "time MT. EMBER erupted?$" + diff --git a/data/maps/OneIsland_House2/scripts.inc b/data/maps/OneIsland_House2/scripts.inc new file mode 100644 index 000000000000..10de51530b85 --- /dev/null +++ b/data/maps/OneIsland_House2/scripts.inc @@ -0,0 +1,12 @@ +OneIsland_House2_MapScripts:: + .byte 0 + +OneIsland_House2_EventScript_Lass:: + msgbox OneIsland_House2_Text_IWantToStayHereForever, MSGBOX_NPC + end + +OneIsland_House2_Text_IWantToStayHereForever:: + .string "Young people all want to go off to\n" + .string "big cities.\p" + .string "But I want to stay here forever!$" + diff --git a/data/maps/OneIsland_KindleRoad/scripts.inc b/data/maps/OneIsland_KindleRoad/scripts.inc new file mode 100644 index 000000000000..29ed1128ac63 --- /dev/null +++ b/data/maps/OneIsland_KindleRoad/scripts.inc @@ -0,0 +1,175 @@ +OneIsland_KindleRoad_MapScripts:: + .byte 0 + +OneIsland_KindleRoad_EventScript_RouteSign:: + msgbox OneIsland_KindleRoad_Text_RouteSign, MSGBOX_SIGN + end + +OneIsland_KindleRoad_EventScript_EmberSpaSign:: + msgbox OneIsland_KindleRoad_Text_EmberSpaSign, MSGBOX_SIGN + end + +OneIsland_KindleRoad_Text_MariaIntro:: + .string "The weather's gorgeous!\n" + .string "Perfect for a battle!$" + +OneIsland_KindleRoad_Text_MariaDefeat:: + .string "Aiyeeeeh!$" + +OneIsland_KindleRoad_Text_MariaPostBattle:: + .string "Please don't splash my face!\n" + .string "You'll ruin the makeup.$" + +OneIsland_KindleRoad_Text_AbigailIntro:: + .string "I'm beginning to get a sunburn…$" + +OneIsland_KindleRoad_Text_AbigailDefeat:: + .string "Oh, you're so awful.$" + +OneIsland_KindleRoad_Text_AbigailPostBattle:: + .string "I like that cap you have.\n" + .string "Maybe I should wear one, too…$" + +OneIsland_KindleRoad_Text_FinnIntro:: + .string "Seen from here, MT. EMBER towers\n" + .string "into the sky.$" + +OneIsland_KindleRoad_Text_FinnDefeat:: + .string "Well, aren't you tough?$" + +OneIsland_KindleRoad_Text_FinnPostBattle:: + .string "The sky is immense around these\n" + .string "parts.$" + +OneIsland_KindleRoad_Text_GarrettIntro:: + .string "I took a break from swimming,\n" + .string "only to have you challenge me?$" + +OneIsland_KindleRoad_Text_GarrettDefeat:: + .string "Hey, what the…\n" + .string "You're good, you!$" + +OneIsland_KindleRoad_Text_GarrettPostBattle:: + .string "Instead of using SURF all the time,\n" + .string "you should swim some.$" + +OneIsland_KindleRoad_Text_TommyIntro:: + .string "Wait! Wait a second!\n" + .string "I think I've hooked a big one!$" + +OneIsland_KindleRoad_Text_TommyDefeat:: + .string "I've lost it all again…$" + +OneIsland_KindleRoad_Text_TommyPostBattle:: + .string "Not only did I lose, the big one\n" + .string "got away from me, too!$" + +OneIsland_KindleRoad_Text_SharonIntro:: + .string "Could you help me out with my\n" + .string "training?$" + +OneIsland_KindleRoad_Text_SharonDefeat:: + .string "You were a cut above me.$" + +OneIsland_KindleRoad_Text_SharonPostBattle:: + .string "It's clear that you're skilled.\n" + .string "I like you!$" + +OneIsland_KindleRoad_Text_TanyaIntro:: + .string "There isn't a day in which we don't\n" + .string "train!$" + +OneIsland_KindleRoad_Text_TanyaDefeat:: + .string "I'm such a fool!$" + +OneIsland_KindleRoad_Text_TanyaPostBattle:: + .string "I'll train even harder from now on!$" + +OneIsland_KindleRoad_Text_SheaIntro:: + .string "Every morning, before breakfast,\n" + .string "I swim around this island.$" + +OneIsland_KindleRoad_Text_SheaDefeat:: + .string "Gasp…\n" + .string "Gasp…$" + +OneIsland_KindleRoad_Text_SheaPostBattle:: + .string "I lost because I'm pooped from all\n" + .string "the running I did…$" + +OneIsland_KindleRoad_Text_HughIntro:: + .string "Dress appropriately for battle!\n" + .string "Lose that frivolous outfit!$" + +OneIsland_KindleRoad_Text_HughDefeat:: + .string "Why me?!$" + +OneIsland_KindleRoad_Text_HughPostBattle:: + .string "Even martial artists are becoming\n" + .string "fashion conscious these days…$" + +OneIsland_KindleRoad_Text_BryceIntro:: + .string "You know, everything tastes great\n" + .string "when you're out in the wild.$" + +OneIsland_KindleRoad_Text_BryceDefeat:: + .string "Awww, blown!$" + +OneIsland_KindleRoad_Text_BrycePostBattle:: + .string "The water in volcanic regions is\n" + .string "delicious.$" + +OneIsland_KindleRoad_Text_ClaireIntro:: + .string "My lunch filled us up, so will you\n" + .string "battle us for some exercise?$" + +OneIsland_KindleRoad_Text_ClaireDefeat:: + .string "That made me all sweaty.$" + +OneIsland_KindleRoad_Text_ClairePostBattle:: + .string "What should I do?\n" + .string "I feel famished again.$" + +OneIsland_KindleRoad_Text_KiaIntro:: + .string "KIA: My big brother and I make\n" + .string "an awesome combination!$" + +OneIsland_KindleRoad_Text_KiaDefeat:: + .string "KIA: Huh?!\n" + .string "I can't believe it!$" + +OneIsland_KindleRoad_Text_KiaPostBattle:: + .string "KIA: How could there be anyone\n" + .string "better than my big brother?$" + +OneIsland_KindleRoad_Text_KiaNotEnoughMons:: + .string "KIA: If you want to battle with\n" + .string "us, you have to bring at least two\l" + .string "POKéMON with you.$" + +OneIsland_KindleRoad_Text_MikIntro:: + .string "MIK: Together with KIA, I'm afraid\n" + .string "of nothing!$" + +OneIsland_KindleRoad_Text_MikDefeat:: + .string "MIK: Whoa!\n" + .string "That's too much!$" + +OneIsland_KindleRoad_Text_MikPostBattle:: + .string "MIK: How could my combination\n" + .string "with KIA fail?$" + +OneIsland_KindleRoad_Text_MikNotEnoughMons:: + .string "MIK: Hey, do you want to battle\n" + .string "with us two?\p" + .string "Bring two or more POKéMON with\n" + .string "you, then.$" + +OneIsland_KindleRoad_Text_RouteSign:: + .string "This is KINDLE ROAD.\p" + .string "Go straight for MT. EMBER.$" + +OneIsland_KindleRoad_Text_EmberSpaSign:: + .string "Light the Fire in Your Heart!\n" + .string "EMBER SPA$" + diff --git a/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc b/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc new file mode 100644 index 000000000000..37b1ec593541 --- /dev/null +++ b/data/maps/OneIsland_KindleRoad_EmberSpa/scripts.inc @@ -0,0 +1,107 @@ +OneIsland_KindleRoad_EmberSpa_MapScripts:: + .byte 0 + +OneIsland_KindleRoad_EmberSpa_EventScript_OldMan:: + msgbox OneIsland_KindleRoad_EmberSpa_Text_WaterWarmsMeToCore, MSGBOX_NPC + end + +OneIsland_KindleRoad_EmberSpa_EventScript_BaldingMan1:: + msgbox OneIsland_KindleRoad_EmberSpa_Text_EnjoyBowlOfChowder, MSGBOX_NPC + end + +OneIsland_KindleRoad_EmberSpa_EventScript_BaldingMan2:: + msgbox OneIsland_KindleRoad_EmberSpa_Text_HotSpringIsTherapeutic, MSGBOX_NPC + end + +OneIsland_KindleRoad_EmberSpa_EventScript_OldWoman:: + msgbox OneIsland_KindleRoad_EmberSpa_Text_SeeHowSmoothMySkinIs, MSGBOX_NPC + end + +OneIsland_KindleRoad_EmberSpa_EventScript_BlackBelt:: + lock + faceplayer + famechecker FAMECHECKER_BRUNO, 3 + msgbox OneIsland_KindleRoad_EmberSpa_Text_BrunoVisitsSpaOnOccasion + release + end + +OneIsland_KindleRoad_EmberSpa_EventScript_RockSmashMan:: + lock + faceplayer + goto_if_set FLAG_GOT_HM06, OneIsland_KindleRoad_EmberSpa_EventScript_AlreadyGotHM06 + msgbox OneIsland_KindleRoad_EmberSpa_Text_UsedThisToMakeEmberSpa + giveitem ITEM_HM06 + setflag FLAG_GOT_HM06 + msgbox OneIsland_KindleRoad_EmberSpa_Text_ExplainHM06 + release + end + +OneIsland_KindleRoad_EmberSpa_EventScript_AlreadyGotHM06:: + msgbox OneIsland_KindleRoad_EmberSpa_Text_ExplainHM06 + release + end + +OneIsland_KindleRoad_EmberSpa_EventScript_SpaHeal:: + lockall + fadescreen FADE_TO_WHITE + special HealPlayerParty + fadescreen FADE_FROM_WHITE + msgbox OneIsland_KindleRoad_EmberSpa_Text_WaterExquisiteFullyRefreshed + setvar VAR_TEMP_1, 1 + releaseall + end + +OneIsland_KindleRoad_EmberSpa_Text_WaterWarmsMeToCore:: + .string "Hm!\n" + .string "Haaaaaaaaaaah!\p" + .string "Aaaah! This is heavenly!\n" + .string "The water warms me to my core!\p" + .string "You should jump in, too.\p" + .string "Go to the middle, relax, and get\n" + .string "good and warm!$" + +OneIsland_KindleRoad_EmberSpa_Text_EnjoyBowlOfChowder:: + .string "My favorite part of bathing comes\n" + .string "up right after this.\p" + .string "I enjoy a bowl of chowder to\n" + .string "warm me from the inside, too!$" + +OneIsland_KindleRoad_EmberSpa_Text_WaterExquisiteFullyRefreshed:: + .string "The water is perfectly warm.\n" + .string "It feels exquisite…\p" + .string "{PLAYER} and the POKéMON were\n" + .string "fully refreshed!$" + +OneIsland_KindleRoad_EmberSpa_Text_HotSpringIsTherapeutic:: + .string "Soaking in a hot spring pool is\n" + .string "therapeutic, people say.$" + +OneIsland_KindleRoad_EmberSpa_Text_SeeHowSmoothMySkinIs:: + .string "Have a look at my face.\n" + .string "See how smooth my skin is?\p" + .string "The hot spring's water keeps my\n" + .string "skin younger than my age.$" + +OneIsland_KindleRoad_EmberSpa_Text_BrunoVisitsSpaOnOccasion:: + .string "After an honest day of training,\n" + .string "nothing beats a relaxing soak in\l" + .string "the hot spring pool.\p" + .string "BRUNO, who's a senior ahead of me,\n" + .string "visits the SPA on occasion.\p" + .string "He comes to rehab injuries, both\n" + .string "his own and his POKéMON's.$" + +OneIsland_KindleRoad_EmberSpa_Text_UsedThisToMakeEmberSpa:: + .string "Hot springs go hand-in-hand with\n" + .string "volcanoes.\p" + .string "The EMBER SPA here, well,\n" + .string "I made it years ago.\p" + .string "I hewed the pool right out of a\n" + .string "gigantic boulder by hand.\p" + .string "I was using this at the time.\n" + .string "I suppose I can part with it.$" + +OneIsland_KindleRoad_EmberSpa_Text_ExplainHM06:: + .string "That shatters boulders as if they\n" + .string "were made of crackers.$" + diff --git a/data/maps/OneIsland_PokemonCenter_1F/scripts.inc b/data/maps/OneIsland_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..5e58d2265437 --- /dev/null +++ b/data/maps/OneIsland_PokemonCenter_1F/scripts.inc @@ -0,0 +1,921 @@ +OneIsland_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, OneIsland_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + map_script MAP_SCRIPT_ON_LOAD, OneIsland_PokemonCenter_1F_OnLoad + map_script MAP_SCRIPT_ON_FRAME_TABLE, OneIsland_PokemonCenter_1F_OnFrame + .byte 0 + +OneIsland_PokemonCenter_1F_OnLoad:: + call_if_ge VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5, OneIsland_PokemonCenter_1F_EventScript_SetRubyMetatile + call_if_set FLAG_IS_CHAMPION, OneIsland_PokemonCenter_1F_EventScript_SetNetworkMachineOn + end + +OneIsland_PokemonCenter_1F_EventScript_SetRubyMetatile:: + setmetatile 13, 4, METATILE_PokemonCenterFrlg_NetworkMachine_Ruby, 1 + return + +OneIsland_PokemonCenter_1F_EventScript_SetSapphireMetatile:: + setmetatile 16, 4, METATILE_PokemonCenterFrlg_NetworkMachine_Sapphire, 1 + return + +OneIsland_PokemonCenter_1F_EventScript_SetNetworkMachineOn:: + call OneIsland_PokemonCenter_1F_EventScript_SetSapphireMetatile + setmetatile 14, 4, METATILE_PokemonCenterFrlg_NetworkMachine_ScreenLeft_On, 1 + setmetatile 15, 4, METATILE_PokemonCenterFrlg_NetworkMachine_ScreenRight_On, 1 + return + +OneIsland_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_ONE_ISLAND + call_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 6, OneIsland_PokemonCenter_1F_EventScript_SetCelioQuestDone + call_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 0, OneIsland_PokemonCenter_1F_EventScript_SetBillCelioFirstMeetingPos + call_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 2, OneIsland_PokemonCenter_1F_EventScript_SetBillCelioReadyToLeavePos + end + +OneIsland_PokemonCenter_1F_EventScript_SetCelioQuestDone:: + setvar VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 7 + return + +OneIsland_PokemonCenter_1F_EventScript_SetBillCelioFirstMeetingPos:: + setobjectxyperm LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, 9, 8 + setobjectmovementtype LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, MOVEMENT_TYPE_FACE_UP + setobjectxyperm LOCALID_CELIO, 15, 6 + setobjectmovementtype LOCALID_CELIO, MOVEMENT_TYPE_FACE_UP + return + +OneIsland_PokemonCenter_1F_EventScript_SetBillCelioReadyToLeavePos:: + setobjectxyperm LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, 14, 7 + setobjectmovementtype LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, MOVEMENT_TYPE_FACE_LEFT + setobjectxyperm LOCALID_CELIO, 14, 8 + setobjectmovementtype LOCALID_CELIO, MOVEMENT_TYPE_FACE_LEFT + return + +OneIsland_PokemonCenter_1F_OnFrame:: + map_script_2 VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 0, OneIsland_PokemonCenter_1F_EventScript_MeetCelioScene + .2byte 0 + +OneIsland_PokemonCenter_1F_EventScript_MeetCelioScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, OneIsland_PokemonCenter_1F_Movement_PlayerWalkToCelio + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, OneIsland_PokemonCenter_1F_Movement_BillWalkToCelio + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_BillHeyThereCelio + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + playse SE_PIN + applymovement LOCALID_CELIO, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_CELIO, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + applymovement LOCALID_CELIO, Common_Movement_Delay48 + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_CelioCantBelieveYouCameOut + msgbox OneIsland_PokemonCenter_1F_Text_BillHowsYourResearchComing + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_ThisIsMyBuddyCelio + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + call_if_set FLAG_SYS_GAME_CLEAR, OneIsland_PokemonCenter_1F_EventScript_IntroducePlayerChamp + call_if_unset FLAG_SYS_GAME_CLEAR, OneIsland_PokemonCenter_1F_EventScript_IntroducePlayerNotChamp + applymovement LOCALID_CELIO, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_CelioThatsReallyImpressive + msgbox OneIsland_PokemonCenter_1F_Text_BillBringMeUpToSpeed + applymovement LOCALID_CELIO, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_CelioPCsCantLinkWithYours + closemessage + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_BillLetMeHelpYou + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_CanYouDeliverThisMeteoritePlayer + msgreceiveditem OneIsland_PokemonCenter_1F_Text_AcceptedMeteoriteFromBill, ITEM_METEORITE, 1, MUS_RG_OBTAIN_KEY_ITEM + additem ITEM_METEORITE + applymovement LOCALID_CELIO, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_CelioPleaseTakeThis + giveitem_msg OneIsland_PokemonCenter_1F_Text_ObtainedTriPass, ITEM_TRI_PASS, 1, MUS_RG_OBTAIN_KEY_ITEM + msgbox OneIsland_PokemonCenter_1F_Text_PassLetsYouTravelBetweenIslands + call_if_ge VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 2, OneIsland_PokemonCenter_1F_EventScript_ReceiveTownMapPage + call_if_lt VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 2, OneIsland_PokemonCenter_1F_EventScript_ReceiveTownMap + setflag FLAG_SYS_SEVII_MAP_123 + msgbox OneIsland_PokemonCenter_1F_Text_BillCatchYouLater + closemessage + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + applymovement LOCALID_CELIO, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + setflag FLAG_SYS_PC_STORAGE_DISABLED + setvar VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 1 + releaseall + end + +OneIsland_PokemonCenter_1F_EventScript_IntroducePlayerChamp:: + msgbox OneIsland_PokemonCenter_1F_Text_PlayerIsReigningPokemonChamp + return + +OneIsland_PokemonCenter_1F_EventScript_IntroducePlayerNotChamp:: + msgbox OneIsland_PokemonCenter_1F_Text_PlayerIsRisingPokemonChamp + return + +OneIsland_PokemonCenter_1F_EventScript_ReceiveTownMapPage:: + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message OneIsland_PokemonCenter_1F_Text_ReceivedExtraPageForTownMap + waitmessage + waitfanfare + call EventScript_RestorePrevTextColor + return + +OneIsland_PokemonCenter_1F_EventScript_ReceiveTownMap:: + setflag FLAG_HIDE_TOWN_MAP + setvar VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 2 + giveitem_msg OneIsland_PokemonCenter_1F_Text_ReceivedTownMap, ITEM_TOWN_MAP, 1, MUS_RG_OBTAIN_KEY_ITEM + return + +OneIsland_PokemonCenter_1F_Movement_PlayerWalkToCelio:: + walk_up + walk_up + walk_right + walk_right + walk_right + walk_right + walk_right + walk_in_place_faster_up + step_end + +OneIsland_PokemonCenter_1F_Movement_BillWalkToCelio:: + walk_up + walk_right + walk_right + walk_right + walk_right + walk_right + walk_up + walk_in_place_faster_right + step_end + +@ Unused +OneIsland_PokemonCenter_1F_Movement_WalkUp: + walk_up + step_end + +@ Unused +OneIsland_PokemonCenter_1F_Movement_StepAsideLeft:: + walk_left + walk_in_place_faster_right + step_end + +OneIsland_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +OneIsland_PokemonCenter_1F_EventScript_Bill:: + lock + goto_if_set FLAG_SEVII_DETOUR_FINISHED, OneIsland_PokemonCenter_1F_EventScript_BillGoTakeStroll + msgbox OneIsland_PokemonCenter_1F_Text_HmmHowAboutLikeThis + release + end + +OneIsland_PokemonCenter_1F_EventScript_BillGoTakeStroll:: + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_FacePlayer + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_GotPCWorkingStrollAWhileMore + release + end + +OneIsland_PokemonCenter_1F_EventScript_Celio:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 7, OneIsland_PokemonCenter_1F_EventScript_CelioGiveBillFact + goto_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 6, OneIsland_PokemonCenter_1F_EventScript_CelioJustGivenSapphire + goto_if_set FLAG_RECOVERED_SAPPHIRE, OneIsland_PokemonCenter_1F_EventScript_GiveCelioSapphire + goto_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5, OneIsland_PokemonCenter_1F_EventScript_ExplainRainbowPass + goto_if_set FLAG_GOT_RUBY, OneIsland_PokemonCenter_1F_EventScript_GiveCelioRuby + goto_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 4, OneIsland_PokemonCenter_1F_EventScript_CelioWaitingForRuby + specialvar VAR_RESULT, IsNationalPokedexEnabled + goto_if_eq VAR_RESULT, TRUE, OneIsland_PokemonCenter_1F_EventScript_CelioRequestRuby + goto_if_eq VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 3, OneIsland_PokemonCenter_1F_EventScript_CelioPlayerMissingNationalDex + msgbox OneIsland_PokemonCenter_1F_Text_SorryForBeingPoorHost + closemessage + applymovement LOCALID_CELIO, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +OneIsland_PokemonCenter_1F_EventScript_CelioGiveBillFact:: + msgbox OneIsland_PokemonCenter_1F_Text_CelioHearingRumorsAboutYou + random 3 + goto_if_eq VAR_RESULT, 0, OneIsland_PokemonCenter_1F_EventScript_BillFact1 + goto_if_eq VAR_RESULT, 1, OneIsland_PokemonCenter_1F_EventScript_BillFact2 + famechecker FAMECHECKER_BILL, 5 + msgbox OneIsland_PokemonCenter_1F_Text_BillCantStomachMilk + release + end + +OneIsland_PokemonCenter_1F_EventScript_BillFact1:: + famechecker FAMECHECKER_BILL, 3 + msgbox OneIsland_PokemonCenter_1F_Text_BillsFirstMonWasAbra + release + end + +OneIsland_PokemonCenter_1F_EventScript_BillFact2:: + famechecker FAMECHECKER_BILL, 4 + msgbox OneIsland_PokemonCenter_1F_Text_BillsHometownInGoldenrod + release + end + +OneIsland_PokemonCenter_1F_EventScript_CelioJustGivenSapphire:: + msgbox OneIsland_PokemonCenter_1F_Text_WishYouBestOfLuck + release + end + +OneIsland_PokemonCenter_1F_EventScript_GiveCelioSapphire:: + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_OBTAIN_TMHM + message OneIsland_PokemonCenter_1F_Text_HandedSapphireToCelio + waitmessage + waitfanfare + call EventScript_RestorePrevTextColor + removeitem ITEM_SAPPHIRE + msgbox OneIsland_PokemonCenter_1F_Text_ThankYouGiveMeTime + closemessage + applymovement LOCALID_CELIO, OneIsland_PokemonCenter_1F_Movement_CelioPutGemInMachine + waitmovement 0 + playse SE_CLICK + call OneIsland_PokemonCenter_1F_EventScript_SetSapphireMetatile + special DrawWholeMapView + msgbox OneIsland_PokemonCenter_1F_Text_OkayThisIsGood + closemessage + delay 60 + applymovement LOCALID_CELIO, OneIsland_PokemonCenter_1F_Movement_CelioCheckMachine + waitmovement 0 + delay 30 + applymovement LOCALID_CELIO, OneIsland_PokemonCenter_1F_Movement_CelioCheckMachine + waitmovement 0 + delay 40 + playse SE_PC_ON + call OneIsland_PokemonCenter_1F_EventScript_SetNetworkMachineOn + special DrawWholeMapView + msgbox OneIsland_PokemonCenter_1F_Text_LinkedUpWithLanette + applymovement LOCALID_CELIO, Common_Movement_FacePlayer + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_ManagedToLinkWithHoennThankYou + special SetPostgameFlags + setflag FLAG_IS_CHAMPION + setflag FLAG_HIDE_CERULEAN_CAVE_GUARD + setflag FLAG_HIDE_LORELEI_IN_HER_HOUSE + setvar VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 6 + special InitRoamer + release + end + +OneIsland_PokemonCenter_1F_EventScript_ExplainRainbowPass:: + msgbox OneIsland_PokemonCenter_1F_Text_PassLetYouGetToAllIslands + release + end + +OneIsland_PokemonCenter_1F_EventScript_GiveCelioRuby:: + msgbox OneIsland_PokemonCenter_1F_Text_OhThats + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_OBTAIN_TMHM + message OneIsland_PokemonCenter_1F_Text_HandedRubyToCelio + waitmessage + waitfanfare + call EventScript_RestorePrevTextColor + closemessage + applymovement LOCALID_CELIO, OneIsland_PokemonCenter_1F_Movement_CelioPutGemInMachine + waitmovement 0 + playse SE_CLICK + call OneIsland_PokemonCenter_1F_EventScript_SetRubyMetatile + special DrawWholeMapView + delay 30 + applymovement LOCALID_CELIO, Common_Movement_FacePlayer + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_MayIAskOneMoreFavor, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, OneIsland_PokemonCenter_1F_EventScript_DeclineHelpCelio + goto OneIsland_PokemonCenter_1F_EventScript_GiveRainbowPass + end + +OneIsland_PokemonCenter_1F_EventScript_DeclineHelpCelio:: + msgbox OneIsland_PokemonCenter_1F_Text_PleaseINeedYourHelp, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, OneIsland_PokemonCenter_1F_EventScript_DeclineHelpCelio + goto OneIsland_PokemonCenter_1F_EventScript_GiveRainbowPass + end + +OneIsland_PokemonCenter_1F_EventScript_GiveRainbowPass:: + msgbox OneIsland_PokemonCenter_1F_Text_AnotherGemstoneInSeviiIslands + removeitem ITEM_RUBY + removeitem ITEM_TRI_PASS + setvar VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5 + additem ITEM_RAINBOW_PASS + setflag FLAG_SYS_SEVII_MAP_4567 + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message OneIsland_PokemonCenter_1F_Text_ReturnedTriPassForRainbowPass + waitmessage + waitfanfare + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message OneIsland_PokemonCenter_1F_Text_ObtainedExtraMapPage + waitmessage + waitfanfare + call EventScript_RestorePrevTextColor + goto OneIsland_PokemonCenter_1F_EventScript_ExplainRainbowPass + end + +OneIsland_PokemonCenter_1F_EventScript_CelioWaitingForRuby:: + msgbox OneIsland_PokemonCenter_1F_Text_TryingToFindGem + release + end + +OneIsland_PokemonCenter_1F_EventScript_CelioRequestRuby:: + msgbox OneIsland_PokemonCenter_1F_Text_CelioCaughtMoreMonMaybeICanBeUseful + applymovement LOCALID_CELIO, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_YoullBeTradingFromTrainersFarAway + applymovement LOCALID_CELIO, Common_Movement_FacePlayer + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_NeedsSpecialGemstone + setvar VAR_MAP_SCENE_MT_EMBER_EXTERIOR, 1 + setvar VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 4 + release + end + +OneIsland_PokemonCenter_1F_EventScript_CelioPlayerMissingNationalDex:: + msgbox OneIsland_PokemonCenter_1F_Text_CelioImModifyingMyNetworkMachine + release + end + +OneIsland_PokemonCenter_1F_Movement_CelioCheckMachine:: + walk_in_place_up + delay_8 + walk_in_place_up + step_end + +OneIsland_PokemonCenter_1F_Movement_CelioPutGemInMachine:: + walk_in_place_faster_up + walk_in_place_up + delay_16 + walk_in_place_up + walk_in_place_up + step_end + +OneIsland_PokemonCenter_1F_EventScript_LittleBoy:: + msgbox OneIsland_PokemonCenter_1F_Text_CameFromPalletDontKnowIt, MSGBOX_NPC + end + +OneIsland_PokemonCenter_1F_EventScript_Hiker:: + msgbox OneIsland_PokemonCenter_1F_Text_EnormousVolcanoOnIsland, MSGBOX_NPC + end + +OneIsland_PokemonCenter_1F_EventScript_BattleGirl:: + lock + faceplayer + goto_if_set FLAG_IS_CHAMPION, OneIsland_PokemonCenter_1F_EventScript_BattleGirlHoennLinked + msgbox OneIsland_PokemonCenter_1F_Text_WishICouldTradeWithBoyfriend + release + end + +OneIsland_PokemonCenter_1F_EventScript_BattleGirlHoennLinked:: + msgbox OneIsland_PokemonCenter_1F_Text_TradedWithFarAwayBoyfriend + release + end + +OneIsland_PokemonCenter_1F_EventScript_NetworkMachine:: + lockall + goto_if_set FLAG_IS_CHAMPION, OneIsland_PokemonCenter_1F_EventScript_NetworkMachineLinkedWithHoenn + goto_if_set FLAG_SEVII_DETOUR_FINISHED, OneIsland_PokemonCenter_1F_EventScript_NetworkMachineLinkedWithKanto + msgbox OneIsland_PokemonCenter_1F_Text_MachineUnderAdjustment + releaseall + end + +OneIsland_PokemonCenter_1F_EventScript_NetworkMachineLinkedWithKanto:: + msgbox OneIsland_PokemonCenter_1F_Text_MachineLinkedWithKanto + releaseall + end + +OneIsland_PokemonCenter_1F_EventScript_NetworkMachineLinkedWithHoenn:: + msgbox OneIsland_PokemonCenter_1F_Text_MachineLinkedWithKantoAndHoenn + releaseall + end + +OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandTriggerTop:: + lockall + setvar VAR_TEMP_1, 1 + goto OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandScene + end + +OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandTriggerMidTop:: + lockall + setvar VAR_TEMP_1, 2 + goto OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandScene + end + +OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandTriggerMidBottom:: + lockall + setvar VAR_TEMP_1, 3 + goto OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandScene + end + +OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandTriggerBottom:: + lockall + setvar VAR_TEMP_1, 4 + goto OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandScene + end + +OneIsland_PokemonCenter_1F_EventScript_LeaveOneIslandScene:: + textcolor NPC_TEXT_COLOR_MALE + playse SE_PIN + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_ExclamationMark + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_BillOhHeyPlayer + closemessage + call_if_eq VAR_TEMP_1, 1, OneIsland_PokemonCenter_1F_EventScript_PlayerWalkToBillTop + call_if_eq VAR_TEMP_1, 2, OneIsland_PokemonCenter_1F_EventScript_PlayerWalkToBillMidTop + call_if_eq VAR_TEMP_1, 3, OneIsland_PokemonCenter_1F_EventScript_PlayerWalkToBillMidBottom + call_if_eq VAR_TEMP_1, 4, OneIsland_PokemonCenter_1F_EventScript_PlayerWalkToBillBottom + delay 10 + msgbox OneIsland_PokemonCenter_1F_Text_BillWeGotItDone + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_CelioJobWentQuick + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + applymovement LOCALID_CELIO, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_BillYouveLearnedALot + msgbox OneIsland_PokemonCenter_1F_Text_CelioOhReallyEhehe + closemessage + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + delay 10 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + delay 15 + msgbox OneIsland_PokemonCenter_1F_Text_BillWeShouldHeadBackToKanto + closemessage + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + delay 15 + applymovement LOCALID_CELIO, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + msgbox OneIsland_PokemonCenter_1F_Text_CelioPromiseIllShowYouAroundSometime + closemessage + delay 25 + applymovement LOCALID_PLAYER, OneIsland_PokemonCenter_1F_Movement_PlayerExit + applymovement LOCALID_ONE_ISLAND_POKEMON_CENTER_BILL, OneIsland_PokemonCenter_1F_Movement_BillExit + waitmovement 0 + playse SE_EXIT + setflag FLAG_HIDE_ONE_ISLAND_POKECENTER_BILL + setvar VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 3 + clearflag FLAG_HIDE_CINNABAR_BILL + setvar VAR_MAP_SCENE_CINNABAR_ISLAND, 3 + setvar VAR_0x8004, SEAGALLOP_ONE_ISLAND + setvar VAR_0x8006, SEAGALLOP_CINNABAR_ISLAND + goto EventScript_SetSail + end + +OneIsland_PokemonCenter_1F_EventScript_PlayerWalkToBillTop:: + applymovement LOCALID_PLAYER, OneIsland_PokemonCenter_1F_Movement_PlayerWalkToBillTop + waitmovement 0 + return + +OneIsland_PokemonCenter_1F_EventScript_PlayerWalkToBillMidTop:: + applymovement LOCALID_PLAYER, OneIsland_PokemonCenter_1F_Movement_PlayerWalkToBillMidTop + waitmovement 0 + return + +OneIsland_PokemonCenter_1F_EventScript_PlayerWalkToBillMidBottom:: + applymovement LOCALID_PLAYER, OneIsland_PokemonCenter_1F_Movement_PlayerWalkToBillMidBottom + waitmovement 0 + return + +OneIsland_PokemonCenter_1F_EventScript_PlayerWalkToBillBottom:: + applymovement LOCALID_PLAYER, OneIsland_PokemonCenter_1F_Movement_PlayerWalkToBillBottom + waitmovement 0 + return + +OneIsland_PokemonCenter_1F_Movement_PlayerWalkToBillTop:: + walk_right + walk_down + walk_in_place_faster_right + step_end + +OneIsland_PokemonCenter_1F_Movement_PlayerWalkToBillMidTop:: + walk_right + step_end + +OneIsland_PokemonCenter_1F_Movement_PlayerWalkToBillMidBottom:: + walk_right + walk_up + walk_in_place_faster_right + step_end + +OneIsland_PokemonCenter_1F_Movement_PlayerWalkToBillBottom:: + walk_right + walk_up + walk_up + walk_in_place_faster_right + step_end + +@ Unused +OneIsland_PokemonCenter_1F_Movement_DelayWalkInPlaceLeft:: + delay_16 + delay_16 + delay_4 + walk_in_place_faster_left + step_end + +@ Unused +OneIsland_PokemonCenter_1F_Movement_WalkInPlaceDown:: + walk_in_place_fast_down + step_end + +OneIsland_PokemonCenter_1F_Movement_PlayerExit:: + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + step_end + +OneIsland_PokemonCenter_1F_Movement_BillExit:: + walk_left + walk_left + walk_left + walk_left + walk_left + walk_down + step_end + +OneIsland_PokemonCenter_1F_Text_BillHeyThereCelio:: + .string "BILL: Hey, there!\n" + .string "CELIO!$" + +OneIsland_PokemonCenter_1F_Text_CelioCantBelieveYouCameOut:: + .string "CELIO: BILL!\n" + .string "I can't believe you came out here.$" + +OneIsland_PokemonCenter_1F_Text_BillHowsYourResearchComing:: + .string "BILL: Well, absolutely!\n" + .string "How's your research coming along?\p" + .string "…Oh, wait a sec.$" + +OneIsland_PokemonCenter_1F_Text_ThisIsMyBuddyCelio:: + .string "{PLAYER}, this is my buddy CELIO.\n" + .string "He's one dedicated PC MANIAC!$" + +OneIsland_PokemonCenter_1F_Text_PlayerIsRisingPokemonChamp:: + .string "CELIO, this is {PLAYER}, a rising\n" + .string "contender as the POKéMON CHAMP!$" + +OneIsland_PokemonCenter_1F_Text_PlayerIsReigningPokemonChamp:: + .string "CELIO, this is {PLAYER}, the\n" + .string "reigning POKéMON CHAMP!$" + +OneIsland_PokemonCenter_1F_Text_CelioThatsReallyImpressive:: + .string "CELIO: That's really impressive.\p" + .string "I hate to say it, but I have zero\n" + .string "aptitude for battling.\p" + .string "Anyways, I'm glad to meet you.$" + +OneIsland_PokemonCenter_1F_Text_BillBringMeUpToSpeed:: + .string "BILL: So, bring me up to speed.\n" + .string "How's your machine running?$" + +OneIsland_PokemonCenter_1F_Text_CelioPCsCantLinkWithYours:: + .string "CELIO: It's running fine, but we're\n" + .string "too remote out here.\p" + .string "The PCs on this island just can't\n" + .string "link with your PC, BILL.$" + +OneIsland_PokemonCenter_1F_Text_BillLetMeHelpYou:: + .string "BILL: Oh, yeah?\n" + .string "Okay, let me take a look-see.\p" + .string "…Hang on here…\n" + .string "I think we can make it work.\l" + .string "Let me help you, okay?$" + +OneIsland_PokemonCenter_1F_Text_CanYouDeliverThisMeteoritePlayer:: + .string "{PLAYER}, can I get you to wait for\n" + .string "me just a bit?\p" + .string "…Actually, can I get you to do\n" + .string "me a favor?\p" + .string "The island next to this one's\n" + .string "called TWO ISLAND.\p" + .string "There's a guy there that runs\n" + .string "a GAME CORNER.\p" + .string "He has this thing for rare rocks\n" + .string "and gems.\p" + .string "We keep in touch, being fellow\n" + .string "maniacs.\p" + .string "So, can I get you to deliver this\n" + .string "METEORITE to him?$" + +OneIsland_PokemonCenter_1F_Text_AcceptedMeteoriteFromBill:: + .string "{PLAYER} accepted the METEORITE\n" + .string "from BILL.$" + +OneIsland_PokemonCenter_1F_Text_CelioPleaseTakeThis:: + .string "CELIO: {PLAYER}, if you are going\n" + .string "to TWO ISLAND, please take this.$" + +OneIsland_PokemonCenter_1F_Text_PassLetsYouTravelBetweenIslands:: + .string "It's a PASS for the ferry service\n" + .string "serving the local islands.\p" + .string "It will let you travel between the\n" + .string "ISLANDS ONE, TWO, and THREE.\p" + .string "Oh, you should have this, too.$" + +OneIsland_PokemonCenter_1F_Text_ReceivedExtraPageForTownMap:: + .string "{PLAYER} received an extra page\n" + .string "for the TOWN MAP!$" + +OneIsland_PokemonCenter_1F_Text_ReceivedTownMap:: + .string "{PLAYER} received\n" + .string "a TOWN MAP!$" + +OneIsland_PokemonCenter_1F_Text_BillCatchYouLater:: + .string "BILL: I'll catch you later!\n" + .string "Say hi to the guy for me!$" + +OneIsland_PokemonCenter_1F_Text_HmmHowAboutLikeThis:: + .string "Hmm…\p" + .string "How about we try this like this…$" + +OneIsland_PokemonCenter_1F_Text_GotPCWorkingStrollAWhileMore:: + .string "Oh, hey, {PLAYER}!\p" + .string "Did you see?\n" + .string "We got the PC working!\p" + .string "I've got a few things to show\n" + .string "CELIO here.\p" + .string "Can you go out on a stroll or\n" + .string "something for a while more?$" + +OneIsland_PokemonCenter_1F_Text_SorryForBeingPoorHost:: + .string "I'm sorry for taking up so much of\n" + .string "BILL's time.\p" + .string "I'm also sorry for being such a \n" + .string "poor host on your visit here.$" + +OneIsland_PokemonCenter_1F_Text_UsualPCServicesUnavailable:: + .string "The usual PC services aren't\n" + .string "available…$" + +OneIsland_PokemonCenter_1F_Text_BillOhHeyPlayer:: + .string "BILL: Oh, hey!\n" + .string "{PLAYER}!$" + +OneIsland_PokemonCenter_1F_Text_BillWeGotItDone:: + .string "BILL: What kept you so long?\n" + .string "Been out having a good time?\p" + .string "We got it done.\n" + .string "The PCs are up and running!$" + +OneIsland_PokemonCenter_1F_Text_CelioJobWentQuick:: + .string "CELIO: The job went incredibly\n" + .string "quick.\p" + .string "BILL is one amazing guy…$" + +OneIsland_PokemonCenter_1F_Text_BillYouveLearnedALot:: + .string "BILL: No, no! There was almost\n" + .string "nothing left for me to do.\p" + .string "CELIO, I have to hand it to you.\n" + .string "You've learned a lot.$" + +OneIsland_PokemonCenter_1F_Text_CelioOhReallyEhehe:: + .string "CELIO: Oh, really?\n" + .string "Ehehe…$" + +OneIsland_PokemonCenter_1F_Text_BillWeShouldHeadBackToKanto:: + .string "BILL: Well, there you have it.\n" + .string "I'm finished with the job.\l" + .string "We should head back to KANTO.\p" + .string "CELIO, I'll be seeing you again.$" + +OneIsland_PokemonCenter_1F_Text_CelioPromiseIllShowYouAroundSometime:: + .string "CELIO: {PLAYER}, I'm really sorry\n" + .string "that we sent you off alone today.\p" + .string "I promise, I will show you around\n" + .string "these islands sometime.$" + +OneIsland_PokemonCenter_1F_Text_CelioImModifyingMyNetworkMachine:: + .string "CELIO: Hello!\n" + .string "You look awfully busy as always.\p" + .string "How am I doing?\p" + .string "Well, I'm modifying my Network\n" + .string "Machine.\p" + .string "When I get done with the machine,\n" + .string "I hope you'll be first to use it,\l" + .string "{PLAYER}.$" + +OneIsland_PokemonCenter_1F_Text_CelioCaughtMoreMonMaybeICanBeUseful:: + .string "CELIO: {PLAYER}, how have things\n" + .string "been for you?\p" + .string "Oh, is that right?\n" + .string "You've caught more POKéMON.\p" + .string "Do you know what?\n" + .string "Maybe I can be useful to you.$" + +OneIsland_PokemonCenter_1F_Text_YoullBeTradingFromTrainersFarAway:: + .string "I'm modifying the Network Machine\n" + .string "right now.\p" + .string "I'm changing it so it can handle\n" + .string "trades over long distances.\p" + .string "When I get finished, you'll be\n" + .string "trading for exotic POKéMON from\l" + .string "TRAINERS far away.$" + +OneIsland_PokemonCenter_1F_Text_NeedsSpecialGemstone:: + .string "But, there is a slight catch.\p" + .string "For the link to work, the Machine\n" + .string "needs a special gemstone.\p" + .string "It's supposed to be on ONE ISLAND,\n" + .string "but I haven't found one yet.\p" + .string "Who knows where it could be.$" + +OneIsland_PokemonCenter_1F_Text_TryingToFindGem:: + .string "I was trying to find the gem\n" + .string "even while I was studying.\p" + .string "As a result, I've made no headway\n" + .string "in both my search and studies…\p" + .string "If I relied on BILL, I'm sure my\n" + .string "research would progress.\p" + .string "But this time, I want to try to do\n" + .string "things by myself.$" + +OneIsland_PokemonCenter_1F_Text_OhThats:: + .string "Oh!\n" + .string "Th-that's…$" + +OneIsland_PokemonCenter_1F_Text_HandedRubyToCelio:: + .string "{PLAYER} handed the RUBY\n" + .string "to CELIO.$" + +OneIsland_PokemonCenter_1F_Text_MayIAskOneMoreFavor:: + .string "Thank you!\n" + .string "{PLAYER}, you're simply amazing.\p" + .string "… … … … … …\p" + .string "Um… May I ask one more giant favor\n" + .string "of you?$" + +OneIsland_PokemonCenter_1F_Text_PleaseINeedYourHelp:: + .string "It… It's not anything weird.\n" + .string "Please, I need your help.$" + +OneIsland_PokemonCenter_1F_Text_AnotherGemstoneInSeviiIslands:: + .string "While I was studying gemstones,\n" + .string "I discovered something important.\p" + .string "There is another gem that forms\n" + .string "a pair with this RUBY.\p" + .string "That other gemstone is supposed to\n" + .string "be in the SEVII ISLANDS.\p" + .string "{PLAYER}, please, I need you to go\n" + .string "find the other gem.\p" + .string "{PLAYER}, may I have your ferry\n" + .string "PASS and the TOWN MAP?$" + +OneIsland_PokemonCenter_1F_Text_ReturnedTriPassForRainbowPass:: + .string "{PLAYER} returned the TRI-PASS and\n" + .string "received the RAINBOW PASS.$" + +OneIsland_PokemonCenter_1F_Text_ObtainedExtraMapPage:: + .string "Obtained an extra page for the\n" + .string "TOWN MAP!$" + +OneIsland_PokemonCenter_1F_Text_PassLetYouGetToAllIslands:: + .string "This is my own ferry PASS.\p" + .string "It will let you get to all the\n" + .string "SEVII ISLANDS.\p" + .string "{PLAYER}, please, I can't do\n" + .string "it without your help.$" + +OneIsland_PokemonCenter_1F_Text_HandedSapphireToCelio:: + .string "{PLAYER} handed the SAPPHIRE\n" + .string "to CELIO.$" + +OneIsland_PokemonCenter_1F_Text_ThankYouGiveMeTime:: + .string "CELIO: So this is the gem that\n" + .string "forms a pair with the RUBY…\p" + .string "{PLAYER}, you've gone through a lot\n" + .string "to get this, didn't you?\p" + .string "You don't have to tell me. I know\n" + .string "it wasn't easy.\p" + .string "Thank you so much!\p" + .string "Now it's my turn to work for you!\n" + .string "Please give me a little time.$" + +OneIsland_PokemonCenter_1F_Text_OkayThisIsGood:: + .string "Okay, this is good…$" + +OneIsland_PokemonCenter_1F_Text_LinkedUpWithLanette:: + .string "I did it!\n" + .string "I linked up with LANETTE!$" + +OneIsland_PokemonCenter_1F_Text_ManagedToLinkWithHoennThankYou:: + .string "{PLAYER}…\n" + .string "{PLAYER}, I did it!\p" + .string "I've managed to link up with\n" + .string "TRAINERS in the HOENN region!\p" + .string "Finally, the Network Machine is\n" + .string "fully operational!\p" + .string "{PLAYER}, I owe it all to you!\p" + .string "Thanks to you, my dream came\n" + .string "true…$" + +OneIsland_PokemonCenter_1F_Text_WishYouBestOfLuck:: + .string "I…\n" + .string "I'm not crying.\p" + .string "That's enough about me!\p" + .string "{PLAYER}, you're going to keep\n" + .string "looking for exotic POKéMON, right?\p" + .string "I wish you the best of luck!$" + +OneIsland_PokemonCenter_1F_Text_CelioHearingRumorsAboutYou:: + .string "CELIO: Hello!\p" + .string "{PLAYER}, I've been hearing rumors\n" + .string "about you.$" + +OneIsland_PokemonCenter_1F_Text_BillsFirstMonWasAbra:: + .string "{PLAYER}, what's your favorite kind\n" + .string "of POKéMON?\p" + .string "BILL is a POKéMANIAC, so he loves\n" + .string "every kind.\p" + .string "Apparently, the first one he caught\n" + .string "was an ABRA.$" + +OneIsland_PokemonCenter_1F_Text_BillsHometownInGoldenrod:: + .string "By the way, {PLAYER}, you're from\n" + .string "PALLET TOWN, aren't you?\p" + .string "I've heard that it's a quiet and\n" + .string "pleasant place.\p" + .string "BILL's hometown is GOLDENROD CITY,\n" + .string "where his folks still live.\p" + .string "I've heard that it's quite the\n" + .string "festive, bustling city.\p" + .string "I'd like to go there one day.$" + +OneIsland_PokemonCenter_1F_Text_BillCantStomachMilk:: + .string "{PLAYER}, is there anything that\n" + .string "you can't stand?\p" + .string "Apparently, BILL simply can't\n" + .string "stomach milk at all.$" + +OneIsland_PokemonCenter_1F_Text_CameFromPalletDontKnowIt:: + .string "Oh, you're a stranger here!\n" + .string "Hi! Where did you come from?\p" + .string "…PALLET TOWN?\n" + .string "I don't know it!$" + +OneIsland_PokemonCenter_1F_Text_EnormousVolcanoOnIsland:: + .string "On this island, there's an enormous\n" + .string "volcano.\p" + .string "It hasn't erupted lately, so why\n" + .string "not enjoy a hike?$" + +OneIsland_PokemonCenter_1F_Text_WishICouldTradeWithBoyfriend:: + .string "I wish I could trade POKéMON with\n" + .string "my boyfriend who lives far away…$" + +OneIsland_PokemonCenter_1F_Text_TradedWithFarAwayBoyfriend:: + .string "I traded POKéMON with my boyfriend\n" + .string "far away!\p" + .string "Everyone's saying that we can\n" + .string "thank you and CELIO.\p" + .string "So, thank you!$" + +OneIsland_PokemonCenter_1F_Text_MachineUnderAdjustment:: + .string "Network Machine\n" + .string "Link Level 0\p" + .string "…POKéMON Storage System under\n" + .string "adjustment…$" + +OneIsland_PokemonCenter_1F_Text_MachineLinkedWithKanto:: + .string "Network Machine\n" + .string "Link Level 1\p" + .string "Link established with the KANTO\n" + .string "region.$" + +OneIsland_PokemonCenter_1F_Text_MachineLinkedWithKantoAndHoenn:: + .string "Network Machine\n" + .string "Link Level 2\p" + .string "Link established with the KANTO\n" + .string "and HOENN regions.$" + +OneIsland_PokemonCenter_1F_Text_ObtainedTriPass:: + .string "Obtained the TRI-PASS!$" + diff --git a/data/maps/OneIsland_PokemonCenter_2F/scripts.inc b/data/maps/OneIsland_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..1d1df03120a4 --- /dev/null +++ b/data/maps/OneIsland_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +OneIsland_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +OneIsland_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +OneIsland_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +OneIsland_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/OneIsland_TreasureBeach/scripts.inc b/data/maps/OneIsland_TreasureBeach/scripts.inc new file mode 100644 index 000000000000..dbfe89aef80d --- /dev/null +++ b/data/maps/OneIsland_TreasureBeach/scripts.inc @@ -0,0 +1,25 @@ +OneIsland_TreasureBeach_MapScripts:: + .byte 0 + +OneIsland_TreasureBeach_EventScript_Boy:: + msgbox OneIsland_TreasureBeach_Text_GoodThingsWashUpOnBeach, MSGBOX_NPC + end + +OneIsland_TreasureBeach_Text_AmaraIntro:: + .string "Lying back, rocked by the waves…\n" + .string "It's exquisite.$" + +OneIsland_TreasureBeach_Text_AmaraDefeat:: + .string "I lost…\n" + .string "It feels awful.$" + +OneIsland_TreasureBeach_Text_AmaraPostBattle:: + .string "The sea is pleasantly warm in these\n" + .string "parts.$" + +OneIsland_TreasureBeach_Text_GoodThingsWashUpOnBeach:: + .string "Good things get washed up by the\n" + .string "ocean current onto this beach.\p" + .string "That's why I often come here for\n" + .string "some beachcombing.$" + diff --git a/data/maps/PalletTown/scripts.inc b/data/maps/PalletTown/scripts.inc new file mode 100644 index 000000000000..2f39ef35ea7c --- /dev/null +++ b/data/maps/PalletTown/scripts.inc @@ -0,0 +1,548 @@ +.equ SIGN_LADY_READY, VAR_TEMP_2 + +PalletTown_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, PalletTown_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, PalletTown_OnFrame + .byte 0 + +PalletTown_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_PALLET_TOWN + call_if_set FLAG_PALLET_LADY_NOT_BLOCKING_SIGN, PalletTown_EventScript_TryReadySignLady + call_if_eq VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 0, PalletTown_EventScript_SetSignLadyPos + call_if_eq VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1, PalletTown_EventScript_SetSignLadyDone + end + +PalletTown_EventScript_TryReadySignLady:: + goto_if_unset FLAG_OPENED_START_MENU, Common_EventScript_NopReturn + goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1, Common_EventScript_NopReturn + setvar VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1 + return + +PalletTown_EventScript_SetSignLadyDone:: + setvar VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 2 + return + +PalletTown_EventScript_SetSignLadyPos:: + goto_if_set FLAG_PALLET_LADY_NOT_BLOCKING_SIGN, PalletTown_EventScript_MoveSignLadyToRouteEntrance + setobjectxyperm LOCALID_PALLET_SIGN_LADY, 5, 15 + setobjectmovementtype LOCALID_PALLET_SIGN_LADY, MOVEMENT_TYPE_FACE_UP + return + +PalletTown_EventScript_MoveSignLadyToRouteEntrance:: + setobjectxyperm LOCALID_PALLET_SIGN_LADY, 12, 2 + setobjectmovementtype LOCALID_PALLET_SIGN_LADY, MOVEMENT_TYPE_FACE_DOWN + setvar SIGN_LADY_READY, TRUE + return + +PalletTown_OnFrame:: + map_script_2 VAR_MAP_SCENE_PALLET_TOWN_OAK, 2, PalletTown_EventScript_OakRatingScene + .2byte 0 + +@ Oak approaches player after exiting their house post Elite Four to check if they should receieve the National Dex +PalletTown_EventScript_OakRatingScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + setobjectxyperm LOCALID_PALLET_PROF_OAK, 14, 14 + setobjectmovementtype LOCALID_PALLET_PROF_OAK, MOVEMENT_TYPE_FACE_LEFT + addobject LOCALID_PALLET_PROF_OAK + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakWalkToPlayersDoor + waitmovement 0 + goto_if_unset FLAG_WORLD_MAP_ONE_ISLAND, PalletTown_EventScript_NotBeenToOneIslandYet + msgbox PalletTown_Text_OakLetMeSeePokedex + setvar VAR_0x8004, 0 + specialvar VAR_RESULT, GetFrlgPokedexCount + copyvar VAR_0x8008, VAR_0x8005 + copyvar VAR_0x8009, VAR_0x8006 + buffernumberstring STR_VAR_1, VAR_0x8008 + buffernumberstring STR_VAR_2, VAR_0x8009 + goto_if_lt VAR_0x8009, 60, PalletTown_EventScript_NotEnoughMonsForNationalDex + msgbox PalletTown_Text_CaughtXImpressiveFollowMe + closemessage + playbgm MUS_FOLLOW_ME, 0 + applymovement LOCALID_PLAYER, PalletTown_Movement_PlayerWalkToLabFromHouse + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakWalkToLabFromHouse + waitmovement 0 + opendoor 16, 13 + waitdooranim + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakEnterLab + applymovement LOCALID_PLAYER, PalletTown_Movement_PlayerEnterLab + waitmovement 0 + closedoor 16, 13 + waitdooranim + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 7 + setvar VAR_MAP_SCENE_PALLET_TOWN_OAK, 3 + setflag FLAG_HIDE_OAK_IN_PALLET_TOWN + warp MAP_PALLET_TOWN_PROFESSOR_OAKS_LAB, 6, 12 + waitstate + releaseall + end + +PalletTown_EventScript_EndOakRatingScene:: + closemessage + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakExit + waitmovement 0 + removeobject LOCALID_PALLET_PROF_OAK + setvar VAR_MAP_SCENE_PALLET_TOWN_OAK, 3 + releaseall + end + +PalletTown_EventScript_NotEnoughMonsForNationalDex:: + msgbox PalletTown_Text_CaughtXPuttingInHonestEffort + goto PalletTown_EventScript_EndOakRatingScene + end + +PalletTown_EventScript_NotBeenToOneIslandYet:: + msgbox PalletTown_Text_OakYouEnjoyingTraveling + goto PalletTown_EventScript_EndOakRatingScene + end + +PalletTown_Movement_OakWalkToPlayersDoor:: + walk_left + walk_left + walk_left + walk_up + walk_up + walk_up + walk_up + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_in_place_faster_up + step_end + +PalletTown_Movement_OakExit:: + walk_right + walk_right + walk_right + walk_right + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_right + walk_right + walk_right + step_end + +PalletTown_Movement_OakWalkToLabFromHouse:: + walk_right + walk_right + walk_right + walk_right + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_right + walk_right + walk_right + walk_right + walk_right + walk_in_place_faster_up + step_end + +PalletTown_Movement_PlayerWalkToLabFromHouse:: + walk_down + walk_right + walk_right + walk_right + walk_right + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_right + walk_right + walk_right + walk_right + step_end + +PalletTown_EventScript_OakTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + goto PalletTown_EventScript_OakTrigger + end + +PalletTown_EventScript_OakTriggerRight:: + lockall + setvar VAR_TEMP_1, 1 + goto PalletTown_EventScript_OakTrigger + end + +PalletTown_EventScript_OakTrigger:: + famechecker FAMECHECKER_OAK, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + textcolor NPC_TEXT_COLOR_MALE + delay 30 + playbgm MUS_RG_OAK, 0 + message PalletTown_Text_OakDontGoOut + waitmessage + delay 85 + closemessage + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + playse SE_PIN + applymovement LOCALID_PLAYER, Common_Movement_ExclamationMark + waitmovement 0 + delay 30 + addobject LOCALID_PALLET_PROF_OAK + call_if_eq VAR_TEMP_1, 0, PalletTown_EventScript_OakEnterLeft + call_if_eq VAR_TEMP_1, 1, PalletTown_EventScript_OakEnterRight + delay 30 + msgbox PalletTown_Text_OakGrassUnsafeNeedMon + closemessage + delay 30 + call_if_eq VAR_TEMP_1, 0, PalletTown_EventScript_OakLeadPlayerToLabLeft + call_if_eq VAR_TEMP_1, 1, PalletTown_EventScript_OakLeadPlayerToLabRight + opendoor 16, 13 + waitdooranim + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakEnterLab + applymovement LOCALID_PLAYER, PalletTown_Movement_PlayerEnterLab + waitmovement 0 + closedoor 16, 13 + waitdooranim + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 1 + clearflag FLAG_HIDE_OAK_IN_HIS_LAB + setvar VAR_MAP_SCENE_PALLET_TOWN_OAK, 1 + setflag FLAG_HIDE_OAK_IN_PALLET_TOWN + setflag FLAG_DONT_TRANSITION_MUSIC + warp MAP_PALLET_TOWN_PROFESSOR_OAKS_LAB, 6, 12 + waitstate + releaseall + end + +PalletTown_EventScript_OakEnterLeft:: + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakEnterLeft + waitmovement 0 + return + +PalletTown_EventScript_OakEnterRight:: + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakEnterRight + waitmovement 0 + return + +PalletTown_EventScript_OakLeadPlayerToLabLeft:: + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakWalkToLabLeft + applymovement LOCALID_PLAYER, PalletTown_Movement_PlayerWalkToLabLeft + waitmovement 0 + return + +PalletTown_EventScript_OakLeadPlayerToLabRight:: + applymovement LOCALID_PALLET_PROF_OAK, PalletTown_Movement_OakWalkToLabRight + applymovement LOCALID_PLAYER, PalletTown_Movement_PlayerWalkToLabRight + waitmovement 0 + return + +PalletTown_Movement_OakEnterLeft:: + walk_up + walk_up + walk_right + walk_up + walk_up + walk_right + walk_up + walk_up + step_end + +PalletTown_Movement_OakEnterRight:: + walk_right + walk_up + walk_up + walk_right + walk_up + walk_up + walk_right + walk_up + walk_up + step_end + + .macro walk_to_lab + walk_left + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_right + walk_right + walk_right + walk_right + .endm + +PalletTown_Movement_OakWalkToLabLeft:: + walk_down + walk_to_lab + walk_right + walk_in_place_faster_up + step_end + +PalletTown_Movement_OakWalkToLabRight:: + walk_down + walk_left + walk_to_lab + walk_right + walk_in_place_faster_up + step_end + +PalletTown_Movement_OakEnterLab:: + walk_up + set_invisible + step_end + +PalletTown_Movement_PlayerWalkToLabLeft:: + walk_down + walk_down + walk_to_lab + step_end + +PalletTown_Movement_PlayerWalkToLabRight:: + walk_down + walk_down + walk_left + walk_to_lab + step_end + +PalletTown_Movement_PlayerEnterLab:: + walk_right + walk_up + set_invisible + step_end + +PalletTown_EventScript_SignLady:: + lock + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 2, PalletTown_EventScript_SignLadyDone + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1, PalletTown_EventScript_SignLadyJustShowedSign + goto_if_eq SIGN_LADY_READY, TRUE, PalletTown_EventScript_SignLadyStartShowSign + goto_if_set FLAG_TEMP_2, PalletTown_EventScript_SignLadyGoReadSign + msgbox PalletTown_Text_HmmIsThatRight + applymovement LOCALID_PALLET_SIGN_LADY, Common_Movement_FacePlayer + waitmovement 0 + playse SE_PIN + applymovement LOCALID_PALLET_SIGN_LADY, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_PALLET_SIGN_LADY, Common_Movement_Delay48 + waitmovement 0 + msgbox PalletTown_Text_OhLookLook + closemessage + call_if_eq VAR_FACING, DIR_EAST, PalletTown_EventScript_SignLadyMoveOutOfWayRight + call_if_ne VAR_FACING, DIR_EAST, PalletTown_EventScript_SignLadyMoveOutOfWayLeft + copyobjectxytoperm LOCALID_PALLET_SIGN_LADY + setflag FLAG_TEMP_2 + release + end + +PalletTown_EventScript_SignLadyMoveOutOfWayRight:: + applymovement LOCALID_PALLET_SIGN_LADY, PalletTown_Movement_SignLadyMoveOutOfWayRight + waitmovement 0 + return + +PalletTown_EventScript_SignLadyMoveOutOfWayLeft:: + applymovement LOCALID_PALLET_SIGN_LADY, PalletTown_Movement_SignLadyMoveOutOfWayLeft + waitmovement 0 + return + +PalletTown_EventScript_SignLadyDone:: + applymovement LOCALID_PALLET_SIGN_LADY, Common_Movement_FacePlayer + waitmovement 0 + msgbox PalletTown_Text_RaisingMonsToo + release + end + +PalletTown_EventScript_SignLadyGoReadSign:: + applymovement LOCALID_PALLET_SIGN_LADY, Common_Movement_FacePlayer + waitmovement 0 + msgbox PalletTown_Text_ReadItReadIt + release + end + +PalletTown_EventScript_SignLadyJustShowedSign:: + applymovement LOCALID_PALLET_SIGN_LADY, Common_Movement_FacePlayer + waitmovement 0 + msgbox PalletTown_Text_SignsAreUsefulArentThey + release + end + +PalletTown_Movement_SignLadyMoveOutOfWayRight:: + walk_right + walk_in_place_faster_left + step_end + +PalletTown_Movement_SignLadyMoveOutOfWayLeft:: + walk_left + walk_in_place_faster_right + step_end + +PalletTown_EventScript_FatMan:: + msgbox PalletTown_Text_CanStoreItemsAndMonsInPC, MSGBOX_NPC + end + +PalletTown_EventScript_OaksLabSign:: + lockall + famechecker FAMECHECKER_OAK, 0 + msgbox PalletTown_Text_OakPokemonResearchLab + releaseall + end + +PalletTown_EventScript_PlayersHouseSign:: + msgbox PalletTown_Text_PlayersHouse, MSGBOX_SIGN + end + +PalletTown_EventScript_RivalsHouseSign:: + msgbox PalletTown_Text_RivalsHouse, MSGBOX_SIGN + end + +PalletTown_EventScript_TownSign:: + msgbox PalletTown_Text_TownSign, MSGBOX_SIGN + end + +PalletTown_EventScript_TrainerTips:: + lockall + msgbox PalletTown_Text_PressStartToOpenMenu + setvar VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1 + releaseall + end + +PalletTown_EventScript_SignLadyTrigger:: + lockall + applymovement LOCALID_PALLET_SIGN_LADY, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + call PalletTown_EventScript_SignLadyShowSign + releaseall + end + +PalletTown_EventScript_SignLadyShowSign:: + textcolor NPC_TEXT_COLOR_FEMALE + msgbox PalletTown_Text_LookCopiedTrainerTipsSign + closemessage + delay 20 + textcolor NPC_TEXT_COLOR_NEUTRAL + setflag FLAG_OPENED_START_MENU + setvar VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1 + setvar SIGN_LADY_READY, FALSE + special SetWalkingIntoSignVars + special DisableMsgBoxWalkaway + signmsg + msgbox PalletTown_Text_PressStartToOpenMenuCopy + normalmsg + return + +PalletTown_EventScript_SignLadyStartShowSign:: + applymovement LOCALID_PALLET_SIGN_LADY, Common_Movement_FacePlayer + waitmovement 0 + call PalletTown_EventScript_SignLadyShowSign + release + end + +PalletTown_Text_OakDontGoOut:: + .string "OAK: Hey! Wait!\n" + .string "Don't go out!$" + +PalletTown_Text_OakGrassUnsafeNeedMon:: + .string "OAK: It's unsafe!\n" + .string "Wild POKéMON live in tall grass!\p" + .string "You need your own POKéMON for\n" + .string "your protection.\p" + .string "I know!\n" + .string "Here, come with me!$" + +PalletTown_Text_RaisingMonsToo:: + .string "I'm raising POKéMON, too.\p" + .string "When they get strong, they can\n" + .string "protect me.$" + +PalletTown_Text_CanStoreItemsAndMonsInPC:: + .string "Technology is incredible!\p" + .string "You can now store and recall items\n" + .string "and POKéMON as data via PC.$" + +PalletTown_Text_OakPokemonResearchLab:: + .string "OAK POKéMON RESEARCH LAB$" + +PalletTown_Text_PlayersHouse:: + .string "{PLAYER}'s house$" + +PalletTown_Text_RivalsHouse:: + .string "{RIVAL}'s house$" + +PalletTown_Text_TownSign:: + .string "PALLET TOWN\n" + .string "Shades of your journey await!$" + +PalletTown_Text_OakLetMeSeePokedex:: + .string "OAK: Ah, {PLAYER}!\n" + .string "You're back, are you?\p" + .string "How much have you filled in your\n" + .string "POKéDEX?\p" + .string "May I see it?\p" + .string "Let's see…$" + +PalletTown_Text_CaughtXPuttingInHonestEffort:: + .string "You've caught {STR_VAR_2}…\p" + .string "Hm, it looks as if you're putting\n" + .string "in an honest effort.\p" + .string "When you manage to fill it some\n" + .string "more, come show me, please.$" + +PalletTown_Text_CaughtXImpressiveFollowMe:: + .string "You've caught… {STR_VAR_2}!?\n" + .string "Now, this is impressive!\p" + .string "There's something I wanted to ask\n" + .string "of you, {PLAYER}.\p" + .string "Come.\n" + .string "Follow me.$" + +PalletTown_Text_OakYouEnjoyingTraveling:: + .string "OAK: Ah, {PLAYER}!\n" + .string "You seem to be enjoying traveling.\p" + .string "Knowing you, {PLAYER}, I can easily\n" + .string "imagine you going out to even more\l" + .string "exotic locales.\p" + .string "Good for you, good for you.\n" + .string "Hohoho.$" + +@ For the NPC in Pallet Town that talks about the Trainer Tips sign +PalletTown_Text_HmmIsThatRight:: + .string "Hmm…\n" + .string "Is that right…$" + +PalletTown_Text_OhLookLook:: + .string "Oh!\n" + .string "Look, look!$" + +PalletTown_Text_ReadItReadIt:: + .string "Read it, read it!$" + +@ Used by sign +PalletTown_Text_PressStartToOpenMenu:: + .string "TRAINER TIPS\p" + .string "Press START to open the MENU!$" + +PalletTown_Text_SignsAreUsefulArentThey:: + .string "Signs are useful, aren't they?$" + +PalletTown_Text_LookCopiedTrainerTipsSign:: + .string "Look, look!\p" + .string "I copied what it said on one of\n" + .string "those TRAINER TIPS signs!$" + +@ Used by NPC +PalletTown_Text_PressStartToOpenMenuCopy:: + .string "TRAINER TIPS!\p" + .string "Press START to open the MENU!$" + + diff --git a/data/maps/PalletTown_PlayersHouse_1F/scripts.inc b/data/maps/PalletTown_PlayersHouse_1F/scripts.inc new file mode 100644 index 000000000000..3d3b63bb3665 --- /dev/null +++ b/data/maps/PalletTown_PlayersHouse_1F/scripts.inc @@ -0,0 +1,92 @@ +PalletTown_PlayersHouse_1F_MapScripts:: + .byte 0 + +PalletTown_PlayersHouse_1F_EventScript_Mom:: + lock + faceplayer + goto_if_set FLAG_BEAT_RIVAL_IN_OAKS_LAB, PalletTown_PlayersHouse_1F_EventScript_MomHeal + checkplayergender + call_if_eq VAR_RESULT, MALE, PalletTown_PlayersHouse_1F_EventScript_MomOakLookingForYouMale + call_if_eq VAR_RESULT, FEMALE, PalletTown_PlayersHouse_1F_EventScript_MomOakLookingForYouFemale + closemessage + applymovement LOCALID_MOM, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +PalletTown_PlayersHouse_1F_EventScript_MomOakLookingForYouMale:: + msgbox PalletTown_PlayersHouse_1F_Text_AllBoysLeaveOakLookingForYou + return + +PalletTown_PlayersHouse_1F_EventScript_MomOakLookingForYouFemale:: + msgbox PalletTown_PlayersHouse_1F_Text_AllGirlsLeaveOakLookingForYou + return + +PalletTown_PlayersHouse_1F_EventScript_MomHeal:: + msgbox PalletTown_PlayersHouse_1F_Text_YouShouldTakeQuickRest + closemessage + call Common_EventScript_OutOfCenterPartyHeal + msgbox PalletTown_PlayersHouse_1F_Text_LookingGreatTakeCare + release + end + +@ Displays special text if interacted with from side or back (which are normally inaccessible) +PalletTown_PlayersHouse_1F_EventScript_TV:: + lockall + goto_if_eq VAR_FACING, DIR_NORTH, PalletTown_PlayersHouse_1F_EventScript_TVScreen + msgbox PalletTown_PlayersHouse_1F_Text_OopsWrongSide + releaseall + end + +PalletTown_PlayersHouse_1F_EventScript_TVScreen:: + checkplayergender + call_if_eq VAR_RESULT, MALE, PalletTown_PlayersHouse_1F_EventScript_TVScreenMale + call_if_eq VAR_RESULT, FEMALE, PalletTown_PlayersHouse_1F_EventScript_TVScreenFemale + releaseall + end + +PalletTown_PlayersHouse_1F_EventScript_TVScreenMale:: + msgbox PalletTown_PlayersHouse_1F_Text_MovieOnTVFourBoysOnRailroad + return + +PalletTown_PlayersHouse_1F_EventScript_TVScreenFemale:: + msgbox PalletTown_PlayersHouse_1F_Text_MovieOnTVGirlOnBrickRoad + return + +PalletTown_PlayersHouse_1F_Text_AllBoysLeaveOakLookingForYou:: + .string "MOM: …Right.\n" + .string "All boys leave home someday.\l" + .string "It said so on TV.\p" + .string "Oh, yes. PROF. OAK, next door, was\n" + .string "looking for you.$" + +PalletTown_PlayersHouse_1F_Text_AllGirlsLeaveOakLookingForYou:: + .string "MOM: …Right.\n" + .string "All girls dream of traveling.\l" + .string "It said so on TV.\p" + .string "Oh, yes. PROF. OAK, next door, was\n" + .string "looking for you.$" + +PalletTown_PlayersHouse_1F_Text_YouShouldTakeQuickRest:: + .string "MOM: {PLAYER}!\n" + .string "You should take a quick rest.$" + +PalletTown_PlayersHouse_1F_Text_LookingGreatTakeCare:: + .string "MOM: Oh, good! You and your\n" + .string "POKéMON are looking great.\l" + .string "Take care now!$" + +PalletTown_PlayersHouse_1F_Text_MovieOnTVFourBoysOnRailroad:: + .string "There's a movie on TV.\n" + .string "Four boys are walking on railroad\l" + .string "tracks.\p" + .string "…I better go, too.$" + +PalletTown_PlayersHouse_1F_Text_MovieOnTVGirlOnBrickRoad:: + .string "There's a movie on TV.\n" + .string "A girl with her hair in pigtails is\l" + .string "walking up a brick road.\p" + .string "…I better go, too.$" + +PalletTown_PlayersHouse_1F_Text_OopsWrongSide:: + .string "Oops, wrong side…$" diff --git a/data/maps/PalletTown_PlayersHouse_2F/scripts.inc b/data/maps/PalletTown_PlayersHouse_2F/scripts.inc new file mode 100644 index 000000000000..b6e4aa89a877 --- /dev/null +++ b/data/maps/PalletTown_PlayersHouse_2F/scripts.inc @@ -0,0 +1,40 @@ +PalletTown_PlayersHouse_2F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, PalletTown_PlayersHouse_2F_OnTransition + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, PalletTown_PlayersHouse_2F_OnWarp + .byte 0 + +PalletTown_PlayersHouse_2F_OnTransition:: + call_if_eq VAR_MAP_SCENE_PALLET_TOWN_PLAYERS_HOUSE_2F, 0, PalletTown_PlayersHouse_2F_EventScript_SetRespawn + end + +PalletTown_PlayersHouse_2F_EventScript_SetRespawn:: + setrespawn HEAL_LOCATION_PALLET_TOWN + return + +PalletTown_PlayersHouse_2F_OnWarp:: + map_script_2 VAR_MAP_SCENE_PALLET_TOWN_PLAYERS_HOUSE_2F, 0, PalletTown_PlayersHouse_2F_FirstWarpIn + .2byte 0 + +PalletTown_PlayersHouse_2F_FirstWarpIn:: + turnobject LOCALID_PLAYER, DIR_NORTH + setvar VAR_MAP_SCENE_PALLET_TOWN_PLAYERS_HOUSE_2F, 1 + end + +PalletTown_PlayersHouse_2F_EventScript_NES:: + msgbox PalletTown_PlayersHouse_2F_Text_PlayedWithNES, MSGBOX_SIGN + end + +PalletTown_PlayersHouse_2F_EventScript_Sign:: + msgbox PalletTown_PlayersHouse_2F_Text_PressLRForHelp, MSGBOX_SIGN + end + +PalletTown_PlayersHouse_2F_Text_PlayedWithNES:: + .string "{PLAYER} played with the NES.\p" + .string "…Okay!\n" + .string "It's time to go!$" + +PalletTown_PlayersHouse_2F_Text_PressLRForHelp:: + .string "It's a posted notice…\p" + .string "If you're confused, ask for HELP!\n" + .string "Press the L or R Button!$" + diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc new file mode 100644 index 000000000000..eaed0e6aff2b --- /dev/null +++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc @@ -0,0 +1,1657 @@ +.equ PLAYER_STARTER_NUM, VAR_TEMP_1 +.equ PLAYER_STARTER_SPECIES, VAR_TEMP_2 +.equ RIVAL_STARTER_SPECIES, VAR_TEMP_3 +.equ RIVAL_STARTER_ID, VAR_TEMP_4 + +.equ SHOWED_OAK_COMPLETE_DEX, FLAG_TEMP_2 + +PalletTown_ProfessorOaksLab_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, PalletTown_ProfessorOaksLab_OnTransition + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, PalletTown_ProfessorOaksLab_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, PalletTown_ProfessorOaksLab_OnFrame + .byte 0 + +PalletTown_ProfessorOaksLab_OnTransition:: + setflag FLAG_VISITED_OAKS_LAB + call_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 1, PalletTown_ProfessorOaksLab_EventScript_ReadyOakForStarterScene + call_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 7, PalletTown_ProfessorOaksLab_EventScript_ReadyOakForNationalDexScene + call_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 8, PalletTown_ProfessorOaksLab_EventScript_SetNationalDexSceneFinished + call_if_set FLAG_GOT_POKEBALLS_FROM_OAK_AFTER_22_RIVAL, PalletTown_ProfessorOaksLab_EventScript_SetSkipPokeBallCheck + end + +PalletTown_ProfessorOaksLab_EventScript_SetSkipPokeBallCheck:: + setflag FLAG_OAK_SKIP_22_RIVAL_CHECK + return + +PalletTown_ProfessorOaksLab_EventScript_SetNationalDexSceneFinished:: + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 9 + return + +PalletTown_ProfessorOaksLab_EventScript_ReadyOakForStarterScene:: + setobjectxyperm LOCALID_OAKS_LAB_PROF_OAK, 6, 11 + setobjectmovementtype LOCALID_OAKS_LAB_PROF_OAK, MOVEMENT_TYPE_FACE_UP + savebgm MUS_RG_OAK + return + +PalletTown_ProfessorOaksLab_EventScript_ReadyOakForNationalDexScene:: + setobjectxyperm LOCALID_OAKS_LAB_PROF_OAK, 6, 11 + setobjectmovementtype LOCALID_OAKS_LAB_PROF_OAK, MOVEMENT_TYPE_FACE_UP + return + +PalletTown_ProfessorOaksLab_OnWarp:: + map_script_2 VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 1, PalletTown_ProfessorOaksLab_EventScript_ReadyPlayerForStarterScene + .2byte 0 + +PalletTown_ProfessorOaksLab_EventScript_ReadyPlayerForStarterScene:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +PalletTown_ProfessorOaksLab_OnFrame:: + map_script_2 VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 1, PalletTown_ProfessorOaksLab_ChooseStarterScene + map_script_2 VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 7, PalletTown_ProfessorOaksLab_EventScript_EnterForNationalDexScene + .2byte 0 + +PalletTown_ProfessorOaksLab_EventScript_EnterForNationalDexScene:: @ 8169002 + lockall + setvar VAR_FACING, DIR_NORTH + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakEnter + waitmovement 0 + removeobject LOCALID_OAKS_LAB_PROF_OAK + setobjectxyperm LOCALID_OAKS_LAB_PROF_OAK, 6, 3 + setobjectmovementtype LOCALID_OAKS_LAB_PROF_OAK, MOVEMENT_TYPE_FACE_DOWN + clearflag FLAG_HIDE_OAK_IN_HIS_LAB + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_PlayerEnter + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_NationalDexScene + end + +PalletTown_ProfessorOaksLab_EventScript_NationalDexScene:: + msgbox PalletTown_ProfessorOaksLab_Text_OakSightingsOfRareMons + closemessage + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_NationalDexSceneRivalEnterNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_NationalDexSceneRivalEnterSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_NationalDexSceneRivalEnterEastWest + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_NationalDexSceneRivalEnterEastWest + msgbox PalletTown_ProfessorOaksLab_Text_RivalJustLetMeHandleEverything + fadedefaultbgm + msgbox PalletTown_ProfessorOaksLab_Text_OakNeedYourHelpTooNeedToSeePokedexes + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_PlayerFaceOakNorth + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_PlayerFaceOakWest + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox PalletTown_ProfessorOaksLab_Text_OakTookBothPokedexUnits + closemessage + call EventScript_RestorePrevTextColor + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesToDeskNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesToDeskSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesToDeskEast + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesToDeskWest + addobject LOCALID_POKEDEX_1 + addobject LOCALID_POKEDEX_2 + delay 30 + msgbox PalletTown_ProfessorOaksLab_Text_OakNowTheseUnitsCanRecordMoreData + closemessage + removeobject LOCALID_POKEDEX_1 + removeobject LOCALID_POKEDEX_2 + delay 30 + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverEast + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverWest + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message PalletTown_ProfessorOaksLab_Text_PlayersPokedexWasUpgraded + waitmessage + waitfanfare + call EventScript_RestorePrevTextColor + special EnableNationalPokedex + msgbox PalletTown_ProfessorOaksLab_Text_OakMustReallyWorkToFillPokedex + msgbox PalletTown_ProfessorOaksLab_Text_RivalIllCompleteThePokedex + closemessage + playbgm MUS_RG_RIVAL_EXIT, 0 + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_RivalExitNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_RivalExit + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_RivalExit + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_RivalExit + removeobject LOCALID_OAKS_LAB_RIVAL + fadedefaultbgm + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 8 + releaseall + end + +PalletTown_ProfessorOaksLab_EventScript_NationalDexSceneRivalEnterNorth:: + setobjectxyperm LOCALID_OAKS_LAB_RIVAL, 5, 10 + addobject LOCALID_OAKS_LAB_RIVAL + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchRivalEnterNorth + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalEnter + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_NationalDexSceneRivalEnterEastWest:: + setobjectxyperm LOCALID_OAKS_LAB_RIVAL, 6, 10 + addobject LOCALID_OAKS_LAB_RIVAL + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchRivalEnterEastWest + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalEnter + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_NationalDexSceneRivalEnterSouth:: + setobjectxyperm LOCALID_OAKS_LAB_RIVAL, 6, 10 + addobject LOCALID_OAKS_LAB_RIVAL + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalEnter + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_PlayerFaceOakNorth:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_PlayerFaceOakWest:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_OakBringDexesToDeskNorth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakBringDexesToDesk + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_OakBringDexesToDeskSouth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakBringDexesToDeskSouth + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchOakWalkToDesk + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_WatchOakWalkToDesk + waitmovement LOCALID_OAKS_LAB_PROF_OAK + return + +PalletTown_ProfessorOaksLab_EventScript_OakBringDexesToDeskEast:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakBringDexesToDesk + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchOakWalkToDeskEast + waitmovement LOCALID_OAKS_LAB_PROF_OAK + return + +PalletTown_ProfessorOaksLab_EventScript_OakBringDexesToDeskWest:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakBringDexesToDesk + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_Movement_OakBringDexesToDesk:: + walk_up + walk_left + walk_in_place_faster_up + delay_16 + delay_4 + step_end + +PalletTown_ProfessorOaksLab_Movement_OakBringDexesToDeskSouth:: + walk_left + walk_left + walk_up + delay_16 + delay_4 + step_end + +PalletTown_ProfessorOaksLab_ChooseStarterScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakEnter + waitmovement 0 + removeobject LOCALID_OAKS_LAB_PROF_OAK + setobjectxyperm LOCALID_OAKS_LAB_PROF_OAK, 6, 3 + setobjectmovementtype LOCALID_OAKS_LAB_PROF_OAK, MOVEMENT_TYPE_FACE_DOWN + clearflag FLAG_HIDE_OAK_IN_HIS_LAB + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_PlayerEnter + waitmovement 0 + applymovement LOCALID_OAKS_LAB_RIVAL, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + clearflag FLAG_DONT_TRANSITION_MUSIC + savebgm MUS_DUMMY + fadedefaultbgm + msgbox PalletTown_ProfessorOaksLab_Text_RivalFedUpWithWaiting + closemessage + delay 60 + msgbox PalletTown_ProfessorOaksLab_Text_OakThreeMonsChooseOne + closemessage + delay 30 + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalReact + waitmovement 0 + msgbox PalletTown_ProfessorOaksLab_Text_RivalNoFairWhatAboutMe + msgbox PalletTown_ProfessorOaksLab_Text_OakBePatientRival + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 2 + releaseall + end + +PalletTown_ProfessorOaksLab_Movement_OakEnter:: + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +PalletTown_ProfessorOaksLab_Movement_PlayerEnter:: + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalReact:: + walk_in_place_up + walk_in_place_up + step_end + +PalletTown_ProfessorOaksLab_EventScript_LeaveStarterSceneTrigger:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_FaceDown + waitmovement 0 + msgbox PalletTown_ProfessorOaksLab_Text_OakHeyDontGoAwayYet + closemessage + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_PlayerWalkUp + waitmovement 0 + releaseall + end + +PalletTown_ProfessorOaksLab_Movement_PlayerWalkUp:: + walk_up + step_end + +PalletTown_ProfessorOaksLab_EventScript_RivalBattleTriggerLeft:: + lockall + setvar VAR_TEMP_2, 1 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattle + end + +PalletTown_ProfessorOaksLab_EventScript_RivalBattleTriggerMid:: + lockall + setvar VAR_TEMP_2, 2 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattle + end + +PalletTown_ProfessorOaksLab_EventScript_RivalBattleTriggerRight:: + lockall + setvar VAR_TEMP_2, 3 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattle + end + +PalletTown_ProfessorOaksLab_EventScript_RivalBattle:: + textcolor NPC_TEXT_COLOR_MALE + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + applymovement LOCALID_OAKS_LAB_RIVAL, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + msgbox PalletTown_ProfessorOaksLab_Text_RivalLetsCheckOutMons + closemessage + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_FaceDown + waitmovement 0 + goto_if_eq VAR_STARTER_MON, 0, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleCharmander + goto_if_eq VAR_STARTER_MON, 1, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleBulbasaur + goto_if_eq VAR_STARTER_MON, 2, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleSquirtle + end + +@ The scripts for the rival approaching the player for battle are a bit bloated because +@ both the player and rival can be in 3 different positions, so theres 9 different approaches +@ NOTE: Names below refer to the Rival's mon (e.g. for RivalBattleSquirtle, player has Charmander) + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleSquirtle:: + goto_if_eq VAR_TEMP_2, 1, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleSquirtleLeft + goto_if_eq VAR_TEMP_2, 2, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleSquirtleMid + goto_if_eq VAR_TEMP_2, 3, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleSquirtleRight + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleSquirtleLeft:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleSquirtleLeft + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleSquirtle + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleSquirtleMid:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleSquirtleMid + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleSquirtle + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleSquirtleRight:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleSquirtleRight + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleSquirtle + end + +PalletTown_ProfessorOaksLab_EventScript_RivalBattleSquirtle:: + trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_SQUIRTLE, RIVAL_BATTLE_TUTORIAL, PalletTown_ProfessorOaksLab_Text_RivalDefeat, Text_RivalVictory + goto PalletTown_ProfessorOaksLab_EventScript_EndRivalBattle + end + +PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleSquirtleLeft:: + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleSquirtleMid:: + walk_left + walk_left + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleSquirtleRight:: + walk_left + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleCharmander:: + goto_if_eq VAR_TEMP_2, 1, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleCharmanderLeft + goto_if_eq VAR_TEMP_2, 2, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleCharmanderMid + goto_if_eq VAR_TEMP_2, 3, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleCharmanderRight + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleCharmanderLeft:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_ApproachForBattleCharmanderLeft + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleCharmander + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleCharmanderMid:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_ApproachForBattleCharmanderMid + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleCharmander + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleCharmanderRight:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_ApproachForBattleCharmanderRight + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleCharmander + end + +PalletTown_ProfessorOaksLab_EventScript_RivalBattleCharmander:: + trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_CHARMANDER, RIVAL_BATTLE_TUTORIAL, PalletTown_ProfessorOaksLab_Text_RivalDefeat, Text_RivalVictory + goto PalletTown_ProfessorOaksLab_EventScript_EndRivalBattle + end + +PalletTown_ProfessorOaksLab_Movement_ApproachForBattleCharmanderLeft:: + walk_left + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_Movement_ApproachForBattleCharmanderMid:: + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_Movement_ApproachForBattleCharmanderRight:: + walk_left + walk_left + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleBulbasaur:: + goto_if_eq VAR_TEMP_2, 1, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleBulbasaurLeft + goto_if_eq VAR_TEMP_2, 2, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleBulbasaurMid + goto_if_eq VAR_TEMP_2, 3, PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleBulbasaurRight + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleBulbasaurLeft:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleBulbasaurLeft + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleBulbasaur + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleBulbasaurMid:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleBulbasaurMid + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleBulbasaur + end + +PalletTown_ProfessorOaksLab_EventScript_RivalApproachForBattleBulbasaurRight:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleBulbasaurRight + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalBattleBulbasaur + end + +PalletTown_ProfessorOaksLab_EventScript_RivalBattleBulbasaur:: + trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_BULBASAUR, RIVAL_BATTLE_TUTORIAL, PalletTown_ProfessorOaksLab_Text_RivalDefeat, Text_RivalVictory + goto PalletTown_ProfessorOaksLab_EventScript_EndRivalBattle + end + +PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleBulbasaurLeft:: + walk_left + walk_left + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleBulbasaurMid:: + walk_left + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalApproachForBattleBulbasaurRight:: + walk_left + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_EventScript_EndRivalBattle:: + special HealPlayerParty + msgbox PalletTown_ProfessorOaksLab_Text_RivalGoToughenMyMon + closemessage + playbgm MUS_RG_RIVAL_EXIT, 0 + call_if_eq VAR_TEMP_2, 1, PalletTown_ProfessorOaksLab_EventScript_RivalExitAfterBattleLeft + call_if_eq VAR_TEMP_2, 2, PalletTown_ProfessorOaksLab_EventScript_RivalExitAfterBattleMid + call_if_eq VAR_TEMP_2, 3, PalletTown_ProfessorOaksLab_EventScript_RivalExitAfterBattleRight + removeobject LOCALID_OAKS_LAB_RIVAL + playse SE_EXIT + fadedefaultbgm + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 4 + setflag FLAG_BEAT_RIVAL_IN_OAKS_LAB + releaseall + end + +PalletTown_ProfessorOaksLab_EventScript_RivalExitAfterBattleLeft:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalExitAfterBattleLeft + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_PlayerWatchRivalExitAfterBattle + waitmovement LOCALID_OAKS_LAB_RIVAL + return + +PalletTown_ProfessorOaksLab_EventScript_RivalExitAfterBattleMid:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalExitAfterBattleMid + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_PlayerWatchRivalExitAfterBattle + waitmovement LOCALID_OAKS_LAB_RIVAL + return + +PalletTown_ProfessorOaksLab_EventScript_RivalExitAfterBattleRight:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalExitAfterBattleRight + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_PlayerWatchRivalExitAfterBattleRight + waitmovement LOCALID_OAKS_LAB_RIVAL + return + +PalletTown_ProfessorOaksLab_Movement_RivalExitAfterBattleLeft:: + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + delay_8 + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalExitAfterBattleRight:: + walk_left + walk_down + walk_down + walk_down + walk_down + walk_down + delay_8 + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalExitAfterBattleMid:: + walk_right + walk_down + walk_down + walk_down + walk_left + walk_down + walk_down + delay_8 + step_end + +PalletTown_ProfessorOaksLab_Movement_PlayerWatchRivalExitAfterBattle:: + delay_16 + delay_8 + walk_in_place_faster_right + delay_16 + walk_in_place_faster_down + step_end + +PalletTown_ProfessorOaksLab_Movement_PlayerWatchRivalExitAfterBattleRight:: + delay_16 + delay_8 + walk_in_place_faster_left + delay_16 + walk_in_place_faster_down + step_end + +PalletTown_ProfessorOaksLab_EventScript_Rival:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3, PalletTown_ProfessorOaksLab_EventScript_RivalChoseStarter + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 2, PalletTown_ProfessorOaksLab_EventScript_RivalWaitingForStarter + msgbox PalletTown_ProfessorOaksLab_Text_RivalGrampsIsntAround + release + end + +PalletTown_ProfessorOaksLab_EventScript_RivalWaitingForStarter:: + msgbox PalletTown_ProfessorOaksLab_Text_RivalGoChoosePlayer + release + end + +PalletTown_ProfessorOaksLab_EventScript_RivalChoseStarter:: + msgbox PalletTown_ProfessorOaksLab_Text_RivalMyMonLooksTougher + release + end + +PalletTown_ProfessorOaksLab_EventScript_ProfOak:: + lock + faceplayer + goto_if_set SHOWED_OAK_COMPLETE_DEX, PalletTown_ProfessorOaksLab_EventScript_OakJustShownCompleteDex + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 9, PalletTown_ProfessorOaksLab_EventScript_RatePokedex + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 8, PalletTown_ProfessorOaksLab_EventScript_MonsAroundWorldWait + goto_if_set FLAG_SYS_GAME_CLEAR, PalletTown_ProfessorOaksLab_EventScript_TryStartNationalDexScene + goto_if_eq VAR_MAP_SCENE_CERULEAN_CITY_RIVAL, 1, PalletTown_ProfessorOaksLab_EventScript_RatePokedex + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 6, PalletTown_ProfessorOaksLab_EventScript_RatePokedexOrTryGiveBalls + goto_if_ge VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 1, PalletTown_ProfessorOaksLab_EventScript_ReceiveDexScene + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 4, PalletTown_ProfessorOaksLab_EventScript_OakBattleMonForItToGrow + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3, PalletTown_ProfessorOaksLab_EventScript_OakCanReachNextTownWithMon + msgbox PalletTown_ProfessorOaksLab_Text_OakWhichOneWillYouChoose + release + end + +PalletTown_ProfessorOaksLab_EventScript_OakJustShownCompleteDex:: + msgbox PokedexRating_Text_ThankYouMadeDreamReality + release + end + +PalletTown_ProfessorOaksLab_EventScript_OakCanReachNextTownWithMon:: + msgbox PalletTown_ProfessorOaksLab_Text_OakCanReachNextTownWithMon + release + end + +PalletTown_ProfessorOaksLab_EventScript_OakBattleMonForItToGrow:: + msgbox PalletTown_ProfessorOaksLab_Text_OakBattleMonForItToGrow + release + end + +PalletTown_ProfessorOaksLab_EventScript_ReceiveDexScene:: + msgbox PalletTown_ProfessorOaksLab_Text_OakHaveSomethingForMe + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_OBTAIN_TMHM + message PalletTown_ProfessorOaksLab_Text_DeliveredOaksParcel + waitmessage + waitfanfare + call EventScript_RestorePrevTextColor + removeitem ITEM_OAKS_PARCEL + msgbox PalletTown_ProfessorOaksLab_Text_OakCustomBallIOrdered + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + msgbox PalletTown_ProfessorOaksLab_Text_RivalGramps + closemessage + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalEnterNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalEnterSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalEnterEastWest + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalEnterEastWest + fadedefaultbgm + msgbox PalletTown_ProfessorOaksLab_Text_RivalWhatDidYouCallMeFor + closemessage + delay 30 + playse SE_PIN + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_Delay48 + waitmovement 0 + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_DexSceneOakFacePlayerAndRivalSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_DexSceneOakFacePlayerAndRivalEast + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_DexSceneOakFacePlayerAndRivalWest + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_DexSceneOakFacePlayerAndRivalNorth + msgbox PalletTown_ProfessorOaksLab_Text_OakHaveRequestForYouTwo + closemessage + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_DexSceneOakWalkToDeskNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_DexSceneOakWalkToDeskSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_DexSceneOakWalkToDeskEast + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_DexSceneOakWalkToDeskWest + msgbox PalletTown_ProfessorOaksLab_Text_OakPokedexOnDesk + closemessage + delay 40 + msgbox PalletTown_ProfessorOaksLab_Text_OakTakeTheseWithYou + closemessage + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + removeobject LOCALID_POKEDEX_1 + delay 10 + removeobject LOCALID_POKEDEX_2 + delay 25 + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverEast + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverWest + delay 10 + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message PalletTown_ProfessorOaksLab_Text_ReceivedPokedexFromOak + waitmessage + waitfanfare + call EventScript_RestorePrevTextColor + setflag FLAG_SYS_POKEDEX_GET + special SetUnlockedPokedexFlags + setvar VAR_MAP_SCENE_POKEMON_CENTER_TEALA, 1 + msgbox PalletTown_ProfessorOaksLab_Text_OakCatchMonsForDataTakeThese + giveitem_msg PalletTown_ProfessorOaksLab_Text_ReceivedFivePokeBalls, ITEM_POKE_BALL, 5 + msgbox PalletTown_ProfessorOaksLab_Text_OakExplainCatching + famechecker FAMECHECKER_OAK, 1 + msgbox PalletTown_ProfessorOaksLab_Text_OakCompleteMonGuideWasMyDream + msgbox PalletTown_ProfessorOaksLab_Text_RivalLeaveItToMeGramps + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalFacePlayerNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalFacePlayerSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalFacePlayerEastWest + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalFacePlayerEastWest + msgbox PalletTown_ProfessorOaksLab_Text_RivalTellSisNotToGiveYouMap + closemessage + playbgm MUS_RG_RIVAL_EXIT, 0 + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_RivalExitNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_RivalExit + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_RivalExit + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_RivalExit + removeobject LOCALID_OAKS_LAB_RIVAL + fadedefaultbgm + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 6 + setvar VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 2 + setvar VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 1 + setvar VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 1 + setvar VAR_MAP_SCENE_ROUTE22, 1 + release + end + +PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverNorth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakBringDexesOver + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverSouth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakBringDexesOverSouth + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverEast:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakBringDexesOver + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_PlayerFaceOakForDexEast + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_OakBringDexesOverWest:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakBringDexesOver + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_Movement_PlayerFaceOakForDexEast:: + delay_16 + delay_8 + walk_in_place_faster_right + step_end + +PalletTown_ProfessorOaksLab_Movement_OakBringDexesOver:: + walk_right + walk_down + step_end + +PalletTown_ProfessorOaksLab_Movement_OakBringDexesOverSouth:: + walk_down + walk_right + step_end + +PalletTown_ProfessorOaksLab_EventScript_DexSceneOakWalkToDeskNorth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakWalkToDesk + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneOakWalkToDeskSouth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakWalkToDeskSouth + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchOakWalkToDesk + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_WatchOakWalkToDesk + waitmovement LOCALID_OAKS_LAB_PROF_OAK + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneOakWalkToDeskEast:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakWalkToDesk + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchOakWalkToDeskEast + waitmovement LOCALID_OAKS_LAB_PROF_OAK + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneOakWalkToDeskWest:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakWalkToDesk + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_Movement_WatchOakWalkToDeskEast:: + delay_16 + delay_8 + walk_in_place_faster_up + step_end + +PalletTown_ProfessorOaksLab_Movement_WatchOakWalkToDesk:: + delay_16 + delay_8 + walk_in_place_faster_left + step_end + +PalletTown_ProfessorOaksLab_Movement_OakWalkToDesk:: + walk_up + walk_left + delay_16 + walk_in_place_faster_down + step_end + +PalletTown_ProfessorOaksLab_Movement_OakWalkToDeskSouth:: + walk_left + walk_left + walk_up + delay_16 + walk_in_place_faster_right + step_end + +PalletTown_ProfessorOaksLab_EventScript_RatePokedexOrTryGiveBalls:: + setvar VAR_0x8004, 0 + specialvar VAR_RESULT, GetFrlgPokedexCount + copyvar VAR_0x8008, VAR_0x8005 + copyvar VAR_0x8009, VAR_0x8006 + buffernumberstring STR_VAR_1, VAR_0x8008 + buffernumberstring STR_VAR_2, VAR_0x8009 + goto_if_eq VAR_0x8009, 1, PalletTown_ProfessorOaksLab_EventScript_CheckIfPlayerNeedsBalls @ Player only has starter + goto PalletTown_ProfessorOaksLab_EventScript_RatePokedex + end + +PalletTown_ProfessorOaksLab_EventScript_RatePokedex:: + call PokedexRating_EventScript_RateInPerson + goto_if_set FLAG_OAK_SAW_DEX_COMPLETION, PalletTown_ProfessorOaksLab_EventScript_DexCompleted + release + end + +PalletTown_ProfessorOaksLab_EventScript_DexCompleted:: + closemessage + delay 40 + message PokedexRating_Text_Wroooaaarrr + waitmessage + call_if_eq VAR_FACING, DIR_NORTH, PalletTown_ProfessorOaksLab_EventScript_OakExcitedNorth + call_if_eq VAR_FACING, DIR_SOUTH, PalletTown_ProfessorOaksLab_EventScript_OakExcitedSouth + call_if_eq VAR_FACING, DIR_EAST, PalletTown_ProfessorOaksLab_EventScript_OakExcitedEast + call_if_eq VAR_FACING, DIR_WEST, PalletTown_ProfessorOaksLab_EventScript_OakExcitedWest + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_FacePlayer + waitmovement 0 + closemessage + delay 70 + msgbox PokedexRating_Text_ThankYouMadeDreamReality + setflag SHOWED_OAK_COMPLETE_DEX + release + end + +PalletTown_ProfessorOaksLab_EventScript_OakExcitedNorth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakExcitedNorth + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_OakExcitedSouth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakExcitedSouth + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_OakExcitedEast:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakExcitedEast + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_OakExcitedWest:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, PalletTown_ProfessorOaksLab_Movement_OakExcitedWest + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_Movement_OakExcitedNorth:: + walk_in_place_down + walk_in_place_fast_down + walk_in_place_down + walk_in_place_down + walk_in_place_fast_down + walk_in_place_down + step_end + +PalletTown_ProfessorOaksLab_Movement_OakExcitedSouth:: + walk_in_place_up + walk_in_place_fast_up + walk_in_place_up + walk_in_place_up + walk_in_place_fast_up + walk_in_place_up + step_end + +PalletTown_ProfessorOaksLab_Movement_OakExcitedEast:: + walk_in_place_left + walk_in_place_fast_left + walk_in_place_left + walk_in_place_left + walk_in_place_fast_left + walk_in_place_left + step_end + +PalletTown_ProfessorOaksLab_Movement_OakExcitedWest:: + walk_in_place_right + walk_in_place_fast_right + walk_in_place_right + walk_in_place_right + walk_in_place_fast_right + walk_in_place_right + step_end + +@ Unused +PalletTown_ProfessorOaksLab_Movement_Search: + walk_left + walk_in_place_faster_down + delay_8 + walk_in_place_faster_right + delay_8 + walk_in_place_faster_up + delay_8 + walk_in_place_faster_left + delay_8 + walk_in_place_faster_down + delay_8 + walk_right + walk_right + walk_in_place_faster_up + delay_8 + walk_in_place_faster_left + delay_8 + walk_in_place_faster_down + delay_8 + walk_in_place_faster_right + delay_8 + walk_in_place_faster_up + delay_8 + walk_left + step_end + +@ Unused +PalletTown_ProfessorOaksLab_Movement_VerticalPacing: + walk_up + walk_down + walk_down + walk_in_place_down + walk_up + delay_16 + delay_16 + delay_16 + step_end + +PalletTown_ProfessorOaksLab_EventScript_TryStartNationalDexScene:: + call PokedexRating_EventScript_RateInPerson + closemessage + goto_if_lt VAR_0x8009, 60, PalletTown_ProfessorOaksLab_EventScript_DontStartNationalDexScene + goto_if_unset FLAG_WORLD_MAP_ONE_ISLAND, PalletTown_ProfessorOaksLab_EventScript_DontStartNationalDexScene + delay 30 + msgbox PalletTown_ProfessorOaksLab_Text_OakFavorToAskYouPlayer + goto PalletTown_ProfessorOaksLab_EventScript_NationalDexScene + end + +PalletTown_ProfessorOaksLab_EventScript_DontStartNationalDexScene:: + release + end + +PalletTown_ProfessorOaksLab_EventScript_CheckIfPlayerNeedsBalls:: + goto_if_set FLAG_OAK_SKIP_22_RIVAL_CHECK, PalletTown_ProfessorOaksLab_EventScript_MonsAroundWorldWait + goto_if_set FLAG_GOT_POKEBALLS_FROM_OAK_AFTER_22_RIVAL, PalletTown_ProfessorOaksLab_EventScript_PlayerAlreadyGotBalls + checkitem ITEM_POKE_BALL + goto_if_eq VAR_RESULT, FALSE, PalletTown_ProfessorOaksLab_EventScript_PlayerOutOfBalls + goto PalletTown_ProfessorOaksLab_EventScript_MonsAroundWorldWait + end + +PalletTown_ProfessorOaksLab_EventScript_PlayerOutOfBalls:: + goto_if_ge VAR_MAP_SCENE_ROUTE22, 2, PalletTown_ProfessorOaksLab_EventScript_GivePlayerMoreBalls + goto PalletTown_ProfessorOaksLab_EventScript_MonsAroundWorldWait + end + +PalletTown_ProfessorOaksLab_EventScript_GivePlayerMoreBalls:: + msgbox PalletTown_ProfessorOaksLab_Text_OakAddedNothingToPokedex + giveitem_msg PalletTown_ProfessorOaksLab_Text_ReceivedFivePokeBalls, ITEM_POKE_BALL, 5 + setflag FLAG_GOT_POKEBALLS_FROM_OAK_AFTER_22_RIVAL + release + end + +PalletTown_ProfessorOaksLab_EventScript_MonsAroundWorldWait:: + msgbox PalletTown_ProfessorOaksLab_Text_OakMonsAroundWorldWait + release + end + +PalletTown_ProfessorOaksLab_EventScript_PlayerAlreadyGotBalls:: + msgbox PalletTown_ProfessorOaksLab_Text_OakComeSeeMeSometime + release + end + +PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalEnterNorth:: + setobjectxyperm LOCALID_OAKS_LAB_RIVAL, 5, 10 + addobject LOCALID_OAKS_LAB_RIVAL + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchRivalEnterNorth + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalEnter + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalEnterEastWest:: + setobjectxyperm LOCALID_OAKS_LAB_RIVAL, 6, 10 + addobject LOCALID_OAKS_LAB_RIVAL + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchRivalEnterEastWest + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalEnter + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalEnterSouth:: + setobjectxyperm LOCALID_OAKS_LAB_RIVAL, 6, 10 + addobject LOCALID_OAKS_LAB_RIVAL + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalEnter + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneOakFacePlayerAndRivalSouth:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_FacePlayer + waitmovement 0 + delay 15 + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneOakFacePlayerAndRivalWest:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_FacePlayer + waitmovement 0 + delay 15 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneOakFacePlayerAndRivalEast:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_FacePlayer + waitmovement 0 + delay 15 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalFacePlayerNorth:: + applymovement LOCALID_OAKS_LAB_RIVAL, Common_Movement_FacePlayer + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalFacePlayerSouth:: + applymovement LOCALID_OAKS_LAB_RIVAL, Common_Movement_WalkInPlaceFasterUp + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneRivalFacePlayerEastWest:: + applymovement LOCALID_OAKS_LAB_RIVAL, Common_Movement_FacePlayer + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_RivalExitNorth:: + applymovement LOCALID_PLAYER, PalletTown_ProfessorOaksLab_Movement_WatchRivalEnterEastWest + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalExit + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_RivalExit:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalExit + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_EventScript_DexSceneOakFacePlayerAndRivalNorth:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +PalletTown_ProfessorOaksLab_Movement_WatchRivalEnterEastWest:: + delay_4 + walk_in_place_faster_down + step_end + +PalletTown_ProfessorOaksLab_Movement_WatchRivalEnterNorth:: + walk_in_place_faster_down + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_8 + walk_in_place_faster_left + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalEnter:: + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalExit:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +PalletTown_ProfessorOaksLab_EventScript_BulbasaurBall:: + lock + faceplayer + setvar PLAYER_STARTER_NUM, 0 + setvar PLAYER_STARTER_SPECIES, SPECIES_BULBASAUR + setvar RIVAL_STARTER_SPECIES, SPECIES_CHARMANDER + setvar RIVAL_STARTER_ID, LOCALID_CHARMANDER_BALL + goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3, PalletTown_ProfessorOaksLab_EventScript_LastPokeBall + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 2, PalletTown_ProfessorOaksLab_EventScript_ConfirmStarterChoice + msgbox PalletTown_ProfessorOaksLab_Text_ThoseArePokeBalls + release + end + +PalletTown_ProfessorOaksLab_EventScript_ConfirmStarterChoice:: + applymovement LOCALID_OAKS_LAB_PROF_OAK, Common_Movement_FaceRight + waitmovement 0 + showmonpic PLAYER_STARTER_SPECIES, 10, 3 + textcolor NPC_TEXT_COLOR_MALE + goto_if_eq PLAYER_STARTER_NUM, 0, PalletTown_ProfessorOaksLab_EventScript_ConfirmBulbasaur + goto_if_eq PLAYER_STARTER_NUM, 1, PalletTown_ProfessorOaksLab_EventScript_ConfirmSquirtle + goto_if_eq PLAYER_STARTER_NUM, 2, PalletTown_ProfessorOaksLab_EventScript_ConfirmCharmander + end + +PalletTown_ProfessorOaksLab_EventScript_ConfirmBulbasaur:: + msgbox PalletTown_ProfessorOaksLab_Text_OakChoosingBulbasaur, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, PalletTown_ProfessorOaksLab_EventScript_ChoseStarter + goto_if_eq VAR_RESULT, NO, PalletTown_ProfessorOaksLab_EventScript_DeclinedStarter + end + +PalletTown_ProfessorOaksLab_EventScript_ConfirmSquirtle:: + msgbox PalletTown_ProfessorOaksLab_Text_OakChoosingSquirtle, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, PalletTown_ProfessorOaksLab_EventScript_ChoseStarter + goto_if_eq VAR_RESULT, NO, PalletTown_ProfessorOaksLab_EventScript_DeclinedStarter + end + +PalletTown_ProfessorOaksLab_EventScript_ConfirmCharmander:: + msgbox PalletTown_ProfessorOaksLab_Text_OakChoosingCharmander, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, PalletTown_ProfessorOaksLab_EventScript_ChoseStarter + goto_if_eq VAR_RESULT, NO, PalletTown_ProfessorOaksLab_EventScript_DeclinedStarter + end + +PalletTown_ProfessorOaksLab_EventScript_DeclinedStarter:: + hidemonpic + release + end + +PalletTown_ProfessorOaksLab_EventScript_ChoseStarter:: + hidemonpic + removeobject VAR_LAST_TALKED + msgbox PalletTown_ProfessorOaksLab_Text_OakThisMonIsEnergetic + call EventScript_RestorePrevTextColor + setflag FLAG_SYS_POKEMON_GET + setflag FLAG_PALLET_LADY_NOT_BLOCKING_SIGN + givemon PLAYER_STARTER_SPECIES, 5 + copyvar VAR_STARTER_MON, PLAYER_STARTER_NUM + bufferspeciesname STR_VAR_1, PLAYER_STARTER_SPECIES + message PalletTown_ProfessorOaksLab_Text_ReceivedMonFromOak + waitmessage + playfanfare MUS_RG_OBTAIN_KEY_ITEM + waitfanfare + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, EventScript_GiveNicknameToStarter + goto_if_eq VAR_RESULT, NO, PalletTown_ProfessorOaksLab_EventScript_RivalPicksStarter + end + +EventScript_GiveNicknameToStarter:: + setvar VAR_0x8004, 0 + call Common_EventScript_NameReceivedPartyMon + goto PalletTown_ProfessorOaksLab_EventScript_RivalPicksStarter + end + +PalletTown_ProfessorOaksLab_EventScript_RivalPicksStarter:: + closemessage + goto_if_eq PLAYER_STARTER_NUM, 0, PalletTown_ProfessorOaksLab_EventScript_RivalWalksToCharmander + goto_if_eq PLAYER_STARTER_NUM, 1, PalletTown_ProfessorOaksLab_EventScript_RivalWalksToBulbasaur + goto_if_eq PLAYER_STARTER_NUM, 2, PalletTown_ProfessorOaksLab_EventScript_RivalWalksToSquirtle + end + +PalletTown_ProfessorOaksLab_EventScript_RivalWalksToCharmander:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalWalksToCharmander + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalTakesStarter + end + +PalletTown_ProfessorOaksLab_EventScript_RivalWalksToSquirtle:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalWalksToSquirtle + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalTakesStarter + end + +PalletTown_ProfessorOaksLab_EventScript_RivalWalksToBulbasaur:: + applymovement LOCALID_OAKS_LAB_RIVAL, PalletTown_ProfessorOaksLab_Movement_RivalWalksToBulbasaur + waitmovement 0 + goto PalletTown_ProfessorOaksLab_EventScript_RivalTakesStarter + end + +PalletTown_ProfessorOaksLab_EventScript_RivalTakesStarter:: + textcolor NPC_TEXT_COLOR_MALE + msgbox PalletTown_ProfessorOaksLab_Text_RivalIllTakeThisOneThen + removeobject RIVAL_STARTER_ID + textcolor NPC_TEXT_COLOR_NEUTRAL + bufferspeciesname STR_VAR_1, RIVAL_STARTER_SPECIES + message PalletTown_ProfessorOaksLab_Text_RivalReceivedMonFromOak + waitmessage + playfanfare MUS_RG_OBTAIN_KEY_ITEM + waitfanfare + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3 + call_if_set FLAG_OPENED_START_MENU, PalletTown_ProfessorOaksLab_EventScript_ReadyEndSignLadyScene + release + end + +PalletTown_ProfessorOaksLab_EventScript_ReadyEndSignLadyScene:: + setvar VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1 + return + +PalletTown_ProfessorOaksLab_Movement_RivalWalksToCharmander:: + walk_down + walk_down + walk_right + walk_right + walk_right + walk_right + walk_right + walk_up + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalWalksToSquirtle:: + walk_down + walk_right + walk_right + walk_right + walk_right + walk_in_place_faster_up + step_end + +PalletTown_ProfessorOaksLab_Movement_RivalWalksToBulbasaur:: + walk_down + walk_right + walk_right + walk_right + walk_in_place_faster_up + step_end + +PalletTown_ProfessorOaksLab_EventScript_SquirtleBall:: + lock + faceplayer + setvar PLAYER_STARTER_NUM, 1 + setvar PLAYER_STARTER_SPECIES, SPECIES_SQUIRTLE + setvar RIVAL_STARTER_SPECIES, SPECIES_BULBASAUR + setvar RIVAL_STARTER_ID, LOCALID_BULBASAUR_BALL + goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3, PalletTown_ProfessorOaksLab_EventScript_LastPokeBall + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 2, PalletTown_ProfessorOaksLab_EventScript_ConfirmStarterChoice + msgbox PalletTown_ProfessorOaksLab_Text_ThoseArePokeBalls + release + end + +PalletTown_ProfessorOaksLab_EventScript_CharmanderBall:: + lock + faceplayer + setvar PLAYER_STARTER_NUM, 2 + setvar PLAYER_STARTER_SPECIES, SPECIES_CHARMANDER + setvar RIVAL_STARTER_SPECIES, SPECIES_SQUIRTLE + setvar RIVAL_STARTER_ID, LOCALID_SQUIRTLE_BALL + goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3, PalletTown_ProfessorOaksLab_EventScript_LastPokeBall + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 2, PalletTown_ProfessorOaksLab_EventScript_ConfirmStarterChoice + msgbox PalletTown_ProfessorOaksLab_Text_ThoseArePokeBalls + release + end + +PalletTown_ProfessorOaksLab_EventScript_LastPokeBall:: + msgbox PalletTown_ProfessorOaksLab_Text_OaksLastMon + release + end + +PalletTown_ProfessorOaksLab_EventScript_Aide1:: + lock + faceplayer + goto_if_set FLAG_SYS_GAME_CLEAR, PalletTown_ProfessorOaksLab_EventScript_Aide1GameClear + msgbox PalletTown_ProfessorOaksLab_Text_StudyAsOaksAide + release + end + +PalletTown_ProfessorOaksLab_EventScript_Aide1GameClear:: + famechecker FAMECHECKER_OAK, 5 + msgbox PalletTown_ProfessorOaksLab_Text_OakIsGoingToHaveRadioShow + release + end + +PalletTown_ProfessorOaksLab_EventScript_Aide2:: + lock + faceplayer + goto_if_set FLAG_SYS_GAME_CLEAR, PalletTown_ProfessorOaksLab_EventScript_Aide2GameClear + msgbox PalletTown_ProfessorOaksLab_Text_StudyAsOaksAide + release + end + +PalletTown_ProfessorOaksLab_EventScript_Aide2GameClear:: + famechecker FAMECHECKER_DAISY, 0 + msgbox PalletTown_ProfessorOaksLab_Text_DaisyWillGroomMons + release + end + +PalletTown_ProfessorOaksLab_EventScript_Aide3:: + lock + faceplayer + famechecker FAMECHECKER_OAK, 2 + msgbox PalletTown_ProfessorOaksLab_Text_OakIsAuthorityOnMons + release + end + +PalletTown_ProfessorOaksLab_EventScript_Pokedex:: + msgbox PalletTown_ProfessorOaksLab_Text_BlankEncyclopedia, MSGBOX_NPC + end + +PalletTown_ProfessorOaksLab_EventScript_Computer:: + msgbox PalletTown_ProfessorOaksLab_Text_EmailMessage, MSGBOX_SIGN + end + +PalletTown_ProfessorOaksLab_EventScript_LeftSign:: + msgbox PalletTown_ProfessorOaksLab_Text_PressStartToOpenMenu, MSGBOX_SIGN + end + +PalletTown_ProfessorOaksLab_EventScript_RightSign:: + lockall + goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 6, PalletTown_ProfessorOaksLab_EventScript_RightSignAlt + msgbox PalletTown_ProfessorOaksLab_Text_SaveOptionInMenu + releaseall + end + +PalletTown_ProfessorOaksLab_EventScript_RightSignAlt:: + msgbox PalletTown_ProfessorOaksLab_Text_AllMonTypesHaveStrongAndWeakPoints + releaseall + end + +PalletTown_ProfessorOaksLab_Text_RivalGrampsIsntAround:: + .string "{RIVAL}: What, it's only {PLAYER}?\n" + .string "Gramps isn't around.$" + +PalletTown_ProfessorOaksLab_Text_RivalFedUpWithWaiting:: + .string "{RIVAL}: Gramps!\n" + .string "I'm fed up with waiting!$" + +PalletTown_ProfessorOaksLab_Text_RivalNoFairWhatAboutMe:: + .string "{RIVAL}: Hey! Gramps! No fair!\n" + .string "What about me?$" + +PalletTown_ProfessorOaksLab_Text_RivalGoChoosePlayer:: + .string "{RIVAL}: Heh, I don't need to be\n" + .string "greedy like you. I'm mature!\p" + .string "Go ahead and choose, {PLAYER}!$" + +PalletTown_ProfessorOaksLab_Text_RivalIllTakeThisOneThen:: + .string "{RIVAL}: I'll take this one, then!$" + +PalletTown_ProfessorOaksLab_Text_RivalReceivedMonFromOak:: + .string "{RIVAL} received the {STR_VAR_1}\n" + .string "from PROF. OAK!$" + +PalletTown_ProfessorOaksLab_Text_RivalMyMonLooksTougher:: + .string "{RIVAL}: My POKéMON looks a lot\n" + .string "tougher than yours.$" + +PalletTown_ProfessorOaksLab_Text_RivalLetsCheckOutMons:: + .string "{RIVAL}: Wait, {PLAYER}!\n" + .string "Let's check out our POKéMON!\p" + .string "Come on, I'll take you on!$" + +PalletTown_ProfessorOaksLab_Text_RivalDefeat:: + .string "WHAT?\n" + .string "Unbelievable!\l" + .string "I picked the wrong POKéMON!$" + +@ Also used for early Route 22 battle +Text_RivalVictory:: + .string "{RIVAL}: Yeah!\n" + .string "Am I great or what?$" + +PalletTown_ProfessorOaksLab_Text_RivalGoToughenMyMon:: + .string "{RIVAL}: Okay! I'll make my\n" + .string "POKéMON battle to toughen it up!\p" + .string "{PLAYER}! Gramps!\n" + .string "Smell you later!$" + +PalletTown_ProfessorOaksLab_Text_RivalGramps:: + .string "{RIVAL}: Gramps!$" + +PalletTown_ProfessorOaksLab_Text_RivalWhatDidYouCallMeFor:: + .string "{RIVAL}: I almost forgot!\n" + .string "What did you call me for?$" + +PalletTown_ProfessorOaksLab_Text_RivalLeaveItToMeGramps:: + .string "{RIVAL}: All right, Gramps!\n" + .string "Leave it all to me!$" + +PalletTown_ProfessorOaksLab_Text_RivalTellSisNotToGiveYouMap:: + .string "{PLAYER}, I hate to say it, but you\n" + .string "won't be necessary for this.\p" + .string "I know! I'll borrow a TOWN MAP\n" + .string "from my sis!\p" + .string "I'll tell her not to lend you one,\n" + .string "{PLAYER}! Hahaha!\p" + .string "Don't bother coming around to\n" + .string "my place after this!$" + +PalletTown_ProfessorOaksLab_Text_OakThreeMonsChooseOne:: + .string "OAK: {RIVAL}?\n" + .string "Let me think…\p" + .string "Oh, that's right, I told you to\n" + .string "come! Just wait!\p" + .string "Here, {PLAYER}.\p" + .string "There are three POKéMON here.\p" + .string "Haha!\p" + .string "The POKéMON are held inside\n" + .string "these POKé BALLS.\p" + .string "When I was young, I was a serious\n" + .string "POKéMON TRAINER.\p" + .string "But now, in my old age, I have\n" + .string "only these three left.\p" + .string "You can have one.\n" + .string "Go on, choose!$" + +PalletTown_ProfessorOaksLab_Text_OakBePatientRival:: + .string "OAK: Be patient, {RIVAL}.\n" + .string "You can have one, too!$" + +PalletTown_ProfessorOaksLab_Text_OakWhichOneWillYouChoose:: + .string "OAK: Now, {PLAYER}.\p" + .string "Inside those three POKé BALLS are\n" + .string "POKéMON.\p" + .string "Which one will you choose for\n" + .string "yourself?$" + +PalletTown_ProfessorOaksLab_Text_OakHeyDontGoAwayYet:: + .string "OAK: Hey!\n" + .string "Don't go away yet!$" + +PalletTown_ProfessorOaksLab_Text_OakChoosingCharmander:: + .string "Ah! CHARMANDER is your choice.\n" + .string "You should raise it patiently.\p" + .string "So, {PLAYER}, you're claiming the\n" + .string "FIRE POKéMON CHARMANDER?$" + +PalletTown_ProfessorOaksLab_Text_OakChoosingSquirtle:: + .string "Hm! SQUIRTLE is your choice.\n" + .string "It's one worth raising.\p" + .string "So, {PLAYER}, you've decided on the\n" + .string "WATER POKéMON SQUIRTLE?$" + +PalletTown_ProfessorOaksLab_Text_OakChoosingBulbasaur:: + .string "I see! BULBASAUR is your choice.\n" + .string "It's very easy to raise.\p" + .string "So, {PLAYER}, you want to go with\n" + .string "the GRASS POKéMON BULBASAUR?$" + +PalletTown_ProfessorOaksLab_Text_OakThisMonIsEnergetic:: + .string "This POKéMON is really quite\n" + .string "energetic!$" + +PalletTown_ProfessorOaksLab_Text_ReceivedMonFromOak:: + .string "{PLAYER} received the {STR_VAR_1}\n" + .string "from PROF. OAK!$" + +PalletTown_ProfessorOaksLab_Text_OakCanReachNextTownWithMon:: + .string "OAK: If a wild POKéMON appears,\n" + .string "your POKéMON can battle it.\p" + .string "With it at your side, you should be\n" + .string "able to reach the next town.$" + +PalletTown_ProfessorOaksLab_Text_OakBattleMonForItToGrow:: + .string "OAK: {PLAYER}, raise your young\n" + .string "POKéMON by making it battle.\p" + .string "It has to battle for it to grow.$" + +PalletTown_ProfessorOaksLab_Text_OakHaveSomethingForMe:: + .string "OAK: Oh, {PLAYER}!\n" + .string "How is my old POKéMON?\p" + .string "Well, it seems to be growing more\n" + .string "attached to you.\p" + .string "You must be talented as a POKéMON\n" + .string "TRAINER.\p" + .string "What's that?\n" + .string "You have something for me?$" + +PalletTown_ProfessorOaksLab_Text_DeliveredOaksParcel:: + .string "{PLAYER} delivered OAK'S PARCEL.$" + +PalletTown_ProfessorOaksLab_Text_OakCustomBallIOrdered:: + .string "Ah! \n" + .string "It's the custom POKé BALL!\p" + .string "I had it on order.\n" + .string "Thank you!$" + +PalletTown_ProfessorOaksLab_Text_OakHaveRequestForYouTwo:: + .string "OAK: Oh, right!\n" + .string "I have a request for you two.$" + +PalletTown_ProfessorOaksLab_Text_OakPokedexOnDesk:: + .string "On the desk there is my invention,\n" + .string "the POKéDEX!\p" + .string "It automatically records data on\n" + .string "POKéMON you've seen or caught.\p" + .string "It's a high-tech encyclopedia!$" + +PalletTown_ProfessorOaksLab_Text_OakTakeTheseWithYou:: + .string "OAK: {PLAYER} and {RIVAL}.\n" + .string "Take these with you.$" + +PalletTown_ProfessorOaksLab_Text_ReceivedPokedexFromOak:: + .string "{PLAYER} received the POKéDEX\n" + .string "from PROF. OAK.$" + +PalletTown_ProfessorOaksLab_Text_OakCatchMonsForDataTakeThese:: + .string "OAK: You can't get detailed data\n" + .string "on POKéMON by just seeing them.\p" + .string "You must catch them to obtain\n" + .string "complete data.\p" + .string "So, here are some tools for\n" + .string "catching wild POKéMON.$" + +PalletTown_ProfessorOaksLab_Text_ReceivedFivePokeBalls:: + .string "{PLAYER} received five POKé BALLS.$" + +PalletTown_ProfessorOaksLab_Text_OakExplainCatching:: + .string "When a wild POKéMON appears,\n" + .string "it's fair game.\p" + .string "Just throw a POKé BALL at it and\n" + .string "try to catch it!\p" + .string "This won't always work, however.\p" + .string "A healthy POKéMON can escape.\n" + .string "You have to be lucky!$" + +PalletTown_ProfessorOaksLab_Text_OakCompleteMonGuideWasMyDream:: + .string "To make a complete guide on all\n" + .string "the POKéMON in the world…\p" + .string "That was my dream!\p" + .string "But, I'm too old.\n" + .string "I can't get the job done.\p" + .string "So, I want you two to fulfill my\n" + .string "dream for me.\p" + .string "Get moving, you two.\p" + .string "This is a great undertaking in\n" + .string "POKéMON history!$" + +PalletTown_ProfessorOaksLab_Text_OakMonsAroundWorldWait:: + .string "POKéMON around the world wait for\n" + .string "you, {PLAYER}!$" + +PalletTown_ProfessorOaksLab_Text_OakAddedNothingToPokedex:: + .string "Ah, {PLAYER}!\n" + .string "How is your POKéDEX shaping up?\p" + .string "{RIVAL} has already caught some\n" + .string "POKéMON and added to the data.\p" + .string "So, {PLAYER}, let's have a look at\n" + .string "your POKéDEX.\p" + .string "…What's the matter?\n" + .string "You've added no new data at all.\p" + .string "I'll give you these, so do try a\n" + .string "little harder.$" + +PalletTown_ProfessorOaksLab_Text_OakComeSeeMeSometime:: + .string "OAK: Come see me sometime.\p" + .string "After all, I want to know how your\n" + .string "POKéDEX is coming along.$" + +PalletTown_ProfessorOaksLab_Text_BlankEncyclopedia:: + .string "It's like an encyclopedia, but the\n" + .string "pages are blank.$" + +PalletTown_ProfessorOaksLab_Text_ThoseArePokeBalls:: + .string "Those are POKé BALLS.\n" + .string "They contain POKéMON!$" + +PalletTown_ProfessorOaksLab_Text_OaksLastMon:: + .string "That's PROF. OAK's last POKéMON.$" + +PalletTown_ProfessorOaksLab_Text_PressStartToOpenMenu:: + .string "Press START to open the MENU!$" + +PalletTown_ProfessorOaksLab_Text_SaveOptionInMenu:: + .string "The SAVE option is on the MENU.\n" + .string "Use it regularly.$" + +PalletTown_ProfessorOaksLab_Text_AllMonTypesHaveStrongAndWeakPoints:: + .string "All POKéMON types have strong and\n" + .string "weak points against others.$" + +PalletTown_ProfessorOaksLab_Text_EmailMessage:: + .string "There's an e-mail message here.\p" + .string "…\p" + .string "Finally!\n" + .string "The ultimate TRAINERS of the\l" + .string "POKéMON LEAGUE are ready to\l" + .string "take on all comers!\p" + .string "Bring your best POKéMON and see\n" + .string "how you rate as a TRAINER!\p" + .string "POKéMON LEAGUE HQ\n" + .string "INDIGO PLATEAU\p" + .string "PROF. OAK, please visit us!\n" + .string "…$" + +PalletTown_ProfessorOaksLab_Text_StudyAsOaksAide:: + .string "I study POKéMON as PROF. OAK's\n" + .string "AIDE.$" + +PalletTown_ProfessorOaksLab_Text_DaisyWillGroomMons:: + .string "Hi, {PLAYER}. I bet you've become\n" + .string "good friends with your POKéMON.\p" + .string "By the way, did you know about\n" + .string "DAISY?\p" + .string "If you show DAISY your POKéMON,\n" + .string "she can tell how much it likes you.\p" + .string "Occasionally, she will even groom\n" + .string "a POKéMON for you.\p" + .string "This is a secret, so please don't\n" + .string "tell anyone.$" + +PalletTown_ProfessorOaksLab_Text_OakIsGoingToHaveRadioShow:: + .string "PROF. OAK is going to have his own\n" + .string "radio show soon.\p" + .string "The program will be called PROF.\n" + .string "OAK's POKéMON SEMINAR.$" + +PalletTown_ProfessorOaksLab_Text_OakIsAuthorityOnMons:: + .string "PROF. OAK may not look like much,\n" + .string "but he's the authority on POKéMON.\p" + .string "Many POKéMON TRAINERS hold him in\n" + .string "high regard.$" + +PalletTown_ProfessorOaksLab_Text_OakFavorToAskYouPlayer:: + .string "Ah, now this is excellent!\p" + .string "{PLAYER}, I have another important\n" + .string "favor to ask of you.\p" + .string "I need you to listen closely.$" + +PalletTown_ProfessorOaksLab_Text_OakSightingsOfRareMons:: + .string "Recently, there have been sightings\n" + .string "of many rare POKéMON species.\p" + .string "I'm talking about POKéMON that\n" + .string "have never been seen in KANTO.\p" + .string "I would love to go see things for\n" + .string "myself, but I'm much too old.\p" + .string "Since I can't do it, {PLAYER}, I'd\n" + .string "like you to go in my place.$" + +PalletTown_ProfessorOaksLab_Text_RivalJustLetMeHandleEverything:: + .string "{RIVAL}: Hey, I heard that!\p" + .string "Gramps, what's with favoring\n" + .string "{PLAYER} over me all the time?\p" + .string "I went and collected more POKéMON,\n" + .string "and faster, too.\p" + .string "You should just let me handle\n" + .string "everything.$" + +PalletTown_ProfessorOaksLab_Text_OakNeedYourHelpTooNeedToSeePokedexes:: + .string "OAK: I know, I know.\n" + .string "Of course I need your help, too.\p" + .string "Now, I need to see both your\n" + .string "POKéDEXES.$" + +PalletTown_ProfessorOaksLab_Text_OakTookBothPokedexUnits:: + .string "PROF. OAK took both POKéDEX\n" + .string "units.$" + +PalletTown_ProfessorOaksLab_Text_OakNowTheseUnitsCanRecordMoreData:: + .string "… … … … … …\p" + .string "… … … … … …\p" + .string "…And that's done!\p" + .string "Now these units can record data on\n" + .string "a lot more POKéMON.$" + +PalletTown_ProfessorOaksLab_Text_PlayersPokedexWasUpgraded:: + .string "{PLAYER}'s POKéDEX was upgraded!$" + +PalletTown_ProfessorOaksLab_Text_OakMustReallyWorkToFillPokedex:: + .string "Now, {PLAYER} and {RIVAL}!\p" + .string "This time, you really must work\n" + .string "towards filling your POKéDEXES.\p" + .string "I urge you to make them the best\n" + .string "and the most complete of all time!\p" + .string "Truly, this is a monumentally great\n" + .string "undertaking in POKéMON history!$" + +PalletTown_ProfessorOaksLab_Text_RivalIllCompleteThePokedex:: + .string "{RIVAL}: Gramps, calm down.\n" + .string "Don't get so excited.\p" + .string "I'll get the POKéDEX completed,\n" + .string "don't you worry about a thing.\p" + .string "I think I'll try looking around\n" + .string "ONE ISLAND first…\p" + .string "Anyways, I'm outta here!$" + diff --git a/data/maps/PalletTown_RivalsHouse/scripts.inc b/data/maps/PalletTown_RivalsHouse/scripts.inc new file mode 100644 index 000000000000..1af3df5e96dc --- /dev/null +++ b/data/maps/PalletTown_RivalsHouse/scripts.inc @@ -0,0 +1,293 @@ +.equ RECEIVED_TOWN_MAP, VAR_TEMP_1 + +PalletTown_RivalsHouse_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, PalletTown_RivalsHouse_OnTransition + .byte 0 + +PalletTown_RivalsHouse_OnTransition:: + call_if_lt VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 2, PalletTown_RivalsHouse_EventScript_MoveDaisyToTable + call_if_ge VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 2, PalletTown_RivalsHouse_EventScript_AlreadyReceivedTownMap + end + +PalletTown_RivalsHouse_EventScript_MoveDaisyToTable:: + setobjectmovementtype LOCALID_DAISY, MOVEMENT_TYPE_FACE_RIGHT + setobjectxyperm LOCALID_DAISY, 5, 4 + return + +PalletTown_RivalsHouse_EventScript_AlreadyReceivedTownMap:: + setvar RECEIVED_TOWN_MAP, TRUE + return + +PalletTown_RivalsHouse_EventScript_Daisy:: + lock + faceplayer + famechecker FAMECHECKER_DAISY, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + goto_if_set FLAG_SYS_GAME_CLEAR, PalletTown_RivalsHouse_EventScript_GroomMon + goto_if_eq RECEIVED_TOWN_MAP, TRUE, PalletTown_RivalsHouse_EventScript_PleaseGiveMonsRest + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 2, PalletTown_RivalsHouse_EventScript_ExplainTownMap + goto_if_eq VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 1, PalletTown_RivalsHouse_EventScript_GiveTownMap + goto_if_ge VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 1, PalletTown_RivalsHouse_EventScript_HeardBattledRival + msgbox PalletTown_RivalsHouse_Text_HiBrothersAtLab + closemessage + applymovement LOCALID_DAISY, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +PalletTown_RivalsHouse_EventScript_HeardBattledRival:: + msgbox PalletTown_RivalsHouse_Text_HeardYouBattledRival + release + end + +PalletTown_RivalsHouse_EventScript_GroomMon:: + goto_if_lt VAR_MASSAGE_COOLDOWN_STEP_COUNTER, 500, PalletTown_RivalsHouse_EventScript_RateMonFriendship + msgbox PalletTown_RivalsHouse_Text_LikeMeToGroomMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, PalletTown_RivalsHouse_EventScript_DeclineGrooming + msgbox PalletTown_RivalsHouse_Text_GroomWhichOne + special ChoosePartyMon + waitstate + lock + faceplayer + goto_if_ge VAR_0x8004, PARTY_SIZE, PalletTown_RivalsHouse_EventScript_DeclineGrooming + specialvar VAR_RESULT, ScriptGetPartyMonSpecies + goto_if_eq VAR_RESULT, SPECIES_EGG, PalletTown_RivalsHouse_EventScript_CantGroomEgg + msgbox PalletTown_RivalsHouse_Text_LookingNiceInNoTime + closemessage + fadescreen FADE_TO_BLACK + playfanfare MUS_HEAL + waitfanfare + special DaisyMassageServices + fadescreen FADE_FROM_BLACK + special BufferMonNickname + msgbox PalletTown_RivalsHouse_Text_ThereYouGoAllDone + release + end + +PalletTown_RivalsHouse_EventScript_CantGroomEgg:: + msgbox PalletTown_RivalsHouse_Text_CantGroomAnEgg + release + end + +PalletTown_RivalsHouse_EventScript_DeclineGrooming:: + msgbox PalletTown_RivalsHouse_Text_DontNeedAnyGrooming + release + end + +PalletTown_RivalsHouse_EventScript_RateMonFriendship:: + msgbox PalletTown_RivalsHouse_Text_MayISeeFirstMon + specialvar VAR_RESULT, GetLeadMonFriendship + switch VAR_RESULT + case 0, PalletTown_RivalsHouse_EventScript_MonFriendshipLowest + case 1, PalletTown_RivalsHouse_EventScript_MonFriendshipLower + case 2, PalletTown_RivalsHouse_EventScript_MonFriendshipLow + case 3, PalletTown_RivalsHouse_EventScript_MonFriendshipMid + case 4, PalletTown_RivalsHouse_EventScript_MonFriendshipHigh + case 5, PalletTown_RivalsHouse_EventScript_MonFriendshipHigher + case 6, PalletTown_RivalsHouse_EventScript_MonFriendshipHighest + end + +PalletTown_RivalsHouse_EventScript_MonFriendshipLowest:: + msgbox PalletTown_RivalsHouse_Text_WhyWouldMonHateYouSoMuch + release + end + +PalletTown_RivalsHouse_EventScript_MonFriendshipLower:: + msgbox PalletTown_RivalsHouse_Text_DontLikeWayItGlaresAtYou + release + end + +PalletTown_RivalsHouse_EventScript_MonFriendshipLow:: + msgbox PalletTown_RivalsHouse_Text_NotFamiliarWithYouYet + release + end + +PalletTown_RivalsHouse_EventScript_MonFriendshipMid:: + msgbox PalletTown_RivalsHouse_Text_ItsWarmingUpToYou + release + end + +PalletTown_RivalsHouse_EventScript_MonFriendshipHigh:: + msgbox PalletTown_RivalsHouse_Text_ItsQuiteFriendly + release + end + +PalletTown_RivalsHouse_EventScript_MonFriendshipHigher:: + msgbox PalletTown_RivalsHouse_Text_ItLooksVeryHappy + release + end + +PalletTown_RivalsHouse_EventScript_MonFriendshipHighest:: + msgbox PalletTown_RivalsHouse_Text_CouldntLoveYouMore + release + end + +PalletTown_RivalsHouse_EventScript_PleaseGiveMonsRest:: + msgbox PalletTown_RivalsHouse_Text_PleaseGiveMonsRest + release + end + +PalletTown_RivalsHouse_EventScript_GiveTownMap:: + msgbox PalletTown_RivalsHouse_Text_ErrandForGrandpaThisWillHelp + closemessage + checkitemspace ITEM_TOWN_MAP + goto_if_eq VAR_RESULT, FALSE, PalletTown_RivalsHouse_EventScript_NoRoomForTownMap + applymovement LOCALID_DAISY, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + removeobject LOCALID_TOWN_MAP + setvar VAR_MAP_SCENE_PALLET_TOWN_RIVALS_HOUSE, 2 + delay 15 + applymovement LOCALID_DAISY, Common_Movement_FacePlayer + waitmovement 0 + delay 12 + giveitem_msg PalletTown_RivalsHouse_Text_ReceivedTownMapFromDaisy, ITEM_TOWN_MAP, 1, MUS_RG_OBTAIN_KEY_ITEM + release + end + +PalletTown_RivalsHouse_EventScript_NoRoomForTownMap:: + msgbox PalletTown_RivalsHouse_Text_DontHaveSpaceForThis + release + end + +PalletTown_RivalsHouse_EventScript_ExplainTownMap:: + msgbox PalletTown_RivalsHouse_Text_ExplainTownMap + release + end + +PalletTown_RivalsHouse_EventScript_TownMap:: + msgbox PalletTown_RivalsHouse_Text_ItsBigMapOfKanto, MSGBOX_NPC + end + +PalletTown_RivalsHouse_EventScript_Bookshelf:: + msgbox PalletTown_RivalsHouse_Text_ShelvesCrammedFullOfBooks, MSGBOX_SIGN + end + +PalletTown_RivalsHouse_EventScript_Picture:: + msgbox PalletTown_RivalsHouse_Text_LovelyAndSweetClefairy, MSGBOX_SIGN + end + +PalletTown_RivalsHouse_Text_HiBrothersAtLab:: + .string "DAISY: Hi, {PLAYER}!\p" + .string "My brother, {RIVAL}, is out at\n" + .string "Grandpa's LAB.$" + +PalletTown_RivalsHouse_Text_HeardYouBattledRival:: + .string "DAISY: {PLAYER}, I heard you had\n" + .string "a battle against {RIVAL}.\p" + .string "I wish I'd seen that!$" + +PalletTown_RivalsHouse_Text_ErrandForGrandpaThisWillHelp:: + .string "Grandpa asked you to run an\n" + .string "errand?\p" + .string "Gee, that's lazy of him.\n" + .string "Here, this will help you.$" + +PalletTown_RivalsHouse_Text_ReceivedTownMapFromDaisy:: + .string "{PLAYER} received a TOWN MAP\n" + .string "from DAISY.$" + +PalletTown_RivalsHouse_Text_DontHaveSpaceForThis:: + .string "You don't have space for this in\n" + .string "your BAG.$" + +PalletTown_RivalsHouse_Text_ExplainTownMap:: + .string "You can use the TOWN MAP to find\n" + .string "out where you are, or check the\l" + .string "names of places.$" + +PalletTown_RivalsHouse_Text_PleaseGiveMonsRest:: + .string "DAISY: Just like people, POKéMON\n" + .string "are living things.\p" + .string "When they get tired, please give\n" + .string "them a rest.$" + +PalletTown_RivalsHouse_Text_ItsBigMapOfKanto:: + .string "It's a big map of the KANTO region.\n" + .string "Now this would be useful!$" + +PalletTown_RivalsHouse_Text_ShelvesCrammedFullOfBooks:: + .string "The shelves are crammed full of\n" + .string "books on POKéMON.$" + +PalletTown_RivalsHouse_Text_LikeMeToGroomMon:: + .string "DAISY: Hi, {PLAYER}!\n" + .string "Good timing.\p" + .string "I'm about to have some tea.\n" + .string "Would you like to join me?\p" + .string "Oh, but look.\n" + .string "Your POKéMON are a little dirty.\p" + .string "Would you like me to groom one?$" + +PalletTown_RivalsHouse_Text_DontNeedAnyGrooming:: + .string "You don't need any grooming done?\n" + .string "Okay, we'll just have tea.$" + +PalletTown_RivalsHouse_Text_GroomWhichOne:: + .string "Which one should I groom?$" + +PalletTown_RivalsHouse_Text_LookingNiceInNoTime:: + .string "DAISY: Okay, I'll get it looking\n" + .string "nice in no time.$" + +PalletTown_RivalsHouse_Text_ThereYouGoAllDone:: +#ifdef BUGFIX @ The localizers missed what should be a textcolor change in the localizations. + .string "{COLOR DARK_GRAY}{STR_VAR_1} looks dreamily content…\p" + .string "{COLOR RED}DAISY: There you go! All done.\n" +#else @ In the JP games, gender-based text used a different font instead of different colors. + .string "{FONT_NORMAL}{STR_VAR_1} looks dreamily content…\p" + .string "{FONT_FEMALE}DAISY: There you go! All done.\n" +#endif + .string "See? Doesn't it look nice?\p" + .string "Giggle…\n" + .string "It's such a cute POKéMON.$" + +PalletTown_RivalsHouse_Text_CantGroomAnEgg:: + .string "Oh, sorry. I honestly can't\n" + .string "groom an EGG.$" + +PalletTown_RivalsHouse_Text_MayISeeFirstMon:: + .string "DAISY: Your POKéMON grow to love\n" + .string "you if you raise them with love.\p" + .string "For example, {PLAYER}, may I see\n" + .string "your first POKéMON?$" + +PalletTown_RivalsHouse_Text_CouldntLoveYouMore:: + .string "It couldn't possibly love you\n" + .string "any more than it does now.\p" + .string "Your POKéMON is happy beyond\n" + .string "words.$" + +PalletTown_RivalsHouse_Text_ItLooksVeryHappy:: + .string "It looks very happy.\p" + .string "I wish {RIVAL} could see this and\n" + .string "learn something from it.$" + +PalletTown_RivalsHouse_Text_ItsQuiteFriendly:: + .string "It's quite friendly with you.\n" + .string "Keep being good to it!$" + +PalletTown_RivalsHouse_Text_ItsWarmingUpToYou:: + .string "It's warming up to you.\n" + .string "Trust must be growing between you.$" + +PalletTown_RivalsHouse_Text_NotFamiliarWithYouYet:: + .string "It's not quite familiar with you\n" + .string "yet.\p" + .string "POKéMON are all quite wary when\n" + .string "you first get them.$" + +PalletTown_RivalsHouse_Text_DontLikeWayItGlaresAtYou:: + .string "{PLAYER}, I don't like the way it\n" + .string "glares at you.\p" + .string "Could you try being a little nicer\n" + .string "to it?$" + +PalletTown_RivalsHouse_Text_WhyWouldMonHateYouSoMuch:: + .string "…Um, it's not easy for me to say\n" + .string "this, but…\p" + .string "Is there some reason why your\n" + .string "POKéMON would hate you so much?$" + +PalletTown_RivalsHouse_Text_LovelyAndSweetClefairy:: + .string "“The lovely and sweet\n" + .string "CLEFAIRY”$" + diff --git a/data/maps/PewterCity/scripts.inc b/data/maps/PewterCity/scripts.inc new file mode 100644 index 000000000000..be016b4cc4c5 --- /dev/null +++ b/data/maps/PewterCity/scripts.inc @@ -0,0 +1,976 @@ +PewterCity_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, PewterCity_OnTransition + .byte 0 + +PewterCity_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_PEWTER_CITY + setvar VAR_MAP_SCENE_PEWTER_CITY_MUSEUM_1F, 0 + end + +@ Impossible to speak to this NPC from a facing dir != DIR_EAST normally, so they arent checked +@ Additionally, no movement script exists for facing DIR_SOUTH, which would necessitate walking out of bounds +PewterCity_EventScript_GymGuide:: + lock + faceplayer + msgbox PewterCity_Text_BrocksLookingForChallengersFollowMe + closemessage + playbgm MUS_FOLLOW_ME, 0 + call_if_eq VAR_FACING, DIR_EAST, PewterCity_EventScript_WalkToGymEast + msgbox PewterCity_Text_GoTakeOnBrock + closemessage + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GymGuideExit + waitmovement 0 + fadedefaultbgm + removeobject LOCALID_PEWTER_GYM_GUIDE + clearflag FLAG_HIDE_PEWTER_CITY_GYM_GUIDE + release + end + +PewterCity_EventScript_WalkToGymEast:: + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWaitForGuideEast + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideMoveToLeadEast + waitmovement 0 + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToGymEast + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideWalkToGymEast + waitmovement 0 + return + +@ Unused +PewterCity_EventScript_WalkToGymWest:: + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWaitForGuideWest + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideMoveToLeadWest + waitmovement 0 + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToGymWest + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideWalkToGymWest + waitmovement 0 + return + +@ Unused +PewterCity_EventScript_WalkToGymNorth:: + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWaitForGuideNorth + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideMoveToLeadNorth + waitmovement 0 + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToGymNorth + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideWalkToGymNorth + waitmovement 0 + return + +.macro walk_to_gym + walk_left + walk_left + walk_left + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right +.endm + +.macro walk_to_gym_alt + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_right +.endm + +PewterCity_Movement_PlayerWaitForGuideEast:: + delay_16 + delay_16 + delay_4 + walk_in_place_faster_down + step_end + +PewterCity_Movement_PlayerWalkToGymEast:: + walk_down + walk_to_gym + step_end + +PewterCity_Movement_PlayerWaitForGuideWest:: + delay_16 + step_end + +PewterCity_Movement_PlayerWalkToGymWest:: + walk_left + walk_left + walk_left + walk_left + walk_left + walk_to_gym_alt + step_end + +PewterCity_Movement_PlayerWaitForGuideNorth:: + delay_16 + step_end + +PewterCity_Movement_PlayerWalkToGymNorth:: + walk_up + walk_left + walk_left + walk_left + walk_left + walk_to_gym_alt + step_end + +PewterCity_Movement_GuideMoveToLeadEast:: + walk_down + walk_left + walk_in_place_faster_up + walk_in_place_up + step_end + +PewterCity_Movement_GuideWalkToGymEast:: + walk_to_gym + walk_right + walk_in_place_faster_left + step_end + +PewterCity_Movement_GuideMoveToLeadWest:: + walk_in_place_right + step_end + +PewterCity_Movement_GuideWalkToGymWest:: + walk_left + walk_left + walk_left + walk_left + walk_to_gym_alt + walk_right + walk_in_place_faster_left + step_end + +PewterCity_Movement_GuideMoveToLeadNorth:: + walk_in_place_down + step_end + +PewterCity_Movement_GuideWalkToGymNorth:: + walk_left + walk_left + walk_left + walk_left + walk_to_gym_alt + walk_right + walk_in_place_faster_left + step_end + +PewterCity_Movement_GymGuideExit:: + walk_down + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + step_end + +PewterCity_EventScript_GymGuideTriggerTop:: + lockall + setvar VAR_TEMP_1, 0 + goto PewterCity_EventScript_GymGuideTrigger + end + +PewterCity_EventScript_GymGuideTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + goto PewterCity_EventScript_GymGuideTrigger + end + +PewterCity_EventScript_GymGuideTriggerBottom:: + lockall + setvar VAR_TEMP_1, 2 + goto PewterCity_EventScript_GymGuideTrigger + end + +@ This trigger is inaccessible and its corresponding movement script isnt linked +PewterCity_EventScript_GymGuideTriggerRight:: + lockall + setvar VAR_TEMP_1, 3 + goto PewterCity_EventScript_GymGuideTrigger + end + +PewterCity_EventScript_GymGuideTrigger:: + textcolor NPC_TEXT_COLOR_MALE + msgbox PewterCity_Text_BrocksLookingForChallengersFollowMe + closemessage + playbgm MUS_FOLLOW_ME, 0 + call_if_eq VAR_TEMP_1, 0, PewterCity_EventScript_WalkToGymTop + call_if_eq VAR_TEMP_1, 1, PewterCity_EventScript_WalkToGymMid + call_if_eq VAR_TEMP_1, 2, PewterCity_EventScript_WalkToGymBottom + msgbox PewterCity_Text_GoTakeOnBrock + closemessage + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GymGuideExit + waitmovement 0 + fadedefaultbgm + removeobject LOCALID_PEWTER_GYM_GUIDE + clearflag FLAG_HIDE_PEWTER_CITY_GYM_GUIDE + releaseall + end + +PewterCity_EventScript_WalkToGymTop:: + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideMoveToLeadTop + waitmovement 0 + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToGymTop + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideWalkToGymTop + waitmovement 0 + return + +PewterCity_EventScript_WalkToGymMid:: + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideMoveToLeadMid + waitmovement 0 + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToGymMid + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideWalkToGymMid + waitmovement 0 + return + +PewterCity_EventScript_WalkToGymBottom:: + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideMoveToLeadBottom + waitmovement 0 + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToGymBottom + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideWalkToGymBottom + waitmovement 0 + return + +@ Unused +PewterCity_EventScript_WalkToGymRight:: + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideApproachPlayerRight + waitmovement 0 + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToGymRight + applymovement LOCALID_PEWTER_GYM_GUIDE, PewterCity_Movement_GuideWalkToGymRight + waitmovement 0 + return + +PewterCity_Movement_PlayerWalkToGymTop:: + walk_left + walk_to_gym + step_end + +PewterCity_Movement_PlayerWalkToGymMid:: + walk_up + walk_left + walk_to_gym + step_end + +PewterCity_Movement_PlayerWalkToGymBottom:: + walk_up + walk_up + walk_left + walk_to_gym + step_end + +PewterCity_Movement_PlayerWalkToGymRight:: + walk_left + walk_left + walk_left + walk_left + walk_up + walk_left + walk_left + walk_left + walk_up + walk_up + walk_to_gym_alt + step_end + +PewterCity_Movement_GuideMoveToLeadTop:: + walk_left + walk_down + walk_in_place_faster_right + walk_in_place_right + step_end + +PewterCity_Movement_GuideMoveToLeadMid:: + walk_down + walk_in_place_down + step_end + +PewterCity_Movement_GuideMoveToLeadBottom:: + walk_down + walk_down + walk_in_place_down + step_end + +PewterCity_Movement_GuideApproachPlayerRight:: + walk_down + walk_down + walk_right + walk_down + walk_right + walk_in_place_right + step_end + +PewterCity_Movement_GuideWalkToGymTop:: + walk_to_gym + walk_right + walk_in_place_faster_left + step_end + +PewterCity_Movement_GuideWalkToGymMid:: + walk_left + walk_to_gym + walk_right + walk_in_place_faster_left + step_end + +PewterCity_Movement_GuideWalkToGymBottom:: + walk_up + walk_left + walk_to_gym + walk_right + walk_in_place_faster_left + step_end + +PewterCity_Movement_GuideWalkToGymRight:: + walk_left + walk_left + walk_left + walk_up + walk_left + walk_left + walk_left + walk_up + walk_up + walk_to_gym_alt + walk_right + walk_in_place_faster_left + step_end + +PewterCity_EventScript_Lass:: + msgbox PewterCity_Text_ClefairyCameFromMoon, MSGBOX_NPC + end + +PewterCity_EventScript_MuseumGuide:: + lock + faceplayer + msgbox PewterCity_Text_DidYouCheckOutMuseum, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, PewterCity_EventScript_CheckedOutMuseum + msgbox PewterCity_Text_ReallyYouHaveToGo + closemessage + delay 10 + playbgm MUS_FOLLOW_ME, 0 + call_if_eq VAR_FACING, DIR_NORTH, PewterCity_EventScript_LeadToMuseumNorth + call_if_eq VAR_FACING, DIR_SOUTH, PewterCity_EventScript_LeadToMuseumSouth + call_if_eq VAR_FACING, DIR_WEST, PewterCity_EventScript_LeadToMuseumWest + call_if_eq VAR_FACING, DIR_EAST, PewterCity_EventScript_LeadToMuseumEast + msgbox PewterCity_Text_ThisIsTheMuseum + closemessage + delay 10 + applymovement LOCALID_PEWTER_MUSEUM_GUIDE, PewterCity_Movement_MuseumGuideExit + waitmovement 0 + fadedefaultbgm + removeobject LOCALID_PEWTER_MUSEUM_GUIDE + clearflag FLAG_HIDE_PEWTER_MUSEUM_GUIDE + release + end + +PewterCity_EventScript_LeadToMuseumNorth:: + applymovement LOCALID_PEWTER_MUSEUM_GUIDE, PewterCity_Movement_GuideWalkToMuseumNorth + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToMuseumNorth + waitmovement 0 + return + +PewterCity_EventScript_LeadToMuseumSouth:: + applymovement LOCALID_PEWTER_MUSEUM_GUIDE, PewterCity_Movement_GuideWalkToMuseumSouth + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToMuseumSouth + waitmovement 0 + return + +PewterCity_EventScript_LeadToMuseumWest:: + applymovement LOCALID_PEWTER_MUSEUM_GUIDE, PewterCity_Movement_GuideWalkToMuseumWest + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToMuseumWest + waitmovement 0 + return + +PewterCity_EventScript_LeadToMuseumEast:: + applymovement LOCALID_PEWTER_MUSEUM_GUIDE, PewterCity_Movement_GuideWalkToMuseumEast + applymovement LOCALID_PLAYER, PewterCity_Movement_PlayerWalkToMuseumEast + waitmovement 0 + return + +PewterCity_EventScript_CheckedOutMuseum:: + msgbox PewterCity_Text_WerentThoseFossilsAmazing + release + end + +.macro walk_to_museum + walk_up + walk_up + walk_up + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_up + walk_up + walk_up + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left +.endm + +.macro walk_to_museum_south + walk_up + walk_up + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_up + walk_up + walk_up + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left +.endm + +PewterCity_Movement_PlayerWalkToMuseumNorth:: + walk_up + walk_to_museum + delay_8 + walk_in_place_faster_up + step_end + +PewterCity_Movement_GuideWalkToMuseumNorth:: + walk_to_museum + walk_left + walk_in_place_faster_up + step_end + +PewterCity_Movement_PlayerWalkToMuseumSouth:: + delay_16 + delay_16 + walk_left + walk_to_museum_south + delay_8 + walk_in_place_faster_up + step_end + +PewterCity_Movement_GuideWalkToMuseumSouth:: + walk_left + walk_up + walk_to_museum_south + walk_left + walk_in_place_faster_up + step_end + +PewterCity_Movement_PlayerWalkToMuseumWest:: + walk_left + walk_to_museum + delay_8 + walk_in_place_faster_up + step_end + +PewterCity_Movement_GuideWalkToMuseumWest:: + walk_to_museum + walk_left + walk_in_place_faster_up + step_end + +PewterCity_Movement_PlayerWalkToMuseumEast:: + walk_right + walk_to_museum + delay_8 + walk_in_place_faster_up + step_end + +PewterCity_Movement_GuideWalkToMuseumEast:: + walk_to_museum + walk_left + walk_in_place_faster_up + step_end + +PewterCity_Movement_MuseumGuideExit:: + walk_down + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_down + walk_down + walk_down + walk_right + walk_right + walk_right + step_end + +PewterCity_EventScript_FatMan:: + lock + faceplayer + famechecker FAMECHECKER_BROCK, 2 + msgbox PewterCity_Text_BrockOnlySeriousTrainerHere + release + end + +PewterCity_EventScript_BugCatcher:: + lock + faceplayer + msgbox PewterCity_Text_DoYouKnowWhatImDoing, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, PewterCity_EventScript_KnowWhatTheyreDoing + msgbox PewterCity_Text_SprayingRepelToKeepWildMonsOut + release + end + +PewterCity_EventScript_KnowWhatTheyreDoing:: + msgbox PewterCity_Text_ThatsRightItsHardWork + release + end + +PewterCity_EventScript_TrainerTips:: + msgbox PewterCity_Text_TrainerTipsEarningEXP, MSGBOX_SIGN + end + +PewterCity_EventScript_PoliceNotice:: + msgbox PewterCity_Text_CallPoliceIfInfoOnThieves, MSGBOX_SIGN + end + +PewterCity_EventScript_MuseumSign:: + msgbox PewterCity_Text_MuseumOfScience, MSGBOX_SIGN + end + +PewterCity_EventScript_GymSign:: + lockall + famechecker FAMECHECKER_BROCK, 0 + msgbox PewterCity_Text_GymSign + releaseall + end + +PewterCity_EventScript_CitySign:: + msgbox PewterCity_Text_CitySign, MSGBOX_SIGN + end + +PewterCity_EventScript_RunningShoesAide:: + lock + faceplayer + setvar VAR_TEMP_1, 0 + call PewterCity_EventScript_AideGiveRunningShoes + release + end + +PewterCity_EventScript_RunningShoesAideTriggerTop:: + lockall + setvar VAR_TEMP_1, 1 + call PewterCity_EventScript_AideGiveRunningShoes + releaseall + end + +PewterCity_EventScript_RunningShoesAideTriggerMid:: + lockall + setvar VAR_TEMP_1, 2 + call PewterCity_EventScript_AideGiveRunningShoes + releaseall + end + +PewterCity_EventScript_RunningShoesAideTriggerBottom:: + lockall + setvar VAR_TEMP_1, 3 + call PewterCity_EventScript_AideGiveRunningShoes + releaseall + end + +PewterCity_EventScript_AideGiveRunningShoes:: + textcolor NPC_TEXT_COLOR_MALE + call_if_eq VAR_TEMP_1, 1, PewterCity_EventScript_AideNoticePlayer + call_if_eq VAR_TEMP_1, 2, PewterCity_EventScript_AideNoticePlayer + call_if_eq VAR_TEMP_1, 3, PewterCity_EventScript_AideNoticePlayer + waitse + playse SE_PIN + applymovement LOCALID_PEWTER_AIDE, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_PEWTER_AIDE, Common_Movement_Delay48 + waitmovement 0 + msgbox PewterCity_Text_OhPlayer + call_if_eq VAR_TEMP_1, 0, PewterCity_EventScript_AideApproachPlayer0 + call_if_eq VAR_TEMP_1, 1, PewterCity_EventScript_AideApproachPlayer1 + call_if_eq VAR_TEMP_1, 2, PewterCity_EventScript_AideApproachPlayer2 + call_if_eq VAR_TEMP_1, 3, PewterCity_EventScript_AideApproachPlayer3 + msgbox PewterCity_Text_AskedToDeliverThis + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message PewterCity_Text_ReceivedRunningShoesFromAide + waitmessage + waitfanfare + msgbox PewterCity_Text_SwitchedShoesWithRunningShoes + special DisableMsgBoxWalkaway + signmsg + msgbox PewterCity_Text_ExplainRunningShoes + normalmsg + call EventScript_RestorePrevTextColor + msgbox PewterCity_Text_MustBeGoingBackToLab + closemessage + call_if_eq VAR_TEMP_1, 0, PewterCity_EventScript_AideExit0 + call_if_eq VAR_TEMP_1, 1, PewterCity_EventScript_AideExit1 + call_if_eq VAR_TEMP_1, 2, PewterCity_EventScript_AideExit2 + call_if_eq VAR_TEMP_1, 3, PewterCity_EventScript_AideExit3 + delay 30 + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox PewterCity_Text_RunningShoesLetterFromMom + closemessage + removeobject LOCALID_PEWTER_AIDE + setflag FLAG_SYS_B_DASH + setvar VAR_MAP_SCENE_PEWTER_CITY, 2 + return + +PewterCity_EventScript_AideNoticePlayer:: + applymovement LOCALID_PEWTER_AIDE, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +@ Aide already at player +PewterCity_EventScript_AideApproachPlayer0:: + closemessage + delay 20 + return + +PewterCity_EventScript_AideApproachPlayer1:: + closemessage + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +PewterCity_EventScript_AideApproachPlayer2:: + closemessage + applymovement LOCALID_PEWTER_AIDE, PewterCity_Movement_AideApproachPlayerMid + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +PewterCity_EventScript_AideApproachPlayer3:: + closemessage + applymovement LOCALID_PEWTER_AIDE, PewterCity_Movement_AideApproachPlayerBottom + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +PewterCity_EventScript_AideExit0:: + applymovement LOCALID_PEWTER_AIDE, PewterCity_Movement_AideExit0 + waitmovement 0 + return + +PewterCity_EventScript_AideExit1:: + applymovement LOCALID_PEWTER_AIDE, PewterCity_Movement_AideExit1 + waitmovement 0 + return + +PewterCity_EventScript_AideExit2:: + applymovement LOCALID_PEWTER_AIDE, PewterCity_Movement_AideExit2 + waitmovement 0 + return + +PewterCity_EventScript_AideExit3:: + applymovement LOCALID_PEWTER_AIDE, PewterCity_Movement_AideExit3 + waitmovement 0 + return + +PewterCity_Movement_AideApproachPlayerMid:: + delay_4 + walk_down + step_end + +PewterCity_Movement_AideApproachPlayerBottom:: + delay_4 + walk_down + walk_down + step_end + +PewterCity_Movement_AideExit0:: + walk_down + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + step_end + +PewterCity_Movement_AideExit1:: + walk_left + walk_down + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + step_end + +PewterCity_Movement_AideExit2:: + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + step_end + +PewterCity_Movement_AideExit3:: + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + step_end + +@ Unused +PewterCity_Movement_WalkInPlaceLeft:: + walk_in_place_left + step_end + +Text_DreamEaterTeach:: + .string "Yawn!\n" + .string "I must have dozed off in the sun.\p" + .string "I had this weird dream about\n" + .string "a DROWZEE eating my dream.\p" + .string "And…\n" + .string "I learned how to eat dreams…\p" + .string "Oogh, this is too spooky!\p" + .string "Let me teach it to a POKéMON so\n" + .string "I can forget about it!$" + +Text_DreamEaterDeclined:: + .string "…Snore…$" + +Text_DreamEaterWhichMon:: + .string "Which POKéMON wants to learn\n" + .string "DREAM EATER?$" + +Text_DreamEaterTaught:: + .string "…ZZZ…\n" + .string "I…can't eat…anymore…$" + +PewterCity_Text_ClefairyCameFromMoon:: + .string "CLEFAIRY came from the moon.\n" + .string "That's what the rumor is.\p" + .string "They appeared after MOON STONES\n" + .string "fell on MT. MOON.$" + +PewterCity_Text_BrockOnlySeriousTrainerHere:: + .string "There aren't many serious POKéMON\n" + .string "TRAINERS here.\p" + .string "They're all like BUG CATCHERS,\n" + .string "you know, just hobbyists.\p" + .string "But PEWTER GYM's BROCK isn't like\n" + .string "that, not one bit.$" + +PewterCity_Text_DidYouCheckOutMuseum:: + .string "Did you check out the MUSEUM?$" + +PewterCity_Text_WerentThoseFossilsAmazing:: + .string "Weren't those fossils from MT. MOON\n" + .string "amazing?$" + +PewterCity_Text_ReallyYouHaveToGo:: + .string "Really?\n" + .string "You absolutely have to go!$" + +PewterCity_Text_ThisIsTheMuseum:: + .string "This is it, the MUSEUM.\p" + .string "You have to pay to get in, but it's\n" + .string "worth it. See you around!$" + +PewterCity_Text_DoYouKnowWhatImDoing:: + .string "Psssst!\n" + .string "Do you know what I'm doing?$" + +PewterCity_Text_ThatsRightItsHardWork:: + .string "That's right!\n" + .string "It's hard work!$" + +PewterCity_Text_SprayingRepelToKeepWildMonsOut:: + .string "I'm spraying REPEL to keep wild\n" + .string "POKéMON out of my garden!$" + +PewterCity_Text_BrocksLookingForChallengersFollowMe:: + .string "You're a TRAINER, right?\p" + .string "BROCK's looking for new\n" + .string "challengers. Follow me!$" + +PewterCity_Text_GoTakeOnBrock:: + .string "If you have the right stuff,\n" + .string "go take on BROCK!$" + +PewterCity_Text_TrainerTipsEarningEXP:: + .string "TRAINER TIPS\p" + .string "All POKéMON that appear in battle,\n" + .string "however briefly, earn EXP Points.$" + +PewterCity_Text_CallPoliceIfInfoOnThieves:: + .string "NOTICE!\p" + .string "Thieves have been stealing POKéMON\n" + .string "fossils from MT. MOON.\p" + .string "Please call the PEWTER POLICE if\n" + .string "you have any information.$" + +PewterCity_Text_MuseumOfScience:: + .string "PEWTER MUSEUM OF SCIENCE$" + +PewterCity_Text_GymSign:: + .string "PEWTER CITY POKéMON GYM\n" + .string "LEADER: BROCK\l" + .string "The Rock-Solid POKéMON TRAINER!$" + +PewterCity_Text_CitySign:: + .string "PEWTER CITY\n" + .string "A Stone Gray City$" + +PewterCity_Text_OhPlayer:: + .string "Oh, {PLAYER}{KUN}!$" + +PewterCity_Text_AskedToDeliverThis:: + .string "I'm glad I caught up to you.\n" + .string "I'm PROF. OAK's AIDE.\p" + .string "I've been asked to deliver this,\n" + .string "so here you go.$" + +PewterCity_Text_ReceivedRunningShoesFromAide:: + .string "{PLAYER} received the\n" + .string "RUNNING SHOES from the AIDE.$" + +PewterCity_Text_SwitchedShoesWithRunningShoes:: + .string "{PLAYER} switched shoes with the\n" + .string "RUNNING SHOES.$" + +PewterCity_Text_ExplainRunningShoes:: + .string "Press the B Button to run.\n" + .string "But only where there's room to run!$" + +PewterCity_Text_MustBeGoingBackToLab:: + .string "Well, I must be going back to\n" + .string "the LAB.\p" + .string "Bye-bye!$" + +PewterCity_Text_RunningShoesLetterFromMom:: + .string "There's a letter attached…\p" + .string "Dear {PLAYER},\p" + .string "Here is a pair of RUNNING SHOES\n" + .string "for my beloved challenger.\p" + .string "Remember, I'll always cheer for\n" + .string "you! Don't ever give up!\p" + .string "From Mom$" + diff --git a/data/maps/PewterCity_Gym/scripts.inc b/data/maps/PewterCity_Gym/scripts.inc new file mode 100644 index 000000000000..2f6b0e1e157b --- /dev/null +++ b/data/maps/PewterCity_Gym/scripts.inc @@ -0,0 +1,202 @@ +PewterCity_Gym_MapScripts:: + .byte 0 + +PewterCity_Gym_EventScript_Brock:: + famechecker FAMECHECKER_BROCK, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + trainerbattle_single TRAINER_LEADER_BROCK, PewterCity_Gym_Text_BrockIntro, PewterCity_Gym_Text_BrockDefeat, PewterCity_Gym_EventScript_DefeatedBrock, NO_MUSIC + goto_if_unset FLAG_GOT_TM39_FROM_BROCK, PewterCity_Gym_EventScript_GiveTM39 + msgbox PewterCity_Gym_Text_BrockPostBattle + release + end + +PewterCity_Gym_EventScript_DefeatedBrock:: + famechecker FAMECHECKER_BROCK, 1 + setflag FLAG_DEFEATED_BROCK + setflag FLAG_BADGE01_GET + setvar VAR_MAP_SCENE_PEWTER_CITY, 1 + setflag FLAG_HIDE_PEWTER_CITY_GYM_GUIDE + clearflag FLAG_HIDE_PEWTER_CITY_RUNNING_SHOES_GUY + set_gym_trainers_frlg 1 + goto PewterCity_Gym_EventScript_GiveTM39 + end + +PewterCity_Gym_EventScript_GiveTM39:: + msgbox PewterCity_Gym_Text_TakeThisWithYou + checkitemspace ITEM_TM39 + goto_if_eq VAR_RESULT, FALSE, PewterCity_Gym_EventScript_NoRoomForTM39 + giveitem_msg PewterCity_Gym_Text_ReceivedTM39FromBrock, ITEM_TM39 + setflag FLAG_GOT_TM39_FROM_BROCK + msgbox PewterCity_Gym_Text_ExplainTM39 + release + end + +PewterCity_Gym_EventScript_NoRoomForTM39:: + msgbox PewterCity_Gym_Text_DontHaveRoomForThis + release + end + +PewterCity_Gym_EventScript_Liam:: + trainerbattle_single TRAINER_CAMPER_LIAM, PewterCity_Gym_Text_LiamIntro, PewterCity_Gym_Text_LiamDefeat + msgbox PewterCity_Gym_Text_LiamPostBattle, MSGBOX_AUTOCLOSE + end + +PewterCity_Gym_EventScript_GymGuy:: + lock + faceplayer + goto_if_set FLAG_DEFEATED_BROCK, PewterCity_Gym_EventScript_GymGuyPostVictory + msgbox PewterCity_Gym_Text_LetMeTakeYouToTheTop, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, PewterCity_Gym_EventScript_GymGuyTakeMeToTop + goto_if_eq VAR_RESULT, NO, PewterCity_Gym_EventScript_GymGuyDontTakeMeToTop + end + +PewterCity_Gym_EventScript_GymGuyPostVictory:: + msgbox PewterCity_Gym_Text_YoureChampMaterial + release + end + +PewterCity_Gym_EventScript_GymGuyTakeMeToTop:: + msgbox PewterCity_Gym_Text_LetsGetHappening + goto PewterCity_Gym_EventScript_GymGuyAdvice + end + +PewterCity_Gym_EventScript_GymGuyDontTakeMeToTop:: + msgbox PewterCity_Gym_Text_ItsFreeLetsGetHappening + goto PewterCity_Gym_EventScript_GymGuyAdvice + end + +PewterCity_Gym_EventScript_GymGuyAdvice:: + msgbox PewterCity_Gym_Text_TryDifferentPartyOrders + release + end + +PewterCity_Gym_EventScript_GymStatue:: + lockall + goto_if_set FLAG_BADGE01_GET, PewterCity_Gym_EventScript_GymStatuePostVictory + msgbox PewterCity_Gym_Text_GymStatue + releaseall + end + +PewterCity_Gym_EventScript_GymStatuePostVictory:: + msgbox PewterCity_Gym_Text_GymStatuePlayerWon + releaseall + end + +PewterCity_Gym_Text_BrockIntro:: + .string "So, you're here. I'm BROCK.\n" + .string "I'm PEWTER's GYM LEADER.\p" + .string "My rock-hard willpower is evident\n" + .string "even in my POKéMON.\p" + .string "My POKéMON are all rock hard, and\n" + .string "have true-grit determination.\p" + .string "That's right - my POKéMON are all\n" + .string "the ROCK type!\p" + .string "Fuhaha! You're going to challenge\n" + .string "me knowing that you'll lose?\p" + .string "That's the TRAINER's honor that\n" + .string "compels you to challenge me.\p" + .string "Fine, then!\n" + .string "Show me your best!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PewterCity_Gym_Text_BrockDefeat:: + .string "I took you for granted, and so\n" + .string "I lost.\p" + .string "As proof of your victory, I confer\n" + .string "on you this…the official POKéMON\l" + .string "LEAGUE BOULDERBADGE.\p" + .string "{FONT_NORMAL}{PLAYER} received the BOULDERBADGE\n" + .string "from BROCK!{PAUSE_MUSIC}{PLAY_BGM}{MUS_OBTAIN_BADGE}{PAUSE 0xFE}{PAUSE 0x56}{RESUME_MUSIC}\p" + .string "{FONT_MALE}Just having the BOULDERBADGE makes\n" + .string "your POKéMON more powerful.\p" + .string "It also enables the use of the\n" + .string "move FLASH outside of battle.\p" + .string "Of course, a POKéMON must know the\n" + .string "move FLASH to use it.$" + +PewterCity_Gym_Text_TakeThisWithYou:: + .string "Wait!\n" + .string "Take this with you.$" + +PewterCity_Gym_Text_ReceivedTM39FromBrock:: + .string "{PLAYER} received TM39\n" + .string "from BROCK.$" + +PewterCity_Gym_Text_ExplainTM39:: + .string "A TM, Technical Machine, contains a\n" + .string "technique for POKéMON.\p" + .string "Using a TM teaches the move it\n" + .string "contains to a POKéMON.\p" + .string "A TM is good for only one use.\p" + .string "So, when you use one, pick the\n" + .string "POKéMON carefully.\p" + .string "Anyways…\n" + .string "TM39 contains ROCK TOMB.\p" + .string "It hurls boulders at the foe and\n" + .string "lowers its SPEED.$" + +PewterCity_Gym_Text_BrockPostBattle:: + .string "There are all kinds of TRAINERS in\n" + .string "this huge world of ours.\p" + .string "You appear to be very gifted as a\n" + .string "POKéMON TRAINER.\p" + .string "So let me make a suggestion.\p" + .string "Go to the GYM in CERULEAN and test\n" + .string "your abilities.$" + +PewterCity_Gym_Text_DontHaveRoomForThis:: + .string "You don't have room for this.$" + +PewterCity_Gym_Text_LiamIntro:: + .string "Stop right there, kid!\p" + .string "You're ten thousand light-years \n" + .string "from facing BROCK!$" + +PewterCity_Gym_Text_LiamDefeat:: + .string "Darn!\p" + .string "Light-years isn't time…\n" + .string "It measures distance!$" + +PewterCity_Gym_Text_LiamPostBattle:: + .string "You're pretty hot.\n" + .string "…But not as hot as BROCK!$" + +PewterCity_Gym_Text_LetMeTakeYouToTheTop:: + .string "Hiya!\n" + .string "Do you want to dream big?\p" + .string "Do you dare to dream of becoming\n" + .string "the POKéMON champ?\p" + .string "I'm no TRAINER, but I can advise\n" + .string "you on how to win.\p" + .string "Let me take you to the top!$" + +PewterCity_Gym_Text_LetsGetHappening:: + .string "All right!\n" + .string "Let's get happening!$" + +PewterCity_Gym_Text_TryDifferentPartyOrders:: + .string "The first POKéMON out in a match is\n" + .string "at the left of the POKéMON LIST.\p" + .string "By changing the order of POKéMON,\n" + .string "you may gain an advantage.\p" + .string "Try different orders to suit your\n" + .string "opponent's party.$" + +PewterCity_Gym_Text_ItsFreeLetsGetHappening:: + .string "It's a free service!\n" + .string "Let's get happening!$" + +PewterCity_Gym_Text_YoureChampMaterial:: + .string "Just as I thought!\n" + .string "You're POKéMON champ material!$" + +PewterCity_Gym_Text_GymStatue:: + .string "PEWTER POKéMON GYM\n" + .string "LEADER: BROCK\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}$" + +PewterCity_Gym_Text_GymStatuePlayerWon:: + .string "PEWTER POKéMON GYM\n" + .string "LEADER: BROCK\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}, {PLAYER}$" + diff --git a/data/maps/PewterCity_House1/scripts.inc b/data/maps/PewterCity_House1/scripts.inc new file mode 100644 index 000000000000..65116d5344ca --- /dev/null +++ b/data/maps/PewterCity_House1/scripts.inc @@ -0,0 +1,47 @@ +PewterCity_House1_MapScripts:: + .byte 0 + +PewterCity_House1_EventScript_BaldingMan:: + msgbox PewterCity_House1_Text_TradeMonsAreFinicky, MSGBOX_NPC + end + +PewterCity_House1_EventScript_LittleBoy:: + lock + msgbox PewterCity_House1_Text_NidoranSit + call PewterCity_House1_EventScript_DoNidoranCry + release + end + +PewterCity_House1_EventScript_Nidoran:: + lock + faceplayer + call PewterCity_House1_EventScript_DoNidoranCry + applymovement LOCALID_PEWTER_HOUSE_NIDORAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +PewterCity_House1_EventScript_DoNidoranCry:: + textcolor NPC_TEXT_COLOR_NEUTRAL + waitse + playmoncry SPECIES_NIDORAN_M, CRY_MODE_NORMAL + msgbox PewterCity_House1_Text_Nidoran + waitmoncry + call EventScript_RestorePrevTextColor + return + +PewterCity_House1_Text_Nidoran:: + .string "NIDORAN♂: Bowbow!$" + +PewterCity_House1_Text_NidoranSit:: + .string "NIDORAN, sit!$" + +PewterCity_House1_Text_TradeMonsAreFinicky:: + .string "Our POKéMON's an outsider, so it's\n" + .string "finicky and hard to handle.\p" + .string "An outsider is a POKéMON that you\n" + .string "get in a trade.\p" + .string "It grows fast, but it may ignore an\n" + .string "unskilled TRAINER in battle.\p" + .string "If only we had some BADGES…$" + diff --git a/data/maps/PewterCity_House2/scripts.inc b/data/maps/PewterCity_House2/scripts.inc new file mode 100644 index 000000000000..e29d5ed2bfb5 --- /dev/null +++ b/data/maps/PewterCity_House2/scripts.inc @@ -0,0 +1,25 @@ +PewterCity_House2_MapScripts:: + .byte 0 + +PewterCity_House2_EventScript_OldMan:: + msgbox PewterCity_House2_Text_MonsLearnTechniquesAsTheyGrow, MSGBOX_NPC + end + +PewterCity_House2_EventScript_LittleBoy:: + msgbox PewterCity_House2_Text_MonsEasierCatchIfStatused, MSGBOX_NPC + end + +PewterCity_House2_Text_MonsLearnTechniquesAsTheyGrow:: + .string "POKéMON learn new techniques as\n" + .string "they grow.\p" + .string "But some moves must be taught to\n" + .string "them by people.$" + +PewterCity_House2_Text_MonsEasierCatchIfStatused:: + .string "A POKéMON becomes easier to \n" + .string "catch if it has a status problem.\p" + .string "Sleep, poison, burn, or paralysis…\n" + .string "Those are all effective.\p" + .string "But catching POKéMON is never\n" + .string "a sure thing!$" + diff --git a/data/maps/PewterCity_Mart/scripts.inc b/data/maps/PewterCity_Mart/scripts.inc new file mode 100644 index 000000000000..b20cd4f59074 --- /dev/null +++ b/data/maps/PewterCity_Mart/scripts.inc @@ -0,0 +1,46 @@ +PewterCity_Mart_MapScripts:: + .byte 0 + +PewterCity_Mart_EventScript_Youngster:: + msgbox PewterCity_Mart_Text_BoughtWeirdFishFromShadyGuy, MSGBOX_NPC + end + +PewterCity_Mart_EventScript_Boy:: + msgbox PewterCity_Mart_Text_GoodThingsIfRaiseMonsDiligently, MSGBOX_NPC + end + +PewterCity_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart PewterCity_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +PewterCity_Mart_Items:: + .2byte ITEM_POKE_BALL + .2byte ITEM_POTION + .2byte ITEM_ANTIDOTE + .2byte ITEM_PARALYZE_HEAL + .2byte ITEM_AWAKENING + .2byte ITEM_BURN_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_REPEL + .2byte ITEM_NONE + release + end + +PewterCity_Mart_Text_BoughtWeirdFishFromShadyGuy:: + .string "A shady old guy sucked me into\n" + .string "buying this weird fish POKéMON!\p" + .string "It's totally weak and it cost ¥500!$" + +PewterCity_Mart_Text_GoodThingsIfRaiseMonsDiligently:: + .string "Good things can happen if you raise\n" + .string "POKéMON diligently.\p" + .string "Even the weak ones can surprise\n" + .string "you if you don't give up on them.$" + diff --git a/data/maps/PewterCity_Museum_1F/scripts.inc b/data/maps/PewterCity_Museum_1F/scripts.inc new file mode 100644 index 000000000000..fe07f7f16d72 --- /dev/null +++ b/data/maps/PewterCity_Museum_1F/scripts.inc @@ -0,0 +1,277 @@ +PewterCity_Museum_1F_MapScripts:: + .byte 0 + +PewterCity_Museum_1F_EventScript_Scientist1:: + lock + faceplayer + goto_if_eq VAR_FACING, DIR_WEST, PewterCity_Museum_1F_EventScript_Scientist1BehindCounter + goto_if_eq VAR_FACING, DIR_SOUTH, PewterCity_Museum_1F_EventScript_Scientist1BehindCounter + goto_if_eq VAR_FACING, DIR_NORTH, PewterCity_Museum_1F_EventScript_Scientist1BehindCounter + msgbox PewterCity_Museum_1F_Text_PleaseEnjoyYourself + release + end + +PewterCity_Museum_1F_EventScript_Scientist1BehindCounter:: + msgbox PewterCity_Museum_1F_Text_DoYouKnowWhatAmberIs, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, PewterCity_Museum_1F_EventScript_AmberHasGeneticMatter + goto_if_eq VAR_RESULT, NO, PewterCity_Museum_1F_EventScript_ExplainAmber + end + +PewterCity_Museum_1F_EventScript_AmberHasGeneticMatter:: + msgbox PewterCity_Museum_1F_Text_AmberContainsGeneticMatter + applymovement LOCALID_MUSEUM_SCIENTIST1, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +PewterCity_Museum_1F_EventScript_ExplainAmber:: + msgbox PewterCity_Museum_1F_Text_AmberIsFossilizedSap + applymovement LOCALID_MUSEUM_SCIENTIST1, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +PewterCity_Museum_1F_EventScript_EntranceTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + goto PewterCity_Museum_1F_EventScript_EntranceTrigger + end + +PewterCity_Museum_1F_EventScript_EntranceTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + goto PewterCity_Museum_1F_EventScript_EntranceTrigger + end + +PewterCity_Museum_1F_EventScript_EntranceTriggerRight:: + lockall + setvar VAR_TEMP_1, 2 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + goto PewterCity_Museum_1F_EventScript_EntranceTrigger + end + +PewterCity_Museum_1F_EventScript_EntranceTrigger:: + textcolor NPC_TEXT_COLOR_MALE + showmoneybox 0, 0 + msgbox PewterCity_Museum_1F_Text_Its50YForChildsTicket, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, PewterCity_Museum_1F_EventScript_TryPayForTicket + msgbox PewterCity_Museum_1F_Text_ComeAgain + closemessage + hidemoneybox + applymovement LOCALID_PLAYER, PewterCity_Museum_1F_Movement_ForcePlayerExit + waitmovement 0 + releaseall + end + +PewterCity_Museum_1F_EventScript_TryPayForTicket:: + checkmoney 50 + goto_if_eq VAR_RESULT, FALSE, PewterCity_Museum_1F_EventScript_NotEnoughMoney + closemessage + call_if_eq VAR_TEMP_1, 0, PewterCity_Museum_1F_EventScript_PlayerApproachCounterLeft + call_if_eq VAR_TEMP_1, 1, PewterCity_Museum_1F_EventScript_PlayerApproachCounterMid + call_if_eq VAR_TEMP_1, 2, PewterCity_Museum_1F_EventScript_PlayerApproachCounterRight + playse SE_SHOP + removemoney 50 + updatemoneybox + waitse + msgbox PewterCity_Museum_1F_Text_Right50YThankYou + setvar VAR_MAP_SCENE_PEWTER_CITY_MUSEUM_1F, 1 + hidemoneybox + releaseall + end + +PewterCity_Museum_1F_EventScript_PlayerApproachCounterLeft:: + applymovement LOCALID_PLAYER, PewterCity_Museum_1F_Movement_ApproachCounterLeft + waitmovement 0 + return + +PewterCity_Museum_1F_EventScript_PlayerApproachCounterMid:: + applymovement LOCALID_PLAYER, PewterCity_Museum_1F_Movement_ApproachCounterMid + waitmovement 0 + return + +PewterCity_Museum_1F_EventScript_PlayerApproachCounterRight:: + applymovement LOCALID_PLAYER, PewterCity_Museum_1F_Movement_ApproachCounterRight + waitmovement 0 + return + +PewterCity_Museum_1F_EventScript_NotEnoughMoney:: + msgbox PewterCity_Museum_1F_Text_DontHaveEnoughMoney + closemessage + hidemoneybox + applymovement LOCALID_PLAYER, PewterCity_Museum_1F_Movement_ForcePlayerExit + waitmovement 0 + releaseall + end + +PewterCity_Museum_1F_Movement_ForcePlayerExit:: + walk_down + step_end + +PewterCity_Museum_1F_Movement_ApproachCounterLeft:: + walk_right + walk_right + delay_8 + walk_in_place_right + step_end + +PewterCity_Museum_1F_Movement_ApproachCounterMid:: + walk_right + delay_8 + walk_in_place_right + step_end + +PewterCity_Museum_1F_Movement_ApproachCounterRight:: + delay_8 + walk_in_place_right + step_end + +PewterCity_Museum_1F_EventScript_Scientist2:: + msgbox PewterCity_Museum_1F_Text_WeHaveTwoFossilsOnExhibit, MSGBOX_NPC + end + +PewterCity_Museum_1F_EventScript_OldMan:: + msgbox PewterCity_Museum_1F_Text_ShouldBeGratefulForLongLife, MSGBOX_NPC + end + +PewterCity_Museum_1F_EventScript_OldAmberScientist:: + lock + faceplayer + goto_if_set FLAG_GOT_OLD_AMBER, PewterCity_Museum_1F_EventScript_AlreadyGotOldAmber + msgbox PewterCity_Museum_1F_Text_WantYouToGetAmberExamined + checkitemspace ITEM_OLD_AMBER + goto_if_eq VAR_RESULT, FALSE, PewterCity_Museum_1F_EventScript_NoRoomForOldAmber + setflag FLAG_GOT_OLD_AMBER + removeobject LOCALID_OLD_AMBER + giveitem_msg PewterCity_Museum_1F_Text_ReceivedOldAmberFromMan, ITEM_OLD_AMBER, 1, MUS_RG_OBTAIN_KEY_ITEM + release + end + +PewterCity_Museum_1F_EventScript_NoRoomForOldAmber:: + msgbox PewterCity_Museum_1F_Text_DontHaveSpaceForThis + release + end + +PewterCity_Museum_1F_EventScript_AlreadyGotOldAmber:: + msgbox PewterCity_Museum_1F_Text_GetOldAmberChecked + release + end + +PewterCity_Museum_1F_EventScript_OldAmber:: + msgbox PewterCity_Museum_1F_Text_BeautifulPieceOfAmber, MSGBOX_NPC + end + +PewterCity_Museum_1F_EventScript_AerodactylFossil:: + lockall + setvar VAR_0x8004, SPECIES_AERODACTYL + setvar VAR_0x8005, 10 + setvar VAR_0x8006, 3 + special OpenMuseumFossilPic + msgbox PewterCity_Museum_1F_Text_AerodactylFossil + special CloseMuseumFossilPic + releaseall + end + +PewterCity_Museum_1F_EventScript_KabutopsFossil:: + lockall + setvar VAR_0x8004, SPECIES_KABUTOPS + setvar VAR_0x8005, 10 + setvar VAR_0x8006, 3 + special OpenMuseumFossilPic + msgbox PewterCity_Museum_1F_Text_KabutopsFossil + special CloseMuseumFossilPic + releaseall + end + +PewterCity_Museum_1F_Text_Its50YForChildsTicket:: + .string "Yes, yes.\n" + .string "It's ¥50 for a child's ticket.\p" + .string "Would you like to come in?$" + +PewterCity_Museum_1F_Text_ComeAgain:: + .string "Come again!$" + +PewterCity_Museum_1F_Text_Right50YThankYou:: + .string "Right, ¥50!\n" + .string "Thank you!$" + +PewterCity_Museum_1F_Text_DontHaveEnoughMoney:: + .string "You don't have enough money.$" + +PewterCity_Museum_1F_Text_PleaseEnjoyYourself:: + .string "Please enjoy yourself.$" + +PewterCity_Museum_1F_Text_DoYouKnowWhatAmberIs:: + .string "You can't sneak in the back way!\n" + .string "Nice try, kid, but no.\p" + .string "Oh, whatever!\n" + .string "Do you know what AMBER is?$" + +PewterCity_Museum_1F_Text_AmberContainsGeneticMatter:: + .string "AMBER contains the genetic matter\n" + .string "of ancient POKéMON.\p" + .string "There's a LAB somewhere trying to\n" + .string "resurrect POKéMON from AMBER.$" + +PewterCity_Museum_1F_Text_AmberIsFossilizedSap:: + .string "AMBER is actually sap, that gooey\n" + .string "stuff that oozes from trees.\p" + .string "The ancient sap fossilized over\n" + .string "time to become rock-hard AMBER.$" + +@ Unused +PewterCity_Museum_1F_Text_PleaseGoAround:: + .string "あちらへ おまわりください$" + +PewterCity_Museum_1F_Text_ShouldBeGratefulForLongLife:: + .string "I should be grateful for my long\n" + .string "life.\p" + .string "Never did I think I would get to\n" + .string "see the bones of a dragon!$" + +PewterCity_Museum_1F_Text_WantYouToGetAmberExamined:: + .string "Ssh! Listen, I need to share a\n" + .string "secret with someone.\p" + .string "I think that this chunk of AMBER\n" + .string "contains POKéMON DNA!\p" + .string "It would be a shattering scientific\n" + .string "breakthrough if POKéMON could be\l" + .string "resurrected from it.\p" + .string "But, my colleagues just ignore\n" + .string "what I have to say.\p" + .string "So, I have a favor to ask!\p" + .string "I want you to get this examined at\n" + .string "a POKéMON LAB somewhere.$" + +PewterCity_Museum_1F_Text_ReceivedOldAmberFromMan:: + .string "{PLAYER} received the OLD AMBER\n" + .string "from the man.$" + +PewterCity_Museum_1F_Text_GetOldAmberChecked:: + .string "Ssh!\n" + .string "Get the OLD AMBER checked!$" + +PewterCity_Museum_1F_Text_DontHaveSpaceForThis:: + .string "You don't have space for this.$" + +PewterCity_Museum_1F_Text_WeHaveTwoFossilsOnExhibit:: + .string "We have two fossils of rare,\n" + .string "prehistoric POKéMON on exhibit.$" + +PewterCity_Museum_1F_Text_BeautifulPieceOfAmber:: + .string "There is a beautiful piece of\n" + .string "AMBER in a clear gold color.$" + +PewterCity_Museum_1F_Text_AerodactylFossil:: + .string "AERODACTYL Fossil\n" + .string "A primitive and rare POKéMON.$" + +PewterCity_Museum_1F_Text_KabutopsFossil:: + .string "KABUTOPS Fossil\n" + .string "A primitive and rare POKéMON.$" + diff --git a/data/maps/PewterCity_Museum_2F/scripts.inc b/data/maps/PewterCity_Museum_2F/scripts.inc new file mode 100644 index 000000000000..9de175beed7d --- /dev/null +++ b/data/maps/PewterCity_Museum_2F/scripts.inc @@ -0,0 +1,85 @@ +PewterCity_Museum_2F_MapScripts:: + .byte 0 + +PewterCity_Museum_2F_EventScript_Man:: + msgbox PewterCity_Museum_1F_Text_WhatsSpecialAboutMoonStone, MSGBOX_NPC + end + +PewterCity_Museum_2F_EventScript_OldMan:: + msgbox PewterCity_Museum_1F_Text_BoughtColorTVForMoonLanding, MSGBOX_NPC + end + +PewterCity_Museum_2F_EventScript_Scientist:: + msgbox PewterCity_Museum_1F_Text_RunningSpaceExhibitThisMonth, MSGBOX_NPC + end + +PewterCity_Museum_2F_EventScript_LittleGirl:: + msgbox PewterCity_Museum_1F_Text_AskedDaddyToCatchPikachu, MSGBOX_NPC + end + +PewterCity_Museum_2F_EventScript_BaldingMan:: + msgbox PewterCity_Museum_1F_Text_PikachuSoonIPromise, MSGBOX_NPC + end + +PewterCity_Museum_2F_EventScript_SpaceShuttle:: + msgbox PewterCity_Museum_1F_Text_SpaceShuttle, MSGBOX_SIGN + end + +PewterCity_Museum_2F_EventScript_MoonStone:: + msgbox PewterCity_Museum_1F_Text_MeteoriteThatFellOnMtMoon, MSGBOX_SIGN + end + +Text_SeismicTossTeach:: + .string "The secrets of space…\n" + .string "The mysteries of earth…\p" + .string "There are so many things about\n" + .string "which we know so little.\p" + .string "But that should spur us to study\n" + .string "harder, not toss in the towel.\p" + .string "The only thing you should toss…\p" + .string "Well, how about SEISMIC TOSS?\n" + .string "Should I teach that to a POKéMON?$" + +Text_SeismicTossDeclined:: + .string "Is that so?\n" + .string "I'm sure you'll be back for it.$" + +Text_SeismicTossWhichMon:: + .string "Which POKéMON wants to learn\n" + .string "SEISMIC TOSS?$" + +Text_SeismicTossTaught:: + .string "I hope you won't toss in the towel.\n" + .string "Keep it up.$" + +PewterCity_Museum_1F_Text_WhatsSpecialAboutMoonStone:: + .string "MOON STONE, huh?\p" + .string "What's so special about it?\n" + .string "Looks like an ordinary rock to me.$" + +PewterCity_Museum_1F_Text_BoughtColorTVForMoonLanding:: + .string "July 20, 1969!\p" + .string "Humankind first set foot on the\n" + .string "moon that day.\p" + .string "I bought a color TV just so I\n" + .string "could watch that news.$" + +PewterCity_Museum_1F_Text_RunningSpaceExhibitThisMonth:: + .string "This month, we're running a space\n" + .string "exhibit.$" + +PewterCity_Museum_1F_Text_AskedDaddyToCatchPikachu:: + .string "I want a PIKACHU!\n" + .string "It's so cute!\p" + .string "I asked my daddy to catch me one!$" + +PewterCity_Museum_1F_Text_PikachuSoonIPromise:: + .string "Yeah, a PIKACHU soon, I promise!$" + +PewterCity_Museum_1F_Text_SpaceShuttle:: + .string "Space Shuttle$" + +PewterCity_Museum_1F_Text_MeteoriteThatFellOnMtMoon:: + .string "A meteorite that fell on MT. MOON.\n" + .string "It is thought to be a MOON STONE.$" + diff --git a/data/maps/PewterCity_PokemonCenter_1F/scripts.inc b/data/maps/PewterCity_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..b1f7e5ba2a6b --- /dev/null +++ b/data/maps/PewterCity_PokemonCenter_1F/scripts.inc @@ -0,0 +1,73 @@ +PewterCity_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, PewterCity_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +PewterCity_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_PEWTER_CITY + end + +PewterCity_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +PewterCity_PokemonCenter_1F_EventScript_Gentleman:: + msgbox PewterCity_PokemonCenter_1F_Text_TeamRocketMtMoonImOnPhone, MSGBOX_NPC + end + +PewterCity_PokemonCenter_1F_EventScript_Jigglypuff:: + lock + faceplayer + fadeoutbgm 0 + playbgm MUS_RG_JIGGLYPUFF, 0 + message PewterCity_PokemonCenter_1F_Text_Jigglypuff + waitmessage + delay 455 + playbgm MUS_POKE_CENTER, 1 + release + end + +PewterCity_PokemonCenter_1F_EventScript_Youngster:: + msgbox PewterCity_PokemonCenter_1F_Text_WhenJiggylypuffSingsMonsGetDrowsy, MSGBOX_NPC + end + +PewterCity_PokemonCenter_1F_EventScript_GBAKid1:: + lock + msgbox PewterCity_PokemonCenter_1F_Text_TradingMyClefairyForPikachu + release + end + +PewterCity_PokemonCenter_1F_EventScript_GBAKid2:: + msgbox PewterCity_PokemonCenter_1F_Text_TradingPikachuWithKid, MSGBOX_NPC + end + +PewterCity_PokemonCenter_1F_Text_TeamRocketMtMoonImOnPhone:: + .string "What!?\p" + .string "TEAM ROCKET is at MT. MOON?\n" + .string "Huh?\p" + .string "I'm on the phone!\n" + .string "Scram!$" + +PewterCity_PokemonCenter_1F_Text_Jigglypuff:: + .string "JIGGLYPUFF: Puu pupuu!$" + +PewterCity_PokemonCenter_1F_Text_WhenJiggylypuffSingsMonsGetDrowsy:: + .string "Yawn!\p" + .string "When JIGGLYPUFF sings, POKéMON get\n" + .string "drowsy…\p" + .string "…Me, too…\n" + .string "Snore…$" + +PewterCity_PokemonCenter_1F_Text_TradingMyClefairyForPikachu:: + .string "I really want a PIKACHU, so I'm\n" + .string "trading my CLEFAIRY for one.$" + +PewterCity_PokemonCenter_1F_Text_TradingPikachuWithKid:: + .string "I'm trading POKéMON with that kid\n" + .string "there.\p" + .string "I had two PIKACHU, so I figured\n" + .string "I might as well trade one.$" + diff --git a/data/maps/PewterCity_PokemonCenter_2F/scripts.inc b/data/maps/PewterCity_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..1d4e7e7d748e --- /dev/null +++ b/data/maps/PewterCity_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +PewterCity_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +PewterCity_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +PewterCity_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +PewterCity_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/PokemonLeague_AgathasRoom/scripts.inc b/data/maps/PokemonLeague_AgathasRoom/scripts.inc new file mode 100644 index 000000000000..ae878f4c1ee8 --- /dev/null +++ b/data/maps/PokemonLeague_AgathasRoom/scripts.inc @@ -0,0 +1,131 @@ +PokemonLeague_AgathasRoom_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, PokemonLeague_AgathasRoom_OnResume + map_script MAP_SCRIPT_ON_LOAD, PokemonLeague_AgathasRoom_OnLoad + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, PokemonLeague_AgathasRoom_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, PokemonLeague_AgathasRoom_OnFrame + .byte 0 + +PokemonLeague_AgathasRoom_OnResume:: + setvar VAR_0x8004, 2 + call PokemonLeague_EventScript_DoLightingEffect + end + +PokemonLeague_AgathasRoom_OnLoad:: + call_if_set FLAG_DEFEATED_AGATHA, PokemonLeague_AgathasRoom_EventScript_SetDoorOpen + call_if_eq VAR_MAP_SCENE_POKEMON_LEAGUE, 3, PokemonLeague_AgathasRoom_EventScript_CloseEntry + end + +PokemonLeague_AgathasRoom_EventScript_CloseEntry:: + call PokemonLeague_EventScript_CloseEntry + return + +PokemonLeague_AgathasRoom_EventScript_SetDoorOpen:: + call PokemonLeague_EventScript_SetDoorOpen + return + +PokemonLeague_AgathasRoom_OnWarp:: + map_script_2 VAR_TEMP_1, 0, PokemonLeague_AgathasRoom_EventScript_TurnPlayerNorth + .2byte 0 + +PokemonLeague_AgathasRoom_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +PokemonLeague_AgathasRoom_OnFrame:: + map_script_2 VAR_MAP_SCENE_POKEMON_LEAGUE, 2, PokemonLeague_AgathasRoom_EventScript_EnterRoom + .2byte 0 + +PokemonLeague_AgathasRoom_EventScript_EnterRoom:: + lockall + call PokemonLeague_EventScript_EnterRoom + setvar VAR_MAP_SCENE_POKEMON_LEAGUE, 3 + releaseall + end + +PokemonLeague_AgathasRoom_EventScript_Agatha:: + lock + faceplayer + famechecker FAMECHECKER_AGATHA, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + goto_if_set FLAG_DEFEATED_AGATHA, PokemonLeague_AgathasRoom_EventScript_PostBattle + famechecker FAMECHECKER_AGATHA, 0 + famechecker FAMECHECKER_AGATHA, 4 + famechecker FAMECHECKER_OAK, 4 + call_if_unset FLAG_SYS_GAME_CLEAR, PokemonLeague_AgathasRoom_EventScript_Intro + call_if_set FLAG_SYS_GAME_CLEAR, PokemonLeague_AgathasRoom_EventScript_RematchIntro + setflag FLAG_TEMP_3 + setflag FLAG_TEMP_5 + call_if_unset FLAG_IS_CHAMPION, PokemonLeague_AgathasRoom_EventScript_Battle + call_if_set FLAG_IS_CHAMPION, PokemonLeague_AgathasRoom_EventScript_Rematch + clearflag FLAG_TEMP_5 + goto PokemonLeague_AgathasRoom_EventScript_DefeatedAgatha + end + +PokemonLeague_AgathasRoom_EventScript_Intro:: + msgbox PokemonLeague_AgathasRoom_Text_Intro + return + +PokemonLeague_AgathasRoom_EventScript_RematchIntro:: + msgbox PokemonLeague_AgathasRoom_Text_RematchIntro + return + +PokemonLeague_AgathasRoom_EventScript_Battle:: + trainerbattle_no_intro TRAINER_ELITE_FOUR_AGATHA, PokemonLeague_AgathasRoom_Text_Defeat + return + +PokemonLeague_AgathasRoom_EventScript_Rematch:: + trainerbattle_no_intro TRAINER_ELITE_FOUR_AGATHA_2, PokemonLeague_AgathasRoom_Text_Defeat + return + +PokemonLeague_AgathasRoom_EventScript_PostBattle:: + msgbox PokemonLeague_AgathasRoom_Text_PostBattle + release + end + +PokemonLeague_AgathasRoom_EventScript_DefeatedAgatha:: + setflag FLAG_DEFEATED_AGATHA + call PokemonLeague_EventScript_OpenDoor + msgbox PokemonLeague_AgathasRoom_Text_PostBattle + release + end + +PokemonLeague_AgathasRoom_Text_Intro:: + .string "I am AGATHA of the ELITE FOUR.\p" + .string "I hear OAK's taken a lot of\n" + .string "interest in you, child.\p" + .string "That old duff was once tough and\n" + .string "handsome.\p" + .string "But that was decades ago.\n" + .string "He's a shadow of his former self.\p" + .string "Now he just wants to fiddle with\n" + .string "his POKéDEX.\p" + .string "He's wrong.\n" + .string "POKéMON are for battling!\p" + .string "{PLAYER}! I'll show you how a real\n" + .string "TRAINER battles!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PokemonLeague_AgathasRoom_Text_RematchIntro:: + .string "I am AGATHA of the ELITE FOUR.\p" + .string "You're the child that OAK's taken\n" + .string "under his wing, aren't you?\p" + .string "That old duff was once tough and\n" + .string "handsome.\p" + .string "But that was decades ago.\n" + .string "He's a shadow of his former self.\p" + .string "Now he just wants to fiddle with\n" + .string "his POKéDEX.\p" + .string "He's wrong.\n" + .string "POKéMON are for battling!\p" + .string "{PLAYER}! I'll show you how a real\n" + .string "TRAINER battles!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PokemonLeague_AgathasRoom_Text_Defeat:: + .string "Oh, my!\n" + .string "You're something special, child!$" + +PokemonLeague_AgathasRoom_Text_PostBattle:: + .string "You win!\p" + .string "I see what the old duff sees in\n" + .string "you now.\p" + .string "I have nothing else to say.\n" + .string "Run along now, child!$" + diff --git a/data/maps/PokemonLeague_BrunosRoom/scripts.inc b/data/maps/PokemonLeague_BrunosRoom/scripts.inc new file mode 100644 index 000000000000..5c0d6ba0633b --- /dev/null +++ b/data/maps/PokemonLeague_BrunosRoom/scripts.inc @@ -0,0 +1,148 @@ +PokemonLeague_BrunosRoom_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, PokemonLeague_BrunosRoom_OnResume + map_script MAP_SCRIPT_ON_LOAD, PokemonLeague_BrunosRoom_OnLoad + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, PokemonLeague_BrunosRoom_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, PokemonLeague_BrunosRoom_OnFrame + .byte 0 + +PokemonLeague_BrunosRoom_OnResume:: + setvar VAR_0x8004, 1 + call PokemonLeague_EventScript_DoLightingEffect + end + +PokemonLeague_BrunosRoom_OnLoad:: + call_if_set FLAG_DEFEATED_BRUNO, PokemonLeague_BrunosRoom_EventScript_SetDoorOpen + call_if_eq VAR_MAP_SCENE_POKEMON_LEAGUE, 2, PokemonLeague_BrunosRoom_EventScript_CloseEntry + end + +PokemonLeague_BrunosRoom_EventScript_CloseEntry:: + call PokemonLeague_EventScript_CloseEntry + return + +PokemonLeague_BrunosRoom_EventScript_SetDoorOpen:: + call PokemonLeague_EventScript_SetDoorOpen + return + +PokemonLeague_BrunosRoom_OnWarp:: + map_script_2 VAR_TEMP_1, 0, PokemonLeague_BrunosRoom_EventScript_TurnPlayerNorth + .2byte 0 + +PokemonLeague_BrunosRoom_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +PokemonLeague_BrunosRoom_OnFrame:: + map_script_2 VAR_MAP_SCENE_POKEMON_LEAGUE, 1, PokemonLeague_BrunosRoom_EventScript_EnterRoom + .2byte 0 + +PokemonLeague_BrunosRoom_EventScript_EnterRoom:: + lockall + call PokemonLeague_EventScript_EnterRoom + setvar VAR_MAP_SCENE_POKEMON_LEAGUE, 2 + releaseall + end + +PokemonLeague_BrunosRoom_EventScript_Bruno:: + lock + faceplayer + famechecker FAMECHECKER_BRUNO, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + goto_if_set FLAG_DEFEATED_BRUNO, PokemonLeague_BrunosRoom_EventScript_PostBattle + famechecker FAMECHECKER_BRUNO, 0 + famechecker FAMECHECKER_BRUNO, 1 + call_if_unset FLAG_SYS_GAME_CLEAR, PokemonLeague_BrunosRoom_EventScript_Intro + call_if_set FLAG_SYS_GAME_CLEAR, PokemonLeague_BrunosRoom_EventScript_RematchIntro + setflag FLAG_TEMP_3 + setflag FLAG_TEMP_5 + call_if_unset FLAG_IS_CHAMPION, PokemonLeague_BrunosRoom_EventScript_Battle + call_if_set FLAG_IS_CHAMPION, PokemonLeague_BrunosRoom_EventScript_Rematch + clearflag FLAG_TEMP_5 + goto PokemonLeague_BrunosRoom_EventScript_DefeatedBruno + end + +PokemonLeague_BrunosRoom_EventScript_Intro:: + msgbox PokemonLeague_BrunosRoom_Text_Intro + return + +PokemonLeague_BrunosRoom_EventScript_RematchIntro:: + msgbox PokemonLeague_BrunosRoom_Text_RematchIntro + return + +PokemonLeague_BrunosRoom_EventScript_Battle:: + trainerbattle_no_intro TRAINER_ELITE_FOUR_BRUNO, PokemonLeague_BrunosRoom_Text_Defeat + return + +PokemonLeague_BrunosRoom_EventScript_Rematch:: + trainerbattle_no_intro TRAINER_ELITE_FOUR_BRUNO_2, PokemonLeague_BrunosRoom_Text_Defeat + return + +PokemonLeague_BrunosRoom_EventScript_PostBattle:: + msgbox PokemonLeague_BrunosRoom_Text_PostBattle + closemessage + call_if_eq VAR_FACING, DIR_NORTH, PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayRight + call_if_eq VAR_FACING, DIR_SOUTH, PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayLeft + call_if_eq VAR_FACING, DIR_WEST, PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayDown + call_if_eq VAR_FACING, DIR_EAST, PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayDown + release + end + +PokemonLeague_BrunosRoom_EventScript_DefeatedBruno:: + setflag FLAG_DEFEATED_BRUNO + call PokemonLeague_EventScript_OpenDoor + msgbox PokemonLeague_BrunosRoom_Text_PostBattle + closemessage + call_if_eq VAR_FACING, DIR_NORTH, PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayRight + call_if_eq VAR_FACING, DIR_SOUTH, PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayLeft + call_if_eq VAR_FACING, DIR_WEST, PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayDown + call_if_eq VAR_FACING, DIR_EAST, PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayDown + release + end + +PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayLeft:: + applymovement LOCALID_BRUNO, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayRight:: + applymovement LOCALID_BRUNO, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + return + +PokemonLeague_BrunosRoom_EventScript_BrunoLookAwayDown:: + applymovement LOCALID_BRUNO, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +PokemonLeague_BrunosRoom_Text_Intro:: + .string "I am BRUNO of the ELITE FOUR!\p" + .string "Through rigorous training, people\n" + .string "and POKéMON can become stronger\l" + .string "without limit.\p" + .string "I've lived and trained with my\n" + .string "fighting POKéMON!\l" + .string "And that will never change!\p" + .string "{PLAYER}!\p" + .string "We will grind you down with our\n" + .string "superior power!\p" + .string "Hoo hah!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PokemonLeague_BrunosRoom_Text_RematchIntro:: + .string "I am BRUNO of the ELITE FOUR!\p" + .string "Through rigorous training, people\n" + .string "and POKéMON can become stronger\l" + .string "without limit.\p" + .string "I've lived and trained with my\n" + .string "fighting POKéMON!\l" + .string "And that will never change!\p" + .string "{PLAYER}!\p" + .string "We will grind you down with our\n" + .string "superior power!\p" + .string "Hoo hah!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PokemonLeague_BrunosRoom_Text_Defeat:: + .string "Why?\n" + .string "How could I lose?$" + +PokemonLeague_BrunosRoom_Text_PostBattle:: + .string "My job is done.\n" + .string "Go face your next challenge.$" + diff --git a/data/maps/PokemonLeague_ChampionsRoom/scripts.inc b/data/maps/PokemonLeague_ChampionsRoom/scripts.inc new file mode 100644 index 000000000000..ae819e14ea42 --- /dev/null +++ b/data/maps/PokemonLeague_ChampionsRoom/scripts.inc @@ -0,0 +1,327 @@ +PokemonLeague_ChampionsRoom_MapScripts:: + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, PokemonLeague_ChampionsRoom_OnWarp + map_script MAP_SCRIPT_ON_RESUME, PokemonLeague_ChampionsRoom_OnResume + map_script MAP_SCRIPT_ON_FRAME_TABLE, PokemonLeague_ChampionsRoom_OnFrame + .byte 0 + +PokemonLeague_ChampionsRoom_OnResume:: + setvar VAR_0x8004, 4 + call PokemonLeague_EventScript_DoLightingEffect + call_if_eq VAR_STARTER_MON, 2, PokemonLeague_ChampionsRoom_EventScript_CheckStopTriggerSquirtle + call_if_eq VAR_STARTER_MON, 1, PokemonLeague_ChampionsRoom_EventScript_CheckStopTriggerBulbasaur + call_if_eq VAR_STARTER_MON, 0, PokemonLeague_ChampionsRoom_EventScript_CheckStopTriggerCharmander + end + +PokemonLeague_ChampionsRoom_EventScript_CheckStopTriggerSquirtle:: + goto_if_defeated TRAINER_CHAMPION_FIRST_SQUIRTLE, PokemonLeague_ChampionsRoom_EventScript_StopSceneTrigger + goto_if_defeated TRAINER_CHAMPION_REMATCH_SQUIRTLE, PokemonLeague_ChampionsRoom_EventScript_StopSceneTrigger + return + +PokemonLeague_ChampionsRoom_EventScript_CheckStopTriggerBulbasaur:: + goto_if_defeated TRAINER_CHAMPION_FIRST_BULBASAUR, PokemonLeague_ChampionsRoom_EventScript_StopSceneTrigger + goto_if_defeated TRAINER_CHAMPION_REMATCH_BULBASAUR, PokemonLeague_ChampionsRoom_EventScript_StopSceneTrigger + return + +PokemonLeague_ChampionsRoom_EventScript_CheckStopTriggerCharmander:: + goto_if_defeated TRAINER_CHAMPION_FIRST_CHARMANDER, PokemonLeague_ChampionsRoom_EventScript_StopSceneTrigger + goto_if_defeated TRAINER_CHAMPION_REMATCH_CHARMANDER, PokemonLeague_ChampionsRoom_EventScript_StopSceneTrigger + return + +PokemonLeague_ChampionsRoom_EventScript_StopSceneTrigger:: + setvar VAR_TEMP_1, 1 + return + +PokemonLeague_ChampionsRoom_OnWarp:: + map_script_2 VAR_TEMP_1, 0, PokemonLeague_ChampionsRoom_EventScript_TurnPlayerNorth + .2byte 0 + +PokemonLeague_ChampionsRoom_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +PokemonLeague_ChampionsRoom_OnFrame:: + map_script_2 VAR_TEMP_1, 0, PokemonLeague_ChampionsRoom_EventScript_EnterRoom + .2byte 0 + +PokemonLeague_ChampionsRoom_EventScript_EnterRoom:: + lockall + textcolor NPC_TEXT_COLOR_MALE + setflag FLAG_TEMP_2 + applymovement LOCALID_PLAYER, PokemonLeague_ChampionsRoom_Movement_PlayerEnter + waitmovement 0 + delay 20 + call_if_unset FLAG_SYS_GAME_CLEAR, PokemonLeague_ChampionsRoom_EventScript_Intro + call_if_set FLAG_SYS_GAME_CLEAR, PokemonLeague_ChampionsRoom_EventScript_RematchIntro + setflag FLAG_TEMP_3 + setflag FLAG_TEMP_5 + savebgm MUS_VICTORY_GYM_LEADER + call_if_unset FLAG_IS_CHAMPION, PokemonLeague_ChampionsRoom_EventScript_Battle + call_if_set FLAG_IS_CHAMPION, PokemonLeague_ChampionsRoom_EventScript_Rematch + setflag FLAG_TEMP_4 + clearflag FLAG_TEMP_5 + setflag FLAG_DEFEATED_CHAMP + setflag FLAG_TEMP_4 + msgbox PokemonLeague_ChampionsRoom_Text_PostBattle + playbgm MUS_RG_SLOW_PALLET, 0 + addobject LOCALID_CHAMPIONS_ROOM_PROF_OAK + msgbox PokemonLeague_ChampionsRoom_Text_OakPlayer + closemessage + applymovement LOCALID_PLAYER, PokemonLeague_ChampionsRoom_Movement_PlayerWatchOakEnter + applymovement LOCALID_KANTO_CHAMPIONS_ROOM_RIVAL, PokemonLeague_ChampionsRoom_Movement_RivalWatchOakEnter + applymovement LOCALID_CHAMPIONS_ROOM_PROF_OAK, PokemonLeague_ChampionsRoom_Movement_OakEnter + waitmovement 0 + delay 25 + specialvar VAR_RESULT, GetStarterPokemon + bufferspeciesname STR_VAR_1, VAR_RESULT + msgbox PokemonLeague_ChampionsRoom_Text_OakCongratulations + applymovement LOCALID_CHAMPIONS_ROOM_PROF_OAK, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_KANTO_CHAMPIONS_ROOM_RIVAL, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + msgbox PokemonLeague_ChampionsRoom_Text_OakImDisappointedRival + closemessage + applymovement LOCALID_CHAMPIONS_ROOM_PROF_OAK, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + delay 20 + msgbox PokemonLeague_ChampionsRoom_Text_OakPlayerComeWithMe + closemessage + delay 13 + applymovement LOCALID_CHAMPIONS_ROOM_PROF_OAK, PokemonLeague_ChampionsRoom_Movement_OakExit + applymovement LOCALID_PLAYER, PokemonLeague_ChampionsRoom_Movement_PlayerExit + waitmovement 0 + setvar VAR_TEMP_1, 1 + warp MAP_POKEMON_LEAGUE_HALL_OF_FAME, 5, 12 + waitstate + releaseall + end + +PokemonLeague_ChampionsRoom_EventScript_QuestLogEnd:: + call PokemonLeague_ChampionsRoom_EventScript_StopSceneTrigger + releaseall + end + +PokemonLeague_ChampionsRoom_EventScript_Battle:: + call_if_eq VAR_STARTER_MON, 2, PokemonLeague_ChampionsRoom_EventScript_BattleSquirtle + call_if_eq VAR_STARTER_MON, 1, PokemonLeague_ChampionsRoom_EventScript_BattleBulbasaur + call_if_eq VAR_STARTER_MON, 0, PokemonLeague_ChampionsRoom_EventScript_BattleCharmander + return + +PokemonLeague_ChampionsRoom_EventScript_Rematch:: + call_if_eq VAR_STARTER_MON, 2, PokemonLeague_ChampionsRoom_EventScript_RematchSquirtle + call_if_eq VAR_STARTER_MON, 1, PokemonLeague_ChampionsRoom_EventScript_RematchBulbasaur + call_if_eq VAR_STARTER_MON, 0, PokemonLeague_ChampionsRoom_EventScript_RematchCharmander + return + +PokemonLeague_ChampionsRoom_EventScript_Intro:: + msgbox PokemonLeague_ChampionsRoom_Text_Intro + return + +PokemonLeague_ChampionsRoom_EventScript_RematchIntro:: + msgbox PokemonLeague_ChampionsRoom_Text_RematchIntro + return + +PokemonLeague_ChampionsRoom_EventScript_BattleSquirtle:: + trainerbattle_no_intro TRAINER_CHAMPION_FIRST_SQUIRTLE, PokemonLeague_ChampionsRoom_Text_Defeat + return + +PokemonLeague_ChampionsRoom_EventScript_BattleBulbasaur:: + trainerbattle_no_intro TRAINER_CHAMPION_FIRST_BULBASAUR, PokemonLeague_ChampionsRoom_Text_Defeat + return + +PokemonLeague_ChampionsRoom_EventScript_BattleCharmander:: + trainerbattle_no_intro TRAINER_CHAMPION_FIRST_CHARMANDER, PokemonLeague_ChampionsRoom_Text_Defeat + return + +PokemonLeague_ChampionsRoom_EventScript_RematchSquirtle:: + trainerbattle_no_intro TRAINER_CHAMPION_REMATCH_SQUIRTLE, PokemonLeague_ChampionsRoom_Text_Defeat + return + +PokemonLeague_ChampionsRoom_EventScript_RematchBulbasaur:: + trainerbattle_no_intro TRAINER_CHAMPION_REMATCH_BULBASAUR, PokemonLeague_ChampionsRoom_Text_Defeat + return + +PokemonLeague_ChampionsRoom_EventScript_RematchCharmander:: + trainerbattle_no_intro TRAINER_CHAMPION_REMATCH_CHARMANDER, PokemonLeague_ChampionsRoom_Text_Defeat + return + +PokemonLeague_ChampionsRoom_Movement_PlayerEnter:: + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +PokemonLeague_ChampionsRoom_Movement_PlayerExit:: + delay_16 + walk_left + walk_up + walk_up + walk_up + walk_right + walk_up + walk_up + walk_up + walk_up + delay_8 + set_invisible + step_end + +PokemonLeague_ChampionsRoom_Movement_PlayerWatchOakEnter:: + delay_8 + walk_in_place_faster_down + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + walk_in_place_faster_left + step_end + +PokemonLeague_ChampionsRoom_Movement_OakEnter:: + delay_16 + delay_16 + walk_up + walk_up + walk_up + walk_up + walk_up + walk_left + walk_up + walk_up + walk_in_place_faster_down + delay_16 + step_end + +PokemonLeague_ChampionsRoom_Movement_OakExit:: + walk_up + walk_up + walk_right + walk_up + walk_up + walk_up + walk_up + delay_8 + set_invisible + step_end + +PokemonLeague_ChampionsRoom_Movement_RivalWatchOakEnter:: + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + walk_in_place_faster_left + step_end + +PokemonLeague_ChampionsRoom_Text_Intro:: + .string "{RIVAL}: Hey, {PLAYER}!\p" + .string "I was looking forward to seeing\n" + .string "you, {PLAYER}.\p" + .string "My rival should be strong to keep\n" + .string "me sharp.\p" + .string "While working on my POKéDEX, I\n" + .string "looked all over for POKéMON.\p" + .string "Not only that, I assembled teams\n" + .string "that would beat any POKéMON type.\p" + .string "And now…\p" + .string "I'm the POKéMON LEAGUE CHAMPION!\p" + .string "{PLAYER}!\n" + .string "Do you know what that means?\p" + .string "I'll tell you.\p" + .string "I am the most powerful TRAINER in\n" + .string "the world!$" + +PokemonLeague_ChampionsRoom_Text_RematchIntro:: + .string "{RIVAL}: Hey, {PLAYER}!\p" + .string "You came back, {PLAYER}!\n" + .string "Hahah, that is so great!\p" + .string "My rival should be strong to keep\n" + .string "me sharp.\p" + .string "While working on my POKéDEX, I\n" + .string "looked all over for POKéMON.\p" + .string "Not only that, I assembled teams\n" + .string "that would beat any POKéMON type.\p" + .string "And now…\p" + .string "I'm the POKéMON LEAGUE CHAMPION!\p" + .string "{PLAYER}!\n" + .string "Do you know what that means?\p" + .string "I'll tell you.\p" + .string "I am the most powerful TRAINER in\n" + .string "the world!$" + +PokemonLeague_ChampionsRoom_Text_Defeat:: + .string "NO!\n" + .string "That can't be!\l" + .string "You beat me at my best!\p" + .string "After all that work to become\n" + .string "the LEAGUE CHAMP?\p" + .string "My reign is over already?\n" + .string "It's not fair!$" + +PokemonLeague_ChampionsRoom_Text_Victory:: + .string "はーはッ!\n" + .string "かった! かった! かった!\p" + .string "{PLAYER}に まける ような\n" + .string "おれさま では なーい!\p" + .string "ま! ポケモンの\n" + .string "てんさい {RIVAL}さま あいてに\l" + .string "ここまで よく がんばった!\p" + .string "ほめて つかわす!\n" + .string "はーッ! はーはッはッ!$" + +PokemonLeague_ChampionsRoom_Text_PostBattle:: + .string "Why?\n" + .string "Why did I lose?\p" + .string "I never made any mistakes raising\n" + .string "my POKéMON…\p" + .string "Darn it! You're the new POKéMON\n" + .string "LEAGUE CHAMPION!\p" + .string "Although I don't like to admit it…$" + +PokemonLeague_ChampionsRoom_Text_OakPlayer:: + .string "OAK: {PLAYER}!$" + +PokemonLeague_ChampionsRoom_Text_OakCongratulations:: + .string "OAK: So, you've won!\n" + .string "Sincerely, congratulations!\p" + .string "You're the new POKéMON LEAGUE\n" + .string "CHAMPION!\p" + .string "You've grown up so much since you\n" + .string "first left with {STR_VAR_1} to work\l" + .string "on the POKéDEX.\p" + .string "{PLAYER}, you have come of age!$" + +PokemonLeague_ChampionsRoom_Text_OakImDisappointedRival:: + .string "OAK: {RIVAL}…\n" + .string "I'm disappointed in you.\p" + .string "I came when I heard you'd beaten\n" + .string "the ELITE FOUR.\p" + .string "But, when I got here, you had\n" + .string "already lost!\p" + .string "{RIVAL}, do you understand why\n" + .string "you lost?\p" + .string "You have forgotten to treat your\n" + .string "POKéMON with love and trust.\p" + .string "Without them, you will never\n" + .string "become a CHAMP again!$" + +PokemonLeague_ChampionsRoom_Text_OakPlayerComeWithMe:: + .string "OAK: {PLAYER}.\p" + .string "You understand that your victory\n" + .string "was not just your own doing.\p" + .string "The bond you share with your\n" + .string "POKéMON is marvelous.\p" + .string "{PLAYER}!\n" + .string "Come with me!$" + diff --git a/data/maps/PokemonLeague_HallOfFame/scripts.inc b/data/maps/PokemonLeague_HallOfFame/scripts.inc new file mode 100644 index 000000000000..a4ea462b5b88 --- /dev/null +++ b/data/maps/PokemonLeague_HallOfFame/scripts.inc @@ -0,0 +1,70 @@ +PokemonLeague_HallOfFame_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, PokemonLeague_HallOfFame_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, PokemonLeague_HallOfFame_OnWarp + .byte 0 + +PokemonLeague_HallOfFame_OnWarp:: + map_script_2 VAR_TEMP_1, 0, PokemonLeague_HallOfFame_EventScript_TurnPlayerNorth + .2byte 0 + +PokemonLeague_HallOfFame_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +PokemonLeague_HallOfFame_OnFrame:: + map_script_2 VAR_TEMP_1, 0, PokemonLeague_HallOfFame_EventScript_EnterRoom + .2byte 0 + +PokemonLeague_HallOfFame_EventScript_EnterRoom:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, PokemonLeague_HallOfFame_Movement_EnterRoom + waitmovement 0 + applymovement LOCALID_HALL_OF_FAME_PROF_OAK, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + delay 18 + msgbox PokemonLeague_HallOfFame_Text_OakCongratulations + closemessage + applymovement LOCALID_HALL_OF_FAME_PROF_OAK, Common_Movement_WalkInPlaceFasterUp + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + delay 20 + dofieldeffect FLDEFF_HALL_OF_FAME_RECORD_FRLG + waitfieldeffect FLDEFF_HALL_OF_FAME_RECORD_FRLG + delay 40 + setvar VAR_TEMP_1, 1 + call EventScript_SetDefeatedEliteFourFlagsVars + setrespawn HEAL_LOCATION_PALLET_TOWN + fadescreenspeed FADE_TO_BLACK, 24 + special EnterHallOfFame + waitstate + releaseall + end + +PokemonLeague_HallOfFame_Movement_EnterRoom:: + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +PokemonLeague_HallOfFame_Text_OakCongratulations:: + .string "OAK: Er-hem!\n" + .string "Congratulations, {PLAYER}!\p" + .string "This floor is the POKéMON HALL OF\n" + .string "FAME.\p" + .string "POKéMON LEAGUE CHAMPIONS are\n" + .string "honored for their exploits here.\p" + .string "Their POKéMON are also recorded in\n" + .string "the HALL OF FAME.\p" + .string "{PLAYER}!\p" + .string "You have worked hard to become\n" + .string "the new LEAGUE CHAMPION.\p" + .string "Congratulations, {PLAYER}, you and\n" + .string "your POKéMON are HALL OF FAMERS!$" + diff --git a/data/maps/PokemonLeague_LancesRoom/scripts.inc b/data/maps/PokemonLeague_LancesRoom/scripts.inc new file mode 100644 index 000000000000..2d9ea8a6c1f3 --- /dev/null +++ b/data/maps/PokemonLeague_LancesRoom/scripts.inc @@ -0,0 +1,218 @@ +PokemonLeague_LancesRoom_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, PokemonLeague_LancesRoom_OnResume + map_script MAP_SCRIPT_ON_LOAD, PokemonLeague_LancesRoom_OnLoad + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, PokemonLeague_LancesRoom_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, PokemonLeague_LancesRoom_OnFrame + .byte 0 + +PokemonLeague_LancesRoom_OnResume:: + setvar VAR_0x8004, 3 + call PokemonLeague_EventScript_DoLightingEffect + end + +PokemonLeague_LancesRoom_OnLoad:: + call_if_eq VAR_MAP_SCENE_POKEMON_LEAGUE, 4, PokemonLeague_LancesRoom_EventScript_CloseEntry + call_if_set FLAG_DEFEATED_LANCE, PokemonLeague_LancesRoom_EventScript_SetDoorOpen + end + +PokemonLeague_LancesRoom_EventScript_CloseEntry:: + call PokemonLeague_LancesRoom_EventScript_SetEntryClosed + return + +PokemonLeague_LancesRoom_EventScript_SetDoorOpen:: + call PokemonLeague_EventScript_SetDoorOpenLance + return + +PokemonLeague_LancesRoom_OnWarp:: + map_script_2 VAR_TEMP_1, 0, PokemonLeague_LancesRoom_EventScript_TurnPlayerNorth + .2byte 0 + +PokemonLeague_LancesRoom_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +PokemonLeague_LancesRoom_OnFrame:: + map_script_2 VAR_MAP_SCENE_POKEMON_LEAGUE, 3, PokemonLeague_LancesRoom_EventScript_EnterRoom + .2byte 0 + +PokemonLeague_LancesRoom_EventScript_EnterRoom:: + lockall + applymovement LOCALID_PLAYER, PokemonLeague_LancesRoom_Movement_WalkThroughCorridor + waitmovement 0 + setflag FLAG_TEMP_2 + call PokemonLeague_LancesRoom_EventScript_SetEntryClosed + playse SE_UNLOCK + special DrawWholeMapView + waitse + setvar VAR_MAP_SCENE_POKEMON_LEAGUE, 4 + releaseall + end + +PokemonLeague_LancesRoom_EventScript_SetEntryClosed:: + setmetatile 5, 14, METATILE_PokemonLeague_Entry_TopLeft_Closed, 1 + setmetatile 6, 14, METATILE_PokemonLeague_Entry_TopMid_Closed, 1 + setmetatile 7, 14, METATILE_PokemonLeague_Entry_TopRight_Closed, 1 + setmetatile 5, 15, METATILE_PokemonLeague_Entry_BottomLeft_Closed, 1 + setmetatile 6, 15, METATILE_PokemonLeague_Entry_BottomMid_Closed, 1 + setmetatile 7, 15, METATILE_PokemonLeague_Entry_BottomRight_Closed, 1 + setmetatile 6, 16, METATILE_PokemonLeague_Floor_ShadeFull_Lance, 0 + setmetatile 7, 16, METATILE_PokemonLeague_Floor_ShadeFull_Lance, 0 + return + +PokemonLeague_LancesRoom_Movement_WalkThroughCorridor:: + walk_up + walk_up + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +PokemonLeague_LancesRoom_EventScript_Lance:: + lock + faceplayer + famechecker FAMECHECKER_LANCE, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + goto_if_set FLAG_DEFEATED_LANCE, PokemonLeague_LancesRoom_EventScript_PostBattle + famechecker FAMECHECKER_LANCE, 0 + famechecker FAMECHECKER_LANCE, 1 + call_if_unset FLAG_SYS_GAME_CLEAR, PokemonLeague_LancesRoom_EventScript_Intro + call_if_set FLAG_SYS_GAME_CLEAR, PokemonLeague_LancesRoom_EventScript_RematchIntro + setflag FLAG_TEMP_3 + setflag FLAG_TEMP_5 + call_if_unset FLAG_IS_CHAMPION, PokemonLeague_LancesRoom_EventScript_Battle + call_if_set FLAG_IS_CHAMPION, PokemonLeague_LancesRoom_EventScript_Rematch + clearflag FLAG_TEMP_5 + goto PokemonLeague_LancesRoom_EventScript_DefeatedLance + end + +PokemonLeague_LancesRoom_EventScript_Intro:: + msgbox PokemonLeague_LancesRoom_Text_Intro + return + +PokemonLeague_LancesRoom_EventScript_RematchIntro:: + msgbox PokemonLeague_LancesRoom_Text_RematchIntro + return + +PokemonLeague_LancesRoom_EventScript_Battle:: + trainerbattle_no_intro TRAINER_ELITE_FOUR_LANCE, PokemonLeague_LancesRoom_Text_Defeat + return + +PokemonLeague_LancesRoom_EventScript_Rematch:: + trainerbattle_no_intro TRAINER_ELITE_FOUR_LANCE_2, PokemonLeague_LancesRoom_Text_Defeat + return + +PokemonLeague_LancesRoom_EventScript_PostBattle:: + msgbox PokemonLeague_LancesRoom_Text_PostBattle + release + end + +PokemonLeague_LancesRoom_EventScript_DefeatedLance:: + setvar VAR_0x8004, 0 + special Script_TryGainNewFanFromCounterFrlg + setflag FLAG_DEFEATED_LANCE + call PokemonLeague_EventScript_OpenDoorLance + msgbox PokemonLeague_LancesRoom_Text_PostBattle + closemessage + release + end + +PokemonLeague_LancesRoom_EventScript_LanceMoveOutOfWayLeft:: + applymovement LOCALID_LANCE, PokemonLeague_LancesRoom_Movement_LanceMoveOutOfWayLeft + waitmovement 0 + return + +PokemonLeague_LancesRoom_EventScript_LanceMoveOutOfWayRight:: + applymovement LOCALID_LANCE, PokemonLeague_LancesRoom_Movement_LanceMoveOutOfWayRight + waitmovement 0 + return + +PokemonLeague_LancesRoom_Movement_LanceMoveOutOfWayLeft:: + walk_left + walk_in_place_faster_right + step_end + +PokemonLeague_LancesRoom_Movement_LanceMoveOutOfWayRight:: + walk_right + walk_in_place_faster_left + step_end + +PokemonLeague_LancesRoom_Text_Intro:: + .string "Ah! I've heard about you,\n" + .string "{PLAYER}!\p" + .string "I lead the ELITE FOUR.\p" + .string "You can call me LANCE the dragon\n" + .string "TRAINER.\p" + .string "You know that dragons are\n" + .string "mythical POKéMON.\p" + .string "They're hard to catch and raise,\n" + .string "but their powers are superior.\p" + .string "They're virtually indestructible.\n" + .string "There's no being clever with them.\p" + .string "Well, are you ready to lose?\p" + .string "Your LEAGUE challenge ends with\n" + .string "me, {PLAYER}!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PokemonLeague_LancesRoom_Text_RematchIntro:: + .string "Ah!\n" + .string "So, you've returned, {PLAYER}!\p" + .string "I lead the ELITE FOUR.\p" + .string "You can call me LANCE the dragon\n" + .string "TRAINER.\p" + .string "You know that dragons are\n" + .string "mythical POKéMON.\p" + .string "They're hard to catch and raise,\n" + .string "but their powers are superior.\p" + .string "They're virtually indestructible.\n" + .string "There's no being clever with them.\p" + .string "Well, are you ready to lose?\p" + .string "Your LEAGUE challenge ends with\n" + .string "me, {PLAYER}!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PokemonLeague_LancesRoom_Text_Defeat:: + .string "That's it!\p" + .string "I hate to admit it, but you are a\n" + .string "POKéMON master!$" + +PokemonLeague_LancesRoom_Text_PostBattle:: + .string "I still can't believe my dragons\n" + .string "lost to you, {PLAYER}.\p" + .string "You are now the POKéMON LEAGUE\n" + .string "CHAMPION!\p" + .string "…Or, you would have been, but\n" + .string "you have one more challenge left.\p" + .string "There is one more TRAINER to face!\n" + .string "His name is…\p" + .string "{RIVAL}!\p" + .string "He beat the ELITE FOUR before\n" + .string "you.\p" + .string "He is the real POKéMON LEAGUE\n" + .string "CHAMPION.$" + diff --git a/data/maps/PokemonLeague_LoreleisRoom/scripts.inc b/data/maps/PokemonLeague_LoreleisRoom/scripts.inc new file mode 100644 index 000000000000..7e17d18535b5 --- /dev/null +++ b/data/maps/PokemonLeague_LoreleisRoom/scripts.inc @@ -0,0 +1,127 @@ +PokemonLeague_LoreleisRoom_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, PokemonLeague_LoreleisRoom_OnResume + map_script MAP_SCRIPT_ON_LOAD, PokemonLeague_LoreleisRoom_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, PokemonLeague_LoreleisRoom_OnTransition + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, PokemonLeague_LoreleisRoom_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, PokemonLeague_LoreleisRoom_OnFrame + .byte 0 + +PokemonLeague_LoreleisRoom_OnResume:: + setvar VAR_0x8004, 0 + call PokemonLeague_EventScript_DoLightingEffect + end + +PokemonLeague_LoreleisRoom_OnLoad:: + call_if_set FLAG_DEFEATED_LORELEI, PokemonLeague_LoreleisRoom_EventScript_SetDoorOpen + call_if_eq VAR_MAP_SCENE_POKEMON_LEAGUE, 1, PokemonLeague_LoreleisRoom_EventScript_CloseEntry + end + +PokemonLeague_LoreleisRoom_EventScript_CloseEntry:: + call PokemonLeague_EventScript_CloseEntry + return + +PokemonLeague_LoreleisRoom_EventScript_SetDoorOpen:: + call PokemonLeague_EventScript_SetDoorOpen + return + +PokemonLeague_LoreleisRoom_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_POKEMON_LEAGUE_LORELEIS_ROOM + end + +PokemonLeague_LoreleisRoom_OnWarp:: + map_script_2 VAR_TEMP_1, 0, PokemonLeague_LoreleisRoom_EventScript_TurnPlayerNorth + .2byte 0 + +PokemonLeague_LoreleisRoom_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +PokemonLeague_LoreleisRoom_OnFrame:: + map_script_2 VAR_MAP_SCENE_POKEMON_LEAGUE, 0, PokemonLeague_LoreleisRoom_EventScript_EnterRoom + .2byte 0 + +PokemonLeague_LoreleisRoom_EventScript_EnterRoom:: + lockall + call PokemonLeague_EventScript_EnterRoom + setvar VAR_MAP_SCENE_POKEMON_LEAGUE, 1 + releaseall + end + +PokemonLeague_LoreleisRoom_EventScript_Lorelei:: + lock + faceplayer + famechecker FAMECHECKER_LORELEI, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + goto_if_set FLAG_DEFEATED_LORELEI, PokemonLeague_LoreleisRoom_EventScript_PostBattle + famechecker FAMECHECKER_LORELEI, 0 + famechecker FAMECHECKER_LORELEI, 1 + call_if_unset FLAG_IS_CHAMPION, PokemonLeague_LoreleisRoom_EventScript_Intro + call_if_set FLAG_IS_CHAMPION, PokemonLeague_LoreleisRoom_EventScript_RematchIntro + setflag FLAG_TEMP_3 + setflag FLAG_TEMP_5 + call_if_unset FLAG_IS_CHAMPION, PokemonLeague_LoreleisRoom_EventScript_Battle + call_if_set FLAG_IS_CHAMPION, PokemonLeague_LoreleisRoom_EventScript_Rematch + clearflag FLAG_TEMP_5 + goto PokemonLeague_LoreleisRoom_EventScript_DefeatedLorelei + end + +PokemonLeague_LoreleisRoom_EventScript_Intro:: + msgbox PokemonLeague_LoreleisRoom_Text_Intro + return + +PokemonLeague_LoreleisRoom_EventScript_RematchIntro:: + msgbox PokemonLeague_LoreleisRoom_Text_RematchIntro + return + +PokemonLeague_LoreleisRoom_EventScript_Battle:: + trainerbattle_no_intro TRAINER_ELITE_FOUR_LORELEI, PokemonLeague_LoreleisRoom_Text_Defeat + return + +PokemonLeague_LoreleisRoom_EventScript_Rematch:: + trainerbattle_no_intro TRAINER_ELITE_FOUR_LORELEI_2, PokemonLeague_LoreleisRoom_Text_Defeat + return + +PokemonLeague_LoreleisRoom_EventScript_PostBattle:: + msgbox PokemonLeague_LoreleisRoom_Text_PostBattle + release + end + +PokemonLeague_LoreleisRoom_EventScript_DefeatedLorelei:: + setflag FLAG_DEFEATED_LORELEI + call PokemonLeague_EventScript_OpenDoor + msgbox PokemonLeague_LoreleisRoom_Text_PostBattle + release + end + +PokemonLeague_LoreleisRoom_Text_Intro:: + .string "Welcome to the POKéMON LEAGUE.\p" + .string "I am LORELEI of the ELITE FOUR.\p" + .string "No one can best me when it comes\n" + .string "to icy POKéMON.\p" + .string "Freezing moves are powerful.\p" + .string "Your POKéMON will be at my mercy\n" + .string "when they are frozen solid.\p" + .string "Hahaha!\n" + .string "Are you ready?{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PokemonLeague_LoreleisRoom_Text_RematchIntro:: + .string "Welcome to the POKéMON LEAGUE.\p" + .string "I, LORELEI of the ELITE FOUR,\n" + .string "have returned!\p" + .string "You know how it goes.\n" + .string "No one can best me when it comes\l" + .string "to icy POKéMON.\p" + .string "Freezing moves are powerful.\p" + .string "Your POKéMON will be at my mercy\n" + .string "when they are frozen solid.\p" + .string "Hahaha!\n" + .string "Are you ready?{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +PokemonLeague_LoreleisRoom_Text_Defeat:: + .string "…Things shouldn't be this way!$" + +PokemonLeague_LoreleisRoom_Text_PostBattle:: + .string "You're better than I thought.\n" + .string "Go on ahead.\p" + .string "You only got a taste of the\n" + .string "POKéMON LEAGUE's power.$" + diff --git a/data/maps/PokemonMansion_1F/scripts.inc b/data/maps/PokemonMansion_1F/scripts.inc new file mode 100644 index 000000000000..b767e6049279 --- /dev/null +++ b/data/maps/PokemonMansion_1F/scripts.inc @@ -0,0 +1,57 @@ +PokemonMansion_1F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, PokemonMansion_1F_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, PokemonMansion_1F_OnTransition + .byte 0 + +PokemonMansion_1F_OnLoad:: + call_if_set FLAG_POKEMON_MANSION_SWITCH_STATE, PokemonMansion_EventScript_PressSwitch_1F + end + +PokemonMansion_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_POKEMON_MANSION_1F + end + +PokemonMansion_1F_EventScript_Statue:: + lockall + setvar VAR_0x8004, 0 + call PokemonMansion_EventScript_SecretSwitch + playse SE_UNLOCK + special DrawWholeMapView + waitse + releaseall + end + +PokemonMansion_1F_EventScript_Ted:: + trainerbattle_single TRAINER_SCIENTIST_TED, PokemonMansion_1F_Text_TedIntro, PokemonMansion_1F_Text_TedDefeat + msgbox PokemonMansion_1F_Text_TedPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonMansion_1F_EventScript_Johnson:: + trainerbattle_single TRAINER_YOUNGSTER_JOHNSON, PokemonMansion_1F_Text_JohnsonIntro, PokemonMansion_1F_Text_JohnsonDefeat + msgbox PokemonMansion_1F_Text_JohnsonPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonMansion_1F_Text_TedIntro:: + .string "Who are you?\n" + .string "There shouldn't be anyone here.$" + +PokemonMansion_1F_Text_TedDefeat:: + .string "Ouch!$" + +PokemonMansion_1F_Text_TedPostBattle:: + .string "A key? I don't know what you're\n" + .string "talking about.$" + +PokemonMansion_1F_Text_JohnsonIntro:: + .string "W-w-waah! You startled me!\n" + .string "I thought you were a ghost.$" + +PokemonMansion_1F_Text_JohnsonDefeat:: + .string "Tch!\n" + .string "I can't get any wins.$" + +PokemonMansion_1F_Text_JohnsonPostBattle:: + .string "I was exploring here by myself,\n" + .string "but I feel spooked.\p" + .string "I ought to go soon.$" + diff --git a/data/maps/PokemonMansion_2F/scripts.inc b/data/maps/PokemonMansion_2F/scripts.inc new file mode 100644 index 000000000000..674c1810c395 --- /dev/null +++ b/data/maps/PokemonMansion_2F/scripts.inc @@ -0,0 +1,64 @@ +PokemonMansion_2F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, PokemonMansion_2F_OnLoad + .byte 0 + +PokemonMansion_2F_OnLoad:: + call_if_set FLAG_POKEMON_MANSION_SWITCH_STATE, PokemonMansion_EventScript_PressSwitch_2F + end + +PokemonMansion_2F_EventScript_Statue:: + lockall + setvar VAR_0x8004, 1 + call PokemonMansion_EventScript_SecretSwitch + playse SE_UNLOCK + special DrawWholeMapView + waitse + releaseall + end + +PokemonMansion_2F_EventScript_DiaryJuly5th:: + msgbox PokemonMansion_1F_Text_NewMonDiscoveredInGuyanaJungle, MSGBOX_SIGN + end + +PokemonMansion_2F_EventScript_DiaryJuly10th:: + msgbox PokemonMansion_1F_Text_ChristenedDiscoveredMonMew, MSGBOX_SIGN + end + +PokemonMansion_2F_EventScript_Arnie:: + trainerbattle_single TRAINER_BURGLAR_ARNIE, PokemonMansion_1F_Text_ArnieIntro, PokemonMansion_1F_Text_ArnieDefeat + msgbox PokemonMansion_1F_Text_ArniePostBattle, MSGBOX_AUTOCLOSE + end + +PokemonMansion_Text_PressSecretSwitch:: + .string "A secret switch!\p" + .string "Press it?$" + +PokemonMansion_Text_WhoWouldnt:: + .string "Who wouldn't?$" + +PokemonMansion_Text_NotQuiteYet:: + .string "Not quite yet!$" + +PokemonMansion_1F_Text_ArnieIntro:: + .string "I can't get out!\n" + .string "This old place is one big puzzle.$" + +PokemonMansion_1F_Text_ArnieDefeat:: + .string "Oh, no!\n" + .string "My bag of loot!$" + +PokemonMansion_1F_Text_ArniePostBattle:: + .string "The switches here open and close\n" + .string "alternating sets of doors.$" + +PokemonMansion_1F_Text_NewMonDiscoveredInGuyanaJungle:: + .string "Diary: July 5\n" + .string "Guyana, South America\p" + .string "A new POKéMON was discovered deep\n" + .string "in the jungle.$" + +PokemonMansion_1F_Text_ChristenedDiscoveredMonMew:: + .string "Diary: July 10\n" + .string "We christened the newly discovered\l" + .string "POKéMON, MEW.$" + diff --git a/data/maps/PokemonMansion_3F/scripts.inc b/data/maps/PokemonMansion_3F/scripts.inc new file mode 100644 index 000000000000..c41cf3ccc9bb --- /dev/null +++ b/data/maps/PokemonMansion_3F/scripts.inc @@ -0,0 +1,57 @@ +PokemonMansion_3F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, PokemonMansion_3F_OnLoad + .byte 0 + +PokemonMansion_3F_OnLoad:: + call_if_set FLAG_POKEMON_MANSION_SWITCH_STATE, PokemonMansion_EventScript_PressSwitch_3F + end + +PokemonMansion_3F_EventScript_Statue:: + lockall + setvar VAR_0x8004, 2 + call PokemonMansion_EventScript_SecretSwitch + playse SE_UNLOCK + special DrawWholeMapView + waitse + releaseall + end + +PokemonMansion_3F_EventScript_DiaryFeb6th:: + msgbox PokemonMansion_1F_Text_MewGaveBirthToMewtwo, MSGBOX_SIGN + end + +PokemonMansion_3F_EventScript_Simon:: + trainerbattle_single TRAINER_BURGLAR_SIMON, PokemonMansion_1F_Text_SimonIntro, PokemonMansion_1F_Text_SimonDefeat + msgbox PokemonMansion_1F_Text_SimonPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonMansion_3F_EventScript_Braydon:: + trainerbattle_single TRAINER_SCIENTIST_BRAYDON, PokemonMansion_1F_Text_BraydonIntro, PokemonMansion_1F_Text_BraydonDefeat + msgbox PokemonMansion_1F_Text_BraydonPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonMansion_1F_Text_SimonIntro:: + .string "This place is, like, huge!$" + +PokemonMansion_1F_Text_SimonDefeat:: + .string "Ayah!$" + +PokemonMansion_1F_Text_SimonPostBattle:: + .string "I wonder where my partner went.$" + +PokemonMansion_1F_Text_BraydonIntro:: + .string "My mentor once lived here.$" + +PokemonMansion_1F_Text_BraydonDefeat:: + .string "Whew!\n" + .string "Overwhelming!$" + +PokemonMansion_1F_Text_BraydonPostBattle:: + .string "So, you're stuck?\n" + .string "Try jumping off over there!$" + +PokemonMansion_1F_Text_MewGaveBirthToMewtwo:: + .string "Diary: Feb. 6\n" + .string "MEW gave birth.\p" + .string "We named the newborn MEWTWO.$" + diff --git a/data/maps/PokemonMansion_B1F/scripts.inc b/data/maps/PokemonMansion_B1F/scripts.inc new file mode 100644 index 000000000000..f05460f23c37 --- /dev/null +++ b/data/maps/PokemonMansion_B1F/scripts.inc @@ -0,0 +1,60 @@ +PokemonMansion_B1F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, PokemonMansion_B1F_OnLoad + .byte 0 + +PokemonMansion_B1F_OnLoad:: + call_if_set FLAG_POKEMON_MANSION_SWITCH_STATE, PokemonMansion_EventScript_PressSwitch_B1F + end + +PokemonMansion_B1F_EventScript_Statue:: + lockall + setvar VAR_0x8004, 3 + call PokemonMansion_EventScript_SecretSwitch + playse SE_UNLOCK + special DrawWholeMapView + waitse + releaseall + end + +PokemonMansion_B1F_EventScript_DiarySep1st:: + msgbox PokemonMansion_B1F_Text_MewtwoIsFarTooPowerful, MSGBOX_SIGN + end + +PokemonMansion_B1F_EventScript_Lewis:: + trainerbattle_single TRAINER_BURGLAR_LEWIS, PokemonMansion_B1F_Text_LewisIntro, PokemonMansion_B1F_Text_LewisDefeat + msgbox PokemonMansion_B1F_Text_LewisPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonMansion_B1F_EventScript_Ivan:: + trainerbattle_single TRAINER_SCIENTIST_IVAN, PokemonMansion_B1F_Text_IvanIntro, PokemonMansion_B1F_Text_IvanDefeat + msgbox PokemonMansion_B1F_Text_IvanPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonMansion_B1F_Text_LewisIntro:: + .string "Uh-oh…\n" + .string "Where am I now?$" + +PokemonMansion_B1F_Text_LewisDefeat:: + .string "Awooh!$" + +PokemonMansion_B1F_Text_LewisPostBattle:: + .string "You can find stuff lying around.\n" + .string "The residents must've left them.$" + +PokemonMansion_B1F_Text_IvanIntro:: + .string "This place is ideal for a lab.\n" + .string "Look at all this space.$" + +PokemonMansion_B1F_Text_IvanDefeat:: + .string "What was that for?$" + +PokemonMansion_B1F_Text_IvanPostBattle:: + .string "I like it here.\n" + .string "It's conducive to my studies.$" + +PokemonMansion_B1F_Text_MewtwoIsFarTooPowerful:: + .string "Diary: Sept. 1\n" + .string "MEWTWO is far too powerful.\p" + .string "We have failed to curb its vicious\n" + .string "tendencies…$" + diff --git a/data/maps/PokemonTower_1F/scripts.inc b/data/maps/PokemonTower_1F/scripts.inc new file mode 100644 index 000000000000..4dc8d6a6fad6 --- /dev/null +++ b/data/maps/PokemonTower_1F/scripts.inc @@ -0,0 +1,67 @@ +PokemonTower_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, PokemonTower_1F_OnTransition + .byte 0 + +PokemonTower_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_POKEMON_TOWER_1F + end + +PokemonTower_1F_EventScript_Channeler:: + msgbox PokemonTower_1F_Text_SenseSpiritsUpToMischief, MSGBOX_NPC + end + +PokemonTower_1F_EventScript_Woman1:: + msgbox PokemonTower_1F_Text_GrowlitheWhyDidYouDie, MSGBOX_NPC + end + +PokemonTower_1F_EventScript_BaldingMan:: + msgbox PokemonTower_1F_Text_CameToPrayForDepartedClefairy, MSGBOX_NPC + end + +PokemonTower_1F_EventScript_Woman2:: + lock + faceplayer + checkplayergender + goto_if_eq VAR_RESULT, MALE, PokemonTower_1F_EventScript_Woman2MalePlayer + msgbox PokemonTower_1F_Text_ComeToPayRespectsGirl + release + end + +PokemonTower_1F_EventScript_Woman2MalePlayer:: + msgbox PokemonTower_1F_Text_ComeToPayRespectsSon + release + end + +PokemonTower_1F_EventScript_WorkerF:: + msgbox PokemonTower_1F_Text_ErectedInMemoryOfDeadMons, MSGBOX_NPC + end + +PokemonTower_1F_Text_ErectedInMemoryOfDeadMons:: + .string "POKéMON TOWER was erected in the\n" + .string "memory of POKéMON that died.$" + +PokemonTower_1F_Text_ComeToPayRespectsSon:: + .string "Did you come to pay respects?\p" + .string "Bless your POKéMON-loving heart,\n" + .string "son.$" + +PokemonTower_1F_Text_ComeToPayRespectsGirl:: + .string "Did you come to pay respects?\p" + .string "Bless your POKéMON-loving heart,\n" + .string "girl.$" + +PokemonTower_1F_Text_CameToPrayForDepartedClefairy:: + .string "I came to pray for my dearly\n" + .string "departed CLEFAIRY.\p" + .string "Sniff!\n" + .string "I'm awash in tears…$" + +PokemonTower_1F_Text_GrowlitheWhyDidYouDie:: + .string "My GROWLITHE…\n" + .string "Why did you die?$" + +PokemonTower_1F_Text_SenseSpiritsUpToMischief:: + .string "I am a CHANNELER.\p" + .string "There are spirits up to mischief.\n" + .string "I sense them high in the TOWER.$" + diff --git a/data/maps/PokemonTower_2F/scripts.inc b/data/maps/PokemonTower_2F/scripts.inc new file mode 100644 index 000000000000..f94e75245181 --- /dev/null +++ b/data/maps/PokemonTower_2F/scripts.inc @@ -0,0 +1,132 @@ +PokemonTower_2F_MapScripts:: + .byte 0 + +PokemonTower_2F_EventScript_Channeler:: + msgbox PokemonTower_2F_Text_SilphScopeCouldUnmaskGhosts, MSGBOX_NPC + end + +PokemonTower_2F_EventScript_RivalTriggerRight:: + lockall + setvar VAR_TEMP_1, 0 + goto PokemonTower_2F_EventScript_Rival + end + +PokemonTower_2F_EventScript_RivalTriggerDown:: + lockall + setvar VAR_TEMP_1, 1 + goto PokemonTower_2F_EventScript_Rival + end + +PokemonTower_2F_EventScript_Rival:: + textcolor NPC_TEXT_COLOR_MALE + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + call_if_eq VAR_TEMP_1, 0, PokemonTower_2F_EventScript_RivalFacePlayerRight + call_if_eq VAR_TEMP_1, 1, PokemonTower_2F_EventScript_RivalFacePlayerDown + applymovement LOCALID_POKEMON_TOWER_RIVAL, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_POKEMON_TOWER_RIVAL, Common_Movement_Delay48 + waitmovement 0 + msgbox PokemonTower_2F_Text_RivalIntro + setvar VAR_LAST_TALKED, LOCALID_POKEMON_TOWER_RIVAL + call_if_eq VAR_STARTER_MON, 2, PokemonTower_2F_EventScript_RivalSquirtle + call_if_eq VAR_STARTER_MON, 1, PokemonTower_2F_EventScript_RivalBulbasaur + call_if_eq VAR_STARTER_MON, 0, PokemonTower_2F_EventScript_RivalCharmander + msgbox PokemonTower_2F_Text_RivalPostBattle + closemessage + playbgm MUS_RG_RIVAL_EXIT, 0 + call_if_eq VAR_TEMP_1, 0, PokemonTower_2F_EventScript_RivalExitRight + call_if_eq VAR_TEMP_1, 1, PokemonTower_2F_EventScript_RivalExitDown + playse SE_EXIT + delay 25 + fadedefaultbgm + removeobject LOCALID_POKEMON_TOWER_RIVAL + setvar VAR_MAP_SCENE_POKEMON_TOWER_2F, 1 + releaseall + end + +PokemonTower_2F_EventScript_RivalFacePlayerRight:: + applymovement LOCALID_POKEMON_TOWER_RIVAL, Common_Movement_WalkInPlaceFasterRight + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +PokemonTower_2F_EventScript_RivalFacePlayerDown:: + applymovement LOCALID_POKEMON_TOWER_RIVAL, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +PokemonTower_2F_EventScript_RivalSquirtle:: + trainerbattle_no_intro TRAINER_RIVAL_POKEMON_TOWER_SQUIRTLE, PokemonTower_2F_Text_RivalDefeat + return + +PokemonTower_2F_EventScript_RivalBulbasaur:: + trainerbattle_no_intro TRAINER_RIVAL_POKEMON_TOWER_BULBASAUR, PokemonTower_2F_Text_RivalDefeat + return + +PokemonTower_2F_EventScript_RivalCharmander:: + trainerbattle_no_intro TRAINER_RIVAL_POKEMON_TOWER_CHARMANDER, PokemonTower_2F_Text_RivalDefeat + return + +PokemonTower_2F_EventScript_RivalExitRight:: + applymovement LOCALID_POKEMON_TOWER_RIVAL, PokemonTower_2F_Movement_RivalExitRight + waitmovement 0 + return + +PokemonTower_2F_EventScript_RivalExitDown:: + applymovement LOCALID_POKEMON_TOWER_RIVAL, PokemonTower_2F_Movement_RivalExitDown + waitmovement 0 + return + +PokemonTower_2F_Movement_RivalExitRight:: + walk_down + walk_right + walk_right + walk_down + walk_down + walk_down + walk_down + walk_in_place_faster_right + step_end + +PokemonTower_2F_Movement_RivalExitDown:: + walk_right + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_in_place_faster_right + step_end + +PokemonTower_2F_Text_RivalIntro:: + .string "{RIVAL}: Hey, {PLAYER}!\n" + .string "What brings you here?\l" + .string "Is your POKéMON dead?\p" + .string "Hey! It's alive!\p" + .string "I can at least make them faint!\n" + .string "Let's go!$" + +PokemonTower_2F_Text_RivalDefeat:: + .string "What?\n" + .string "You stinker!\p" + .string "I took it easy on you, too!$" + +PokemonTower_2F_Text_RivalPostBattle:: + .string "How's your POKéDEX coming?\n" + .string "I just caught a CUBONE!\p" + .string "I can't find the bigger MAROWAK.\n" + .string "Where could they be?\p" + .string "I bet there aren't any left!\p" + .string "Well, I better get going.\n" + .string "I've got a lot to accomplish,\l" + .string "unlike you.\p" + .string "Smell ya later!$" + +PokemonTower_2F_Text_SilphScopeCouldUnmaskGhosts:: + .string "Even we could not identify the\n" + .string "wayward ghosts.\p" + .string "A SILPH SCOPE might be able to\n" + .string "unmask them.$" + diff --git a/data/maps/PokemonTower_3F/scripts.inc b/data/maps/PokemonTower_3F/scripts.inc new file mode 100644 index 000000000000..2caae50cb068 --- /dev/null +++ b/data/maps/PokemonTower_3F/scripts.inc @@ -0,0 +1,54 @@ +PokemonTower_3F_MapScripts:: + .byte 0 + +PokemonTower_3F_EventScript_Patricia:: + trainerbattle_single TRAINER_CHANNELER_PATRICIA, PokemonTower_3F_Text_PatriciaIntro, PokemonTower_3F_Text_PatriciaDefeat + msgbox PokemonTower_3F_Text_PatriciaPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_3F_EventScript_Carly:: + trainerbattle_single TRAINER_CHANNELER_CARLY, PokemonTower_3F_Text_CarlyIntro, PokemonTower_3F_Text_CarlyDefeat + msgbox PokemonTower_3F_Text_CarlyPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_3F_EventScript_Hope:: + trainerbattle_single TRAINER_CHANNELER_HOPE, PokemonTower_3F_Text_HopeIntro, PokemonTower_3F_Text_HopeDefeat + msgbox PokemonTower_3F_Text_HopePostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_3F_Text_HopeIntro:: + .string "Urrg… Awaa…\n" + .string "Huhu… Graa…$" + +PokemonTower_3F_Text_HopeDefeat:: + .string "Hwa!\n" + .string "I'm saved!$" + +PokemonTower_3F_Text_HopePostBattle:: + .string "The ghosts can be identified by\n" + .string "the SILPH SCOPE.$" + +PokemonTower_3F_Text_CarlyIntro:: + .string "Kekeke…\n" + .string "Kwaaah!$" + +PokemonTower_3F_Text_CarlyDefeat:: + .string "Hmm?\n" + .string "What am I doing?$" + +PokemonTower_3F_Text_CarlyPostBattle:: + .string "Sorry!\n" + .string "I was possessed!$" + +PokemonTower_3F_Text_PatriciaIntro:: + .string "Be gone!\n" + .string "Malevolent spirit!$" + +PokemonTower_3F_Text_PatriciaDefeat:: + .string "Whew!\n" + .string "The spirit left!$" + +PokemonTower_3F_Text_PatriciaPostBattle:: + .string "The others above…\n" + .string "They must have been possessed.$" + diff --git a/data/maps/PokemonTower_4F/scripts.inc b/data/maps/PokemonTower_4F/scripts.inc new file mode 100644 index 000000000000..4f8ede7e3247 --- /dev/null +++ b/data/maps/PokemonTower_4F/scripts.inc @@ -0,0 +1,51 @@ +PokemonTower_4F_MapScripts:: + .byte 0 + +PokemonTower_4F_EventScript_Paula:: + trainerbattle_single TRAINER_CHANNELER_PAULA, PokemonTower_4F_Text_PaulaIntro, PokemonTower_4F_Text_PaulaDefeat + msgbox PokemonTower_4F_Text_PaulaPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_4F_EventScript_Laurel:: + trainerbattle_single TRAINER_CHANNELER_LAUREL, PokemonTower_4F_Text_LaurelIntro, PokemonTower_4F_Text_LaurelDefeat + msgbox PokemonTower_4F_Text_LaurelPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_4F_EventScript_Jody:: + trainerbattle_single TRAINER_CHANNELER_JODY, PokemonTower_4F_Text_JodyIntro, PokemonTower_4F_Text_JodyDefeat + msgbox PokemonTower_4F_Text_JodyPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_4F_Text_PaulaIntro:: + .string "Ghost! No!\n" + .string "Kwaaah!$" + +PokemonTower_4F_Text_PaulaDefeat:: + .string "Where is the ghost?$" + +PokemonTower_4F_Text_PaulaPostBattle:: + .string "I must have been dreaming…$" + +PokemonTower_4F_Text_LaurelIntro:: + .string "Be cursed with me!\n" + .string "Kwaaah!$" + +PokemonTower_4F_Text_LaurelDefeat:: + .string "What!$" + +PokemonTower_4F_Text_LaurelPostBattle:: + .string "We can't determine the identity of\n" + .string "the ghosts…$" + +PokemonTower_4F_Text_JodyIntro:: + .string "Huhuhu…\n" + .string "Beat me not!$" + +PokemonTower_4F_Text_JodyDefeat:: + .string "Huh?\n" + .string "Who? What?$" + +PokemonTower_4F_Text_JodyPostBattle:: + .string "May the departed POKéMON rest in\n" + .string "peace…$" + diff --git a/data/maps/PokemonTower_5F/scripts.inc b/data/maps/PokemonTower_5F/scripts.inc new file mode 100644 index 000000000000..3eb1923c88e0 --- /dev/null +++ b/data/maps/PokemonTower_5F/scripts.inc @@ -0,0 +1,94 @@ +PokemonTower_5F_MapScripts:: + .byte 0 + +PokemonTower_5F_EventScript_Channeler:: + msgbox PokemonTower_5F_Text_RestHereInPurifiedSpace, MSGBOX_NPC + end + +PokemonTower_5F_EventScript_PurifiedZone:: + lockall + fadescreen FADE_TO_WHITE + special HealPlayerParty + fadescreen FADE_FROM_WHITE + msgbox PokemonTower_5F_Text_PurifiedZoneMonsFullyHealed + setvar VAR_TEMP_1, 1 + releaseall + end + +PokemonTower_5F_EventScript_ExitPurifiedZone:: + lockall + setvar VAR_TEMP_1, 0 + releaseall + end + +PokemonTower_5F_EventScript_Tammy:: + trainerbattle_single TRAINER_CHANNELER_TAMMY, PokemonTower_5F_Text_TammyIntro, PokemonTower_5F_Text_TammyDefeat + msgbox PokemonTower_5F_Text_TammyPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_5F_EventScript_Ruth:: + trainerbattle_single TRAINER_CHANNELER_RUTH, PokemonTower_5F_Text_RuthIntro, PokemonTower_5F_Text_RuthDefeat + msgbox PokemonTower_5F_Text_RuthPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_5F_EventScript_Karina:: + trainerbattle_single TRAINER_CHANNELER_KARINA, PokemonTower_5F_Text_KarinaIntro, PokemonTower_5F_Text_KarinaDefeat + msgbox PokemonTower_5F_Text_KarinaPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_5F_EventScript_Janae:: + trainerbattle_single TRAINER_CHANNELER_JANAE, PokemonTower_5F_Text_JanaeIntro, PokemonTower_5F_Text_JanaeDefeat + msgbox PokemonTower_5F_Text_JanaePostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_5F_Text_RestHereInPurifiedSpace:: + .string "Come, child!\n" + .string "I have purified this space.\l" + .string "You can rest here.$" + +PokemonTower_5F_Text_TammyIntro:: + .string "Give…me…\n" + .string "your…all…$" + +PokemonTower_5F_Text_TammyDefeat:: + .string "Gasp!$" + +PokemonTower_5F_Text_TammyPostBattle:: + .string "I was under possession.$" + +PokemonTower_5F_Text_RuthIntro:: + .string "You…shall…\n" + .string "join…us…$" + +PokemonTower_5F_Text_RuthDefeat:: + .string "What a nightmare!$" + +PokemonTower_5F_Text_RuthPostBattle:: + .string "I was possessed.$" + +PokemonTower_5F_Text_KarinaIntro:: + .string "Zombies!$" + +PokemonTower_5F_Text_KarinaDefeat:: + .string "Ha?$" + +PokemonTower_5F_Text_KarinaPostBattle:: + .string "I regained my senses.$" + +PokemonTower_5F_Text_JanaeIntro:: + .string "Urgah…\n" + .string "Urff…$" + +PokemonTower_5F_Text_JanaeDefeat:: + .string "Whoo!$" + +PokemonTower_5F_Text_JanaePostBattle:: + .string "I fell to evil spirits despite my\n" + .string "training in the mountains…$" + +PokemonTower_5F_Text_PurifiedZoneMonsFullyHealed:: + .string "Entered the purified and protected\n" + .string "zone.\p" + .string "{PLAYER}'s POKéMON were fully\n" + .string "healed.$" + diff --git a/data/maps/PokemonTower_6F/scripts.inc b/data/maps/PokemonTower_6F/scripts.inc new file mode 100644 index 000000000000..f445e52390be --- /dev/null +++ b/data/maps/PokemonTower_6F/scripts.inc @@ -0,0 +1,90 @@ +PokemonTower_6F_MapScripts:: + .byte 0 + +PokemonTower_6F_EventScript_MarowakGhost:: + lockall + textcolor NPC_TEXT_COLOR_MON + msgbox PokemonTower_6F_Text_BeGoneIntruders + setwildbattle SPECIES_MAROWAK, 30 + special StartMarowakBattle + waitstate + goto_if_eq VAR_RESULT, FALSE, PokemonTower_6F_EventScript_DefeatedMarowakGhost @ VAR_RESULT set by CB2_EndMarowakBattle + applymovement LOCALID_PLAYER, PokemonTower_6F_Movement_ForcePlayerUp + waitmovement 0 + releaseall + end + +PokemonTower_6F_EventScript_DefeatedMarowakGhost:: + message PokemonTower_6F_Text_GhostWasCubonesMother + waitmessage + waitse + playmoncry SPECIES_MAROWAK, CRY_MODE_NORMAL + waitbuttonpress + waitmoncry + msgbox PokemonTower_6F_Text_MothersSpiritWasCalmed + setvar VAR_MAP_SCENE_POKEMON_TOWER_6F, 1 + releaseall + end + +PokemonTower_6F_Movement_ForcePlayerUp:: + walk_up + step_end + +PokemonTower_6F_EventScript_Angelica:: + trainerbattle_single TRAINER_CHANNELER_ANGELICA, PokemonTower_6F_Text_AngelicaIntro, PokemonTower_6F_Text_AngelicaDefeat + msgbox PokemonTower_6F_Text_AngelicaPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_6F_EventScript_Emilia:: + trainerbattle_single TRAINER_CHANNELER_EMILIA, PokemonTower_6F_Text_EmiliaIntro, PokemonTower_6F_Text_EmiliaDefeat + msgbox PokemonTower_6F_Text_EmiliaPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_6F_EventScript_Jennifer:: + trainerbattle_single TRAINER_CHANNELER_JENNIFER, PokemonTower_6F_Text_JenniferIntro, PokemonTower_6F_Text_JenniferDefeat + msgbox PokemonTower_6F_Text_JenniferPostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_6F_Text_AngelicaIntro:: + .string "Give…me…\n" + .string "blood…$" + +PokemonTower_6F_Text_AngelicaDefeat:: + .string "Groan!$" + +PokemonTower_6F_Text_AngelicaPostBattle:: + .string "I feel anemic and weak…$" + +PokemonTower_6F_Text_EmiliaIntro:: + .string "Urff…\n" + .string "Kwaah!$" + +PokemonTower_6F_Text_EmiliaDefeat:: + .string "Something fell out!$" + +PokemonTower_6F_Text_EmiliaPostBattle:: + .string "My hair didn't fall out!\n" + .string "It was a malevolent spirit!$" + +PokemonTower_6F_Text_JenniferIntro:: + .string "Ke…ke…ke…\n" + .string "ke…ke…ke!$" + +PokemonTower_6F_Text_JenniferDefeat:: + .string "Keee!$" + +PokemonTower_6F_Text_JenniferPostBattle:: + .string "What's going on here?$" + +PokemonTower_6F_Text_BeGoneIntruders:: + .string "Be gone…\n" + .string "Intruders…$" + +PokemonTower_6F_Text_GhostWasCubonesMother:: + .string "The ghost was the restless spirit\n" + .string "of CUBONE's mother!$" + +PokemonTower_6F_Text_MothersSpiritWasCalmed:: + .string "The mother's spirit was calmed.\p" + .string "It departed to the afterlife…$" + diff --git a/data/maps/PokemonTower_7F/scripts.inc b/data/maps/PokemonTower_7F/scripts.inc new file mode 100644 index 000000000000..2112349ec743 --- /dev/null +++ b/data/maps/PokemonTower_7F/scripts.inc @@ -0,0 +1,282 @@ +PokemonTower_7F_MapScripts:: + .byte 0 + +PokemonTower_7F_EventScript_MrFuji:: + lock + faceplayer + famechecker FAMECHECKER_MRFUJI, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + setflag FLAG_HIDE_TOWER_FUJI + clearflag FLAG_HIDE_POKEHOUSE_FUJI + setflag FLAG_RESCUED_MR_FUJI + msgbox PokemonTower_7F_Text_MrFujiThankYouFollowMe + closemessage + warp MAP_LAVENDER_TOWN_VOLUNTEER_POKEMON_HOUSE, 4, 7 + waitstate + release + end + +PokemonTower_7F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_19, PokemonTower_7F_Text_Grunt1Intro, PokemonTower_7F_Text_Grunt1Defeat, PokemonTower_7F_EventScript_DefeatedGrunt1 + msgbox PokemonTower_7F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_7F_EventScript_DefeatedGrunt1:: + msgbox PokemonTower_7F_Text_Grunt1PostBattle + closemessage + getplayerxy VAR_0x8004, VAR_0x8005 + goto_if_eq VAR_0x8004, 10, PokemonTower_7F_EventScript_Grunt1ExitMid + goto_if_eq VAR_0x8004, 11, PokemonTower_7F_EventScript_Grunt1ExitRight + goto_if_eq VAR_0x8004, 9, PokemonTower_7F_EventScript_Grunt1ExitLeft + applymovement LOCALID_POKEMON_TOWER_GRUNT1, PokemonTower_7F_Movement_Grunt1Exit + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt1 + end + +PokemonTower_7F_EventScript_Grunt1ExitMid:: + applymovement LOCALID_POKEMON_TOWER_GRUNT1, PokemonTower_7F_Movement_Grunt1ExitMid + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt1 + end + +PokemonTower_7F_EventScript_Grunt1ExitRight:: + applymovement LOCALID_POKEMON_TOWER_GRUNT1, PokemonTower_7F_Movement_Grunt1ExitRight + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt1 + end + +PokemonTower_7F_EventScript_Grunt1ExitLeft:: + applymovement LOCALID_POKEMON_TOWER_GRUNT1, PokemonTower_7F_Movement_Grunt1ExitLeft + waitmovement 0 + playse SE_EXIT + delay 25 + goto PokemonTower_7F_EventScript_RemoveGrunt1 + end + +PokemonTower_7F_EventScript_RemoveGrunt1:: + removeobject LOCALID_POKEMON_TOWER_GRUNT1 + release + end + +PokemonTower_7F_Movement_Grunt1ExitMid:: + walk_down + walk_right + walk_down + walk_down + walk_down + walk_right + walk_down + walk_down + step_end + +PokemonTower_7F_Movement_Grunt1ExitRight:: + walk_down + walk_down + walk_down + walk_down + walk_right + walk_down + walk_down + step_end + +PokemonTower_7F_Movement_Grunt1Exit:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +PokemonTower_7F_Movement_Grunt1ExitLeft:: + walk_right + walk_down + walk_down + walk_down + walk_down + walk_right + walk_down + walk_down + walk_in_place_faster_left + step_end + +PokemonTower_7F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_20, PokemonTower_7F_Text_Grunt2Intro, PokemonTower_7F_Text_Grunt2Defeat, PokemonTower_7F_EventScript_DefeatedGrunt2 + msgbox PokemonTower_7F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_7F_EventScript_DefeatedGrunt2:: + famechecker FAMECHECKER_MRFUJI, 1 + msgbox PokemonTower_7F_Text_Grunt2PostBattle + closemessage + getplayerxy VAR_0x8004, VAR_0x8005 + goto_if_eq VAR_0x8004, 12, PokemonTower_7F_EventScript_Grunt2ExitLeft + goto_if_eq VAR_0x8004, 13, PokemonTower_7F_EventScript_Grunt2ExitRight + applymovement LOCALID_POKEMON_TOWER_GRUNT2, PokemonTower_7F_Movement_Grunt2Exit + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt2 + end + +PokemonTower_7F_EventScript_Grunt2ExitLeft:: + applymovement LOCALID_POKEMON_TOWER_GRUNT2, PokemonTower_7F_Movement_Grunt2ExitLeft + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt2 + end + +PokemonTower_7F_EventScript_Grunt2ExitRight:: + applymovement LOCALID_POKEMON_TOWER_GRUNT2, PokemonTower_7F_Movement_Grunt2ExitRight + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt2 + end + +PokemonTower_7F_EventScript_RemoveGrunt2:: + removeobject LOCALID_POKEMON_TOWER_GRUNT2 + release + end + +PokemonTower_7F_Movement_Grunt2ExitLeft:: + walk_down + walk_down + walk_down + walk_left + walk_down + walk_down + walk_down + step_end + +PokemonTower_7F_Movement_Grunt2Exit:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +PokemonTower_7F_Movement_Grunt2ExitRight:: + walk_left + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +PokemonTower_7F_EventScript_Grunt3:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_21, PokemonTower_7F_Text_Grunt3Intro, PokemonTower_7F_Text_Grunt3Defeat, PokemonTower_7F_EventScript_DefeatedGrunt3 + msgbox PokemonTower_7F_Text_Grunt3PostBattle, MSGBOX_AUTOCLOSE + end + +PokemonTower_7F_EventScript_DefeatedGrunt3:: + msgbox PokemonTower_7F_Text_Grunt3PostBattle + closemessage + getplayerxy VAR_0x8004, VAR_0x8005 + goto_if_eq VAR_0x8004, 10, PokemonTower_7F_EventScript_Grunt3ExitRight + goto_if_eq VAR_0x8004, 9, PokemonTower_7F_EventScript_Grunt3ExitLeft + applymovement LOCALID_POKEMON_TOWER_GRUNT3, PokemonTower_7F_Movement_Grunt3Exit + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt3 + end + +PokemonTower_7F_EventScript_Grunt3ExitRight:: + applymovement LOCALID_POKEMON_TOWER_GRUNT3, PokemonTower_7F_Movement_Grunt3ExitRight + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt3 + end + +PokemonTower_7F_EventScript_Grunt3ExitLeft:: + applymovement LOCALID_POKEMON_TOWER_GRUNT3, PokemonTower_7F_Movement_Grunt3ExitLeft + waitmovement 0 + goto PokemonTower_7F_EventScript_RemoveGrunt3 + end + +PokemonTower_7F_EventScript_RemoveGrunt3:: + removeobject LOCALID_POKEMON_TOWER_GRUNT3 + release + end + +PokemonTower_7F_EventScript_Unused:: + release + end + +PokemonTower_7F_Movement_Grunt3ExitRight:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_right + walk_down + step_end + +PokemonTower_7F_Movement_Grunt3Exit:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +PokemonTower_7F_Movement_Grunt3ExitLeft:: + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +PokemonTower_7F_Text_Grunt1Intro:: + .string "What do you want?\n" + .string "Why are you here?$" + +PokemonTower_7F_Text_Grunt1Defeat:: + .string "I give up!$" + +PokemonTower_7F_Text_Grunt1PostBattle:: + .string "I'm not going to forget this!$" + +PokemonTower_7F_Text_Grunt2Intro:: + .string "This old guy marched right up to\n" + .string "our HIDEOUT.\p" + .string "Then, he starts ranting about how\n" + .string "TEAM ROCKET's abusing POKéMON.\p" + .string "So, we're just talking it over as\n" + .string "adults.$" + +PokemonTower_7F_Text_Grunt2Defeat:: + .string "Please!\n" + .string "No more!$" + +PokemonTower_7F_Text_Grunt2PostBattle:: + .string "POKéMON are only good for making\n" + .string "money. Why not use them?\p" + .string "You stay out of our business!$" + +PokemonTower_7F_Text_Grunt3Intro:: + .string "You're not saving anyone, kid!$" + +PokemonTower_7F_Text_Grunt3Defeat:: + .string "Don't fight us ROCKETS!$" + +PokemonTower_7F_Text_Grunt3PostBattle:: + .string "You're not getting away with this!$" + +PokemonTower_7F_Text_MrFujiThankYouFollowMe:: + .string "MR. FUJI: Heh?\n" + .string "You came to save me?\p" + .string "Thank you. But, I came here of my\n" + .string "own free will.\p" + .string "I came to calm the spirit of\n" + .string "CUBONE's mother.\p" + .string "I think MAROWAK's spirit has\n" + .string "finally left us.\p" + .string "I must thank you for your kind\n" + .string "concern.\p" + .string "Follow me to my home, POKéMON\n" + .string "HOUSE, at the foot of this tower.$" + diff --git a/data/maps/PowerPlant/scripts.inc b/data/maps/PowerPlant/scripts.inc new file mode 100644 index 000000000000..3a1fbf4e5ea7 --- /dev/null +++ b/data/maps/PowerPlant/scripts.inc @@ -0,0 +1,115 @@ +PowerPlant_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, PowerPlant_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, PowerPlant_OnTransition + .byte 0 + +PowerPlant_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, PowerPlant_EventScript_TryRemoveStaticMon + end + +PowerPlant_EventScript_TryRemoveStaticMon:: + specialvar VAR_RESULT, GetBattleOutcome + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn + removeobject VAR_LAST_TALKED + return + +PowerPlant_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_POWER_PLANT + call_if_unset FLAG_FOUGHT_ZAPDOS, PowerPlant_EventScript_ShowZapdos + call_if_unset FLAG_FOUGHT_POWER_PLANT_ELECTRODE_1, PowerPlant_EventScript_ShowElectrode1 + call_if_unset FLAG_FOUGHT_POWER_PLANT_ELECTRODE_2, PowerPlant_EventScript_ShowElectrode2 + end + +PowerPlant_EventScript_ShowZapdos:: + clearflag FLAG_HIDE_ZAPDOS + return + +PowerPlant_EventScript_ShowElectrode1:: + clearflag FLAG_HIDE_POWER_PLANT_ELECTRODE_1 + return + +PowerPlant_EventScript_ShowElectrode2:: + clearflag FLAG_HIDE_POWER_PLANT_ELECTRODE_2 + return + +PowerPlant_EventScript_Zapdos:: + lock + faceplayer + setwildbattle SPECIES_ZAPDOS, 50 + waitse + playmoncry SPECIES_ZAPDOS, CRY_MODE_ENCOUNTER + message Text_Gyaoo + waitmessage + waitmoncry + delay 10 + playbgm MUS_RG_ENCOUNTER_GYM_LEADER, 0 + waitbuttonpress + setflag FLAG_SYS_CTRL_OBJ_DELETE + special BattleSetup_StartLegendaryBattle + waitstate + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, PowerPlant_EventScript_DefeatedZapdos + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, PowerPlant_EventScript_RanFromZapdos + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, PowerPlant_EventScript_RanFromZapdos + setflag FLAG_FOUGHT_ZAPDOS + release + end + +PowerPlant_EventScript_DefeatedZapdos:: + setflag FLAG_FOUGHT_ZAPDOS + goto EventScript_RemoveStaticMon + end + +PowerPlant_EventScript_RanFromZapdos:: + setvar VAR_0x8004, SPECIES_ZAPDOS + goto EventScript_MonFlewAway + end + +PowerPlant_EventScript_Electrode1:: + lock + faceplayer + setwildbattle SPECIES_ELECTRODE, 34 + waitse + playmoncry SPECIES_ELECTRODE, CRY_MODE_ENCOUNTER + delay 40 + waitmoncry + setflag FLAG_SYS_CTRL_OBJ_DELETE + dowildbattle + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, PowerPlant_EventScript_FoughtElectrode1 + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, PowerPlant_EventScript_FoughtElectrode1 + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, PowerPlant_EventScript_FoughtElectrode1 + setflag FLAG_FOUGHT_POWER_PLANT_ELECTRODE_1 + release + end + +PowerPlant_EventScript_FoughtElectrode1:: + setflag FLAG_FOUGHT_POWER_PLANT_ELECTRODE_1 + goto EventScript_RemoveStaticMon + end + +PowerPlant_EventScript_Electrode2:: + lock + faceplayer + setwildbattle SPECIES_ELECTRODE, 34 + waitse + playmoncry SPECIES_ELECTRODE, CRY_MODE_ENCOUNTER + delay 40 + waitmoncry + setflag FLAG_SYS_CTRL_OBJ_DELETE + dowildbattle + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, PowerPlant_EventScript_FoughtElectrode2 + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, PowerPlant_EventScript_FoughtElectrode2 + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, PowerPlant_EventScript_FoughtElectrode2 + setflag FLAG_FOUGHT_POWER_PLANT_ELECTRODE_2 + release + end + +PowerPlant_EventScript_FoughtElectrode2:: + setflag FLAG_FOUGHT_POWER_PLANT_ELECTRODE_2 + goto EventScript_RemoveStaticMon + end diff --git a/data/maps/Prototype_SeviiIsle_6/scripts.inc b/data/maps/Prototype_SeviiIsle_6/scripts.inc new file mode 100644 index 000000000000..cb177e70621b --- /dev/null +++ b/data/maps/Prototype_SeviiIsle_6/scripts.inc @@ -0,0 +1,2 @@ +Prototype_SeviiIsle_6_MapScripts:: + .byte 0 diff --git a/data/maps/Prototype_SeviiIsle_7/scripts.inc b/data/maps/Prototype_SeviiIsle_7/scripts.inc new file mode 100644 index 000000000000..52e507ee3a78 --- /dev/null +++ b/data/maps/Prototype_SeviiIsle_7/scripts.inc @@ -0,0 +1,2 @@ +Prototype_SeviiIsle_7_MapScripts:: + .byte 0 diff --git a/data/maps/Prototype_SeviiIsle_8/scripts.inc b/data/maps/Prototype_SeviiIsle_8/scripts.inc new file mode 100644 index 000000000000..b9a55dff7e13 --- /dev/null +++ b/data/maps/Prototype_SeviiIsle_8/scripts.inc @@ -0,0 +1,2 @@ +Prototype_SeviiIsle_8_MapScripts:: + .byte 0 diff --git a/data/maps/Prototype_SeviiIsle_9/scripts.inc b/data/maps/Prototype_SeviiIsle_9/scripts.inc new file mode 100644 index 000000000000..8540a074b7a4 --- /dev/null +++ b/data/maps/Prototype_SeviiIsle_9/scripts.inc @@ -0,0 +1,2 @@ +Prototype_SeviiIsle_9_MapScripts:: + .byte 0 diff --git a/data/maps/RecordCorner_Frlg/scripts.inc b/data/maps/RecordCorner_Frlg/scripts.inc new file mode 100644 index 000000000000..6416ec19277b --- /dev/null +++ b/data/maps/RecordCorner_Frlg/scripts.inc @@ -0,0 +1,2 @@ +RecordCorner_Frlg_MapScripts:: + .byte 0 diff --git a/data/maps/RockTunnel_1F/scripts.inc b/data/maps/RockTunnel_1F/scripts.inc new file mode 100644 index 000000000000..5628fa3a026f --- /dev/null +++ b/data/maps/RockTunnel_1F/scripts.inc @@ -0,0 +1,130 @@ +RockTunnel_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, RockTunnel_1F_OnTransition + .byte 0 + +RockTunnel_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_ROCK_TUNNEL_1F + end + +RockTunnel_1F_EventScript_RouteSign:: + msgbox RockTunnel_1F_Text_RouteSign, MSGBOX_SIGN + end + +RockTunnel_1F_EventScript_Lenny:: + trainerbattle_single TRAINER_HIKER_LENNY, RockTunnel_1F_Text_LennyIntro, RockTunnel_1F_Text_LennyDefeat + msgbox RockTunnel_1F_Text_LennyPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_1F_EventScript_Oliver:: + trainerbattle_single TRAINER_HIKER_OLIVER, RockTunnel_1F_Text_OliverIntro, RockTunnel_1F_Text_OliverDefeat + msgbox RockTunnel_1F_Text_OliverPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_1F_EventScript_Lucas:: + trainerbattle_single TRAINER_HIKER_LUCAS, RockTunnel_1F_Text_LucasIntro, RockTunnel_1F_Text_LucasDefeat + msgbox RockTunnel_1F_Text_LucasPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_1F_EventScript_Ashton:: + trainerbattle_single TRAINER_POKEMANIAC_ASHTON, RockTunnel_1F_Text_AshtonIntro, RockTunnel_1F_Text_AshtonDefeat + msgbox RockTunnel_1F_Text_AshtonPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_1F_EventScript_Leah:: + trainerbattle_single TRAINER_PICNICKER_LEAH, RockTunnel_1F_Text_LeahIntro, RockTunnel_1F_Text_LeahDefeat + msgbox RockTunnel_1F_Text_LeahPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_1F_EventScript_Ariana:: + trainerbattle_single TRAINER_PICNICKER_ARIANA, RockTunnel_1F_Text_ArianaIntro, RockTunnel_1F_Text_ArianaDefeat + msgbox RockTunnel_1F_Text_ArianaPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_1F_EventScript_Dana:: + trainerbattle_single TRAINER_PICNICKER_DANA, RockTunnel_1F_Text_DanaIntro, RockTunnel_1F_Text_DanaDefeat + msgbox RockTunnel_1F_Text_DanaPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_1F_Text_LennyIntro:: + .string "This tunnel goes a long way, kid!$" + +RockTunnel_1F_Text_LennyDefeat:: + .string "Doh!\n" + .string "You win!$" + +RockTunnel_1F_Text_LennyPostBattle:: + .string "Watch for ONIX.\n" + .string "They appear only occasionally.\p" + .string "High-level ones can put the\n" + .string "squeeze on you!$" + +RockTunnel_1F_Text_OliverIntro:: + .string "Hmm.\n" + .string "Maybe I'm lost in here…$" + +RockTunnel_1F_Text_OliverDefeat:: + .string "Ease up!\n" + .string "What am I doing?\l" + .string "Which way is out?$" + +RockTunnel_1F_Text_OliverPostBattle:: + .string "That sleeping POKéMON on ROUTE 12\n" + .string "forced me to take this detour.$" + +RockTunnel_1F_Text_LucasIntro:: + .string "Outsiders like you need to show me\n" + .string "some respect!$" + +RockTunnel_1F_Text_LucasDefeat:: + .string "I give!$" + +RockTunnel_1F_Text_LucasPostBattle:: + .string "You're talented enough to hike!$" + +RockTunnel_1F_Text_AshtonIntro:: + .string "POKéMON fight!\n" + .string "Ready, go!$" + +RockTunnel_1F_Text_AshtonDefeat:: + .string "Game over!$" + +RockTunnel_1F_Text_AshtonPostBattle:: + .string "Oh well, I'll get a ZUBAT as I go!$" + +RockTunnel_1F_Text_LeahIntro:: + .string "Eek!\p" + .string "Don't try anything funny in the\n" + .string "dark!$" + +RockTunnel_1F_Text_LeahDefeat:: + .string "It was too dark…$" + +RockTunnel_1F_Text_LeahPostBattle:: + .string "I saw a MACHOP in this tunnel.$" + +RockTunnel_1F_Text_DanaIntro:: + .string "I came this far looking for wild\n" + .string "POKéMON.$" + +RockTunnel_1F_Text_DanaDefeat:: + .string "I'm out of POKéMON!$" + +RockTunnel_1F_Text_DanaPostBattle:: + .string "You looked cute and harmless.\n" + .string "Was I ever wrong!$" + +RockTunnel_1F_Text_ArianaIntro:: + .string "You have POKéMON!\n" + .string "Let's start!$" + +RockTunnel_1F_Text_ArianaDefeat:: + .string "You play hard!$" + +RockTunnel_1F_Text_ArianaPostBattle:: + .string "Whew!\n" + .string "I'm all sweaty now.$" + +RockTunnel_1F_Text_RouteSign:: + .string "ROCK TUNNEL\n" + .string "CERULEAN CITY - LAVENDER TOWN$" + diff --git a/data/maps/RockTunnel_B1F/scripts.inc b/data/maps/RockTunnel_B1F/scripts.inc new file mode 100644 index 000000000000..94bdcde38dab --- /dev/null +++ b/data/maps/RockTunnel_B1F/scripts.inc @@ -0,0 +1,138 @@ +RockTunnel_B1F_MapScripts:: + .byte 0 + +RockTunnel_B1F_EventScript_Sofia:: + trainerbattle_single TRAINER_PICNICKER_SOFIA, RockTunnel_B1F_Text_SofiaIntro, RockTunnel_B1F_Text_SofiaDefeat + msgbox RockTunnel_B1F_Text_SofiaPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_B1F_EventScript_Martha:: + trainerbattle_single TRAINER_PICNICKER_MARTHA, RockTunnel_B1F_Text_MarthaIntro, RockTunnel_B1F_Text_MarthaDefeat + msgbox RockTunnel_B1F_Text_MarthaPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_B1F_EventScript_Dudley:: + trainerbattle_single TRAINER_HIKER_DUDLEY, RockTunnel_B1F_Text_DudleyIntro, RockTunnel_B1F_Text_DudleyDefeat + msgbox RockTunnel_B1F_Text_DudleyPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_B1F_EventScript_Allen:: + trainerbattle_single TRAINER_HIKER_ALLEN, RockTunnel_B1F_Text_AllenIntro, RockTunnel_B1F_Text_AllenDefeat + msgbox RockTunnel_B1F_Text_AllenPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_B1F_EventScript_Eric:: + trainerbattle_single TRAINER_HIKER_ERIC, RockTunnel_B1F_Text_EricIntro, RockTunnel_B1F_Text_EricDefeat + msgbox RockTunnel_B1F_Text_EricPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_B1F_EventScript_Cooper:: + trainerbattle_single TRAINER_POKEMANIAC_COOPER, RockTunnel_B1F_Text_CooperIntro, RockTunnel_B1F_Text_CooperDefeat + msgbox RockTunnel_B1F_Text_CooperPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_B1F_EventScript_Steve:: + trainerbattle_single TRAINER_POKEMANIAC_STEVE, RockTunnel_B1F_Text_SteveIntro, RockTunnel_B1F_Text_SteveDefeat + msgbox RockTunnel_B1F_Text_StevePostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_B1F_EventScript_Winston:: + trainerbattle_single TRAINER_POKEMANIAC_WINSTON, RockTunnel_B1F_Text_WinstonIntro, RockTunnel_B1F_Text_WinstonDefeat + msgbox RockTunnel_B1F_Text_WinstonPostBattle, MSGBOX_AUTOCLOSE + end + +RockTunnel_B1F_Text_SofiaIntro:: + .string "Do you know how you can avoid\n" + .string "getting lost in the mountains?\p" + .string "You can bend twigs as trail\n" + .string "markers.$" + +RockTunnel_B1F_Text_SofiaDefeat:: + .string "Ohhh!\n" + .string "I did my best!$" + +RockTunnel_B1F_Text_SofiaPostBattle:: + .string "I want to go home!$" + +RockTunnel_B1F_Text_DudleyIntro:: + .string "Hahaha!\n" + .string "Can you beat my power?$" + +RockTunnel_B1F_Text_DudleyDefeat:: + .string "Oops!\n" + .string "Outmuscled!$" + +RockTunnel_B1F_Text_DudleyPostBattle:: + .string "I go for power because I hate\n" + .string "thinking.$" + +RockTunnel_B1F_Text_CooperIntro:: + .string "You have a POKéDEX?\n" + .string "I want one, too.$" + +RockTunnel_B1F_Text_CooperDefeat:: + .string "Shoot!\n" + .string "I am so jealous!$" + +RockTunnel_B1F_Text_CooperPostBattle:: + .string "When you finish your POKéDEX,\n" + .string "can I have it?$" + +RockTunnel_B1F_Text_SteveIntro:: + .string "Um… Do you know about POKéMON\n" + .string "cosplay?$" + +RockTunnel_B1F_Text_SteveDefeat:: + .string "Well, that's that.$" + +RockTunnel_B1F_Text_StevePostBattle:: + .string "POKéMON cosplay is dressing up as\n" + .string "POKéMON for fun.\p" + .string "CLEFAIRY is a favorite.$" + +RockTunnel_B1F_Text_AllenIntro:: + .string "My POKéMON techniques will leave\n" + .string "you crying!$" + +RockTunnel_B1F_Text_AllenDefeat:: + .string "I give!\n" + .string "You're a better technician!$" + +RockTunnel_B1F_Text_AllenPostBattle:: + .string "In mountains, you'll often find\n" + .string "ROCK-type POKéMON.$" + +RockTunnel_B1F_Text_MarthaIntro:: + .string "I don't often come here, but I will\n" + .string "battle you.$" + +RockTunnel_B1F_Text_MarthaDefeat:: + .string "Oh!\n" + .string "I lost!$" + +RockTunnel_B1F_Text_MarthaPostBattle:: + .string "I like tiny POKéMON.\n" + .string "Big ones are too scary!$" + +RockTunnel_B1F_Text_EricIntro:: + .string "Hit me with your best shot!$" + +RockTunnel_B1F_Text_EricDefeat:: + .string "Fired away!$" + +RockTunnel_B1F_Text_EricPostBattle:: + .string "I'll raise my POKéMON to beat\n" + .string "yours, kid.$" + +RockTunnel_B1F_Text_WinstonIntro:: + .string "I draw illustrations of POKéMON\n" + .string "when I'm home.$" + +RockTunnel_B1F_Text_WinstonDefeat:: + .string "Whew…\n" + .string "I'm exhausted…$" + +RockTunnel_B1F_Text_WinstonPostBattle:: + .string "I'm an artist, not a fighter.\n" + .string "I'll go home to draw.$" + diff --git a/data/maps/RocketHideout_B1F/scripts.inc b/data/maps/RocketHideout_B1F/scripts.inc new file mode 100644 index 000000000000..d67e33e50415 --- /dev/null +++ b/data/maps/RocketHideout_B1F/scripts.inc @@ -0,0 +1,117 @@ +RocketHideout_B1F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, RocketHideout_B1F_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, RocketHideout_B1F_OnTransition + .byte 0 + +RocketHideout_B1F_OnLoad:: + call_if_not_defeated TRAINER_TEAM_ROCKET_GRUNT_12 RocketHideout_B1F_EventScript_SetBarrier + end + +RocketHideout_B1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_ROCKET_HIDEOUT_B1F + end + +RocketHideout_B1F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_8, RocketHideout_B1F_Text_Grunt1Intro, RocketHideout_B1F_Text_Grunt1Defeat + msgbox RocketHideout_B1F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B1F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_9, RocketHideout_B1F_Text_Grunt2Intro, RocketHideout_B1F_Text_Grunt2Defeat + msgbox RocketHideout_B1F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B1F_EventScript_Grunt3:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_10, RocketHideout_B1F_Text_Grunt3Intro, RocketHideout_B1F_Text_Grunt3Defeat + msgbox RocketHideout_B1F_Text_Grunt3PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B1F_EventScript_Grunt4:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_11, RocketHideout_B1F_Text_Grunt4Intro, RocketHideout_B1F_Text_Grunt4Defeat + msgbox RocketHideout_B1F_Text_Grunt4PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B1F_EventScript_Grunt5:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_12, RocketHideout_B1F_Text_Grunt5Intro, RocketHideout_B1F_Text_Grunt5Defeat, RocketHideout_B1F_EventScript_DefeatedGrunt5 + msgbox RocketHideout_B1F_Text_Grunt5PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B1F_EventScript_DefeatedGrunt5:: + call RocketHideout_B1F_EventScript_RemoveBarrier + playse SE_UNLOCK + special DrawWholeMapView + waitse + release + end + +RocketHideout_B1F_EventScript_SetBarrier:: + setmetatile 20, 19, METATILE_SilphCo_HideoutBarrier_TopLeft_Floor, 1 + setmetatile 21, 19, METATILE_SilphCo_HideoutBarrier_TopRight_Floor, 1 + setmetatile 20, 20, METATILE_SilphCo_HideoutBarrier_BottomLeft, 1 + setmetatile 21, 20, METATILE_SilphCo_HideoutBarrier_BottomRight, 1 + setmetatile 20, 21, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + setmetatile 21, 21, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + return + +RocketHideout_B1F_EventScript_RemoveBarrier:: + setmetatile 20, 19, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + setmetatile 21, 19, METATILE_SilphCo_HideoutFloor, 0 + setmetatile 20, 20, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + setmetatile 21, 20, METATILE_SilphCo_HideoutFloor, 0 + setmetatile 20, 21, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + setmetatile 21, 21, METATILE_SilphCo_HideoutFloor, 0 + return + +RocketHideout_B1F_Text_Grunt1Intro:: + .string "Who are you?\n" + .string "How did you get here?$" + +RocketHideout_B1F_Text_Grunt1Defeat:: + .string "Oww!\n" + .string "Beaten!$" + +RocketHideout_B1F_Text_Grunt1PostBattle:: + .string "Blast it… You're dissing TEAM\n" + .string "ROCKET, aren't you?$" + +RocketHideout_B1F_Text_Grunt2Intro:: + .string "You broke into TEAM ROCKET's\n" + .string "operation? What nerve!$" + +RocketHideout_B1F_Text_Grunt2Defeat:: + .string "Boom!$" + +RocketHideout_B1F_Text_Grunt2PostBattle:: + .string "You're not going to get away with\n" + .string "this, brat!$" + +RocketHideout_B1F_Text_Grunt3Intro:: + .string "Intruder alert!$" + +RocketHideout_B1F_Text_Grunt3Defeat:: + .string "I can't do it!$" + +RocketHideout_B1F_Text_Grunt3PostBattle:: + .string "SILPH SCOPE? Humph!\n" + .string "I don't know where it is.$" + +RocketHideout_B1F_Text_Grunt4Intro:: + .string "Why did you come here?$" + +RocketHideout_B1F_Text_Grunt4Defeat:: + .string "This won't do!$" + +RocketHideout_B1F_Text_Grunt4PostBattle:: + .string "Okay, I'll talk…\n" + .string "Take the elevator to see my BOSS.$" + +RocketHideout_B1F_Text_Grunt5Intro:: + .string "Are you lost, you little mouse?$" + +RocketHideout_B1F_Text_Grunt5Defeat:: + .string "Why…?$" + +RocketHideout_B1F_Text_Grunt5PostBattle:: + .string "Uh-oh, that ruckus somehow opened\n" + .string "the door!$" + diff --git a/data/maps/RocketHideout_B2F/scripts.inc b/data/maps/RocketHideout_B2F/scripts.inc new file mode 100644 index 000000000000..07eda94f65e5 --- /dev/null +++ b/data/maps/RocketHideout_B2F/scripts.inc @@ -0,0 +1,20 @@ +RocketHideout_B2F_MapScripts:: + .byte 0 + +RocketHideout_B2F_EventScript_Grunt:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_13, RocketHideout_B2F_Text_GruntIntro, RocketHideout_B2F_Text_GruntDefeat + msgbox RocketHideout_B2F_Text_GruntPostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B2F_Text_GruntIntro:: + .string "BOSS said you can see ghosts with\n" + .string "the SILPH SCOPE.$" + +RocketHideout_B2F_Text_GruntDefeat:: + .string "I surrender!$" + +RocketHideout_B2F_Text_GruntPostBattle:: + .string "The TEAM ROCKET HQ has four\n" + .string "underground floors.\p" + .string "Think you can reach the BOSS?$" + diff --git a/data/maps/RocketHideout_B3F/scripts.inc b/data/maps/RocketHideout_B3F/scripts.inc new file mode 100644 index 000000000000..7b5078a438bf --- /dev/null +++ b/data/maps/RocketHideout_B3F/scripts.inc @@ -0,0 +1,39 @@ +RocketHideout_B3F_MapScripts:: + .byte 0 + +RocketHideout_B3F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_14, RocketHideout_B3F_Text_Grunt1Intro, RocketHideout_B3F_Text_Grunt1Defeat + msgbox RocketHideout_B3F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B3F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_15, RocketHideout_B3F_Text_Grunt2Intro, RocketHideout_B3F_Text_Grunt2Defeat + msgbox RocketHideout_B3F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B3F_Text_Grunt1Intro:: + .string "Stop meddling in TEAM ROCKET's\n" + .string "affairs or else!$" + +RocketHideout_B3F_Text_Grunt1Defeat:: + .string "Oof!\n" + .string "Taken down!$" + +RocketHideout_B3F_Text_Grunt1PostBattle:: + .string "SILPH SCOPE?\n" + .string "Oh, that machine the BOSS stole.\p" + .string "It's here somewhere.$" + +RocketHideout_B3F_Text_Grunt2Intro:: + .string "We got word from upstairs that you\n" + .string "were coming!$" + +RocketHideout_B3F_Text_Grunt2Defeat:: + .string "What?\n" + .string "I lost? No!$" + +RocketHideout_B3F_Text_Grunt2PostBattle:: + .string "Go ahead and go!\p" + .string "But you can't run the elevator\n" + .string "without the LIFT KEY.$" + diff --git a/data/maps/RocketHideout_B4F/scripts.inc b/data/maps/RocketHideout_B4F/scripts.inc new file mode 100644 index 000000000000..43ff2ff6961a --- /dev/null +++ b/data/maps/RocketHideout_B4F/scripts.inc @@ -0,0 +1,178 @@ +.equ NUM_DOOR_GRUNTS_DEFEATED, VAR_TEMP_1 + +RocketHideout_B4F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, RocketHideout_B4F_OnLoad + .byte 0 + +RocketHideout_B4F_OnLoad:: + setvar NUM_DOOR_GRUNTS_DEFEATED, 0 + call_if_defeated TRAINER_TEAM_ROCKET_GRUNT_16, RocketHideout_B4F_EventScript_CountGruntDefeated + call_if_defeated TRAINER_TEAM_ROCKET_GRUNT_17, RocketHideout_B4F_EventScript_CountGruntDefeated + call_if_ne NUM_DOOR_GRUNTS_DEFEATED, 2, RocketHideout_B4F_EventScript_SetBarrier + end + +RocketHideout_B4F_EventScript_CountGruntDefeated:: + addvar NUM_DOOR_GRUNTS_DEFEATED, 1 + return + +RocketHideout_B4F_EventScript_Giovanni:: + lock + faceplayer + famechecker FAMECHECKER_GIOVANNI, 0 + message RocketHideout_B4F_Text_GiovanniIntro + waitmessage + playbgm MUS_RG_ENCOUNTER_ROCKET, 0 + waitbuttonpress + trainerbattle_no_intro TRAINER_BOSS_GIOVANNI, RocketHideout_B4F_Text_GiovanniDefeat + msgbox RocketHideout_B4F_Text_GiovanniPostBattle + fadescreen FADE_TO_BLACK + closemessage + removeobject LOCALID_HIDEOUT_GIOVANNI + addobject LOCALID_SILPH_SCOPE + clearflag FLAG_HIDE_SILPH_SCOPE + setflag FLAG_HIDE_CELADON_ROCKETS + famechecker FAMECHECKER_GIOVANNI, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + fadescreen FADE_FROM_BLACK + release + end + +RocketHideout_B4F_EventScript_SilphScope:: + lock + faceplayer + removeobject LOCALID_SILPH_SCOPE + giveitem ITEM_SILPH_SCOPE + goto_if_eq VAR_RESULT, FALSE, EventScript_BagIsFull + release + end + +RocketHideout_B4F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_18, RocketHideout_B4F_Text_Grunt1Intro, RocketHideout_B4F_Text_Grunt1Defeat, RocketHideout_B4F_EventScript_DefeatedGrunt1 + msgbox RocketHideout_B4F_Text_Grunt1PostBattle + release + end + +RocketHideout_B4F_EventScript_DefeatedGrunt1:: + msgbox RocketHideout_B4F_Text_Grunt1PostBattle + addobject LOCALID_LIFT_KEY + clearflag FLAG_HIDE_LIFT_KEY + release + end + +RocketHideout_B4F_EventScript_LiftKey:: + lock + faceplayer + setflag FLAG_CAN_USE_ROCKET_HIDEOUT_LIFT + removeobject LOCALID_LIFT_KEY + giveitem ITEM_LIFT_KEY + goto_if_eq VAR_RESULT, FALSE, EventScript_BagIsFull + release + end + +RocketHideout_B4F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_16, RocketHideout_B4F_Text_Grunt2Intro, RocketHideout_B4F_Text_Grunt2Defeat, RocketHideout_B4F_EventScript_DefeatedGrunt2 + msgbox RocketHideout_B4F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B4F_EventScript_DefeatedGrunt2:: + setvar NUM_DOOR_GRUNTS_DEFEATED, 0 + call_if_defeated TRAINER_TEAM_ROCKET_GRUNT_16, RocketHideout_B4F_EventScript_CountGruntDefeated + call_if_defeated TRAINER_TEAM_ROCKET_GRUNT_17, RocketHideout_B4F_EventScript_CountGruntDefeated + call_if_eq NUM_DOOR_GRUNTS_DEFEATED, 2, RocketHideout_B4F_EventScript_RemoveBarrier + call_if_eq NUM_DOOR_GRUNTS_DEFEATED, 2, RocketHideout_B4F_EventScript_DrawMapForBarrierRemoval + release + end + +RocketHideout_B4F_EventScript_Grunt3:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_17, RocketHideout_B4F_Text_Grunt3Intro, RocketHideout_B4F_Text_Grunt3Defeat, RocketHideout_B4F_EventScript_DefeatedGrunt3 + msgbox RocketHideout_B4F_Text_Grunt3PostBattle, MSGBOX_AUTOCLOSE + end + +RocketHideout_B4F_EventScript_DefeatedGrunt3:: + setvar NUM_DOOR_GRUNTS_DEFEATED, 0 + call_if_defeated TRAINER_TEAM_ROCKET_GRUNT_16, RocketHideout_B4F_EventScript_CountGruntDefeated + call_if_defeated TRAINER_TEAM_ROCKET_GRUNT_17, RocketHideout_B4F_EventScript_CountGruntDefeated + call_if_eq NUM_DOOR_GRUNTS_DEFEATED, 2, RocketHideout_B4F_EventScript_RemoveBarrier + call_if_eq NUM_DOOR_GRUNTS_DEFEATED, 2, RocketHideout_B4F_EventScript_DrawMapForBarrierRemoval + release + end + +RocketHideout_B4F_EventScript_DrawMapForBarrierRemoval:: + playse SE_UNLOCK + special DrawWholeMapView + waitse + return + +RocketHideout_B4F_EventScript_SetBarrier:: + setmetatile 17, 12, METATILE_SilphCo_HideoutBarrier_TopLeft_Floor, 1 + setmetatile 18, 12, METATILE_SilphCo_HideoutBarrier_TopRight_Floor, 1 + setmetatile 17, 13, METATILE_SilphCo_HideoutBarrier_BottomLeft, 1 + setmetatile 18, 13, METATILE_SilphCo_HideoutBarrier_BottomRight, 1 + setmetatile 17, 14, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + setmetatile 18, 14, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + return + +RocketHideout_B4F_EventScript_RemoveBarrier:: + setmetatile 17, 12, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + setmetatile 18, 12, METATILE_SilphCo_HideoutFloor, 0 + setmetatile 17, 13, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + setmetatile 18, 13, METATILE_SilphCo_HideoutFloor, 0 + setmetatile 17, 14, METATILE_SilphCo_HideoutFloor_ShadeFull, 0 + setmetatile 18, 14, METATILE_SilphCo_HideoutFloor, 0 + return + +RocketHideout_B4F_Text_GiovanniIntro:: + .string "So! I must say, I am impressed you\n" + .string "got here.\p" + .string "TEAM ROCKET captures POKéMON from\n" + .string "around the world.\p" + .string "They're important tools for keeping\n" + .string "our criminal enterprise going.\p" + .string "I am the leader, GIOVANNI!\p" + .string "For your insolence, you will feel a\n" + .string "world of pain!$" + +RocketHideout_B4F_Text_GiovanniDefeat:: + .string "WHAT!\n" + .string "This can't be!$" + +RocketHideout_B4F_Text_GiovanniPostBattle:: + .string "I see that you raise POKéMON with\n" + .string "utmost care.\p" + .string "A child like you would never\n" + .string "understand what I hope to achieve.\p" + .string "I shall step aside this time!\p" + .string "I hope we meet again…$" + +RocketHideout_B4F_Text_Grunt2Intro:: + .string "I know you!\n" + .string "You ruined our plans at MT. MOON!$" + +RocketHideout_B4F_Text_Grunt2Defeat:: + .string "Burned again!$" + +RocketHideout_B4F_Text_Grunt2PostBattle:: + .string "Do you have something against TEAM\n" + .string "ROCKET?$" + +RocketHideout_B4F_Text_Grunt3Intro:: + .string "How can you not see the beauty of\n" + .string "our evil?$" + +RocketHideout_B4F_Text_Grunt3Defeat:: + .string "Ayaya!$" + +RocketHideout_B4F_Text_Grunt3PostBattle:: + .string "BOSS!\n" + .string "I'm sorry I failed you!$" + +RocketHideout_B4F_Text_Grunt1Intro:: + .string "The elevator doesn't work?\n" + .string "Who has the LIFT KEY?$" + +RocketHideout_B4F_Text_Grunt1Defeat:: + .string "No!$" + +RocketHideout_B4F_Text_Grunt1PostBattle:: + .string "Oh, no!\n" + .string "I dropped the LIFT KEY!$" + diff --git a/data/maps/RocketHideout_Elevator/scripts.inc b/data/maps/RocketHideout_Elevator/scripts.inc new file mode 100644 index 000000000000..4b9619a38da8 --- /dev/null +++ b/data/maps/RocketHideout_Elevator/scripts.inc @@ -0,0 +1,93 @@ +RocketHideout_Elevator_MapScripts:: + .byte 0 + +RocketHideout_Elevator_EventScript_FloorSelect:: + lockall + goto_if_unset FLAG_CAN_USE_ROCKET_HIDEOUT_LIFT, RocketHideout_Elevator_EventScript_NeedKey + setvar VAR_0x8004, 2 + call_if_unset FLAG_TEMP_2, EventScript_GetElevatorFloor + copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR + special DrawElevatorCurrentFloorWindow + message gText_WantWhichFloor + waitmessage + setvar VAR_0x8004, 2 + specialvar VAR_RESULT, InitElevatorFloorSelectMenuPos + switch VAR_RESULT + case 0, RocketHideout_Elevator_EventScript_FloorSelectFromB1F + case 1, RocketHideout_Elevator_EventScript_FloorSelectFromB2F + case 2, RocketHideout_Elevator_EventScript_FloorSelectFromB4F + end + +RocketHideout_Elevator_EventScript_FloorSelectFromB1F:: + multichoicedefault 0, 0, MULTI_ROCKET_HIDEOUT_ELEVATOR, 0, FALSE + goto RocketHideout_Elevator_EventScript_ChooseFloor + end + +RocketHideout_Elevator_EventScript_FloorSelectFromB2F:: + multichoicedefault 0, 0, MULTI_ROCKET_HIDEOUT_ELEVATOR, 1, FALSE + goto RocketHideout_Elevator_EventScript_ChooseFloor + end + +RocketHideout_Elevator_EventScript_FloorSelectFromB4F:: + multichoicedefault 0, 0, MULTI_ROCKET_HIDEOUT_ELEVATOR, 2, FALSE + goto RocketHideout_Elevator_EventScript_ChooseFloor + end + +RocketHideout_Elevator_EventScript_ChooseFloor:: + switch VAR_RESULT + case 0, RocketHideout_Elevator_EventScript_ToB1F + case 1, RocketHideout_Elevator_EventScript_ToB2F + case 2, RocketHideout_Elevator_EventScript_ToB4F + case 3, RocketHideout_Elevator_EventScript_ExitFloorSelect + case 127, RocketHideout_Elevator_EventScript_ExitFloorSelect + end + +RocketHideout_Elevator_EventScript_ToB1F:: + setvar VAR_0x8006, 3 + setdynamicwarp MAP_ROCKET_HIDEOUT_B1F, 255, 24, 25 + goto_if_eq VAR_ELEVATOR_FLOOR, 3, RocketHideout_Elevator_EventScript_ExitFloorSelect + call RocketHideout_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 3 + goto RocketHideout_Elevator_EventScript_ExitFloorSelect + end + +RocketHideout_Elevator_EventScript_ToB2F:: + setvar VAR_0x8006, 2 + setdynamicwarp MAP_ROCKET_HIDEOUT_B2F, 255, 28, 16 + goto_if_eq VAR_ELEVATOR_FLOOR, 2, RocketHideout_Elevator_EventScript_ExitFloorSelect + call RocketHideout_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 2 + goto RocketHideout_Elevator_EventScript_ExitFloorSelect + end + +RocketHideout_Elevator_EventScript_ToB4F:: + setvar VAR_0x8006, 0 + setdynamicwarp MAP_ROCKET_HIDEOUT_B4F, 255, 20, 23 + goto_if_eq VAR_ELEVATOR_FLOOR, 0, RocketHideout_Elevator_EventScript_ExitFloorSelect + call RocketHideout_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 0 + goto RocketHideout_Elevator_EventScript_ExitFloorSelect + end + +RocketHideout_Elevator_EventScript_ExitFloorSelect:: + special CloseElevatorCurrentFloorWindow + releaseall + end + +RocketHideout_Elevator_EventScript_MoveElevator:: + special CloseElevatorCurrentFloorWindow + closemessage + waitse + special AnimateElevator + waitstate + setflag FLAG_TEMP_2 + return + +RocketHideout_Elevator_EventScript_NeedKey:: + msgbox RocketHideout_Elevator_Text_AppearsToNeedAKey + releaseall + end + +RocketHideout_Elevator_Text_AppearsToNeedAKey:: + .string "It appears to need a key.$" + diff --git a/data/maps/Route1/scripts.inc b/data/maps/Route1/scripts.inc new file mode 100644 index 000000000000..a75630d39463 --- /dev/null +++ b/data/maps/Route1/scripts.inc @@ -0,0 +1,64 @@ +Route1_MapScripts:: + .byte 0 + +Route1_EventScript_MartClerk:: + lock + faceplayer + goto_if_set FLAG_GOT_POTION_ON_ROUTE_1, Route1_EventScript_AlreadyGotPotion + msgbox Route1_Text_WorkAtPokeMartTakeSample + textcolor NPC_TEXT_COLOR_NEUTRAL + checkitemspace ITEM_POTION + goto_if_eq VAR_RESULT, FALSE, EventScript_BagIsFull + bufferitemname STR_VAR_2, ITEM_POTION + playfanfare MUS_LEVEL_UP + message gText_ObtainedTheItem + waitmessage + waitfanfare + additem ITEM_POTION + msgbox Route1_Text_PutPotionAway + call EventScript_RestorePrevTextColor + setflag FLAG_GOT_POTION_ON_ROUTE_1 + release + end + +Route1_EventScript_AlreadyGotPotion:: + msgbox Route1_Text_ComeSeeUsIfYouNeedPokeBalls + release + end + +Route1_EventScript_Boy:: + msgbox Route1_Text_CanJumpFromLedges, MSGBOX_NPC + end + +Route1_EventScript_RouteSign:: + msgbox Route1_Text_RouteSign, MSGBOX_SIGN + end + +Route1_Text_WorkAtPokeMartTakeSample:: + .string "Hi!\n" + .string "I work at a POKéMON MART.\p" + .string "It's part of a convenient chain\n" + .string "selling all sorts of items.\p" + .string "Please, visit us in VIRIDIAN CITY.\p" + .string "I know, I'll give you a sample.\n" + .string "Here you go!$" + +Route1_Text_ComeSeeUsIfYouNeedPokeBalls:: + .string "Please come see us if you need\n" + .string "POKé BALLS for catching POKéMON.$" + +Route1_Text_PutPotionAway:: + .string "{PLAYER} put the POTION away in\n" + .string "the BAG's ITEMS POCKET.$" + +Route1_Text_CanJumpFromLedges:: + .string "See those ledges along the road?\p" + .string "It's a bit scary, but you can jump\n" + .string "from them.\p" + .string "You can get back to PALLET TOWN\n" + .string "quicker that way.$" + +Route1_Text_RouteSign:: + .string "ROUTE 1\n" + .string "PALLET TOWN - VIRIDIAN CITY$" + diff --git a/data/maps/Route10/scripts.inc b/data/maps/Route10/scripts.inc new file mode 100644 index 000000000000..0cf2b64b58b8 --- /dev/null +++ b/data/maps/Route10/scripts.inc @@ -0,0 +1,104 @@ +Route10_MapScripts:: + .byte 0 + +Route10_EventScript_Unused:: + end + +Route10_EventScript_NorthRockTunnelSign:: + msgbox Route10_Text_RockTunnelDetourToLavender, MSGBOX_SIGN + end + +Route10_EventScript_SouthRockTunnelSign:: + msgbox Route10_Text_RockTunnel, MSGBOX_SIGN + end + +Route10_EventScript_PowerPlantSign:: + msgbox Route10_Text_PowerPlant, MSGBOX_SIGN + end + +Route10_Text_MarkIntro:: + .string "Wow, you came all the way here?\n" + .string "Maybe you're a POKéMANIAC, too?\l" + .string "Want to see my collection?$" + +Route10_Text_MarkDefeat:: + .string "Humph.\n" + .string "I'm not angry!$" + +Route10_Text_MarkPostBattle:: + .string "I have more rare POKéMON at home!$" + +Route10_Text_ClarkIntro:: + .string "Ha-hahah-ah-ha!$" + +Route10_Text_ClarkDefeat:: + .string "Ha-haha!\n" + .string "Not laughing!\l" + .string "Ha-hay fever! Haha-ha-choo!$" + +Route10_Text_ClarkPostBattle:: + .string "Haha-ha-choo!\n" + .string "Ha-choo!\l" + .string "Snort! Snivel!$" + +Route10_Text_HermanIntro:: + .string "Hi, kid!\n" + .string "Want to see my POKéMON?$" + +Route10_Text_HermanDefeat:: + .string "Oh, no!\n" + .string "My POKéMON!$" + +Route10_Text_HermanPostBattle:: + .string "I don't like you.\n" + .string "I don't like anyone better than me!$" + +Route10_Text_HeidiIntro:: + .string "I've been out at a POKéMON GYM\n" + .string "a few times.\p" + .string "…But I always lose.$" + +Route10_Text_HeidiDefeat:: + .string "Ohh!\n" + .string "After all my training!$" + +Route10_Text_HeidiPostBattle:: + .string "I noticed some POKéMANIACS\n" + .string "prowling around.\p" + .string "Can you imagine? Them?\n" + .string "Up here in the mountains?$" + +Route10_Text_TrentIntro:: + .string "Ah!\n" + .string "This mountain air is delicious!$" + +Route10_Text_TrentDefeat:: + .string "That cleared my head!$" + +Route10_Text_TrentPostBattle:: + .string "I feel bloated on mountain air!$" + +Route10_Text_CarolIntro:: + .string "I'm feeling a bit faint.\n" + .string "I haven't hiked in some time.$" + +Route10_Text_CarolDefeat:: + .string "I'm too tired.\n" + .string "I wasn't up for it.$" + +Route10_Text_CarolPostBattle:: + .string "The POKéMON here in the mountains\n" + .string "are so chunky…\p" + .string "I wish there were pink POKéMON\n" + .string "with a floral pattern!$" + +Route10_Text_RockTunnelDetourToLavender:: + .string "ROCK TUNNEL\n" + .string "Detour to LAVENDER TOWN$" + +Route10_Text_RockTunnel:: + .string "ROCK TUNNEL$" + +Route10_Text_PowerPlant:: + .string "POWER PLANT$" + diff --git a/data/maps/Route10_PokemonCenter_1F/scripts.inc b/data/maps/Route10_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..037448fd352d --- /dev/null +++ b/data/maps/Route10_PokemonCenter_1F/scripts.inc @@ -0,0 +1,110 @@ +.equ REQUIRED_OWNED_MONS, 20 + +Route10_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route10_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +Route10_PokemonCenter_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_ROUTE10_POKEMON_CENTER_1F + setrespawn HEAL_LOCATION_ROUTE10 + end + +Route10_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +Route10_PokemonCenter_1F_EventScript_FatMan:: + msgbox Route10_PokemonCenter_1F_Text_NuggetUselessSoldFor5000, MSGBOX_NPC + end + +Route10_PokemonCenter_1F_EventScript_Gentleman:: + msgbox Route10_PokemonCenter_1F_Text_EveryTypeStrongerThanOthers, MSGBOX_NPC + end + +Route10_PokemonCenter_1F_EventScript_Youngster:: + msgbox Route10_PokemonCenter_1F_Text_HeardGhostsHauntLavender, MSGBOX_NPC + end + +Route10_PokemonCenter_1F_EventScript_Aide:: + lock + faceplayer + call Route10_PokemonCenter_1F_EventScript_GetAideRequestInfo + goto_if_set FLAG_GOT_EVERSTONE_FROM_OAKS_AIDE, Route10_PokemonCenter_1F_EventScript_AlreadyGotEverstone + msgbox Route10_PokemonCenter_1F_Text_GiveEverstoneIfCaught20Mons, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Aide_EventScript_DeclineCheckMons + setvar VAR_0x8004, 0 + specialvar VAR_RESULT, GetFrlgPokedexCount + buffernumberstring STR_VAR_3, VAR_0x8006 + call Route10_PokemonCenter_1F_EventScript_GetAideRequestInfo + goto_if_lt VAR_0x8006, REQUIRED_OWNED_MONS, Aide_EventScript_HaventCaughtEnough + msgbox Route10_PokemonCenter_1F_Text_GreatHereYouGo + checkitemspace ITEM_EVERSTONE + goto_if_eq VAR_RESULT, FALSE, Aide_EventScript_NoRoomForItem + giveitem_msg Route10_PokemonCenter_1F_Text_ReceivedEverstoneFromAide, ITEM_EVERSTONE + setflag FLAG_GOT_EVERSTONE_FROM_OAKS_AIDE + msgbox Route10_PokemonCenter_1F_Text_ExplainEverstone + release + end + +Route10_PokemonCenter_1F_EventScript_AlreadyGotEverstone:: + msgbox Route10_PokemonCenter_1F_Text_ExplainEverstone + release + end + +Route10_PokemonCenter_1F_EventScript_GetAideRequestInfo:: + buffernumberstring STR_VAR_1, REQUIRED_OWNED_MONS + bufferitemname STR_VAR_2, ITEM_EVERSTONE + return + +Route10_PokemonCenter_1F_Text_EveryTypeStrongerThanOthers:: + .string "The types of POKéMON match up\n" + .string "differently with each other.\p" + .string "Every type is stronger than some\n" + .string "types and weaker than others.$" + +Route10_PokemonCenter_1F_Text_NuggetUselessSoldFor5000:: + .string "A NUGGET is totally useless.\n" + .string "So I sold it for ¥5000.$" + +Route10_PokemonCenter_1F_Text_HeardGhostsHauntLavender:: + .string "I heard that ghosts haunt\n" + .string "LAVENDER TOWN.$" + +Route10_PokemonCenter_1F_Text_GiveEverstoneIfCaught20Mons:: + .string "Oh… {PLAYER}!\n" + .string "I've been looking for you!\p" + .string "It's me, one of the ever-present\n" + .string "AIDES to PROF. OAK.\p" + .string "If your POKéDEX has complete data\n" + .string "on twenty species, I'm supposed to\l" + .string "give you a reward from PROF. OAK.\p" + .string "He entrusted me with this\n" + .string "EVERSTONE.\p" + .string "So, {PLAYER}, let me ask you.\p" + .string "Have you gathered data on at least\n" + .string "twenty kinds of POKéMON?$" + +Route10_PokemonCenter_1F_Text_GreatHereYouGo:: + .string "Great! You have caught or owned\n" + .string "{STR_VAR_3} kinds of POKéMON!\p" + .string "Congratulations!\n" + .string "Here you go!$" + +Route10_PokemonCenter_1F_Text_ReceivedEverstoneFromAide:: + .string "{PLAYER} received the EVERSTONE\n" + .string "from the AIDE.$" + +Route10_PokemonCenter_1F_Text_ExplainEverstone:: + .string "Making POKéMON evolve certainly\n" + .string "can add to the POKéDEX.\p" + .string "However, at times, you may not\n" + .string "want a certain POKéMON to evolve.\p" + .string "In that case, give the EVERSTONE\n" + .string "to that POKéMON.\p" + .string "It will prevent evolution according\n" + .string "to the PROFESSOR.$" + diff --git a/data/maps/Route10_PokemonCenter_2F/scripts.inc b/data/maps/Route10_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..73a04875a257 --- /dev/null +++ b/data/maps/Route10_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +Route10_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +Route10_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +Route10_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +Route10_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/Route11/scripts.inc b/data/maps/Route11/scripts.inc new file mode 100644 index 000000000000..3cf6f8347c65 --- /dev/null +++ b/data/maps/Route11/scripts.inc @@ -0,0 +1,120 @@ +Route11_MapScripts:: + .byte 0 + +Route11_EventScript_DiglettsCaveSign:: + msgbox Route11_Text_DiglettsCave, MSGBOX_SIGN + end + +Route11_Text_HugoIntro:: + .string "Win, lose, or draw!$" + +Route11_Text_HugoDefeat:: + .string "Atcha!\n" + .string "Didn't go my way!$" + +Route11_Text_HugoPostBattle:: + .string "POKéMON is life!\n" + .string "And to live is to play games!$" + +Route11_Text_JasperIntro:: + .string "Competition!\n" + .string "I can't get enough!$" + +Route11_Text_JasperDefeat:: + .string "I had a chance!$" + +Route11_Text_JasperPostBattle:: + .string "You can't be a coward in the world\n" + .string "of POKéMON!$" + +Route11_Text_EddieIntro:: + .string "Let's go, but don't cheat!$" + +Route11_Text_EddieDefeat:: + .string "Huh?\n" + .string "That's not right!$" + +Route11_Text_EddiePostBattle:: + .string "I did my best.\n" + .string "I have no regrets.$" + +Route11_Text_BraxtonIntro:: + .string "Careful!\n" + .string "I'm laying down some cables!$" + +Route11_Text_BraxtonDefeat:: + .string "That was electric!$" + +Route11_Text_BraxtonPostBattle:: + .string "Spread the word to save energy!$" + +Route11_Text_DillonIntro:: + .string "I just became a TRAINER.\n" + .string "But, I think I can win.$" + +Route11_Text_DillonDefeat:: + .string "My POKéMON couldn't win…\n" + .string "Haven't they grown enough?$" + +Route11_Text_DillonPostBattle:: + .string "What now?\n" + .string "Leave me alone!$" + +Route11_Text_DirkIntro:: + .string "Fwahaha!\n" + .string "I have never lost!$" + +Route11_Text_DirkDefeat:: + .string "My first loss!$" + +Route11_Text_DirkPostBattle:: + .string "You were just lucky, that's all.$" + +Route11_Text_DarianIntro:: + .string "I have never won before…$" + +Route11_Text_DarianDefeat:: + .string "I saw this coming…$" + +Route11_Text_DarianPostBattle:: + .string "I was unlucky, as always.$" + +Route11_Text_YasuIntro:: + .string "I'm the best in my class.\n" + .string "I train every morning.$" + +Route11_Text_YasuDefeat:: + .string "Darn!\n" + .string "My POKéMON need to be stronger!$" + +Route11_Text_YasuPostBattle:: + .string "There's a fat POKéMON that comes\n" + .string "down from the mountains.\p" + .string "I bet it'd be strong if you can\n" + .string "catch it.$" + +Route11_Text_BernieIntro:: + .string "Watch out for live wires!$" + +Route11_Text_BernieDefeat:: + .string "Whoa!\n" + .string "You spark plug!$" + +Route11_Text_BerniePostBattle:: + .string "Well, better get back to work.$" + +Route11_Text_DaveIntro:: + .string "I raised my POKéMON carefully.\n" + .string "They should be ready by now!$" + +Route11_Text_DaveDefeat:: + .string "Bye-bye!\n" + .string "Thank you, and good-bye!$" + +Route11_Text_DavePostBattle:: + .string "Tch…\n" + .string "I better go find stronger ones!$" + +Route11_Text_DiglettsCave:: + .string "DIGLETT'S CAVE$" + diff --git a/data/maps/Route11_EastEntrance_1F/scripts.inc b/data/maps/Route11_EastEntrance_1F/scripts.inc new file mode 100644 index 000000000000..322259416ce6 --- /dev/null +++ b/data/maps/Route11_EastEntrance_1F/scripts.inc @@ -0,0 +1,32 @@ +Route11_EastEntrance_1F_MapScripts:: + .byte 0 + +Route11_EastEntrance_1F_EventScript_TopGuard:: + msgbox Route11_EastEntrance_1F_Text_ManInLavenderRatesNames, MSGBOX_NPC + end + +Route11_EastEntrance_1F_EventScript_BottomGuard:: + msgbox Route11_EastEntrance_1F_Text_RockTunnelToReachLavender, MSGBOX_NPC + end + +@ Unclear where this is originally from +Route11_EastEntrance_1F_Text_BagIsFull:: + .string "{PLAYER}{KUN}の バッグ\n" + .string "いっぱい みたい だね$" + +Route11_EastEntrance_1F_Text_ManInLavenderRatesNames:: + .string "Don't you think it's hard to think\n" + .string "up good names for POKéMON?\p" + .string "Especially if you've caught a\n" + .string "whole bunch?\p" + .string "In LAVENDER TOWN, there's a man\n" + .string "who rates POKéMON nicknames.\p" + .string "He can even help you rename your\n" + .string "POKéMON, too.$" + +Route11_EastEntrance_1F_Text_RockTunnelToReachLavender:: + .string "If you're aiming to reach LAVENDER\n" + .string "TOWN, take ROCK TUNNEL.\p" + .string "You can get to ROCK TUNNEL from\n" + .string "CERULEAN CITY.$" + diff --git a/data/maps/Route11_EastEntrance_2F/scripts.inc b/data/maps/Route11_EastEntrance_2F/scripts.inc new file mode 100644 index 000000000000..a64f4d1fb693 --- /dev/null +++ b/data/maps/Route11_EastEntrance_2F/scripts.inc @@ -0,0 +1,138 @@ +.equ REQUIRED_CAUGHT_MONS, 30 + +Route11_EastEntrance_2F_MapScripts:: + .byte 0 + +Route11_EastEntrance_2F_EventScript_LeftBinoculars:: + lockall + goto_if_set FLAG_WOKE_UP_ROUTE_12_SNORLAX, Route11_EastEntrance_2F_EventScript_LeftBinocularsSnorlaxGone + msgbox Route11_EastEntrance_2F_Text_BigMonAsleepOnRoad + releaseall + end + +Route11_EastEntrance_2F_EventScript_LeftBinocularsSnorlaxGone:: + msgbox Route11_EastEntrance_2F_Text_WhatABreathtakingView + releaseall + end + +Route11_EastEntrance_2F_EventScript_RightBinoculars:: + msgbox Route11_EastEntrance_2F_Text_RockTunnelGoodRouteToLavender, MSGBOX_SIGN + end + +Route11_EastEntrance_2F_EventScript_Turner:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_NIDORINOA + call EventScript_GetInGameTradeSpeciesInfo + goto_if_set FLAG_DID_NINA_TRADE, Route11_EastEntrance_2F_EventScript_AlreadyTraded + msgbox Trade_Text_LookingForMonWannaTradeForMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Route11_EastEntrance_2F_EventScript_DeclineTrade + call EventScript_ChooseMonForInGameTrade + goto_if_ge VAR_0x8004, PARTY_SIZE, Route11_EastEntrance_2F_EventScript_DeclineTrade + call EventScript_GetInGameTradeSpecies + goto_if_ne VAR_RESULT, VAR_0x8009, Route11_EastEntrance_2F_EventScript_NotRequestedMon + call EventScript_DoInGameTrade + msgbox Trade_Text_HeyThanks + setflag FLAG_DID_NINA_TRADE + release + end + +Route11_EastEntrance_2F_EventScript_DeclineTrade:: + msgbox Trade_Text_AwwOhWell + release + end + +Route11_EastEntrance_2F_EventScript_NotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox Trade_Text_WhatThatsNoMon + release + end + +Route11_EastEntrance_2F_EventScript_AlreadyTraded:: + msgbox Trade_Text_IsntMyOldMonGreat + release + end + +Route11_EastEntrance_2F_EventScript_Aide:: + lock + faceplayer + call Route11_EastEntrance_2F_EventScript_GetAideRequestInfo + goto_if_set FLAG_GOT_ITEMFINDER, Route11_EastEntrance_2F_EventScript_AlreadyGotItemfinder + msgbox Route11_EastEntrance_2F_Text_GiveItemfinderIfCaught30, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Aide_EventScript_DeclineCheckMons + setvar VAR_0x8004, 0 + specialvar VAR_RESULT, GetFrlgPokedexCount + buffernumberstring STR_VAR_3, VAR_0x8006 + call Route11_EastEntrance_2F_EventScript_GetAideRequestInfo + goto_if_lt VAR_0x8006, REQUIRED_CAUGHT_MONS, Aide_EventScript_HaventCaughtEnough + msgbox Route11_EastEntrance_2F_Text_GreatHereYouGo + checkitemspace ITEM_ITEMFINDER + goto_if_eq VAR_RESULT, FALSE, Aide_EventScript_NoRoomForItem + giveitem_msg Route11_EastEntrance_2F_Text_ReceivedItemfinderFromAide, ITEM_ITEMFINDER + setflag FLAG_GOT_ITEMFINDER + msgbox Route11_EastEntrance_2F_Text_ExplainItemfinder + release + end + +Route11_EastEntrance_2F_EventScript_AlreadyGotItemfinder:: + msgbox Route11_EastEntrance_2F_Text_ExplainItemfinder + release + end + +Route11_EastEntrance_2F_EventScript_GetAideRequestInfo:: + buffernumberstring STR_VAR_1, REQUIRED_CAUGHT_MONS + bufferitemname STR_VAR_2, ITEM_ITEMFINDER + return + +Route11_EastEntrance_2F_Text_GiveItemfinderIfCaught30:: + .string "Hi! Remember me?\n" + .string "I'm one of PROF. OAK's AIDES.\p" + .string "If your POKéDEX has complete data\n" + .string "on {STR_VAR_1} species, I'm supposed to\l" + .string "give you a reward.\p" + .string "PROF. OAK entrusted me with the\n" + .string "{STR_VAR_2} for you.\p" + .string "So, {PLAYER}, let me ask you.\p" + .string "Have you gathered data on at least\n" + .string "{STR_VAR_1} kinds of POKéMON?$" + +Route11_EastEntrance_2F_Text_GreatHereYouGo:: + .string "Great! You have caught or owned\n" + .string "{STR_VAR_3} kinds of POKéMON!\p" + .string "Congratulations!\n" + .string "Here you go!$" + +Route11_EastEntrance_2F_Text_ReceivedItemfinderFromAide:: + .string "{PLAYER} received the {STR_VAR_2}\n" + .string "from the AIDE.$" + +Route11_EastEntrance_2F_Text_ExplainItemfinder:: + .string "There are items on the ground that\n" + .string "may be hidden from view.\p" + .string "Use the ITEMFINDER to detect any\n" + .string "hidden items close to you.\p" + .string "The machine is a bit limited.\n" + .string "It can't pinpoint item locations.\p" + .string "What it does is show the direction\n" + .string "where the item is.\p" + .string "Use it to get your bearings, then\n" + .string "search the suspect area by hand.$" + +Route11_EastEntrance_2F_Text_BigMonAsleepOnRoad:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "A big POKéMON is asleep on a road!$" + +Route11_EastEntrance_2F_Text_WhatABreathtakingView:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "What a breathtaking view!$" + +Route11_EastEntrance_2F_Text_RockTunnelGoodRouteToLavender:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "To get to LAVENDER TOWN from\n" + .string "CERULEAN CITY…\p" + .string "ROCK TUNNEL appears to be a good\n" + .string "route to take.$" + diff --git a/data/maps/Route12/scripts.inc b/data/maps/Route12/scripts.inc new file mode 100644 index 000000000000..6f1d2c0f555c --- /dev/null +++ b/data/maps/Route12/scripts.inc @@ -0,0 +1,202 @@ +Route12_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, Route12_OnResume + .byte 0 + +Route12_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, Route12_EventScript_TryRemoveSnorlax + end + +Route12_EventScript_TryRemoveSnorlax:: + removeobject VAR_LAST_TALKED + return + +Route12_EventScript_Snorlax:: + lock + faceplayer + goto_if_unset FLAG_GOT_POKE_FLUTE, Route12_EventScript_SnorlaxNoPokeFlute + msgbox Text_WantToUsePokeFlute, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Route12_EventScript_DontUsePokeFlute + call EventScript_AwakenSnorlax + setwildbattle SPECIES_SNORLAX, 30 + waitse + playmoncry SPECIES_SNORLAX, CRY_MODE_ENCOUNTER + delay 40 + waitmoncry + setflag FLAG_HIDE_ROUTE_12_SNORLAX + setflag FLAG_SYS_CTRL_OBJ_DELETE + setflag FLAG_WOKE_UP_ROUTE_12_SNORLAX + dowildbattle + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, Route12_EventScript_FoughtSnorlax + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, Route12_EventScript_FoughtSnorlax + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, Route12_EventScript_FoughtSnorlax + release + end + +Route12_EventScript_DontUsePokeFlute:: + release + end + +Route12_EventScript_FoughtSnorlax:: + msgbox Text_SnorlaxReturnedToMountains + release + end + +Route12_EventScript_SnorlaxNoPokeFlute:: + msgbox Route12_Text_MonSprawledOutInSlumber + release + end + +Route12_EventScript_RouteSign:: + msgbox Route12_Text_RouteSign, MSGBOX_SIGN + end + +Route12_EventScript_FishingSign:: + msgbox Route12_Text_SportfishingArea, MSGBOX_SIGN + end + +Route12_Text_MonSprawledOutInSlumber:: + .string "A POKéMON is sprawled out in\n" + .string "a deep and comfortable slumber.$" + +Text_SnorlaxWokeUp:: + .string "SNORLAX woke up!\p" + .string "It attacked in a grumpy rage!$" + +Text_SnorlaxReturnedToMountains:: + .string "SNORLAX calmed down.\n" + .string "It gave a huge yawn…\l" + .string "And returned to the mountains.$" + +Text_WantToUsePokeFlute:: + .string "Want to use the POKé FLUTE?$" + +Text_PlayedPokeFlute:: + .string "{PLAYER} played the POKé FLUTE.$" + +Route12_Text_NedIntro:: + .string "Yeah!\n" + .string "I got a bite here!$" + +Route12_Text_NedDefeat:: + .string "Tch!\n" + .string "Just a small fry…$" + +Route12_Text_NedPostBattle:: + .string "Hang on!\n" + .string "My line's snagged!$" + +Route12_Text_ChipIntro:: + .string "Be patient.\n" + .string "Fishing is a waiting game.$" + +Route12_Text_ChipDefeat:: + .string "That one got away!$" + +Route12_Text_ChipPostBattle:: + .string "With a better ROD, I could catch\n" + .string "better POKéMON…$" + +Route12_Text_JustinIntro:: + .string "I'm searching for a MOON STONE.\n" + .string "Have you found one?$" + +Route12_Text_JustinDefeat:: + .string "Oww!$" + +Route12_Text_JustinPostBattle:: + .string "I could have made my POKéMON\n" + .string "evolve with a MOON STONE.\p" + .string "I would have won then, I bet.$" + +Route12_Text_LucaIntro:: + .string "Electricity is my specialty.\p" + .string "I don't know a thing about POKéMON\n" + .string "of the sea, though.$" + +Route12_Text_LucaDefeat:: + .string "Unplugged!$" + +Route12_Text_LucaPostBattle:: + .string "Water conducts electricity, so you\n" + .string "should zap sea POKéMON.$" + +Route12_Text_HankIntro:: + .string "The FISHING FOOL versus POKéMON\n" + .string "KID!$" + +Route12_Text_HankDefeat:: + .string "Touch too much!$" + +Route12_Text_HankPostBattle:: + .string "I guess you get to be good at\n" + .string "what you like.\p" + .string "Well, you beat me at POKéMON,\n" + .string "but you can't top me at fishing.$" + +Route12_Text_ElliotIntro:: + .string "I love fishing, don't get me wrong.\p" + .string "But it'd be best if I also had more\n" + .string "work.$" + +Route12_Text_ElliotDefeat:: + .string "It's not easy…$" + +Route12_Text_ElliotPostBattle:: + .string "It's all right.\n" + .string "Losing doesn't bug me anymore.$" + +Route12_Text_AndrewIntro:: + .string "What's catching?\p" + .string "You never know what you could\n" + .string "catch!$" + +Route12_Text_AndrewDefeat:: + .string "Lost it!$" + +Route12_Text_AndrewPostBattle:: + .string "What, MAGIKARP?\p" + .string "I catch them all the time, sure.\n" + .string "But, boy are they wimpy.$" + +Route12_Text_RouteSign:: + .string "ROUTE 12 \n" + .string "North to LAVENDER$" + +Route12_Text_SportfishingArea:: + .string "SPORTFISHING AREA$" + +Route12_Text_JesIntro:: + .string "JES: If I win, I'm going to\n" + .string "propose to GIA.$" + +Route12_Text_JesDefeat:: + .string "JES: Oh, please, why couldn't you\n" + .string "let us win?$" + +Route12_Text_JesPostBattle:: + .string "JES: Oh, GIA, forgive me,\n" + .string "my love!$" + +Route12_Text_JesNotEnoughMons:: + .string "JES: GIA and I, we'll be\n" + .string "together forever.\p" + .string "We won't battle unless you have\n" + .string "two POKéMON of your own.$" + +Route12_Text_GiaIntro:: + .string "GIA: Hey, JES…\p" + .string "If we win, I'll marry you!$" + +Route12_Text_GiaDefeat:: + .string "GIA: Oh, but why?$" + +Route12_Text_GiaPostBattle:: + .string "GIA: JES, you silly!\n" + .string "You ruined this!$" + +Route12_Text_GiaNotEnoughMons:: + .string "GIA: I can't bear to battle\n" + .string "without my JES!\p" + .string "Don't you have one more POKéMON?$" diff --git a/data/maps/Route12_FishingHouse/scripts.inc b/data/maps/Route12_FishingHouse/scripts.inc new file mode 100644 index 000000000000..27588fda256a --- /dev/null +++ b/data/maps/Route12_FishingHouse/scripts.inc @@ -0,0 +1,189 @@ +Route12_FishingHouse_MapScripts:: + .byte 0 + +Route12_FishingHouse_EventScript_FishingGuruBrother:: + lock + faceplayer + goto_if_set FLAG_GOT_SUPER_ROD, Route12_FishingHouse_EventScript_CheckMagikarpRecord + msgbox Route12_FishingHouse_Text_DoYouLikeToFish, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, Route12_FishingHouse_EventScript_GiveSuperRod + msgbox Route12_FishingHouse_Text_OhThatsDisappointing + release + end + +Route12_FishingHouse_EventScript_GiveSuperRod:: + checkitemspace ITEM_SUPER_ROD + goto_if_eq VAR_RESULT, FALSE, Route12_FishingHouse_EventScript_NoRoomForSuperRod + additem ITEM_SUPER_ROD + msgbox Route12_FishingHouse_Text_TakeThisAndFish + msgreceiveditem Route12_FishingHouse_Text_ReceivedSuperRod, ITEM_SUPER_ROD + setflag FLAG_GOT_SUPER_ROD + msgbox Route12_FishingHouse_Text_IfYouCatchBigMagikarpShowMe + release + end + +Route12_FishingHouse_EventScript_NoRoomForSuperRod:: + msgbox Route12_FishingHouse_Text_NoRoomForGift + release + end + +Route12_FishingHouse_EventScript_CheckMagikarpRecord:: + setvar VAR_0x8004, SPECIES_MAGIKARP + specialvar VAR_RESULT, DoesPlayerPartyContainSpecies + goto_if_eq VAR_RESULT, FALSE, Route12_FishingHouse_EventScript_NoMagikarpInParty + special GetMagikarpSizeRecordInfo + msgbox Route12_FishingHouse_Text_OhMagikarpAllowMeToSee + special ChoosePartyMon + waitstate + copyvar VAR_RESULT, VAR_0x8004 + goto_if_ge VAR_RESULT, PARTY_SIZE, Route12_FishingHouse_EventScript_CancelShowMon + special CompareMagikarpSize + goto_if_eq VAR_RESULT, 1, Route12_FishingHouse_EventScript_NotMagikarp + goto_if_eq VAR_RESULT, 2, Route12_FishingHouse_EventScript_NotRecordMagikarp + goto_if_eq VAR_RESULT, 3, Route12_FishingHouse_EventScript_NewRecordMagikarp + goto_if_eq VAR_RESULT, 4, Route12_FishingHouse_EventScript_TieRecordMagikarp + release + end + +Route12_FishingHouse_EventScript_NoMagikarpInParty:: + msgbox Route12_FishingHouse_Text_TryFishingBringMeMagikarp + release + end + +Route12_FishingHouse_EventScript_CancelShowMon:: + release + end + +Route12_FishingHouse_EventScript_NotMagikarp:: + msgbox Route12_FishingHouse_Text_DoesntLookLikeMagikarp + release + end + +Route12_FishingHouse_EventScript_NotRecordMagikarp:: + goto_if_unset FLAG_GOT_RECORD_SETTING_MAGIKARP, Route12_FishingHouse_EventScript_NewRecordMagikarp + msgbox Route12_FishingHouse_Text_HmmXInchesDoesntMeasureUp + release + end + +Route12_FishingHouse_EventScript_TieRecordMagikarp:: + goto_if_unset FLAG_GOT_RECORD_SETTING_MAGIKARP, Route12_FishingHouse_EventScript_NewRecordMagikarp + msgbox Route12_FishingHouse_Text_HuhXInchesSameSizeAsLast + release + end + +Route12_FishingHouse_EventScript_NewRecordMagikarp:: + setflag FLAG_GOT_RECORD_SETTING_MAGIKARP + msgbox Route12_FishingHouse_Text_WhoaXInchesTakeThis + giveitem ITEM_NET_BALL + goto_if_eq VAR_RESULT, FALSE, Route12_FishingHouse_EventScript_NoRoomForNetBall + msgbox Route12_FishingHouse_Text_LookForwardToGreaterRecords + release + end + +Route12_FishingHouse_EventScript_NoRoomForNetBall:: + msgbox Route12_FishingHouse_Text_NoRoomForGift + release + end + +Route12_FishingHouse_EventScript_MagikarpRecordSign:: + lockall + goto_if_set FLAG_GOT_RECORD_SETTING_MAGIKARP, Route12_FishingHouse_EventScript_MagikarpRecordSignRecordSet + msgbox Route12_FishingHouse_Text_BlankChartOfSomeSort + releaseall + end + +Route12_FishingHouse_EventScript_MagikarpRecordSignRecordSet:: + special GetMagikarpSizeRecordInfo + msgbox Route12_FishingHouse_Text_MostGiganticMagikarpXInches + releaseall + end + +Route12_FishingHouse_Text_DoYouLikeToFish:: + .string "I'm the FISHING GURU's younger\n" + .string "brother.\p" + .string "I simply looove fishing!\n" + .string "I can't bear to go without.\p" + .string "Tell me, do you like to fish?$" + +Route12_FishingHouse_Text_TakeThisAndFish:: + .string "Grand! I like your style.\n" + .string "I think we can be friends.\p" + .string "Take this and fish, young friend!$" + +Route12_FishingHouse_Text_ReceivedSuperRod:: + .string "{PLAYER} received a SUPER ROD from\n" + .string "the FISHING GURU's brother.$" + +Route12_FishingHouse_Text_IfYouCatchBigMagikarpShowMe:: + .string "Fishing is a way of life!\n" + .string "It is like the finest poetry.\p" + .string "From the seas to rivers, go out\n" + .string "and land the big one, my friend.\p" + .string "Now, I have a request.\p" + .string "If you catch a big MAGIKARP \n" + .string "with that ROD, I want to see it.\p" + .string "As much as I love to fish, I also\n" + .string "love seeing gigantic MAGIKARP.$" + +Route12_FishingHouse_Text_OhThatsDisappointing:: + .string "Oh…\n" + .string "That's so disappointing…$" + +Route12_FishingHouse_Text_TryFishingBringMeMagikarp:: + .string "Hello there, {PLAYER}!\n" + .string "Have you been fishing?\p" + .string "Try fishing with the SUPER ROD in\n" + .string "any body of water.\p" + .string "You'll find different POKéMON in\n" + .string "different places.\p" + .string "Oh, and don't forget to bring me\n" + .string "gigantic MAGIKARP.$" + +Route12_FishingHouse_Text_OhMagikarpAllowMeToSee:: + .string "Oh? {PLAYER}?\n" + .string "Why, if it isn't a MAGIKARP!\p" + .string "Allow me to see it, quick!$" + +Route12_FishingHouse_Text_WhoaXInchesTakeThis:: + .string "… … …Whoa!\n" + .string "{STR_VAR_2} inches!\p" + .string "You have a rare appreciation for\n" + .string "the fine, poetic aspects of fishing!\p" + .string "You must take this.\n" + .string "I insist!$" + +Route12_FishingHouse_Text_LookForwardToGreaterRecords:: + .string "I'll look forward to seeing greater\n" + .string "records from you!$" + +Route12_FishingHouse_Text_HuhXInchesSameSizeAsLast:: + .string "Huh?\n" + .string "{STR_VAR_2} inches?\p" + .string "This is the same size as the one\n" + .string "I saw before.$" + +Route12_FishingHouse_Text_HmmXInchesDoesntMeasureUp:: + .string "Hmm…\n" + .string "This one is {STR_VAR_2} inches long.\p" + .string "It doesn't measure up to the\n" + .string "{STR_VAR_3}-inch one you brought before.$" + +Route12_FishingHouse_Text_DoesntLookLikeMagikarp:: + .string "Uh… That doesn't look much like\n" + .string "a MAGIKARP.$" + +Route12_FishingHouse_Text_NoRoomForGift:: + .string "Oh, no!\p" + .string "I had a gift for you, but you have\n" + .string "no room for it.$" + +Route12_FishingHouse_Text_MostGiganticMagikarpXInches:: + .string "The most gigantic MAGIKARP\n" + .string "I have ever witnessed…\p" + .string "{STR_VAR_3} inches!$" + +Route12_FishingHouse_Text_BlankChartOfSomeSort:: + .string "It's a blank chart of some sort.\p" + .string "It has spaces for writing in\n" + .string "records of some kind.$" + diff --git a/data/maps/Route12_NorthEntrance_1F/scripts.inc b/data/maps/Route12_NorthEntrance_1F/scripts.inc new file mode 100644 index 000000000000..998d55b406e0 --- /dev/null +++ b/data/maps/Route12_NorthEntrance_1F/scripts.inc @@ -0,0 +1,11 @@ +Route12_NorthEntrance_1F_MapScripts:: + .byte 0 + +Route12_NorthEntrance_1F_EventScript_Guard:: + msgbox Route12_NorthEntrance_1F_Text_LookoutSpotUpstairs, MSGBOX_NPC + end + +Route12_NorthEntrance_1F_Text_LookoutSpotUpstairs:: + .string "There's a lookout spot upstairs.\n" + .string "The view is magnificent.$" + diff --git a/data/maps/Route12_NorthEntrance_2F/scripts.inc b/data/maps/Route12_NorthEntrance_2F/scripts.inc new file mode 100644 index 000000000000..a199b5e05554 --- /dev/null +++ b/data/maps/Route12_NorthEntrance_2F/scripts.inc @@ -0,0 +1,80 @@ +Route12_NorthEntrance_2F_MapScripts:: + .byte 0 + +Route12_NorthEntrance_2F_EventScript_LeftBinoculars:: + msgbox Route12_NorthEntrance_2F_Text_TheresManFishing, MSGBOX_SIGN + end + +Route12_NorthEntrance_2F_EventScript_RightBinoculars:: + msgbox Route12_NorthEntrance_2F_Text_ItsPokemonTower, MSGBOX_SIGN + end + +Route12_NorthEntrance_2F_EventScript_Lass:: + lock + faceplayer + goto_if_set FLAG_GOT_TM27, Route12_NorthEntrance_2F_EventScript_ExplainTM27 + checkplayergender + call_if_eq VAR_RESULT, MALE, Route12_NorthEntrance_2F_EventScript_TakeTMMale + call_if_eq VAR_RESULT, FEMALE, Route12_NorthEntrance_2F_EventScript_TakeTMFemale + checkitemspace ITEM_TM27 + goto_if_eq VAR_RESULT, FALSE, Route12_NorthEntrance_2F_EventScript_NoRoomForTM27 + giveitem_msg Route12_NorthEntrance_2F_Text_ReceivedTM27FromLittleGirl, ITEM_TM27 + msgbox Route12_NorthEntrance_2F_Text_ExplainTM27 + setflag FLAG_GOT_TM27 + release + end + +Route12_NorthEntrance_2F_EventScript_TakeTMMale:: + msgbox Route12_NorthEntrance_2F_Text_TakeTMDontNeedAnymoreMale + return + +Route12_NorthEntrance_2F_EventScript_TakeTMFemale:: + msgbox Route12_NorthEntrance_2F_Text_TakeTMDontNeedAnymoreFemale + return + +Route12_NorthEntrance_2F_EventScript_NoRoomForTM27:: + msgbox Route12_NorthEntrance_2F_Text_DontHaveRoomForThis + release + end + +Route12_NorthEntrance_2F_EventScript_ExplainTM27:: + msgbox Route12_NorthEntrance_2F_Text_ExplainTM27 + release + end + +@ Male and female text identical, differ (presumably) in JP +Route12_NorthEntrance_2F_Text_TakeTMDontNeedAnymoreMale:: + .string "My POKéMON's ashes are stored in\n" + .string "POKéMON TOWER.\p" + .string "You can have this TM.\n" + .string "I don't need it anymore…$" + +Route12_NorthEntrance_2F_Text_TakeTMDontNeedAnymoreFemale:: + .string "My POKéMON's ashes are stored in\n" + .string "POKéMON TOWER.\p" + .string "You can have this TM.\n" + .string "I don't need it anymore…$" + +Route12_NorthEntrance_2F_Text_ReceivedTM27FromLittleGirl:: + .string "{PLAYER} received TM27\n" + .string "from the little girl.$" + +Route12_NorthEntrance_2F_Text_ExplainTM27:: + .string "TM27 is a move called RETURN…\p" + .string "If you treat your POKéMON good,\n" + .string "it will return your love by working\l" + .string "its hardest in battle.$" + +Route12_NorthEntrance_2F_Text_DontHaveRoomForThis:: + .string "You don't have room for this.$" + +Route12_NorthEntrance_2F_Text_TheresManFishing:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "There's a man fishing!$" + +Route12_NorthEntrance_2F_Text_ItsPokemonTower:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "It's POKéMON TOWER!$" + diff --git a/data/maps/Route13/scripts.inc b/data/maps/Route13/scripts.inc new file mode 100644 index 000000000000..4c30cd8be260 --- /dev/null +++ b/data/maps/Route13/scripts.inc @@ -0,0 +1,143 @@ +Route13_MapScripts:: + .byte 0 + +Route13_EventScript_TrainerTips1:: + msgbox Route13_Text_LookToLeftOfThatPost, MSGBOX_SIGN + end + +Route13_EventScript_TrainerTips2:: + msgbox Route13_Text_SelectToSwitchItems, MSGBOX_SIGN + end + +Route13_EventScript_RouteSign:: + msgbox Route13_Text_RouteSign, MSGBOX_SIGN + end + +Route13_Text_SebastianIntro:: + .string "My bird POKéMON want to battle\n" + .string "with you!$" + +Route13_Text_SebastianDefeat:: + .string "My PIDGEY and PIDGEOTTO combo\n" + .string "lost?$" + +Route13_Text_SebastianPostBattle:: + .string "My POKéMON look happy even though\n" + .string "they lost.$" + +Route13_Text_SusieIntro:: + .string "I'm told I'm good for a kid.$" + +Route13_Text_SusieDefeat:: + .string "Ohh!\n" + .string "I lost!$" + +Route13_Text_SusiePostBattle:: + .string "I want to become a good TRAINER.\n" + .string "I'll train hard, just watch.$" + +Route13_Text_ValerieIntro:: + .string "Wow!\n" + .string "Your BADGES are too cool!$" + +Route13_Text_ValerieDefeat:: + .string "Not enough!$" + +Route13_Text_ValeriePostBattle:: + .string "You got those BADGES from GYM\n" + .string "LEADERS. I know!$" + +Route13_Text_GwenIntro:: + .string "My cute POKéMON wish to make your\n" + .string "acquaintance.$" + +Route13_Text_GwenDefeat:: + .string "Good going!\n" + .string "You totally won!$" + +Route13_Text_GwenPostBattle:: + .string "You have to make POKéMON battle\n" + .string "to toughen them up.$" + +Route13_Text_AlmaIntro:: + .string "I found CARBOS in a cave once\n" + .string "while I was spelunking.$" + +Route13_Text_AlmaDefeat:: + .string "Oh, too bad!\n" + .string "I just messed up!$" + +Route13_Text_AlmaPostBattle:: + .string "CARBOS boosted the SPEED of my\n" + .string "POKéMON.$" + +Route13_Text_PerryIntro:: + .string "I'm not going to lose.\n" + .string "Not when the wind's blowing my way!$" + +Route13_Text_PerryDefeat:: + .string "The wind turned!$" + +Route13_Text_PerryPostBattle:: + .string "I'm beat.\n" + .string "I guess I'll FLY home.$" + +Route13_Text_LolaIntro:: + .string "Sure, I'll play with you, sweetie.$" + +Route13_Text_LolaDefeat:: + .string "Oh!\n" + .string "You little beast!$" + +Route13_Text_LolaPostBattle:: + .string "I wonder which is stronger, male or\n" + .string "female POKéMON?$" + +Route13_Text_SheilaIntro:: + .string "Do you want to battle some\n" + .string "POKéMON with me?$" + +Route13_Text_SheilaDefeat:: + .string "It's over already?$" + +Route13_Text_SheilaPostBattle:: + .string "I don't know anything about\n" + .string "POKéMON actually.\p" + .string "The ones I use… I picked them\n" + .string "for their looks!$" + +Route13_Text_JaredIntro:: + .string "What're you lookin' at?$" + +Route13_Text_JaredDefeat:: + .string "Dang!\n" + .string "Stripped gears!$" + +Route13_Text_JaredPostBattle:: + .string "Get lost!$" + +Route13_Text_RobertIntro:: + .string "I always go with bird POKéMON.\n" + .string "I've dedicated myself to them.$" + +Route13_Text_RobertDefeat:: + .string "Out of power!$" + +Route13_Text_RobertPostBattle:: + .string "I wish I could fly like PIDGEY and\n" + .string "PIDGEOTTO…$" + +Route13_Text_LookToLeftOfThatPost:: + .string "TRAINER TIPS\p" + .string "Look, look!\n" + .string "Look to the left of that post!$" + +Route13_Text_SelectToSwitchItems:: + .string "TRAINER TIPS\p" + .string "Use SELECT to switch items in the\n" + .string "ITEMS window.$" + +Route13_Text_RouteSign:: + .string "ROUTE 13\n" + .string "North to SILENCE BRIDGE$" + diff --git a/data/maps/Route14/scripts.inc b/data/maps/Route14/scripts.inc new file mode 100644 index 000000000000..e88479cb512e --- /dev/null +++ b/data/maps/Route14/scripts.inc @@ -0,0 +1,163 @@ +Route14_MapScripts:: + .byte 0 + +Route14_EventScript_RouteSign:: + msgbox Route14_Text_RouteSign, MSGBOX_SIGN + end + +Route14_Text_CarterIntro:: + .string "You need to use TMs to teach good\n" + .string "moves to POKéMON.$" + +Route14_Text_CarterDefeat:: + .string "Not good enough quite yet.$" + +Route14_Text_CarterPostBattle:: + .string "You have some HMs, right? POKéMON\n" + .string "can't forget those moves easily.$" + +Route14_Text_MitchIntro:: + .string "My bird POKéMON should be ready\n" + .string "for battle.$" + +Route14_Text_MitchDefeat:: + .string "Not ready yet!$" + +Route14_Text_MitchPostBattle:: + .string "My bird POKéMON need to learn\n" + .string "better moves.$" + +Route14_Text_BeckIntro:: + .string "They have TMs on sale at the\n" + .string "CELADON DEPT. STORE.\p" + .string "TMs aren't really rare, but not\n" + .string "many people have HMs.$" + +Route14_Text_BeckDefeat:: + .string "Aww, bummer!$" + +Route14_Text_BeckPostBattle:: + .string "Try teaching POKéMON a move that's\n" + .string "the same type as it.\p" + .string "That apparently boosts the power\n" + .string "of the move.$" + +Route14_Text_MarlonIntro:: + .string "Have you taught your bird POKéMON\n" + .string "how to FLY?\p" + .string "You'll be able to soar with it into\n" + .string "the sky!$" + +Route14_Text_MarlonDefeat:: + .string "Shot down in flames!$" + +Route14_Text_MarlonPostBattle:: + .string "Bird POKéMON are my one true love.\n" + .string "I don't want to raise anything else.$" + +Route14_Text_DonaldIntro:: + .string "Have you heard the legend of the\n" + .string "winged mirages?$" + +Route14_Text_DonaldDefeat:: + .string "Why?\n" + .string "Why'd I lose?$" + +Route14_Text_DonaldPostBattle:: + .string "Well, the winged mirages are the\n" + .string "legendary bird POKéMON.\p" + .string "There are three of them: ARTICUNO,\n" + .string "ZAPDOS, and MOLTRES.$" + +Route14_Text_BennyIntro:: + .string "I'm not into it, but okay.\n" + .string "Let's go!$" + +Route14_Text_BennyDefeat:: + .string "I knew it!$" + +Route14_Text_BennyPostBattle:: + .string "Winning, losing… It's insignificant\n" + .string "under this huge sky.$" + +Route14_Text_LukasIntro:: + .string "C'mon, c'mon.\n" + .string "Let's go, let's go, let's go!$" + +Route14_Text_LukasDefeat:: + .string "Arrg!\n" + .string "Lost! Get lost!$" + +Route14_Text_LukasPostBattle:: + .string "What, what, what?\n" + .string "What do you want still?$" + +Route14_Text_IsaacIntro:: + .string "I need to burn some time.\n" + .string "Shut up and battle.$" + +Route14_Text_IsaacDefeat:: + .string "What?\n" + .string "You!?$" + +Route14_Text_IsaacPostBattle:: + .string "Raising POKéMON is a drag, man.$" + +Route14_Text_GeraldIntro:: + .string "We ride out here because of the\n" + .string "wide-open spaces.$" + +Route14_Text_GeraldDefeat:: + .string "Wipeout!$" + +Route14_Text_GeraldPostBattle:: + .string "It's cool you made your POKéMON so\n" + .string "strong.\p" + .string "Might is right!\n" + .string "And you know it!$" + +Route14_Text_MalikIntro:: + .string "POKéMON battle?\n" + .string "Cool! Rumble!$" + +Route14_Text_MalikDefeat:: + .string "Blown away!$" + +Route14_Text_MalikPostBattle:: + .string "You know who'd win, you and me\n" + .string "one-on-one!$" + +Route14_Text_RouteSign:: + .string "ROUTE 14\n" + .string "West to FUCHSIA CITY$" + +Route14_Text_KiriIntro:: + .string "KIRI: JAN, let's try really,\n" + .string "really hard together.$" + +Route14_Text_KiriDefeat:: + .string "KIRI: Whimper…\n" + .string "We lost, didn't we?$" + +Route14_Text_KiriPostBattle:: + .string "KIRI: Did we lose because of me?$" + +Route14_Text_KiriNotEnoughMons:: + .string "KIRI: We can battle if you have\n" + .string "two POKéMON.$" + +Route14_Text_JanIntro:: + .string "JAN: KIRI, here we go!\n" + .string "We have to try hard!$" + +Route14_Text_JanDefeat:: + .string "JAN: Eeeeh!\n" + .string "No fair!$" + +Route14_Text_JanPostBattle:: + .string "JAN: KIRI, don't cry!\n" + .string "We'll just try harder next time.$" + +Route14_Text_JanNotEnoughMons:: + .string "JAN: You want to battle?\n" + .string "You don't have enough POKéMON.$" diff --git a/data/maps/Route15/scripts.inc b/data/maps/Route15/scripts.inc new file mode 100644 index 000000000000..304a2ebd841e --- /dev/null +++ b/data/maps/Route15/scripts.inc @@ -0,0 +1,161 @@ +Route15_MapScripts:: + .byte 0 + +Route15_EventScript_RouteSign:: + msgbox Route15_Text_RouteSign, MSGBOX_SIGN + end + +Route15_Text_KindraIntro:: + .string "I just got some POKéMON in trades.\n" + .string "Can I try them out on you?$" + +Route15_Text_KindraDefeat:: + .string "Not good enough!$" + +Route15_Text_KindraPostBattle:: + .string "You can't change the nickname of\n" + .string "any POKéMON you get in a trade.\p" + .string "Only the Original TRAINER can get\n" + .string "the nickname changed.$" + +Route15_Text_BeckyIntro:: + .string "You look gentle, so I think I can\n" + .string "beat you.\p" + .string "I'll give it a go!$" + +Route15_Text_BeckyDefeat:: + .string "No, wrong!$" + +Route15_Text_BeckyPostBattle:: + .string "I'm afraid of BIKERS. They look so\n" + .string "ugly and mean!$" + +Route15_Text_EdwinIntro:: + .string "When I whistle, I can summon bird\n" + .string "POKéMON.$" + +Route15_Text_EdwinDefeat:: + .string "Ow!\n" + .string "That's tragic!$" + +Route15_Text_EdwinPostBattle:: + .string "Maybe I'm not cut out for battles.\n" + .string "I'm not the right type, I guess.$" + +Route15_Text_ChesterIntro:: + .string "Hmm? My birds are shivering!\n" + .string "You're good, aren't you?$" + +Route15_Text_ChesterDefeat:: + .string "Just as I thought!$" + +Route15_Text_ChesterPostBattle:: + .string "This is so obvious, you should know\n" + .string "this, but…\p" + .string "Moves like EARTHQUAKE and FISSURE\n" + .string "have no effect on bird POKéMON.$" + +Route15_Text_GraceIntro:: + .string "Oh, you're a little cutie!\n" + .string "So like a darling POKéMON!$" + +Route15_Text_GraceDefeat:: + .string "You looked so cute, too!$" + +Route15_Text_GracePostBattle:: + .string "I forgive you.\n" + .string "I can take it.\l" + .string "I'm a big girl now.$" + +Route15_Text_OliviaIntro:: + .string "I raise POKéMON for protection\n" + .string "because I live alone.$" + +Route15_Text_OliviaDefeat:: + .string "POKéMON isn't about winning or\n" + .string "losing for me.$" + +Route15_Text_OliviaPostBattle:: + .string "I love having my POKéMON greet me\n" + .string "when I get home.\p" + .string "It's so reassuring.$" + +Route15_Text_ErnestIntro:: + .string "Hey, kid! C'mon!\n" + .string "I just got these off some loser!$" + +Route15_Text_ErnestDefeat:: + .string "Why not?$" + +Route15_Text_ErnestPostBattle:: + .string "Life's too short.\n" + .string "It's cool to live as an outlaw.\l" + .string "TEAM ROCKET RULES!$" + +Route15_Text_AlexIntro:: + .string "Fork over all your cash when you\n" + .string "lose to me, kid!$" + +Route15_Text_AlexDefeat:: + .string "That can't be true!$" + +Route15_Text_AlexPostBattle:: + .string "I was just joking about the money.\n" + .string "Don't take me all serious.$" + +Route15_Text_CeliaIntro:: + .string "What's cool and happening?\n" + .string "Trading POKéMON!$" + +Route15_Text_CeliaDefeat:: + .string "I said trade!$" + +Route15_Text_CeliaPostBattle:: + .string "I trade POKéMON with my friends\n" + .string "all the time.$" + +Route15_Text_YazminIntro:: + .string "Want to play with my POKéMON?$" + +Route15_Text_YazminDefeat:: + .string "I was too impatient!$" + +Route15_Text_YazminPostBattle:: + .string "I'll go train with weaker people.$" + +Route15_Text_RouteSign:: + .string "ROUTE 15\n" + .string "West to FUCHSIA CITY$" + +Route15_Text_MyaIntro:: + .string "MYA: You're perfect.\n" + .string "Help me train my little brother?$" + +Route15_Text_MyaDefeat:: + .string "MYA: RON, you have to focus!\n" + .string "Concentrate on what you're doing!$" + +Route15_Text_MyaPostBattle:: + .string "MYA: Okay, we'll turn it up.\n" + .string "I'll add to our training menu!$" + +Route15_Text_MyaNotEnoughMons:: + .string "MYA: Do you want to challenge us?\n" + .string "You'll need two POKéMON, though.$" + +Route15_Text_RonIntro:: + .string "RON: My sister gets scary when we\n" + .string "lose.$" + +Route15_Text_RonDefeat:: + .string "RON: Oh, no, no…\n" + .string "Sis, I'm sorry!$" + +Route15_Text_RonPostBattle:: + .string "RON: Oh, bleah…\n" + .string "I wish I had a nice sister…$" + +Route15_Text_RonNotEnoughMons:: + .string "RON: Did you want to battle with\n" + .string "my sister and me?\p" + .string "You need two POKéMON, then.$" diff --git a/data/maps/Route15_WestEntrance_1F/scripts.inc b/data/maps/Route15_WestEntrance_1F/scripts.inc new file mode 100644 index 000000000000..a1e74ee8d0d5 --- /dev/null +++ b/data/maps/Route15_WestEntrance_1F/scripts.inc @@ -0,0 +1,12 @@ +Route15_WestEntrance_1F_MapScripts:: + .byte 0 + +Route15_WestEntrance_1F_EventScript_Guard:: + msgbox Route15_WestEntrance_1F_Text_OaksAideCameByHere, MSGBOX_NPC + end + +Route15_WestEntrance_1F_Text_OaksAideCameByHere:: + .string "Are you the kid who's working on\n" + .string "a POKéDEX?\p" + .string "PROF. OAK's AIDE came by here.$" + diff --git a/data/maps/Route15_WestEntrance_2F/scripts.inc b/data/maps/Route15_WestEntrance_2F/scripts.inc new file mode 100644 index 000000000000..60f3cfbe7476 --- /dev/null +++ b/data/maps/Route15_WestEntrance_2F/scripts.inc @@ -0,0 +1,93 @@ +.equ REQUIRED_CAUGHT_MONS, 50 + +Route15_WestEntrance_2F_MapScripts:: + .byte 0 + +Route15_WestEntrance_2F_EventScript_LeftBinoculars:: + lockall + msgbox Route15_WestEntrance_2F_Text_LargeShiningBird + showmonpic SPECIES_ARTICUNO, 10, 3 + delay 20 + waitbuttonpress + hidemonpic + setvar VAR_0x8004, SPECIES_ARTICUNO + special SetSeenMon + releaseall + end + +Route15_WestEntrance_2F_EventScript_RightBinoculars:: + msgbox Route15_WestEntrance_2F_Text_SmallIslandOnHorizon, MSGBOX_SIGN + end + +Route15_WestEntrance_2F_EventScript_Aide:: + lock + faceplayer + call Route15_WestEntrance_2F_EventScript_GetAideRequestInfo + goto_if_set FLAG_GOT_EXP_SHARE_FROM_OAKS_AIDE, Route15_WestEntrance_2F_EventScript_AlreadyGotExpShare + msgbox Route15_WestEntrance_2F_Text_GiveItemIfCaughtEnough, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Aide_EventScript_DeclineCheckMons + setvar VAR_0x8004, 0 + specialvar VAR_RESULT, GetFrlgPokedexCount + buffernumberstring STR_VAR_3, VAR_0x8006 + call Route15_WestEntrance_2F_EventScript_GetAideRequestInfo + goto_if_lt VAR_0x8006, REQUIRED_CAUGHT_MONS, Aide_EventScript_HaventCaughtEnough + msgbox Route15_WestEntrance_2F_Text_GreatHereYouGo + checkitemspace ITEM_EXP_SHARE + goto_if_eq VAR_RESULT, FALSE, Aide_EventScript_NoRoomForItem + giveitem_msg Route15_WestEntrance_2F_Text_ReceivedItemFromAide, ITEM_EXP_SHARE + setflag FLAG_GOT_EXP_SHARE_FROM_OAKS_AIDE + msgbox Route15_WestEntrance_2F_Text_ExplainExpShare + release + end + +Route15_WestEntrance_2F_EventScript_AlreadyGotExpShare:: + msgbox Route15_WestEntrance_2F_Text_ExplainExpShare + release + end + +Route15_WestEntrance_2F_EventScript_GetAideRequestInfo:: + buffernumberstring STR_VAR_1, REQUIRED_CAUGHT_MONS + bufferitemname STR_VAR_2, ITEM_EXP_SHARE + return + +Route15_WestEntrance_2F_Text_GiveItemIfCaughtEnough:: + .string "Hi! Remember me?\n" + .string "I'm one of PROF. OAK's AIDES.\p" + .string "If your POKéDEX has complete data\n" + .string "on {STR_VAR_1} species, I'm supposed to\l" + .string "give you a reward.\p" + .string "PROF. OAK entrusted me with the\n" + .string "{STR_VAR_2} for you.\p" + .string "So, {PLAYER}, let me ask you.\p" + .string "Have you gathered data on at least\n" + .string "{STR_VAR_1} kinds of POKéMON?$" + +Route15_WestEntrance_2F_Text_GreatHereYouGo:: + .string "Great! You have caught or owned\n" + .string "{STR_VAR_3} kinds of POKéMON!\p" + .string "Congratulations!\n" + .string "Here you go!$" + +Route15_WestEntrance_2F_Text_ReceivedItemFromAide:: + .string "{PLAYER} received the {STR_VAR_2}\n" + .string "from the AIDE.$" + +Route15_WestEntrance_2F_Text_ExplainExpShare:: + .string "EXP. SHARE is an item to be held\n" + .string "by a POKéMON.\p" + .string "The POKéMON will receive a share\n" + .string "of the EXP. Points without having\l" + .string "to battle.$" + +Route15_WestEntrance_2F_Text_LargeShiningBird:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "A large, shining bird is flying\n" + .string "toward the sea.$" + +Route15_WestEntrance_2F_Text_SmallIslandOnHorizon:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "It looks like a small island on\n" + .string "the horizon!$" + diff --git a/data/maps/Route16/scripts.inc b/data/maps/Route16/scripts.inc new file mode 100644 index 000000000000..5dafe56652ea --- /dev/null +++ b/data/maps/Route16/scripts.inc @@ -0,0 +1,188 @@ +Route16_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, Route16_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, Route16_OnTransition + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, Route16_OnWarp + .byte 0 + +Route16_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, Route16_EventScript_RemoveSnorlax + end + +Route16_EventScript_RemoveSnorlax:: + removeobject VAR_LAST_TALKED + return + +Route16_OnTransition:: + call_if_eq VAR_MAP_SCENE_ROUTE16, 1, Route16_OnTransitionCyclingRoad + end + +Route16_OnTransitionCyclingRoad:: + setflag FLAG_SYS_ON_CYCLING_ROAD + return + +Route16_OnWarp:: + map_script_2 VAR_MAP_SCENE_ROUTE16, 1, Route16_OnWarpCyclingRoad + .2byte 0 + +Route16_OnWarpCyclingRoad:: + special ForcePlayerOntoBike + end + +Route16_EventScript_Snorlax:: + lock + faceplayer + goto_if_unset FLAG_GOT_POKE_FLUTE, Route16_EventScript_SnorlaxNoPokeFlute + msgbox Text_WantToUsePokeFlute, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Route16_EventScript_DontUsePokeFlute + call EventScript_AwakenSnorlax + setwildbattle SPECIES_SNORLAX, 30 + waitse + playmoncry SPECIES_SNORLAX, CRY_MODE_ENCOUNTER + delay 40 + waitmoncry + setflag FLAG_HIDE_ROUTE_16_SNORLAX + setflag FLAG_SYS_CTRL_OBJ_DELETE + dowildbattle + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, Route16_EventScript_FoughtSnorlax + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, Route16_EventScript_FoughtSnorlax + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, Route16_EventScript_FoughtSnorlax + release + end + +Route16_EventScript_DontUsePokeFlute:: + release + end + +Route16_EventScript_FoughtSnorlax:: + msgbox Text_SnorlaxReturnedToMountains + release + end + +Route16_EventScript_SnorlaxNoPokeFlute:: + msgbox Route16_Text_MonSprawledOutInSlumber + release + end + +Route16_EventScript_CyclingRoadSign:: + msgbox Route16_Text_CyclingRoadSign, MSGBOX_SIGN + end + +Route16_EventScript_RouteSign:: + msgbox Route16_Text_RouteSign, MSGBOX_SIGN + end + +Route16_Text_LaoIntro:: + .string "What do you want?$" + +Route16_Text_LaoDefeat:: + .string "Don't you dare laugh!$" + +Route16_Text_LaoPostBattle:: + .string "We like just hanging here.\n" + .string "What's it to you?$" + +Route16_Text_KojiIntro:: + .string "Nice BIKE!\n" + .string "Hand it over!$" + +Route16_Text_KojiDefeat:: + .string "Knockout!$" + +Route16_Text_KojiPostBattle:: + .string "Forget it, who needs your BIKE!$" + +Route16_Text_LukeIntro:: + .string "Come out and play, little mouse!$" + +Route16_Text_LukeDefeat:: + .string "You little rat!$" + +Route16_Text_LukePostBattle:: + .string "I hate losing!\n" + .string "Get out of my face!$" + +Route16_Text_HideoIntro:: + .string "Hey, you just bumped me!$" + +Route16_Text_HideoDefeat:: + .string "Kaboom!$" + +Route16_Text_HideoPostBattle:: + .string "We'll always be hanging around here\n" + .string "even if you don't like it.\p" + .string "You can detour to VERMILION from\n" + .string "FUCHSIA going along the coast.$" + +Route16_Text_CamronIntro:: + .string "I'm feeling hungry and mean!\n" + .string "I need a punching bag!$" + +Route16_Text_CamronDefeat:: + .string "Bad, bad, bad!$" + +Route16_Text_CamronPostBattle:: + .string "If I'm going to have POKéMON, they\n" + .string "may as well be ferocious.\p" + .string "I'd use them to leave my enemies\n" + .string "in tatters.$" + +Route16_Text_RubenIntro:: + .string "Hey, there!\n" + .string "Let's have ourselves a good time!$" + +Route16_Text_RubenDefeat:: + .string "Don't make me mad!$" + +Route16_Text_RubenPostBattle:: + .string "I get my kicks by harassing people\n" + .string "with my stinking POKéMON.\p" + .string "They're great for startling people.\n" + .string "And, they bite, too.$" + +Route16_Text_MonSprawledOutInSlumber:: + .string "A POKéMON is sprawled out in\n" + .string "a deep and comfortable slumber.$" + +Route16_Text_CyclingRoadSign:: + .string "Enjoy the slope!\n" + .string "CYCLING ROAD$" + +Route16_Text_RouteSign:: + .string "ROUTE 16\n" + .string "CELADON CITY - FUCHSIA CITY$" + +Route16_Text_JedIntro:: + .string "JED: Our love knows no bounds.\n" + .string "We're in love and we show it!$" + +Route16_Text_JedDefeat:: + .string "JED: Oh, no!\n" + .string "My love has seen me as a loser!$" + +Route16_Text_JedPostBattle:: + .string "JED: Listen, LEA.\n" + .string "You need to focus less on me.$" + +Route16_Text_JedNotEnoughMons:: + .string "JED: You have just one POKéMON?\n" + .string "Is there no love in your heart?$" + +Route16_Text_LeaIntro:: + .string "LEA: Sometimes, the intensity of\n" + .string "our love scares me.$" + +Route16_Text_LeaDefeat:: + .string "LEA: Ohh! But JED looks cool\n" + .string "even in a loss!$" + +Route16_Text_LeaPostBattle:: + .string "LEA: Ehehe, I'm sorry.\n" + .string "JED is so cool.$" + +Route16_Text_LeaNotEnoughMons:: + .string "LEA: Oh, you don't have two\n" + .string "POKéMON with you?\p" + .string "Doesn't it feel lonely for you or\n" + .string "your POKéMON?$" diff --git a/data/maps/Route16_House/scripts.inc b/data/maps/Route16_House/scripts.inc new file mode 100644 index 000000000000..56aa88678a3d --- /dev/null +++ b/data/maps/Route16_House/scripts.inc @@ -0,0 +1,57 @@ +Route16_House_MapScripts:: + .byte 0 + +Route16_House_EventScript_Woman:: + lock + faceplayer + goto_if_set FLAG_GOT_HM02, Route16_House_EventScript_AlreadyGotHM02 + msgbox Route16_House_Text_FoundMySecretRetreat + checkitemspace ITEM_HM02 + goto_if_eq VAR_RESULT, FALSE, Route16_House_EventScript_NoRoomForHM02 + giveitem_msg Route16_House_Text_ReceivedHM02FromGirl, ITEM_HM02 + msgbox Route16_House_Text_ExplainHM02 + setflag FLAG_GOT_HM02 + release + end + +Route16_House_EventScript_NoRoomForHM02:: + msgbox Route16_House_Text_DontHaveAnyRoomForThis + release + end + +Route16_House_EventScript_AlreadyGotHM02:: + msgbox Route16_House_Text_ExplainHM02 + release + end + +Route16_House_EventScript_Fearow:: + lock + faceplayer + waitse + playmoncry SPECIES_FEAROW, CRY_MODE_NORMAL + msgbox Route16_House_Text_Fearow + waitmoncry + release + end + +Route16_House_Text_FoundMySecretRetreat:: + .string "Oh, dear.\n" + .string "You've found my secret retreat.\p" + .string "Please don't tell anyone I'm here.\n" + .string "I'll make it up to you with this!$" + +Route16_House_Text_ReceivedHM02FromGirl:: + .string "{PLAYER} received HM02\n" + .string "from the girl.$" + +Route16_House_Text_ExplainHM02:: + .string "HM02 is FLY.\n" + .string "It's a wonderfully convenient move.\p" + .string "Please, put it to good use.$" + +Route16_House_Text_DontHaveAnyRoomForThis:: + .string "You don't have any room for this.$" + +Route16_House_Text_Fearow:: + .string "FEAROW: Kyueen!$" + diff --git a/data/maps/Route16_NorthEntrance_1F/scripts.inc b/data/maps/Route16_NorthEntrance_1F/scripts.inc new file mode 100644 index 000000000000..df9addb0d353 --- /dev/null +++ b/data/maps/Route16_NorthEntrance_1F/scripts.inc @@ -0,0 +1,131 @@ +Route16_NorthEntrance_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route16_NorthEntrance_1F_OnTransition + .byte 0 + +Route16_NorthEntrance_1F_OnTransition:: + clearflag FLAG_SYS_ON_CYCLING_ROAD + call_if_set FLAG_GOT_BICYCLE, Route16_NorthEntrance_1F_EventScript_DisableNeedBikeTrigger + end + +Route16_NorthEntrance_1F_EventScript_DisableNeedBikeTrigger:: + setvar VAR_TEMP_1, 1 + return + +Route16_NorthEntrance_1F_EventScript_Guard:: + msgbox Route16_NorthEntrance_1F_Text_CyclingRoadIsDownhillCourse, MSGBOX_NPC + end + +Route16_NorthEntrance_1F_EventScript_NeedBikeTriggerTop:: + lockall + setvar VAR_0x8008, 0 + goto Route16_NorthEntrance_1F_EventScript_NeedBikeTrigger + end + +Route16_NorthEntrance_1F_EventScript_NeedBikeTriggerMidTop:: + lockall + setvar VAR_0x8008, 1 + goto Route16_NorthEntrance_1F_EventScript_NeedBikeTrigger + end + +Route16_NorthEntrance_1F_EventScript_NeedBikeTriggerMid:: + lockall + setvar VAR_0x8008, 2 + goto Route16_NorthEntrance_1F_EventScript_NeedBikeTrigger + end + +Route16_NorthEntrance_1F_EventScript_NeedBikeTriggerMidBottom:: + lockall + setvar VAR_0x8008, 3 + goto Route16_NorthEntrance_1F_EventScript_NeedBikeTrigger + end + +Route16_NorthEntrance_1F_EventScript_NeedBikeTriggerBottom:: + lockall + setvar VAR_0x8008, 4 + goto Route16_NorthEntrance_1F_EventScript_NeedBikeTrigger + end + +Route16_NorthEntrance_1F_EventScript_NeedBikeTrigger:: + textcolor NPC_TEXT_COLOR_MALE + msgbox Route16_NorthEntrance_1F_Text_ExcuseMeWaitUp + closemessage + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + delay 20 + call_if_eq VAR_0x8008, 1, Route16_NorthEntrance_1F_EventScript_PlayerWalkToCounterMidTop + call_if_eq VAR_0x8008, 2, Route16_NorthEntrance_1F_EventScript_PlayerWalkToCounterMid + call_if_eq VAR_0x8008, 3, Route16_NorthEntrance_1F_EventScript_PlayerWalkToCounterMidBottom + call_if_eq VAR_0x8008, 4, Route16_NorthEntrance_1F_EventScript_PlayerWalkToCounterBottom + msgbox Route16_NorthEntrance_1F_Text_NoPedestriansOnCyclingRoad + closemessage + applymovement LOCALID_PLAYER, Route16_NorthEntrance_1F_Movement_WalkRight + waitmovement 0 + releaseall + end + +Route16_NorthEntrance_1F_EventScript_PlayerWalkToCounterMidTop:: + applymovement LOCALID_PLAYER, Route16_NorthEntrance_1F_Movement_WalkUp + waitmovement 0 + return + +Route16_NorthEntrance_1F_EventScript_PlayerWalkToCounterMid:: + applymovement LOCALID_PLAYER, Route16_NorthEntrance_1F_Movement_WalkUp2 + waitmovement 0 + return + +Route16_NorthEntrance_1F_EventScript_PlayerWalkToCounterMidBottom:: + applymovement LOCALID_PLAYER, Route16_NorthEntrance_1F_Movement_WalkUp3 + waitmovement 0 + return + +Route16_NorthEntrance_1F_EventScript_PlayerWalkToCounterBottom:: + applymovement LOCALID_PLAYER, Route16_NorthEntrance_1F_Movement_WalkUp4 + waitmovement 0 + return + +Route16_NorthEntrance_1F_Movement_WalkUp:: + walk_up + step_end + +Route16_NorthEntrance_1F_Movement_WalkUp2:: + walk_up + walk_up + step_end + +Route16_NorthEntrance_1F_Movement_WalkUp3:: + walk_up + walk_up + walk_up + step_end + +Route16_NorthEntrance_1F_Movement_WalkUp4:: + walk_up + walk_up + walk_up + walk_up + step_end + +Route16_NorthEntrance_1F_Movement_WalkRight:: + walk_right + step_end + +Route16_NorthEntrance_1F_EventScript_OldMan:: + msgbox Route16_NorthEntrance_1F_Text_HowdYouGetInGoodEffort, MSGBOX_NPC + end + +Route16_NorthEntrance_1F_Text_NoPedestriansOnCyclingRoad:: + .string "No pedestrians are allowed on\n" + .string "CYCLING ROAD!$" + +Route16_NorthEntrance_1F_Text_CyclingRoadIsDownhillCourse:: + .string "CYCLING ROAD is a downhill course\n" + .string "by the sea. It's a great ride.$" + +Route16_NorthEntrance_1F_Text_ExcuseMeWaitUp:: + .string "Excuse me!\n" + .string "Wait up, please!$" + +Route16_NorthEntrance_1F_Text_HowdYouGetInGoodEffort:: + .string "How'd you get in?\n" + .string "Good effort!$" + diff --git a/data/maps/Route16_NorthEntrance_2F/scripts.inc b/data/maps/Route16_NorthEntrance_2F/scripts.inc new file mode 100644 index 000000000000..56c5f8401997 --- /dev/null +++ b/data/maps/Route16_NorthEntrance_2F/scripts.inc @@ -0,0 +1,99 @@ +.equ REQUIRED_CAUGHT_MONS, 40 + +Route16_NorthEntrance_2F_MapScripts:: + .byte 0 + +Route16_NorthEntrance_2F_EventScript_LittleBoy:: + msgbox Route16_NorthEntrance_2F_Text_OnBikeRideWithGirlfriend, MSGBOX_NPC + end + +Route16_NorthEntrance_2F_EventScript_LittleGirl:: + msgbox Route16_NorthEntrance_2F_Text_RidingTogetherOnNewBikes, MSGBOX_NPC + end + +Route16_NorthEntrance_2F_EventScript_LeftBinoculars:: + msgbox Route16_NorthEntrance_2F_Text_ItsCeladonDeptStore, MSGBOX_SIGN + end + +Route16_NorthEntrance_2F_EventScript_RightBinoculars:: + msgbox Route16_NorthEntrance_2F_Text_LongPathOverWater, MSGBOX_SIGN + end + +Route16_NorthEntrance_2F_EventScript_Aide:: + lock + faceplayer + call Route16_NorthEntrance_2F_EventScript_GetAideRequestInfo + goto_if_set FLAG_GOT_AMULET_COIN_FROM_OAKS_AIDE, Route16_NorthEntrance_2F_EventScript_AlreadyGotAmuletCoin + msgbox Route16_NorthEntrance_2F_Text_GiveAmuletCoinIfCaught40, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Aide_EventScript_DeclineCheckMons + setvar VAR_0x8004, 0 + specialvar VAR_RESULT, GetFrlgPokedexCount + buffernumberstring STR_VAR_3, VAR_0x8006 + call Route16_NorthEntrance_2F_EventScript_GetAideRequestInfo + goto_if_lt VAR_0x8006, REQUIRED_CAUGHT_MONS, Aide_EventScript_HaventCaughtEnough + msgbox Route16_NorthEntrance_2F_Text_GreatHereYouGo + checkitemspace ITEM_AMULET_COIN + goto_if_eq VAR_RESULT, FALSE, Aide_EventScript_NoRoomForItem + giveitem_msg Route16_NorthEntrance_2F_Text_ReceivedAmuletCoinFromAide, ITEM_AMULET_COIN + setflag FLAG_GOT_AMULET_COIN_FROM_OAKS_AIDE + msgbox Route16_NorthEntrance_2F_Text_ExplainAmuletCoin + release + end + +Route16_NorthEntrance_2F_EventScript_AlreadyGotAmuletCoin:: + msgbox Route16_NorthEntrance_2F_Text_ExplainAmuletCoin + release + end + +Route16_NorthEntrance_2F_EventScript_GetAideRequestInfo:: + buffernumberstring STR_VAR_1, REQUIRED_CAUGHT_MONS + bufferitemname STR_VAR_2, ITEM_AMULET_COIN + return + +Route16_NorthEntrance_2F_Text_OnBikeRideWithGirlfriend:: + .string "I'm on a relaxing ride on my new\n" + .string "bike with my girlfriend.$" + +Route16_NorthEntrance_2F_Text_RidingTogetherOnNewBikes:: + .string "We're going riding together on our\n" + .string "new bikes.$" + +Route16_NorthEntrance_2F_Text_ItsCeladonDeptStore:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "It's the CELADON DEPT. STORE!$" + +Route16_NorthEntrance_2F_Text_LongPathOverWater:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "There's a long path over water far\n" + .string "away.$" + +Route16_NorthEntrance_2F_Text_GiveAmuletCoinIfCaught40:: + .string "Hi! Remember me?\n" + .string "I'm one of PROF. OAK's AIDES.\p" + .string "If your POKéDEX has complete data\n" + .string "on 40 species, I'm supposed to\l" + .string "give you a reward.\p" + .string "PROF. OAK entrusted me with an\n" + .string "AMULET COIN for you.\p" + .string "So, {PLAYER}, let me ask you.\p" + .string "Have you gathered data on at least\n" + .string "40 kinds of POKéMON?$" + +Route16_NorthEntrance_2F_Text_GreatHereYouGo:: + .string "Great! You have caught or owned\n" + .string "{STR_VAR_3} kinds of POKéMON!\p" + .string "Congratulations!\n" + .string "Here you go!$" + +Route16_NorthEntrance_2F_Text_ReceivedAmuletCoinFromAide:: + .string "{PLAYER} received the AMULET COIN\n" + .string "from the AIDE.$" + +Route16_NorthEntrance_2F_Text_ExplainAmuletCoin:: + .string "An AMULET COIN is an item to be\n" + .string "held by a POKéMON.\p" + .string "If the POKéMON appears in a winning\n" + .string "battle, you will earn more money.$" + diff --git a/data/maps/Route17/scripts.inc b/data/maps/Route17/scripts.inc new file mode 100644 index 000000000000..ae4010c0138b --- /dev/null +++ b/data/maps/Route17/scripts.inc @@ -0,0 +1,158 @@ +Route17_MapScripts:: + .byte 0 + +Route17_EventScript_ItemsNotice:: + msgbox Route17_Text_WatchOutForDiscardedItems, MSGBOX_SIGN + end + +Route17_EventScript_TrainerTips1:: + msgbox Route17_Text_SameSpeciesGrowDifferentRates, MSGBOX_SIGN + end + +Route17_EventScript_TrainerTips2:: + msgbox Route17_Text_PressBToStayInPlace, MSGBOX_SIGN + end + +Route17_EventScript_RouteSign:: + msgbox Route17_Text_RouteSign, MSGBOX_SIGN + end + +Route17_EventScript_BallsNotice:: + msgbox Route17_Text_DontThrowGameThrowBalls, MSGBOX_SIGN + end + +Route17_EventScript_CyclingRoadSign:: + msgbox Route17_Text_CyclingRoadSign, MSGBOX_SIGN + end + +Route17_Text_RaulIntro:: + .string "There's no getting rich quick in\n" + .string "battling kids.$" + +Route17_Text_RaulDefeat:: + .string "Burned out!$" + +Route17_Text_RaulPostBattle:: + .string "You can find good stuff lying\n" + .string "around on CYCLING ROAD.\p" + .string "There's good money in picking them\n" + .string "up and selling them.$" + +Route17_Text_IsaiahIntro:: + .string "I'm mighty proud of my bod, kiddo.\n" + .string "Come on!$" + +Route17_Text_IsaiahDefeat:: + .string "Whoo!$" + +Route17_Text_IsaiahPostBattle:: + .string "I could belly-bump you outta\n" + .string "here!$" + +Route17_Text_VirgilIntro:: + .string "You heading to FUCHSIA?$" + +Route17_Text_VirgilDefeat:: + .string "Crash and burn!$" + +Route17_Text_VirgilPostBattle:: + .string "I love racing downhill!$" + +Route17_Text_BillyIntro:: + .string "We're BIKERS!\n" + .string "We rule the roads, man!$" + +Route17_Text_BillyDefeat:: + .string "Smoked!$" + +Route17_Text_BillyPostBattle:: + .string "Are you looking for adventure?$" + +Route17_Text_NikolasIntro:: + .string "Let VOLTORB electrify you!$" + +Route17_Text_NikolasDefeat:: + .string "Grounded out!$" + +Route17_Text_NikolasPostBattle:: + .string "I got my VOLTORB at the abandoned\n" + .string "POWER PLANT.$" + +Route17_Text_ZeekIntro:: + .string "I leveled up my POKéMON, but it\n" + .string "won't evolve. Why?$" + +Route17_Text_ZeekDefeat:: + .string "Why, you!$" + +Route17_Text_ZeekPostBattle:: + .string "Maybe some POKéMON need element\n" + .string "STONES to evolve.$" + +Route17_Text_JamalIntro:: + .string "I need a little exercise!$" + +Route17_Text_JamalDefeat:: + .string "Whew!\n" + .string "Good workout!$" + +Route17_Text_JamalPostBattle:: + .string "I'm sure I lost weight there!$" + +Route17_Text_CoreyIntro:: + .string "Be a rebel!$" + +Route17_Text_CoreyDefeat:: + .string "Aaaargh!$" + +Route17_Text_CoreyPostBattle:: + .string "Be ready to fight for your beliefs!$" + +Route17_Text_JaxonIntro:: + .string "Nice BIKE!\n" + .string "How's it handle?$" + +Route17_Text_JaxonDefeat:: + .string "Shoot!$" + +Route17_Text_JaxonPostBattle:: + .string "The slope makes it hard to steer.$" + +Route17_Text_WilliamIntro:: + .string "Get lost, kid!\n" + .string "I'm bushed!$" + +Route17_Text_WilliamDefeat:: + .string "Are you satisfied?$" + +Route17_Text_WilliamPostBattle:: + .string "I need to catch a few z's!$" + +Route17_Text_WatchOutForDiscardedItems:: + .string "It's a notice.\p" + .string "Watch out for discarded items.$" + +Route17_Text_SameSpeciesGrowDifferentRates:: + .string "TRAINER TIPS\p" + .string "All POKéMON are unique.\p" + .string "Even POKéMON of the same species\n" + .string "and level grow at different rates.$" + +Route17_Text_PressBToStayInPlace:: + .string "TRAINER TIPS\p" + .string "Press the B Button to stay in place\n" + .string "while on a slope.$" + +Route17_Text_RouteSign:: + .string "ROUTE 17\n" + .string "CELADON CITY - FUCHSIA CITY$" + +Route17_Text_DontThrowGameThrowBalls:: + .string "It's a notice!\p" + .string "Don't throw the game, throw POKé\n" + .string "BALLS instead!$" + +Route17_Text_CyclingRoadSign:: + .string "CYCLING ROAD\n" + .string "Slope ends here!$" + diff --git a/data/maps/Route18/scripts.inc b/data/maps/Route18/scripts.inc new file mode 100644 index 000000000000..42a261e7306f --- /dev/null +++ b/data/maps/Route18/scripts.inc @@ -0,0 +1,69 @@ +Route18_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route18_OnTransition + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, Route18_OnWarp + .byte 0 + +Route18_OnTransition:: + call_if_eq VAR_MAP_SCENE_ROUTE16, 1, Route18_OnTransitionCyclingRoad + end + +Route18_OnTransitionCyclingRoad:: + setflag FLAG_SYS_ON_CYCLING_ROAD + return + +Route18_OnWarp:: + map_script_2 VAR_MAP_SCENE_ROUTE16, 1, Route18_OnWarpCyclingRoad + .2byte 0 + +Route18_OnWarpCyclingRoad:: + special ForcePlayerOntoBike + end + +Route18_EventScript_RouteSign:: + msgbox Route18_Text_RouteSign, MSGBOX_SIGN + end + +Route18_EventScript_CyclingRoadSign:: + msgbox Route18_Text_CyclingRoadSign, MSGBOX_SIGN + end + +Route18_Text_WiltonIntro:: + .string "I always check every grassy area\n" + .string "for new POKéMON.$" + +Route18_Text_WiltonDefeat:: + .string "Tch!$" + +Route18_Text_WiltonPostBattle:: + .string "I wish I had a BIKE!$" + +Route18_Text_RamiroIntro:: + .string "Kurukkoo!\n" + .string "How do you like my birdcall?$" + +Route18_Text_RamiroDefeat:: + .string "I had to bug you!$" + +Route18_Text_RamiroPostBattle:: + .string "I collect sea POKéMON on weekends\n" + .string "because the sea is so close.$" + +Route18_Text_JacobIntro:: + .string "This is my turf!\n" + .string "Get out of here!$" + +Route18_Text_JacobDefeat:: + .string "Darn!$" + +Route18_Text_JacobPostBattle:: + .string "This is my fave area for catching\n" + .string "POKéMON.$" + +Route18_Text_RouteSign:: + .string "ROUTE 18\n" + .string "CELADON CITY - FUCHSIA CITY$" + +Route18_Text_CyclingRoadSign:: + .string "CYCLING ROAD\n" + .string "No pedestrians permitted!$" + diff --git a/data/maps/Route18_EastEntrance_1F/scripts.inc b/data/maps/Route18_EastEntrance_1F/scripts.inc new file mode 100644 index 000000000000..9abf5fb2ae77 --- /dev/null +++ b/data/maps/Route18_EastEntrance_1F/scripts.inc @@ -0,0 +1,122 @@ +Route18_EastEntrance_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route18_EastEntrance_1F_OnTransition + .byte 0 + +Route18_EastEntrance_1F_OnTransition:: + clearflag FLAG_SYS_ON_CYCLING_ROAD + call_if_set FLAG_GOT_BICYCLE, Route18_EastEntrance_1F_EventScript_DisableNeedBikeTrigger + end + +Route18_EastEntrance_1F_EventScript_DisableNeedBikeTrigger:: + setvar VAR_TEMP_1, 1 + return + +Route18_EastEntrance_1F_EventScript_Guard:: + msgbox Route18_EastEntrance_1F_Text_CyclingRoadAllUphillFromHere, MSGBOX_NPC + end + +Route18_EastEntrance_1F_EventScript_NeedBikeTriggerTop:: + lockall + setvar VAR_0x8008, 0 + goto Route18_EastEntrance_1F_EventScript_NeedBikeTrigger + end + +Route18_EastEntrance_1F_EventScript_NeedBikeTriggerMidTop:: + lockall + setvar VAR_0x8008, 1 + goto Route18_EastEntrance_1F_EventScript_NeedBikeTrigger + end + +Route18_EastEntrance_1F_EventScript_NeedBikeTriggerMid:: + lockall + setvar VAR_0x8008, 2 + goto Route18_EastEntrance_1F_EventScript_NeedBikeTrigger + end + +Route18_EastEntrance_1F_EventScript_NeedBikeTriggerMidBottom:: + lockall + setvar VAR_0x8008, 3 + goto Route18_EastEntrance_1F_EventScript_NeedBikeTrigger + end + +Route18_EastEntrance_1F_EventScript_NeedBikeTriggerBottom:: + lockall + setvar VAR_0x8008, 4 + goto Route18_EastEntrance_1F_EventScript_NeedBikeTrigger + end + +Route18_EastEntrance_1F_EventScript_NeedBikeTrigger:: + textcolor NPC_TEXT_COLOR_MALE + msgbox Route18_EastEntrance_1F_Text_ExcuseMe + closemessage + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + delay 20 + call_if_eq VAR_0x8008, 1, Route18_EastEntrance_1F_EventScript_PlayerWalkToCounterMidTop + call_if_eq VAR_0x8008, 2, Route18_EastEntrance_1F_EventScript_PlayerWalkToCounterMid + call_if_eq VAR_0x8008, 3, Route18_EastEntrance_1F_EventScript_PlayerWalkToCounterMidBottom + call_if_eq VAR_0x8008, 4, Route18_EastEntrance_1F_EventScript_PlayerWalkToCounterBottom + msgbox Route18_EastEntrance_1F_Text_NeedBicycleForCyclingRoad + closemessage + applymovement LOCALID_PLAYER, Route18_EastEntrance_1F_Movement_WalkRight + waitmovement 0 + releaseall + end + +Route18_EastEntrance_1F_EventScript_PlayerWalkToCounterMidTop:: + applymovement LOCALID_PLAYER, Route18_EastEntrance_1F_Movement_WalkUp + waitmovement 0 + return + +Route18_EastEntrance_1F_EventScript_PlayerWalkToCounterMid:: + applymovement LOCALID_PLAYER, Route18_EastEntrance_1F_Movement_WalkUp2 + waitmovement 0 + return + +Route18_EastEntrance_1F_EventScript_PlayerWalkToCounterMidBottom:: + applymovement LOCALID_PLAYER, Route18_EastEntrance_1F_Movement_WalkUp3 + waitmovement 0 + return + +Route18_EastEntrance_1F_EventScript_PlayerWalkToCounterBottom:: + applymovement LOCALID_PLAYER, Route18_EastEntrance_1F_Movement_WalkUp4 + waitmovement 0 + return + +Route18_EastEntrance_1F_Movement_WalkUp:: + walk_up + step_end + +Route18_EastEntrance_1F_Movement_WalkUp2:: + walk_up + walk_up + step_end + +Route18_EastEntrance_1F_Movement_WalkUp3:: + walk_up + walk_up + walk_up + step_end + +Route18_EastEntrance_1F_Movement_WalkUp4:: + walk_up + walk_up + walk_up + walk_up + step_end + +Route18_EastEntrance_1F_Movement_WalkRight:: + walk_right + step_end + +Route18_EastEntrance_1F_Text_NeedBicycleForCyclingRoad:: + .string "You need a BICYCLE to go out on\n" + .string "CYCLING ROAD!$" + +Route18_EastEntrance_1F_Text_CyclingRoadAllUphillFromHere:: + .string "CYCLING ROAD is all uphill from\n" + .string "here.$" + +Route18_EastEntrance_1F_Text_ExcuseMe:: + .string "Excuse me!$" + diff --git a/data/maps/Route18_EastEntrance_2F/scripts.inc b/data/maps/Route18_EastEntrance_2F/scripts.inc new file mode 100644 index 000000000000..8c0dfda1d81c --- /dev/null +++ b/data/maps/Route18_EastEntrance_2F/scripts.inc @@ -0,0 +1,55 @@ +Route18_EastEntrance_2F_MapScripts:: + .byte 0 + +Route18_EastEntrance_2F_EventScript_LeftBinoculars:: + msgbox Route18_EastEntrance_2F_Text_PalletTownInWest, MSGBOX_SIGN + end + +Route18_EastEntrance_2F_EventScript_RightBinoculars:: + msgbox Route18_EastEntrance_2F_Text_PeopleSwimming, MSGBOX_SIGN + end + +Route18_EastEntrance_2F_EventScript_Haden:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_LICKITUNG + call EventScript_GetInGameTradeSpeciesInfo + goto_if_set FLAG_DID_MARC_TRADE, Route18_EastEntrance_2F_EventScript_AlreadyTraded + msgbox Trade_Text_LookingForMonWannaTradeForMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Route18_EastEntrance_2F_EventScript_DeclineTrade + call EventScript_ChooseMonForInGameTrade + goto_if_ge VAR_0x8004, PARTY_SIZE, Route18_EastEntrance_2F_EventScript_DeclineTrade + call EventScript_GetInGameTradeSpecies + goto_if_ne VAR_RESULT, VAR_0x8009, Route18_EastEntrance_2F_EventScript_NotRequestedMon + call EventScript_DoInGameTrade + msgbox Trade_Text_HeyThanks + setflag FLAG_DID_MARC_TRADE + release + end + +Route18_EastEntrance_2F_EventScript_DeclineTrade:: + msgbox Trade_Text_AwwOhWell + release + end + +Route18_EastEntrance_2F_EventScript_NotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox Trade_Text_WhatThatsNoMon + release + end + +Route18_EastEntrance_2F_EventScript_AlreadyTraded:: + msgbox Trade_Text_IsntMyOldMonGreat + release + end + +Route18_EastEntrance_2F_Text_PalletTownInWest:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "PALLET TOWN is in the west.$" + +Route18_EastEntrance_2F_Text_PeopleSwimming:: + .string "Let's see what the binoculars have\n" + .string "to show…\p" + .string "There are people swimming.$" + diff --git a/data/maps/Route19/scripts.inc b/data/maps/Route19/scripts.inc new file mode 100644 index 000000000000..17fb78f7e0fd --- /dev/null +++ b/data/maps/Route19/scripts.inc @@ -0,0 +1,161 @@ +Route19_MapScripts:: + .byte 0 + +Route19_EventScript_RouteSign:: + msgbox Route19_Text_RouteSign, MSGBOX_SIGN + end + +Route19_Text_RichardIntro:: + .string "I have to exercise and warm up\n" + .string "before going out for a swim.$" + +Route19_Text_RichardDefeat:: + .string "All warmed up!$" + +Route19_Text_RichardPostBattle:: + .string "Thanks, kid!\n" + .string "I'm ready for a swim.$" + +Route19_Text_ReeceIntro:: + .string "Wait! Slow down!\n" + .string "You'll have a heart attack!$" + +Route19_Text_ReeceDefeat:: + .string "Ooh!\n" + .string "That's chilly!$" + +Route19_Text_ReecePostBattle:: + .string "Watch out for TENTACOOL.\n" + .string "They sting so painfully.$" + +Route19_Text_MatthewIntro:: + .string "I love swimming!\n" + .string "What about you?$" + +Route19_Text_MatthewDefeat:: + .string "Belly flop!$" + +Route19_Text_MatthewPostBattle:: + .string "I can beat even marine POKéMON\n" + .string "at swimming.$" + +Route19_Text_DouglasIntro:: + .string "What's beyond the horizon?$" + +Route19_Text_DouglasDefeat:: + .string "Glub!$" + +Route19_Text_DouglasPostBattle:: + .string "I see a couple of islands over\n" + .string "yonder!$" + +Route19_Text_DavidIntro:: + .string "I tried diving for POKéMON, but it\n" + .string "was a no-go.$" + +Route19_Text_DavidDefeat:: + .string "Help!$" + +Route19_Text_DavidPostBattle:: + .string "I guess you have to fish for sea\n" + .string "POKéMON.$" + +Route19_Text_TonyIntro:: + .string "I look at the sea to forget all\n" + .string "the bad things that happened.$" + +Route19_Text_TonyDefeat:: + .string "Ooh!\n" + .string "Traumatic!$" + +Route19_Text_TonyPostBattle:: + .string "I'm looking at the sea to forget\n" + .string "the bad thing that happened!$" + +Route19_Text_AnyaIntro:: + .string "Oh, I just love your ride!\n" + .string "Can I have it if I win?$" + +Route19_Text_AnyaDefeat:: + .string "Oh! I lost!$" + +Route19_Text_AnyaPostBattle:: + .string "It's still a long way to go to\n" + .string "SEAFOAM ISLANDS…\p" + .string "I want to go back to FUCHSIA…$" + +Route19_Text_AliceIntro:: + .string "Swimming's great!\n" + .string "Sunburns aren't!$" + +Route19_Text_AliceDefeat:: + .string "Shocker!$" + +Route19_Text_AlicePostBattle:: + .string "My boyfriend wanted to swim to\n" + .string "SEAFOAM ISLANDS.$" + +Route19_Text_AxleIntro:: + .string "Ahoy, there!\n" + .string "These waters are treacherous!$" + +Route19_Text_AxleDefeat:: + .string "Ooh!\n" + .string "Dangerous!$" + +Route19_Text_AxlePostBattle:: + .string "M-my legs! They cramped up!\n" + .string "Glub, glub…$" + +Route19_Text_ConnieIntro:: + .string "I swam here with my friends…\n" + .string "I'm tired…$" + +Route19_Text_ConnieDefeat:: + .string "I'm exhausted…$" + +Route19_Text_ConniePostBattle:: + .string "If I were to ride a POKéMON on\n" + .string "the sea, I'd like a LAPRAS.\p" + .string "LAPRAS is so big, I bet it\n" + .string "would keep me dry on water.$" + +Route19_Text_RouteSign:: + .string "SEA ROUTE 19\n" + .string "FUCHSIA CITY - SEAFOAM ISLANDS$" + +Route19_Text_LiaIntro:: + .string "LIA: I'm looking after my brother.\n" + .string "He just became a TRAINER.$" + +Route19_Text_LiaDefeat:: + .string "LIA: That's no way to treat my\n" + .string "little brother!$" + +Route19_Text_LiaPostBattle:: + .string "LIA: Do you have a younger\n" + .string "brother?\p" + .string "I hope you're teaching him all\n" + .string "sorts of things.$" + +Route19_Text_LiaNotEnoughMons:: + .string "LIA: I want to battle together\n" + .string "with my little brother.\p" + .string "Don't you have two POKéMON?$" + +Route19_Text_LucIntro:: + .string "LUC: My big sis taught me how\n" + .string "to swim and train POKéMON.$" + +Route19_Text_LucDefeat:: + .string "LUC: Oh, wow!\n" + .string "Someone tougher than my big sis!$" + +Route19_Text_LucPostBattle:: + .string "LUC: My big sis is strong and nice.\n" + .string "I think she's awesome!$" + +Route19_Text_LucNotEnoughMons:: + .string "LUC: I don't want to if I can't\n" + .string "battle you with my big sis.\p" + .string "Don't you have two POKéMON?$" diff --git a/data/maps/Route19_UnusedHouse/scripts.inc b/data/maps/Route19_UnusedHouse/scripts.inc new file mode 100644 index 000000000000..f72f0ec4be95 --- /dev/null +++ b/data/maps/Route19_UnusedHouse/scripts.inc @@ -0,0 +1,2 @@ +Route19_UnusedHouse_MapScripts:: + .byte 0 diff --git a/data/maps/Route2/scripts.inc b/data/maps/Route2/scripts.inc new file mode 100644 index 000000000000..765a8d9da25d --- /dev/null +++ b/data/maps/Route2/scripts.inc @@ -0,0 +1,18 @@ +Route2_MapScripts:: + .byte 0 + +Route2_EventScript_RouteSign:: + msgbox Route2_Text_RouteSign, MSGBOX_SIGN + end + +Route2_EventScript_DiglettsCaveSign:: + msgbox Route2_Text_DiglettsCave, MSGBOX_SIGN + end + +Route2_Text_RouteSign:: + .string "ROUTE 2\n" + .string "VIRIDIAN CITY - PEWTER CITY$" + +Route2_Text_DiglettsCave:: + .string "DIGLETT'S CAVE$" + diff --git a/data/maps/Route20/scripts.inc b/data/maps/Route20/scripts.inc new file mode 100644 index 000000000000..3226bf5d6b56 --- /dev/null +++ b/data/maps/Route20/scripts.inc @@ -0,0 +1,153 @@ +Route20_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route20_OnTransition + .byte 0 + +Route20_OnTransition:: + call_if_unset FLAG_STOPPED_SEAFOAM_B3F_CURRENT, Route20_EventScript_ResetSeafoamBouldersForB3F + call_if_unset FLAG_STOPPED_SEAFOAM_B4F_CURRENT, Route20_EventScript_ResetSeafoamBouldersForB4F + end + +Route20_EventScript_ResetSeafoamBouldersForB3F:: + clearflag FLAG_HIDE_SEAFOAM_1F_BOULDER_1 + clearflag FLAG_HIDE_SEAFOAM_1F_BOULDER_2 + setflag FLAG_HIDE_SEAFOAM_B1F_BOULDER_1 + setflag FLAG_HIDE_SEAFOAM_B1F_BOULDER_2 + setflag FLAG_HIDE_SEAFOAM_B2F_BOULDER_1 + setflag FLAG_HIDE_SEAFOAM_B2F_BOULDER_2 + setflag FLAG_HIDE_SEAFOAM_B3F_BOULDER_1 + setflag FLAG_HIDE_SEAFOAM_B3F_BOULDER_2 + return + +Route20_EventScript_ResetSeafoamBouldersForB4F:: + clearflag FLAG_HIDE_SEAFOAM_B3F_BOULDER_3 + clearflag FLAG_HIDE_SEAFOAM_B3F_BOULDER_4 + clearflag FLAG_HIDE_SEAFOAM_B3F_BOULDER_5 + clearflag FLAG_HIDE_SEAFOAM_B3F_BOULDER_6 + setflag FLAG_HIDE_SEAFOAM_B4F_BOULDER_1 + setflag FLAG_HIDE_SEAFOAM_B4F_BOULDER_2 + return + +Route20_EventScript_SeafoamIslandsSign:: + msgbox Route20_Text_SeafoamIslands, MSGBOX_SIGN + end + +Route20_Text_BarryIntro:: + .string "The water is shallow here.\n" + .string "There are many people swimming.$" + +Route20_Text_BarryDefeat:: + .string "Splash!$" + +Route20_Text_BarryPostBattle:: + .string "I wish I could ride my POKéMON.\n" + .string "I bet you're not tired.$" + +Route20_Text_ShirleyIntro:: + .string "SEAFOAM is a quiet getaway.\n" + .string "I'm vacationing here.$" + +Route20_Text_ShirleyDefeat:: + .string "Quit it!$" + +Route20_Text_ShirleyPostBattle:: + .string "There's a huge cavern underneath\n" + .string "this island.$" + +Route20_Text_TiffanyIntro:: + .string "I love floating with the fishes\n" + .string "here among the waves.$" + +Route20_Text_TiffanyDefeat:: + .string "Yowch!$" + +Route20_Text_TiffanyPostBattle:: + .string "Want to float with me?$" + +Route20_Text_IreneIntro:: + .string "Are you on vacation, too?$" + +Route20_Text_IreneDefeat:: + .string "No mercy at all!$" + +Route20_Text_IrenePostBattle:: + .string "SEAFOAM used to be a single island\n" + .string "in the distant past.$" + +Route20_Text_DeanIntro:: + .string "Check out my buff physique!$" + +Route20_Text_DeanDefeat:: + .string "Wimpy!$" + +Route20_Text_DeanPostBattle:: + .string "I should've been buffing up my\n" + .string "POKéMON, not me!$" + +Route20_Text_DarrinIntro:: + .string "Why are you riding a POKéMON?\n" + .string "Can't you swim?$" + +Route20_Text_DarrinDefeat:: + .string "Ouch!\n" + .string "Torpedoed!$" + +Route20_Text_DarrinPostBattle:: + .string "Riding a POKéMON sure looks fun!$" + +Route20_Text_RogerIntro:: + .string "I rode my bird POKéMON here.$" + +Route20_Text_RogerDefeat:: + .string "Oh, no!\n" + .string "Now what am I to do?$" + +Route20_Text_RogerPostBattle:: + .string "My birds are exhausted.\n" + .string "They can't FLY me back!$" + +Route20_Text_NoraIntro:: + .string "My boyfriend gave me big pearls.$" + +Route20_Text_NoraDefeat:: + .string "Oh, no!\n" + .string "My pearls were in them!$" + +Route20_Text_NoraPostBattle:: + .string "Will my pearls grow bigger inside\n" + .string "CLOYSTER?$" + +Route20_Text_MissyIntro:: + .string "I swam here from CINNABAR ISLAND.\n" + .string "It wasn't easy, I tell you.$" + +Route20_Text_MissyDefeat:: + .string "I'm so disappointed!$" + +Route20_Text_MissyPostBattle:: + .string "POKéMON have taken over an\n" + .string "abandoned mansion on CINNABAR.\p" + .string "They call it the POKéMON MANSION\n" + .string "now.$" + +Route20_Text_MelissaIntro:: + .string "CINNABAR, in the west, has a LAB\n" + .string "for POKéMON.\p" + .string "My daddy works there.$" + +Route20_Text_MelissaDefeat:: + .string "Wait!\n" + .string "You're supposed to wait!$" + +Route20_Text_MelissaPostBattle:: + .string "CINNABAR is a volcanic island.\p" + .string "I heard it rose out of the sea\n" + .string "when a volcano erupted.$" + +Route20_Text_SeafoamIslands:: + .string "SEAFOAM ISLANDS$" + +Route20_Text_MistyTrainsHere:: + .string "Strong TRAINERS and WATER POKéMON\n" + .string "are common sights in these parts.\p" + .string "They say that MISTY of the\n" + .string "CERULEAN GYM trains here.$" diff --git a/data/maps/Route21_North/scripts.inc b/data/maps/Route21_North/scripts.inc new file mode 100644 index 000000000000..5fbfc41341ca --- /dev/null +++ b/data/maps/Route21_North/scripts.inc @@ -0,0 +1,53 @@ +Route21_North_MapScripts:: + .byte 0 + +Route21_North_Text_RonaldIntro:: + .string "You want to know if the fish are\n" + .string "biting?$" + +Route21_North_Text_RonaldDefeat:: + .string "Dang!$" + +Route21_North_Text_RonaldPostBattle:: + .string "I can't catch anything good.\n" + .string "Not one good POKéMON to be had!$" + +Route21_North_Text_WadeIntro:: + .string "I got a big haul!\n" + .string "Wanna go for it?$" + +Route21_North_Text_WadeDefeat:: + .string "Heheh, MAGIKARP just don't make\n" + .string "the grade, do they?$" + +Route21_North_Text_WadePostBattle:: + .string "I seem to only catch MAGIKARP!$" + +Route21_North_Text_SpencerIntro:: + .string "The sea cleanses my body and soul!$" + +Route21_North_Text_SpencerDefeat:: + .string "Ayah!$" + +Route21_North_Text_SpencerPostBattle:: + .string "The sea is great and all, but I\n" + .string "like the mountains, too.$" + +@ Below is the battle text for the Cue Ball that was on Route 21 in Gen 1. +@ This trainer wasnt used in Gen 3 so their text goes unused/untranslated +@ Interestingly they did add a rematch intro text for this trainer +@ English translations from RB are listed + +@ "What's wrong with me swimming?" +Route21_North_Text_CueBallIntro:: + .string "おれだって たまには\n" + .string "およぎに くるぜ!$" + +@ "Cheap shot!" +Route21_North_Text_CueBallDefeat:: + .string "ぐわわ!$" + +@ "I look like what? A studded inner tube? Get lost!" +Route21_North_Text_CueBallPostBattle:: + .string "うきやすそう だと?\n" + .string "うるせー おおきな おせわだッ!$" diff --git a/data/maps/Route21_South/scripts.inc b/data/maps/Route21_South/scripts.inc new file mode 100644 index 000000000000..491531658041 --- /dev/null +++ b/data/maps/Route21_South/scripts.inc @@ -0,0 +1,90 @@ +Route21_South_MapScripts:: + .byte 0 + +Route21_South_Text_JackIntro:: + .string "I caught my POKéMON at sea.$" + +Route21_South_Text_JackDefeat:: + .string "Diver!!\n" + .string "Down!!$" + +Route21_South_Text_JackPostBattle:: + .string "Where'd you catch your POKéMON?$" + +Route21_South_Text_JeromeIntro:: + .string "Right now, I'm in a triathlon meet.$" + +Route21_South_Text_JeromeDefeat:: + .string "Pant…\n" + .string "Pant… Pant…$" + +Route21_South_Text_JeromePostBattle:: + .string "I'm beat! But, I still have the\n" + .string "bike race and marathon left!$" + +Route21_South_Text_RolandIntro:: + .string "Ahh!\n" + .string "Feel the sun and the wind!$" + +Route21_South_Text_RolandDefeat:: + .string "Yow!\n" + .string "I lost!$" + +Route21_South_Text_RolandPostBattle:: + .string "I'm sunburnt to a crisp!$" + +Route21_South_Text_ClaudeIntro:: + .string "Hey, don't scare away the fish!$" + +Route21_South_Text_ClaudeDefeat:: + .string "Sorry! I'm just so frustrated from\n" + .string "not catching anything.$" + +Route21_South_Text_ClaudePostBattle:: + .string "Sheesh, I haven't caught a thing.\n" + .string "Could this place actually be a\l" + .string "giant pool or something?$" + +Route21_South_Text_NolanIntro:: + .string "Keep me company till I get a hit.$" + +Route21_South_Text_NolanDefeat:: + .string "That burned some time.$" + +Route21_South_Text_NolanPostBattle:: + .string "Oh wait!\n" + .string "I got a bite! Yeah!$" + +Route21_North_Text_LilIntro:: + .string "LIL: Huh? A battle?\n" + .string "IAN, can't you do it alone?$" + +Route21_North_Text_LilDefeat:: + .string "LIL: Oh, see?\n" + .string "We lost. Happy now?$" + +Route21_North_Text_LilPostBattle:: + .string "LIL: I'm tired.\n" + .string "Can't we go home already?$" + +Route21_North_Text_LilNotEnoughMons:: + .string "LIL: Huh? A battle?\n" + .string "I can't be bothered to do it alone.\l" + .string "Bring two POKéMON, won't you?$" + +Route21_North_Text_IanIntro:: + .string "IAN: My sis doesn't get enough\n" + .string "exercise, so I made her come.$" + +Route21_North_Text_IanDefeat:: + .string "IAN: Awww, Sis!\n" + .string "Get it together!$" + +Route21_North_Text_IanPostBattle:: + .string "IAN: Come on, Sis!\p" + .string "You're not going to lose weight\n" + .string "like this!$" + +Route21_North_Text_IanNotEnoughMons:: + .string "IAN: We want a two-on-two battle.\n" + .string "So can you bring two POKéMON?$" diff --git a/data/maps/Route22/scripts.inc b/data/maps/Route22/scripts.inc new file mode 100644 index 000000000000..4069bf79d336 --- /dev/null +++ b/data/maps/Route22/scripts.inc @@ -0,0 +1,301 @@ +Route22_MapScripts:: + .byte 0 + +Route22_EventScript_EarlyRivalTriggerTop:: + lockall + setvar VAR_TEMP_1, 0 + goto Route22_EventScript_EarlyRival + end + +Route22_EventScript_EarlyRivalTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + setobjectxyperm LOCALID_ROUTE22_RIVAL, 25, 5 + goto Route22_EventScript_EarlyRival + end + +Route22_EventScript_EarlyRivalTriggerBottom:: + lockall + setvar VAR_TEMP_1, 2 + setobjectxyperm LOCALID_ROUTE22_RIVAL, 25, 5 + goto Route22_EventScript_EarlyRival + end + +Route22_EventScript_EarlyRival:: + textcolor NPC_TEXT_COLOR_MALE + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + addobject LOCALID_ROUTE22_RIVAL + call_if_eq VAR_TEMP_1, 0, Route22_EventScript_EarlyRivalApproach + call_if_eq VAR_TEMP_1, 1, Route22_EventScript_EarlyRivalApproach + call_if_eq VAR_TEMP_1, 2, Route22_EventScript_EarlyRivalApproachBottom + delay 6 + msgbox Route22_Text_EarlyRivalIntro + call_if_eq VAR_STARTER_MON, 2, Route22_EventScript_EarlyRivalSquirtle + call_if_eq VAR_STARTER_MON, 1, Route22_EventScript_EarlyRivalBulbasaur + call_if_eq VAR_STARTER_MON, 0, Route22_EventScript_EarlyRivalCharmander + msgbox Route22_Text_EarlyRivalPostBattle + closemessage + delay 10 + playbgm MUS_RG_RIVAL_EXIT, 0 + call_if_eq VAR_TEMP_1, 0, Route22_EventScript_EarlyRivalExit + call_if_eq VAR_TEMP_1, 1, Route22_EventScript_EarlyRivalExit + call_if_eq VAR_TEMP_1, 2, Route22_EventScript_EarlyRivalExitBottom + fadedefaultbgm + removeobject LOCALID_ROUTE22_RIVAL + setvar VAR_MAP_SCENE_ROUTE22, 2 + releaseall + end + +Route22_EventScript_EarlyRivalApproach:: + applymovement LOCALID_ROUTE22_RIVAL, Route22_Movement_RivalApproach + waitmovement 0 + return + +Route22_EventScript_EarlyRivalApproachBottom:: + applymovement LOCALID_ROUTE22_RIVAL, Route22_Movement_RivalApproachBottom + applymovement LOCALID_PLAYER, Route22_Movement_PlayerFaceRival + waitmovement 0 + return + +Route22_EventScript_EarlyRivalSquirtle:: + trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_SQUIRTLE, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory + return + +Route22_EventScript_EarlyRivalBulbasaur:: + trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_BULBASAUR, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory + return + +Route22_EventScript_EarlyRivalCharmander:: + trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_CHARMANDER, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory + return + +Route22_EventScript_EarlyRivalExit:: + applymovement LOCALID_ROUTE22_RIVAL, Route22_Movement_EarlyRivalExit + waitmovement 0 + return + +Route22_EventScript_EarlyRivalExitBottom:: + applymovement LOCALID_ROUTE22_RIVAL, Route22_Movement_EarlyRivalExitBottom + waitmovement 0 + return + +Route22_Movement_UnusedRivalExit:: @ 8 + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + step_end + +Route22_Movement_EarlyRivalExit:: + walk_down + walk_right + walk_right + walk_right + walk_right + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +Route22_Movement_EarlyRivalExitBottom:: + walk_right + walk_right + walk_right + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +Route22_Movement_RivalApproach:: + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + step_end + +Route22_Movement_RivalApproachBottom:: + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_right + walk_in_place_faster_down + step_end + +Route22_Movement_PlayerFaceRival:: + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_16 + delay_8 + walk_in_place_faster_up + step_end + +Route22_EventScript_LateRivalTriggerTop:: + lockall + setvar VAR_TEMP_1, 0 + goto Route22_EventScript_LateRival + end + +Route22_EventScript_LateRivalTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + setobjectxyperm LOCALID_ROUTE22_RIVAL, 25, 5 + goto Route22_EventScript_LateRival + end + +Route22_EventScript_LateRivalTriggerBottom:: + lockall + setvar VAR_TEMP_1, 2 + setobjectxyperm LOCALID_ROUTE22_RIVAL, 25, 5 + goto Route22_EventScript_LateRival + end + +Route22_EventScript_LateRival:: + textcolor NPC_TEXT_COLOR_MALE + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + addobject LOCALID_ROUTE22_RIVAL + call_if_eq VAR_TEMP_1, 0, Route22_EventScript_LateRivalApproach + call_if_eq VAR_TEMP_1, 1, Route22_EventScript_LateRivalApproach + call_if_eq VAR_TEMP_1, 2, Route22_EventScript_LateRivalApproachBottom + msgbox Route22_Text_LateRivalIntro + setvar VAR_LAST_TALKED, LOCALID_ROUTE22_RIVAL + call_if_eq VAR_STARTER_MON, 2, Route22_EventScript_LateRivalSquirtle + call_if_eq VAR_STARTER_MON, 1, Route22_EventScript_LateRivalBulbasaur + call_if_eq VAR_STARTER_MON, 0, Route22_EventScript_LateRivalCharmander + msgbox Route22_Text_LateRivalPostBattle + closemessage + delay 10 + playbgm MUS_RG_RIVAL_EXIT, 0 + applymovement LOCALID_ROUTE22_RIVAL, Route22_Movement_LateRivalExit + waitmovement 0 + fadedefaultbgm + removeobject LOCALID_ROUTE22_RIVAL + setvar VAR_MAP_SCENE_ROUTE22, 4 + releaseall + end + +Route22_EventScript_LateRivalApproach:: + applymovement LOCALID_ROUTE22_RIVAL, Route22_Movement_RivalApproach + waitmovement 0 + return + +Route22_EventScript_LateRivalApproachBottom:: + applymovement LOCALID_ROUTE22_RIVAL, Route22_Movement_RivalApproachBottom + applymovement LOCALID_PLAYER, Route22_Movement_PlayerFaceRival + waitmovement 0 + return + +Route22_EventScript_LateRivalSquirtle:: + trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_SQUIRTLE, Route22_Text_LateRivalDefeat + return + +Route22_EventScript_LateRivalBulbasaur:: + trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_BULBASAUR, Route22_Text_LateRivalDefeat + return + +Route22_EventScript_LateRivalCharmander:: + trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_CHARMANDER, Route22_Text_LateRivalDefeat + return + +Route22_Movement_LateRivalExit:: + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + walk_left + step_end + +Route22_EventScript_LeagueGateSign:: + msgbox Route22_Text_LeagueGateSign, MSGBOX_SIGN + end + +Route22_Text_EarlyRivalIntro:: + .string "{RIVAL}: Hey! {PLAYER}!\p" + .string "You're off to the POKéMON LEAGUE?\n" + .string "Forget about it!\p" + .string "You probably don't have any\n" + .string "BADGES, do you?\p" + .string "The guard won't let you through\n" + .string "without them.\p" + .string "By the way, did your POKéMON get\n" + .string "any stronger?$" + +Route22_Text_EarlyRivalDefeat:: + .string "Awww!\n" + .string "You just lucked out!$" + +Route22_Text_EarlyRivalPostBattle:: + .string "I heard the POKéMON LEAGUE is\n" + .string "crawling with tough TRAINERS.\p" + .string "I have to figure out how to get\n" + .string "past them.\p" + .string "You should quit dawdling and get a\n" + .string "move on!$" + +@ Translated in RB as "{RIVAL}: What? Why do I have 2 POKéMON? You should catch some more too!" +Route22_Text_RivalShouldCatchSomeMons:: + .string "{RIVAL}“なんだ?\n" + .string "ポケモン 2ひきも\l" + .string "もってるの なぜか だって?\p" + .string "おまえも\n" + .string "つかまえれば いい じゃん!$" + +Route22_Text_LateRivalIntro:: + .string "{RIVAL}: What? {PLAYER}!\n" + .string "What a surprise to see you here!\p" + .string "So you're going to the POKéMON\n" + .string "LEAGUE?\p" + .string "You collected all the BADGES, too?\n" + .string "That's cool!\p" + .string "Then I'll whip you, {PLAYER}, as a\n" + .string "warm-up for the POKéMON LEAGUE!\p" + .string "Come on!$" + +Route22_Text_LateRivalDefeat:: + .string "What!?\p" + .string "I was just careless, you!$" + +Route22_Text_LateRivalPostBattle:: + .string "That loosened me up.\n" + .string "I'm ready for the POKéMON LEAGUE!\p" + .string "{PLAYER}, you need more practice.\p" + .string "But hey, you know that!\n" + .string "I'm out of here. Smell ya!$" + +@ Translated in RB as "{RIVAL}: Hahaha! {PLAYER}! That's your best? You're nowhere near as good as me, pal! Go train some more! You loser!" +Route22_Text_LateRivalVictory:: + .string "{RIVAL}“ひゃははッ {PLAYER}ー!\n" + .string "それで がんばってるのかよ!\l" + .string "おれの さいのうに くらべりゃ\l" + .string "{PLAYER}は まだまだ だな!\p" + .string "もっと れんしゅう こいよ!\n" + .string "あははーッ!$" + +Route22_Text_LeagueGateSign:: + .string "POKéMON LEAGUE\n" + .string "Front Gate$" + diff --git a/data/maps/Route22_NorthEntrance/scripts.inc b/data/maps/Route22_NorthEntrance/scripts.inc new file mode 100644 index 000000000000..b98823c78de7 --- /dev/null +++ b/data/maps/Route22_NorthEntrance/scripts.inc @@ -0,0 +1,18 @@ +Route22_NorthEntrance_MapScripts:: + .byte 0 + +Route22_NorthEntrance_EventScript_BoulderBadgeGuard:: + lock + faceplayer + setvar VAR_TEMP_1, 1 + bufferstdstring STR_VAR_1, STDSTRING_BOULDER_BADGE + goto Route22_NorthEntrance_EventScript_BadgeGuard + end + +Route22_NorthEntrance_EventScript_BoulderBadgeGuardTrigger:: + lockall + setvar VAR_TEMP_1, 1 + setvar VAR_0x8009, 1 + bufferstdstring STR_VAR_1, STDSTRING_BOULDER_BADGE + goto Route23_EventScript_BadgeGuardTrigger + end diff --git a/data/maps/Route23/scripts.inc b/data/maps/Route23/scripts.inc new file mode 100644 index 000000000000..26e44c8bfbea --- /dev/null +++ b/data/maps/Route23/scripts.inc @@ -0,0 +1,133 @@ +Route23_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route23_OnTransition + .byte 0 + +Route23_OnTransition:: + clearflag FLAG_HIDE_VICTORY_ROAD_3F_BOULDER + setflag FLAG_HIDE_VICTORY_ROAD_2F_BOULDER + setvar VAR_MAP_SCENE_VICTORY_ROAD_1F, 0 + setvar VAR_MAP_SCENE_VICTORY_ROAD_2F_BOULDER1, 0 + setvar VAR_MAP_SCENE_VICTORY_ROAD_2F_BOULDER2, 0 + setvar VAR_MAP_SCENE_VICTORY_ROAD_3F, 0 + end + +Route23_EventScript_CascadeBadgeGuard:: + lock + faceplayer + setvar VAR_TEMP_1, 2 + bufferstdstring STR_VAR_1, STDSTRING_CASCADE_BADGE + goto Route23_EventScript_BadgeGuard + end + +Route23_EventScript_ThunderBadgeGuard:: + lock + faceplayer + setvar VAR_TEMP_1, 3 + bufferstdstring STR_VAR_1, STDSTRING_THUNDER_BADGE + goto Route23_EventScript_BadgeGuard + end + +Route23_EventScript_RainbowBadgeGuard:: + lock + faceplayer + setvar VAR_TEMP_1, 4 + bufferstdstring STR_VAR_1, STDSTRING_RAINBOW_BADGE + goto Route23_EventScript_BadgeGuard + end + +Route23_EventScript_SoulBadgeGuard:: + lock + faceplayer + setvar VAR_TEMP_1, 5 + bufferstdstring STR_VAR_1, STDSTRING_SOUL_BADGE + goto Route23_EventScript_BadgeGuard + end + +Route23_EventScript_MarshBadgeGuard:: + lock + faceplayer + setvar VAR_TEMP_1, 6 + bufferstdstring STR_VAR_1, STDSTRING_MARSH_BADGE + goto Route23_EventScript_BadgeGuard + end + +Route23_EventScript_VolcanoBadgeGuard:: + lock + faceplayer + setvar VAR_TEMP_1, 7 + bufferstdstring STR_VAR_1, STDSTRING_VOLCANO_BADGE + goto Route23_EventScript_BadgeGuard + end + +Route23_EventScript_EarthBadgeGuard:: + lock + faceplayer + setvar VAR_TEMP_1, 8 + bufferstdstring STR_VAR_1, STDSTRING_EARTH_BADGE + goto Route23_EventScript_BadgeGuard + end + +Route23_EventScript_CascadeBadgeGuardTrigger:: + lockall + setvar VAR_TEMP_1, 2 + setvar VAR_0x8009, LOCALID_CASCADE_BADGE_GUARD + bufferstdstring STR_VAR_1, STDSTRING_CASCADE_BADGE + goto Route23_EventScript_BadgeGuardTrigger + end + +Route23_EventScript_ThunderBadgeGuardTrigger:: + lockall + setvar VAR_TEMP_1, 3 + setvar VAR_0x8009, LOCALID_THUNDER_BADGE_GUARD + bufferstdstring STR_VAR_1, STDSTRING_THUNDER_BADGE + goto Route23_EventScript_BadgeGuardTrigger + end + +Route23_EventScript_RainbowBadgeGuardTrigger:: + lockall + setvar VAR_TEMP_1, 4 + setvar VAR_0x8009, LOCALID_RAINBOW_BADGE_GUARD + bufferstdstring STR_VAR_1, STDSTRING_RAINBOW_BADGE + goto Route23_EventScript_BadgeGuardTrigger + end + +Route23_EventScript_SoulBadgeGuardTrigger:: + lockall + setvar VAR_TEMP_1, 5 + setvar VAR_0x8009, LOCALID_SOUL_BADGE_GUARD + bufferstdstring STR_VAR_1, STDSTRING_SOUL_BADGE + goto Route23_EventScript_BadgeGuardTrigger + end + +Route23_EventScript_MarshBadgeGuardTrigger:: + lockall + setvar VAR_TEMP_1, 6 + setvar VAR_0x8009, LOCALID_MARSH_BADGE_GUARD + bufferstdstring STR_VAR_1, STDSTRING_MARSH_BADGE + goto Route23_EventScript_BadgeGuardTrigger + end + +Route23_EventScript_VolcanoBadgeGuardTrigger:: + lockall + setvar VAR_TEMP_1, 7 + setvar VAR_0x8009, LOCALID_VOLCANO_BADGE_GUARD + bufferstdstring STR_VAR_1, STDSTRING_VOLCANO_BADGE + goto Route23_EventScript_BadgeGuardTrigger + end + +Route23_EventScript_EarthBadgeGuardTrigger:: + lockall + setvar VAR_TEMP_1, 8 + setvar VAR_0x8009, LOCALID_EARTH_BADGE_GUARD + bufferstdstring STR_VAR_1, STDSTRING_EARTH_BADGE + goto Route23_EventScript_BadgeGuardTrigger + end + +Route23_EventScript_VictoryRoadGateSign:: + msgbox Route23_Text_VictoryRoadGateSign, MSGBOX_SIGN + end + +Route23_Text_VictoryRoadGateSign:: + .string "VICTORY ROAD GATE -\n" + .string "POKéMON LEAGUE$" + diff --git a/data/maps/Route23_UnusedHouse/scripts.inc b/data/maps/Route23_UnusedHouse/scripts.inc new file mode 100644 index 000000000000..1c1c8ea88676 --- /dev/null +++ b/data/maps/Route23_UnusedHouse/scripts.inc @@ -0,0 +1,2 @@ +Route23_UnusedHouse_MapScripts:: + .byte 0 diff --git a/data/maps/Route24/scripts.inc b/data/maps/Route24/scripts.inc new file mode 100644 index 000000000000..668491aebe59 --- /dev/null +++ b/data/maps/Route24/scripts.inc @@ -0,0 +1,198 @@ +Route24_MapScripts:: + .byte 0 + +Route24_EventScript_Rocket:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_ROUTE24, 1, Route24_EventScript_RocketPostBattle + msgbox Route24_Text_JustEarnedFabulousPrize + checkitemspace ITEM_NUGGET + goto_if_eq VAR_RESULT, FALSE, Route24_EventScript_NoRoomForNugget + call Route24_EventScript_BattleRocket + release + end + +Route24_EventScript_NoRoomForNugget:: + msgbox Route24_Text_YouDontHaveAnyRoom + release + end + +Route24_EventScript_RocketPostBattle:: + msgbox Route24_Text_YoudBecomeTopRocketLeader + release + end + +Route24_EventScript_RocketTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + goto Route24_EventScript_RocketTrigger + end + +Route24_EventScript_RocketTriggerRight:: + lockall + setvar VAR_TEMP_1, 1 + goto Route24_EventScript_RocketTrigger + end + +Route24_EventScript_RocketTrigger:: + textcolor NPC_TEXT_COLOR_MALE + call_if_eq VAR_TEMP_1, 0, Route24_EventScript_RocketApproachPlayer + call_if_eq VAR_TEMP_1, 1, Route24_EventScript_RocketMotionToPlayer + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + msgbox Route24_Text_JustEarnedFabulousPrize + checkitemspace ITEM_NUGGET + goto_if_eq VAR_RESULT, FALSE, Route24_EventScript_NoRoomForNuggetTrigger + call Route24_EventScript_BattleRocket + releaseall + end + +Route24_EventScript_BattleRocket:: + giveitem_msg Route24_Text_ReceivedNuggetFromMysteryTrainer, ITEM_NUGGET + message Route24_Text_JoinTeamRocket + waitmessage + playbgm MUS_RG_ENCOUNTER_ROCKET, 0 + waitbuttonpress + setvar VAR_LAST_TALKED, LOCALID_ROUTE24_ROCKET + trainerbattle_no_intro TRAINER_TEAM_ROCKET_GRUNT_6, Route24_Text_RocketDefeat + msgbox Route24_Text_YoudBecomeTopRocketLeader + setvar VAR_MAP_SCENE_ROUTE24, 1 + return + +Route24_EventScript_RocketApproachPlayer:: + applymovement LOCALID_ROUTE24_ROCKET, Route24_Movement_RocketApproachPlayer + waitmovement 0 + return + +Route24_EventScript_RocketMotionToPlayer:: + applymovement LOCALID_ROUTE24_ROCKET, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +Route24_EventScript_NoRoomForNuggetTrigger:: + msgbox Route24_Text_YouDontHaveAnyRoom + closemessage + applymovement LOCALID_PLAYER, Route24_Movement_WalkDown + waitmovement 0 + call_if_eq VAR_TEMP_1, 0, Route24_EventScript_RocketWalkBackToPos + release + end + +Route24_EventScript_RocketWalkBackToPos:: + applymovement LOCALID_ROUTE24_ROCKET, Route24_Movement_RocketWalkBackToPos + waitmovement 0 + return + +Route24_Movement_RocketApproachPlayer:: + walk_left + step_end + +Route24_Movement_RocketWalkBackToPos:: + walk_right + walk_in_place_faster_left + step_end + +Route24_Movement_WalkDown:: + walk_down + step_end + +Route24_Text_JustEarnedFabulousPrize:: + .string "Congratulations! You beat our\n" + .string "five contest TRAINERS!\p" + .string "You just earned a fabulous prize!$" + +Route24_Text_ReceivedNuggetFromMysteryTrainer:: + .string "{PLAYER} received a NUGGET\n" + .string "from the mystery TRAINER!$" + +Route24_Text_YouDontHaveAnyRoom:: + .string "You don't have any room!$" + +Route24_Text_JoinTeamRocket:: + .string "By the way, how would you like to\n" + .string "join TEAM ROCKET?\p" + .string "We're a group of professional\n" + .string "criminals specializing in POKéMON!\p" + .string "Want to join?\p" + .string "Are you sure?\p" + .string "Come on, join us!\p" + .string "I'm telling you to join!\p" + .string "…Okay, you need convincing!\p" + .string "I'll make you an offer you can't\n" + .string "refuse!$" + +Route24_Text_RocketDefeat:: + .string "Arrgh!\n" + .string "You are good!$" + +Route24_Text_YoudBecomeTopRocketLeader:: + .string "With your ability, you'd become\n" + .string "a top leader in TEAM ROCKET.\p" + .string "Come on, think of the opportunity!\n" + .string "Don't let this chance go to waste.$" + +Route24_Text_ShaneIntro:: + .string "I saw your feat from the grass!$" + +Route24_Text_ShaneDefeat:: + .string "I thought not!$" + +Route24_Text_ShanePostBattle:: + .string "I hid because the people on the\n" + .string "bridge frightened me.$" + +Route24_Text_EthanIntro:: + .string "Okay! I'm No. 5!\n" + .string "I'll stomp you!$" + +Route24_Text_EthanDefeat:: + .string "Whoa!\n" + .string "Too much!$" + +Route24_Text_EthanPostBattle:: + .string "I did my best. I have no regrets!$" + +Route24_Text_ReliIntro:: + .string "I'm No. 4!\n" + .string "Getting tired?$" + +Route24_Text_ReliDefeat:: + .string "I lost, too!$" + +Route24_Text_ReliPostBattle:: + .string "I did my best, so I've no regrets!$" + +Route24_Text_TimmyIntro:: + .string "Here's No. 3!\n" + .string "I won't be easy!$" + +Route24_Text_TimmyDefeat:: + .string "Ow!\n" + .string "Stomped flat!$" + +Route24_Text_TimmyPostBattle:: + .string "I did my best. I have no regrets!$" + +Route24_Text_AliIntro:: + .string "I'm second!\n" + .string "Now it's serious!$" + +Route24_Text_AliDefeat:: + .string "How could I lose?$" + +Route24_Text_AliPostBattle:: + .string "I did my best. I have no regrets!$" + +Route24_Text_CaleIntro:: + .string "People call this the NUGGET\n" + .string "BRIDGE!\p" + .string "Beat us five TRAINERS and win\n" + .string "a fabulous prize!\p" + .string "Think you got what it takes?$" + +Route24_Text_CaleDefeat:: + .string "Whoo!\n" + .string "Good stuff!$" + +Route24_Text_CalePostBattle:: + .string "I did my best. I have no regrets!$" diff --git a/data/maps/Route25/scripts.inc b/data/maps/Route25/scripts.inc new file mode 100644 index 000000000000..9af9f26ac8ce --- /dev/null +++ b/data/maps/Route25/scripts.inc @@ -0,0 +1,130 @@ +Route25_MapScripts:: + .byte 0 + +Route25_EventScript_SeaCottageSign:: + msgbox Route25_Text_SeaCottageSign, MSGBOX_SIGN + end + +Route25_EventScript_Man:: + msgbox Route25_Text_AreYouHereAlone, MSGBOX_NPC + end + +Route25_Text_JoeyIntro:: + .string "Local TRAINERS come here to\n" + .string "practice.$" + +Route25_Text_JoeyDefeat:: + .string "You're decent.$" + +Route25_Text_JoeyPostBattle:: + .string "All POKéMON have weaknesses.\n" + .string "Even the strongest ones.\p" + .string "That's why it's best to raise\n" + .string "POKéMON of different types.$" + +Route25_Text_DanIntro:: + .string "Dad took me to a great party on\n" + .string "the S.S. ANNE at VERMILION CITY.$" + +Route25_Text_DanDefeat:: + .string "I'm not mad!$" + +Route25_Text_DanPostBattle:: + .string "On the S.S. ANNE, I saw TRAINERS\n" + .string "from around the world.$" + +Route25_Text_FlintIntro:: + .string "I'm a cool guy.\n" + .string "I've got a girlfriend!$" + +Route25_Text_FlintDefeat:: + .string "Aww, darn…$" + +Route25_Text_FlintPostBattle:: + .string "Oh, well.\n" + .string "My girlfriend will cheer me up.$" + +Route25_Text_KelseyIntro:: + .string "Hi!\n" + .string "My boyfriend is cool!$" + +Route25_Text_KelseyDefeat:: + .string "My conditioning isn't the best…$" + +Route25_Text_KelseyPostBattle:: + .string "I wish my boyfriend was as good\n" + .string "as you.$" + +Route25_Text_ChadIntro:: + .string "I had this feeling…\n" + .string "I knew I had to battle you!$" + +Route25_Text_ChadDefeat:: + .string "I knew I'd lose, too!$" + +Route25_Text_ChadPostBattle:: + .string "If your POKéMON gets confused,\n" + .string "switch it out.\p" + .string "That's a good tactic.$" + +Route25_Text_HaleyIntro:: + .string "My friend has many cute POKéMON.\n" + .string "I'm so jealous!$" + +Route25_Text_HaleyDefeat:: + .string "I'm not so jealous!$" + +Route25_Text_HaleyPostBattle:: + .string "You came from MT. MOON?\n" + .string "May I have a CLEFAIRY?$" + +Route25_Text_FranklinIntro:: + .string "I just got down from MT. MOON,\n" + .string "but I've still got gas in the tank!$" + +Route25_Text_FranklinDefeat:: + .string "You worked hard!$" + +Route25_Text_FranklinPostBattle:: + .string "Drat!\n" + .string "A ZUBAT bit me back in that cave.$" + +Route25_Text_NobIntro:: + .string "I'm off to see a POKéMANIAC's\n" + .string "collection at the cape.$" + +Route25_Text_NobDefeat:: + .string "You done got me, and real good,\n" + .string "too!$" + +Route25_Text_NobPostBattle:: + .string "The POKéMANIAC sure lives up to\n" + .string "his name.\p" + .string "His collection includes many rare\n" + .string "species of POKéMON.$" + +Route25_Text_WayneIntro:: + .string "You're going to see BILL?\n" + .string "First, we battle!$" + +Route25_Text_WayneDefeat:: + .string "You're something.$" + +Route25_Text_WaynePostBattle:: + .string "The trail below is a shortcut to\n" + .string "CERULEAN CITY.$" + +Route25_Text_SeaCottageSign:: + .string "SEA COTTAGE\n" + .string "BILL lives here!$" + +Route25_Text_MistyHighHopesAboutThisPlace:: + .string "This cape is a famous date spot.\p" + .string "MISTY, the GYM LEADER, has high\n" + .string "hopes about this place.$" + +Route25_Text_AreYouHereAlone:: + .string "Hello, are you here alone?\p" + .string "If you're out at CERULEAN's cape…\n" + .string "Well, it should be as a couple.$" + diff --git a/data/maps/Route25_SeaCottage/scripts.inc b/data/maps/Route25_SeaCottage/scripts.inc new file mode 100644 index 000000000000..6c31f405e8ff --- /dev/null +++ b/data/maps/Route25_SeaCottage/scripts.inc @@ -0,0 +1,405 @@ +.equ BILL_IN_TELEPORTER, FLAG_TEMP_2 +.equ RETURN_AFTER_SS_TICKET, FLAG_TEMP_3 + +Route25_SeaCottage_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route25_SeaCottage_OnTransition + .byte 0 + +Route25_SeaCottage_OnTransition:: + call_if_unset FLAG_HELPED_BILL_IN_SEA_COTTAGE, Route25_SeaCottage_EventScript_HideClefairyBill + call_if_set FLAG_GOT_SS_TICKET, Route25_SeaCottage_EventScript_SetReturnedAfterSSTicket + end + +Route25_SeaCottage_EventScript_HideClefairyBill:: + clearflag FLAG_HIDE_BILL_CLEFAIRY + setobjectxyperm LOCALID_BILL_HUMAN, 3, 3 + return + +Route25_SeaCottage_EventScript_SetReturnedAfterSSTicket:: + setflag RETURN_AFTER_SS_TICKET + return + +Route25_SeaCottage_EventScript_Bill:: + lock + faceplayer + goto_if_set RETURN_AFTER_SS_TICKET, Route25_SeaCottage_EventScript_BillGoLookAtPC + goto_if_set FLAG_GOT_SS_TICKET, Route25_SeaCottage_EventScript_BillGoToSSAnne + goto_if_set FLAG_HELPED_BILL_IN_SEA_COTTAGE, Route25_SeaCottage_EventScript_BillGiveSSTicket + checkplayergender + goto_if_eq VAR_RESULT, MALE, Route25_SeaCottage_EventScript_BillAskForHelpMale + goto_if_eq VAR_RESULT, FEMALE, Route25_SeaCottage_EventScript_BillAskForHelpFemale + end + +Route25_SeaCottage_EventScript_BillAskForHelpMale:: + msgbox Route25_SeaCottage_Text_ImBillHelpMeOutPal, MSGBOX_YESNO + goto Route25_SeaCottage_EventScript_BillAskForHelp + end + +Route25_SeaCottage_EventScript_BillAskForHelpFemale:: + msgbox Route25_SeaCottage_Text_ImBillHelpMeOutLady, MSGBOX_YESNO + goto Route25_SeaCottage_EventScript_BillAskForHelp + end + +Route25_SeaCottage_EventScript_BillAskForHelp:: + call_if_eq VAR_RESULT, NO, Route25_SeaCottage_EventScript_DeclineHelpBill + msgbox Route25_SeaCottage_Text_RunCellSeparationOnPC + closemessage + delay 10 + call_if_eq VAR_FACING, DIR_SOUTH, Route25_SeaCottage_EventScript_BillWalkToTeleporterSouth + call_if_eq VAR_FACING, DIR_NORTH, Route25_SeaCottage_EventScript_BillWalkToTeleporter + call_if_eq VAR_FACING, DIR_WEST, Route25_SeaCottage_EventScript_BillWalkToTeleporter + call_if_eq VAR_FACING, DIR_EAST, Route25_SeaCottage_EventScript_BillWalkToTeleporter + opendoor 10, 3 + waitdooranim + applymovement LOCALID_BILL_CLEFAIRY, Route25_SeaCottage_Movement_BillEnterTeleporter + waitmovement 0 + removeobject LOCALID_BILL_CLEFAIRY + playse SE_CONTEST_CURTAIN_FALL + closedoor 10, 3 + waitdooranim + setflag BILL_IN_TELEPORTER + release + end + +@ Just returns after message, execution continues as if player had said yes +Route25_SeaCottage_EventScript_DeclineHelpBill:: + checkplayergender + call_if_eq VAR_RESULT, MALE, Route25_SeaCottage_EventScript_DeclineHelpBillMale + call_if_eq VAR_RESULT, FEMALE, Route25_SeaCottage_EventScript_DeclineHelpBillFemale + return + +Route25_SeaCottage_EventScript_DeclineHelpBillMale:: + msgbox Route25_SeaCottage_Text_NoPleaseChief + return + +Route25_SeaCottage_EventScript_DeclineHelpBillFemale:: + msgbox Route25_SeaCottage_Text_NoPleaseBeautiful + return + +Route25_SeaCottage_EventScript_BillWalkToTeleporterSouth:: + applymovement LOCALID_BILL_CLEFAIRY, Route25_SeaCottage_Movement_BillWalkToTeleporterSouth + waitmovement 0 + return + +Route25_SeaCottage_EventScript_BillWalkToTeleporter:: + applymovement LOCALID_BILL_CLEFAIRY, Route25_SeaCottage_Movement_BillWalkToTeleporter + waitmovement 0 + return + +Route25_SeaCottage_EventScript_BillGoToSSAnne:: + msgbox Route25_SeaCottage_Text_SSAnnePartyYouGoInstead + release + end + +Route25_SeaCottage_EventScript_BillGiveSSTicket:: + famechecker FAMECHECKER_BILL, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + checkplayergender + call_if_eq VAR_RESULT, MALE, Route25_SeaCottage_EventScript_BillThanksMale + call_if_eq VAR_RESULT, FEMALE, Route25_SeaCottage_EventScript_BillThanksFemale + checkitemspace ITEM_SS_TICKET + goto_if_eq VAR_RESULT, FALSE, Route25_SeaCottage_EventScript_NoRoomForSSTicket + giveitem_msg Route25_SeaCottage_Text_ReceivedSSTicketFromBill, ITEM_SS_TICKET, 1, MUS_RG_OBTAIN_KEY_ITEM + setflag FLAG_GOT_SS_TICKET_DUP + setflag FLAG_HIDE_NUGGET_BRIDGE_ROCKET + setflag FLAG_GOT_SS_TICKET + setflag FLAG_SYS_PC_LANETTE + goto Route25_SeaCottage_EventScript_BillGoToSSAnne + end + +Route25_SeaCottage_EventScript_BillThanksMale:: + msgbox Route25_SeaCottage_Text_ThanksBudTakeThis + return + +Route25_SeaCottage_EventScript_BillThanksFemale:: + msgbox Route25_SeaCottage_Text_ThanksLadyTakeThis + return + +Route25_SeaCottage_EventScript_NoRoomForSSTicket:: + msgbox Route25_SeaCottage_Text_YouveGotTooMuchStuff + release + end + +Route25_SeaCottage_EventScript_BillGoLookAtPC:: + msgbox Route25_SeaCottage_Text_CheckOutRareMonsOnPC + release + end + +Route25_SeaCottage_Movement_BillWalkToTeleporter:: + walk_up + walk_up + step_end + +Route25_SeaCottage_Movement_BillWalkToTeleporterSouth:: + walk_right + walk_up + walk_up + walk_left + walk_in_place_faster_up + step_end + +Route25_SeaCottage_Movement_BillEnterTeleporter:: + walk_up + step_end + +Route25_SeaCottage_EventScript_Computer:: + lockall + goto_if_set RETURN_AFTER_SS_TICKET, Route25_SeaCottage_EventScript_OpenBillsMonList + goto_if_set BILL_IN_TELEPORTER, Route25_SeaCottage_EventScript_RunCellSeparator + msgbox Route25_SeaCottage_Text_TeleporterIsDisplayed + releaseall + end + +Route25_SeaCottage_EventScript_RunCellSeparator:: + fadeoutbgm 0 + msgbox Route25_SeaCottage_Text_InitiatedTeleportersCellSeparator + closemessage + clearflag BILL_IN_TELEPORTER + setflag FLAG_HELPED_BILL_IN_SEA_COTTAGE + special SpawnCameraObject + applymovement LOCALID_CAMERA, Route25_SeaCottage_Movement_CameraPanToTeleporters + waitmovement 0 + delay 35 + playse SE_PIN + waitse + setvar VAR_0x8004, 0 + special AnimateTeleporterHousing + delay 10 + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + setvar VAR_0x8004, 1 + special AnimateTeleporterHousing + playse SE_WARP_IN + special AnimateTeleporterCable + waitse + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + call Route25_SeaCottage_EventScript_PlayTeleporterBeepSE + opendoor 3, 3 + waitdooranim + fadeinbgm 0 + addobject LOCALID_BILL_HUMAN + clearflag FLAG_HIDE_BILL_HUMAN_SEA_COTTAGE + delay 50 + playfanfare MUS_LEVEL_UP + applymovement LOCALID_BILL_HUMAN, Route25_SeaCottage_Movement_BillExitTeleporter + waitmovement 0 + waitfanfare + applymovement LOCALID_CAMERA, Route25_SeaCottage_Movement_CameraPanBackFromTeleporters + waitmovement 0 + playse SE_CONTEST_CURTAIN_FALL + closedoor 3, 3 + waitdooranim + applymovement LOCALID_BILL_HUMAN, Route25_SeaCottage_Movement_BillWalkToMiddleOfRoom + waitmovement 0 + special RemoveCameraObject + releaseall + end + +Route25_SeaCottage_EventScript_PlayTeleporterBeepSE:: + playse SE_BALL + waitse + delay 20 + return + +Route25_SeaCottage_Movement_CameraPanToTeleporters:: + walk_up + walk_up + walk_right + walk_right + step_end + +Route25_SeaCottage_Movement_CameraPanBackFromTeleporters:: + delay_16 + delay_16 + walk_down + walk_down + walk_left + walk_left + step_end + +Route25_SeaCottage_EventScript_OpenBillsMonList:: + msgbox Route25_SeaCottage_Text_BillsFavoriteMonList + goto Route25_SeaCottage_EventScript_BillsMonList + end + +Route25_SeaCottage_EventScript_BillsMonList:: + message Route25_SeaCottage_Text_SeeWhichMon + waitmessage + multichoice 0, 0, MULTI_EEVEELUTIONS, FALSE + switch VAR_RESULT + case 0, Route25_SeaCottage_EventScript_ViewEevee + case 1, Route25_SeaCottage_EventScript_ViewFlareon + case 2, Route25_SeaCottage_EventScript_ViewJolteon + case 3, Route25_SeaCottage_EventScript_ViewVaporeon + case 4, Route25_SeaCottage_EventScript_ExitBillsMonList + case 127, Route25_SeaCottage_EventScript_ExitBillsMonList + end + +Route25_SeaCottage_EventScript_ViewEevee:: + showmonpic SPECIES_EEVEE, 10, 3 + waitbuttonpress + hidemonpic + setvar VAR_0x8004, SPECIES_EEVEE + special SetSeenMon + goto Route25_SeaCottage_EventScript_BillsMonList + end + +Route25_SeaCottage_EventScript_ViewFlareon:: + showmonpic SPECIES_FLAREON, 10, 3 + waitbuttonpress + hidemonpic + setvar VAR_0x8004, SPECIES_FLAREON + special SetSeenMon + goto Route25_SeaCottage_EventScript_BillsMonList + end + +Route25_SeaCottage_EventScript_ViewJolteon:: + showmonpic SPECIES_JOLTEON, 10, 3 + waitbuttonpress + hidemonpic + setvar VAR_0x8004, SPECIES_JOLTEON + special SetSeenMon + goto Route25_SeaCottage_EventScript_BillsMonList + end + +Route25_SeaCottage_EventScript_ViewVaporeon:: + showmonpic SPECIES_VAPOREON, 10, 3 + waitbuttonpress + hidemonpic + setvar VAR_0x8004, SPECIES_VAPOREON + special SetSeenMon + goto Route25_SeaCottage_EventScript_BillsMonList + end + +Route25_SeaCottage_EventScript_ExitBillsMonList:: + releaseall + end + +Route25_SeaCottage_Movement_BillWalkToMiddleOfRoom:: + walk_right + walk_right + walk_right + walk_right + walk_down + walk_down + step_end + +Route25_SeaCottage_Movement_BillExitTeleporter:: + walk_down + step_end + +Route25_SeaCottage_Text_ImBillHelpMeOutPal:: + .string "Hiya! I'm a POKéMON…\n" + .string "…No I'm not!\p" + .string "Call me BILL!\n" + .string "I'm a true-blue POKéMANIAC!\p" + .string "Hey!\n" + .string "What's with that skeptical look?\p" + .string "I'm not joshing you, pal.\p" + .string "I screwed up an experiment and got\n" + .string "combined with a POKéMON!\p" + .string "So, how about it?\n" + .string "Help me out here!$" + +Route25_SeaCottage_Text_ImBillHelpMeOutLady:: + .string "Hiya! I'm a POKéMON…\n" + .string "…No I'm not!\p" + .string "Call me BILL!\n" + .string "I'm a true-blue POKéMANIAC!\p" + .string "Hey!\n" + .string "What's with that skeptical look?\p" + .string "I'm not joshing you, lady.\p" + .string "I screwed up an experiment and got\n" + .string "combined with a POKéMON!\p" + .string "So, how about it?\n" + .string "Help me out here!$" + +Route25_SeaCottage_Text_RunCellSeparationOnPC:: + .string "Wait till I get inside the\n" + .string "TELEPORTER.\p" + .string "When I do, go to my PC and run\n" + .string "the Cell Separation System.$" + +Route25_SeaCottage_Text_NoPleaseChief:: + .string "No!?\n" + .string "Now don't be so cold!\p" + .string "Come on, you gotta help a guy in\n" + .string "deep, deep trouble!\p" + .string "What do you say, chief?\n" + .string "Please?\l" + .string "Okay?\l" + .string "All right!$" + +Route25_SeaCottage_Text_NoPleaseBeautiful:: + .string "No!?\n" + .string "Now don't be so cold!\p" + .string "Come on, you gotta help a guy in\n" + .string "deep, deep trouble!\p" + .string "What do you say, beautiful?\n" + .string "Please?\l" + .string "Okay?\l" + .string "All right!$" + +Route25_SeaCottage_Text_ThanksBudTakeThis:: + .string "BILL: Yeehah!\n" + .string "Thanks, bud! I owe you one!\p" + .string "So, did you come to see my\n" + .string "POKéMON collection?\p" + .string "You didn't?\n" + .string "That's a bummer.\p" + .string "I've got to thank you…\n" + .string "Oh, here, maybe this'll do.$" + +Route25_SeaCottage_Text_ThanksLadyTakeThis:: + .string "BILL: Yeehah!\n" + .string "Thanks, lady! I owe you one!\p" + .string "So, did you come to see my\n" + .string "POKéMON collection?\p" + .string "You didn't?\n" + .string "That's a bummer.\p" + .string "I've got to thank you…\n" + .string "Oh, here, maybe this'll do.$" + +Route25_SeaCottage_Text_ReceivedSSTicketFromBill:: + .string "{PLAYER} received an S.S. TICKET\n" + .string "from BILL.$" + +Route25_SeaCottage_Text_YouveGotTooMuchStuff:: + .string "You've got too much stuff!$" + +Route25_SeaCottage_Text_SSAnnePartyYouGoInstead:: + .string "That cruise ship S.S. ANNE is in\n" + .string "VERMILION CITY.\p" + .string "I hear there are lots of TRAINERS\n" + .string "on board, too.\p" + .string "They invited me to their party, but\n" + .string "I can't stand fancy do's.\p" + .string "Why don't you go instead of me?\n" + .string "Go on and have a good time.$" + +Route25_SeaCottage_Text_CheckOutRareMonsOnPC:: + .string "BILL: Feel like checking out some\n" + .string "of my rare POKéMON on my PC?\p" + .string "Go on, check out my PC.$" + +Route25_SeaCottage_Text_TeleporterIsDisplayed:: + .string "TELEPORTER is displayed on the PC\n" + .string "monitor.$" + +Route25_SeaCottage_Text_InitiatedTeleportersCellSeparator:: + .string "{PLAYER} initiated the TELEPORTER's\n" + .string "Cell Separator.$" + +Route25_SeaCottage_Text_BillsFavoriteMonList:: + .string "BILL's favorite POKéMON list!$" + +Route25_SeaCottage_Text_SeeWhichMon:: + .string "Which POKéMON do you want to see?$" + diff --git a/data/maps/Route2_EastBuilding/scripts.inc b/data/maps/Route2_EastBuilding/scripts.inc new file mode 100644 index 000000000000..7c24381ea066 --- /dev/null +++ b/data/maps/Route2_EastBuilding/scripts.inc @@ -0,0 +1,72 @@ +.equ REQUIRED_SEEN_MONS, 10 + +Route2_EastBuilding_MapScripts:: + .byte 0 + +Route2_EastBuilding_EventScript_Aide:: + lock + faceplayer + call Route2_EastBuilding_EventScript_GetAideRequestInfo + goto_if_set FLAG_GOT_HM05, Route2_EastBuilding_EventScript_AlreadyGotHM05 + msgbox Route2_EastBuilding_Text_GiveHM05IfSeen10Mons, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Aide_EventScript_DeclineCheckMons + setvar VAR_0x8004, 0 + specialvar VAR_RESULT, GetFrlgPokedexCount + buffernumberstring STR_VAR_3, VAR_0x8006 + call Route2_EastBuilding_EventScript_GetAideRequestInfo + goto_if_lt VAR_0x8006, REQUIRED_SEEN_MONS, Aide_EventScript_HaventCaughtEnough + msgbox Route2_EastBuilding_Text_GreatHereYouGo + checkitemspace ITEM_HM05 + goto_if_eq VAR_RESULT, FALSE, Aide_EventScript_NoRoomForItem + giveitem_msg Route2_EastBuilding_Text_ReceivedHM05FromAide, ITEM_HM05 + setflag FLAG_GOT_HM05 + msgbox Route2_EastBuilding_Text_ExplainHM05 + release + end + +Route2_EastBuilding_EventScript_AlreadyGotHM05:: + msgbox Route2_EastBuilding_Text_ExplainHM05 + release + end + +Route2_EastBuilding_EventScript_GetAideRequestInfo:: + buffernumberstring STR_VAR_1, REQUIRED_SEEN_MONS + bufferitemname STR_VAR_2, ITEM_HM05 + return + +Route2_EastBuilding_EventScript_Rocker:: + msgbox Route2_EastBuilding_Text_CanGetThroughRockTunnel, MSGBOX_NPC + end + +Route2_EastBuilding_Text_GiveHM05IfSeen10Mons:: + .string "Hi! Remember me?\n" + .string "I'm one of PROF. OAK's AIDES.\p" + .string "If your POKéDEX has complete data\n" + .string "on ten species, I'm supposed to\l" + .string "give you a reward.\p" + .string "PROF. OAK entrusted me with\n" + .string "HM05 for you.\p" + .string "So, {PLAYER}, let me ask you.\p" + .string "Have you gathered data on at least\n" + .string "ten kinds of POKéMON?$" + +Route2_EastBuilding_Text_GreatHereYouGo:: + .string "Great! You have caught or owned\n" + .string "{STR_VAR_3} kinds of POKéMON!\p" + .string "Congratulations!\n" + .string "Here you go!$" + +Route2_EastBuilding_Text_ReceivedHM05FromAide:: + .string "{PLAYER} received HM05\n" + .string "from the AIDE.$" + +Route2_EastBuilding_Text_ExplainHM05:: + .string "HM05 contains the hidden move\n" + .string "FLASH.\p" + .string "FLASH lights up even the darkest\n" + .string "of caves and dungeons.$" + +Route2_EastBuilding_Text_CanGetThroughRockTunnel:: + .string "Once a POKéMON learns FLASH, you\n" + .string "can get through ROCK TUNNEL.$" + diff --git a/data/maps/Route2_House/scripts.inc b/data/maps/Route2_House/scripts.inc new file mode 100644 index 000000000000..e6eb977332a6 --- /dev/null +++ b/data/maps/Route2_House/scripts.inc @@ -0,0 +1,47 @@ +Route2_House_MapScripts:: + .byte 0 + +Route2_House_EventScript_Scientist:: + msgbox Route2_House_Text_FaintedMonsCanUseFieldMoves, MSGBOX_NPC + end + +Route2_House_EventScript_Reyley:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_MR_MIME + call EventScript_GetInGameTradeSpeciesInfo + goto_if_set FLAG_DID_MIMIEN_TRADE, Route2_House_EventScript_AlreadyTraded + msgbox Trade_Text_LookingForMonWannaTradeForMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Route2_House_EventScript_DeclineTrade + call EventScript_ChooseMonForInGameTrade + goto_if_ge VAR_0x8004, PARTY_SIZE, Route2_House_EventScript_DeclineTrade + call EventScript_GetInGameTradeSpecies + goto_if_ne VAR_RESULT, VAR_0x8009, Route2_House_EventScript_NotRequestedMon + call EventScript_DoInGameTrade + msgbox Trade_Text_HeyThanks + setflag FLAG_DID_MIMIEN_TRADE + release + end + +Route2_House_EventScript_DeclineTrade:: + msgbox Trade_Text_AwwOhWell + release + end + +Route2_House_EventScript_NotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox Trade_Text_WhatThatsNoMon + release + end + +Route2_House_EventScript_AlreadyTraded:: + msgbox Trade_Text_IsntMyOldMonGreat + release + end + +Route2_House_Text_FaintedMonsCanUseFieldMoves:: + .string "A fainted POKéMON just has no\n" + .string "energy left to battle.\p" + .string "It can still use moves like CUT\n" + .string "outside of battle.$" + diff --git a/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc b/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc new file mode 100644 index 000000000000..dc54fe62c485 --- /dev/null +++ b/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc @@ -0,0 +1,35 @@ +Route2_ViridianForest_NorthEntrance_MapScripts:: + .byte 0 + +Route2_ViridianForest_NorthEntrance_EventScript_Youngster:: + msgbox Route2_ViridianForest_NorthEntrance_Text_ManyMonsOnlyInForests, MSGBOX_NPC + end + +Route2_ViridianForest_NorthEntrance_EventScript_OldMan:: + msgbox Route2_ViridianForest_NorthEntrance_Text_CanCutSkinnyTrees, MSGBOX_NPC + end + +Route2_ViridianForest_NorthEntrance_EventScript_CooltrainerF:: + msgbox Route2_ViridianForest_NorthEntrance_Text_CanCancelEvolution, MSGBOX_NPC + end + +Route2_ViridianForest_NorthEntrance_Text_ManyMonsOnlyInForests:: + .string "Many POKéMON live only in forests \n" + .string "and caves.\p" + .string "You need to be persistent and look\n" + .string "everywhere to get different kinds.$" + +Route2_ViridianForest_NorthEntrance_Text_CanCutSkinnyTrees:: + .string "Have you noticed the skinny trees\n" + .string "on the roadside?\p" + .string "They can be cut down by a special\n" + .string "POKéMON move, I hear.$" + +Route2_ViridianForest_NorthEntrance_Text_CanCancelEvolution:: + .string "Do you know the evolution-cancel\n" + .string "technique?\p" + .string "When a POKéMON is evolving, you\n" + .string "can stop the process.\p" + .string "It's a technique for raising\n" + .string "POKéMON the way they are.$" + diff --git a/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc b/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc new file mode 100644 index 000000000000..b34cb03b9d0f --- /dev/null +++ b/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc @@ -0,0 +1,21 @@ +Route2_ViridianForest_SouthEntrance_MapScripts:: + .byte 0 + +Route2_ViridianForest_SouthEntrance_EventScript_Woman1:: + msgbox Route2_ViridianForest_SouthEntrance_Text_ForestIsMaze, MSGBOX_NPC + end + +Route2_ViridianForest_SouthEntrance_EventScript_Woman2:: + msgbox Route2_ViridianForest_SouthEntrance_Text_RattataHasWickedBite, MSGBOX_NPC + end + +Route2_ViridianForest_SouthEntrance_Text_ForestIsMaze:: + .string "Are you going to VIRIDIAN FOREST?\n" + .string "It's a natural maze in there.\l" + .string "Be careful you don't get lost.$" + +Route2_ViridianForest_SouthEntrance_Text_RattataHasWickedBite:: + .string "RATTATA may be small, but don't\n" + .string "underestimate its wicked bite.\p" + .string "Have you caught one already?$" + diff --git a/data/maps/Route3/scripts.inc b/data/maps/Route3/scripts.inc new file mode 100644 index 000000000000..f3ce02211f31 --- /dev/null +++ b/data/maps/Route3/scripts.inc @@ -0,0 +1,115 @@ +Route3_MapScripts:: + .byte 0 + +Route3_EventScript_Youngster:: + msgbox Route3_Text_TunnelFromCeruleanTiring, MSGBOX_NPC + end + +Route3_EventScript_RouteSign:: + msgbox Route3_Text_RouteSign, MSGBOX_SIGN + end + +Route3_Text_TunnelFromCeruleanTiring:: + .string "Whew… I better take a rest…\n" + .string "Groan…\p" + .string "That tunnel from CERULEAN takes a\n" + .string "lot out of you!$" + +Route3_Text_ColtonIntro:: + .string "Hey!\n" + .string "I saw you in VIRIDIAN FOREST!$" + +Route3_Text_ColtonDefeat:: + .string "You beat me again!$" + +Route3_Text_ColtonPostBattle:: + .string "There are other kinds of POKéMON\n" + .string "than the ones you find in forests.$" + +Route3_Text_BenIntro:: + .string "Hi!\n" + .string "I like shorts!\p" + .string "They're delightfully comfy and\n" + .string "easy to wear!$" + +Route3_Text_BenDefeat:: + .string "I don't believe it!$" + +Route3_Text_BenPostBattle:: + .string "Are you using a POKéMON CENTER's\n" + .string "PC for storing your POKéMON?\p" + .string "Each BOX can hold up to\n" + .string "30 POKéMON.$" + +Route3_Text_JaniceIntro:: + .string "Excuse me!\n" + .string "You looked at me, didn't you?$" + +Route3_Text_JaniceDefeat:: + .string "You're mean!$" + +Route3_Text_JanicePostBattle:: + .string "You shouldn't be staring if you\n" + .string "don't want to battle!$" + +Route3_Text_GregIntro:: + .string "Are you a TRAINER?\n" + .string "Let's get with it right away!$" + +Route3_Text_GregDefeat:: + .string "If I had new POKéMON, I would've\n" + .string "won!$" + +Route3_Text_GregPostBattle:: + .string "If a POKéMON BOX on the PC gets\n" + .string "full, just switch to another BOX.$" + +Route3_Text_SallyIntro:: + .string "That look you gave me…\n" + .string "It's so intriguing!$" + +Route3_Text_SallyDefeat:: + .string "Be nice!$" + +Route3_Text_SallyPostBattle:: + .string "You can avoid battles by not\n" + .string "letting TRAINERS see you.$" + +Route3_Text_CalvinIntro:: + .string "Hey! You're not wearing shorts!\n" + .string "What's wrong with you?$" + +Route3_Text_CalvinDefeat:: + .string "Lost!\n" + .string "Lost! Lost!$" + +Route3_Text_CalvinPostBattle:: + .string "I always wear shorts, even in\n" + .string "winter. That's my policy.$" + +Route3_Text_JamesIntro:: + .string "I'll battle you with the POKéMON\n" + .string "I just caught.$" + +Route3_Text_JamesDefeat:: + .string "Done like dinner!$" + +Route3_Text_JamesPostBattle:: + .string "Trained POKéMON are stronger than\n" + .string "the wild ones.$" + +Route3_Text_RobinIntro:: + .string "Eek!\n" + .string "Did you touch me?$" + +Route3_Text_RobinDefeat:: + .string "That's it?$" + +Route3_Text_RobinPostBattle:: + .string "ROUTE 4 is at the foot of\n" + .string "MT. MOON.$" + +Route3_Text_RouteSign:: + .string "ROUTE 3\n" + .string "MT. MOON AHEAD$" + diff --git a/data/maps/Route4/scripts.inc b/data/maps/Route4/scripts.inc new file mode 100644 index 000000000000..37ecc09c864a --- /dev/null +++ b/data/maps/Route4/scripts.inc @@ -0,0 +1,97 @@ +Route4_MapScripts:: + .byte 0 + +Route4_EventScript_Unused:: + end + +Route4_EventScript_Woman:: + msgbox Route4_Text_TrippedOverGeodude, MSGBOX_NPC + end + +Route4_EventScript_MtMoonSign:: + msgbox Route4_Text_MtMoonEntrance, MSGBOX_SIGN + end + +Route4_EventScript_RouteSign:: + msgbox Route4_Text_RouteSign, MSGBOX_SIGN + end + +Route4_Text_TrippedOverGeodude:: + .string "Ouch! I tripped over a rocky\n" + .string "POKéMON, GEODUDE!$" + +Route4_Text_CrissyIntro:: + .string "I came to MT. MOON in search of\n" + .string "mushroom POKéMON.$" + +Route4_Text_CrissyDefeat:: + .string "After all I did to catch them!$" + +Route4_Text_CrissyPostBattle:: + .string "There might not be any more\n" + .string "mushrooms here.\p" + .string "I think I got them all.$" + +Route4_Text_MtMoonEntrance:: + .string "MT. MOON\n" + .string "Tunnel Entrance$" + +Route4_Text_RouteSign:: + .string "ROUTE 4\n" + .string "MT. MOON - CERULEAN CITY$" + +Text_MegaPunchTeach:: + .string "A punch of roaring ferocity!\p" + .string "Packed with destructive power!\p" + .string "When the chips are down,\n" + .string "MEGA PUNCH is the ultimate attack!\l" + .string "You agree, yes?\p" + .string "Now!\n" + .string "Let me teach it to your POKéMON!$" + +Text_MegaPunchDeclined:: + .string "You'll be back when you understand\n" + .string "the worth of MEGA PUNCH.$" + +Text_MegaPunchWhichMon:: + .string "Fine!\n" + .string "Which POKéMON will learn it?$" + +Text_MegaPunchTaught:: + .string "Now, we are comrades in the way of\n" + .string "punching!\p" + .string "You should go before you're seen\n" + .string "by the misguided fool who trains\l" + .string "only his silly kicking over there.$" + +Text_MegaKickTeach:: + .string "A kick of brutal ferocity!\p" + .string "Packed with destructive power!\p" + .string "When you get right down to it,\n" + .string "MEGA KICK is the ultimate attack!\l" + .string "Don't you agree?\p" + .string "Okay!\n" + .string "I'll teach it to your POKéMON!$" + +Text_MegaKickDeclined:: + .string "You'll come crawling back when you\n" + .string "realize the value of MEGA KICK.$" + +Text_MegaKickWhichMon:: + .string "All right!\n" + .string "Which POKéMON wants to learn it?$" + +Text_MegaKickTaught:: + .string "Now, we are soul mates in the way\n" + .string "of kicking!\p" + .string "You should run before you're seen\n" + .string "by the deluded nitwit who trains\l" + .string "only simple punching over there.$" + +Route4_Text_PeopleLikeAndRespectBrock:: + .string "Oh, wow, that's the BOULDERBADGE!\n" + .string "You got it from BROCK, didn't you?\p" + .string "BROCK is cool. He's not just tough.\n" + .string "People like and respect him.\p" + .string "I want to become a GYM LEADER\n" + .string "like him.$" diff --git a/data/maps/Route4_PokemonCenter_1F/scripts.inc b/data/maps/Route4_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..060eb654cc2c --- /dev/null +++ b/data/maps/Route4_PokemonCenter_1F/scripts.inc @@ -0,0 +1,204 @@ +.equ MAGIKARP_PRICE, 500 + +Route4_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, Route4_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +Route4_PokemonCenter_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_ROUTE4_POKEMON_CENTER_1F + setrespawn HEAL_LOCATION_ROUTE4 + end + +Route4_PokemonCenter_1F_EventScript_Boy:: + msgbox Route4_PokemonCenter_1F_Text_CanHaveSixMonsWithYou, MSGBOX_NPC + end + +Route4_PokemonCenter_1F_EventScript_Gentleman:: + lock + msgbox Route4_PokemonCenter_1F_Text_TeamRocketAttacksCerulean + release + end + +Route4_PokemonCenter_1F_EventScript_MagikarpSalesman:: + lock + faceplayer + goto_if_set FLAG_BOUGHT_MAGIKARP, Route4_PokemonCenter_1F_EventScript_AlreadyBoughtMagikarp + showmoneybox 0, 0 + checkplayergender + goto_if_eq VAR_RESULT, MALE, Route4_PokemonCenter_1F_EventScript_AskBuyMagikarpMale + goto_if_eq VAR_RESULT, FEMALE, Route4_PokemonCenter_1F_EventScript_AskBuyMagikarpFemale + end + +Route4_PokemonCenter_1F_EventScript_AskBuyMagikarpMale:: + msgbox Route4_PokemonCenter_1F_Text_LaddieBuyMagikarpForJust500, MSGBOX_YESNO + goto Route4_PokemonCenter_1F_EventScript_TryBuyMagikarp + end + +Route4_PokemonCenter_1F_EventScript_AskBuyMagikarpFemale:: + msgbox Route4_PokemonCenter_1F_Text_SweetieBuyMagikarpForJust500, MSGBOX_YESNO + goto Route4_PokemonCenter_1F_EventScript_TryBuyMagikarp + end + +Route4_PokemonCenter_1F_EventScript_TryBuyMagikarp:: + goto_if_eq VAR_RESULT, NO, Route4_PokemonCenter_1F_EventScript_DeclineMagikarp + checkmoney MAGIKARP_PRICE + goto_if_eq VAR_RESULT, FALSE, Route4_PokemonCenter_1F_EventScript_NotEnoughMoney + textcolor NPC_TEXT_COLOR_NEUTRAL + setvar VAR_TEMP_1, SPECIES_MAGIKARP + givemon SPECIES_MAGIKARP, 5 + goto_if_eq VAR_RESULT, 0, Route4_PokemonCenter_1F_EventScript_BuyMagikarpParty + goto_if_eq VAR_RESULT, 1, Route4_PokemonCenter_1F_EventScript_BuyMagikarpPC + goto_if_eq VAR_RESULT, 2, Route4_PokemonCenter_1F_EventScript_NoRoomForMagikarp + end + +Route4_PokemonCenter_1F_EventScript_BuyMagikarpParty:: + call Route4_PokemonCenter_1F_EventScript_PayForMagikarp + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Route4_PokemonCenter_1F_EventScript_EndPurchaseMagikarp + call Common_EventScript_GetGiftMonPartySlot + fadescreen FADE_TO_BLACK + hidemoneybox + special ChangePokemonNickname + waitstate + goto Route4_PokemonCenter_1F_EventScript_BoughtMagikarp + end + +Route4_PokemonCenter_1F_EventScript_BuyMagikarpPC:: + call Route4_PokemonCenter_1F_EventScript_PayForMagikarp + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, Route4_PokemonCenter_1F_EventScript_TransferMagikarpCloseMoneyBox + fadescreen FADE_TO_BLACK + hidemoneybox + special ChangeBoxPokemonNickname + waitstate + lock + faceplayer + goto Route4_PokemonCenter_1F_EventScript_TransferMagikarp + end + +Route4_PokemonCenter_1F_EventScript_TransferMagikarpCloseMoneyBox:: + call Common_EventScript_TransferredToPC + goto Route4_PokemonCenter_1F_EventScript_EndPurchaseMagikarp + end + +Route4_PokemonCenter_1F_EventScript_TransferMagikarp:: + call Common_EventScript_TransferredToPC + goto Route4_PokemonCenter_1F_EventScript_BoughtMagikarp + end + +Route4_PokemonCenter_1F_EventScript_EndPurchaseMagikarp:: + hidemoneybox + goto Route4_PokemonCenter_1F_EventScript_BoughtMagikarp + end + +Route4_PokemonCenter_1F_EventScript_BoughtMagikarp:: + setflag FLAG_BOUGHT_MAGIKARP + release + end + +Route4_PokemonCenter_1F_EventScript_PayForMagikarp:: + removemoney MAGIKARP_PRICE + updatemoneybox + playfanfare MUS_LEVEL_UP + message Route4_PokemonCenter_1F_Text_PaidOutrageouslyForMagikarp + waitmessage + waitfanfare + bufferspeciesname STR_VAR_1, SPECIES_MAGIKARP + return + +Route4_PokemonCenter_1F_EventScript_DeclineMagikarp:: + msgbox Route4_PokemonCenter_1F_Text_OnlyDoingThisAsFavorToYou + hidemoneybox + release + end + +Route4_PokemonCenter_1F_EventScript_NotEnoughMoney:: + msgbox Route4_PokemonCenter_1F_Text_YoullNeedMoreMoney + hidemoneybox + release + end + +Route4_PokemonCenter_1F_EventScript_AlreadyBoughtMagikarp:: + msgbox Route4_PokemonCenter_1F_Text_IDontGiveRefunds + release + end + +Route4_PokemonCenter_1F_EventScript_NoRoomForMagikarp:: + textcolor NPC_TEXT_COLOR_MALE + msgbox Route4_PokemonCenter_1F_Text_NoRoomForMorePokemon + hidemoneybox + release + end + +Route4_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +Route4_PokemonCenter_1F_EventScript_Youngster:: + msgbox Route4_PokemonCenter_1F_Text_ShouldStoreMonsUsingPC, MSGBOX_NPC + end + +Route4_PokemonCenter_1F_EventScript_Newspaper:: + lock + msgbox Route4_PokemonCenter_1F_Text_ItsANewspaper + release + end + +Route4_PokemonCenter_1F_Text_CanHaveSixMonsWithYou:: + .string "Okay, set six POKé BALLS in my\n" + .string "belt…\p" + .string "Yeah, that'll do it. At most, you\n" + .string "can have six POKéMON with you.$" + +Route4_PokemonCenter_1F_Text_TeamRocketAttacksCerulean:: + .string "TEAM ROCKET attacks CERULEAN\n" + .string "citizens…\p" + .string "Not a day goes by without TEAM\n" + .string "ROCKET being in the news.$" + +Route4_PokemonCenter_1F_Text_LaddieBuyMagikarpForJust500:: + .string "MAN: Hello there, laddie!\n" + .string "Have I got a deal just for you!\p" + .string "I'll let you have a secret POKéMON\n" + .string "- a MAGIKARP - for just ¥500!\p" + .string "So, you'll buy it, am I right?$" + +Route4_PokemonCenter_1F_Text_SweetieBuyMagikarpForJust500:: + .string "MAN: Hello there, sweetie pie!\n" + .string "Have I got a deal just for you!\p" + .string "I'll let you have a secret POKéMON\n" + .string "- a MAGIKARP - for just ¥500!\p" + .string "So, you'll buy it, am I right?$" + +Route4_PokemonCenter_1F_Text_PaidOutrageouslyForMagikarp:: + .string "{PLAYER} paid an outrageous ¥500\n" + .string "and bought the MAGIKARP…$" + +Route4_PokemonCenter_1F_Text_OnlyDoingThisAsFavorToYou:: + .string "No? You say no? I'm only doing this\n" + .string "as a favor to you!$" + +Route4_PokemonCenter_1F_Text_NoRoomForMorePokemon:: + .string "There's no more room for any more\n" + .string "POKéMON, it looks like.$" + +Route4_PokemonCenter_1F_Text_YoullNeedMoreMoney:: + .string "You'll need more money than that!$" + +Route4_PokemonCenter_1F_Text_IDontGiveRefunds:: + .string "MAN: Well, I don't give refunds.\n" + .string "You knew what you were getting!$" + +Route4_PokemonCenter_1F_Text_ShouldStoreMonsUsingPC:: + .string "Sometimes, you'll have too many\n" + .string "POKéMON with you to add any more.\p" + .string "In that case, you should just\n" + .string "store some using any PC.$" + +Route4_PokemonCenter_1F_Text_ItsANewspaper:: + .string "It's a newspaper.$" + diff --git a/data/maps/Route4_PokemonCenter_2F/scripts.inc b/data/maps/Route4_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..83a70af1102d --- /dev/null +++ b/data/maps/Route4_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +Route4_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +Route4_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +Route4_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +Route4_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/Route5/scripts.inc b/data/maps/Route5/scripts.inc new file mode 100644 index 000000000000..ac3cdd01b65c --- /dev/null +++ b/data/maps/Route5/scripts.inc @@ -0,0 +1,11 @@ +Route5_MapScripts:: + .byte 0 + +Route5_EventScript_UndergroundPathSign:: + msgbox Route5_Text_UndergroundPathSign, MSGBOX_SIGN + end + +Route5_Text_UndergroundPathSign:: + .string "UNDERGROUND PATH\n" + .string "CERULEAN CITY - VERMILION CITY$" + diff --git a/data/maps/Route5_PokemonDayCare/scripts.inc b/data/maps/Route5_PokemonDayCare/scripts.inc new file mode 100644 index 000000000000..cc8a7dae2e0c --- /dev/null +++ b/data/maps/Route5_PokemonDayCare/scripts.inc @@ -0,0 +1,73 @@ +@ Handled by data/scripts/day_care.inc + +Route5_PokemonDayCare_MapScripts:: + .byte 0 + +Route5_PokemonDayCare_Text_WantMeToRaiseMon:: + .string "I run the DAY-CARE service.\p" + .string "Would you like me to raise one of\n" + .string "your POKéMON?$" + +Route5_PokemonDayCare_Text_ComeAgain:: + .string "Come again.$" + +Route5_PokemonDayCare_Text_WhichMonShouldIRaise:: + .string "Which POKéMON should I raise?$" + +Route5_PokemonDayCare_Text_ComeAnytimeYouLike:: + .string "Fine.\n" + .string "Come anytime you like.$" + +Route5_PokemonDayCare_Text_LookAfterMonForAWhile:: + .string "Fine, I'll look after your\n" + .string "{STR_VAR_1} for a while.$" + +Route5_PokemonDayCare_Text_ComeSeeMeInAWhile:: + .string "Come see me in a while.$" + +Route5_PokemonDayCare_Text_MonNeedsToSpendMoreTime:: + .string "You're back already?\p" + .string "Your {STR_VAR_1} needs to spend\n" + .string "some more time with me.$" + +Route5_PokemonDayCare_Text_OweMeXForMonsReturn:: + .string "You owe me ¥{STR_VAR_2} for the return\n" + .string "of this POKéMON.$" + +Route5_PokemonDayCare_Text_ThankYouHeresMon:: + .string "Thank you!\n" + .string "Here's your POKéMON.$" + +Route5_PokemonDayCare_Text_PlayerGotMonBack:: + .string "{PLAYER} got {STR_VAR_1} back\n" + .string "from the DAY-CARE MAN.$" + +Route5_PokemonDayCare_Text_OnlyHaveOneMonWithYou:: + .string "Oh? You only have one POKéMON\n" + .string "with you.$" + +Route5_PokemonDayCare_Text_WhatWillYouBattleWith:: + .string "If you leave me that POKéMON,\n" + .string "what will you battle with?$" + +Route5_PokemonDayCare_Text_MonHasGrownByXLevels:: + .string "Your {STR_VAR_1} has grown a lot.\n" + .string "Yes, quite a lot, I'd say.\p" + .string "Let me see…\n" + .string "By level, it's grown by {STR_VAR_2}.\p" + .string "Aren't I great?$" + +Route5_PokemonDayCare_Text_YouveGotNoRoomForIt:: + .string "You can't take this POKéMON back\n" + .string "if you've got no room for it.$" + +Route5_PokemonDayCare_Text_DontHaveEnoughMoney:: + .string "You don't have enough money.$" + +Route5_PokemonDayCare_Text_WantMeToTakeALookAtYours:: + .string "きみの\n" + .string "みてみるかね?$" + +Route5_PokemonDayCare_Text_CantAcceptMonWithHM:: + .string "わるいけど ひでんのわざを もった\n" + .string "ポケモンは あずかれないなぁ$" diff --git a/data/maps/Route5_SouthEntrance/scripts.inc b/data/maps/Route5_SouthEntrance/scripts.inc new file mode 100644 index 000000000000..f89ee4bbceb7 --- /dev/null +++ b/data/maps/Route5_SouthEntrance/scripts.inc @@ -0,0 +1,111 @@ +Route5_SouthEntrance_MapScripts:: + .byte 0 + +Route5_SouthEntrance_EventScript_Guard:: + msgbox Route5_SouthEntrance_Text_HiHowsItGoing, MSGBOX_NPC + end + +Route5_SouthEntrance_EventScript_GuardTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + goto Route5_SouthEntrance_EventScript_GuardTrigger + end + +Route5_SouthEntrance_EventScript_GuardTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + goto Route5_SouthEntrance_EventScript_GuardTrigger + end + +Route5_SouthEntrance_EventScript_GuardTriggerRight:: + lockall + setvar VAR_TEMP_1, 2 + goto Route5_SouthEntrance_EventScript_GuardTrigger + end + +Route5_SouthEntrance_EventScript_GuardTrigger:: + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + goto_if_set FLAG_GOT_TEA, Route5_SouthEntrance_EventScript_GiveTea + msgbox Route5_SouthEntrance_Text_ThirstyOnGuardDuty + closemessage + applymovement LOCALID_PLAYER, Route5_SouthEntrance_Movement_BlockPlayerEntry + waitmovement 0 + releaseall + end + +Route5_SouthEntrance_EventScript_GiveTea:: + removeitem ITEM_TEA + goto Route5_SouthEntrance_EventScript_GuardDrinkTea + end + +Route5_SouthEntrance_EventScript_GuardDrinkTea:: + msgbox Route5_SouthEntrance_Text_ThatTeaLooksTasty + closemessage + call_if_eq VAR_TEMP_1, 0, Route5_SouthEntrance_EventScript_WalkToGuardLeft + call_if_eq VAR_TEMP_1, 1, Route5_SouthEntrance_EventScript_WalkToGuardMid + call_if_eq VAR_TEMP_1, 2, Route5_SouthEntrance_EventScript_WalkToGuardRight + msgbox Route5_SouthEntrance_Text_ThanksIllShareTeaWithGuards + setvar VAR_MAP_SCENE_ROUTE5_ROUTE6_ROUTE7_ROUTE8_GATES, 1 + releaseall + end + +Route5_SouthEntrance_EventScript_WalkToGuardLeft:: + applymovement LOCALID_PLAYER, Route5_SouthEntrance_Movement_WalkToGuardLeft + waitmovement 0 + return + +Route5_SouthEntrance_EventScript_WalkToGuardMid:: + applymovement LOCALID_PLAYER, Route5_SouthEntrance_Movement_WalkToGuardMid + waitmovement 0 + return + +Route5_SouthEntrance_EventScript_WalkToGuardRight:: + applymovement LOCALID_PLAYER, Route5_SouthEntrance_Movement_WalkToGuardRight + waitmovement 0 + return + +Route5_SouthEntrance_Movement_WalkToGuardMid:: + walk_left + step_end + +Route5_SouthEntrance_Movement_WalkToGuardRight:: + walk_left + walk_left + step_end + +Route5_SouthEntrance_Movement_WalkToGuardLeft:: + walk_in_place_left + step_end + +Route5_SouthEntrance_Movement_BlockPlayerEntry:: + walk_up + step_end + +Route5_SouthEntrance_Text_ThirstyOnGuardDuty:: + .string "I'm on guard duty.\n" + .string "Gee, I'm thirsty, though!\p" + .string "Oh, wait there, the road's closed.$" + +Route5_SouthEntrance_Text_ThatTeaLooksTasty:: + .string "Oh, that TEA…\n" + .string "It looks awfully tasty…$" + +Route5_SouthEntrance_Text_ThanksIllShareTeaWithGuards:: + .string "Huh? I can have this drink?\n" + .string "Gee, thanks!\l" + .string "… …\l" + .string "Glug, glug…\l" + .string "… …\l" + .string "Gulp…\l" + .string "If you want to go to SAFFRON\l" + .string "CITY…\l" + .string "… …\l" + .string "You can go on through.\p" + .string "I'll share this TEA with the other\n" + .string "guards!$" + +Route5_SouthEntrance_Text_HiHowsItGoing:: + .string "Hi, how's it going?$" + diff --git a/data/maps/Route6/scripts.inc b/data/maps/Route6/scripts.inc new file mode 100644 index 000000000000..7a576183531c --- /dev/null +++ b/data/maps/Route6/scripts.inc @@ -0,0 +1,80 @@ +Route6_MapScripts:: + .byte 0 + +Route6_EventScript_UndergroundPathSign:: + msgbox Route6_Text_UndergroundPathSign, MSGBOX_SIGN + end + +Route6_Text_RickyIntro:: + .string "Who's there?\n" + .string "Quit listening in on us!$" + +Route6_Text_RickyDefeat:: + .string "I just can't win!$" + +Route6_Text_RickyPostBattle:: + .string "Whisper…\n" + .string "Whisper…$" + +Route6_Text_NancyIntro:: + .string "Excuse me!\n" + .string "This is a private conversation!$" + +Route6_Text_NancyDefeat:: + .string "Ugh!\n" + .string "I hate losing.$" + +Route6_Text_NancyPostBattle:: + .string "Whisper…\n" + .string "Whisper…$" + +Route6_Text_KeigoIntro:: + .string "There aren't many bugs out here.$" + +Route6_Text_KeigoDefeat:: + .string "No!\n" + .string "You're kidding!$" + +Route6_Text_KeigoPostBattle:: + .string "I like bugs, so I'm going back to\n" + .string "VIRIDIAN FOREST.$" + +Route6_Text_JeffIntro:: + .string "Huh?\n" + .string "You want to talk to me?$" + +Route6_Text_JeffDefeat:: + .string "This stinks…\n" + .string "I couldn't beat your challenge…$" + +Route6_Text_JeffPostBattle:: + .string "I should bring more POKéMON with\n" + .string "me. I'll feel safer that way.$" + +Route6_Text_IsabelleIntro:: + .string "Me?\n" + .string "Well, okay. I'll play!$" + +Route6_Text_IsabelleDefeat:: + .string "Things just didn't work…$" + +Route6_Text_IsabellePostBattle:: + .string "I want to get stronger.\n" + .string "What's your secret?$" + +Route6_Text_ElijahIntro:: + .string "I've never seen you around.\n" + .string "Are you good?$" + +Route6_Text_ElijahDefeat:: + .string "You're too good!$" + +Route6_Text_ElijahPostBattle:: + .string "Are my POKéMON weak?\n" + .string "Or, am I just bad?\l" + .string "Which do you think?$" + +Route6_Text_UndergroundPathSign:: + .string "UNDERGROUND PATH\n" + .string "CERULEAN CITY - VERMILION CITY$" + diff --git a/data/maps/Route6_NorthEntrance/scripts.inc b/data/maps/Route6_NorthEntrance/scripts.inc new file mode 100644 index 000000000000..7d23fdc18ccc --- /dev/null +++ b/data/maps/Route6_NorthEntrance/scripts.inc @@ -0,0 +1,111 @@ +Route6_NorthEntrance_MapScripts:: + .byte 0 + +Route6_NorthEntrance_EventScript_Guard:: + msgbox Route6_NorthEntrance_Text_HiHowsItGoing, MSGBOX_NPC + end + +Route6_NorthEntrance_EventScript_GuardTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + goto Route6_NorthEntrance_EventScript_GuardTrigger + end + +Route6_NorthEntrance_EventScript_GuardTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + goto Route6_NorthEntrance_EventScript_GuardTrigger + end + +Route6_NorthEntrance_EventScript_GuardTriggerRight:: + lockall + setvar VAR_TEMP_1, 2 + goto Route6_NorthEntrance_EventScript_GuardTrigger + end + +Route6_NorthEntrance_EventScript_GuardTrigger:: + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + goto_if_set FLAG_GOT_TEA, Route6_NorthEntrance_EventScript_GiveTea + msgbox Route6_NorthEntrance_Text_ThirstyOnGuardDuty + closemessage + applymovement LOCALID_PLAYER, Route6_NorthEntrance_Movement_BlockPlayerEntry + waitmovement 0 + releaseall + end + +Route6_NorthEntrance_EventScript_GiveTea:: + removeitem ITEM_TEA + goto Route6_NorthEntrance_EventScript_GuardDrinkTea + end + +Route6_NorthEntrance_EventScript_GuardDrinkTea:: + msgbox Route6_NorthEntrance_Text_ThatTeaLooksTasty + closemessage + call_if_eq VAR_TEMP_1, 0, Route6_NorthEntrance_EventScript_WalkToGuardLeft + call_if_eq VAR_TEMP_1, 1, Route6_NorthEntrance_EventScript_WalkToGuardMid + call_if_eq VAR_TEMP_1, 2, Route6_NorthEntrance_EventScript_WalkToGuardRight + msgbox Route6_NorthEntrance_Text_ThanksIllShareTeaWithGuards + setvar VAR_MAP_SCENE_ROUTE5_ROUTE6_ROUTE7_ROUTE8_GATES, 1 + releaseall + end + +Route6_NorthEntrance_EventScript_WalkToGuardLeft:: + applymovement LOCALID_PLAYER, Route6_NorthEntrance_Movement_WalkToGuardLeft + waitmovement 0 + return + +Route6_NorthEntrance_EventScript_WalkToGuardMid:: + applymovement LOCALID_PLAYER, Route6_NorthEntrance_Movement_WalkToGuardMid + waitmovement 0 + return + +Route6_NorthEntrance_EventScript_WalkToGuardRight:: + applymovement LOCALID_PLAYER, Route6_NorthEntrance_Movement_WalkToGuardRight + waitmovement 0 + return + +Route6_NorthEntrance_Movement_WalkToGuardLeft:: + walk_right + walk_right + step_end + +Route6_NorthEntrance_Movement_WalkToGuardMid:: + walk_right + step_end + +Route6_NorthEntrance_Movement_WalkToGuardRight:: + walk_in_place_right + step_end + +Route6_NorthEntrance_Movement_BlockPlayerEntry:: + walk_down + step_end + +Route6_NorthEntrance_Text_ThirstyOnGuardDuty:: + .string "I'm on guard duty.\n" + .string "Gee, I'm thirsty, though!\p" + .string "Oh, wait there, the road's closed.$" + +Route6_NorthEntrance_Text_ThatTeaLooksTasty:: + .string "Oh, that TEA…\n" + .string "It looks awfully tasty…$" + +Route6_NorthEntrance_Text_ThanksIllShareTeaWithGuards:: + .string "Huh? I can have this drink?\n" + .string "Gee, thanks!\l" + .string "… …\l" + .string "Glug, glug…\l" + .string "… …\l" + .string "Gulp…\l" + .string "If you want to go to SAFFRON\l" + .string "CITY…\l" + .string "… …\l" + .string "You can go on through.\p" + .string "I'll share this TEA with the other\n" + .string "guards!$" + +Route6_NorthEntrance_Text_HiHowsItGoing:: + .string "Hi, how's it going?$" + diff --git a/data/maps/Route6_UnusedHouse/scripts.inc b/data/maps/Route6_UnusedHouse/scripts.inc new file mode 100644 index 000000000000..99c06c1543e9 --- /dev/null +++ b/data/maps/Route6_UnusedHouse/scripts.inc @@ -0,0 +1,2 @@ +Route6_UnusedHouse_MapScripts:: + .byte 0 diff --git a/data/maps/Route7/scripts.inc b/data/maps/Route7/scripts.inc new file mode 100644 index 000000000000..a74ddce76072 --- /dev/null +++ b/data/maps/Route7/scripts.inc @@ -0,0 +1,11 @@ +Route7_MapScripts:: + .byte 0 + +Route7_EventScript_UndergroundPathSign:: + msgbox Route7_Text_UndergroundPathSign, MSGBOX_SIGN + end + +Route7_Text_UndergroundPathSign:: + .string "UNDERGROUND PATH\n" + .string "CELADON CITY - LAVENDER TOWN$" + diff --git a/data/maps/Route7_EastEntrance/scripts.inc b/data/maps/Route7_EastEntrance/scripts.inc new file mode 100644 index 000000000000..17c77f5d7292 --- /dev/null +++ b/data/maps/Route7_EastEntrance/scripts.inc @@ -0,0 +1,111 @@ +Route7_EastEntrance_MapScripts:: + .byte 0 + +Route7_EastEntrance_EventScript_Guard:: + msgbox Route7_EastEntrance_Text_HiHowsItGoing, MSGBOX_NPC + end + +Route7_EastEntrance_EventScript_GuardTriggerTop:: + lockall + setvar VAR_TEMP_1, 0 + goto Route7_EastEntrance_EventScript_GuardTrigger + end + +Route7_EastEntrance_EventScript_GuardTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + goto Route7_EastEntrance_EventScript_GuardTrigger + end + +Route7_EastEntrance_EventScript_GuardTriggerBottom:: + lockall + setvar VAR_TEMP_1, 2 + goto Route7_EastEntrance_EventScript_GuardTrigger + end + +Route7_EastEntrance_EventScript_GuardTrigger:: + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + goto_if_set FLAG_GOT_TEA, Route7_EastEntrance_EventScript_GiveTea + msgbox Route7_EastEntrance_Text_ThirstyOnGuardDuty + closemessage + applymovement LOCALID_PLAYER, Route7_EastEntrance_Movement_BlockPlayerEntry + waitmovement 0 + releaseall + end + +Route7_EastEntrance_EventScript_GiveTea:: + removeitem ITEM_TEA + goto Route7_EastEntrance_EventScript_GuardDrinkTea + end + +Route7_EastEntrance_EventScript_GuardDrinkTea:: + msgbox Route7_EastEntrance_Text_ThatTeaLooksTasty + closemessage + call_if_eq VAR_TEMP_1, 0, Route7_EastEntrance_WalkToGuardTop + call_if_eq VAR_TEMP_1, 1, Route7_EastEntrance_WalkToGuardMid + call_if_eq VAR_TEMP_1, 2, Route7_EastEntrance_WalkToGuardBottom + msgbox Route7_EastEntrance_Text_ThanksIllShareTeaWithGuards + setvar VAR_MAP_SCENE_ROUTE5_ROUTE6_ROUTE7_ROUTE8_GATES, 1 + releaseall + end + +Route7_EastEntrance_WalkToGuardTop:: + applymovement LOCALID_PLAYER, Route7_EastEntrance_Movement_WalkToGuardTop + waitmovement 0 + return + +Route7_EastEntrance_WalkToGuardMid:: + applymovement LOCALID_PLAYER, Route7_EastEntrance_Movement_WalkToGuardMid + waitmovement 0 + return + +Route7_EastEntrance_WalkToGuardBottom:: + applymovement LOCALID_PLAYER, Route7_EastEntrance_Movement_WalkToGuardBottom + waitmovement 0 + return + +Route7_EastEntrance_Movement_WalkToGuardMid:: + walk_up + step_end + +Route7_EastEntrance_Movement_WalkToGuardBottom:: + walk_up + walk_up + step_end + +Route7_EastEntrance_Movement_WalkToGuardTop:: + walk_in_place_up + step_end + +Route7_EastEntrance_Movement_BlockPlayerEntry:: + walk_left + step_end + +Route7_EastEntrance_Text_ThirstyOnGuardDuty:: + .string "I'm on guard duty.\n" + .string "Gee, I'm thirsty, though!\p" + .string "Oh, wait there, the road's closed.$" + +Route7_EastEntrance_Text_ThatTeaLooksTasty:: + .string "Oh, that TEA…\n" + .string "It looks awfully tasty…$" + +Route7_EastEntrance_Text_ThanksIllShareTeaWithGuards:: + .string "Huh? I can have this drink?\n" + .string "Gee, thanks!\l" + .string "… …\l" + .string "Glug, glug…\l" + .string "… …\l" + .string "Gulp…\l" + .string "If you want to go to SAFFRON\l" + .string "CITY…\l" + .string "… …\l" + .string "You can go on through.\p" + .string "I'll share this TEA with the other\n" + .string "guards!$" + +Route7_EastEntrance_Text_HiHowsItGoing:: + .string "Hi, how's it going?$" + diff --git a/data/maps/Route8/scripts.inc b/data/maps/Route8/scripts.inc new file mode 100644 index 000000000000..581760b4d6c0 --- /dev/null +++ b/data/maps/Route8/scripts.inc @@ -0,0 +1,169 @@ +Route8_MapScripts:: + .byte 0 + +Route8_EventScript_UndergroundPathSign:: + msgbox Route8_Text_UndergroundPathSign, MSGBOX_SIGN + end + +Route8_Text_AidanIntro:: + .string "You look good at POKéMON, but how\n" + .string "is your chemistry grade?$" + +Route8_Text_AidanDefeat:: + .string "Ow!\n" + .string "Meltdown!$" + +Route8_Text_AidanPostBattle:: + .string "I am better at school than this!$" + +Route8_Text_StanIntro:: + .string "All right!\n" + .string "Let's play a game!$" + +Route8_Text_StanDefeat:: + .string "Drat!\n" + .string "Came up short!$" + +Route8_Text_StanPostBattle:: + .string "Things didn't work today.$" + +Route8_Text_GlennIntro:: + .string "You should be informed.\n" + .string "You need strategy to win at this!$" + +Route8_Text_GlennDefeat:: + .string "It's not logical!$" + +Route8_Text_GlennPostBattle:: + .string "Go with GRIMER first…and…\n" + .string "…and…then…$" + +Route8_Text_PaigeIntro:: + .string "I like NIDORAN, so I collect them!$" + +Route8_Text_PaigeDefeat:: + .string "Why?\n" + .string "Why??$" + +Route8_Text_PaigePostBattle:: + .string "When POKéMON grow up, they get\n" + .string "ugly! They shouldn't evolve.$" + +Route8_Text_LeslieIntro:: + .string "School is fun, but so are POKéMON.$" + +Route8_Text_LeslieDefeat:: + .string "You made it clear to me that\n" + .string "I should stick with school.$" + +Route8_Text_LesliePostBattle:: + .string "I was planning on getting some\n" + .string "fresh air for a change, but…\p" + .string "We're stuck here because of the\n" + .string "gates at SAFFRON.$" + +Route8_Text_AndreaIntro:: + .string "MEOWTH is so cute, meow, meow,\n" + .string "meow!$" + +Route8_Text_AndreaDefeat:: + .string "Meeeeyow!$" + +Route8_Text_AndreaPostBattle:: + .string "I think PIDGEY and RATTATA are\n" + .string "cute, too!$" + +Route8_Text_MeganIntro:: + .string "We must look silly standing here\n" + .string "like this.$" + +Route8_Text_MeganDefeat:: + .string "Look what you did to my poor, cute\n" + .string "POKéMON!$" + +Route8_Text_MeganPostBattle:: + .string "SAFFRON's gatekeeper won't let us\n" + .string "go through.\p" + .string "I know he's doing his job, but I\n" + .string "think he's mean.$" + +Route8_Text_RichIntro:: + .string "I'm a rambling, gaming dude!$" + +Route8_Text_RichDefeat:: + .string "Missed the big chance!$" + +Route8_Text_RichPostBattle:: + .string "Playing games and POKéMON are like\n" + .string "eating peanuts! I just can't stop!$" + +Route8_Text_JuliaIntro:: + .string "What's a cute, round, and fluffy\n" + .string "POKéMON?$" + +Route8_Text_JuliaDefeat:: + .string "Stop!\p" + .string "Don't be so mean to my CLEFAIRY!$" + +Route8_Text_JuliaPostBattle:: + .string "I read that CLEFAIRY evolves when\n" + .string "it's exposed to a MOON STONE.\p" + .string "I read that in a POKéMON JOURNAL.\n" + .string "I wonder if it's true?$" + +Route8_Text_UndergroundPathSign:: + .string "UNDERGROUND PATH\n" + .string "CELADON CITY - LAVENDER TOWN$" + +Route8_Text_EliIntro:: + .string "ELI: Twin power is fantastic.\n" + .string "Did you know?$" + +Route8_Text_EliDefeat:: + .string "ELI: But…\n" + .string "We used our twin power…$" + +Route8_Text_EliPostBattle:: + .string "ELI: I caught my POKéMON with\n" + .string "ANNE!$" + +Route8_Text_EliNotEnoughMons:: + .string "ELI: We can't battle if you don't\n" + .string "have two POKéMON.$" + +Route8_Text_AnneIntro:: + .string "ANNE: We'll shock you with our twin\n" + .string "power!$" + +Route8_Text_AnneDefeat:: + .string "ANNE: Our twin power…$" + +Route8_Text_AnnePostBattle:: + .string "ANNE: I'm raising POKéMON with\n" + .string "ELI.$" + +Route8_Text_AnneNotEnoughMons:: + .string "ANNE: Hi, hi! Let's battle!\n" + .string "But bring two POKéMON.$" + +Route8_Text_RicardoIntro:: + .string "My bike's acting up, man.$" + +Route8_Text_RicardoDefeat:: + .string "Aww, man.\n" + .string "I'm not into this.$" + +Route8_Text_RicardoPostBattle:: + .string "I got grass caught up in my\n" + .string "spokes, man.$" + +Route8_Text_JarenIntro:: + .string "Clear the way, or I'll run you\n" + .string "down!$" + +Route8_Text_JarenDefeat:: + .string "You for real, kid?$" + +Route8_Text_JarenPostBattle:: + .string "Don't think you're all special and\n" + .string "all just because of this.$" diff --git a/data/maps/Route8_WestEntrance/scripts.inc b/data/maps/Route8_WestEntrance/scripts.inc new file mode 100644 index 000000000000..4829ad8b0b46 --- /dev/null +++ b/data/maps/Route8_WestEntrance/scripts.inc @@ -0,0 +1,123 @@ +Route8_WestEntrance_MapScripts:: + .byte 0 + +Route8_WestEntrance_EventScript_Guard:: + msgbox Route8_WestEntrance_Text_HiHowsItGoing, MSGBOX_NPC + end + +Route8_WestEntrance_EventScript_GuardTriggerTop:: + lockall + setvar VAR_TEMP_1, 0 + goto Route8_WestEntrance_EventScript_GuardTrigger + end + +Route8_WestEntrance_EventScript_GuardTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + goto Route8_WestEntrance_EventScript_GuardTrigger + end + +Route8_WestEntrance_EventScript_GuardTriggerBottom:: + lockall + setvar VAR_TEMP_1, 2 + goto Route8_WestEntrance_EventScript_GuardTrigger + end + +Route8_WestEntrance_EventScript_GuardTrigger:: + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + goto_if_set FLAG_GOT_TEA, Route8_WestEntrance_EventScript_GiveTea + msgbox Route8_WestEntrance_Text_ThirstyOnGuardDuty + closemessage + applymovement LOCALID_PLAYER, Route8_WestEntrance_Movement_BlockPlayerEntry + waitmovement 0 + releaseall + end + +Route8_WestEntrance_EventScript_GiveTea:: + removeitem ITEM_TEA + goto Route8_WestEntrance_EventScript_GuardDrinkTea + end + +@ Unused +Route8_WestEntrance_EventScript_GiveSodaPop:: + removeitem ITEM_SODA_POP + goto Route8_WestEntrance_EventScript_GuardDrinkTea + end + +@ Unused +Route8_WestEntrance_EventScript_GiveLemonade:: + removeitem ITEM_LEMONADE + goto Route8_WestEntrance_EventScript_GuardDrinkTea + end + +Route8_WestEntrance_EventScript_GuardDrinkTea:: + msgbox Route8_WestEntrance_Text_ThatTeaLooksTasty + closemessage + call_if_eq VAR_TEMP_1, 0, Route8_WestEntrance_EventScript_WalkToGuardTop + call_if_eq VAR_TEMP_1, 1, Route8_WestEntrance_EventScript_WalkToGuardMid + call_if_eq VAR_TEMP_1, 2, Route8_WestEntrance_EventScript_WalkToGuardBottom + msgbox Route8_WestEntrance_Text_ThanksIllShareTeaWithGuards + setvar VAR_MAP_SCENE_ROUTE5_ROUTE6_ROUTE7_ROUTE8_GATES, 1 + releaseall + end + +Route8_WestEntrance_EventScript_WalkToGuardTop:: + applymovement LOCALID_PLAYER, Route8_WestEntrance_Movement_WalkToGuardTop + waitmovement 0 + return + +Route8_WestEntrance_EventScript_WalkToGuardMid:: + applymovement LOCALID_PLAYER, Route8_WestEntrance_Movement_WalkToGuardMid + waitmovement 0 + return + +Route8_WestEntrance_EventScript_WalkToGuardBottom:: + applymovement LOCALID_PLAYER, Route8_WestEntrance_Movement_WalkToGuardBottom + waitmovement 0 + return + +Route8_WestEntrance_Movement_WalkToGuardMid:: + walk_up + step_end + +Route8_WestEntrance_Movement_WalkToGuardBottom:: + walk_up + walk_up + step_end + +Route8_WestEntrance_Movement_WalkToGuardTop:: + walk_in_place_up + step_end + +Route8_WestEntrance_Movement_BlockPlayerEntry:: + walk_right + step_end + +Route8_WestEntrance_Text_ThirstyOnGuardDuty:: + .string "I'm on guard duty.\n" + .string "Gee, I'm thirsty, though!\p" + .string "Oh, wait there, the road's closed.$" + +Route8_WestEntrance_Text_ThatTeaLooksTasty:: + .string "Oh, that TEA…\n" + .string "It looks awfully tasty…$" + +Route8_WestEntrance_Text_ThanksIllShareTeaWithGuards:: + .string "Huh? I can have this drink?\n" + .string "Gee, thanks!\l" + .string "… …\l" + .string "Glug, glug…\l" + .string "… …\l" + .string "Gulp…\l" + .string "If you want to go to SAFFRON\l" + .string "CITY…\l" + .string "… …\l" + .string "You can go on through.\p" + .string "I'll share this TEA with the other\n" + .string "guards!$" + +Route8_WestEntrance_Text_HiHowsItGoing:: + .string "Hi, how's it going?$" + diff --git a/data/maps/Route9/scripts.inc b/data/maps/Route9/scripts.inc new file mode 100644 index 000000000000..41b6642b2e45 --- /dev/null +++ b/data/maps/Route9/scripts.inc @@ -0,0 +1,113 @@ +Route9_MapScripts:: + .byte 0 + +Route9_EventScript_RouteSign:: + msgbox Route9_Text_RouteSign, MSGBOX_SIGN + end + +Route9_Text_AliciaIntro:: + .string "You have POKéMON with you!\n" + .string "You're mine!$" + +Route9_Text_AliciaDefeat:: + .string "You deceived me…$" + +Route9_Text_AliciaPostBattle:: + .string "The tunnel coming up is pitch-black\n" + .string "inside.\p" + .string "You'll need FLASH to get through\n" + .string "there.$" + +Route9_Text_ChrisIntro:: + .string "Who's that walking there with those\n" + .string "good-looking POKéMON?$" + +Route9_Text_ChrisDefeat:: + .string "Out like a light!$" + +Route9_Text_ChrisPostBattle:: + .string "Keep walking!$" + +Route9_Text_DrewIntro:: + .string "I'm taking the ROCK TUNNEL to\n" + .string "go to LAVENDER…$" + +Route9_Text_DrewDefeat:: + .string "Can't measure up…$" + +Route9_Text_DrewPostBattle:: + .string "Are you off to ROCK TUNNEL, too?$" + +Route9_Text_CaitlinIntro:: + .string "Don't you dare patronize me!$" + +Route9_Text_CaitlinDefeat:: + .string "No!\n" + .string "You're too much.$" + +Route9_Text_CaitlinPostBattle:: + .string "You're obviously talented.\n" + .string "Good luck to you!$" + +Route9_Text_JeremyIntro:: + .string "Bwahaha!\n" + .string "Great! I was bored, eh!$" + +Route9_Text_JeremyDefeat:: + .string "Keep it coming, eh!\p" + .string "Oh wait.\n" + .string "I'm out of POKéMON!$" + +Route9_Text_JeremyPostBattle:: + .string "You sure had guts standing up to\n" + .string "me there, eh?$" + +Route9_Text_BriceIntro:: + .string "Hahaha!\n" + .string "Aren't you a little toughie!$" + +Route9_Text_BriceDefeat:: + .string "What's that?$" + +Route9_Text_BricePostBattle:: + .string "Hahaha!\n" + .string "Kids should be tough!$" + +Route9_Text_BrentIntro:: + .string "I got up early every day to raise\n" + .string "my POKéMON from cocoons!$" + +Route9_Text_BrentDefeat:: + .string "WHAT?\p" + .string "What a total waste of time!$" + +Route9_Text_BrentPostBattle:: + .string "I have to collect more than bugs\n" + .string "to get stronger…$" + +Route9_Text_AlanIntro:: + .string "Hahahaha!\n" + .string "Bring it on!$" + +Route9_Text_AlanDefeat:: + .string "Hahahaha!\n" + .string "You beat me fair!$" + +Route9_Text_AlanPostBattle:: + .string "Hahahaha!\n" + .string "Us hearty guys always laugh!$" + +Route9_Text_ConnerIntro:: + .string "Go, my super BUG POKéMON!$" + +Route9_Text_ConnerDefeat:: + .string "My bugs…$" + +Route9_Text_ConnerPostBattle:: + .string "If you don't like BUG POKéMON,\n" + .string "you bug me!$" + +Route9_Text_RouteSign:: + .string "ROUTE 9\n" + .string "CERULEAN CITY - ROCK TUNNEL$" + diff --git a/data/maps/SSAnne_1F_Corridor/scripts.inc b/data/maps/SSAnne_1F_Corridor/scripts.inc new file mode 100644 index 000000000000..ada2025a6b74 --- /dev/null +++ b/data/maps/SSAnne_1F_Corridor/scripts.inc @@ -0,0 +1,25 @@ +SSAnne_1F_Corridor_MapScripts:: + .byte 0 + +SSAnne_1F_Corridor_EventScript_WorkerM:: + msgbox SSAnne_1F_Corridor_Text_LeStrongSilentType, MSGBOX_NPC + end + +SSAnne_1F_Corridor_EventScript_Sailor:: + msgbox SSAnne_1F_Corridor_Text_PassengersAreRestless, MSGBOX_NPC + end + +SSAnne_1F_Corridor_Text_LeStrongSilentType:: + .string "Bonjour!\n" + .string "I am le waiter on this ship!\p" + .string "I will be happy to serve you\n" + .string "anything you please!\p" + .string "… … …\n" + .string "Ah! Le strong silent type!$" + +SSAnne_1F_Corridor_Text_PassengersAreRestless:: + .string "The passengers are restless from\n" + .string "this long voyage.\p" + .string "You might be challenged by the\n" + .string "more bored ones!$" + diff --git a/data/maps/SSAnne_1F_Room1/scripts.inc b/data/maps/SSAnne_1F_Room1/scripts.inc new file mode 100644 index 000000000000..adc37b123858 --- /dev/null +++ b/data/maps/SSAnne_1F_Room1/scripts.inc @@ -0,0 +1,13 @@ +SSAnne_1F_Room1_MapScripts:: + .byte 0 + +SSAnne_1F_Room1_EventScript_Gentleman:: + msgbox SSAnne_1F_Room1_Text_ImAGlobalPoliceAgent, MSGBOX_NPC + end + +SSAnne_1F_Room1_Text_ImAGlobalPoliceAgent:: + .string "Ssh…!\n" + .string "I'm a GLOBAL POLICE agent.\p" + .string "I'm on the trail of TEAM ROCKET.\n" + .string "They're up to nothing good!$" + diff --git a/data/maps/SSAnne_1F_Room2/scripts.inc b/data/maps/SSAnne_1F_Room2/scripts.inc new file mode 100644 index 000000000000..492cf233f57a --- /dev/null +++ b/data/maps/SSAnne_1F_Room2/scripts.inc @@ -0,0 +1,48 @@ +SSAnne_1F_Room2_MapScripts:: + .byte 0 + +SSAnne_1F_Room2_EventScript_Woman:: + msgbox SSAnne_1F_Room2_Text_CruisingAroundWorld, MSGBOX_NPC + end + +SSAnne_1F_Room2_EventScript_Ann:: + trainerbattle_single TRAINER_LASS_ANN, SSAnne_1F_Room2_Text_AnnIntro, SSAnne_1F_Room2_Text_AnnDefeat + msgbox SSAnne_1F_Room2_Text_AnnPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_1F_Room2_EventScript_Tyler:: + trainerbattle_single TRAINER_YOUNGSTER_TYLER, SSAnne_1F_Room2_Text_TylerIntro, SSAnne_1F_Room2_Text_TylerDefeat + msgbox SSAnne_1F_Room2_Text_TylerPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_1F_Room2_Text_TylerIntro:: + .string "I love POKéMON!\n" + .string "Do you?$" + +SSAnne_1F_Room2_Text_TylerDefeat:: + .string "Wow! \n" + .string "You're great!$" + +SSAnne_1F_Room2_Text_TylerPostBattle:: + .string "Listen, listen!\n" + .string "Let me be your friend, okay?\p" + .string "Then we can trade POKéMON and\n" + .string "do stuff.$" + +SSAnne_1F_Room2_Text_AnnIntro:: + .string "I collected these POKéMON\n" + .string "from all around the world!$" + +SSAnne_1F_Room2_Text_AnnDefeat:: + .string "Oh, no!\n" + .string "I went around the world for these!$" + +SSAnne_1F_Room2_Text_AnnPostBattle:: + .string "You hurt my poor POKéMON!\p" + .string "I demand that you heal them at a\n" + .string "POKéMON CENTER!$" + +SSAnne_1F_Room2_Text_CruisingAroundWorld:: + .string "We are cruising around the world,\n" + .string "my children and I.$" + diff --git a/data/maps/SSAnne_1F_Room3/scripts.inc b/data/maps/SSAnne_1F_Room3/scripts.inc new file mode 100644 index 000000000000..4653d6bf0e8c --- /dev/null +++ b/data/maps/SSAnne_1F_Room3/scripts.inc @@ -0,0 +1,32 @@ +SSAnne_1F_Room3_MapScripts:: + .byte 0 + +SSAnne_1F_Room3_EventScript_LittleGirl:: + msgbox SSAnne_1F_Room3_Text_AlwaysTravelWithWigglytuff, MSGBOX_NPC + end + +SSAnne_1F_Room3_EventScript_BaldingMan:: + msgbox SSAnne_1F_Room3_Text_CruiseIsElegantAndCozy, MSGBOX_NPC + end + +SSAnne_1F_Room3_EventScript_Wigglytuff:: + lock + faceplayer + waitse + playmoncry SPECIES_WIGGLYTUFF, CRY_MODE_NORMAL + msgbox SSAnne_1F_Room3_Text_Wigglytuff + waitmoncry + release + end + +SSAnne_1F_Room3_Text_CruiseIsElegantAndCozy:: + .string "A world cruise is so elegant yet\n" + .string "cozy!$" + +SSAnne_1F_Room3_Text_AlwaysTravelWithWigglytuff:: + .string "I always travel with WIGGLYTUFF.\n" + .string "I never leave home without it.$" + +SSAnne_1F_Room3_Text_Wigglytuff:: + .string "WIGGLYTUFF: Puup pupuu!$" + diff --git a/data/maps/SSAnne_1F_Room4/scripts.inc b/data/maps/SSAnne_1F_Room4/scripts.inc new file mode 100644 index 000000000000..c04cf70690d3 --- /dev/null +++ b/data/maps/SSAnne_1F_Room4/scripts.inc @@ -0,0 +1,25 @@ +SSAnne_1F_Room4_MapScripts:: + .byte 0 + +SSAnne_1F_Room4_EventScript_Woman:: + lock + faceplayer + checkplayergender + goto_if_eq VAR_RESULT, MALE, SSAnne_1F_Room4_EventScript_WomanPlayerMale + msgbox SSAnne_1F_Room4_Text_WaitressCherryPiePlease + release + end + +SSAnne_1F_Room4_EventScript_WomanPlayerMale:: + msgbox SSAnne_1F_Room4_Text_WaiterCherryPiePlease + release + end + +SSAnne_1F_Room4_Text_WaiterCherryPiePlease:: + .string "Waiter, I would like a cherry pie,\n" + .string "please!$" + +SSAnne_1F_Room4_Text_WaitressCherryPiePlease:: + .string "Waitress, I would like a cherry\n" + .string "pie, please!$" + diff --git a/data/maps/SSAnne_1F_Room5/scripts.inc b/data/maps/SSAnne_1F_Room5/scripts.inc new file mode 100644 index 000000000000..ab75f53c1ea2 --- /dev/null +++ b/data/maps/SSAnne_1F_Room5/scripts.inc @@ -0,0 +1,20 @@ +SSAnne_1F_Room5_MapScripts:: + .byte 0 + +SSAnne_1F_Room5_EventScript_Arthur:: + trainerbattle_single TRAINER_GENTLEMAN_ARTHUR, SSAnne_1F_Room5_Text_ArthurIntro, SSAnne_1F_Room5_Text_ArthurDefeat + msgbox SSAnne_1F_Room5_Text_ArthurPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_1F_Room5_Text_ArthurIntro:: + .string "You insolent pup!\n" + .string "How dare you barge in!$" + +SSAnne_1F_Room5_Text_ArthurDefeat:: + .string "Humph! You rude child!\n" + .string "You have no sense of courtesy!$" + +SSAnne_1F_Room5_Text_ArthurPostBattle:: + .string "I wish to be left alone!\n" + .string "Get out!$" + diff --git a/data/maps/SSAnne_1F_Room6/scripts.inc b/data/maps/SSAnne_1F_Room6/scripts.inc new file mode 100644 index 000000000000..5f8ea69ae3af --- /dev/null +++ b/data/maps/SSAnne_1F_Room6/scripts.inc @@ -0,0 +1,42 @@ +SSAnne_1F_Room6_MapScripts:: + .byte 0 + +SSAnne_1F_Room6_EventScript_Woman:: + lock + faceplayer + msgbox SSAnne_1F_Room6_Text_TakeAShortRest, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SSAnne_1F_Room6_EventScript_DeclineHeal + closemessage + call Common_EventScript_OutOfCenterPartyHeal + msgbox SSAnne_1F_Room6_Text_GladEveryoneIsRefreshed + release + end + +SSAnne_1F_Room6_EventScript_DeclineHeal:: + checkplayergender + goto_if_eq VAR_RESULT, MALE, SSAnne_1F_Room6_EventScript_DeclineHealMale + msgbox SSAnne_1F_Room6_Text_SorryYouLookLikeMySister + release + end + +SSAnne_1F_Room6_EventScript_DeclineHealMale:: + msgbox SSAnne_1F_Room6_Text_SorryYouLookLikeMyBrother + release + end + +SSAnne_1F_Room6_Text_TakeAShortRest:: + .string "You look tired. Would you like to\n" + .string "take a short rest?$" + +SSAnne_1F_Room6_Text_GladEveryoneIsRefreshed:: + .string "I'm glad to see that everyone is\n" + .string "looking refreshed and chipper.$" + +SSAnne_1F_Room6_Text_SorryYouLookLikeMyBrother:: + .string "Oh, I'm sorry for fussing over you.\n" + .string "You look like my little brother…$" + +SSAnne_1F_Room6_Text_SorryYouLookLikeMySister:: + .string "Oh, I'm sorry for fussing over you.\n" + .string "You look like my little sister…$" + diff --git a/data/maps/SSAnne_1F_Room7/scripts.inc b/data/maps/SSAnne_1F_Room7/scripts.inc new file mode 100644 index 000000000000..da753588822e --- /dev/null +++ b/data/maps/SSAnne_1F_Room7/scripts.inc @@ -0,0 +1,19 @@ +SSAnne_1F_Room7_MapScripts:: + .byte 0 + +SSAnne_1F_Room7_EventScript_Thomas:: + trainerbattle_single TRAINER_GENTLEMAN_THOMAS, SSAnne_1F_Room7_Text_ThomasIntro, SSAnne_1F_Room7_Text_ThomasDefeat + msgbox SSAnne_1F_Room7_Text_ThomasPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_1F_Room7_Text_ThomasIntro:: + .string "I am but a solitary traveler…\p" + .string "My sole companions and friends are\n" + .string "POKéMON I caught on my journeys…$" + +SSAnne_1F_Room7_Text_ThomasDefeat:: + .string "My, my friends…$" + +SSAnne_1F_Room7_Text_ThomasPostBattle:: + .string "You should be nice to friends!$" + diff --git a/data/maps/SSAnne_2F_Corridor/scripts.inc b/data/maps/SSAnne_2F_Corridor/scripts.inc new file mode 100644 index 000000000000..bf25b85ebe18 --- /dev/null +++ b/data/maps/SSAnne_2F_Corridor/scripts.inc @@ -0,0 +1,207 @@ +SSAnne_2F_Corridor_MapScripts:: + .byte 0 + +SSAnne_2F_Corridor_EventScript_RivalTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + goto SSAnne_2F_Corridor_EventScript_RivalTrigger + end + +SSAnne_2F_Corridor_EventScript_RivalTriggerMid:: + lockall + setvar VAR_TEMP_1, 1 + goto SSAnne_2F_Corridor_EventScript_RivalTrigger + end + +SSAnne_2F_Corridor_EventScript_RivalTriggerRight:: + lockall + setvar VAR_TEMP_1, 2 + goto SSAnne_2F_Corridor_EventScript_RivalTrigger + end + +SSAnne_2F_Corridor_EventScript_RivalTrigger:: + textcolor NPC_TEXT_COLOR_MALE + playse SE_EXIT + delay 5 + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + addobject LOCALID_SS_ANNE_RIVAL + delay 10 + applymovement LOCALID_SS_ANNE_RIVAL, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + delay 20 + call_if_eq VAR_TEMP_1, 0, SSAnne_2F_Corridor_EventScript_RivalApproachLeft + call_if_eq VAR_TEMP_1, 1, SSAnne_2F_Corridor_EventScript_RivalApproachMid + call_if_eq VAR_TEMP_1, 2, SSAnne_2F_Corridor_EventScript_RivalApproachRight + msgbox SSAnne_2F_Corridor_Text_RivalIntro + setvar VAR_LAST_TALKED, LOCALID_SS_ANNE_RIVAL + call_if_eq VAR_STARTER_MON, 2, SSAnne_2F_Corridor_EventScript_RivalSquirtle + call_if_eq VAR_STARTER_MON, 1, SSAnne_2F_Corridor_EventScript_RivalBulbasaur + call_if_eq VAR_STARTER_MON, 0, SSAnne_2F_Corridor_EventScript_RivalCharmander + msgbox SSAnne_2F_Corridor_Text_RivalPostBattle + closemessage + delay 10 + playbgm MUS_RG_RIVAL_EXIT, 0 + call_if_eq VAR_TEMP_1, 0, SSAnne_2F_Corridor_EventScript_RivalExitLeft + call_if_eq VAR_TEMP_1, 1, SSAnne_2F_Corridor_EventScript_RivalExitMid + call_if_eq VAR_TEMP_1, 2, SSAnne_2F_Corridor_EventScript_RivalExitRight + fadedefaultbgm + removeobject LOCALID_SS_ANNE_RIVAL + setvar VAR_MAP_SCENE_S_S_ANNE_2F_CORRIDOR, 1 + releaseall + end + +SSAnne_2F_Corridor_EventScript_RivalApproachLeft:: + applymovement LOCALID_SS_ANNE_RIVAL, SSAnne_2F_Corridor_Movement_RivalApproachLeft + waitmovement 0 + return + +SSAnne_2F_Corridor_EventScript_RivalApproachMid:: + applymovement LOCALID_SS_ANNE_RIVAL, SSAnne_2F_Corridor_Movement_RivalApproachMid + applymovement LOCALID_PLAYER, SSAnne_2F_Corridor_Movement_PlayerFaceRivalMid + waitmovement 0 + return + +SSAnne_2F_Corridor_EventScript_RivalApproachRight:: + applymovement LOCALID_PLAYER, SSAnne_2F_Corridor_Movement_PlayerFaceRivalRight + applymovement LOCALID_SS_ANNE_RIVAL, SSAnne_2F_Corridor_Movement_RivalApproachRight + waitmovement 0 + return + +SSAnne_2F_Corridor_EventScript_RivalSquirtle:: + trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_SQUIRTLE, SSAnne_2F_Corridor_Text_RivalDefeat + return + +SSAnne_2F_Corridor_EventScript_RivalBulbasaur:: + trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_BULBASAUR, SSAnne_2F_Corridor_Text_RivalDefeat + return + +SSAnne_2F_Corridor_EventScript_RivalCharmander:: + trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_CHARMANDER, SSAnne_2F_Corridor_Text_RivalDefeat + return + +SSAnne_2F_Corridor_EventScript_RivalExitLeft:: + applymovement LOCALID_SS_ANNE_RIVAL, SSAnne_2F_Corridor_Movement_RivalExitLeft + waitmovement 0 + return + +SSAnne_2F_Corridor_EventScript_RivalExitMid:: + applymovement LOCALID_SS_ANNE_RIVAL, SSAnne_2F_Corridor_Movement_RivalExitMid + waitmovement 0 + return + +SSAnne_2F_Corridor_EventScript_RivalExitRight:: + applymovement LOCALID_SS_ANNE_RIVAL, SSAnne_2F_Corridor_Movement_RivalExitRight + waitmovement 0 + return + +SSAnne_2F_Corridor_Movement_PlayerFaceRivalRight:: + delay_16 + delay_16 + delay_16 + delay_16 + walk_in_place_faster_left + step_end + +SSAnne_2F_Corridor_Movement_PlayerFaceRivalMid:: + delay_16 + delay_16 + delay_16 + delay_16 + walk_in_place_faster_left + step_end + +SSAnne_2F_Corridor_Movement_RivalApproachLeft:: + walk_down + walk_down + walk_down + step_end + +SSAnne_2F_Corridor_Movement_RivalApproachMid:: + walk_down + walk_down + walk_down + walk_down + walk_in_place_faster_right + step_end + +SSAnne_2F_Corridor_Movement_RivalApproachRight:: + walk_down + walk_down + walk_down + walk_down + walk_right + delay_4 + step_end + +SSAnne_2F_Corridor_Movement_RivalExitLeft:: + walk_right + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +SSAnne_2F_Corridor_Movement_RivalExitMid:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +SSAnne_2F_Corridor_Movement_RivalExitRight:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end + +SSAnne_2F_Corridor_EventScript_Sailor:: + msgbox SSAnne_2F_Corridor_Text_ThisShipIsLuxuryLiner, MSGBOX_NPC + end + +SSAnne_2F_Corridor_Text_ThisShipIsLuxuryLiner:: + .string "This ship, she is a luxury liner for\n" + .string "TRAINERS of the world!\p" + .string "At every port, we hold parties with\n" + .string "invited TRAINERS.$" + +SSAnne_2F_Corridor_Text_RivalIntro:: + .string "{RIVAL}: Bonjour!\n" + .string "{PLAYER}!\p" + .string "Imagine seeing you here!\n" + .string "{PLAYER}, were you really invited?\p" + .string "So how's your POKéDEX coming?\p" + .string "I already caught 40 kinds, pal.\n" + .string "Different kinds are everywhere.\p" + .string "Crawl around in grassy areas, and\n" + .string "look hard for them.$" + +SSAnne_2F_Corridor_Text_RivalDefeat:: + .string "Humph!\p" + .string "At least you're raising your\n" + .string "POKéMON!$" + +SSAnne_2F_Corridor_Text_RivalVictory:: + .string "{PLAYER}..!\n" + .string "ふなよい してるのか!\p" + .string "もっと からだ\n" + .string "きたえた ほうが いいぜ!$" + +SSAnne_2F_Corridor_Text_RivalPostBattle:: + .string "{RIVAL}: I heard there was a CUT\n" + .string "master on board.\p" + .string "But he was just a seasick old man!\p" + .string "CUT itself is really useful.\n" + .string "Yup, it'll be handy.\p" + .string "You should go see him, too.\n" + .string "Smell ya!$" + diff --git a/data/maps/SSAnne_2F_Room1/scripts.inc b/data/maps/SSAnne_2F_Room1/scripts.inc new file mode 100644 index 000000000000..6b728903a7ee --- /dev/null +++ b/data/maps/SSAnne_2F_Room1/scripts.inc @@ -0,0 +1,22 @@ +SSAnne_2F_Room1_MapScripts:: + .byte 0 + +SSAnne_2F_Room1_EventScript_Gentleman:: + lock + faceplayer + message SSAnne_2F_Room1_Text_SleepingMonLookedLikeThis + waitmessage + setvar VAR_0x8004, SPECIES_SNORLAX + special SetSeenMon + showmonpic SPECIES_SNORLAX, 10, 3 + waitbuttonpress + hidemonpic + release + end + +SSAnne_2F_Room1_Text_SleepingMonLookedLikeThis:: + .string "I've journeyed far and wide, but in\n" + .string "all my travels I've never seen\l" + .string "any POKéMON sleep like this one!\p" + .string "It was something like this!$" + diff --git a/data/maps/SSAnne_2F_Room2/scripts.inc b/data/maps/SSAnne_2F_Room2/scripts.inc new file mode 100644 index 000000000000..c8ffd4358c1a --- /dev/null +++ b/data/maps/SSAnne_2F_Room2/scripts.inc @@ -0,0 +1,36 @@ +SSAnne_2F_Room2_MapScripts:: + .byte 0 + +SSAnne_2F_Room2_EventScript_Dale:: + trainerbattle_single TRAINER_FISHERMAN_DALE, SSAnne_2F_Room2_Text_DaleIntro, SSAnne_2F_Room2_Text_DaleDefeat + msgbox SSAnne_2F_Room2_Text_DalePostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_2F_Room2_EventScript_Brooks:: + trainerbattle_single TRAINER_GENTLEMAN_BROOKS, SSAnne_2F_Room2_Text_BrooksIntro, SSAnne_2F_Room2_Text_BrooksDefeat + msgbox SSAnne_2F_Room2_Text_BrooksPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_2F_Room2_Text_BrooksIntro:: + .string "Competing against the young keeps\n" + .string "me youthful.$" + +SSAnne_2F_Room2_Text_BrooksDefeat:: + .string "Good match!\n" + .string "Ah, I feel young again!$" + +SSAnne_2F_Room2_Text_BrooksPostBattle:: + .string "Fifteen years ago, I would\n" + .string "have won!$" + +SSAnne_2F_Room2_Text_DaleIntro:: + .string "Check out what I fished up!$" + +SSAnne_2F_Room2_Text_DaleDefeat:: + .string "I'm all out!$" + +SSAnne_2F_Room2_Text_DalePostBattle:: + .string "Party?\p" + .string "The cruise ship's party should be\n" + .string "over by now.$" + diff --git a/data/maps/SSAnne_2F_Room3/scripts.inc b/data/maps/SSAnne_2F_Room3/scripts.inc new file mode 100644 index 000000000000..d7e2415e9baf --- /dev/null +++ b/data/maps/SSAnne_2F_Room3/scripts.inc @@ -0,0 +1,23 @@ +SSAnne_2F_Room3_MapScripts:: + .byte 0 + +SSAnne_2F_Room3_EventScript_Gentleman:: + msgbox SSAnne_2F_Room3_Text_SeenMonsFerryPeople, MSGBOX_NPC + end + +SSAnne_2F_Room3_EventScript_OldMan:: + msgbox SSAnne_2F_Room3_Text_SomeTreesCanBeCutDown, MSGBOX_NPC + end + +SSAnne_2F_Room3_Text_SeenMonsFerryPeople:: + .string "Ah, yes, I have seen some POKéMON\n" + .string "ferry people across the water!$" + +SSAnne_2F_Room3_Text_SomeTreesCanBeCutDown:: + .string "Small trees can be chopped down\n" + .string "using the move CUT.\p" + .string "But remember this!\n" + .string "CUT is an HM technique.\p" + .string "Once learned, it is not so easily\n" + .string "discarded.$" + diff --git a/data/maps/SSAnne_2F_Room4/scripts.inc b/data/maps/SSAnne_2F_Room4/scripts.inc new file mode 100644 index 000000000000..a89cb26798ff --- /dev/null +++ b/data/maps/SSAnne_2F_Room4/scripts.inc @@ -0,0 +1,35 @@ +SSAnne_2F_Room4_MapScripts:: + .byte 0 + +SSAnne_2F_Room4_EventScript_Lamar:: + trainerbattle_single TRAINER_GENTLEMAN_LAMAR, SSAnne_2F_Room4_Text_LamarIntro, SSAnne_2F_Room4_Text_LamarDefeat + msgbox SSAnne_2F_Room4_Text_LamarPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_2F_Room4_EventScript_Dawn:: + trainerbattle_single TRAINER_LASS_DAWN, SSAnne_2F_Room4_Text_DawnIntro, SSAnne_2F_Room4_Text_DawnDefeat + msgbox SSAnne_2F_Room4_Text_DawnPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_2F_Room4_Text_LamarIntro:: + .string "Which do you find more worthy,\n" + .string "a strong or a rare POKéMON?$" + +SSAnne_2F_Room4_Text_LamarDefeat:: + .string "I must salute you!$" + +SSAnne_2F_Room4_Text_LamarPostBattle:: + .string "Personally, I prefer strong and\n" + .string "rare POKéMON.$" + +SSAnne_2F_Room4_Text_DawnIntro:: + .string "I don't believe I saw you at the\n" + .string "party?$" + +SSAnne_2F_Room4_Text_DawnDefeat:: + .string "Take it easy!$" + +SSAnne_2F_Room4_Text_DawnPostBattle:: + .string "Oh, I adore your strong POKéMON!\n" + .string "Oh, how I envy you for them!$" + diff --git a/data/maps/SSAnne_2F_Room5/scripts.inc b/data/maps/SSAnne_2F_Room5/scripts.inc new file mode 100644 index 000000000000..13ce53be2135 --- /dev/null +++ b/data/maps/SSAnne_2F_Room5/scripts.inc @@ -0,0 +1,22 @@ +SSAnne_2F_Room5_MapScripts:: + .byte 0 + +SSAnne_2F_Room5_EventScript_Gentleman:: + msgbox SSAnne_2F_Room5_Text_HaveYouGoneToSafariZone, MSGBOX_NPC + end + +SSAnne_2F_Room5_EventScript_LittleBoy:: + msgbox SSAnne_2F_Room5_Text_WeThinkSafariZoneIsAwesome, MSGBOX_NPC + end + +SSAnne_2F_Room5_Text_HaveYouGoneToSafariZone:: + .string "Have you gone to the SAFARI ZONE\n" + .string "in FUCHSIA CITY?\p" + .string "There are many kinds of rare\n" + .string "POKéMON.$" + +SSAnne_2F_Room5_Text_WeThinkSafariZoneIsAwesome:: + .string "Me and my daddy think the SAFARI\n" + .string "ZONE is awesome!\l" + .string "I wish we could go there again.$" + diff --git a/data/maps/SSAnne_2F_Room6/scripts.inc b/data/maps/SSAnne_2F_Room6/scripts.inc new file mode 100644 index 000000000000..90ca621c06eb --- /dev/null +++ b/data/maps/SSAnne_2F_Room6/scripts.inc @@ -0,0 +1,18 @@ +SSAnne_2F_Room6_MapScripts:: + .byte 0 + +SSAnne_2F_Room6_EventScript_Woman1:: + msgbox SSAnne_2F_Room6_Text_CaptainIsAwfullySick, MSGBOX_NPC + end + +SSAnne_2F_Room6_EventScript_Woman2:: + msgbox SSAnne_2F_Room6_Text_ManyPeopleGetSeasick, MSGBOX_NPC + end + +SSAnne_2F_Room6_Text_CaptainIsAwfullySick:: + .string "The CAPTAIN said he's awfully sick.\n" + .string "He was all pale.$" + +SSAnne_2F_Room6_Text_ManyPeopleGetSeasick:: + .string "I hear many people get seasick.$" + diff --git a/data/maps/SSAnne_3F_Corridor/scripts.inc b/data/maps/SSAnne_3F_Corridor/scripts.inc new file mode 100644 index 000000000000..c8727371ca78 --- /dev/null +++ b/data/maps/SSAnne_3F_Corridor/scripts.inc @@ -0,0 +1,13 @@ +SSAnne_3F_Corridor_MapScripts:: + .byte 0 + +SSAnne_3F_Corridor_EventScript_Sailor:: + msgbox SSAnne_3F_Corridor_Text_CaptainTeachesCutToMons, MSGBOX_NPC + end + +SSAnne_3F_Corridor_Text_CaptainTeachesCutToMons:: + .string "Our CAPTAIN is a sword master.\n" + .string "He's awesome at using CUT.\p" + .string "They say he even teaches CUT\n" + .string "to POKéMON!$" + diff --git a/data/maps/SSAnne_B1F_Corridor/scripts.inc b/data/maps/SSAnne_B1F_Corridor/scripts.inc new file mode 100644 index 000000000000..dc68fb91fb91 --- /dev/null +++ b/data/maps/SSAnne_B1F_Corridor/scripts.inc @@ -0,0 +1,2 @@ +SSAnne_B1F_Corridor_MapScripts:: + .byte 0 diff --git a/data/maps/SSAnne_B1F_Room1/scripts.inc b/data/maps/SSAnne_B1F_Room1/scripts.inc new file mode 100644 index 000000000000..4ce157d406d9 --- /dev/null +++ b/data/maps/SSAnne_B1F_Room1/scripts.inc @@ -0,0 +1,39 @@ +SSAnne_B1F_Room1_MapScripts:: + .byte 0 + +SSAnne_B1F_Room1_EventScript_Barny:: + trainerbattle_single TRAINER_FISHERMAN_BARNY, SSAnne_B1F_Room1_Text_BarnyIntro, SSAnne_B1F_Room1_Text_BarnyDefeat + msgbox SSAnne_B1F_Room1_Text_BarnyPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_B1F_Room1_EventScript_Phillip:: + trainerbattle_single TRAINER_SAILOR_PHILLIP, SSAnne_B1F_Room1_Text_PhillipIntro, SSAnne_B1F_Room1_Text_PhillipDefeat + msgbox SSAnne_B1F_Room1_Text_PhillipPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_B1F_Room1_Text_PhillipIntro:: + .string "Matey, you're walking the plank if\n" + .string "you lose!$" + +SSAnne_B1F_Room1_Text_PhillipDefeat:: + .string "Argh!\n" + .string "Beaten by a kid!$" + +SSAnne_B1F_Room1_Text_PhillipPostBattle:: + .string "When we're out at sea, jellyfish\n" + .string "POKéMON sometimes drift by.$" + +SSAnne_B1F_Room1_Text_BarnyIntro:: + .string "Hello, stranger!\p" + .string "I can't tell if you're from the seas\n" + .string "or mountains, but stop and chat.\p" + .string "All my POKéMON are from the sea.$" + +SSAnne_B1F_Room1_Text_BarnyDefeat:: + .string "Darn!\n" + .string "I let that one get away!$" + +SSAnne_B1F_Room1_Text_BarnyPostBattle:: + .string "I was going to make you my\n" + .string "assistant, too!$" + diff --git a/data/maps/SSAnne_B1F_Room2/scripts.inc b/data/maps/SSAnne_B1F_Room2/scripts.inc new file mode 100644 index 000000000000..d9f74e7e150d --- /dev/null +++ b/data/maps/SSAnne_B1F_Room2/scripts.inc @@ -0,0 +1,18 @@ +SSAnne_B1F_Room2_MapScripts:: + .byte 0 + +SSAnne_B1F_Room2_EventScript_Huey:: + trainerbattle_single TRAINER_SAILOR_HUEY, SSAnne_B1F_Room2_Text_HueyIntro, SSAnne_B1F_Room2_Text_HueyDefeat + msgbox SSAnne_B1F_Room2_Text_HueyPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_B1F_Room2_Text_HueyIntro:: + .string "Even us sailors have POKéMON, too!$" + +SSAnne_B1F_Room2_Text_HueyDefeat:: + .string "Okay, you're not bad.$" + +SSAnne_B1F_Room2_Text_HueyPostBattle:: + .string "We caught all our POKéMON while\n" + .string "we were out at sea.$" + diff --git a/data/maps/SSAnne_B1F_Room3/scripts.inc b/data/maps/SSAnne_B1F_Room3/scripts.inc new file mode 100644 index 000000000000..136a05e07270 --- /dev/null +++ b/data/maps/SSAnne_B1F_Room3/scripts.inc @@ -0,0 +1,19 @@ +SSAnne_B1F_Room3_MapScripts:: + .byte 0 + +SSAnne_B1F_Room3_EventScript_Dylan:: + trainerbattle_single TRAINER_SAILOR_DYLAN, SSAnne_B1F_Room3_Text_DylanIntro, SSAnne_B1F_Room3_Text_DylanDefeat + msgbox SSAnne_B1F_Room3_Text_DylanPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_B1F_Room3_Text_DylanIntro:: + .string "I like feisty kids like you!$" + +SSAnne_B1F_Room3_Text_DylanDefeat:: + .string "Argh!\n" + .string "Lost it!$" + +SSAnne_B1F_Room3_Text_DylanPostBattle:: + .string "Sea POKéMON live in deep water.\n" + .string "You'll need a ROD to fish them up!$" + diff --git a/data/maps/SSAnne_B1F_Room4/scripts.inc b/data/maps/SSAnne_B1F_Room4/scripts.inc new file mode 100644 index 000000000000..942a2acdaf82 --- /dev/null +++ b/data/maps/SSAnne_B1F_Room4/scripts.inc @@ -0,0 +1,36 @@ +SSAnne_B1F_Room4_MapScripts:: + .byte 0 + +SSAnne_B1F_Room4_EventScript_Leonard:: + trainerbattle_single TRAINER_SAILOR_LEONARD, SSAnne_B1F_Room4_Text_LeonardIntro, SSAnne_B1F_Room4_Text_LeonardDefeat + msgbox SSAnne_B1F_Room4_Text_LeonardPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_B1F_Room4_EventScript_Duncan:: + trainerbattle_single TRAINER_SAILOR_DUNCAN, SSAnne_B1F_Room4_Text_DuncanIntro, SSAnne_B1F_Room4_Text_DuncanDefeat + msgbox SSAnne_B1F_Room4_Text_DuncanPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_B1F_Room4_Text_LeonardIntro:: + .string "You know what they say about\n" + .string "sailors and battling!$" + +SSAnne_B1F_Room4_Text_LeonardDefeat:: + .string "Right!\n" + .string "Good battle, mate!$" + +SSAnne_B1F_Room4_Text_LeonardPostBattle:: + .string "Hahaha!\n" + .string "Want to be a sailor, mate?$" + +SSAnne_B1F_Room4_Text_DuncanIntro:: + .string "Come on, then!\n" + .string "My sailor's pride is at stake!$" + +SSAnne_B1F_Room4_Text_DuncanDefeat:: + .string "Your spirit sank me!$" + +SSAnne_B1F_Room4_Text_DuncanPostBattle:: + .string "Did you see the FISHING GURU in\n" + .string "VERMILION CITY?$" + diff --git a/data/maps/SSAnne_B1F_Room5/scripts.inc b/data/maps/SSAnne_B1F_Room5/scripts.inc new file mode 100644 index 000000000000..451dc7c721ac --- /dev/null +++ b/data/maps/SSAnne_B1F_Room5/scripts.inc @@ -0,0 +1,25 @@ +SSAnne_B1F_Room5_MapScripts:: + .byte 0 + +SSAnne_B1F_Room5_EventScript_Boy:: + msgbox SSAnne_B1F_Room5_Text_MachokeHasStrengthToMoveRocks, MSGBOX_NPC + end + +SSAnne_B1F_Room5_EventScript_Machoke:: + lock + faceplayer + waitse + playmoncry SPECIES_MACHOKE, CRY_MODE_NORMAL + msgbox SSAnne_B1F_Room5_Text_Machoke + waitmoncry + release + end + +SSAnne_B1F_Room5_Text_MachokeHasStrengthToMoveRocks:: + .string "My buddy MACHOKE is super strong!\p" + .string "He has enough STRENGTH to move\n" + .string "big rocks!$" + +SSAnne_B1F_Room5_Text_Machoke:: + .string "MACHOKE: Gwoh! Goggoh!$" + diff --git a/data/maps/SSAnne_CaptainsOffice/scripts.inc b/data/maps/SSAnne_CaptainsOffice/scripts.inc new file mode 100644 index 000000000000..5fbd3072d089 --- /dev/null +++ b/data/maps/SSAnne_CaptainsOffice/scripts.inc @@ -0,0 +1,101 @@ +SSAnne_CaptainsOffice_MapScripts:: + .byte 0 + +SSAnne_CaptainsOffice_EventScript_Captain:: + lock + goto_if_set FLAG_GOT_HM01, SSAnne_CaptainsOffice_EventScript_AlreadyGotCut + msgbox SSAnne_CaptainsOffice_Text_CaptainIFeelSeasick + textcolor NPC_TEXT_COLOR_NEUTRAL + message SSAnne_CaptainsOffice_Text_RubbedCaptainsBack + waitmessage + playfanfare MUS_HEAL + waitfanfare + call EventScript_RestorePrevTextColor + delay 50 + applymovement LOCALID_SS_ANNE_CAPTAIN, Common_Movement_FacePlayer + waitmovement 0 + msgbox SSAnne_CaptainsOffice_Text_ThankYouHaveHMForCut + giveitem_msg SSAnne_CaptainsOffice_Text_ObtainedHM01FromCaptain, ITEM_HM01, 1, MUS_RG_OBTAIN_KEY_ITEM + msgbox SSAnne_CaptainsOffice_Text_ExplainCut + setflag FLAG_GOT_HM01 + setvar VAR_MAP_SCENE_VERMILION_CITY, 1 + release + end + +@ Unused +SSAnne_CaptainsOffice_EventScript_NoRoomForCut:: + msgbox SSAnne_CaptainsOffice_Text_YouHaveNoRoomForThis + closemessage + applymovement LOCALID_SS_ANNE_CAPTAIN, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +SSAnne_CaptainsOffice_EventScript_AlreadyGotCut:: + applymovement LOCALID_SS_ANNE_CAPTAIN, Common_Movement_FacePlayer + waitmovement 0 + msgbox SSAnne_CaptainsOffice_Text_SSAnneWillSetSailSoon + release + end + +SSAnne_CaptainsOffice_EventScript_TrashCan:: + msgbox SSAnne_CaptainsOffice_Text_YuckShouldntHaveLooked, MSGBOX_SIGN + end + +SSAnne_CaptainsOffice_EventScript_Book:: + msgbox SSAnne_CaptainsOffice_Text_HowToConquerSeasickness, MSGBOX_SIGN + end + +SSAnne_CaptainsOffice_Text_CaptainIFeelSeasick:: + .string "CAPTAIN: Ooargh…\n" + .string "I feel hideous…\l" + .string "Urrp! Seasick…$" + +SSAnne_CaptainsOffice_Text_RubbedCaptainsBack:: + .string "{PLAYER} rubbed the CAPTAIN's\n" + .string "back!\p" + .string "Rub-rub…\n" + .string "Rub-rub…$" + +SSAnne_CaptainsOffice_Text_ThankYouHaveHMForCut:: + .string "CAPTAIN: Whew! Thank you!\n" + .string "I'm feeling much better now.\p" + .string "You want to see my hidden CUT\n" + .string "technique?\p" + .string "I could show you my prized CUT\n" + .string "technique if I weren't so ill…\p" + .string "I know! You can have this!\n" + .string "This HIDDEN MACHINE!\p" + .string "Teach CUT to your POKéMON, and\n" + .string "you can see it CUT anytime!$" + +SSAnne_CaptainsOffice_Text_ObtainedHM01FromCaptain:: + .string "{PLAYER} obtained HM01\n" + .string "from the CAPTAIN!$" + +SSAnne_CaptainsOffice_Text_ExplainCut:: + .string "Using CUT, you can chop down\n" + .string "small trees.\p" + .string "Why not try it with the trees\n" + .string "around VERMILION CITY?$" + +SSAnne_CaptainsOffice_Text_SSAnneWillSetSailSoon:: + .string "CAPTAIN: …Whew!\p" + .string "Now that I'm not sick anymore,\n" + .string "I guess it's time.\p" + .string "The S.S. ANNE will set sail soon!\p" + .string "Farewell, until our return to\n" + .string "VERMILION CITY!$" + +SSAnne_CaptainsOffice_Text_YouHaveNoRoomForThis:: + .string "Oh, no!\n" + .string "You have no room for this!$" + +SSAnne_CaptainsOffice_Text_YuckShouldntHaveLooked:: + .string "Yuck!\n" + .string "Shouldn't have looked!$" + +SSAnne_CaptainsOffice_Text_HowToConquerSeasickness:: + .string "How to Conquer Seasickness…\n" + .string "The CAPTAIN's reading this!$" + diff --git a/data/maps/SSAnne_Deck/scripts.inc b/data/maps/SSAnne_Deck/scripts.inc new file mode 100644 index 000000000000..6f932019acd5 --- /dev/null +++ b/data/maps/SSAnne_Deck/scripts.inc @@ -0,0 +1,60 @@ +SSAnne_Deck_MapScripts:: + .byte 0 + +SSAnne_Deck_EventScript_Youngster:: + msgbox SSAnne_Deck_Text_ShipDepartingSoon, MSGBOX_NPC + end + +SSAnne_Deck_EventScript_BaldingMan:: + msgbox SSAnne_Deck_Text_FeelSeasick, MSGBOX_NPC + end + +SSAnne_Deck_EventScript_Sailor:: + msgbox SSAnne_Deck_Text_ScrubbingDecksHardWork, MSGBOX_NPC + end + +SSAnne_Deck_EventScript_Edmond:: + trainerbattle_single TRAINER_SAILOR_EDMOND, SSAnne_Deck_Text_EdmondIntro, SSAnne_Deck_Text_EdmondDefeat + msgbox SSAnne_Deck_Text_EdmondPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_Deck_EventScript_Trevor:: + trainerbattle_single TRAINER_SAILOR_TREVOR, SSAnne_Deck_Text_TrevorIntro, SSAnne_Deck_Text_TrevorDefeat + msgbox SSAnne_Deck_Text_TrevorPostBattle, MSGBOX_AUTOCLOSE + end + +SSAnne_Deck_Text_ShipDepartingSoon:: + .string "The party's over.\n" + .string "The ship will be departing soon.$" + +SSAnne_Deck_Text_ScrubbingDecksHardWork:: + .string "Whew!\n" + .string "Scrubbing decks is hard work!$" + +SSAnne_Deck_Text_FeelSeasick:: + .string "Urf… I feel ill…\p" + .string "I got seasick, so I stepped out to\n" + .string "get some air…$" + +SSAnne_Deck_Text_EdmondIntro:: + .string "Hey, matey!\p" + .string "Let's do a little jig!$" + +SSAnne_Deck_Text_EdmondDefeat:: + .string "You're impressive!$" + +SSAnne_Deck_Text_EdmondPostBattle:: + .string "How many kinds of POKéMON do you\n" + .string "think there are in this big world?$" + +SSAnne_Deck_Text_TrevorIntro:: + .string "Ahoy, there!\n" + .string "Are you seasick?$" + +SSAnne_Deck_Text_TrevorDefeat:: + .string "I was just careless!$" + +SSAnne_Deck_Text_TrevorPostBattle:: + .string "My pa said there are 100 kinds of\n" + .string "POKéMON. I think there are more.$" + diff --git a/data/maps/SSAnne_Exterior/scripts.inc b/data/maps/SSAnne_Exterior/scripts.inc new file mode 100644 index 000000000000..4f6d2fd0a349 --- /dev/null +++ b/data/maps/SSAnne_Exterior/scripts.inc @@ -0,0 +1,65 @@ +SSAnne_Exterior_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SSAnne_Exterior_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, SSAnne_Exterior_OnFrame + .byte 0 + +SSAnne_Exterior_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SSANNE_EXTERIOR + end + +SSAnne_Exterior_OnFrame:: + map_script_2 VAR_MAP_SCENE_VERMILION_CITY, 1, SSAnne_Exterior_ExitSSAnne + .2byte 0 + +SSAnne_Exterior_ExitSSAnne:: + lockall + getplayerxy VAR_0x8004, VAR_0x8005 + call_if_le VAR_0x8005, 6, SSAnne_Exterior_WalkDown + call_if_ge VAR_0x8005, 7, SSAnne_Exterior_WalkInPlaceDown + fadenewbgm MUS_SURF + delay 50 + special DoSSAnneDepartureCutscene + waitstate + removeobject LOCALID_SS_ANNE + applymovement LOCALID_PLAYER, SSAnne_Exterior_Movement_Exit + waitmovement 0 + setvar VAR_MAP_SCENE_VERMILION_CITY, 2 + setvar VAR_VERMILION_CITY_TICKET_CHECK_TRIGGER, 0 + warp MAP_VERMILION_CITY, 23, 34 + waitstate + releaseall + end + +SSAnne_Exterior_WalkDown:: + applymovement LOCALID_PLAYER, SSAnne_Exterior_Movement_WalkDown + waitmovement 0 + return + +SSAnne_Exterior_WalkInPlaceDown:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +SSAnne_Exterior_Movement_Exit:: + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + walk_up + step_end + +SSAnne_Exterior_Movement_WalkDown:: + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + walk_down + step_end diff --git a/data/maps/SSAnne_Kitchen/scripts.inc b/data/maps/SSAnne_Kitchen/scripts.inc new file mode 100644 index 000000000000..92115bcbdd42 --- /dev/null +++ b/data/maps/SSAnne_Kitchen/scripts.inc @@ -0,0 +1,99 @@ +SSAnne_Kitchen_MapScripts:: + .byte 0 + +SSAnne_Kitchen_EventScript_Chef1:: + msgbox SSAnne_Kitchen_Text_BusyOutOfTheWay, MSGBOX_NPC + end + +SSAnne_Kitchen_EventScript_Chef2:: + msgbox SSAnne_Kitchen_Text_SawOddBerryInTrash, MSGBOX_NPC + end + +SSAnne_Kitchen_EventScript_Chef3:: + msgbox SSAnne_Kitchen_Text_SoBusyImDizzy, MSGBOX_NPC + end + +SSAnne_Kitchen_EventScript_Chef4:: + lock + faceplayer + msgbox SSAnne_Kitchen_Text_IAmLeChefMainCourseIs + random 3 + copyvar VAR_0x8008, VAR_RESULT + call_if_eq VAR_0x8008, 0, SSAnne_Kitchen_EventScript_SalmonDuSalad + call_if_eq VAR_0x8008, 1, SSAnne_Kitchen_EventScript_EelsAuBarbecue + call_if_eq VAR_0x8008, 2, SSAnne_Kitchen_EventScript_PrimeBeefsteak + release + end + +SSAnne_Kitchen_EventScript_SalmonDuSalad:: + msgbox SSAnne_Kitchen_Text_SalmonDuSalad + return + +SSAnne_Kitchen_EventScript_EelsAuBarbecue:: + msgbox SSAnne_Kitchen_Text_EelsAuBarbecue + return + +SSAnne_Kitchen_EventScript_PrimeBeefsteak:: + msgbox SSAnne_Kitchen_Text_PrimeBeefsteak + return + +SSAnne_Kitchen_EventScript_Chef5:: + msgbox SSAnne_Kitchen_Text_PeelSpudsEveryDay, MSGBOX_NPC + end + +SSAnne_Kitchen_EventScript_Chef6:: + msgbox SSAnne_Kitchen_Text_HearAboutSnorlaxItsAGlutton, MSGBOX_NPC + end + +SSAnne_Kitchen_EventScript_Chef7:: + msgbox SSAnne_Kitchen_Text_OnlyGetToPeelOnions, MSGBOX_NPC + end + +SSAnne_Kitchen_Text_BusyOutOfTheWay:: + .string "You, mon petit!\n" + .string "We're busy here!\l" + .string "Out of the way!$" + +SSAnne_Kitchen_Text_SawOddBerryInTrash:: + .string "I saw an odd BERRY in the trash.\n" + .string "I wonder what that was?$" + +SSAnne_Kitchen_Text_SoBusyImDizzy:: + .string "I'm so busy I'm getting dizzy!\n" + .string "You have to give me room here!$" + +SSAnne_Kitchen_Text_PeelSpudsEveryDay:: + .string "Hum-de-hum-de-ho…\p" + .string "I peel spuds every day!\n" + .string "Hum-hum…$" + +SSAnne_Kitchen_Text_HearAboutSnorlaxItsAGlutton:: + .string "Did you hear about SNORLAX?\n" + .string "It's a glutton.\p" + .string "No other POKéMON eats and sleeps\n" + .string "the way SNORLAX can and does!$" + +SSAnne_Kitchen_Text_OnlyGetToPeelOnions:: + .string "Snivel… Sniff…\p" + .string "I only get to peel onions…\n" + .string "Snivel…$" + +SSAnne_Kitchen_Text_IAmLeChefMainCourseIs:: + .string "Er-hem!\n" + .string "Indeed I am le CHEF!\p" + .string "Le main course is$" + +SSAnne_Kitchen_Text_SalmonDuSalad:: + .string "Salmon du Salad!\p" + .string "Les guests may gripe it's fish\n" + .string "again, however!$" + +SSAnne_Kitchen_Text_EelsAuBarbecue:: + .string "Eels au Barbecue!\p" + .string "Les guests will mutiny, I fear.$" + +SSAnne_Kitchen_Text_PrimeBeefsteak:: + .string "Prime Beefsteak!\p" + .string "But, have I enough fillets du\n" + .string "beef?$" + diff --git a/data/maps/SafariZone_Center/scripts.inc b/data/maps/SafariZone_Center/scripts.inc new file mode 100644 index 000000000000..e8ede326fe7d --- /dev/null +++ b/data/maps/SafariZone_Center/scripts.inc @@ -0,0 +1,31 @@ +SafariZone_Center_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SafariZone_Center_OnTransition + .byte 0 + +SafariZone_Center_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SAFARI_ZONE_CENTER + end + +SafariZone_Center_EventScript_RestHouseSign:: + msgbox SafariZone_Center_Text_RestHouse, MSGBOX_SIGN + end + +SafariZone_Center_EventScript_TrainerTips:: + msgbox SafariZone_Center_Text_PressStartToCheckTime, MSGBOX_SIGN + end + +SafariZone_Center_EventScript_AreaSign:: + msgbox SafariZone_Center_Text_CenterArea, MSGBOX_SIGN + end + +SafariZone_Center_Text_RestHouse:: + .string "REST HOUSE$" + +SafariZone_Center_Text_PressStartToCheckTime:: + .string "TRAINER TIPS\p" + .string "Press START to check\n" + .string "remaining time.$" + +SafariZone_Center_Text_CenterArea:: + .string "CENTER AREA$" + diff --git a/data/maps/SafariZone_Center_RestHouse/scripts.inc b/data/maps/SafariZone_Center_RestHouse/scripts.inc new file mode 100644 index 000000000000..e9d1e3157562 --- /dev/null +++ b/data/maps/SafariZone_Center_RestHouse/scripts.inc @@ -0,0 +1,19 @@ +SafariZone_Center_RestHouse_MapScripts:: + .byte 0 + +SafariZone_Center_RestHouse_EventScript_Sara:: + msgbox SafariZone_Center_Text_WhereDidErikGo, MSGBOX_NPC + end + +SafariZone_Center_RestHouse_EventScript_Scientist:: + msgbox SafariZone_Center_Text_CatchingMonsAsGifts, MSGBOX_NPC + end + +SafariZone_Center_Text_WhereDidErikGo:: + .string "SARA: Where did my boyfriend,\n" + .string "ERIK, go?$" + +SafariZone_Center_Text_CatchingMonsAsGifts:: + .string "I'm catching POKéMON to take home\n" + .string "as gifts.$" + diff --git a/data/maps/SafariZone_East/scripts.inc b/data/maps/SafariZone_East/scripts.inc new file mode 100644 index 000000000000..6b34d5bfd0c2 --- /dev/null +++ b/data/maps/SafariZone_East/scripts.inc @@ -0,0 +1,27 @@ +SafariZone_East_MapScripts:: + .byte 0 + +SafariZone_East_EventScript_RestHouseSign:: + msgbox SafariZone_East_Text_RestHouse, MSGBOX_SIGN + end + +SafariZone_East_EventScript_TrainerTips:: + msgbox SafariZone_East_Text_TimeDeclinesOnlyWhileYouWalk, MSGBOX_SIGN + end + +SafariZone_East_EventScript_AreaSign:: + msgbox SafariZone_East_Text_AreaSign, MSGBOX_SIGN + end + +SafariZone_East_Text_RestHouse:: + .string "REST HOUSE$" + +SafariZone_East_Text_TimeDeclinesOnlyWhileYouWalk:: + .string "TRAINER TIPS\p" + .string "The remaining time declines only\n" + .string "while you walk.$" + +SafariZone_East_Text_AreaSign:: + .string "AREA 1\n" + .string "WEST: CENTER AREA$" + diff --git a/data/maps/SafariZone_East_RestHouse/scripts.inc b/data/maps/SafariZone_East_RestHouse/scripts.inc new file mode 100644 index 000000000000..c7aebcd185d9 --- /dev/null +++ b/data/maps/SafariZone_East_RestHouse/scripts.inc @@ -0,0 +1,27 @@ +SafariZone_East_RestHouse_MapScripts:: + .byte 0 + +SafariZone_East_RestHouse_EventScript_Rocker:: + msgbox SafariZone_East_Text_CaughtChanseyAllWorthwhile, MSGBOX_NPC + end + +SafariZone_East_RestHouse_EventScript_Scientist:: + msgbox SafariZone_East_Text_HowManyDidYouCatch, MSGBOX_NPC + end + +SafariZone_East_RestHouse_EventScript_BaldingMan:: + msgbox SafariZone_East_Text_TiredFromAllTheFun, MSGBOX_NPC + end + +SafariZone_East_Text_HowManyDidYouCatch:: + .string "How many did you catch?\n" + .string "I'm bushed from the effort!$" + +SafariZone_East_Text_CaughtChanseyAllWorthwhile:: + .string "I caught a CHANSEY!\p" + .string "That makes this all worthwhile.$" + +SafariZone_East_Text_TiredFromAllTheFun:: + .string "Whew!\n" + .string "I'm tired from all the fun!$" + diff --git a/data/maps/SafariZone_North_Frlg/scripts.inc b/data/maps/SafariZone_North_Frlg/scripts.inc new file mode 100644 index 000000000000..ac69174252ff --- /dev/null +++ b/data/maps/SafariZone_North_Frlg/scripts.inc @@ -0,0 +1,44 @@ +SafariZone_North_Frlg_MapScripts:: + .byte 0 + +SafariZone_North_EventScript_RestHouseSign:: + msgbox SafariZone_North_Text_RestHouse, MSGBOX_SIGN + end + +SafariZone_North_EventScript_TrainerTips1:: + msgbox SafariZone_North_Text_SecretHouseStillAhead, MSGBOX_SIGN + end + +SafariZone_North_EventScript_AreaSign:: + msgbox SafariZone_North_Text_Area2, MSGBOX_SIGN + end + +SafariZone_North_EventScript_TrainerTips2:: + msgbox SafariZone_North_Text_ZigzagThroughTallGrass, MSGBOX_SIGN + end + +SafariZone_North_EventScript_TrainerTips3:: + msgbox SafariZone_North_Text_WinFreeHMFindSecretHouse, MSGBOX_SIGN + end + +SafariZone_North_Text_RestHouse:: + .string "REST HOUSE$" + +SafariZone_North_Text_SecretHouseStillAhead:: + .string "TRAINER TIPS\p" + .string "The SECRET HOUSE is still ahead.$" + +SafariZone_North_Text_Area2:: + .string "AREA 2$" + +SafariZone_North_Text_ZigzagThroughTallGrass:: + .string "TRAINER TIPS\p" + .string "POKéMON hide in tall grass.\p" + .string "Zigzag through grassy areas to\n" + .string "flush them out.$" + +SafariZone_North_Text_WinFreeHMFindSecretHouse:: + .string "TRAINER TIPS\p" + .string "Win a free HM for finding the\n" + .string "SECRET HOUSE.$" + diff --git a/data/maps/SafariZone_North_RestHouse/scripts.inc b/data/maps/SafariZone_North_RestHouse/scripts.inc new file mode 100644 index 000000000000..89e8f0dba74c --- /dev/null +++ b/data/maps/SafariZone_North_RestHouse/scripts.inc @@ -0,0 +1,30 @@ +SafariZone_North_RestHouse_MapScripts:: + .byte 0 + +SafariZone_North_RestHouse_EventScript_Fisher:: + msgbox SafariZone_East_Text_PrizeInDeepestPartOfSafariZone, MSGBOX_NPC + end + +SafariZone_North_RestHouse_EventScript_Scientist:: + msgbox SafariZone_East_Text_KeepAnyItemFoundOnSafari, MSGBOX_NPC + end + +SafariZone_North_RestHouse_EventScript_Gentleman:: + msgbox SafariZone_East_Text_MyEeveeEvolvedIntoFlareon, MSGBOX_NPC + end + +SafariZone_East_Text_KeepAnyItemFoundOnSafari:: + .string "You can keep any item you find in\n" + .string "the SAFARI ZONE.\p" + .string "But, you'll run out of time if you\n" + .string "try for all of them at once.$" + +SafariZone_East_Text_PrizeInDeepestPartOfSafariZone:: + .string "Go to the deepest part of the\n" + .string "SAFARI ZONE. You will win a prize!$" + +SafariZone_East_Text_MyEeveeEvolvedIntoFlareon:: + .string "My EEVEE evolved into FLAREON.\p" + .string "But, a friend's EEVEE turned into a\n" + .string "VAPOREON. I wonder why?$" + diff --git a/data/maps/SafariZone_SecretHouse/scripts.inc b/data/maps/SafariZone_SecretHouse/scripts.inc new file mode 100644 index 000000000000..b67afe0de2d4 --- /dev/null +++ b/data/maps/SafariZone_SecretHouse/scripts.inc @@ -0,0 +1,54 @@ +SafariZone_SecretHouse_MapScripts:: + .byte 0 + +SafariZone_SecretHouse_EventScript_Attendant:: + lock + faceplayer + goto_if_set FLAG_GOT_HM03, SafariZone_SecretHouse_EventScript_ExplainSurf + msgbox SafariZone_SecretHouse_Text_CongratsYouveWon + checkitemspace ITEM_HM03 + goto_if_eq VAR_RESULT, FALSE, SafariZone_SecretHouse_EventScript_NoRoomForHM03 + giveitem_msg SafariZone_SecretHouse_Text_ReceivedHM03FromAttendant, ITEM_HM03 + msgbox SafariZone_SecretHouse_Text_ExplainSurf + setflag FLAG_GOT_HM03 + release + end + +SafariZone_SecretHouse_EventScript_NoRoomForHM03:: + msgbox SafariZone_SecretHouse_Text_DontHaveRoomForPrize + release + end + +SafariZone_SecretHouse_EventScript_ExplainSurf:: + msgbox SafariZone_SecretHouse_Text_ExplainSurf + release + end + +SafariZone_SecretHouse_Text_CongratsYouveWon:: + .string "Ah! Finally!\p" + .string "You're the first person to reach\n" + .string "the SECRET HOUSE!\p" + .string "Although I made a campaign\n" + .string "for our grand opening,\p" + .string "I was getting worried that no one\n" + .string "would win our campaign prize.\p" + .string "Congratulations!\n" + .string "You have won!$" + +SafariZone_SecretHouse_Text_ReceivedHM03FromAttendant:: + .string "{PLAYER} received HM03\n" + .string "from the attendant!$" + +SafariZone_SecretHouse_Text_ExplainSurf:: + .string "HM03 is SURF.\p" + .string "POKéMON will be able to ferry you\n" + .string "across water using it.\p" + .string "And, this HM isn't disposable, so\n" + .string "you can use it over and over.\p" + .string "You're super lucky for winning this\n" + .string "fabulous prize!$" + +SafariZone_SecretHouse_Text_DontHaveRoomForPrize:: + .string "You don't have room for this\n" + .string "fabulous prize!$" + diff --git a/data/maps/SafariZone_West/scripts.inc b/data/maps/SafariZone_West/scripts.inc new file mode 100644 index 000000000000..785aef4c7868 --- /dev/null +++ b/data/maps/SafariZone_West/scripts.inc @@ -0,0 +1,39 @@ +SafariZone_West_MapScripts:: + .byte 0 + +SafariZone_West_EventScript_RestHouseSign:: + msgbox SafariZone_West_Text_RestHouse, MSGBOX_SIGN + end + +SafariZone_West_EventScript_LostTeethNotice:: + msgbox SafariZone_West_Text_PleaseFindWardensLostTeeth, MSGBOX_SIGN + end + +SafariZone_West_EventScript_TrainerTips:: + msgbox SafariZone_West_Text_SearchForSecretHouse, MSGBOX_SIGN + end + +SafariZone_West_EventScript_AreaSign:: + msgbox SafariZone_West_Text_AreaSign, MSGBOX_SIGN + end + +SafariZone_West_Text_RestHouse:: + .string "REST HOUSE$" + +SafariZone_West_Text_PleaseFindWardensLostTeeth:: + .string "REQUEST NOTICE\p" + .string "Please find the SAFARI WARDEN's\n" + .string "lost GOLD TEETH.\l" + .string "They're around here somewhere.\p" + .string "Reward offered!\n" + .string "Contact: WARDEN$" + +SafariZone_West_Text_SearchForSecretHouse:: + .string "TRAINER TIPS\p" + .string "Zone Exploration Campaign!\n" + .string "The Search for the SECRET HOUSE!$" + +SafariZone_West_Text_AreaSign:: + .string "AREA 3\n" + .string "EAST: CENTER AREA$" + diff --git a/data/maps/SafariZone_West_RestHouse/scripts.inc b/data/maps/SafariZone_West_RestHouse/scripts.inc new file mode 100644 index 000000000000..f6d4c91c76c2 --- /dev/null +++ b/data/maps/SafariZone_West_RestHouse/scripts.inc @@ -0,0 +1,37 @@ +SafariZone_West_RestHouse_MapScripts:: + .byte 0 + +SafariZone_West_RestHouse_EventScript_Man:: + msgbox SafariZone_West_Text_BaitMakesMonStickAround, MSGBOX_NPC + end + +SafariZone_West_RestHouse_EventScript_Scientist:: + msgbox SafariZone_West_Text_RocksMakeMonRunButEasierCatch, MSGBOX_NPC + end + +SafariZone_West_RestHouse_EventScript_CooltrainerF:: + msgbox SafariZone_West_Text_HikedLotsDidntSeeMonIWanted, MSGBOX_NPC + end + +SafariZone_West_Text_KogaPatrolsSafariEverySoOften:: + .string "The SAFARI ZONE's huge, wouldn't\n" + .string "you say?\p" + .string "FUCHSIA's GYM LEADER, KOGA, \n" + .string "patrols the grounds every so often.\p" + .string "Thanks to him, we can play here\n" + .string "knowing that we're safe.$" + +SafariZone_West_Text_RocksMakeMonRunButEasierCatch:: + .string "Tossing ROCKS at POKéMON might\n" + .string "make them run, but they'll be\l" + .string "easier to catch.$" + +SafariZone_West_Text_BaitMakesMonStickAround:: + .string "Using BAIT will make POKéMON more\n" + .string "likely to stick around if they get\l" + .string "busy eating.$" + +SafariZone_West_Text_HikedLotsDidntSeeMonIWanted:: + .string "I hiked a lot, but I didn't see any\n" + .string "POKéMON I wanted.$" + diff --git a/data/maps/SaffronCity/scripts.inc b/data/maps/SaffronCity/scripts.inc new file mode 100644 index 000000000000..8eb1ac395c58 --- /dev/null +++ b/data/maps/SaffronCity/scripts.inc @@ -0,0 +1,240 @@ +SaffronCity_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SaffronCity_OnTransition + .byte 0 + +SaffronCity_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SAFFRON_CITY + call_if_unset FLAG_RESCUED_MR_FUJI, SaffronCity_EventScript_MoveDoorGuardGrunt + end + +SaffronCity_EventScript_MoveDoorGuardGrunt:: + setobjectxyperm LOCALID_SAFFRON_DOOR_GUARD_GRUNT, 33, 31 + return + +SaffronCity_EventScript_RocketGrunt1:: + msgbox SaffronCity_Text_WhatDoYouWantGetLost, MSGBOX_NPC + end + +SaffronCity_EventScript_RocketGrunt2:: + msgbox SaffronCity_Text_BossTakeTownForTeamRocket, MSGBOX_NPC + end + +SaffronCity_EventScript_RocketGrunt3:: + msgbox SaffronCity_Text_DontGetDefiantOrIllHurtYou, MSGBOX_NPC + end + +SaffronCity_EventScript_RocketGrunt4:: + msgbox SaffronCity_Text_SaffronBelongsToTeamRocket, MSGBOX_NPC + end + +SaffronCity_EventScript_RocketGrunt5:: + msgbox SaffronCity_Text_CriminalLifeMakesMeFeelAlive, MSGBOX_NPC + end + +SaffronCity_EventScript_RocketGrunt6:: + msgbox SaffronCity_Text_WatchWhereYoureWalking, MSGBOX_NPC + end + +SaffronCity_EventScript_RocketGrunt7:: + msgbox SaffronCity_Text_WeCanExploitMonsAroundWorld, MSGBOX_NPC + end + +SaffronCity_EventScript_DoorGuardGrunt:: + lock + goto_if_set FLAG_RESCUED_MR_FUJI, SaffronCity_EventScript_DoorGuardAsleep + applymovement LOCALID_SAFFRON_DOOR_GUARD_GRUNT, Common_Movement_FacePlayer + waitmovement 0 + msgbox SaffronCity_Text_ImASecurityGuard + release + end + +SaffronCity_EventScript_DoorGuardAsleep:: + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox SaffronCity_Text_HesTakingASnooze + release + end + +SaffronCity_EventScript_WorkerM:: + msgbox SaffronCity_Text_YouBeatTeamRocket, MSGBOX_NPC + end + +SaffronCity_EventScript_Youngster:: + msgbox SaffronCity_Text_SafeToGoOutAgain, MSGBOX_NPC + end + +SaffronCity_EventScript_Lass:: + msgbox SaffronCity_Text_PeopleComingBackToSaffron, MSGBOX_NPC + end + +SaffronCity_EventScript_Boy:: + msgbox SaffronCity_Text_FlewHereOnPidgeot, MSGBOX_NPC + end + +SaffronCity_EventScript_Pidgeot:: + lock + faceplayer + waitse + playmoncry SPECIES_PIDGEOT, CRY_MODE_NORMAL + msgbox SaffronCity_Text_Pidgeot + waitmoncry + release + end + +SaffronCity_EventScript_Man:: + msgbox SaffronCity_Text_SawRocketBossEscaping, MSGBOX_NPC + end + +SaffronCity_EventScript_CitySign:: + msgbox SaffronCity_Text_CitySign, MSGBOX_SIGN + end + +SaffronCity_EventScript_DojoSign:: + msgbox SaffronCity_Text_FightingDojo, MSGBOX_SIGN + end + +SaffronCity_EventScript_GymSign:: + lockall + famechecker FAMECHECKER_SABRINA, 0 + msgbox SaffronCity_Text_GymSign + releaseall + end + +SaffronCity_EventScript_TrainerTips1:: + msgbox SaffronCity_Text_FullHealCuresStatus, MSGBOX_SIGN + end + +SaffronCity_EventScript_TrainerTips2:: + msgbox SaffronCity_Text_GreatBallImprovedCatchRate, MSGBOX_SIGN + end + +SaffronCity_EventScript_SilphCoSign:: + msgbox SaffronCity_Text_SilphCoSign, MSGBOX_SIGN + end + +SaffronCity_EventScript_MrPsychicsHouseSign:: + msgbox SaffronCity_Text_MrPsychicsHouse, MSGBOX_SIGN + end + +SaffronCity_EventScript_SilphProductSign:: + msgbox SaffronCity_Text_SilphsLatestProduct, MSGBOX_SIGN + end + +SaffronCity_EventScript_TrainerFanClubSign:: + msgbox SaffronCity_Text_TrainerFanClubSign, MSGBOX_SIGN + end + +SaffronCity_Text_WhatDoYouWantGetLost:: + .string "What do you want?\n" + .string "Get lost!$" + +SaffronCity_Text_BossTakeTownForTeamRocket:: + .string "BOSS said he'll take this town\n" + .string "in the name of TEAM ROCKET!$" + +SaffronCity_Text_DontGetDefiantOrIllHurtYou:: + .string "Don't get defiant!\n" + .string "Or I'll have to hurt you!$" + +SaffronCity_Text_SaffronBelongsToTeamRocket:: + .string "SAFFRON belongs to TEAM ROCKET!$" + +SaffronCity_Text_CriminalLifeMakesMeFeelAlive:: + .string "My life as a criminal makes me feel\n" + .string "so alive!$" + +SaffronCity_Text_WatchWhereYoureWalking:: + .string "Ow!\n" + .string "Watch where you're walking!$" + +SaffronCity_Text_WeCanExploitMonsAroundWorld:: + .string "With SILPH under control, we can\n" + .string "exploit POKéMON around the world!\p" + .string "We'll get stinking rich, yeahah!$" + +SaffronCity_Text_YouBeatTeamRocket:: + .string "You beat TEAM ROCKET all alone?\n" + .string "That's amazing!$" + +SaffronCity_Text_SafeToGoOutAgain:: + .string "Yeah! TEAM ROCKET is gone!\n" + .string "It's safe to go out again!$" + +SaffronCity_Text_PeopleComingBackToSaffron:: + .string "People fled from here in droves\n" + .string "when those ROCKETS came.\p" + .string "They should be flocking back to\n" + .string "SAFFRON now.$" + +SaffronCity_Text_FlewHereOnPidgeot:: + .string "I flew here on my PIDGEOT when\n" + .string "I read about SILPH.\p" + .string "It's already over?\n" + .string "I missed the media action…$" + +SaffronCity_Text_Pidgeot:: + .string "PIDGEOT: Bi bibii!$" + +SaffronCity_Text_SawRocketBossEscaping:: + .string "I saw the ROCKET BOSS escaping\n" + .string "SILPH's building.$" + +SaffronCity_Text_ImASecurityGuard:: + .string "I'm a security guard.\p" + .string "Suspicious kids I don't allow in!$" + +SaffronCity_Text_HesTakingASnooze:: + .string "…\n" + .string "Snore…\p" + .string "Hah! He's taking a snooze!$" + +SaffronCity_Text_CitySign:: + .string "SAFFRON CITY\n" + .string "Shining, Golden Land of Commerce$" + +SaffronCity_Text_FightingDojo:: + .string "FIGHTING DOJO$" + +SaffronCity_Text_GymSign:: + .string "SAFFRON CITY POKéMON GYM\n" + .string "LEADER: SABRINA\l" + .string "The Master of PSYCHIC POKéMON!$" + +SaffronCity_Text_FullHealCuresStatus:: + .string "TRAINER TIPS\p" + .string "FULL HEAL cures all ailments like\n" + .string "burns, paralysis, poisoning,\l" + .string "freezing, and sleep.\p" + .string "It costs a bit more, but it's more\n" + .string "convenient than buying other items.$" + +SaffronCity_Text_GreatBallImprovedCatchRate:: + .string "TRAINER TIPS\p" + .string "The new GREAT BALL offers improved\n" + .string "catching rates.\p" + .string "Try it on those hard-to-catch\n" + .string "POKéMON.$" + +SaffronCity_Text_SilphCoSign:: + .string "SILPH CO. OFFICE BUILDING$" + +SaffronCity_Text_MrPsychicsHouse:: + .string "MR. PSYCHIC'S HOUSE$" + +SaffronCity_Text_SilphsLatestProduct:: + .string "SILPH's latest product!\n" + .string "Release to be determined…$" + +SaffronCity_Text_TrainerFanClubSign:: + .string "POKéMON TRAINER FAN CLUB\p" + .string "Many TRAINERS have scribbled their\n" + .string "names on this sign.$" + +SaffronCity_Text_HowCanClubNotRecognizeLance:: + .string "This FAN CLUB…\n" + .string "No one here has a clue!\p" + .string "How could they not recognize\n" + .string "the brilliance that is LANCE?\p" + .string "He stands for justice!\n" + .string "He's cool, and yet passionate!\l" + .string "He's the greatest, LANCE!$" + diff --git a/data/maps/SaffronCity_Connection/scripts.inc b/data/maps/SaffronCity_Connection/scripts.inc new file mode 100644 index 000000000000..d04a9c516db0 --- /dev/null +++ b/data/maps/SaffronCity_Connection/scripts.inc @@ -0,0 +1,2 @@ +SaffronCity_Connection_MapScripts:: + .byte 0 diff --git a/data/maps/SaffronCity_CopycatsHouse_1F/scripts.inc b/data/maps/SaffronCity_CopycatsHouse_1F/scripts.inc new file mode 100644 index 000000000000..e231a3ccb3b0 --- /dev/null +++ b/data/maps/SaffronCity_CopycatsHouse_1F/scripts.inc @@ -0,0 +1,34 @@ +SaffronCity_CopycatsHouse_1F_MapScripts:: + .byte 0 + +SaffronCity_CopycatsHouse_1F_EventScript_CopycatsMom:: + msgbox SaffronCity_CopycatsHouse_1F_Text_DaughterIsSelfCentered, MSGBOX_NPC + end + +SaffronCity_CopycatsHouse_1F_EventScript_CopycatsDad:: + msgbox SaffronCity_CopycatsHouse_1F_Text_DaughterLikesToMimicPeople, MSGBOX_NPC + end + +SaffronCity_CopycatsHouse_1F_EventScript_Chansey:: + lock + faceplayer + waitse + playmoncry SPECIES_CHANSEY, CRY_MODE_NORMAL + msgbox SaffronCity_CopycatsHouse_1F_Text_Chansey + waitmoncry + release + end + +SaffronCity_CopycatsHouse_1F_Text_DaughterIsSelfCentered:: + .string "My daughter is so self-centered.\n" + .string "She has but a few friends.$" + +SaffronCity_CopycatsHouse_1F_Text_DaughterLikesToMimicPeople:: + .string "My daughter likes to mimic people.\n" + .string "It's rather vexing.\p" + .string "Her mimicry has earned her the\n" + .string "nickname COPYCAT around here.$" + +SaffronCity_CopycatsHouse_1F_Text_Chansey:: + .string "CHANSEY: Chaan! Sii!$" + diff --git a/data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc b/data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc new file mode 100644 index 000000000000..4e5fa11742d2 --- /dev/null +++ b/data/maps/SaffronCity_CopycatsHouse_2F/scripts.inc @@ -0,0 +1,119 @@ +SaffronCity_CopycatsHouse_2F_MapScripts:: + .byte 0 + +SaffronCity_CopycatsHouse_2F_EventScript_Doduo:: + lock + faceplayer + waitse + playmoncry SPECIES_DODUO, CRY_MODE_NORMAL + msgbox SaffronCity_CopycatsHouse_2F_Text_Doduo + waitmoncry + release + end + +SaffronCity_CopycatsHouse_2F_EventScript_Doll:: + lock + msgbox SaffronCity_CopycatsHouse_2F_Text_RareMonOnlyDoll + release + end + +SaffronCity_CopycatsHouse_2F_EventScript_Copycat:: + lock + faceplayer + checkitem ITEM_POKE_DOLL + goto_if_eq VAR_RESULT, TRUE, EventScript_MimicTutor + checkplayergender + call_if_eq VAR_RESULT, MALE, SaffronCity_CopycatsHouse_2F_EventScript_MimicPlayerMale + call_if_eq VAR_RESULT, FEMALE, SaffronCity_CopycatsHouse_2F_EventScript_MimicPlayerFemale + release + end + +SaffronCity_CopycatsHouse_2F_EventScript_MimicPlayerMale:: + msgbox SaffronCity_CopycatsHouse_2F_Text_MimickingFavoriteHobbyMale + return + +SaffronCity_CopycatsHouse_2F_EventScript_MimicPlayerFemale:: + msgbox SaffronCity_CopycatsHouse_2F_Text_MimickingFavoriteHobbyFemale + return + +SaffronCity_CopycatsHouse_2F_EventScript_Computer:: + msgbox SaffronCity_CopycatsHouse_2F_Text_MySecrets, MSGBOX_SIGN + end + +SaffronCity_CopycatsHouse_2F_EventScript_Game:: + msgbox SaffronCity_CopycatsHouse_2F_Text_MarioWearingABucket, MSGBOX_SIGN + end + +SaffronCity_CopycatsHouse_2F_Text_MimickingFavoriteHobbyMale:: + .string "{PLAYER}: Hi!\n" + .string "Do you like POKéMON?\p" + .string "{PLAYER}: Uh, no, I just asked you.\p" + .string "{PLAYER}: Huh?\n" + .string "You're strange!\p" + .string "COPYCAT: Hmm? Quit mimicking?\n" + .string "But, that's my favorite hobby!$" + +SaffronCity_CopycatsHouse_2F_Text_MimickingFavoriteHobbyFemale:: + .string "{PLAYER}: Hi.\n" + .string "You must like POKéMON.\p" + .string "{PLAYER}: No, not me.\n" + .string "I asked you.\p" + .string "{PLAYER}: Pardon?\n" + .string "You're weird!\l" + .string " \l" + .string "COPYCAT: Hmm? Quit mimicking?\l" + .string "But that's my favorite hobby!$" + +Text_MimicTeach:: + .string "Oh wow!\n" + .string "A POKé DOLL!\p" + .string "For me?\n" + .string "Thank you!\p" + .string "You know what?\n" + .string "I can teach the move MIMIC.$" + +Text_MimicDeclined:: + .string "Don't you like MIMIC?$" + +Text_MimicWhichMon:: + .string "I really love MIMIC!\n" + .string "Who's going to learn it?$" + +Text_MimicTaughtMale:: + .string "{PLAYER}: Hi!\n" + .string "Thanks for earlier!\p" + .string "{PLAYER}: Pardon?\p" + .string "{PLAYER}: Is it that fun to mimic my\n" + .string "every move?\p" + .string "COPYCAT: You bet!\n" + .string "It's a scream!$" + +Text_MimicTaughtFemale:: + .string "{PLAYER}: Hi!\n" + .string "Thanks for what you did for us.\p" + .string "{PLAYER}: Pardon?\p" + .string "{PLAYER}: Is it really that fun to\n" + .string "copy what I say and do?\p" + .string "COPYCAT: You bet!\n" + .string "It's a scream!$" + +SaffronCity_CopycatsHouse_2F_Text_Doduo:: + .string "DODUO: Giiih!\p" + .string "PRETTY MIRROR LOOK AT ME,\n" + .string "SEE HOW PRETTY I CAN BE?$" + +SaffronCity_CopycatsHouse_2F_Text_RareMonOnlyDoll:: + .string "This is a rare POKéMON!\n" + .string "Huh? It's only a doll!$" + +SaffronCity_CopycatsHouse_2F_Text_MarioWearingABucket:: + .string "A game with MARIO wearing a bucket\n" + .string "on his head!$" + +SaffronCity_CopycatsHouse_2F_Text_MySecrets:: + .string "…\p" + .string "My Secrets!\p" + .string "Skill: Mimicry!\n" + .string "Hobby: Collecting dolls!\l" + .string "Favorite POKéMON: CLEFAIRY!$" + diff --git a/data/maps/SaffronCity_Dojo/scripts.inc b/data/maps/SaffronCity_Dojo/scripts.inc new file mode 100644 index 000000000000..d311ff7a8f35 --- /dev/null +++ b/data/maps/SaffronCity_Dojo/scripts.inc @@ -0,0 +1,253 @@ +SaffronCity_Dojo_MapScripts:: + .byte 0 + +SaffronCity_Dojo_EventScript_TriggerMasterBattleLeft:: + lockall + setvar VAR_MAP_SCENE_SAFFRON_CITY_DOJO, 1 + applymovement LOCALID_KARATE_MASTER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + releaseall + end + +SaffronCity_Dojo_EventScript_TriggerMasterBattleRight:: + lockall + setvar VAR_MAP_SCENE_SAFFRON_CITY_DOJO, 1 + applymovement LOCALID_KARATE_MASTER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + releaseall + end + +SaffronCity_Dojo_EventScript_HitmonleeBall:: + lock + faceplayer + goto_if_set FLAG_GOT_HITMON_FROM_DOJO, SaffronCity_Dojo_EventScript_AlreadyGotHitmon + showmonpic SPECIES_HITMONLEE, 10, 3 + setvar VAR_TEMP_1, SPECIES_HITMONLEE + applymovement LOCALID_KARATE_MASTER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + textcolor NPC_TEXT_COLOR_MALE + msgbox SaffronCity_Dojo_Text_YouWantHitmonlee, MSGBOX_YESNO + call EventScript_RestorePrevTextColor + goto_if_eq VAR_RESULT, YES, SaffronCity_Dojo_EventScript_GiveHitmon + hidemonpic + release + end + +SaffronCity_Dojo_EventScript_AlreadyGotHitmon:: + msgbox SaffronCity_Dojo_Text_BetterNotGetGreedy + release + end + +SaffronCity_Dojo_EventScript_HitmonchanBall:: + lock + faceplayer + goto_if_set FLAG_GOT_HITMON_FROM_DOJO, SaffronCity_Dojo_EventScript_AlreadyGotHitmon + showmonpic SPECIES_HITMONCHAN, 10, 3 + setvar VAR_TEMP_1, SPECIES_HITMONCHAN + applymovement LOCALID_KARATE_MASTER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + textcolor NPC_TEXT_COLOR_MALE + msgbox SaffronCity_Dojo_Text_YouWantHitmonchan, MSGBOX_YESNO + call EventScript_RestorePrevTextColor + goto_if_eq VAR_RESULT, YES, SaffronCity_Dojo_EventScript_GiveHitmon + hidemonpic + release + end + +SaffronCity_Dojo_EventScript_GiveHitmon:: + hidemonpic + givemon VAR_TEMP_1, 25 + goto_if_eq VAR_RESULT, 0, SaffronCity_Dojo_EventScript_ReceivedHitmonParty + goto_if_eq VAR_RESULT, 1, SaffronCity_Dojo_EventScript_ReceivedHitmonPC + goto_if_eq VAR_RESULT, 2, Common_EventScript_NoMoreRoomForPokemon + release + end + +SaffronCity_Dojo_EventScript_ReceivedHitmonParty:: + removeobject VAR_LAST_TALKED + bufferspeciesname STR_VAR_1, VAR_TEMP_1 + playfanfare MUS_LEVEL_UP + message SaffronCity_Dojo_Text_ReceivedMonFromKarateMaster + waitmessage + waitfanfare + setflag FLAG_GOT_HITMON_FROM_DOJO + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SaffronCity_Dojo_EventScript_EndGiveMon + call Common_EventScript_GetGiftMonPartySlot + call Common_EventScript_NameReceivedPartyMon + goto SaffronCity_Dojo_EventScript_EndGiveMon + end + +SaffronCity_Dojo_EventScript_ReceivedHitmonPC:: + removeobject VAR_LAST_TALKED + bufferspeciesname STR_VAR_1, VAR_TEMP_1 + playfanfare MUS_LEVEL_UP + message SaffronCity_Dojo_Text_ReceivedMonFromKarateMaster + waitmessage + waitfanfare + setflag FLAG_GOT_HITMON_FROM_DOJO + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SaffronCity_Dojo_EventScript_TransferredHitmonToPC + call Common_EventScript_NameReceivedBoxMon + goto SaffronCity_Dojo_EventScript_TransferredHitmonToPC + end + +SaffronCity_Dojo_EventScript_TransferredHitmonToPC:: + call Common_EventScript_TransferredToPC + goto SaffronCity_Dojo_EventScript_EndGiveMon + end + +SaffronCity_Dojo_EventScript_EndGiveMon:: + release + end + +SaffronCity_Dojo_EventScript_Statue:: + msgbox SaffronCity_Dojo_Text_FightingDojo, MSGBOX_SIGN + end + +SaffronCity_Dojo_EventScript_LeftScroll:: + msgbox SaffronCity_Dojo_Text_EnemiesOnEverySide, MSGBOX_SIGN + end + +SaffronCity_Dojo_EventScript_RightScroll:: + msgbox SaffronCity_Dojo_Text_GoesAroundComesAround, MSGBOX_SIGN + end + +SaffronCity_Dojo_EventScript_Hitoshi:: + trainerbattle_single TRAINER_BLACK_BELT_HITOSHI, SaffronCity_Dojo_Text_HitoshiIntro, SaffronCity_Dojo_Text_HitoshiDefeat + msgbox SaffronCity_Dojo_Text_HitoshiPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Dojo_EventScript_Hideki:: + trainerbattle_single TRAINER_BLACK_BELT_HIDEKI, SaffronCity_Dojo_Text_HidekiIntro, SaffronCity_Dojo_Text_HidekiDefeat + msgbox SaffronCity_Dojo_Text_HidekiPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Dojo_EventScript_Aaron:: + trainerbattle_single TRAINER_BLACK_BELT_AARON, SaffronCity_Dojo_Text_AaronIntro, SaffronCity_Dojo_Text_AaronDefeat + msgbox SaffronCity_Dojo_Text_AaronPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Dojo_EventScript_Mike:: + trainerbattle_single TRAINER_BLACK_BELT_MIKE, SaffronCity_Dojo_Text_MikeIntro, SaffronCity_Dojo_Text_MikeDefeat + msgbox SaffronCity_Dojo_Text_MikePostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Dojo_EventScript_MasterKoichi:: + trainerbattle_single TRAINER_BLACK_BELT_KOICHI, SaffronCity_Dojo_Text_MasterKoichiIntro, SaffronCity_Dojo_Text_MasterKoichiDefeat, SaffronCity_Dojo_EventScript_DefeatedMasterKoichi + goto_if_set FLAG_GOT_HITMON_FROM_DOJO, SaffronCity_Dojo_EventScript_MasterKoichiAlreadyGotHitmon + msgbox SaffronCity_Dojo_Text_ChoosePrizedFightingMon, MSGBOX_AUTOCLOSE + end + +SaffronCity_Dojo_EventScript_MasterKoichiAlreadyGotHitmon:: + msgbox SaffronCity_Dojo_Text_StayAndTrainWithUs + release + end + +SaffronCity_Dojo_EventScript_DefeatedMasterKoichi:: + setvar VAR_MAP_SCENE_SAFFRON_CITY_DOJO, 1 + release + end + +SaffronCity_Dojo_Text_MasterKoichiIntro:: + .string "Grunt!\p" + .string "I am the KARATE MASTER!\n" + .string "I am the LEADER here!\p" + .string "You wish to challenge us?\n" + .string "Expect no mercy!\p" + .string "Fwaaa!$" + +SaffronCity_Dojo_Text_MasterKoichiDefeat:: + .string "Hwa!\n" + .string "Arrgh! Beaten!$" + +SaffronCity_Dojo_Text_ChoosePrizedFightingMon:: + .string "Indeed, I have lost!\p" + .string "But, I beseech you, do not take\n" + .string "our emblem as your trophy!\p" + .string "In return, I will give you a prized\n" + .string "FIGHTING POKéMON!\p" + .string "Choose whichever one you like!$" + +SaffronCity_Dojo_Text_StayAndTrainWithUs:: + .string "Grunt!\n" + .string "Stay and train at karate with us!$" + +SaffronCity_Dojo_Text_MikeIntro:: + .string "Hoargh!\n" + .string "Take your shoes off!$" + +SaffronCity_Dojo_Text_MikeDefeat:: + .string "I give up!$" + +SaffronCity_Dojo_Text_MikePostBattle:: + .string "You wait 'til you see our MASTER!\n" + .string "I'm a small fry compared to him!$" + +SaffronCity_Dojo_Text_HidekiIntro:: + .string "I hear you're good!\n" + .string "Show me!$" + +SaffronCity_Dojo_Text_HidekiDefeat:: + .string "Judge!\n" + .string "One point!$" + +SaffronCity_Dojo_Text_HidekiPostBattle:: + .string "Our MASTER is a pro fighter.\n" + .string "Be prepared to lose!$" + +SaffronCity_Dojo_Text_AaronIntro:: + .string "Hiyah!\n" + .string "I have no fear for anything tough!\p" + .string "I shatter boulders for training\n" + .string "every day!$" + +SaffronCity_Dojo_Text_AaronDefeat:: + .string "Yow!\n" + .string "Stubbed fingers!$" + +SaffronCity_Dojo_Text_AaronPostBattle:: + .string "The only thing that frightens us is\n" + .string "psychic power!$" + +SaffronCity_Dojo_Text_HitoshiIntro:: + .string "Hwaah!\p" + .string "You're trespassing in our\n" + .string "FIGHTING DOJO!$" + +SaffronCity_Dojo_Text_HitoshiDefeat:: + .string "Oof!\n" + .string "I give up!$" + +SaffronCity_Dojo_Text_HitoshiPostBattle:: + .string "The prime fighters across the land\n" + .string "train here.$" + +SaffronCity_Dojo_Text_YouWantHitmonlee:: + .string "You want the hard-kicking\n" + .string "HITMONLEE?$" + +SaffronCity_Dojo_Text_ReceivedMonFromKarateMaster:: + .string "{PLAYER} received the {STR_VAR_1}\n" + .string "from the KARATE MASTER.$" + +SaffronCity_Dojo_Text_YouWantHitmonchan:: + .string "You want the piston-punching\n" + .string "HITMONCHAN?$" + +SaffronCity_Dojo_Text_ReceivedMonFromKarateMaster2:: + .string "{PLAYER}は カラテ だいおう から\n" + .string "{STR_VAR_1}を もらった!$" + +SaffronCity_Dojo_Text_BetterNotGetGreedy:: + .string "Better not get greedy…$" + +SaffronCity_Dojo_Text_EnemiesOnEverySide:: + .string "Enemies on every side!$" + +SaffronCity_Dojo_Text_GoesAroundComesAround:: + .string "What goes around comes around.$" + +SaffronCity_Dojo_Text_FightingDojo:: + .string "FIGHTING DOJO$" + diff --git a/data/maps/SaffronCity_Gym/scripts.inc b/data/maps/SaffronCity_Gym/scripts.inc new file mode 100644 index 000000000000..0d1c3dd2ac66 --- /dev/null +++ b/data/maps/SaffronCity_Gym/scripts.inc @@ -0,0 +1,257 @@ +SaffronCity_Gym_MapScripts:: + .byte 0 + +SaffronCity_Gym_EventScript_Sabrina:: + famechecker FAMECHECKER_SABRINA, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + trainerbattle_single TRAINER_LEADER_SABRINA, SaffronCity_Gym_Text_SabrinaIntro, SaffronCity_Gym_Text_SabrinaDefeat, SaffronCity_Gym_EventScript_DefeatedSabrina, NO_MUSIC + goto_if_unset FLAG_GOT_TM04_FROM_SABRINA, SaffronCity_Gym_EventScript_GiveTM04 + msgbox SaffronCity_Gym_Text_ExplainTM04 + release + end + +SaffronCity_Gym_EventScript_DefeatedSabrina:: + famechecker FAMECHECKER_SABRINA, 2 + famechecker FAMECHECKER_SABRINA, 3 + clearflag FLAG_HIDE_SAFFRON_CITY_POKECENTER_SABRINA_JOURNALS + setflag FLAG_DEFEATED_SABRINA + setflag FLAG_BADGE06_GET + set_gym_trainers_frlg 6 + goto SaffronCity_Gym_EventScript_GiveTM04 + end + +SaffronCity_Gym_EventScript_GiveTM04:: + msgbox SaffronCity_Gym_Text_ExplainMarshBadgeTakeThis + checkitemspace ITEM_TM04 + goto_if_eq VAR_RESULT, FALSE, SaffronCity_Gym_EventScript_NoRoomForTM04 + giveitem_msg SaffronCity_Gym_Text_ReceivedTM04FromSabrina, ITEM_TM04 + setflag FLAG_GOT_TM04_FROM_SABRINA + msgbox SaffronCity_Gym_Text_SabrinaPostBattle + release + end + +SaffronCity_Gym_EventScript_NoRoomForTM04:: + msgbox SaffronCity_Gym_Text_BagFullOfOtherItems + release + end + +SaffronCity_Gym_EventScript_Johan:: + trainerbattle_single TRAINER_PSYCHIC_JOHAN, SaffronCity_Gym_Text_JohanIntro, SaffronCity_Gym_Text_JohanDefeat + msgbox SaffronCity_Gym_Text_JohanPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Gym_EventScript_Tyron:: + trainerbattle_single TRAINER_PSYCHIC_TYRON, SaffronCity_Gym_Text_TyronIntro, SaffronCity_Gym_Text_TyronDefeat + famechecker FAMECHECKER_SABRINA, 5 + msgbox SaffronCity_Gym_Text_TyronPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Gym_EventScript_Cameron:: + trainerbattle_single TRAINER_PSYCHIC_CAMERON, SaffronCity_Gym_Text_CameronIntro, SaffronCity_Gym_Text_CameronDefeat + msgbox SaffronCity_Gym_Text_CameronPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Gym_EventScript_Preston:: + trainerbattle_single TRAINER_PSYCHIC_PRESTON, SaffronCity_Gym_Text_PrestonIntro, SaffronCity_Gym_Text_PrestonDefeat + msgbox SaffronCity_Gym_Text_PrestonPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Gym_EventScript_Amanda:: + trainerbattle_single TRAINER_CHANNELER_AMANDA, SaffronCity_Gym_Text_AmandaIntro, SaffronCity_Gym_Text_AmandaDefeat + msgbox SaffronCity_Gym_Text_AmandaPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Gym_EventScript_Stacy:: + trainerbattle_single TRAINER_CHANNELER_STACY, SaffronCity_Gym_Text_StacyIntro, SaffronCity_Gym_Text_StacyDefeat + msgbox SaffronCity_Gym_Text_StacyPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Gym_EventScript_Tasha:: + trainerbattle_single TRAINER_CHANNELER_TASHA, SaffronCity_Gym_Text_TashaIntro, SaffronCity_Gym_Text_TashaDefeat + msgbox SaffronCity_Gym_Text_TashaPostBattle, MSGBOX_AUTOCLOSE + end + +SaffronCity_Gym_EventScript_GymGuy:: + lock + faceplayer + goto_if_set FLAG_DEFEATED_SABRINA, SaffronCity_Gym_EventScript_GymGuyPostVictory + msgbox SaffronCity_Gym_Text_GymGuyAdvice + release + end + +SaffronCity_Gym_EventScript_GymGuyPostVictory:: + msgbox SaffronCity_Gym_Text_GymGuyPostVictory + release + end + +SaffronCity_Gym_EventScript_GymStatue:: + lockall + goto_if_set FLAG_BADGE06_GET, SaffronCity_Gym_EventScript_GymStatuePostVictory + msgbox SaffronCity_Gym_Text_GymStatue + releaseall + end + +SaffronCity_Gym_EventScript_GymStatuePostVictory:: + msgbox SaffronCity_Gym_Text_GymStatuePlayerWon + releaseall + end + +SaffronCity_Gym_Text_SabrinaIntro:: + .string "I had a vision of your arrival.\p" + .string "I have had psychic powers since\n" + .string "I was a child.\p" + .string "It started when a spoon I\n" + .string "carelessly tossed, bent.\p" + .string "I dislike battling, but if you wish,\n" + .string "I will show you my powers!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +SaffronCity_Gym_Text_SabrinaDefeat:: + .string "This loss shocks me!\n" + .string "But, a loss is a loss.\p" + .string "I admit, I didn't work hard enough\n" + .string "to win.\p" + .string "Your victory has earned you the\n" + .string "MARSHBADGE.$" + +SaffronCity_Gym_Text_SabrinaPostBattle:: + .string "Psychic power isn't something that\n" + .string "only a few people have.\p" + .string "Everyone has psychic power.\n" + .string "People just don't realize it.$" + +SaffronCity_Gym_Text_ExplainMarshBadgeTakeThis:: + .string "The MARSHBADGE makes POKéMON up\n" + .string "to Lv. 70 obey you.\p" + .string "Stronger POKéMON will become wild,\n" + .string "ignoring your orders in battle.\p" + .string "Just don't raise your POKéMON too\n" + .string "much to avoid that problem.\p" + .string "Wait, please take this TM with you.$" + +SaffronCity_Gym_Text_ReceivedTM04FromSabrina:: + .string "{PLAYER} received TM04 from\n" + .string "SABRINA.$" + +SaffronCity_Gym_Text_ExplainTM04:: + .string "TM04 is CALM MIND.\p" + .string "It makes the POKéMON concentrate\n" + .string "to raise both SP. ATK and SP. DEF.$" + +SaffronCity_Gym_Text_BagFullOfOtherItems:: + .string "Your BAG is full of other items.$" + +SaffronCity_Gym_Text_AmandaIntro:: + .string "SABRINA is far younger than I,\n" + .string "but she has earned my respect.$" + +SaffronCity_Gym_Text_AmandaDefeat:: + .string "Not good enough!$" + +SaffronCity_Gym_Text_AmandaPostBattle:: + .string "In a battle of equals, the one\n" + .string "with the stronger will wins.\p" + .string "If you wish to beat SABRINA, focus\n" + .string "and will yourself to victory.$" + +SaffronCity_Gym_Text_JohanIntro:: + .string "Does our unseen power scare you?$" + +SaffronCity_Gym_Text_JohanDefeat:: + .string "I never foresaw this!$" + +SaffronCity_Gym_Text_JohanPostBattle:: + .string "PSYCHIC POKéMON fear only ghosts\n" + .string "and bugs!$" + +SaffronCity_Gym_Text_StacyIntro:: + .string "POKéMON take on the appearance of\n" + .string "their TRAINERS.\p" + .string "Your POKéMON must be tough, then!$" + +SaffronCity_Gym_Text_StacyDefeat:: + .string "I knew it!$" + +SaffronCity_Gym_Text_StacyPostBattle:: + .string "I have much to learn still…\p" + .string "I must master PSYCHIC and teach it\n" + .string "to my POKéMON…$" + +SaffronCity_Gym_Text_TyronIntro:: + .string "You understand, don't you?\p" + .string "That power alone isn't enough to\n" + .string "win in the world of POKéMON?$" + +SaffronCity_Gym_Text_TyronDefeat:: + .string "I don't believe this!$" + +SaffronCity_Gym_Text_TyronPostBattle:: + .string "SABRINA just wiped out the KARATE\n" + .string "MASTER next door.$" + +SaffronCity_Gym_Text_TashaIntro:: + .string "You and I, our POKéMON shall\n" + .string "battle!$" + +SaffronCity_Gym_Text_TashaDefeat:: + .string "I lost after all!$" + +SaffronCity_Gym_Text_TashaPostBattle:: + .string "I knew that this was going to take\n" + .string "place.$" + +SaffronCity_Gym_Text_CameronIntro:: + .string "SABRINA is young, but she's also\n" + .string "our highly skilled LEADER.\p" + .string "You won't reach her easily!$" + +SaffronCity_Gym_Text_CameronDefeat:: + .string "Ow!\n" + .string "Down and out!$" + +SaffronCity_Gym_Text_CameronPostBattle:: + .string "There used to be two POKéMON GYMS\n" + .string "in SAFFRON.\p" + .string "The FIGHTING DOJO next door lost\n" + .string "its GYM status, though.\p" + .string "We simply creamed them when we\n" + .string "decided to have just one GYM.$" + +SaffronCity_Gym_Text_PrestonIntro:: + .string "SAFFRON POKéMON GYM is famous for\n" + .string "training psychics.\p" + .string "You want to see SABRINA, don't\n" + .string "you? I can tell!$" + +SaffronCity_Gym_Text_PrestonDefeat:: + .string "Arrrgh!$" + +SaffronCity_Gym_Text_PrestonPostBattle:: + .string "That's right! I used telepathy to\n" + .string "read your mind!$" + +SaffronCity_Gym_Text_GymGuyAdvice:: + .string "Yo!\n" + .string "Champ in the making!\p" + .string "SABRINA's POKéMON use psychic\n" + .string "power instead of force.\p" + .string "FIGHTING POKéMON are especially\n" + .string "weak against PSYCHIC POKéMON.\p" + .string "They'll get destroyed before they\n" + .string "can even aim a punch!$" + +SaffronCity_Gym_Text_GymGuyPostVictory:: + .string "Psychic power, huh?\p" + .string "If I had that, I'd make a bundle\n" + .string "at the slots!$" + +SaffronCity_Gym_Text_GymStatue:: + .string "SAFFRON POKéMON GYM\n" + .string "LEADER: SABRINA\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}$" + +SaffronCity_Gym_Text_GymStatuePlayerWon:: + .string "SAFFRON POKéMON GYM\n" + .string "LEADER: SABRINA\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}, {PLAYER}$" + diff --git a/data/maps/SaffronCity_House/scripts.inc b/data/maps/SaffronCity_House/scripts.inc new file mode 100644 index 000000000000..90e3027991f3 --- /dev/null +++ b/data/maps/SaffronCity_House/scripts.inc @@ -0,0 +1,45 @@ +SaffronCity_House_MapScripts:: + .byte 0 + +SaffronCity_House_EventScript_Lass:: + msgbox SaffronCity_House_Text_DontLookAtMyLetter, MSGBOX_NPC + end + +SaffronCity_House_EventScript_Youngster:: + msgbox SaffronCity_House_Text_GettingCopycatPokeDoll, MSGBOX_NPC + end + +SaffronCity_House_EventScript_Pidgey:: + lock + faceplayer + waitse + playmoncry SPECIES_PIDGEY, CRY_MODE_NORMAL + msgbox SaffronCity_House_Text_Pidgey + waitmoncry + release + end + +SaffronCity_House_EventScript_Letter:: + msgbox SaffronCity_House_Text_ExplainPPUp, MSGBOX_SIGN + end + +SaffronCity_House_Text_DontLookAtMyLetter:: + .string "…Thank you for writing.\n" + .string "I hope to see you soon!\p" + .string "…Hey!\n" + .string "Don't look at my letter!$" + +SaffronCity_House_Text_Pidgey:: + .string "PIDGEY: Kurukkoo!$" + +SaffronCity_House_Text_GettingCopycatPokeDoll:: + .string "The COPYCAT is cute!\n" + .string "I'm getting her a POKé DOLL.$" + +SaffronCity_House_Text_ExplainPPUp:: + .string "I was given a PP UP as a gift.\p" + .string "It's used to increase the PP of\n" + .string "a POKéMON's move.\p" + .string "I should use it on a powerful move\n" + .string "with only a few PP.$" + diff --git a/data/maps/SaffronCity_Mart/scripts.inc b/data/maps/SaffronCity_Mart/scripts.inc new file mode 100644 index 000000000000..e9ee57afe63b --- /dev/null +++ b/data/maps/SaffronCity_Mart/scripts.inc @@ -0,0 +1,43 @@ +SaffronCity_Mart_MapScripts:: + .byte 0 + +SaffronCity_Mart_EventScript_Lass:: + msgbox SaffronCity_Mart_Text_ReviveIsCostly, MSGBOX_NPC + end + +SaffronCity_Mart_EventScript_Youngster:: + msgbox SaffronCity_Mart_Text_MaxRepelMoreEffectiveThanSuper, MSGBOX_NPC + end + +SaffronCity_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart SaffronCity_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +SaffronCity_Mart_Items:: + .2byte ITEM_GREAT_BALL + .2byte ITEM_HYPER_POTION + .2byte ITEM_REVIVE + .2byte ITEM_FULL_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_MAX_REPEL + .2byte ITEM_NONE + release + end + +SaffronCity_Mart_Text_MaxRepelMoreEffectiveThanSuper:: + .string "MAX REPEL keeps weaker POKéMON\n" + .string "from appearing.\p" + .string "MAX REPEL stays effective longer\n" + .string "than SUPER REPEL.$" + +SaffronCity_Mart_Text_ReviveIsCostly:: + .string "REVIVE is costly, but it revives\n" + .string "fainted POKéMON!$" + diff --git a/data/maps/SaffronCity_MrPsychicsHouse/scripts.inc b/data/maps/SaffronCity_MrPsychicsHouse/scripts.inc new file mode 100644 index 000000000000..34ae0eec800e --- /dev/null +++ b/data/maps/SaffronCity_MrPsychicsHouse/scripts.inc @@ -0,0 +1,44 @@ +SaffronCity_MrPsychicsHouse_MapScripts:: + .byte 0 + +SaffronCity_MrPsychicsHouse_EventScript_MrPsychic:: + lock + faceplayer + goto_if_set FLAG_GOT_TM29_FROM_MR_PSYCHIC, SaffronCity_MrPsychicsHouse_EventScript_AlreadyGotTM29 + msgbox SaffronCity_MrPsychicsHouse_Text_YouWantedThis + checkitemspace ITEM_TM29 + goto_if_eq VAR_RESULT, FALSE, SaffronCity_MrPsychicsHouse_EventScript_NoRoomForTM29 + giveitem_msg SaffronCity_MrPsychicsHouse_Text_ReceivedTM29FromMrPsychic, ITEM_TM29 + msgbox SaffronCity_MrPsychicsHouse_Text_ExplainTM29 + setflag FLAG_GOT_TM29_FROM_MR_PSYCHIC + release + end + +SaffronCity_MrPsychicsHouse_EventScript_NoRoomForTM29:: + msgbox SaffronCity_MrPsychicsHouse_Text_YouveNoRoom + release + end + +SaffronCity_MrPsychicsHouse_EventScript_AlreadyGotTM29:: + msgbox SaffronCity_MrPsychicsHouse_Text_ExplainTM29 + release + end + +SaffronCity_MrPsychicsHouse_Text_YouWantedThis:: + .string "…Wait! Don't say a word!\p" + .string "You wanted this!$" + +SaffronCity_MrPsychicsHouse_Text_ReceivedTM29FromMrPsychic:: + .string "{PLAYER} received TM29\n" + .string "from MR. PSYCHIC.$" + +SaffronCity_MrPsychicsHouse_Text_ExplainTM29:: + .string "You already know, don't you?\n" + .string "TM29 is PSYCHIC.\p" + .string "It's an attack that may also lower\n" + .string "the target's special stats.$" + +SaffronCity_MrPsychicsHouse_Text_YouveNoRoom:: + .string "Where do you plan to put this?\n" + .string "You've no room.$" + diff --git a/data/maps/SaffronCity_PokemonCenter_1F/scripts.inc b/data/maps/SaffronCity_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..26bb79484387 --- /dev/null +++ b/data/maps/SaffronCity_PokemonCenter_1F/scripts.inc @@ -0,0 +1,57 @@ +SaffronCity_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SaffronCity_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +SaffronCity_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_SAFFRON_CITY + end + +SaffronCity_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +SaffronCity_PokemonCenter_1F_EventScript_Gentleman:: + msgbox SaffronCity_PokemonCenter_1F_Text_SilphCoVictimOfFame, MSGBOX_NPC + end + +SaffronCity_PokemonCenter_1F_EventScript_Woman:: + msgbox SaffronCity_PokemonCenter_1F_Text_GrowthRatesDifferBySpecies, MSGBOX_NPC + end + +SaffronCity_PokemonCenter_1F_EventScript_Youngster:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_SILPH_CO_11F, 1, SaffronCity_PokemonCenter_1F_EventScript_YoungsterRocketsGone + msgbox SaffronCity_PokemonCenter_1F_Text_GreatIfEliteFourCameBeatRockets + release + end + +SaffronCity_PokemonCenter_1F_EventScript_YoungsterRocketsGone:: + msgbox SaffronCity_PokemonCenter_1F_Text_TeamRocketTookOff + release + end + +SaffronCity_PokemonCenter_1F_Text_GrowthRatesDifferBySpecies:: + .string "POKéMON growth rates differ from\n" + .string "species to species.$" + +SaffronCity_PokemonCenter_1F_Text_SilphCoVictimOfFame:: + .string "SILPH CO. is widely known to all.\p" + .string "It's a victim of its own fame - it\n" + .string "attracted TEAM ROCKET.$" + +SaffronCity_PokemonCenter_1F_Text_GreatIfEliteFourCameBeatRockets:: + .string "Sigh…\n" + .string "Wouldn't this be great?\p" + .string "If the ELITE FOUR came and\n" + .string "stomped TEAM ROCKET?$" + +SaffronCity_PokemonCenter_1F_Text_TeamRocketTookOff:: + .string "TEAM ROCKET took off!\n" + .string "We can go out safely again!\l" + .string "That's great!$" + diff --git a/data/maps/SaffronCity_PokemonCenter_2F/scripts.inc b/data/maps/SaffronCity_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..94cc9b51b921 --- /dev/null +++ b/data/maps/SaffronCity_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +SaffronCity_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +SaffronCity_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +SaffronCity_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +SaffronCity_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/SaffronCity_PokemonTrainerFanClub/scripts.inc b/data/maps/SaffronCity_PokemonTrainerFanClub/scripts.inc new file mode 100644 index 000000000000..c29050a3feb5 --- /dev/null +++ b/data/maps/SaffronCity_PokemonTrainerFanClub/scripts.inc @@ -0,0 +1,675 @@ +SaffronCity_PokemonTrainerFanClub_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, SaffronCity_PokemonTrainerFanClub_OnFrame + map_script MAP_SCRIPT_ON_TRANSITION, SaffronCity_PokemonTrainerFanClub_OnTransition + .byte 0 + +SaffronCity_PokemonTrainerFanClub_OnFrame:: + map_script_2 VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 1, SaffronCity_PokemonTrainerFanClub_EventScript_MeetFirstFans + .2byte 0 + +SaffronCity_PokemonTrainerFanClub_EventScript_MeetFirstFans:: + lockall + textcolor NPC_TEXT_COLOR_FEMALE + applymovement LOCALID_TRAINER_FAN_CLUB_BATTLE_GIRL, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + playse SE_PIN + applymovement LOCALID_TRAINER_FAN_CLUB_BATTLE_GIRL, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_TRAINER_FAN_CLUB_BATTLE_GIRL, Common_Movement_Delay48 + waitmovement 0 + msgbox SaffronCity_PokemonTrainerFanClub_Text_HuhYou + closemessage + applymovement LOCALID_TRAINER_FAN_CLUB_BATTLE_GIRL, SaffronCity_PokemonTrainerFanClub_Movement_FanApproachPlayer + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + msgbox SaffronCity_PokemonTrainerFanClub_Text_YourePlayerWereYourFansNow + setvar VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 2 + releaseall + end + +SaffronCity_PokemonTrainerFanClub_Movement_FanApproachPlayer:: + delay_16 + delay_8 + walk_down + delay_16 + walk_down + delay_8 + walk_left + step_end + +SaffronCity_PokemonTrainerFanClub_OnTransition:: + goto_if_eq VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 1, SaffronCity_PokemonTrainerFanClub_EventScript_SetMemberPosForFirstMeeting + goto_if_eq VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 2, SaffronCity_PokemonTrainerFanClub_EventScript_UpdateFanMemberPositions + end + +SaffronCity_PokemonTrainerFanClub_EventScript_UpdateFanMemberPositions:: + special Script_TryLoseFansFromPlayTime + setvar VAR_0x8004, FANCLUB_MEMBER1 + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + call_if_eq VAR_RESULT, FALSE, SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember1ToFarTable + setvar VAR_0x8004, FANCLUB_MEMBER2 + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + call_if_eq VAR_RESULT, FALSE, SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember2ToFarTable + setvar VAR_0x8004, FANCLUB_MEMBER3 + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + call_if_eq VAR_RESULT, FALSE, SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember3ToFarTable + setvar VAR_0x8004, FANCLUB_MEMBER4 + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + call_if_eq VAR_RESULT, FALSE, SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember4ToFarTable + setvar VAR_0x8004, FANCLUB_MEMBER5 + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + call_if_eq VAR_RESULT, FALSE, SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember5ToFarTable + setvar VAR_0x8004, FANCLUB_MEMBER6 + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + call_if_eq VAR_RESULT, FALSE, SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember6ToFarTable + setvar VAR_0x8004, FANCLUB_MEMBER7 + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + call_if_eq VAR_RESULT, FALSE, SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember7ToFarTable + setvar VAR_0x8004, FANCLUB_MEMBER8 + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + call_if_eq VAR_RESULT, FALSE, SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember8ToFarTable + end + +SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember1ToFarTable:: + setobjectxyperm LOCALID_TRAINER_FAN_CLUB_BATTLE_GIRL, 5, 2 + setobjectmovementtype LOCALID_TRAINER_FAN_CLUB_BATTLE_GIRL, MOVEMENT_TYPE_FACE_UP + return + +SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember2ToFarTable:: + setobjectxyperm LOCALID_TRAINER_FAN_CLUB_YOUNGSTER, 7, 4 + setobjectmovementtype LOCALID_TRAINER_FAN_CLUB_YOUNGSTER, MOVEMENT_TYPE_FACE_LEFT + return + +SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember3ToFarTable:: + setobjectxyperm LOCALID_TRAINER_FAN_CLUB_GENTLEMAN, 2, 2 + setobjectmovementtype LOCALID_TRAINER_FAN_CLUB_GENTLEMAN, MOVEMENT_TYPE_FACE_UP + return + +SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember4ToFarTable:: + setobjectxyperm LOCALID_TRAINER_FAN_CLUB_LITTLE_GIRL, 3, 4 + setobjectmovementtype LOCALID_TRAINER_FAN_CLUB_LITTLE_GIRL, MOVEMENT_TYPE_FACE_RIGHT + return + +SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember5ToFarTable:: + setobjectxyperm LOCALID_TRAINER_FAN_CLUB_ROCKER, 4, 6 + setobjectmovementtype LOCALID_TRAINER_FAN_CLUB_ROCKER, MOVEMENT_TYPE_FACE_UP + return + +SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember6ToFarTable:: + setobjectxyperm LOCALID_TRAINER_FAN_CLUB_WOMAN, 10, 3 + setobjectmovementtype LOCALID_TRAINER_FAN_CLUB_WOMAN, MOVEMENT_TYPE_FACE_UP + return + +SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember7ToFarTable:: + setobjectxyperm LOCALID_TRAINER_FAN_CLUB_BEAUTY, 7, 5 + setobjectmovementtype LOCALID_TRAINER_FAN_CLUB_BEAUTY, MOVEMENT_TYPE_FACE_LEFT + return + +SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember8ToFarTable:: + setobjectxyperm LOCALID_TRAINER_FAN_CLUB_BLACK_BELT, 9, 6 + setobjectmovementtype LOCALID_TRAINER_FAN_CLUB_BLACK_BELT, MOVEMENT_TYPE_FACE_LEFT + return + +SaffronCity_PokemonTrainerFanClub_EventScript_SetMemberPosForFirstMeeting:: + call SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember4ToFarTable + call SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember5ToFarTable + call SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember6ToFarTable + call SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember7ToFarTable + call SaffronCity_PokemonTrainerFanClub_EventScript_MoveMember8ToFarTable + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirl:: + lock + faceplayer + setvar VAR_0x8004, FANCLUB_MEMBER1 + special Script_BufferFanClubTrainerName + goto_if_eq VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 0, SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirlPlayerNotChampion + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + goto_if_eq VAR_RESULT, TRUE, SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirlPlayersFan + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirlOnlyNonFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_WasYourFanNotAnymore + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirlPlayersFan:: + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, 1, SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirlOnlyFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_AlwaysCheerForYou + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirlOnlyFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_IllAlwaysBelieveInYou + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirlOnlyNonFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_EveryonesYourFanButICantBe + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BattleGirlPlayerNotChampion:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_TrainersCoolWhenBattling + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirl:: + lock + faceplayer + setvar VAR_0x8004, FANCLUB_MEMBER4 + special Script_BufferFanClubTrainerName + goto_if_eq VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 0, SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayerNotChampion + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + goto_if_eq VAR_RESULT, TRUE, SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayersFan + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirlOnlyNonFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_WantToBeLikeSabrina + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayersFan:: + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, 1, SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirlOnlyFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_WantToBeLikeYouOneDay + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirlOnlyFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_EveryoneButMeStoppedBeingYourFan + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirlOnlyNonFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_WontStopBeingSabrinasFan + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_LittleGirlPlayerNotChampion:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_CanIBecomeCoolTrainerOneDay + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_Youngster:: + lock + faceplayer + setvar VAR_0x8004, FANCLUB_MEMBER2 + special Script_BufferFanClubTrainerName + goto_if_eq VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 0, SaffronCity_PokemonTrainerFanClub_EventScript_YoungsterPlayerNotChampion + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + goto_if_eq VAR_RESULT, TRUE, SaffronCity_PokemonTrainerFanClub_EventScript_YoungsterPlayersFan + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), SaffronCity_PokemonTrainerFanClub_EventScript_YoungsterOnlyNonFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_BrocksMyHero + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_YoungsterPlayersFan:: + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, 1, SaffronCity_PokemonTrainerFanClub_EventScript_YoungsterOnlyFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_CanYouAutographShorts + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_YoungsterOnlyFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_CountingOnYou + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_YoungsterOnlyNonFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_BrocksFanToBitterEnd + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_YoungsterPlayerNotChampion:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_BrocksLastWordOnCool + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_Gentleman:: + lock + faceplayer + setvar VAR_0x8004, FANCLUB_MEMBER3 + special Script_BufferFanClubTrainerName + goto_if_eq VAR_MAP_SCENE_SAFFRON_CITY_POKEMON_TRAINER_FAN_CLUB, 0, SaffronCity_PokemonTrainerFanClub_EventScript_GentlemanPlayerNotChampion + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + goto_if_eq VAR_RESULT, TRUE, SaffronCity_PokemonTrainerFanClub_EventScript_GentlemanPlayersFan + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), SaffronCity_PokemonTrainerFanClub_EventScript_GentlemanOnlyNonFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_HmmAndYouAre + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_GentlemanPlayersFan:: + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, 1, SaffronCity_PokemonTrainerFanClub_EventScript_GentlemanOnlyFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_HadPleasureOfWatchingYouBattle + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_GentlemanOnlyFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_NeverSeenTrainerOfYourMagnificence + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_GentlemanOnlyNonFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_YouveStillAWaysToGo + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_GentlemanPlayerNotChampion:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_YoullBeTalkedAboutIfYouKeepWinning + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_Woman:: + lock + faceplayer + setvar VAR_0x8004, FANCLUB_MEMBER6 + special Script_BufferFanClubTrainerName + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + goto_if_eq VAR_RESULT, TRUE, SaffronCity_PokemonTrainerFanClub_EventScript_WomanPlayersFan + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), SaffronCity_PokemonTrainerFanClub_EventScript_WomanOnlyNonFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_TrainerHasBeenOnFire + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_WomanPlayersFan:: + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, 1, SaffronCity_PokemonTrainerFanClub_EventScript_WomanOnlyFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_AdoreWayYouBattle + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_WomanOnlyFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_ImYourNumberOneFan + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_WomanOnlyNonFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_EveryoneTalksAboutYou + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_Rocker:: + lock + faceplayer + setvar VAR_0x8004, FANCLUB_MEMBER5 + special Script_BufferFanClubTrainerName + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + goto_if_eq VAR_RESULT, TRUE, SaffronCity_PokemonTrainerFanClub_EventScript_RockerPlayersFan + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), SaffronCity_PokemonTrainerFanClub_EventScript_RockerOnlyNonFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_LoveWayTrainerTalks + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_RockerPlayersFan:: + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, 1, SaffronCity_PokemonTrainerFanClub_EventScript_RockerOnlyFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_TheWayYouBattleIsCool + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_RockerOnlyFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_ImOnlyOneLeftOfYourFans + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_RockerOnlyNonFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_ImLoneTrainerFan + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_Beauty:: + lock + faceplayer + setvar VAR_0x8004, FANCLUB_MEMBER7 + special Script_BufferFanClubTrainerName + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + goto_if_eq VAR_RESULT, TRUE, SaffronCity_PokemonTrainerFanClub_EventScript_BeautyPlayersFan + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), SaffronCity_PokemonTrainerFanClub_EventScript_BeautyOnlyNonFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_WhyCantOthersSeeMastersDignity + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BeautyPlayersFan:: + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, 1, SaffronCity_PokemonTrainerFanClub_EventScript_BeautyOnlyFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_YouReallyAreAmazing + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BeautyOnlyFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_ImYourOnlyFan + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BeautyOnlyNonFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_BelieveInMasterWithAllMyHeart + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BlackBelt:: + lock + faceplayer + setvar VAR_0x8004, FANCLUB_MEMBER8 + special Script_BufferFanClubTrainerName + specialvar VAR_RESULT, Script_IsFanClubMemberFanOfPlayer + goto_if_eq VAR_RESULT, TRUE, SaffronCity_PokemonTrainerFanClub_EventScript_BlackBeltPlayersFan + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, (NUM_TRAINER_FAN_CLUB_MEMBERS - 1), SaffronCity_PokemonTrainerFanClub_EventScript_BlackBeltOnlyNonFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_OnlyMasterHasMyRespect + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BlackBeltPlayersFan:: + specialvar VAR_RESULT, Script_GetNumFansOfPlayerInTrainerFanClub + goto_if_eq VAR_RESULT, 1, SaffronCity_PokemonTrainerFanClub_EventScript_BlackBeltOnlyFan + msgbox SaffronCity_PokemonTrainerFanClub_Text_YourBattleStyleIsEducational + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BlackBeltOnlyFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_WontStopBeingYourFan + release + end + +SaffronCity_PokemonTrainerFanClub_EventScript_BlackBeltOnlyNonFan:: + msgbox SaffronCity_PokemonTrainerFanClub_Text_NeverBeFanOfAnyoneButMaster + release + end + +SaffronCity_PokemonTrainerFanClub_Text_HuhYou:: + .string "Huh?\n" + .string "You…$" + +SaffronCity_PokemonTrainerFanClub_Text_YourePlayerWereYourFansNow:: + .string "Are you maybe…\n" + .string "… …\p" + .string "You are!\n" + .string "You are {PLAYER}!\p" + .string "We were just talking about you!\p" + .string "We were talking about how an\n" + .string "incredibly good TRAINER appeared.\p" + .string "And that someone is you!\n" + .string "You're so cool!\p" + .string "So, we decided that we'll become\n" + .string "your FAN CLUB!\p" + .string "We all hope you'll keep battling\n" + .string "and show us how cool you are.\p" + .string "That way, maybe other people will\n" + .string "become fans just like me.$" + +SaffronCity_PokemonTrainerFanClub_Text_AlwaysCheerForYou:: + .string "I'll always be cheering for you!\p" + .string "Go, {PLAYER}, go!$" + +SaffronCity_PokemonTrainerFanClub_Text_IllAlwaysBelieveInYou:: + .string "I'll always believe in you,\n" + .string "{PLAYER}.\p" + .string "Please show the others what you're\n" + .string "like when you battle seriously.$" + +SaffronCity_PokemonTrainerFanClub_Text_WasYourFanNotAnymore:: + .string "I'm sorry.\n" + .string "I was your fan before.\p" + .string "But now, you seem to have lost\n" + .string "the drive you had before.\p" + .string "Lately, I think {STR_VAR_1} has been\n" + .string "a lot cooler.$" + +SaffronCity_PokemonTrainerFanClub_Text_EveryonesYourFanButICantBe:: + .string "Oh!\n" + .string "{PLAYER}!\p" + .string "Everyone's been all excited about\n" + .string "you recently.\p" + .string "I can understand why.\n" + .string "I know that you're strong.\p" + .string "But, do you know what?\p" + .string "Once I became {STR_VAR_1}'s fan,\n" + .string "I can't just stop being a fan.$" + +SaffronCity_PokemonTrainerFanClub_Text_TrainersCoolWhenBattling:: + .string "I think TRAINERS are so cool when\n" + .string "they're battling.\p" + .string "Don't you think so, too?$" + +SaffronCity_PokemonTrainerFanClub_Text_CanYouAutographShorts:: + .string "Oh! It's {PLAYER}!\n" + .string "Too cool!\p" + .string "Oh!\n" + .string "Oh, yeah!\p" + .string "Can you autograph something?\n" + .string "How about my shorts?$" + +SaffronCity_PokemonTrainerFanClub_Text_CountingOnYou:: + .string "However hot it's been…\p" + .string "And however cold it may get…\p" + .string "I've always believed in, and worn,\n" + .string "shorts!\p" + .string "I'm counting on you to keep\n" + .string "winning!\p" + .string "I believe in you just as much as\n" + .string "I believe in shorts!$" + +SaffronCity_PokemonTrainerFanClub_Text_BrocksMyHero:: + .string "BROCK's my hero!\n" + .string "He's a man among men!\p" + .string "Heheh, I got my mom to do\n" + .string "something for me.\p" + .string "I got her to embroider “BROCK”\n" + .string "on my shorts!$" + +SaffronCity_PokemonTrainerFanClub_Text_BrocksFanToBitterEnd:: + .string "… …\p" + .string "… …\n" + .string "I'm BROCK's fan!\p" + .string "Even if I were his only fan,\n" + .string "I swear it on my rock-hard will,\l" + .string "and on my shorts!\p" + .string "I'll be his fan to the bitter end!$" + +SaffronCity_PokemonTrainerFanClub_Text_BrocksLastWordOnCool:: + .string "BROCK's the last word on cool,\n" + .string "end of story!\p" + .string "Now there's a guy who I want to\n" + .string "be like!$" + +SaffronCity_PokemonTrainerFanClub_Text_HadPleasureOfWatchingYouBattle:: + .string "{PLAYER}, I've had the pleasure of\n" + .string "watching you battle.\p" + .string "It brings back sweet memories of\n" + .string "my own long-lost youth.\p" + .string "May you continue to find success.\n" + .string "You have a fan in me!$" + +SaffronCity_PokemonTrainerFanClub_Text_NeverSeenTrainerOfYourMagnificence:: + .string "I have journeyed far and wide\n" + .string "across the lands.\p" + .string "But never have I seen a TRAINER\n" + .string "of your magnificence.\p" + .string "Take courage in your abilities\n" + .string "and keep battling on!\p" + .string "Make that a promise to me,\n" + .string "my young idol!$" + +SaffronCity_PokemonTrainerFanClub_Text_HmmAndYouAre:: + .string "Hmm…\n" + .string "And you are?\p" + .string "Were you hoping to sign up for\n" + .string "a membership in our FAN CLUB?$" + +SaffronCity_PokemonTrainerFanClub_Text_YouveStillAWaysToGo:: + .string "Ah, so you are the much-\n" + .string "talked-about {PLAYER}.\p" + .string "You certainly do have the look of\n" + .string "a winner.\p" + .string "But for me to accept you as\n" + .string "a true POKéMON great…\p" + .string "… …\p" + .string "You've still a ways to go!$" + +SaffronCity_PokemonTrainerFanClub_Text_YoullBeTalkedAboutIfYouKeepWinning:: + .string "All of us gathered here are fans\n" + .string "of POKéMON TRAINERS.\p" + .string "The way they look in battle…\n" + .string "They are the picture of coolness.\p" + .string "Perhaps you will be talked about\n" + .string "here, too, if you keep winning.$" + +SaffronCity_PokemonTrainerFanClub_Text_WantToBeLikeYouOneDay:: + .string "It's {PLAYER}!\n" + .string "It's {PLAYER}!\p" + .string "I want to be like {PLAYER} one day!$" + +SaffronCity_PokemonTrainerFanClub_Text_EveryoneButMeStoppedBeingYourFan:: + .string "Everyone stopped being {PLAYER}'s\n" + .string "fan…\p" + .string "But that means I can have {PLAYER}\n" + .string "all to myself!\p" + .string "Yay! Go for it!\n" + .string "My one and only {PLAYER}!$" + +SaffronCity_PokemonTrainerFanClub_Text_WantToBeLikeSabrina:: + .string "Do you know what?\n" + .string "I want to be like SABRINA!\p" + .string "I want to be a psychic girl just\n" + .string "like her!$" + +SaffronCity_PokemonTrainerFanClub_Text_WontStopBeingSabrinasFan:: + .string "Even if I'm the only one, I won't\n" + .string "stop being SABRINA's fan.\p" + .string "My dream is to be like SABRINA,\n" + .string "cute, but cool.\p" + .string "I want to be a psychic girl just\n" + .string "like her!$" + +SaffronCity_PokemonTrainerFanClub_Text_CanIBecomeCoolTrainerOneDay:: + .string "I wonder if I can become a cool\n" + .string "TRAINER one day?$" + +SaffronCity_PokemonTrainerFanClub_Text_TheWayYouBattleIsCool:: + .string "Oh, man, oh, man!\n" + .string "Cool! Too cool!\p" + .string "…Huh?\n" + .string "No, not you.\p" + .string "Just the way you battle.\n" + .string "That's cool.$" + +SaffronCity_PokemonTrainerFanClub_Text_ImOnlyOneLeftOfYourFans:: + .string "Yo, {PLAYER}!\p" + .string "Looks like I'm the only one left\n" + .string "out of your fans.\p" + .string "But, you know, I like being an only\n" + .string "fan… It's less stressful.\p" + .string "Keep up and at it!$" + +SaffronCity_PokemonTrainerFanClub_Text_LoveWayTrainerTalks:: + .string "{STR_VAR_1}'s cool, huh?\n" + .string "I love the way he talks.\p" + .string "I'd really relish a chance to meet\n" + .string "him in person once.$" + +SaffronCity_PokemonTrainerFanClub_Text_ImLoneTrainerFan:: + .string "Huh, can you believe it?\n" + .string "Everyone turned into your fans.\p" + .string "So after all we've been through,\n" + .string "I'm the lone {STR_VAR_1} fan?\p" + .string "Eh, being the one and only\n" + .string "{STR_VAR_1} fan's my style, anyway.$" + +SaffronCity_PokemonTrainerFanClub_Text_AdoreWayYouBattle:: + .string "Oh, my goodness!\n" + .string "Is it really you, {PLAYER}?\p" + .string "I have to tell you, I adore the\n" + .string "way you battle.\p" + .string "I hope you'll keep at it.\n" + .string "I'll be your number one fan!$" + +SaffronCity_PokemonTrainerFanClub_Text_ImYourNumberOneFan:: + .string "Oh, my goodness!\n" + .string "If it isn't {PLAYER}!\p" + .string "It's so disappointing… I realized\n" + .string "I'm your number-one-and-only fan!\p" + .string "Well, it can't be helped!\n" + .string "Let me cheer you on, at least!\p" + .string "Hurray, hurray, {PLAYER}!$" + +SaffronCity_PokemonTrainerFanClub_Text_TrainerHasBeenOnFire:: + .string "Recently, {STR_VAR_1} has been on\n" + .string "fire.\p" + .string "The way he battles… It's just \n" + .string "the way that I like it!$" + +SaffronCity_PokemonTrainerFanClub_Text_EveryoneTalksAboutYou:: + .string "Oh, hello!\n" + .string "If it isn't {PLAYER}!\p" + .string "Lately, all everyone talks about\n" + .string "is you.\p" + .string "I'm feeling lonesome because I\n" + .string "prefer {STR_VAR_1}.$" + +SaffronCity_PokemonTrainerFanClub_Text_YouReallyAreAmazing:: + .string "Amazing!\n" + .string "{PLAYER}, you really are amazing!\p" + .string "Instead of just watching, maybe\n" + .string "I should become a TRAINER, too.$" + +SaffronCity_PokemonTrainerFanClub_Text_ImYourOnlyFan:: + .string "I'm your only fan…\n" + .string "Sigh… This is lonely…\p" + .string "Can't you try harder and make the\n" + .string "others take notice of you?$" + +SaffronCity_PokemonTrainerFanClub_Text_WhyCantOthersSeeMastersDignity:: + .string "Master {STR_VAR_1} is so dignified…\n" + .string "He is so my type.\p" + .string "Why can't the others see the\n" + .string "dignity he simply oozes?$" + +SaffronCity_PokemonTrainerFanClub_Text_BelieveInMasterWithAllMyHeart:: + .string "I believe in Master {STR_VAR_1}\n" + .string "with all my heart.\p" + .string "Even if I am the only one to\n" + .string "believe in him.\p" + .string "I won't ever feel lonesome, though.\p" + .string "Not if I keep thinking about Master\n" + .string "{STR_VAR_1}.$" + +SaffronCity_PokemonTrainerFanClub_Text_YourBattleStyleIsEducational:: + .string "Hiyah!\p" + .string "Your battling style is most\n" + .string "educational.\p" + .string "I hope that you will keep plugging\n" + .string "away at success, hiyah!$" + +SaffronCity_PokemonTrainerFanClub_Text_WontStopBeingYourFan:: + .string "Instead of just watching others\n" + .string "battle, battle yourself!\p" + .string "…My DOJO's MASTER chewed me out\n" + .string "like that…\p" + .string "But I won't let that stop me from\n" + .string "being your fan!\p" + .string "I can't stop being your fan!$" + +SaffronCity_PokemonTrainerFanClub_Text_OnlyMasterHasMyRespect:: + .string "Hiyah! There is but one TRAINER\n" + .string "who has my respect.\p" + .string "And that is none other than my\n" + .string "MASTER at the FIGHTING DOJO.\p" + .string "You should become a fan of my\n" + .string "MASTER like me! Hiyah!$" + +SaffronCity_PokemonTrainerFanClub_Text_NeverBeFanOfAnyoneButMaster:: + .string "Hiyah! I respect my MASTER at the\n" + .string "FIGHTING DOJO.\p" + .string "I will never become a fan of\n" + .string "anyone other than my MASTER!\p" + .string "I will even sneak out of the DOJO\n" + .string "to spread word of his greatness.\p" + .string "Hiyah!$" + diff --git a/data/maps/SeafoamIslands_1F/scripts.inc b/data/maps/SeafoamIslands_1F/scripts.inc new file mode 100644 index 000000000000..039742b60d94 --- /dev/null +++ b/data/maps/SeafoamIslands_1F/scripts.inc @@ -0,0 +1,7 @@ +SeafoamIslands_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SeafoamIslands_1F_OnTransition + .byte 0 + +SeafoamIslands_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SEAFOAM_ISLANDS_1F + end diff --git a/data/maps/SeafoamIslands_B1F/scripts.inc b/data/maps/SeafoamIslands_B1F/scripts.inc new file mode 100644 index 000000000000..2addc30b8e08 --- /dev/null +++ b/data/maps/SeafoamIslands_B1F/scripts.inc @@ -0,0 +1,2 @@ +SeafoamIslands_B1F_MapScripts:: + .byte 0 diff --git a/data/maps/SeafoamIslands_B2F/scripts.inc b/data/maps/SeafoamIslands_B2F/scripts.inc new file mode 100644 index 000000000000..9389f8308ad8 --- /dev/null +++ b/data/maps/SeafoamIslands_B2F/scripts.inc @@ -0,0 +1,2 @@ +SeafoamIslands_B2F_MapScripts:: + .byte 0 diff --git a/data/maps/SeafoamIslands_B3F/scripts.inc b/data/maps/SeafoamIslands_B3F/scripts.inc new file mode 100644 index 000000000000..0f0494f1aaec --- /dev/null +++ b/data/maps/SeafoamIslands_B3F/scripts.inc @@ -0,0 +1,95 @@ +.equ NUM_BOULDERS_PRESENT, VAR_TEMP_2 + +SeafoamIslands_B3F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SeafoamIslands_B3F_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, SeafoamIslands_B3F_OnFrame + .byte 0 + +SeafoamIslands_B3F_OnTransition:: + call_if_unset FLAG_STOPPED_SEAFOAM_B3F_CURRENT, SeafoamIslands_B3F_EventScript_CheckStoppedCurrent + call_if_set FLAG_STOPPED_SEAFOAM_B3F_CURRENT, SeafoamIslands_B3F_EventScript_SetNoCurrentLayout + end + +SeafoamIslands_B3F_EventScript_CheckStoppedCurrent:: + setvar NUM_BOULDERS_PRESENT, 0 + call_if_unset FLAG_HIDE_SEAFOAM_B3F_BOULDER_1, SeafoamIslands_B3F_EventScript_AddBoulderPresent + call_if_unset FLAG_HIDE_SEAFOAM_B3F_BOULDER_2, SeafoamIslands_B3F_EventScript_AddBoulderPresent + call_if_eq NUM_BOULDERS_PRESENT, 2, SeafoamIslands_B3F_EventScript_StoppedCurrent + return + +SeafoamIslands_B3F_EventScript_StoppedCurrent:: + setflag FLAG_STOPPED_SEAFOAM_B3F_CURRENT + return + +SeafoamIslands_B3F_EventScript_SetNoCurrentLayout:: + setmaplayoutindex LAYOUT_SEAFOAM_ISLANDS_B3F_CURRENT_STOPPED + return + +SeafoamIslands_B3F_OnFrame:: + map_script_2 VAR_TEMP_1, 1, SeafoamIslands_B3F_EventScript_EnterByFalling + .2byte 0 + +SeafoamIslands_B3F_EventScript_EnterByFalling:: + lockall + setvar NUM_BOULDERS_PRESENT, 0 + call_if_unset FLAG_HIDE_SEAFOAM_B3F_BOULDER_1, SeafoamIslands_B3F_EventScript_AddBoulderPresent + call_if_unset FLAG_HIDE_SEAFOAM_B3F_BOULDER_2, SeafoamIslands_B3F_EventScript_AddBoulderPresent + goto_if_eq NUM_BOULDERS_PRESENT, 2, SeafoamIslands_B3F_EventScript_CurrentBlocked + getplayerxy VAR_0x8008, VAR_0x8009 + call_if_lt VAR_0x8008, 24, SeafoamIslands_B3F_EventScript_RideCurrentFar + call_if_ge VAR_0x8008, 24, SeafoamIslands_B3F_EventScript_RideCurrentClose + setvar VAR_MAP_SCENE_SEAFOAM_ISLANDS_B4F, 1 + warp MAP_SEAFOAM_ISLANDS_B4F, 27, 21 + waitstate + releaseall + end + +SeafoamIslands_B3F_EventScript_AddBoulderPresent:: + addvar NUM_BOULDERS_PRESENT, 1 + return + +SeafoamIslands_B3F_EventScript_RideCurrentFar:: + applymovement LOCALID_PLAYER, SeafoamIslands_B3F_Movement_RideCurrentFar + waitmovement 0 + return + +SeafoamIslands_B3F_EventScript_RideCurrentClose:: + applymovement LOCALID_PLAYER, SeafoamIslands_B3F_Movement_RideCurrentClose + waitmovement 0 + return + +SeafoamIslands_B3F_EventScript_CurrentBlocked:: + setvar VAR_TEMP_1, 0 + releaseall + end + +SeafoamIslands_B3F_Movement_RideCurrentFar:: + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_right + walk_fast_right + walk_fast_right + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + step_end + +SeafoamIslands_B3F_Movement_RideCurrentClose:: + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_right + walk_fast_right + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + walk_fast_down + step_end diff --git a/data/maps/SeafoamIslands_B4F/scripts.inc b/data/maps/SeafoamIslands_B4F/scripts.inc new file mode 100644 index 000000000000..e4c9dc4b7e19 --- /dev/null +++ b/data/maps/SeafoamIslands_B4F/scripts.inc @@ -0,0 +1,224 @@ +.equ NUM_BOULDERS_PRESENT, VAR_TEMP_2 + +SeafoamIslands_B4F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SeafoamIslands_B4F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, SeafoamIslands_B4F_OnResume + map_script MAP_SCRIPT_ON_LOAD, SeafoamIslands_B4F_OnLoad + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, SeafoamIslands_B4F_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, SeafoamIslands_B4F_OnFrame + .byte 0 + +SeafoamIslands_B4F_OnResume:: + call_if_set FLAG_SYS_CTRL_OBJ_DELETE, SeafoamIslands_B4F_EventScript_TryRemoveArticuno + end + +SeafoamIslands_B4F_EventScript_TryRemoveArticuno:: + specialvar VAR_RESULT, GetBattleOutcome + goto_if_ne VAR_RESULT, B_OUTCOME_CAUGHT, Common_EventScript_NopReturn + removeobject VAR_LAST_TALKED + return + +SeafoamIslands_B4F_OnTransition:: + call_if_unset FLAG_FOUGHT_ARTICUNO, SeafoamIslands_B4F_EventScript_ShowArticuno + call_if_unset FLAG_STOPPED_SEAFOAM_B4F_CURRENT, SeafoamIslands_B4F_EventScript_CheckStoppedCurrent + call_if_set FLAG_STOPPED_SEAFOAM_B4F_CURRENT, SeafoamIslands_B4F_EventScript_SetNoCurrentLayout + end + +SeafoamIslands_B4F_EventScript_CheckStoppedCurrent:: + setvar NUM_BOULDERS_PRESENT, 0 + call_if_unset FLAG_HIDE_SEAFOAM_B4F_BOULDER_1, SeafoamIslands_B4F_EventScript_AddBoulderPresent + call_if_unset FLAG_HIDE_SEAFOAM_B4F_BOULDER_2, SeafoamIslands_B4F_EventScript_AddBoulderPresent + call_if_eq NUM_BOULDERS_PRESENT, 2, SeafoamIslands_B4F_EventScript_StoppedCurrent + return + +SeafoamIslands_B4F_EventScript_StoppedCurrent:: + setflag FLAG_STOPPED_SEAFOAM_B4F_CURRENT + return + +SeafoamIslands_B4F_EventScript_SetNoCurrentLayout:: + setmaplayoutindex LAYOUT_SEAFOAM_ISLANDS_B4F_CURRENT_STOPPED + return + +SeafoamIslands_B4F_EventScript_ShowArticuno:: + clearflag FLAG_HIDE_ARTICUNO + return + +SeafoamIslands_B4F_OnLoad:: + setvar NUM_BOULDERS_PRESENT, 0 + call_if_unset FLAG_HIDE_SEAFOAM_B4F_BOULDER_1, SeafoamIslands_B4F_EventScript_AddBoulderPresent + call_if_unset FLAG_HIDE_SEAFOAM_B4F_BOULDER_2, SeafoamIslands_B4F_EventScript_AddBoulderPresent + goto_if_eq NUM_BOULDERS_PRESENT, 2, SeafoamIslands_B4F_EventScript_SetCalmWaterNearStairs + end + +SeafoamIslands_B4F_EventScript_SetCalmWaterNearStairs:: + setmetatile 12, 14, METATILE_GeneralFrlg_CalmWater, 0 + setmetatile 13, 14, METATILE_GeneralFrlg_CalmWater, 0 + end + +SeafoamIslands_B4F_OnWarp:: + map_script_2 VAR_MAP_SCENE_SEAFOAM_ISLANDS_B4F, 1, SeafoamIslands_B4F_EventScript_WarpInOnCurrent + .2byte 0 + +SeafoamIslands_B4F_EventScript_WarpInOnCurrent:: + turnobject LOCALID_PLAYER, DIR_NORTH + special ForcePlayerToStartSurfing + end + +SeafoamIslands_B4F_OnFrame:: + map_script_2 VAR_MAP_SCENE_SEAFOAM_ISLANDS_B4F, 1, SeafoamIslands_B4F_EventScript_EnterOnCurrent + map_script_2 VAR_TEMP_1, 1, SeafoamIslands_B4F_EventScript_EnterByFalling + .2byte 0 + +@ The current the player is forced in on from B3F +SeafoamIslands_B4F_EventScript_EnterOnCurrent:: + lockall + applymovement LOCALID_PLAYER, SeafoamIslands_B4F_Movement_EnterOnCurrent + waitmovement 0 + setvar VAR_MAP_SCENE_SEAFOAM_ISLANDS_B4F, 0 + releaseall + end + +SeafoamIslands_B4F_Movement_EnterOnCurrent:: + walk_fast_up + walk_fast_up + walk_fast_up + step_end + +@ The current the player lands on when entering the map by falling +SeafoamIslands_B4F_EventScript_EnterByFalling:: + lockall + setvar NUM_BOULDERS_PRESENT, 0 + call_if_unset FLAG_HIDE_SEAFOAM_B4F_BOULDER_1, SeafoamIslands_B4F_EventScript_AddBoulderPresent + call_if_unset FLAG_HIDE_SEAFOAM_B4F_BOULDER_2, SeafoamIslands_B4F_EventScript_AddBoulderPresent + goto_if_eq NUM_BOULDERS_PRESENT, 2, SeafoamIslands_B4F_EventScript_CurrentBlocked + getplayerxy VAR_0x8008, VAR_0x8009 + call_if_lt VAR_0x8008, 9, SeafoamIslands_B4F_EventScript_RideCurrentFar + call_if_ge VAR_0x8008, 9, SeafoamIslands_B4F_EventScript_RideCurrentClose + special SeafoamIslandsB4F_CurrentDumpsPlayerOnLand + setvar VAR_TEMP_1, 0 + releaseall + end + +SeafoamIslands_B4F_EventScript_AddBoulderPresent:: + addvar NUM_BOULDERS_PRESENT, 1 + return + +SeafoamIslands_B4F_EventScript_RideCurrentFar:: + applymovement LOCALID_PLAYER, SeafoamIslands_B4F_Movement_RideCurrentFar + waitmovement 0 + return + +SeafoamIslands_B4F_EventScript_RideCurrentClose:: + applymovement LOCALID_PLAYER, SeafoamIslands_B4F_Movement_RideCurrentClose + waitmovement 0 + return + +SeafoamIslands_B4F_EventScript_CurrentBlocked:: + setvar VAR_TEMP_1, 0 + releaseall + end + +SeafoamIslands_B4F_Movement_RideCurrentFar:: + walk_up + walk_up + walk_up + walk_right + walk_right + walk_right + walk_right + walk_up + step_end + +SeafoamIslands_B4F_Movement_RideCurrentClose:: + walk_up + walk_up + walk_up + walk_right + walk_right + walk_right + walk_up + step_end + +@ Triggers blocking re-entry to B3F +SeafoamIslands_B4F_EventScript_UpwardCurrent:: + lockall + applymovement LOCALID_PLAYER, SeafoamIslands_B4F_Movement_WalkUp + waitmovement 0 + releaseall + end + +SeafoamIslands_B4F_Movement_WalkUp:: + walk_up + step_end + +SeafoamIslands_B4F_EventScript_Articuno:: + lock + faceplayer + setwildbattle SPECIES_ARTICUNO, 50 + waitse + playmoncry SPECIES_ARTICUNO, CRY_MODE_ENCOUNTER + message Text_Gyaoo + waitmessage + waitmoncry + delay 10 + playbgm MUS_RG_ENCOUNTER_GYM_LEADER, 0 + waitbuttonpress + setflag FLAG_SYS_CTRL_OBJ_DELETE + special BattleSetup_StartLegendaryBattle + waitstate + clearflag FLAG_SYS_CTRL_OBJ_DELETE + specialvar VAR_RESULT, GetBattleOutcome + goto_if_eq VAR_RESULT, B_OUTCOME_WON, SeafoamIslands_B4F_EventScript_DefeatedArticuno + goto_if_eq VAR_RESULT, B_OUTCOME_RAN, SeafoamIslands_B4F_EventScript_RanFromArticuno + goto_if_eq VAR_RESULT, B_OUTCOME_PLAYER_TELEPORTED, SeafoamIslands_B4F_EventScript_RanFromArticuno + setflag FLAG_FOUGHT_ARTICUNO + release + end + +SeafoamIslands_B4F_EventScript_DefeatedArticuno:: + setflag FLAG_FOUGHT_ARTICUNO + goto EventScript_RemoveStaticMon + end + +SeafoamIslands_B4F_EventScript_RanFromArticuno:: + setvar VAR_0x8004, SPECIES_ARTICUNO + goto EventScript_MonFlewAway + end + +SeafoamIslands_B4F_EventScript_BoulderHintSign:: + msgbox SeafoamIslands_B4F_Text_BouldersMightChangeWaterFlow, MSGBOX_SIGN + end + +SeafoamIslands_B4F_EventScript_FastCurrentSign:: + msgbox SeafoamIslands_B4F_Text_DangerFastCurrent, MSGBOX_SIGN + end + +Text_RockSlideTeach:: + .string "When you're up on a rocky mountain\n" + .string "like this, rockslides are a threat.\p" + .string "Can you imagine?\n" + .string "Boulders tumbling down on you?\p" + .string "That'd be, like, waaaaaaaaaaah!\n" + .string "Total terror!\p" + .string "You don't seem to be scared.\n" + .string "Want to try using ROCK SLIDE?$" + +Text_RockSlideDeclined:: + .string "Oh, so you are scared after all.$" + +Text_RockSlideWhichMon:: + .string "Which POKéMON should I teach\n" + .string "ROCK SLIDE?$" + +Text_RockSlideTaught:: + .string "It might be scary to use it in this\n" + .string "tunnel…$" + +SeafoamIslands_B4F_Text_BouldersMightChangeWaterFlow:: + .string "Hint: Boulders might change the\n" + .string "flow of water.$" + +SeafoamIslands_B4F_Text_DangerFastCurrent:: + .string "DANGER\n" + .string "Fast current!$" + diff --git a/data/maps/SevenIsland/scripts.inc b/data/maps/SevenIsland/scripts.inc new file mode 100644 index 000000000000..f94e914662b1 --- /dev/null +++ b/data/maps/SevenIsland/scripts.inc @@ -0,0 +1,58 @@ +SevenIsland_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_OnTransition + .byte 0 + +SevenIsland_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SEVEN_ISLAND + end + +SevenIsland_EventScript_IslandSign:: + msgbox SevenIsland_Text_IslandSign, MSGBOX_SIGN + end + +SevenIsland_EventScript_OldWoman:: + msgbox SevenIsland_Text_IslandsMadeInSevenDays, MSGBOX_NPC + end + +SevenIsland_EventScript_Scientist:: + msgbox SevenIsland_Text_IslandVirtuallyUntouched, MSGBOX_NPC + end + +Text_SwordsDanceTeach:: + .string "Not many people come out here.\p" + .string "If I train here, I'm convinced that\n" + .string "I'll get stronger and stronger.\p" + .string "Yep, stronger and stronger…\p" + .string "How would you like to learn a move\n" + .string "like that? It's SWORDS DANCE.$" + +Text_SwordsDanceDeclined:: + .string "Well, that's fine, too.$" + +Text_SwordsDanceWhichMon:: + .string "All right, pick which POKéMON\n" + .string "I should teach it to.$" + +Text_SwordsDanceTaught:: + .string "If only we could keep getting\n" + .string "stronger and stronger, eh?$" + +SevenIsland_Text_IslandSign:: + .string "SEVEN ISLAND\n" + .string "Quest Island of Infinity$" + +SevenIsland_Text_IslandsMadeInSevenDays:: + .string "These islands are called the SEVII\n" + .string "ISLANDS because there are seven.\p" + .string "…Or at least that's what the young\n" + .string "people believe.\p" + .string "The truth is, these islands are so\n" + .string "named because they are said to\l" + .string "have been made in seven days.$" + +SevenIsland_Text_IslandVirtuallyUntouched:: + .string "This island has been left virtually\n" + .string "untouched in its natural state.\p" + .string "It could be a little difficult to\n" + .string "hike around because of that.$" + diff --git a/data/maps/SevenIsland_Harbor/scripts.inc b/data/maps/SevenIsland_Harbor/scripts.inc new file mode 100644 index 000000000000..131826c80986 --- /dev/null +++ b/data/maps/SevenIsland_Harbor/scripts.inc @@ -0,0 +1,11 @@ +SevenIsland_Harbor_MapScripts:: + .byte 0 + +SevenIsland_Harbor_EventScript_Sailor:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_SEVEN_ISLAND + goto EventScript_ChooseDestFromIsland + end diff --git a/data/maps/SevenIsland_House_Room1/scripts.inc b/data/maps/SevenIsland_House_Room1/scripts.inc new file mode 100644 index 000000000000..65f71d6b0480 --- /dev/null +++ b/data/maps/SevenIsland_House_Room1/scripts.inc @@ -0,0 +1,267 @@ +.equ TRAINER_VISITING, VAR_TEMP_1 + +SevenIsland_House_Room1_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_House_Room1_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_House_Room1_OnFrame + .byte 0 + +SevenIsland_House_Room1_OnTransition:: + special ValidateEReaderTrainer + call_if_eq VAR_RESULT, 0, SevenIsland_House_Room1_EventScript_SetTrainerVisitingLayout + call_if_ne VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 0, SevenIsland_House_Room1_EventScript_MoveOldWomanToDoor + end + +SevenIsland_House_Room1_EventScript_SetTrainerVisitingLayout:: + setvar TRAINER_VISITING, TRUE + setobjectxyperm LOCALID_SEVEN_ISLAND_HOUSE_OLD_WOMAN, 4, 2 + setobjectmovementtype LOCALID_SEVEN_ISLAND_HOUSE_OLD_WOMAN, MOVEMENT_TYPE_FACE_DOWN + setmaplayoutindex LAYOUT_SEVEN_ISLAND_HOUSE_ROOM1_DOOR_OPEN + return + +SevenIsland_House_Room1_EventScript_MoveOldWomanToDoor:: + setobjectxyperm LOCALID_SEVEN_ISLAND_HOUSE_OLD_WOMAN, 3, 2 + setobjectmovementtype LOCALID_SEVEN_ISLAND_HOUSE_OLD_WOMAN, MOVEMENT_TYPE_FACE_RIGHT + return + +SevenIsland_House_Room1_OnFrame:: + map_script_2 VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 1, SevenIsland_House_Room1_EventScript_OldWomanCommentOnBattle + map_script_2 VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 2, SevenIsland_House_Room1_EventScript_OldWomanCommentOnBattle + map_script_2 VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 3, SevenIsland_House_Room1_EventScript_OldWomanCommentOnBattle + .2byte 0 + +SevenIsland_House_Room1_EventScript_OldWomanCommentOnBattle:: + lockall + textcolor NPC_TEXT_COLOR_FEMALE + applymovement LOCALID_PLAYER, SevenIsland_House_Room1_Movement_PlayerReEnterRoom + waitmovement 0 + applymovement LOCALID_SEVEN_ISLAND_HOUSE_OLD_WOMAN, SevenIsland_House_Room1_Movement_OldWomanWalkBehindPlayer + waitmovement 0 + copyobjectxytoperm LOCALID_SEVEN_ISLAND_HOUSE_OLD_WOMAN + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + call_if_eq VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 1, SevenIsland_House_Room1_EventScript_BattleWonComment + call_if_eq VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 2, SevenIsland_House_Room1_EventScript_BattleLostComment + call_if_eq VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 3, SevenIsland_House_Room1_EventScript_BattleTiedComment + special LoadPlayerParty + setvar VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 0 + releaseall + end + +SevenIsland_House_Room1_EventScript_BattleWonComment:: + msgbox SevenIsland_House_Room1_Text_AstoundingBattle + return + +SevenIsland_House_Room1_EventScript_BattleLostComment:: + msgbox SevenIsland_House_Room1_Text_FeelYourDisappointment + return + +SevenIsland_House_Room1_EventScript_BattleTiedComment:: + msgbox SevenIsland_House_Room1_Text_DrawWasIt + return + +SevenIsland_House_Room1_Movement_PlayerReEnterRoom:: + walk_down + step_end + +SevenIsland_House_Room1_Movement_OldWomanWalkBehindPlayer:: + walk_right + walk_in_place_faster_down + step_end + +SevenIsland_House_Room1_EventScript_OldWoman:: + lock + faceplayer + special ValidateEReaderTrainer + call_if_eq VAR_RESULT, 1, SevenIsland_House_Room1_EventScript_InvalidVisitingTrainer + goto_if_eq TRAINER_VISITING, TRUE, SevenIsland_House_Room1_EventScript_TrainerVisiting + msgbox SevenIsland_House_Room1_Text_OnlyEnjoymentWatchingBattles + release + end + +SevenIsland_House_Room1_EventScript_InvalidVisitingTrainer:: + msgbox SevenIsland_House_Room1_Text_OnlyEnjoymentWatchingBattles + release + end + +SevenIsland_House_Room1_EventScript_TrainerVisiting:: + special SavePlayerParty + special BufferEReaderTrainerName + msgbox SevenIsland_House_Room1_Text_ChallengeVisitingTrainer, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SevenIsland_House_Room1_EventScript_DeclineBattle + call SevenIsland_House_Room1_EventScript_ChooseParty + goto_if_eq VAR_RESULT, 0, SevenIsland_House_Room1_EventScript_DeclineBattle + msgbox SevenIsland_House_Room1_Text_SaveProgressBeforeBattle, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SevenIsland_House_Room1_EventScript_DeclineBattle + special LoadPlayerParty + call CableClubSaveGame + goto_if_eq VAR_RESULT, 0, SevenIsland_House_Room1_EventScript_DeclineBattle + special SavePlayerParty + special ReducePlayerPartyToSelectedMons + msgbox SevenIsland_House_Room1_Text_DontHoldAnythingBack + closemessage + call_if_eq VAR_FACING, DIR_NORTH, SevenIsland_House_Room1_EventScript_EnterBattleRoomNorth + call_if_eq VAR_FACING, DIR_EAST, SevenIsland_House_Room1_EventScript_EnterBattleRoomEast + call_if_eq VAR_FACING, DIR_WEST, SevenIsland_House_Room1_EventScript_EnterBattleRoomWest + warp MAP_SEVEN_ISLAND_HOUSE_ROOM2, 3, 1 + waitstate + release + end + +SevenIsland_House_Room1_EventScript_DeclineBattle:: + special LoadPlayerParty + msgbox SevenIsland_House_Room1_Text_OhYouWontBattle + release + end + +SevenIsland_House_Room1_EventScript_ChooseParty:: + msgbox SevenIsland_House_Room1_Text_LimitThreeMonsPerSide + fadescreen FADE_TO_BLACK + special ChooseHalfPartyForBattle + waitstate + return + +SevenIsland_House_Room1_EventScript_EnterBattleRoomNorth:: + applymovement VAR_LAST_TALKED, SevenIsland_House_Room1_Movement_OldWomanMoveAsideLeft + applymovement LOCALID_PLAYER, SevenIsland_House_Room1_Movement_PlayerEnterBattleRoomNorth + waitmovement 0 + return + +SevenIsland_House_Room1_EventScript_EnterBattleRoomEast:: + applymovement VAR_LAST_TALKED, SevenIsland_House_Room1_Movement_OldWomanMoveAsideRight + applymovement LOCALID_PLAYER, SevenIsland_House_Room1_Movement_PlayerEnterBattleRoomEast + waitmovement 0 + return + +SevenIsland_House_Room1_EventScript_EnterBattleRoomWest:: + applymovement VAR_LAST_TALKED, SevenIsland_House_Room1_Movement_OldWomanMoveAsideLeft + applymovement LOCALID_PLAYER, SevenIsland_House_Room1_Movement_PlayerEnterBattleRoomWest + waitmovement 0 + return + +SevenIsland_House_Room1_Movement_PlayerEnterBattleRoomNorth:: + delay_16 + walk_up + walk_up + step_end + +SevenIsland_House_Room1_Movement_PlayerEnterBattleRoomEast:: + delay_16 + walk_right + walk_up + step_end + +SevenIsland_House_Room1_Movement_PlayerEnterBattleRoomWest:: + delay_16 + walk_left + walk_up + step_end + +SevenIsland_House_Room1_Movement_OldWomanMoveAsideLeft:: + walk_left + walk_in_place_faster_right + step_end + +SevenIsland_House_Room1_Movement_OldWomanMoveAsideRight:: + walk_right + walk_in_place_faster_left + step_end + +SevenIsland_House_Room1_EventScript_Box:: + msgbox SevenIsland_House_Room1_Text_SlightBreezeAroundBox, MSGBOX_SIGN + end + +SevenIsland_House_Room1_Text_OnlyEnjoymentWatchingBattles:: + .string "I may not look like much now,\n" + .string "but when I was younger…\p" + .string "I flew everywhere, challenging\n" + .string "TRAINERS wherever I found them.\p" + .string "Now, my only source of enjoyment\n" + .string "is reminiscing about the past while\l" + .string "watching battles.$" + +SevenIsland_House_Room1_Text_SlightBreezeAroundBox:: + .string "There is a slight breeze blowing\n" + .string "around the box.$" + +SevenIsland_House_Room1_Text_ChallengeVisitingTrainer:: + .string "Ah!\n" + .string "Welcome, my friend!\p" + .string "Let me tell you something. There's\n" + .string "a hidden room in the basement.\p" + .string "A TRAINER named {STR_VAR_1} is\n" + .string "waiting there now.\p" + .string "Tell me, you did come to challenge\n" + .string "{STR_VAR_1}, am I right?$" + +SevenIsland_House_Room1_Text_OhYouWontBattle:: + .string "Oh…\n" + .string "You won't battle…\p" + .string "I see, I see.\n" + .string "… …\p" + .string "Well, perhaps if you change your\n" + .string "mind, do come back.$" + +SevenIsland_House_Room1_Text_LimitThreeMonsPerSide:: + .string "Ah!\n" + .string "You will battle for me?\p" + .string "It was worth my time moving the\n" + .string "box aside, then.\p" + .string "… …\n" + .string "But there is one slight problem.\p" + .string "This hidden room is not built very\n" + .string "sturdy.\p" + .string "Can I get you to limit it to\n" + .string "battles of three POKéMON per side?$" + +SevenIsland_House_Room1_Text_SaveProgressBeforeBattle:: + .string "Fine! Before your battle, would\n" + .string "you like to save your game?$" + +SevenIsland_House_Room1_Text_DontHoldAnythingBack:: + .string "All right.\n" + .string "Don't hold anything back!$" + +@ Unused +SevenIsland_House_Room1_Text_StrVar1_1:: + .string "{STR_VAR_1}$" + +SevenIsland_House_Room2_Text_MatchEndedUpDraw:: + .string "The match ended up a draw.$" + +SevenIsland_House_Room1_Text_DrawWasIt:: + .string "A draw, was it?\p" + .string "However, let me say that it was\n" + .string "a worthy spectacle.\p" + .string "I'd say it was a wonderful battle\n" + .string "with a real sense of depth!$" + +@ Unused +SevenIsland_House_Room1_Text_StrVar1_2:: + .string "{STR_VAR_1}$" + +SevenIsland_House_Room1_Text_AstoundingBattle:: + .string "Bravo!\p" + .string "Bravo, indeed!\n" + .string "What an astounding battle!\p" + .string "It was so astounding, why, it keeps\n" + .string "filling my eyes with tears!\p" + .string "The thrust and parry of expertly\n" + .string "used techniques!\p" + .string "The clash of power upon power!\p" + .string "Yes!\n" + .string "It was sheer magnificence!$" + +@ Unused +SevenIsland_House_Room1_Text_StrVar1_3:: + .string "{STR_VAR_1}$" + +SevenIsland_House_Room1_Text_FeelYourDisappointment:: + .string "Too bad!\n" + .string "I feel your disappointment.\p" + .string "However, that disappointment is\n" + .string "what will make you better.\p" + .string "Use it, learn from it, and make it\n" + .string "motivate you to seek greatness.\p" + .string "Forget not this disappointment\n" + .string "and redouble your training!$" + diff --git a/data/maps/SevenIsland_House_Room2/scripts.inc b/data/maps/SevenIsland_House_Room2/scripts.inc new file mode 100644 index 000000000000..eab0a4a98b7f --- /dev/null +++ b/data/maps/SevenIsland_House_Room2/scripts.inc @@ -0,0 +1,74 @@ +SevenIsland_House_Room2_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_House_Room2_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, SevenIsland_House_Room2_OnFrame + .byte 0 + +SevenIsland_House_Room2_OnTransition:: + special SetEReaderTrainerGfxId + end + +SevenIsland_House_Room2_OnFrame:: + map_script_2 VAR_TEMP_1, 0, SevenIsland_House_Room2_EventScript_BattleVisitingTrainer + .2byte 0 + +SevenIsland_House_Room2_EventScript_BattleVisitingTrainer:: + lockall + applymovement LOCALID_PLAYER, SevenIsland_House_Room2_Movement_PlayerEnterRoom + waitmovement 0 + special CopyEReaderTrainerGreeting + msgbox gStringVar4 + closemessage + setvar VAR_0x8004, 2 + setvar VAR_0x8005, 0 + special DoSpecialTrainerBattle + waitstate + call_if_eq VAR_RESULT, 3, SevenIsland_House_Room2_EventScript_BattleTie + call_if_eq VAR_RESULT, 1, SevenIsland_House_Room2_EventScript_BattleWon + call_if_eq VAR_RESULT, 2, SevenIsland_House_Room2_EventScript_BattleLost + closemessage + special HealPlayerParty + applymovement LOCALID_PLAYER, SevenIsland_House_Room2_Movement_PlayerExitRoom + waitmovement 0 + special LoadPlayerParty + setvar VAR_TEMP_1, 1 + warp MAP_SEVEN_ISLAND_HOUSE_ROOM1, 4, 1 + waitstate + releaseall + end + +SevenIsland_House_Room2_EventScript_BattleTie:: + setvar VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 3 + msgbox SevenIsland_House_Room2_Text_MatchEndedUpDraw + return + +SevenIsland_House_Room2_EventScript_BattleWon:: + setvar VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 1 + special ShowFieldMessageStringVar4 + waitmessage + waitbuttonpress + return + +SevenIsland_House_Room2_EventScript_BattleLost:: + setvar VAR_MAP_SCENE_SEVEN_ISLAND_HOUSE_ROOM1, 2 + special ShowFieldMessageStringVar4 + waitmessage + waitbuttonpress + return + +SevenIsland_House_Room2_Movement_PlayerEnterRoom:: + walk_down + walk_down + walk_down + walk_right + walk_right + step_end + +SevenIsland_House_Room2_Movement_PlayerExitRoom:: + walk_left + walk_left + walk_up + walk_up + walk_up + walk_up + delay_8 + step_end diff --git a/data/maps/SevenIsland_Mart/scripts.inc b/data/maps/SevenIsland_Mart/scripts.inc new file mode 100644 index 000000000000..d0c2039ea9c2 --- /dev/null +++ b/data/maps/SevenIsland_Mart/scripts.inc @@ -0,0 +1,57 @@ +SevenIsland_Mart_MapScripts:: + .byte 0 + +SevenIsland_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart SevenIsland_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +SevenIsland_Mart_Items:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_GREAT_BALL + .2byte ITEM_FULL_RESTORE + .2byte ITEM_MAX_POTION + .2byte ITEM_HYPER_POTION + .2byte ITEM_REVIVE + .2byte ITEM_FULL_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_MAX_REPEL + .2byte ITEM_NONE + release + end + +SevenIsland_Mart_EventScript_Lass:: + msgbox SevenIsland_Mart_Text_MonHavePersonalitiesOfTheirOwn, MSGBOX_NPC + end + +SevenIsland_Mart_EventScript_Hiker:: + msgbox SevenIsland_Mart_Text_PreparationsCompleteForRuins, MSGBOX_NPC + end + +SevenIsland_Mart_EventScript_Fisher:: + msgbox SevenIsland_Mart_Text_NeedToFishOnSevenIsland, MSGBOX_NPC + end + +SevenIsland_Mart_Text_MonHavePersonalitiesOfTheirOwn:: + .string "POKéMON have personalities of their\n" + .string "own, just like people.\p" + .string "My PIKACHU has a HASTY nature,\n" + .string "so it grew to be a speedy POKéMON.$" + +SevenIsland_Mart_Text_PreparationsCompleteForRuins:: + .string "Okay, preparations are complete\n" + .string "for me to explore the RUINS.$" + +SevenIsland_Mart_Text_NeedToFishOnSevenIsland:: + .string "I need to fish on SEVEN ISLAND.\p" + .string "That will complete my fishing tour\n" + .string "of the SEVII ISLANDS.\p" + .string "I'd better stock up on some\n" + .string "POKé BALLS first, though.$" + diff --git a/data/maps/SevenIsland_PokemonCenter_1F/scripts.inc b/data/maps/SevenIsland_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..e40311e96b38 --- /dev/null +++ b/data/maps/SevenIsland_PokemonCenter_1F/scripts.inc @@ -0,0 +1,47 @@ +SevenIsland_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +SevenIsland_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_SEVEN_ISLAND + end + +SevenIsland_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +SevenIsland_PokemonCenter_1F_EventScript_OldMan:: + msgbox SevenIsland_PokemonCenter_1F_Text_EventsDependingOnConnections, MSGBOX_NPC + end + +SevenIsland_PokemonCenter_1F_EventScript_Sailor:: + msgbox SevenIsland_PokemonCenter_1F_Text_DidYouRideSeagallopHere, MSGBOX_NPC + end + +SevenIsland_PokemonCenter_1F_EventScript_Beauty:: + msgbox SevenIsland_PokemonCenter_1F_Text_CheckOutTrainerTower, MSGBOX_NPC + end + +SevenIsland_PokemonCenter_1F_Text_EventsDependingOnConnections:: + .string "On this island, different events\n" + .string "occur depending on connections.\p" + .string "What are those connections?\p" + .string "They are for you to discover on\n" + .string "your own.$" + +SevenIsland_PokemonCenter_1F_Text_DidYouRideSeagallopHere:: + .string "Did you ride a SEAGALLOP ferry\n" + .string "to get here?\p" + .string "There are at least ten of those\n" + .string "high-speed ships.\p" + .string "I don't know where they all go,\n" + .string "though.$" + +SevenIsland_PokemonCenter_1F_Text_CheckOutTrainerTower:: + .string "If you're confident, you should\n" + .string "check out TRAINER TOWER.$" + diff --git a/data/maps/SevenIsland_PokemonCenter_2F/scripts.inc b/data/maps/SevenIsland_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..2dd361f26763 --- /dev/null +++ b/data/maps/SevenIsland_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +SevenIsland_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +SevenIsland_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +SevenIsland_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +SevenIsland_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/SevenIsland_SevaultCanyon/scripts.inc b/data/maps/SevenIsland_SevaultCanyon/scripts.inc new file mode 100644 index 000000000000..328d9cf30707 --- /dev/null +++ b/data/maps/SevenIsland_SevaultCanyon/scripts.inc @@ -0,0 +1,137 @@ +SevenIsland_SevaultCanyon_MapScripts:: + .byte 0 + +SevenIsland_SevaultCanyon_EventScript_RouteSign:: + msgbox SevenIsland_SevaultCanyon_Text_RouteSign, MSGBOX_SIGN + end + +SevenIsland_SevaultCanyon_Text_CyndyIntro:: + .string "My conditioning's in top form!$" + +SevenIsland_SevaultCanyon_Text_CyndyDefeat:: + .string "Huh?\n" + .string "Something's not right…$" + +SevenIsland_SevaultCanyon_Text_CyndyPostBattle:: + .string "The way I am now, I may have to\n" + .string "hold off on TRAINER TOWER…$" + +SevenIsland_SevaultCanyon_Text_EvanIntro:: + .string "It doesn't matter if you happen to\n" + .string "have the strongest POKéMON…\p" + .string "It doesn't mean a thing if you don't\n" + .string "know how to use them properly!$" + +SevenIsland_SevaultCanyon_Text_EvanDefeat:: + .string "You're a master at this.$" + +SevenIsland_SevaultCanyon_Text_EvanPostBattle:: + .string "You see them every so often,\n" + .string "TRAINERS with awesome POKéMON\l" + .string "who have no idea what to do.\p" + .string "Before training POKéMON, TRAINERS\n" + .string "themselves need to grow up.$" + +SevenIsland_SevaultCanyon_Text_JacksonIntro:: + .string "I work to protect the environment.\n" + .string "In turn, nature protects me!$" + +SevenIsland_SevaultCanyon_Text_JacksonDefeat:: + .string "Whoa! You're tough!\n" + .string "How about protecting me?$" + +SevenIsland_SevaultCanyon_Text_JacksonPostBattle:: + .string "From far out among the stars, our\n" + .string "planet is just a drop of water.\p" + .string "But we want to protect that drop\n" + .string "of water for everyone.$" + +SevenIsland_SevaultCanyon_Text_KatelynIntro:: + .string "Those shoes you have are pretty\n" + .string "snazzy.$" + +SevenIsland_SevaultCanyon_Text_KatelynDefeat:: + .string "You're hot stuff in spite of your\n" + .string "cute looks.$" + +SevenIsland_SevaultCanyon_Text_KatelynPostBattle:: + .string "Your mom bought those snazzy\n" + .string "RUNNING SHOES for you?\p" + .string "She must adore you.$" + +SevenIsland_SevaultCanyon_Text_LeroyIntro:: + .string "You look strong.\n" + .string "Let me battle you, please!$" + +SevenIsland_SevaultCanyon_Text_LeroyDefeat:: + .string "I knew it!\n" + .string "You're as tough as I thought!$" + +SevenIsland_SevaultCanyon_Text_LeroyPostBattle:: + .string "The way you battle has given me\n" + .string "a lot of useful data.\p" + .string "Thanks so much!$" + +SevenIsland_SevaultCanyon_Text_MichelleIntro:: + .string "I was given the best possible\n" + .string "education to become this strong.\p" + .string "I don't want to lose to anyone!$" + +SevenIsland_SevaultCanyon_Text_MichelleDefeat:: + .string "Thank you. I feel like I've been\n" + .string "set free by losing to you.$" + +SevenIsland_SevaultCanyon_Text_MichellePostBattle:: + .string "For some reason, I get furious\n" + .string "over the slightest thing.\p" + .string "I'll calm myself by breathing\n" + .string "deeply.$" + +SevenIsland_SevaultCanyon_Text_LexIntro:: + .string "LEX: My darling NYA, together\n" + .string "we could win!$" + +SevenIsland_SevaultCanyon_Text_LexDefeat:: + .string "LEX: I seem to have been too\n" + .string "careless…$" + +SevenIsland_SevaultCanyon_Text_LexPostBattle:: + .string "LEX: I think it was a good\n" + .string "experience for NYA.\p" + .string "You have my gratitude.$" + +SevenIsland_SevaultCanyon_Text_LexNotEnoughMons:: + .string "LEX: May I ask you to battle the\n" + .string "both of us at the same time?$" + +SevenIsland_SevaultCanyon_Text_NyaIntro:: + .string "NYA: I'll do my best so I won't\n" + .string "drag down my mentor, LEX!$" + +SevenIsland_SevaultCanyon_Text_NyaDefeat:: + .string "NYA: Oh, no…\n" + .string "I'm so sorry, I…$" + +SevenIsland_SevaultCanyon_Text_NyaPostBattle:: + .string "NYA: I think I'm going to need\n" + .string "much more seasoning and tutoring\l" + .string "under LEX…\p" + .string "…So, LEX, please, may I stay with\n" + .string "you like this?$" + +SevenIsland_SevaultCanyon_Text_NyaNotEnoughMons:: + .string "NYA: I'm sorry, but may we battle\n" + .string "in two-on-two style?$" + +SevenIsland_SevaultCanyon_Text_RouteSign:: + .string "SEVAULT CANYON\n" + .string "TANOBY RUINS AHEAD$" + +SevenIsland_SevaultCanyon_Text_BrunoTrainedWithBrawly:: + .string "Training by oneself is certainly\n" + .string "not a bad thing.\p" + .string "But it's also not bad to aim for\n" + .string "the top with a partner.\p" + .string "Even BRUNO…\n" + .string "He trained with a fellow by the\l" + .string "name of BRAWLY before.$" diff --git a/data/maps/SevenIsland_SevaultCanyon_Entrance/scripts.inc b/data/maps/SevenIsland_SevaultCanyon_Entrance/scripts.inc new file mode 100644 index 000000000000..85cd59332c4b --- /dev/null +++ b/data/maps/SevenIsland_SevaultCanyon_Entrance/scripts.inc @@ -0,0 +1,100 @@ +SevenIsland_SevaultCanyon_Entrance_MapScripts:: + .byte 0 + +SevenIsland_SevaultCanyon_Entrance_EventScript_RouteSign:: + msgbox SevenIsland_SevaultCanyon_Entrance_Text_RouteSign, MSGBOX_SIGN + end + +SevenIsland_SevaultCanyon_Entrance_Text_MiahIntro:: + .string "Kyahaha!\n" + .string "I'll flick you away effortlessly!$" + +SevenIsland_SevaultCanyon_Entrance_Text_MiahDefeat:: + .string "Tch!\n" + .string "Too strong for me!$" + +SevenIsland_SevaultCanyon_Entrance_Text_MiahPostBattle:: + .string "What's that?\n" + .string "I don't act the way I look?\p" + .string "Heh, that's a part of my strategy!$" + +SevenIsland_SevaultCanyon_Entrance_Text_MasonIntro:: + .string "Howdy!\n" + .string "Are you a member of my fan club?$" + +SevenIsland_SevaultCanyon_Entrance_Text_MasonDefeat:: + .string "Oh, so you're not a fan…\p" + .string "Well, I can change that.\n" + .string "Let me sing for you!$" + +SevenIsland_SevaultCanyon_Entrance_Text_MasonPostBattle:: + .string "Lalalah…\n" + .string "My POKéMON, I send them out,\l" + .string "all the girls scream and shout!$" + +SevenIsland_SevaultCanyon_Entrance_Text_NicolasIntro:: + .string "This island is too spread out…\n" + .string "It's not easy patrolling the place.$" + +SevenIsland_SevaultCanyon_Entrance_Text_NicolasDefeat:: + .string "Uh-huh…$" + +SevenIsland_SevaultCanyon_Entrance_Text_NicolasPostBattle:: + .string "TRAINERS like you from cities,\n" + .string "they sure are tough.\p" + .string "You'll be headed for the TOWER,\n" + .string "won't you?$" + +SevenIsland_SevaultCanyon_Entrance_Text_MadelineIntro:: + .string "I punish people who abuse\n" + .string "POKéMON!$" + +SevenIsland_SevaultCanyon_Entrance_Text_MadelineDefeat:: + .string "You don't seem to be a problem\n" + .string "TRAINER.$" + +SevenIsland_SevaultCanyon_Entrance_Text_MadelinePostBattle:: + .string "If you treat your POKéMON with\n" + .string "kindness, they'll understand.$" + +SevenIsland_SevaultCanyon_Entrance_Text_EveIntro:: + .string "EVE: I'll team up with JON and\n" + .string "battle together.$" + +SevenIsland_SevaultCanyon_Entrance_Text_EveDefeat:: + .string "EVE: Me and JON, we lost.\n" + .string "Ehehe.$" + +SevenIsland_SevaultCanyon_Entrance_Text_EvePostBattle:: + .string "EVE: I'm going to work harder with\n" + .string "JON.$" + +SevenIsland_SevaultCanyon_Entrance_Text_EveNotEnoughMons:: + .string "EVE: I want to team up with JON\n" + .string "when I battle you.\p" + .string "Come back with two POKéMON, okay?$" + +SevenIsland_SevaultCanyon_Entrance_Text_JonIntro:: + .string "JON: When I'm with EVE, it feels\n" + .string "like we could never lose.$" + +SevenIsland_SevaultCanyon_Entrance_Text_JonDefeat:: + .string "JON: When I'm with EVE,\n" + .string "it doesn't feel like I've lost!$" + +SevenIsland_SevaultCanyon_Entrance_Text_JonPostBattle:: + .string "JON: When I'm with EVE, I feel\n" + .string "giddy whether I win or lose.\p" + .string "It's magical!$" + +SevenIsland_SevaultCanyon_Entrance_Text_JonNotEnoughMons:: + .string "JON: If it's with EVE, I'll be\n" + .string "happy to battle with you.\p" + .string "So, I'd like to make it a\n" + .string "two-on-two battle, if I may.$" + +SevenIsland_SevaultCanyon_Entrance_Text_RouteSign:: + .string "SEVAULT CANYON ENTRANCE\p" + .string "TRAINERS are asked to refrain from\n" + .string "damaging plants in the CANYON.$" + diff --git a/data/maps/SevenIsland_SevaultCanyon_House/scripts.inc b/data/maps/SevenIsland_SevaultCanyon_House/scripts.inc new file mode 100644 index 000000000000..eba81f075b92 --- /dev/null +++ b/data/maps/SevenIsland_SevaultCanyon_House/scripts.inc @@ -0,0 +1,104 @@ +.set DID_CHANSEY_DANCE, FLAG_TEMP_2 + +SevenIsland_SevaultCanyon_House_MapScripts:: + .byte 0 + +SevenIsland_SevaultCanyon_House_EventScript_ChanseyDanceMan:: + lock + goto_if_set DID_CHANSEY_DANCE, SevenIsland_SevaultCanyon_House_EventScript_AlreadyDanced + playbgm MUS_SCHOOL, 0 + applymovement LOCALID_CHANSEY_DANCE_MAN, SevenIsland_SevaultCanyon_House_Movement_ChanseyDance + waitmovement 0 + fadedefaultbgm + delay 30 + applymovement LOCALID_CHANSEY_DANCE_MAN, Common_Movement_FacePlayer + waitmovement 0 + msgbox SevenIsland_SevaultCanyon_House_Text_ChanseyDanceJoinIn + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox SevenIsland_SevaultCanyon_House_Text_WouldYouLikeToDance, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SevenIsland_SevaultCanyon_House_EventScript_DeclineDance + msgbox SevenIsland_SevaultCanyon_House_Text_DancedChanseyDance + closemessage + call EventScript_RestorePrevTextColor + call_if_ne VAR_FACING, DIR_SOUTH, SevenIsland_SevaultCanyon_House_EventScript_PlayerFaceDown + delay 30 + playbgm MUS_SCHOOL, 0 + applymovement LOCALID_PLAYER, SevenIsland_SevaultCanyon_House_Movement_ChanseyDance + waitmovement 0 + fadedefaultbgm + delay 30 + call Common_EventScript_OutOfCenterPartyHeal + msgbox SevenIsland_SevaultCanyon_House_Text_YoureAllChipperNow + setflag DID_CHANSEY_DANCE + release + end + +SevenIsland_SevaultCanyon_House_EventScript_PlayerFaceDown:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +SevenIsland_SevaultCanyon_House_EventScript_AlreadyDanced:: + applymovement LOCALID_CHANSEY_DANCE_MAN, Common_Movement_FacePlayer + waitmovement 0 + msgbox SevenIsland_SevaultCanyon_House_Text_ChanseyDanceJoinIn + release + end + +SevenIsland_SevaultCanyon_House_EventScript_DeclineDance:: + textcolor NPC_TEXT_COLOR_MALE + msgbox SevenIsland_SevaultCanyon_House_Text_ComeOnDance + release + end + +SevenIsland_SevaultCanyon_House_Movement_ChanseyDance:: + walk_in_place_down + delay_16 + walk_in_place_down + delay_16 + walk_in_place_down + delay_16 + walk_in_place_down + delay_16 + walk_in_place_faster_right + delay_4 + walk_in_place_faster_up + delay_4 + walk_in_place_faster_left + delay_4 + walk_in_place_faster_down + delay_4 + step_end + +SevenIsland_SevaultCanyon_House_EventScript_Chansey:: + lock + faceplayer + waitse + playmoncry SPECIES_CHANSEY, CRY_MODE_NORMAL + msgbox SevenIsland_SevaultCanyon_House_Text_Chansey + waitmoncry + release + end + +SevenIsland_SevaultCanyon_House_Text_ChanseyDanceJoinIn:: + .string "Dance, dance!\n" + .string "CHANSEY Dance!\p" + .string "You join in, too!\n" + .string "Dance, dance!$" + +SevenIsland_SevaultCanyon_House_Text_WouldYouLikeToDance:: + .string "Would you like to dance?$" + +SevenIsland_SevaultCanyon_House_Text_ComeOnDance:: + .string "Come on, dance!$" + +SevenIsland_SevaultCanyon_House_Text_DancedChanseyDance:: + .string "{PLAYER} danced the CHANSEY Dance!$" + +SevenIsland_SevaultCanyon_House_Text_YoureAllChipperNow:: + .string "Ahahahaha!\p" + .string "There, you're all chipper now!\n" + .string "Lucky!$" + +SevenIsland_SevaultCanyon_House_Text_Chansey:: + .string "CHANSEY: Chansi! Chansi!$" diff --git a/data/maps/SevenIsland_SevaultCanyon_TanobyKey/scripts.inc b/data/maps/SevenIsland_SevaultCanyon_TanobyKey/scripts.inc new file mode 100644 index 000000000000..0676c0db1bc3 --- /dev/null +++ b/data/maps/SevenIsland_SevaultCanyon_TanobyKey/scripts.inc @@ -0,0 +1,135 @@ +.equ NUM_SWITCHES_PRESSED, VAR_TEMP_8 + +SevenIsland_SevaultCanyon_TanobyKey_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_SevaultCanyon_TanobyKey_OnTransition + .byte 0 + +SevenIsland_SevaultCanyon_TanobyKey_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SEVEN_ISLAND_SEVAULT_CANYON_TANOBY_KEY + call_if_set FLAG_SYS_UNLOCKED_TANOBY_RUINS, SevenIsland_SevaultCanyon_TanobyKey_EventScript_MoveBouldersToSolvedPos + setvar VAR_TEMP_1, 0 + setvar VAR_TEMP_2, 0 + setvar VAR_TEMP_3, 0 + setvar VAR_TEMP_4, 0 + setvar VAR_TEMP_5, 0 + setvar VAR_TEMP_6, 0 + setvar VAR_TEMP_7, 0 + setvar NUM_SWITCHES_PRESSED, 0 + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_MoveBouldersToSolvedPos:: + setobjectxyperm LOCALID_TANOBY_KEY_BOULDER1, 7, 2 + setobjectxyperm LOCALID_TANOBY_KEY_BOULDER2, 4, 4 + setobjectxyperm LOCALID_TANOBY_KEY_BOULDER3, 10, 4 + setobjectxyperm LOCALID_TANOBY_KEY_BOULDER4, 5, 6 + setobjectxyperm LOCALID_TANOBY_KEY_BOULDER5, 9, 6 + setobjectxyperm LOCALID_TANOBY_KEY_BOULDER6, 5, 8 + setobjectxyperm LOCALID_TANOBY_KEY_BOULDER7, 9, 8 + return + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_Switch1:: + lockall + goto_if_eq VAR_TEMP_1, 100, SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchAlreadyPressed + call SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchPressed + setvar VAR_TEMP_1, 100 + goto_if_eq NUM_SWITCHES_PRESSED, 7, SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolved + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_Switch2:: + lockall + goto_if_eq VAR_TEMP_2, 100, SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchAlreadyPressed + call SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchPressed + setvar VAR_TEMP_2, 100 + goto_if_eq NUM_SWITCHES_PRESSED, 7, SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolved + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_Switch3:: + lockall + goto_if_eq VAR_TEMP_3, 100, SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchAlreadyPressed + call SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchPressed + setvar VAR_TEMP_3, 100 + goto_if_eq NUM_SWITCHES_PRESSED, 7, SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolved + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_Switch4:: + lockall + goto_if_eq VAR_TEMP_4, 100, SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchAlreadyPressed + call SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchPressed + setvar VAR_TEMP_4, 100 + goto_if_eq NUM_SWITCHES_PRESSED, 7, SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolved + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_Switch5:: + lockall + goto_if_eq VAR_TEMP_5, 100, SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchAlreadyPressed + call SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchPressed + setvar VAR_TEMP_5, 100 + goto_if_eq NUM_SWITCHES_PRESSED, 7, SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolved + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_Switch6:: + lockall + goto_if_eq VAR_TEMP_6, 100, SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchAlreadyPressed + call SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchPressed + setvar VAR_TEMP_6, 100 + goto_if_eq NUM_SWITCHES_PRESSED, 7, SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolved + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_Switch7:: + lockall + goto_if_eq VAR_TEMP_7, 100, SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchAlreadyPressed + call SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchPressed + setvar VAR_TEMP_7, 100 + goto_if_eq NUM_SWITCHES_PRESSED, 7, SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolved + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchPressed:: + addvar NUM_SWITCHES_PRESSED, 1 + playse SE_TRUCK_MOVE + setvar VAR_0x8004, 1 + setvar VAR_0x8005, 1 + setvar VAR_0x8006, 8 + setvar VAR_0x8007, 3 + special ShakeScreen + delay 60 + return + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolvedShakeScreen:: + setvar VAR_0x8004, 2 + setvar VAR_0x8005, 2 + setvar VAR_0x8006, 10 + setvar VAR_0x8007, 3 + special ShakeScreen + delay 60 + setvar VAR_0x8004, 3 + setvar VAR_0x8005, 3 + setvar VAR_0x8006, 12 + setvar VAR_0x8007, 2 + special ShakeScreen + delay 60 + playse SE_LAVARIDGE_FALL_WARP + waitse + return + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_SwitchAlreadyPressed:: + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolved:: + call SevenIsland_SevaultCanyon_TanobyKey_EventScript_PuzzleSolvedShakeScreen + msgbox SevenIsland_SevaultCanyon_TanobyKey_Text_MysteriousRumbleFarAway + setflag FLAG_SYS_UNLOCKED_TANOBY_RUINS + releaseall + end + +SevenIsland_SevaultCanyon_TanobyKey_Text_MysteriousRumbleFarAway:: + .string "A mysterious rumble echoed\n" + .string "somewhere far away.$" + diff --git a/data/maps/SevenIsland_TanobyRuins/scripts.inc b/data/maps/SevenIsland_TanobyRuins/scripts.inc new file mode 100644 index 000000000000..93f02d0655c0 --- /dev/null +++ b/data/maps/SevenIsland_TanobyRuins/scripts.inc @@ -0,0 +1,55 @@ +SevenIsland_TanobyRuins_MapScripts:: + .byte 0 + +SevenIsland_TanobyRuins_Text_BrandonIntro:: + .string "Do you know anything about this\n" + .string "stone chamber?$" + +SevenIsland_TanobyRuins_Text_BrandonDefeat:: + .string "That was uncalled for.\n" + .string "You didn't have to be so rough.$" + +SevenIsland_TanobyRuins_Text_BrandonPostBattle:: + .string "The TANOBY RUINS date back at\n" + .string "least 1,500 years.\p" + .string "But it's a baffling mystery as to\n" + .string "why it was built in the first place.$" + +SevenIsland_TanobyRuins_Text_BenjaminIntro:: + .string "A mystic POKéMON is said to sleep\n" + .string "inside here.$" + +SevenIsland_TanobyRuins_Text_BenjaminDefeat:: + .string "I'm not much good in battle.$" + +SevenIsland_TanobyRuins_Text_BenjaminPostBattle:: + .string "I hear there are other ruins like\n" + .string "the one here.\p" + .string "Might they be the resting places\n" + .string "of other mystic POKéMON?$" + +SevenIsland_TanobyRuins_Text_EdnaIntro:: + .string "CLIFFORD is teaching me how to\n" + .string "paint.$" + +SevenIsland_TanobyRuins_Text_EdnaDefeat:: + .string "We might get in trouble for being\n" + .string "noisy here.$" + +SevenIsland_TanobyRuins_Text_EdnaPostBattle:: + .string "I said that I wanted to paint an\n" + .string "old building.\p" + .string "So CLIFFORD brought me here.$" + +SevenIsland_TanobyRuins_Text_CliffordIntro:: + .string "Today, in addition to our lesson,\n" + .string "we came to see the chamber.$" + +SevenIsland_TanobyRuins_Text_CliffordDefeat:: + .string "My, how extraordinary.$" + +SevenIsland_TanobyRuins_Text_CliffordPostBattle:: + .string "Ah, so you are studying POKéMON\n" + .string "on your own…\p" + .string "Yes, you certainly are quite the\n" + .string "extraordinary person, indeed.$" diff --git a/data/maps/SevenIsland_TanobyRuins_DilfordChamber/scripts.inc b/data/maps/SevenIsland_TanobyRuins_DilfordChamber/scripts.inc new file mode 100644 index 000000000000..aa0376bba63d --- /dev/null +++ b/data/maps/SevenIsland_TanobyRuins_DilfordChamber/scripts.inc @@ -0,0 +1,7 @@ +SevenIsland_TanobyRuins_DilfordChamber_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TanobyRuins_DilfordChamber_OnTransition + .byte 0 + +SevenIsland_TanobyRuins_DilfordChamber_OnTransition:: + call EventScript_TryDarkenRuins + end diff --git a/data/maps/SevenIsland_TanobyRuins_LiptooChamber/scripts.inc b/data/maps/SevenIsland_TanobyRuins_LiptooChamber/scripts.inc new file mode 100644 index 000000000000..1a872bbff864 --- /dev/null +++ b/data/maps/SevenIsland_TanobyRuins_LiptooChamber/scripts.inc @@ -0,0 +1,7 @@ +SevenIsland_TanobyRuins_LiptooChamber_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TanobyRuins_LiptooChamber_OnTransition + .byte 0 + +SevenIsland_TanobyRuins_LiptooChamber_OnTransition:: + call EventScript_TryDarkenRuins + end diff --git a/data/maps/SevenIsland_TanobyRuins_MoneanChamber/scripts.inc b/data/maps/SevenIsland_TanobyRuins_MoneanChamber/scripts.inc new file mode 100644 index 000000000000..635f4ab42d54 --- /dev/null +++ b/data/maps/SevenIsland_TanobyRuins_MoneanChamber/scripts.inc @@ -0,0 +1,8 @@ +SevenIsland_TanobyRuins_MoneanChamber_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TanobyRuins_MoneanChamber_OnTransition + .byte 0 + +SevenIsland_TanobyRuins_MoneanChamber_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SEVEN_ISLAND_TANOBY_RUINS_MONEAN_CHAMBER + call EventScript_TryDarkenRuins + end diff --git a/data/maps/SevenIsland_TanobyRuins_RixyChamber/scripts.inc b/data/maps/SevenIsland_TanobyRuins_RixyChamber/scripts.inc new file mode 100644 index 000000000000..03f1551b84a4 --- /dev/null +++ b/data/maps/SevenIsland_TanobyRuins_RixyChamber/scripts.inc @@ -0,0 +1,7 @@ +SevenIsland_TanobyRuins_RixyChamber_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TanobyRuins_RixyChamber_OnTransition + .byte 0 + +SevenIsland_TanobyRuins_RixyChamber_OnTransition:: + call EventScript_TryDarkenRuins + end diff --git a/data/maps/SevenIsland_TanobyRuins_ScufibChamber/scripts.inc b/data/maps/SevenIsland_TanobyRuins_ScufibChamber/scripts.inc new file mode 100644 index 000000000000..381477f946c4 --- /dev/null +++ b/data/maps/SevenIsland_TanobyRuins_ScufibChamber/scripts.inc @@ -0,0 +1,7 @@ +SevenIsland_TanobyRuins_ScufibChamber_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TanobyRuins_ScufibChamber_OnTransition + .byte 0 + +SevenIsland_TanobyRuins_ScufibChamber_OnTransition:: + call EventScript_TryDarkenRuins + end diff --git a/data/maps/SevenIsland_TanobyRuins_ViapoisChamber/scripts.inc b/data/maps/SevenIsland_TanobyRuins_ViapoisChamber/scripts.inc new file mode 100644 index 000000000000..2557804fd58e --- /dev/null +++ b/data/maps/SevenIsland_TanobyRuins_ViapoisChamber/scripts.inc @@ -0,0 +1,7 @@ +SevenIsland_TanobyRuins_ViapoisChamber_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TanobyRuins_ViapoisChamber_OnTransition + .byte 0 + +SevenIsland_TanobyRuins_ViapoisChamber_OnTransition:: + call EventScript_TryDarkenRuins + end diff --git a/data/maps/SevenIsland_TanobyRuins_WeepthChamber/scripts.inc b/data/maps/SevenIsland_TanobyRuins_WeepthChamber/scripts.inc new file mode 100644 index 000000000000..60a04561c85e --- /dev/null +++ b/data/maps/SevenIsland_TanobyRuins_WeepthChamber/scripts.inc @@ -0,0 +1,7 @@ +SevenIsland_TanobyRuins_WeepthChamber_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TanobyRuins_WeepthChamber_OnTransition + .byte 0 + +SevenIsland_TanobyRuins_WeepthChamber_OnTransition:: + call EventScript_TryDarkenRuins + end diff --git a/data/maps/SevenIsland_TrainerTower/scripts.inc b/data/maps/SevenIsland_TrainerTower/scripts.inc new file mode 100644 index 000000000000..503e220267c1 --- /dev/null +++ b/data/maps/SevenIsland_TrainerTower/scripts.inc @@ -0,0 +1,48 @@ +SevenIsland_TrainerTower_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SevenIsland_TrainerTower_OnTransition + .byte 0 + +SevenIsland_TrainerTower_OnTransition:: + setvar VAR_MAP_SCENE_TRAINER_TOWER, 0 + end + +SevenIsland_TrainerTower_EventScript_TrainerTowerSign:: + msgbox SevenIsland_TrainerTower_Text_TrainerTowerSign, MSGBOX_SIGN + end + +SevenIsland_TrainerTower_EventScript_TrainerTowerAheadSign:: + msgbox SevenIsland_TrainerTower_Text_TrainerTowerAhead, MSGBOX_SIGN + end + +SevenIsland_TrainerTower_Text_DarioIntro:: + .string "I sensed your approach.$" + +SevenIsland_TrainerTower_Text_DarioDefeat:: + .string "Give up…$" + +SevenIsland_TrainerTower_Text_DarioPostBattle:: + .string "In your future, I sense that you\n" + .string "will meet many others.\p" + .string "I think you will be linked to each\n" + .string "other by a strange power.$" + +SevenIsland_TrainerTower_Text_RodetteIntro:: + .string "Somewhere on this island, peculiar\n" + .string "POKéMON are sleeping.$" + +SevenIsland_TrainerTower_Text_RodetteDefeat:: + .string "What an amazing TRAINER!$" + +SevenIsland_TrainerTower_Text_RodettePostBattle:: + .string "Somewhere on this island, peculiar\n" + .string "POKéMON are sleeping.\p" + .string "Could it be that they're waiting\n" + .string "for you?$" + +SevenIsland_TrainerTower_Text_TrainerTowerSign:: + .string "TRAINER TOWER ENTRANCE\n" + .string "Rise to the Challenge, TRAINERS!$" + +SevenIsland_TrainerTower_Text_TrainerTowerAhead:: + .string "TRAINER TOWER AHEAD$" + diff --git a/data/maps/SevenIsland_UnusedHouse/scripts.inc b/data/maps/SevenIsland_UnusedHouse/scripts.inc new file mode 100644 index 000000000000..604e7c426264 --- /dev/null +++ b/data/maps/SevenIsland_UnusedHouse/scripts.inc @@ -0,0 +1,2 @@ +SevenIsland_UnusedHouse_MapScripts:: + .byte 0 diff --git a/data/maps/SilphCo_10F/scripts.inc b/data/maps/SilphCo_10F/scripts.inc new file mode 100644 index 000000000000..06c4e4c784f0 --- /dev/null +++ b/data/maps/SilphCo_10F/scripts.inc @@ -0,0 +1,68 @@ +SilphCo_10F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_10F_OnLoad + .byte 0 + +SilphCo_10F_OnLoad:: + call_if_unset FLAG_SILPH_10F_DOOR, EventScript_Close10FDoor + end + +SilphCo_10F_EventScript_WorkerF:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_10F_EventScript_WorkerFRocketsGone + msgbox SilphCo_10F_Text_WaaaImScared + release + end + +SilphCo_10F_EventScript_WorkerFRocketsGone:: + msgbox SilphCo_10F_Text_KeepMeCryingASecret + release + end + +SilphCo_10F_EventScript_FloorSign:: + msgbox SilphCo_10F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_10F_EventScript_Travis:: + trainerbattle_single TRAINER_SCIENTIST_TRAVIS, SilphCo_10F_Text_TravisIntro, SilphCo_10F_Text_TravisDefeat + msgbox SilphCo_10F_Text_TravisPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_10F_EventScript_Grunt:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_39, SilphCo_10F_Text_GruntIntro, SilphCo_10F_Text_GruntDefeat + msgbox SilphCo_10F_Text_GruntPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_10F_Text_GruntIntro:: + .string "Welcome to 10F!\n" + .string "So good of you to join me!$" + +SilphCo_10F_Text_GruntDefeat:: + .string "I'm stunned!$" + +SilphCo_10F_Text_GruntPostBattle:: + .string "Nice try, but the boardroom is up\n" + .string "one more floor.$" + +SilphCo_10F_Text_TravisIntro:: + .string "Enough of your silly games!$" + +SilphCo_10F_Text_TravisDefeat:: + .string "No continues left!$" + +SilphCo_10F_Text_TravisPostBattle:: + .string "Are you satisfied with beating me?\n" + .string "Then go on home!$" + +SilphCo_10F_Text_WaaaImScared:: + .string "Waaaaa!\n" + .string "I'm scared!$" + +SilphCo_10F_Text_KeepMeCryingASecret:: + .string "About me crying…\n" + .string "Please keep it a secret.$" + +SilphCo_10F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "10F$" + diff --git a/data/maps/SilphCo_11F/scripts.inc b/data/maps/SilphCo_11F/scripts.inc new file mode 100644 index 000000000000..fbceb9f02bf5 --- /dev/null +++ b/data/maps/SilphCo_11F/scripts.inc @@ -0,0 +1,228 @@ +SilphCo_11F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_11F_OnLoad + .byte 0 + +SilphCo_11F_OnLoad:: + call_if_unset FLAG_SILPH_11F_DOOR, EventScript_Close11FDoor + end + +SilphCo_11F_EventScript_President:: + lock + faceplayer + goto_if_set FLAG_GOT_MASTER_BALL_FROM_SILPH, SilphCo_11F_EventScript_AlreadyGotMasterBall + checkplayergender + call_if_eq VAR_RESULT, MALE, SilphCo_11F_EventScript_PresidentThanksMale + call_if_eq VAR_RESULT, FEMALE, SilphCo_11F_EventScript_PresidentThanksFemale + checkitemspace ITEM_MASTER_BALL + goto_if_eq VAR_RESULT, FALSE, SilphCo_11F_EventScript_NoRoomForMasterBall + giveitem_msg SilphCo_11F_Text_ObtainedMasterBallFromPresident, ITEM_MASTER_BALL, 1, MUS_RG_OBTAIN_KEY_ITEM + msgbox SilphCo_11F_Text_ThatsOurSecretPrototype + setflag FLAG_GOT_MASTER_BALL_FROM_SILPH + release + end + +SilphCo_11F_EventScript_PresidentThanksMale:: + msgbox SilphCo_11F_Text_ThanksForSavingMeDearBoy + return + +SilphCo_11F_EventScript_PresidentThanksFemale:: + msgbox SilphCo_11F_Text_ThanksForSavingMeDearGirl + return + +SilphCo_11F_EventScript_NoRoomForMasterBall:: + msgbox SilphCo_11F_Text_YouHaveNoRoomForThis + release + end + +SilphCo_11F_EventScript_AlreadyGotMasterBall:: + msgbox SilphCo_11F_Text_ThatsOurSecretPrototype + release + end + +SilphCo_11F_EventScript_Secretary:: + msgbox SilphCo_11F_Text_ThanksForRescuingUs, MSGBOX_NPC + end + +SilphCo_11F_EventScript_GiovanniTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + goto SilphCo_11F_EventScript_BattleGiovanni + end + +SilphCo_11F_EventScript_GiovanniTriggerRight:: + lockall + setvar VAR_TEMP_1, 1 + goto SilphCo_11F_EventScript_BattleGiovanni + end + +SilphCo_11F_EventScript_BattleGiovanni:: + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_SILPH_CO_GIOVANNI, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + delay 25 + msgbox SilphCo_11F_Text_GiovanniIntro + closemessage + call_if_eq VAR_TEMP_1, 0, SilphCo_11F_EventScript_GiovanniApproachLeft + call_if_eq VAR_TEMP_1, 1, SilphCo_11F_EventScript_GiovanniApproachRight + setvar VAR_LAST_TALKED, LOCALID_SILPH_CO_GIOVANNI + trainerbattle_no_intro TRAINER_BOSS_GIOVANNI_2, SilphCo_11F_Text_GiovanniDefeat + msgbox SilphCo_11F_Text_GiovanniPostBattle + closemessage + fadescreen FADE_TO_BLACK + removeobject LOCALID_SILPH_CO_GIOVANNI + removeobject LOCALID_SILPH_CO_11F_GRUNT1 + removeobject LOCALID_SILPH_CO_11F_GRUNT2 + fadescreen FADE_FROM_BLACK + setvar VAR_MAP_SCENE_SILPH_CO_11F, 1 + setflag FLAG_HIDE_SAFFRON_ROCKETS + clearflag FLAG_HIDE_SAFFRON_CIVILIANS + releaseall + end + +SilphCo_11F_EventScript_GiovanniApproachLeft:: + applymovement LOCALID_SILPH_CO_GIOVANNI, SilphCo_11F_Movement_GiovanniApproachLeft + applymovement LOCALID_PLAYER, SilphCo_11F_Movement_PlayerFaceGiovanni + waitmovement 0 + return + +SilphCo_11F_EventScript_GiovanniApproachRight:: + applymovement LOCALID_SILPH_CO_GIOVANNI, SilphCo_11F_Movement_GiovanniApproachRight + waitmovement 0 + return + +SilphCo_11F_Movement_GiovanniApproachLeft:: + walk_down + walk_down + walk_down + walk_down + walk_in_place_faster_left + step_end + +SilphCo_11F_Movement_GiovanniApproachRight:: + walk_down + walk_down + walk_down + step_end + +SilphCo_11F_Movement_PlayerFaceGiovanni:: + delay_16 + delay_16 + delay_16 + delay_8 + delay_4 + walk_in_place_faster_right + step_end + +@ Unused +SilphCo_11F_EventScript_Monitor:: + msgbox SilphCo_11F_Text_MonitorHasMonsOnIt, MSGBOX_SIGN + end + +SilphCo_11F_EventScript_FloorSign:: + msgbox SilphCo_11F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_11F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_40, SilphCo_11F_Text_Grunt1Intro, SilphCo_11F_Text_Grunt1Defeat + msgbox SilphCo_11F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_11F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_41, SilphCo_11F_Text_Grunt2Intro, SilphCo_11F_Text_Grunt2Defeat + msgbox SilphCo_11F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_11F_Text_ThanksForSavingMeDearBoy:: + .string "PRESIDENT: Oh, dear boy!\n" + .string "Thank you for saving SILPH.\p" + .string "I will never forget you saved us in\n" + .string "our moment of peril.\p" + .string "I have to thank you in some way.\p" + .string "Because I am rich, I can give you\n" + .string "anything.\p" + .string "Here, maybe this will do.$" + +SilphCo_11F_Text_ThanksForSavingMeDearGirl:: + .string "PRESIDENT: Oh, dear girl!\n" + .string "Thank you for saving SILPH.\p" + .string "I will never forget you saved us in\n" + .string "our moment of peril.\p" + .string "I have to thank you in some way.\p" + .string "Because I am rich, I can give you\n" + .string "anything.\p" + .string "Here, maybe this will do.$" + +SilphCo_11F_Text_ObtainedMasterBallFromPresident:: + .string "{PLAYER} obtained a MASTER BALL\n" + .string "from the PRESIDENT!$" + +SilphCo_11F_Text_ThatsOurSecretPrototype:: + .string "PRESIDENT: You can't buy that\n" + .string "anywhere.\p" + .string "It's our secret prototype MASTER\n" + .string "BALL.\p" + .string "It will catch any POKéMON without\n" + .string "fail!\p" + .string "You should be quiet about using it,\n" + .string "though.$" + +SilphCo_11F_Text_YouHaveNoRoomForThis:: + .string "You have no room for this.$" + +SilphCo_11F_Text_ThanksForRescuingUs:: + .string "SECRETARY: Thank you for rescuing\n" + .string "all of us.\p" + .string "We, from the PRESIDENT down,\n" + .string "are indebted to you.$" + +SilphCo_11F_Text_GiovanniIntro:: + .string "Ah, {PLAYER}!\n" + .string "So we meet again!\p" + .string "The PRESIDENT and I are discussing\n" + .string "a vital business proposition.\p" + .string "Keep your nose out of grown-up\n" + .string "matters…\p" + .string "Or, experience a world of pain!$" + +SilphCo_11F_Text_GiovanniDefeat:: + .string "Arrgh!!\n" + .string "I lost again!?$" + +SilphCo_11F_Text_GiovanniPostBattle:: + .string "Blast it all!\n" + .string "You ruined our plans for SILPH!\p" + .string "But, TEAM ROCKET will never fall!\p" + .string "{PLAYER}! Never forget that all\n" + .string "POKéMON exist for TEAM ROCKET!\p" + .string "I must go, but I shall return!$" + +SilphCo_11F_Text_Grunt2Intro:: + .string "Stop right there!\n" + .string "Don't you move!$" + +SilphCo_11F_Text_Grunt2Defeat:: + .string "Don't…\n" + .string "Please!$" + +SilphCo_11F_Text_Grunt2PostBattle:: + .string "So, you want to see my BOSS?$" + +SilphCo_11F_Text_Grunt1Intro:: + .string "Halt! Do you have an appointment\n" + .string "with my BOSS?$" + +SilphCo_11F_Text_Grunt1Defeat:: + .string "Gaah!\n" + .string "Demolished!$" + +SilphCo_11F_Text_Grunt1PostBattle:: + .string "Watch your step…\n" + .string "My BOSS likes his POKéMON tough!$" + +SilphCo_11F_Text_MonitorHasMonsOnIt:: + .string "The monitor has POKéMON on it!$" + +SilphCo_11F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "11F$" + diff --git a/data/maps/SilphCo_1F/scripts.inc b/data/maps/SilphCo_1F/scripts.inc new file mode 100644 index 000000000000..125bb2d6ec76 --- /dev/null +++ b/data/maps/SilphCo_1F/scripts.inc @@ -0,0 +1,25 @@ +SilphCo_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SilphCo_1F_OnTransition + .byte 0 + +SilphCo_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SILPH_CO_1F + end + +SilphCo_1F_EventScript_Receptionist:: + msgbox SilphCo_1F_Text_WelcomePresidentInBoardroom, MSGBOX_NPC + end + +SilphCo_1F_EventScript_FloorSign:: + msgbox SilphCo_1F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_1F_Text_WelcomePresidentInBoardroom:: + .string "Welcome.\p" + .string "The PRESIDENT is in the boardroom\n" + .string "on 11F.$" + +SilphCo_1F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "1F$" + diff --git a/data/maps/SilphCo_2F/scripts.inc b/data/maps/SilphCo_2F/scripts.inc new file mode 100644 index 000000000000..b88f9552aaca --- /dev/null +++ b/data/maps/SilphCo_2F/scripts.inc @@ -0,0 +1,111 @@ +SilphCo_2F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_2F_OnLoad + .byte 0 + +SilphCo_2F_OnLoad:: + call_if_unset FLAG_SILPH_2F_DOOR_1, EventScript_Close2FDoor1 + call_if_unset FLAG_SILPH_2F_DOOR_2, EventScript_Close2FDoor2 + end + +SilphCo_2F_EventScript_ThunderWaveTutor:: + goto EventScript_ThunderWaveTutor + end + +SilphCo_2F_EventScript_FloorSign:: + msgbox SilphCo_2F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_2F_EventScript_Connor:: + trainerbattle_single TRAINER_SCIENTIST_CONNOR, SilphCo_2F_Text_ConnorIntro, SilphCo_2F_Text_ConnorDefeat + msgbox SilphCo_2F_Text_ConnorPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_2F_EventScript_Jerry:: + trainerbattle_single TRAINER_SCIENTIST_JERRY, SilphCo_2F_Text_JerryIntro, SilphCo_2F_Text_JerryDefeat + msgbox SilphCo_2F_Text_JerryPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_2F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_23, SilphCo_2F_Text_Grunt1Intro, SilphCo_2F_Text_Grunt1Defeat + msgbox SilphCo_2F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_2F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_24, SilphCo_2F_Text_Grunt2Intro, SilphCo_2F_Text_Grunt2Defeat + msgbox SilphCo_2F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_2F_Text_ConnorIntro:: + .string "Help!\n" + .string "I'm a SILPH employee.$" + +SilphCo_2F_Text_ConnorDefeat:: + .string "How did you know\n" + .string "I was a ROCKET?$" + +SilphCo_2F_Text_ConnorPostBattle:: + .string "I work for both SILPH and TEAM\n" + .string "ROCKET.$" + +SilphCo_2F_Text_JerryIntro:: + .string "It's off-limits here!\n" + .string "Go home!$" + +SilphCo_2F_Text_JerryDefeat:: + .string "You're good.$" + +SilphCo_2F_Text_JerryPostBattle:: + .string "Can you solve the maze in here?\n" + .string "It's not easy, I tell you!$" + +SilphCo_2F_Text_Grunt1Intro:: + .string "No kids are allowed in here!$" + +SilphCo_2F_Text_Grunt1Defeat:: + .string "Tough!$" + +SilphCo_2F_Text_Grunt1PostBattle:: + .string "Diamond-shaped tiles are teleport\n" + .string "blocks.\p" + .string "They're transporters for this\n" + .string "high-tech building.$" + +SilphCo_2F_Text_Grunt2Intro:: + .string "Hey, kid!\n" + .string "What are you wandering here for?$" + +SilphCo_2F_Text_Grunt2Defeat:: + .string "I goofed!$" + +SilphCo_2F_Text_Grunt2PostBattle:: + .string "SILPH CO. will be associated with\n" + .string "TEAM ROCKET!$" + +Text_ThunderWaveTeach:: + .string "Eeek!\n" + .string "No! Stop! Help!\p" + .string "Oh, you're not with TEAM ROCKET.\n" + .string "I'm sorry, I thought…\p" + .string "Will you forgive me if I teach\n" + .string "you the THUNDER WAVE technique?$" + +Text_ThunderWaveDeclined:: + .string "Oh…\n" + .string "But THUNDER WAVE is convenient…$" + +Text_ThunderWaveWhichMon:: + .string "Which POKéMON should I teach\n" + .string "THUNDER WAVE?$" + +Text_ThunderWaveTaught:: + .string "THUNDER WAVE causes paralysis in\n" + .string "the target POKéMON.\p" + .string "A paralyzed POKéMON may be unable\n" + .string "to move in battle.\p" + .string "It's an ELECTRIC-type move, so it\n" + .string "won't work on some POKéMON.$" + +SilphCo_2F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "2F$" + diff --git a/data/maps/SilphCo_3F/scripts.inc b/data/maps/SilphCo_3F/scripts.inc new file mode 100644 index 000000000000..1ec526ce589d --- /dev/null +++ b/data/maps/SilphCo_3F/scripts.inc @@ -0,0 +1,70 @@ +SilphCo_3F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_3F_OnLoad + .byte 0 + +SilphCo_3F_OnLoad:: + call_if_unset FLAG_SILPH_3F_DOOR_1, EventScript_Close3FDoor1 + call_if_unset FLAG_SILPH_3F_DOOR_2, EventScript_Close3FDoor2 + end + +SilphCo_3F_EventScript_WorkerM:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_3F_EventScript_WorkerMRocketsGone + msgbox SilphCo_3F_Text_WhatAmIToDo + release + end + +SilphCo_3F_EventScript_WorkerMRocketsGone:: + msgbox SilphCo_3F_Text_YouAndYourMonsSavedUs + release + end + +SilphCo_3F_EventScript_FloorSign:: + msgbox SilphCo_3F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_3F_EventScript_Jose:: + trainerbattle_single TRAINER_SCIENTIST_JOSE, SilphCo_3F_Text_JoseIntro, SilphCo_3F_Text_JoseDefeat + msgbox SilphCo_3F_Text_JosePostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_3F_EventScript_Grunt:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_25, SilphCo_3F_Text_GruntIntro, SilphCo_3F_Text_GruntDefeat + msgbox SilphCo_3F_Text_GruntPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_3F_Text_WhatAmIToDo:: + .string "I work for SILPH CO.\n" + .string "What am I to do?$" + +SilphCo_3F_Text_YouAndYourMonsSavedUs:: + .string "{PLAYER}!\n" + .string "You and your POKéMON saved us!$" + +SilphCo_3F_Text_GruntIntro:: + .string "Quit messing with us, kid!$" + +SilphCo_3F_Text_GruntDefeat:: + .string "I give up!$" + +SilphCo_3F_Text_GruntPostBattle:: + .string "A hint? You can open doors with\n" + .string "a CARD KEY!$" + +SilphCo_3F_Text_JoseIntro:: + .string "I support TEAM ROCKET more than\n" + .string "I support SILPH CO.!$" + +SilphCo_3F_Text_JoseDefeat:: + .string "You really got me!$" + +SilphCo_3F_Text_JosePostBattle:: + .string "Humph…\p" + .string "TEAM ROCKET said that if I helped\n" + .string "them, they'd let me study POKéMON.$" + +SilphCo_3F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "3F$" + diff --git a/data/maps/SilphCo_4F/scripts.inc b/data/maps/SilphCo_4F/scripts.inc new file mode 100644 index 000000000000..f9dd06201b70 --- /dev/null +++ b/data/maps/SilphCo_4F/scripts.inc @@ -0,0 +1,86 @@ +SilphCo_4F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_4F_OnLoad + .byte 0 + +SilphCo_4F_OnLoad:: + call_if_unset FLAG_SILPH_4F_DOOR_1, EventScript_Close4FDoor1 + call_if_unset FLAG_SILPH_4F_DOOR_2, EventScript_Close4FDoor2 + end + +SilphCo_4F_EventScript_WorkerM:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_4F_EventScript_WorkerMRocketsGone + msgbox SilphCo_4F_Text_CantYouSeeImHiding + release + end + +SilphCo_4F_EventScript_WorkerMRocketsGone:: + msgbox SilphCo_4F_Text_TeamRocketIsGone + release + end + +SilphCo_4F_EventScript_FloorSign:: + msgbox SilphCo_4F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_4F_EventScript_Rodney:: + trainerbattle_single TRAINER_SCIENTIST_RODNEY, SilphCo_4F_Text_RodneyIntro, SilphCo_4F_Text_RodneyDefeat + msgbox SilphCo_4F_Text_RodneyPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_4F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_26, SilphCo_4F_Text_Grunt1Intro, SilphCo_4F_Text_Grunt1Defeat + msgbox SilphCo_4F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_4F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_27, SilphCo_4F_Text_Grunt2Intro, SilphCo_4F_Text_Grunt2Defeat + msgbox SilphCo_4F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_4F_Text_CantYouSeeImHiding:: + .string "Sssh!\n" + .string "Can't you see I'm hiding?$" + +SilphCo_4F_Text_TeamRocketIsGone:: + .string "Huh?\n" + .string "TEAM ROCKET is gone?$" + +SilphCo_4F_Text_Grunt1Intro:: + .string "TEAM ROCKET has taken control\n" + .string "of SILPH CO.!$" + +SilphCo_4F_Text_Grunt1Defeat:: + .string "Arrgh!$" + +SilphCo_4F_Text_Grunt1PostBattle:: + .string "Fwahahaha!\n" + .string "My BOSS has been after this place!$" + +SilphCo_4F_Text_RodneyIntro:: + .string "My POKéMON is my loyal servant.$" + +SilphCo_4F_Text_RodneyDefeat:: + .string "Darn!\n" + .string "You weak POKéMON!$" + +SilphCo_4F_Text_RodneyPostBattle:: + .string "The doors are electronically\n" + .string "locked.\p" + .string "It takes a CARD KEY to open the\n" + .string "doors here.$" + +SilphCo_4F_Text_Grunt2Intro:: + .string "Intruder spotted!$" + +SilphCo_4F_Text_Grunt2Defeat:: + .string "Who are you?$" + +SilphCo_4F_Text_Grunt2PostBattle:: + .string "I better tell the BOSS on 11F!$" + +SilphCo_4F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "4F$" + diff --git a/data/maps/SilphCo_5F/scripts.inc b/data/maps/SilphCo_5F/scripts.inc new file mode 100644 index 000000000000..d759e0da8410 --- /dev/null +++ b/data/maps/SilphCo_5F/scripts.inc @@ -0,0 +1,140 @@ +SilphCo_5F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_5F_OnLoad + .byte 0 + +SilphCo_5F_OnLoad:: + call_if_unset FLAG_SILPH_5F_DOOR_1, EventScript_Close5FDoor1 + call_if_unset FLAG_SILPH_5F_DOOR_2, EventScript_Close5FDoor2 + call_if_unset FLAG_SILPH_5F_DOOR_3, EventScript_Close5FDoor3 + end + +SilphCo_5F_EventScript_WorkerM:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_5F_EventScript_WorkerMRocketsGone + msgbox SilphCo_5F_Text_RocketsInUproarAboutIntruder + release + end + +SilphCo_5F_EventScript_WorkerMRocketsGone:: + msgbox SilphCo_5F_Text_YoureOurHeroThankYou + release + end + +SilphCo_5F_EventScript_PokemonReport1:: + msgbox SilphCo_5F_Text_PorygonFirstVRMon, MSGBOX_SIGN + end + +SilphCo_5F_EventScript_PokemonReport2:: + msgbox SilphCo_5F_Text_Over350TechniquesConfirmed, MSGBOX_SIGN + end + +SilphCo_5F_EventScript_PokemonReport3:: + msgbox SilphCo_5F_Text_SomeMonsEvolveWhenTraded, MSGBOX_SIGN + end + +SilphCo_5F_EventScript_FloorSign:: + msgbox SilphCo_5F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_5F_EventScript_Beau:: + trainerbattle_single TRAINER_SCIENTIST_BEAU, SilphCo_5F_Text_BeauIntro, SilphCo_5F_Text_BeauDefeat + msgbox SilphCo_5F_Text_BeauPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_5F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_28, SilphCo_5F_Text_Grunt1Intro, SilphCo_5F_Text_Grunt1Defeat + msgbox SilphCo_5F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_5F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_29, SilphCo_5F_Text_Grunt2Intro, SilphCo_5F_Text_Grunt2Defeat + msgbox SilphCo_5F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_5F_EventScript_Dalton:: + trainerbattle_single TRAINER_JUGGLER_DALTON, SilphCo_5F_Text_DaltonIntro, SilphCo_5F_Text_DaltonDefeat + msgbox SilphCo_5F_Text_DaltonPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_5F_Text_RocketsInUproarAboutIntruder:: + .string "TEAM ROCKET is in an uproar over\n" + .string "some intruder.\p" + .string "That's you, right?$" + +SilphCo_5F_Text_YoureOurHeroThankYou:: + .string "TEAM ROCKET took off!\n" + .string "You're our hero! Thank you!$" + +SilphCo_5F_Text_Grunt1Intro:: + .string "I heard a kid was wandering\n" + .string "around.$" + +SilphCo_5F_Text_Grunt1Defeat:: + .string "Boom!$" + +SilphCo_5F_Text_Grunt1PostBattle:: + .string "It's not smart to pick a fight with\n" + .string "TEAM ROCKET!$" + +SilphCo_5F_Text_BeauIntro:: + .string "We study POKé BALL technology on\n" + .string "this floor.$" + +SilphCo_5F_Text_BeauDefeat:: + .string "Dang!\n" + .string "Blast it!$" + +SilphCo_5F_Text_BeauPostBattle:: + .string "We worked on the ultimate POKé\n" + .string "BALL which would catch anything.$" + +SilphCo_5F_Text_DaltonIntro:: + .string "Whaaat?\p" + .string "There shouldn't be any children\n" + .string "here!$" + +SilphCo_5F_Text_DaltonDefeat:: + .string "Oh, goodness!$" + +SilphCo_5F_Text_DaltonPostBattle:: + .string "You're only on 5F.\n" + .string "It's a long way to my BOSS!$" + +SilphCo_5F_Text_Grunt2Intro:: + .string "Show TEAM ROCKET a little respect!$" + +SilphCo_5F_Text_Grunt2Defeat:: + .string "Cough…\n" + .string "Cough…$" + +SilphCo_5F_Text_Grunt2PostBattle:: + .string "Which reminds me.\p" + .string "KOFFING evolves into WEEZING!$" + +SilphCo_5F_Text_PorygonFirstVRMon:: + .string "It's a POKéMON REPORT!\p" + .string "POKéMON LAB created PORYGON,\n" + .string "the first virtual-reality POKéMON.$" + +SilphCo_5F_Text_Over350TechniquesConfirmed:: + .string "It's a POKéMON REPORT!\p" + .string "Over 350 POKéMON techniques have\n" + .string "been confirmed.$" + +SilphCo_5F_Text_SomeMonsEvolveWhenTraded:: + .string "It's a POKéMON REPORT!\p" + .string "Some POKéMON have been confirmed\n" + .string "to evolve when they are traded.$" + +SilphCo_5F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "5F$" + +SilphCo_5F_Text_RocketBossLookingForStrongMons:: + .string "Those thugs that took over our\n" + .string "building…\p" + .string "Their BOSS said he was looking for\n" + .string "strong POKéMON.\p" + .string "I hope our PRESIDENT managed to\n" + .string "avoid trouble…$" diff --git a/data/maps/SilphCo_6F/scripts.inc b/data/maps/SilphCo_6F/scripts.inc new file mode 100644 index 000000000000..90af3fdffdf1 --- /dev/null +++ b/data/maps/SilphCo_6F/scripts.inc @@ -0,0 +1,170 @@ +SilphCo_6F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_6F_OnLoad + .byte 0 + +SilphCo_6F_OnLoad:: + call_if_unset FLAG_SILPH_6F_DOOR, EventScript_Close6FDoor + end + +SilphCo_6F_EventScript_WorkerM2:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_6F_EventScript_WorkerM2RocketsGone + msgbox SilphCo_6F_Text_TargetedSilphForOurMonProducts + release + end + +SilphCo_6F_EventScript_WorkerM2RocketsGone:: + msgbox SilphCo_6F_Text_ComeWorkForSilphWhenYoureOlder + release + end + +SilphCo_6F_EventScript_WorkerM3:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_6F_EventScript_WorkerM3RocketsGone + msgbox SilphCo_6F_Text_RocketsTookOverBuilding + release + end + +SilphCo_6F_EventScript_WorkerM3RocketsGone:: + msgbox SilphCo_6F_Text_BetterGetBackToWork + release + end + +SilphCo_6F_EventScript_WorkerM1:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_6F_EventScript_WorkerM1RocketsGone + msgbox SilphCo_6F_Text_HelpMePlease + release + end + +SilphCo_6F_EventScript_WorkerM1RocketsGone:: + msgbox SilphCo_6F_Text_WeGotEngaged + release + end + +SilphCo_6F_EventScript_WorkerF1:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_6F_EventScript_WorkerF1RocketsGone + msgbox SilphCo_6F_Text_ThatManIsSuchACoward + release + end + +SilphCo_6F_EventScript_WorkerF1RocketsGone:: + msgbox SilphCo_6F_Text_NeedsMeToLookAfterHim + release + end + +SilphCo_6F_EventScript_WorkerF2:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_6F_EventScript_WorkerF2RocketsGone + msgbox SilphCo_6F_Text_RocketsTryingToConquerWorld + release + end + +SilphCo_6F_EventScript_WorkerF2RocketsGone:: + msgbox SilphCo_6F_Text_RocketsRanAwayBecauseOfYou + release + end + +SilphCo_6F_EventScript_FloorSign:: + msgbox SilphCo_6F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_6F_EventScript_Taylor:: + trainerbattle_single TRAINER_SCIENTIST_TAYLOR, SilphCo_6F_Text_TaylorIntro, SilphCo_6F_Text_TaylorDefeat + msgbox SilphCo_6F_Text_TaylorPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_6F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_30, SilphCo_6F_Text_Grunt1Intro, SilphCo_6F_Text_Grunt1Defeat + msgbox SilphCo_6F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_6F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_31, SilphCo_6F_Text_Grunt2Intro, SilphCo_6F_Text_Grunt2Defeat + msgbox SilphCo_6F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_6F_Text_RocketsTookOverBuilding:: + .string "The ROCKETS came and took over\n" + .string "the building!$" + +SilphCo_6F_Text_BetterGetBackToWork:: + .string "Well, better get back to work.$" + +SilphCo_6F_Text_HelpMePlease:: + .string "Oh dear, oh dear.\n" + .string "Help me, please!$" + +SilphCo_6F_Text_WeGotEngaged:: + .string "We got engaged.\n" + .string "Heheh!$" + +SilphCo_6F_Text_ThatManIsSuchACoward:: + .string "That man next to me…\n" + .string "He's such a coward!$" + +SilphCo_6F_Text_NeedsMeToLookAfterHim:: + .string "He's so helpless, he needed\n" + .string "someone like me to look after him.$" + +SilphCo_6F_Text_RocketsTryingToConquerWorld:: + .string "TEAM ROCKET is trying to conquer\n" + .string "the world with POKéMON.$" + +SilphCo_6F_Text_RocketsRanAwayBecauseOfYou:: + .string "TEAM ROCKET ran away, and it's all\n" + .string "because of you!$" + +SilphCo_6F_Text_TargetedSilphForOurMonProducts:: + .string "They must have targeted SILPH for\n" + .string "our POKéMON products.$" + +SilphCo_6F_Text_ComeWorkForSilphWhenYoureOlder:: + .string "Come work for SILPH when you\n" + .string "get older.$" + +SilphCo_6F_Text_Grunt1Intro:: + .string "I am one of the four ROCKET\n" + .string "BROTHERS!$" + +SilphCo_6F_Text_Grunt1Defeat:: + .string "Flame out!$" + +SilphCo_6F_Text_Grunt1PostBattle:: + .string "No matter!\n" + .string "My brothers will avenge me!$" + +SilphCo_6F_Text_TaylorIntro:: + .string "That rotten PRESIDENT!\p" + .string "Serves him right for shipping me\n" + .string "off to the TIKSI BRANCH!\p" + .string "That's why TEAM ROCKET came after\n" + .string "us, I'm sure of it!$" + +SilphCo_6F_Text_TaylorDefeat:: + .string "Shoot!$" + +SilphCo_6F_Text_TaylorPostBattle:: + .string "TIKSI BRANCH?\n" + .string "It's in Russian no-man's-land!$" + +SilphCo_6F_Text_Grunt2Intro:: + .string "You dare betray TEAM ROCKET?$" + +SilphCo_6F_Text_Grunt2Defeat:: + .string "You traitor!$" + +SilphCo_6F_Text_Grunt2PostBattle:: + .string "If you stand for justice, you\n" + .string "betray us bad guys!$" + +SilphCo_6F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "6F$" + diff --git a/data/maps/SilphCo_7F/scripts.inc b/data/maps/SilphCo_7F/scripts.inc new file mode 100644 index 000000000000..f57e18099a80 --- /dev/null +++ b/data/maps/SilphCo_7F/scripts.inc @@ -0,0 +1,368 @@ +SilphCo_7F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_7F_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, SilphCo_7F_OnTransition + .byte 0 + +SilphCo_7F_OnLoad:: + call_if_unset FLAG_SILPH_7F_DOOR_1, EventScript_Close7FDoor1 + call_if_unset FLAG_SILPH_7F_DOOR_2, EventScript_Close7FDoor2 + call_if_unset FLAG_SILPH_7F_DOOR_3, EventScript_Close7FDoor3 + end + +SilphCo_7F_OnTransition:: + call_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_7F_EventScript_SetObjRocketsGone + end + +SilphCo_7F_EventScript_SetObjRocketsGone:: + setobjectmovementtype LOCALID_SILPH_CO_7F_WORKER_M2, MOVEMENT_TYPE_FACE_UP + return + +SilphCo_7F_EventScript_RivalTriggerTop:: + lockall + setvar VAR_TEMP_1, 0 + goto SilphCo_7F_EventScript_RivalScene + end + +SilphCo_7F_EventScript_RivalTriggerBottom:: + lockall + setvar VAR_TEMP_1, 1 + goto SilphCo_7F_EventScript_RivalScene + end + +SilphCo_7F_EventScript_RivalScene:: + textcolor NPC_TEXT_COLOR_MALE + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + applymovement LOCALID_SILPH_CO_RIVAL, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_SILPH_CO_RIVAL, Common_Movement_Delay48 + waitmovement 0 + msgbox SilphCo_7F_Text_RivalWhatKeptYou + call_if_eq VAR_TEMP_1, 0, SilphCo_7F_EventScript_RivalApproachTop + call_if_eq VAR_TEMP_1, 1, SilphCo_7F_EventScript_RivalApproachBottom + msgbox SilphCo_7F_Text_RivalIntro + setvar VAR_LAST_TALKED, LOCALID_SILPH_CO_RIVAL + call_if_eq VAR_STARTER_MON, 2, SilphCo_7F_EventScript_RivalSquirtle + call_if_eq VAR_STARTER_MON, 1, SilphCo_7F_EventScript_RivalBulbasaur + call_if_eq VAR_STARTER_MON, 0, SilphCo_7F_EventScript_RivalCharmander + msgbox SilphCo_7F_Text_RivalPostBattle + closemessage + playbgm MUS_RG_RIVAL_EXIT, 0 + call_if_eq VAR_TEMP_1, 0, SilphCo_7F_EventScript_RivalExitTop + call_if_eq VAR_TEMP_1, 1, SilphCo_7F_EventScript_RivalExitBottom + playse SE_WARP_IN + fadedefaultbgm + removeobject LOCALID_SILPH_CO_RIVAL + waitse + setvar VAR_MAP_SCENE_SILPH_CO_7F, 1 + releaseall + end + +SilphCo_7F_EventScript_RivalApproachTop:: + closemessage + applymovement LOCALID_SILPH_CO_RIVAL, SilphCo_7F_Movement_RivalApproachTop + waitmovement 0 + return + +SilphCo_7F_EventScript_RivalApproachBottom:: + return + +SilphCo_7F_EventScript_RivalSquirtle:: + trainerbattle_no_intro TRAINER_RIVAL_SILPH_SQUIRTLE, SilphCo_7F_Text_RivalDefeat + return + +SilphCo_7F_EventScript_RivalBulbasaur:: + trainerbattle_no_intro TRAINER_RIVAL_SILPH_BULBASAUR, SilphCo_7F_Text_RivalDefeat + return + +SilphCo_7F_EventScript_RivalCharmander:: + trainerbattle_no_intro TRAINER_RIVAL_SILPH_CHARMANDER, SilphCo_7F_Text_RivalDefeat + return + +SilphCo_7F_EventScript_RivalExitTop:: + applymovement LOCALID_SILPH_CO_RIVAL, SilphCo_7F_Movement_RivalExitTop + waitmovement 0 + return + +SilphCo_7F_EventScript_RivalExitBottom:: + applymovement LOCALID_SILPH_CO_RIVAL, SilphCo_7F_Movement_RivalExitBottom + waitmovement 0 + return + +SilphCo_7F_Movement_RivalApproachTop:: + walk_up + step_end + +SilphCo_7F_Movement_RivalExitTop:: + walk_right + walk_right + walk_right + walk_up + delay_16 + step_end + +SilphCo_7F_Movement_RivalExitBottom:: + walk_left + walk_up + walk_up + walk_right + walk_right + walk_right + walk_right + delay_16 + step_end + +SilphCo_7F_EventScript_LaprasGuy:: + lock + faceplayer + goto_if_set FLAG_GOT_LAPRAS_FROM_SILPH, SilphCo_7F_EventScript_AlreadyGotLapras + msgbox SilphCo_7F_Text_HaveMonForSavingUs + setvar VAR_TEMP_1, SPECIES_LAPRAS + givemon SPECIES_LAPRAS, 25 + goto_if_eq VAR_RESULT, 0, SilphCo_7F_EventScript_ReceiveLaprasParty + goto_if_eq VAR_RESULT, 1, SilphCo_7F_EventScript_ReceiveLaprasPC + goto_if_eq VAR_RESULT, 2, Common_EventScript_NoMoreRoomForPokemon + release + end + +SilphCo_7F_EventScript_ReceiveLaprasParty:: + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_LEVEL_UP + message SilphCo_7F_Text_ObtainedLaprasFromEmployee + waitmessage + waitfanfare + bufferspeciesname STR_VAR_1, SPECIES_LAPRAS + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SilphCo_7F_EventScript_EndReceiveLapras + call Common_EventScript_GetGiftMonPartySlot + call Common_EventScript_NameReceivedPartyMon + goto SilphCo_7F_EventScript_EndReceiveLapras + end + +SilphCo_7F_EventScript_ReceiveLaprasPC:: + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_LEVEL_UP + message SilphCo_7F_Text_ObtainedLaprasFromEmployee + waitmessage + waitfanfare + bufferspeciesname STR_VAR_1, SPECIES_LAPRAS + msgbox gText_NicknameThisPokemon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SilphCo_7F_EventScript_LaprasTransferredToPC + call Common_EventScript_NameReceivedBoxMon + goto SilphCo_7F_EventScript_LaprasTransferredToPC + end + +SilphCo_7F_EventScript_LaprasTransferredToPC:: + call Common_EventScript_TransferredToPC + goto SilphCo_7F_EventScript_EndReceiveLapras + end + +SilphCo_7F_EventScript_EndReceiveLapras:: + textcolor NPC_TEXT_COLOR_MALE + msgbox SilphCo_7F_Text_ExplainLapras + setflag FLAG_GOT_LAPRAS_FROM_SILPH + release + end + +SilphCo_7F_EventScript_AlreadyGotLapras:: + msgbox SilphCo_7F_Text_RocketBossWentToBoardroom + release + end + +SilphCo_7F_EventScript_WorkerM1:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_7F_EventScript_WorkerM1RocketsGone + msgbox SilphCo_7F_Text_RocketsAfterMasterBall + release + end + +SilphCo_7F_EventScript_WorkerM1RocketsGone:: + msgbox SilphCo_7F_Text_CanceledMasterBallProject + release + end + +SilphCo_7F_EventScript_WorkerM2:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_7F_EventScript_WorkerM2RocketsGone + msgbox SilphCo_7F_Text_BadIfTeamRocketTookOver + release + end + +SilphCo_7F_EventScript_WorkerM2RocketsGone:: + msgbox SilphCo_7F_Text_WowYouChasedOffTeamRocket + release + end + +SilphCo_7F_EventScript_WorkerF:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_7F_EventScript_WorkerFRocketsGone + msgbox SilphCo_7F_Text_ReallyDangerousHere + release + end + +SilphCo_7F_EventScript_WorkerFRocketsGone:: + msgbox SilphCo_7F_Text_ThankYouSoMuch + release + end + +SilphCo_7F_EventScript_FloorSign:: + msgbox SilphCo_7F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_7F_EventScript_Joshua:: + trainerbattle_single TRAINER_SCIENTIST_JOSHUA, SilphCo_7F_Text_JoshuaIntro, SilphCo_7F_Text_JoshuaDefeat + msgbox SilphCo_7F_Text_JoshuaPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_7F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_33, SilphCo_7F_Text_Grunt1Intro, SilphCo_7F_Text_Grunt1Defeat + msgbox SilphCo_7F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_7F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_34, SilphCo_7F_Text_Grunt2Intro, SilphCo_7F_Text_Grunt2Defeat + msgbox SilphCo_7F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_7F_EventScript_Grunt3:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_35, SilphCo_7F_Text_Grunt3Intro, SilphCo_7F_Text_Grunt3Defeat + msgbox SilphCo_7F_Text_Grunt3PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_7F_Text_HaveMonForSavingUs:: + .string "Oh! Hi! You're not a ROCKET!\n" + .string "You came to save us?\l" + .string "Why, thank you!\p" + .string "I want you to have this POKéMON\n" + .string "for saving us.$" + +SilphCo_7F_Text_ObtainedLaprasFromEmployee:: + .string "{PLAYER} obtained a LAPRAS from\n" + .string "the SILPH employee!$" + +SilphCo_7F_Text_ExplainLapras:: + .string "It's a LAPRAS.\n" + .string "It's a very intelligent POKéMON.\p" + .string "We kept it in our lab, but it will\n" + .string "be much better off with you.\p" + .string "I think you will be a good TRAINER\n" + .string "for LAPRAS!\p" + .string "It's a good swimmer.\n" + .string "It'll give you a lift across water!$" + +SilphCo_7F_Text_RocketBossWentToBoardroom:: + .string "TEAM ROCKET's BOSS went to the\n" + .string "boardroom!\p" + .string "Is our PRESIDENT okay?\n" + .string "I'm worried.$" + +SilphCo_7F_Text_RocketsAfterMasterBall:: + .string "TEAM ROCKET was after the MASTER\n" + .string "BALL, which catches any POKéMON.$" + +SilphCo_7F_Text_CanceledMasterBallProject:: + .string "We canceled the MASTER BALL\n" + .string "project because of TEAM ROCKET.$" + +SilphCo_7F_Text_BadIfTeamRocketTookOver:: + .string "It would be bad if TEAM ROCKET\n" + .string "took over SILPH or our POKéMON.$" + +SilphCo_7F_Text_WowYouChasedOffTeamRocket:: + .string "Wow!\p" + .string "You chased off TEAM ROCKET all by\n" + .string "yourself?$" + +SilphCo_7F_Text_ReallyDangerousHere:: + .string "You!\n" + .string "It's really dangerous here!\p" + .string "You came to save me?\n" + .string "You can't!$" + +SilphCo_7F_Text_ThankYouSoMuch:: + .string "Thank you so much!$" + +SilphCo_7F_Text_Grunt3Intro:: + .string "Uh-oh!\n" + .string "I smell a little mouse!$" + +SilphCo_7F_Text_Grunt3Defeat:: + .string "Lights out!$" + +SilphCo_7F_Text_Grunt3PostBattle:: + .string "You won't find my BOSS by just\n" + .string "scurrying around!$" + +SilphCo_7F_Text_JoshuaIntro:: + .string "Heheh!\p" + .string "You mistook me for a SILPH worker?$" + +SilphCo_7F_Text_JoshuaDefeat:: + .string "I'm done!$" + +SilphCo_7F_Text_JoshuaPostBattle:: + .string "Despite your age, you are a\n" + .string "skilled TRAINER!$" + +SilphCo_7F_Text_Grunt1Intro:: + .string "I am one of the four ROCKET\n" + .string "BROTHERS!$" + +SilphCo_7F_Text_Grunt1Defeat:: + .string "Aack!\n" + .string "Brothers, I lost!$" + +SilphCo_7F_Text_Grunt1PostBattle:: + .string "Doesn't matter.\n" + .string "My brothers will repay the favor!$" + +SilphCo_7F_Text_Grunt2Intro:: + .string "A child intruder?\n" + .string "That must be you!$" + +SilphCo_7F_Text_Grunt2Defeat:: + .string "Fine!\n" + .string "I lost!$" + +SilphCo_7F_Text_Grunt2PostBattle:: + .string "Go on home before my BOSS gets\n" + .string "ticked off!$" + +SilphCo_7F_Text_RivalWhatKeptYou:: + .string "{RIVAL}: What kept you, {PLAYER}?$" + +SilphCo_7F_Text_RivalIntro:: + .string "{RIVAL}: Hahaha! I thought you'd\n" + .string "turn up if I waited here!\p" + .string "I guess TEAM ROCKET slowed you\n" + .string "down! Not that I care!\p" + .string "I saw you in SAFFRON, so I decided\n" + .string "to see if you got better!$" + +SilphCo_7F_Text_RivalDefeat:: + .string "Oh, man!\n" + .string "So, you are ready for BOSS\l" + .string "ROCKET!$" + +SilphCo_7F_Text_RivalPostBattle:: + .string "Well, {PLAYER}!\n" + .string "I'm moving on up and ahead!\p" + .string "By checking my POKéDEX, I'm\n" + .string "starting to see what's strong and\l" + .string "how they evolve!\p" + .string "Am I a genius or what?\p" + .string "I'm going to the POKéMON LEAGUE to\n" + .string "boot out the ELITE FOUR.\p" + .string "I'll become the world's most\n" + .string "powerful TRAINER!\p" + .string "{PLAYER}, well, good luck to you!\n" + .string "Don't sweat it!\l" + .string "Smell ya!$" + +SilphCo_7F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "7F$" + diff --git a/data/maps/SilphCo_8F/scripts.inc b/data/maps/SilphCo_8F/scripts.inc new file mode 100644 index 000000000000..17c4bb506fc9 --- /dev/null +++ b/data/maps/SilphCo_8F/scripts.inc @@ -0,0 +1,89 @@ +SilphCo_8F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_8F_OnLoad + .byte 0 + +SilphCo_8F_OnLoad:: + call_if_unset FLAG_SILPH_8F_DOOR, EventScript_Close8FDoor + end + +SilphCo_8F_EventScript_WorkerM:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_8F_EventScript_WorkerMRocketsGone + msgbox SilphCo_8F_Text_WonderIfSilphIsFinished + release + end + +SilphCo_8F_EventScript_WorkerMRocketsGone:: + msgbox SilphCo_8F_Text_ThanksForSavingUs + release + end + +SilphCo_8F_EventScript_FloorSign:: + msgbox SilphCo_8F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_8F_EventScript_Parker:: + trainerbattle_single TRAINER_SCIENTIST_PARKER, SilphCo_8F_Text_ParkerIntro, SilphCo_8F_Text_ParkerDefeat + msgbox SilphCo_8F_Text_ParkerPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_8F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_32, SilphCo_8F_Text_Grunt1Intro, SilphCo_8F_Text_Grunt1Defeat + msgbox SilphCo_8F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_8F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_36, SilphCo_8F_Text_Grunt2Intro, SilphCo_8F_Text_Grunt2Defeat + msgbox SilphCo_8F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_8F_Text_WonderIfSilphIsFinished:: + .string "I wonder if SILPH is finished…$" + +SilphCo_8F_Text_ThanksForSavingUs:: + .string "Thanks for saving us!$" + +SilphCo_8F_Text_Grunt1Intro:: + .string "That's as far as you'll go!$" + +SilphCo_8F_Text_Grunt1Defeat:: + .string "Not enough grit!$" + +SilphCo_8F_Text_Grunt1PostBattle:: + .string "If you don't turn back…\n" + .string "I'll call for backup!$" + +SilphCo_8F_Text_ParkerIntro:: + .string "You're causing us problems!$" + +SilphCo_8F_Text_ParkerDefeat:: + .string "Huh?\n" + .string "I lost?$" + +SilphCo_8F_Text_ParkerPostBattle:: + .string "So, what do you think of SILPH\n" + .string "BUILDING's maze?$" + +SilphCo_8F_Text_Grunt2Intro:: + .string "I am one of the four ROCKET\n" + .string "BROTHERS!$" + +SilphCo_8F_Text_Grunt2Defeat:: + .string "Whoo!\n" + .string "Oh, Brothers!$" + +SilphCo_8F_Text_Grunt2PostBattle:: + .string "I'll leave you up to my brothers.$" + +SilphCo_8F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "8F$" + +SilphCo_8F_Text_ToRocketBossMonsAreTools:: + .string "TEAM ROCKET's BOSS is terribly\n" + .string "cruel!\p" + .string "To him, POKéMON are just tools to\n" + .string "be used.\p" + .string "What will happen if that tyrant\n" + .string "takes over our company…$" diff --git a/data/maps/SilphCo_9F/scripts.inc b/data/maps/SilphCo_9F/scripts.inc new file mode 100644 index 000000000000..591d17b27d1e --- /dev/null +++ b/data/maps/SilphCo_9F/scripts.inc @@ -0,0 +1,93 @@ +SilphCo_9F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SilphCo_9F_OnLoad + .byte 0 + +SilphCo_9F_OnLoad:: + call_if_unset FLAG_SILPH_9F_DOOR_1, EventScript_Close9FDoor1 + call_if_unset FLAG_SILPH_9F_DOOR_2, EventScript_Close9FDoor2 + call_if_unset FLAG_SILPH_9F_DOOR_3, EventScript_Close9FDoor3 + call_if_unset FLAG_SILPH_9F_DOOR_4, EventScript_Close9FDoor4 + end + +SilphCo_9F_EventScript_HealWoman:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_SILPH_CO_11F, 1, SilphCo_9F_EventScript_HealWomanRocketsGone + msgbox SilphCo_9F_Text_YouShouldTakeQuickNap + closemessage + call Common_EventScript_OutOfCenterPartyHeal + msgbox SilphCo_9F_Text_DontGiveUp + release + end + +SilphCo_9F_EventScript_HealWomanRocketsGone:: + msgbox SilphCo_9F_Text_ThankYouSoMuch + release + end + +SilphCo_9F_EventScript_FloorSign:: + msgbox SilphCo_9F_Text_FloorSign, MSGBOX_SIGN + end + +SilphCo_9F_EventScript_Ed:: + trainerbattle_single TRAINER_SCIENTIST_ED, SilphCo_9F_Text_EdIntro, SilphCo_9F_Text_EdDefeat + msgbox SilphCo_9F_Text_EdPostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_9F_EventScript_Grunt1:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_37, SilphCo_9F_Text_Grunt1Intro, SilphCo_9F_Text_Grunt1Defeat + msgbox SilphCo_9F_Text_Grunt1PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_9F_EventScript_Grunt2:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_38, SilphCo_9F_Text_Grunt2Intro, SilphCo_9F_Text_Grunt2Defeat + msgbox SilphCo_9F_Text_Grunt2PostBattle, MSGBOX_AUTOCLOSE + end + +SilphCo_9F_Text_YouShouldTakeQuickNap:: + .string "You look tired.\n" + .string "You should take a quick nap.$" + +SilphCo_9F_Text_DontGiveUp:: + .string "Don't give up!$" + +SilphCo_9F_Text_ThankYouSoMuch:: + .string "Thank you so much.$" + +SilphCo_9F_Text_Grunt1Intro:: + .string "Your POKéMON seem to adore you,\n" + .string "kid!$" + +SilphCo_9F_Text_Grunt1Defeat:: + .string "Ghaaah!$" + +SilphCo_9F_Text_Grunt1PostBattle:: + .string "If I had started as a TRAINER at\n" + .string "your age…$" + +SilphCo_9F_Text_EdIntro:: + .string "Your POKéMON have weak points!\n" + .string "I can nail them!$" + +SilphCo_9F_Text_EdDefeat:: + .string "You hammered me!$" + +SilphCo_9F_Text_EdPostBattle:: + .string "Exploiting weak spots does work.\n" + .string "Think about type advantages.$" + +SilphCo_9F_Text_Grunt2Intro:: + .string "I am one of the four ROCKET\n" + .string "BROTHERS!$" + +SilphCo_9F_Text_Grunt2Defeat:: + .string "Warg!\n" + .string "Brothers, I lost!$" + +SilphCo_9F_Text_Grunt2PostBattle:: + .string "My brothers will avenge me!$" + +SilphCo_9F_Text_FloorSign:: + .string "SILPH CO. HEAD OFFICE\n" + .string "9F$" + diff --git a/data/maps/SilphCo_Elevator/scripts.inc b/data/maps/SilphCo_Elevator/scripts.inc new file mode 100644 index 000000000000..e596df71ca5e --- /dev/null +++ b/data/maps/SilphCo_Elevator/scripts.inc @@ -0,0 +1,143 @@ +SilphCo_Elevator_MapScripts:: + .byte 0 + +SilphCo_Elevator_EventScript_FloorSelect:: + lockall + setvar VAR_0x8004, 1 + call_if_unset FLAG_TEMP_2, EventScript_GetElevatorFloor + copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR + special DrawElevatorCurrentFloorWindow + message gText_WantWhichFloor + waitmessage + setvar VAR_0x8004, SCROLL_MULTI_SILPHCO_FLOORS + specialvar VAR_RESULT, InitElevatorFloorSelectMenuPos + special ShowScrollableMultichoice + waitstate + switch VAR_RESULT + case 0, SilphCo_Elevator_EventScript_To11F + case 1, SilphCo_Elevator_EventScript_To10F + case 2, SilphCo_Elevator_EventScript_To9F + case 3, SilphCo_Elevator_EventScript_To8F + case 4, SilphCo_Elevator_EventScript_To7F + case 5, SilphCo_Elevator_EventScript_To6F + case 6, SilphCo_Elevator_EventScript_To5F + case 7, SilphCo_Elevator_EventScript_To4F + case 8, SilphCo_Elevator_EventScript_To3F + case 9, SilphCo_Elevator_EventScript_To2F + case 10, SilphCo_Elevator_EventScript_To1F + case 11, SilphCo_Elevator_EventScript_ExitFloorSelect + case 127, SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To1F:: + setvar VAR_0x8006, 4 + setdynamicwarp MAP_SILPH_CO_1F, 255, 22, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 4, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 4 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To2F:: + setvar VAR_0x8006, 5 + setdynamicwarp MAP_SILPH_CO_2F, 255, 22, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 5, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 5 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To3F:: + setvar VAR_0x8006, 6 + setdynamicwarp MAP_SILPH_CO_3F, 255, 22, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 6, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 6 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To4F:: + setvar VAR_0x8006, 7 + setdynamicwarp MAP_SILPH_CO_4F, 255, 22, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 7, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 7 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To5F:: + setvar VAR_0x8006, 8 + setdynamicwarp MAP_SILPH_CO_5F, 255, 22, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 8, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 8 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To6F:: + setvar VAR_0x8006, 9 + setdynamicwarp MAP_SILPH_CO_6F, 255, 20, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 9, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 9 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To7F:: + setvar VAR_0x8006, 10 + setdynamicwarp MAP_SILPH_CO_7F, 255, 23, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 10, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 10 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To8F:: + setvar VAR_0x8006, 11 + setdynamicwarp MAP_SILPH_CO_8F, 255, 22, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 11, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 11 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To9F:: + setvar VAR_0x8006, 12 + setdynamicwarp MAP_SILPH_CO_9F, 255, 24, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 12, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 12 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To10F:: + setvar VAR_0x8006, 13 + setdynamicwarp MAP_SILPH_CO_10F, 255, 13, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 13, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 13 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_To11F:: + setvar VAR_0x8006, 14 + setdynamicwarp MAP_SILPH_CO_11F, 255, 13, 3 + goto_if_eq VAR_ELEVATOR_FLOOR, 14, SilphCo_Elevator_EventScript_ExitFloorSelect + call SilphCo_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 14 + goto SilphCo_Elevator_EventScript_ExitFloorSelect + end + +SilphCo_Elevator_EventScript_ExitFloorSelect:: + special CloseElevatorCurrentFloorWindow + releaseall + end + +SilphCo_Elevator_EventScript_MoveElevator:: + special CloseElevatorCurrentFloorWindow + closemessage + waitse + special AnimateElevator + waitstate + setflag FLAG_TEMP_2 + return diff --git a/data/maps/SixIsland/scripts.inc b/data/maps/SixIsland/scripts.inc new file mode 100644 index 000000000000..4c675a584c1e --- /dev/null +++ b/data/maps/SixIsland/scripts.inc @@ -0,0 +1,34 @@ +SixIsland_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SixIsland_OnTransition + .byte 0 + +SixIsland_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SIX_ISLAND + end + +SixIsland_EventScript_Hiker:: + msgbox SixIsland_Text_ThatWayToWaterPathRuinValley, MSGBOX_NPC + end + +SixIsland_EventScript_Boy:: + msgbox SixIsland_Text_SkyAtNightIsFantastic, MSGBOX_NPC + end + +SixIsland_EventScript_IslandSign:: + msgbox SixIsland_Text_IslandSign, MSGBOX_SIGN + end + +SixIsland_Text_IslandSign:: + .string "SIX ISLAND\n" + .string "Fortune Island of Aged Wisdom$" + +SixIsland_Text_ThatWayToWaterPathRuinValley:: + .string "Keep going this way and you'll get\n" + .string "to the WATER PATH.\p" + .string "Stay on that and you'll get to\n" + .string "the RUIN VALLEY.$" + +SixIsland_Text_SkyAtNightIsFantastic:: + .string "When you're this far away from the\n" + .string "city, the sky at night is fantastic.$" + diff --git a/data/maps/SixIsland_AlteringCave/scripts.inc b/data/maps/SixIsland_AlteringCave/scripts.inc new file mode 100644 index 000000000000..c4bf71026934 --- /dev/null +++ b/data/maps/SixIsland_AlteringCave/scripts.inc @@ -0,0 +1,7 @@ +SixIsland_AlteringCave_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SixIsland_AlteringCave_OnTransition + .byte 0 + +SixIsland_AlteringCave_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SIX_ISLAND_ALTERING_CAVE + end diff --git a/data/maps/SixIsland_DottedHole_1F/scripts.inc b/data/maps/SixIsland_DottedHole_1F/scripts.inc new file mode 100644 index 000000000000..ea1495f4cd27 --- /dev/null +++ b/data/maps/SixIsland_DottedHole_1F/scripts.inc @@ -0,0 +1,31 @@ +SixIsland_DottedHole_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SixIsland_DottedHole_1F_OnTransition + .byte 0 + +SixIsland_DottedHole_1F_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SIX_ISLAND_DOTTED_HOLE_1F + end + +SixIsland_DottedHole_B1F_EventScript_BrailleUp:: + lockall + braillemsgbox Braille_Text_Up + releaseall + end + +SixIsland_DottedHole_B4F_EventScript_BrailleDown:: + lockall + braillemsgbox Braille_Text_Down + releaseall + end + +SixIsland_DottedHole_B3F_EventScript_BrailleRight:: + lockall + braillemsgbox Braille_Text_Right + releaseall + end + +SixIsland_DottedHole_B2F_EventScript_BrailleLeft:: + lockall + braillemsgbox Braille_Text_Left + releaseall + end diff --git a/data/maps/SixIsland_DottedHole_B1F/scripts.inc b/data/maps/SixIsland_DottedHole_B1F/scripts.inc new file mode 100644 index 000000000000..8b33c614ed15 --- /dev/null +++ b/data/maps/SixIsland_DottedHole_B1F/scripts.inc @@ -0,0 +1,2 @@ +SixIsland_DottedHole_B1F_MapScripts:: + .byte 0 diff --git a/data/maps/SixIsland_DottedHole_B2F/scripts.inc b/data/maps/SixIsland_DottedHole_B2F/scripts.inc new file mode 100644 index 000000000000..17693d6e65db --- /dev/null +++ b/data/maps/SixIsland_DottedHole_B2F/scripts.inc @@ -0,0 +1,2 @@ +SixIsland_DottedHole_B2F_MapScripts:: + .byte 0 diff --git a/data/maps/SixIsland_DottedHole_B3F/scripts.inc b/data/maps/SixIsland_DottedHole_B3F/scripts.inc new file mode 100644 index 000000000000..1198775ad462 --- /dev/null +++ b/data/maps/SixIsland_DottedHole_B3F/scripts.inc @@ -0,0 +1,2 @@ +SixIsland_DottedHole_B3F_MapScripts:: + .byte 0 diff --git a/data/maps/SixIsland_DottedHole_B4F/scripts.inc b/data/maps/SixIsland_DottedHole_B4F/scripts.inc new file mode 100644 index 000000000000..f5d0972c76a6 --- /dev/null +++ b/data/maps/SixIsland_DottedHole_B4F/scripts.inc @@ -0,0 +1,2 @@ +SixIsland_DottedHole_B4F_MapScripts:: + .byte 0 diff --git a/data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc b/data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc new file mode 100644 index 000000000000..9866121f86c6 --- /dev/null +++ b/data/maps/SixIsland_DottedHole_SapphireRoom/scripts.inc @@ -0,0 +1,264 @@ +SixIsland_DottedHole_SapphireRoom_MapScripts:: + .byte 0 + +SixIsland_DottedHole_SapphireRoom_EventScript_Sapphire:: + lock + faceplayer + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_RG_OBTAIN_KEY_ITEM + message SixIsland_DottedHole_SapphireRoom_Text_FoundSapphire + waitmessage + waitfanfare + closemessage + setobjectxyperm LOCALID_DOTTED_HOLE_THIEF, 5, 0 + addobject LOCALID_DOTTED_HOLE_THIEF + playse SE_FALL + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefFallIn + waitmovement 0 + playse SE_M_STRENGTH + call_if_eq VAR_FACING, DIR_NORTH, SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefLeft + call_if_eq VAR_FACING, DIR_SOUTH, SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefLeft + call_if_eq VAR_FACING, DIR_EAST, SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefDown + call_if_eq VAR_FACING, DIR_WEST, SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefDown + setvar VAR_0x8004, 3 + setvar VAR_0x8005, 0 + setvar VAR_0x8006, 12 + setvar VAR_0x8007, 3 + special ShakeScreen + delay 60 + call_if_eq VAR_FACING, DIR_NORTH, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefLookAtSapphireNorth + call_if_eq VAR_FACING, DIR_SOUTH, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefLookAtSapphireSouth + call_if_eq VAR_FACING, DIR_EAST, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefLookAtSapphireEast + call_if_eq VAR_FACING, DIR_WEST, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefLookAtSapphireWest + textcolor NPC_TEXT_COLOR_MALE + msgbox SixIsland_DottedHole_SapphireRoom_Text_IWasRightInTailingYou + closemessage + call_if_eq VAR_FACING, DIR_NORTH, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefGetSapphireNorth + call_if_eq VAR_FACING, DIR_SOUTH, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefGetSapphireSouth + call_if_eq VAR_FACING, DIR_EAST, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefGetSapphireEast + call_if_eq VAR_FACING, DIR_WEST, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefGetSapphireWest + removeobject LOCALID_SAPPHIRE + call_if_eq VAR_FACING, DIR_NORTH, SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefLeft2 + call_if_eq VAR_FACING, DIR_SOUTH, SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefLeft2 + call_if_eq VAR_FACING, DIR_EAST, SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefDown2 + call_if_eq VAR_FACING, DIR_WEST, SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefDown2 + msgbox SixIsland_DottedHole_SapphireRoom_Text_SellToTeamRocketTellPassword + closemessage + call_if_eq VAR_FACING, DIR_NORTH, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefExitNorth + call_if_eq VAR_FACING, DIR_SOUTH, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefExitSouth + call_if_eq VAR_FACING, DIR_EAST, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefExitEast + call_if_eq VAR_FACING, DIR_WEST, SixIsland_DottedHole_SapphireRoom_EventScript_ThiefExitWest + playse SE_EXIT + delay 35 + removeobject LOCALID_DOTTED_HOLE_THIEF + setflag FLAG_LEARNED_YES_NAH_CHANSEY + release + end + +@ Lots of redundant scripts below +SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefLeft2:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefDown2:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefLeft:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_PlayerFaceThiefDown:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefLookAtSapphireNorth:: + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefLookAtSapphireFromLeft + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefLookAtSapphireSouth:: + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefLookAtSapphireFromLeft + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefLookAtSapphireEast:: + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefLookAtSapphireFromBelow + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefLookAtSapphireWest:: + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefLookAtSapphireFromBelow + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefGetSapphireNorth:: + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefGetSapphireFromLeft + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefGetSapphireSouth:: + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefGetSapphireFromLeft + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefGetSapphireEast:: + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefGetSapphireFromBelow + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefGetSapphireWest:: + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefGetSapphireFromBelow + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefExitNorth:: + applymovement LOCALID_PLAYER, SixIsland_DottedHole_SapphireRoom_Movement_PlayerWatchThiefExit + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefExitNorth + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefExitSouth:: + applymovement LOCALID_PLAYER, SixIsland_DottedHole_SapphireRoom_Movement_PlayerWatchThiefExit + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefExitSouth + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefExitEast:: + applymovement LOCALID_PLAYER, SixIsland_DottedHole_SapphireRoom_Movement_PlayerWatchThiefExit + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefExitEastWest + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_EventScript_ThiefExitWest:: + applymovement LOCALID_PLAYER, SixIsland_DottedHole_SapphireRoom_Movement_PlayerWatchThiefExit + applymovement LOCALID_DOTTED_HOLE_THIEF, SixIsland_DottedHole_SapphireRoom_Movement_ThiefExitEastWest + waitmovement 0 + return + +SixIsland_DottedHole_SapphireRoom_Movement_ThiefLookAtSapphireFromLeft:: + walk_up + walk_up + walk_in_place_faster_right + step_end + +SixIsland_DottedHole_SapphireRoom_Movement_ThiefLookAtSapphireFromBelow:: + walk_right + walk_right + walk_in_place_faster_up + step_end + +SixIsland_DottedHole_SapphireRoom_Movement_ThiefGetSapphireFromLeft:: + walk_right + step_end + +SixIsland_DottedHole_SapphireRoom_Movement_ThiefGetSapphireFromBelow:: + walk_up + step_end + +SixIsland_DottedHole_SapphireRoom_Movement_ThiefExitNorth:: + walk_fast_up + walk_fast_right + walk_fast_right + walk_fast_right + walk_fast_down + walk_fast_right + walk_fast_right + step_end + +SixIsland_DottedHole_SapphireRoom_Movement_ThiefExitSouth:: + walk_fast_down + walk_fast_right + walk_fast_right + walk_fast_right + walk_fast_up + walk_fast_right + walk_fast_right + step_end + +SixIsland_DottedHole_SapphireRoom_Movement_ThiefExitEastWest:: + walk_fast_right + walk_fast_right + walk_fast_right + walk_fast_right + walk_fast_up + step_end + +SixIsland_DottedHole_SapphireRoom_Movement_ThiefFallIn:: + face_down + disable_anim + slide_down + slide_down + slide_down + slide_down + slide_down + slide_down + slide_down + slide_down + slide_down + restore_anim + step_end + +SixIsland_DottedHole_SapphireRoom_Movement_PlayerWatchThiefExit:: + delay_16 + walk_in_place_faster_right + step_end + +SixIsland_DottedHole_SapphireRoom_EventScript_BrailleMessage:: + lockall + setvar VAR_0x8005, 130 + braillemessage_wait Braille_Text_LetTheTwo + braillemessage_wait Braille_Text_Glittering + braillemessage_wait Braille_Text_Stones + braillemessage_wait Braille_Text_OneInRed + braillemessage_wait Braille_Text_OneInBlue + braillemessage_wait Braille_Text_ConnectThe + braillemessage_wait Braille_Text_Past + braillemessage_wait Braille_Text_TwoFriends + braillemessage_wait Braille_Text_Sharing + braillemessage_wait Braille_Text_PowerOpen + braillemessage_wait Braille_Text_AWindowTo + braillemessage_wait Braille_Text_ANewWorld + braillemessage_wait Braille_Text_ThatGlows + braillemessage_wait Braille_Text_TheNext + braillemessage_wait Braille_Text_WorldWaits + braillemsgbox Braille_Text_ForYou + releaseall + end + +SixIsland_DottedHole_SapphireRoom_Text_FoundSapphire:: + .string "{PLAYER} found a SAPPHIRE!$" + +SixIsland_DottedHole_SapphireRoom_Text_IWasRightInTailingYou:: + .string "Fufu… Fufufufu…\n" + .string "I guessed right.\p" + .string "I was right in tailing you!$" + +SixIsland_DottedHole_SapphireRoom_Text_SellToTeamRocketTellPassword:: + .string "I knew that there was a SAPPHIRE\n" + .string "here, so it belongs to me!\p" + .string "I'll sell it to TEAM ROCKET for\n" + .string "serious money.\p" + .string "…D-don't glare at me like that!\p" + .string "If you want it back, why don't you\n" + .string "go get it after I sell it?\p" + .string "I'll even tell you one of the\n" + .string "passwords to TEAM ROCKET's\l" + .string "WAREHOUSE.\p" + .string "The WAREHOUSE password I know is\n" + .string "“Yes, nah, CHANSEY.”\p" + .string "I'm done.\n" + .string "Don't think badly of me!$" + diff --git a/data/maps/SixIsland_GreenPath/scripts.inc b/data/maps/SixIsland_GreenPath/scripts.inc new file mode 100644 index 000000000000..5f8f1d953374 --- /dev/null +++ b/data/maps/SixIsland_GreenPath/scripts.inc @@ -0,0 +1,32 @@ +SixIsland_GreenPath_MapScripts:: + .byte 0 + +SixIsland_GreenPath_EventScript_RightRouteSign:: + msgbox SixIsland_GreenPath_Text_LeftRouteSign, MSGBOX_SIGN + end + +SixIsland_GreenPath_EventScript_LeftRouteSign:: + msgbox SixIsland_GreenPath_Text_RightRouteSign, MSGBOX_SIGN + end + +SixIsland_GreenPath_Text_JaclynIntro:: + .string "…Huh?\p" + .string "I was envisioning my house, but\n" + .string "this is where I TELEPORT?$" + +SixIsland_GreenPath_Text_JaclynDefeat:: + .string "Big boo-boo!$" + +SixIsland_GreenPath_Text_JaclynPostBattle:: + .string "I am so scatterbrained!\p" + .string "I need to focus so I can TELEPORT\n" + .string "properly to my house!$" + +SixIsland_GreenPath_Text_LeftRouteSign:: + .string "GREEN PATH\n" + .string "PATTERN BUSH AHEAD$" + +SixIsland_GreenPath_Text_RightRouteSign:: + .string "GREEN PATH\n" + .string "Think Green, Keep Nature Clean!$" + diff --git a/data/maps/SixIsland_Harbor/scripts.inc b/data/maps/SixIsland_Harbor/scripts.inc new file mode 100644 index 000000000000..ec43db23766c --- /dev/null +++ b/data/maps/SixIsland_Harbor/scripts.inc @@ -0,0 +1,11 @@ +SixIsland_Harbor_MapScripts:: + .byte 0 + +SixIsland_Harbor_EventScript_Sailor:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_SIX_ISLAND + goto EventScript_ChooseDestFromIsland + end diff --git a/data/maps/SixIsland_House/scripts.inc b/data/maps/SixIsland_House/scripts.inc new file mode 100644 index 000000000000..cbd81076645b --- /dev/null +++ b/data/maps/SixIsland_House/scripts.inc @@ -0,0 +1,14 @@ +SixIsland_House_MapScripts:: + .byte 0 + +SixIsland_House_EventScript_OldMan:: + msgbox SixIsland_House_Text_GoodPlaceForNatureAndHistory, MSGBOX_NPC + end + +SixIsland_House_Text_GoodPlaceForNatureAndHistory:: + .string "There's nothing that young people'd\n" + .string "find exciting here on this island.\p" + .string "But, this is a good place in terms\n" + .string "of nature and history.\p" + .string "Relax and enjoy your stay.$" + diff --git a/data/maps/SixIsland_Mart/scripts.inc b/data/maps/SixIsland_Mart/scripts.inc new file mode 100644 index 000000000000..286f8d6d69a3 --- /dev/null +++ b/data/maps/SixIsland_Mart/scripts.inc @@ -0,0 +1,43 @@ +SixIsland_Mart_MapScripts:: + .byte 0 + +SixIsland_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart SixIsland_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +SixIsland_Mart_Items:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_FULL_RESTORE + .2byte ITEM_MAX_POTION + .2byte ITEM_REVIVE + .2byte ITEM_FULL_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_MAX_REPEL + .2byte ITEM_DREAM_MAIL + .2byte ITEM_NONE + release + end + +SixIsland_Mart_EventScript_Picnicker:: + msgbox SixIsland_Mart_Text_ShouldBuyMailAndWriteLetter, MSGBOX_NPC + end + +SixIsland_Mart_Text_AgathaOldestEverEliteFourMember:: + .string "Play with POKéMON lots and live\n" + .string "a long life!\p" + .string "Take AGATHA, for example.\p" + .string "She set a record for being the\n" + .string "oldest-ever ELITE FOUR member.\p" + .string "She spurs me to do bigger things.$" + +SixIsland_Mart_Text_ShouldBuyMailAndWriteLetter:: + .string "I should buy some MAIL and write\n" + .string "him a letter…$" + diff --git a/data/maps/SixIsland_OutcastIsland/scripts.inc b/data/maps/SixIsland_OutcastIsland/scripts.inc new file mode 100644 index 000000000000..5b67ae6fe2aa --- /dev/null +++ b/data/maps/SixIsland_OutcastIsland/scripts.inc @@ -0,0 +1,93 @@ +SixIsland_OutcastIsland_MapScripts:: + .byte 0 + +SixIsland_OutcastIsland_EventScript_Rocket:: + trainerbattle_single TRAINER_TEAM_ROCKET_GRUNT_46, SixIsland_OutcastIsland_Text_RocketIntro, SixIsland_OutcastIsland_Text_RocketDefeat + msgbox SixIsland_OutcastIsland_Text_RocketPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_OutcastIsland_Text_RocketIntro:: + .string "There're no rare POKéMON around\n" + .string "these parts! Not a one!\p" + .string "That burns me up, man.\n" + .string "I'll take it out on you!$" + +SixIsland_OutcastIsland_Text_RocketDefeat:: + .string "…Huh?$" + +SixIsland_OutcastIsland_Text_RocketPostBattle:: + .string "So listen, you haven't seen any\n" + .string "rare POKéMON, have you?$" + +SixIsland_OutcastIsland_Text_TylorIntro:: + .string "I'm having no luck at all.\n" + .string "A battle'd be a change of pace!$" + +SixIsland_OutcastIsland_Text_TylorDefeat:: + .string "Nope, no luck at all…$" + +SixIsland_OutcastIsland_Text_TylorPostBattle:: + .string "I can't very well go home without\n" + .string "catching something, though.$" + +SixIsland_OutcastIsland_Text_MymoIntro:: + .string "Gasp… Gasp…\p" + .string "I swam here from SIX ISLE PORT\n" + .string "in one go.$" + +SixIsland_OutcastIsland_Text_MymoDefeat:: + .string "Gasp…\n" + .string "Gasp…$" + +SixIsland_OutcastIsland_Text_MymoPostBattle:: + .string "I'm only at the halfway point…\n" + .string "I'm beat…$" + +SixIsland_OutcastIsland_Text_NicoleIntro:: + .string "It's not so easy sending POKéMON\n" + .string "out while swimming, you know?$" + +SixIsland_OutcastIsland_Text_NicoleDefeat:: + .string "I didn't lose to you at swimming.\n" + .string "This doesn't bother me.$" + +SixIsland_OutcastIsland_Text_NicolePostBattle:: + .string "Are you headed for the island up\n" + .string "past here?\p" + .string "I didn't see anything interesting\n" + .string "there.$" + +SixIsland_OutcastIsland_Text_AvaIntro:: + .string "AVA: Let's have a two-on-two\n" + .string "marine battle!$" + +SixIsland_OutcastIsland_Text_AvaDefeat:: + .string "AVA: Oh, you're amazing!\n" + .string "Even better, you're on your own!$" + +SixIsland_OutcastIsland_Text_AvaPostBattle:: + .string "AVA: You know, I do prefer the\n" + .string "sea over any pool.$" + +SixIsland_OutcastIsland_Text_AvaNotEnoughMons:: + .string "AVA: You're challenging us to\n" + .string "a battle?\p" + .string "You'll need at least two POKéMON\n" + .string "if you want to do that.$" + +SixIsland_OutcastIsland_Text_GebIntro:: + .string "GEB: Big Sister, help!\n" + .string "Please battle with me!$" + +SixIsland_OutcastIsland_Text_GebDefeat:: + .string "GEB: Wow, Big Sister, this person's\n" + .string "really good!$" + +SixIsland_OutcastIsland_Text_GebPostBattle:: + .string "GEB: I'm hanging onto my sister\n" + .string "because I can't touch the bottom.$" + +SixIsland_OutcastIsland_Text_GebNotEnoughMons:: + .string "GEB: Please battle against me and\n" + .string "my sister!\p" + .string "…Oh, you don't have two POKéMON?$" diff --git a/data/maps/SixIsland_PatternBush/scripts.inc b/data/maps/SixIsland_PatternBush/scripts.inc new file mode 100644 index 000000000000..ae4c0661378f --- /dev/null +++ b/data/maps/SixIsland_PatternBush/scripts.inc @@ -0,0 +1,235 @@ +SixIsland_PatternBush_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SixIsland_PatternBush_OnTransition + .byte 0 + +SixIsland_PatternBush_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_SIX_ISLAND_PATTERN_BUSH + getplayerxy VAR_TEMP_1, VAR_TEMP_2 + call_if_ge VAR_TEMP_1, 50, SixIsland_PatternBush_EventScript_SetEscapeRightExit + call_if_le VAR_TEMP_1, 49, SixIsland_PatternBush_EventScript_SetEscapeLeftExit + end + +SixIsland_PatternBush_EventScript_SetEscapeRightExit:: + setescapewarp MAP_SIX_ISLAND_GREEN_PATH, 255, 64, 10 + return + +SixIsland_PatternBush_EventScript_SetEscapeLeftExit:: + setescapewarp MAP_SIX_ISLAND_GREEN_PATH, 255, 45, 10 + return + +SixIsland_PatternBush_EventScript_Bethany:: + trainerbattle_single TRAINER_PKMN_BREEDER_BETHANY, SixIsland_PatternBush_Text_BethanyIntro, SixIsland_PatternBush_Text_BethanyDefeat + msgbox SixIsland_PatternBush_Text_BethanyPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Allison:: + trainerbattle_single TRAINER_PKMN_BREEDER_ALLISON, SixIsland_PatternBush_Text_AllisonIntro, SixIsland_PatternBush_Text_AllisonDefeat + msgbox SixIsland_PatternBush_Text_AllisonPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Garret:: + trainerbattle_single TRAINER_BUG_CATCHER_GARRET, SixIsland_PatternBush_Text_GarretIntro, SixIsland_PatternBush_Text_GarretDefeat + msgbox SixIsland_PatternBush_Text_GarretPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Jonah:: + trainerbattle_single TRAINER_BUG_CATCHER_JONAH, SixIsland_PatternBush_Text_JonahIntro, SixIsland_PatternBush_Text_JonahDefeat + msgbox SixIsland_PatternBush_Text_JonahPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Vance:: + trainerbattle_single TRAINER_BUG_CATCHER_VANCE, SixIsland_PatternBush_Text_VanceIntro, SixIsland_PatternBush_Text_VanceDefeat + msgbox SixIsland_PatternBush_Text_VancePostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Nash:: + trainerbattle_single TRAINER_YOUNGSTER_NASH, SixIsland_PatternBush_Text_NashIntro, SixIsland_PatternBush_Text_NashDefeat + msgbox SixIsland_PatternBush_Text_NashPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Cordell:: + trainerbattle_single TRAINER_YOUNGSTER_CORDELL, SixIsland_PatternBush_Text_CordellIntro, SixIsland_PatternBush_Text_CordellDefeat + msgbox SixIsland_PatternBush_Text_CordellPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Dalia:: + trainerbattle_single TRAINER_LASS_DALIA, SixIsland_PatternBush_Text_DaliaIntro, SixIsland_PatternBush_Text_DaliaDefeat + msgbox SixIsland_PatternBush_Text_DaliaPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Joana:: + trainerbattle_single TRAINER_LASS_JOANA, SixIsland_PatternBush_Text_JoanaIntro, SixIsland_PatternBush_Text_JoanaDefeat + msgbox SixIsland_PatternBush_Text_JoanaPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Riley:: + trainerbattle_single TRAINER_CAMPER_RILEY, SixIsland_PatternBush_Text_RileyIntro, SixIsland_PatternBush_Text_RileyDefeat + msgbox SixIsland_PatternBush_Text_RileyPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Marcy:: + trainerbattle_single TRAINER_PICNICKER_MARCY, SixIsland_PatternBush_Text_MarcyIntro, SixIsland_PatternBush_Text_MarcyDefeat + msgbox SixIsland_PatternBush_Text_MarcyPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_EventScript_Layton:: + trainerbattle_single TRAINER_RUIN_MANIAC_LAYTON, SixIsland_PatternBush_Text_LaytonIntro, SixIsland_PatternBush_Text_LaytonDefeat + msgbox SixIsland_PatternBush_Text_LaytonPostBattle, MSGBOX_AUTOCLOSE + end + +SixIsland_PatternBush_Text_BethanyIntro:: + .string "I'm curious, how do you raise your\n" + .string "POKéMON?$" + +SixIsland_PatternBush_Text_BethanyDefeat:: + .string "You raise your POKéMON with a\n" + .string "whole lot of love!$" + +SixIsland_PatternBush_Text_BethanyPostBattle:: + .string "In the same way your mother raised\n" + .string "you full of love, you should raise\l" + .string "your POKéMON.$" + +SixIsland_PatternBush_Text_AllisonIntro:: + .string "I'm working to preserve the natural\n" + .string "ecology of POKéMON here.$" + +SixIsland_PatternBush_Text_AllisonDefeat:: + .string "Oh, for someone so young, you are\n" + .string "tremendous!$" + +SixIsland_PatternBush_Text_AllisonPostBattle:: + .string "I'm not saying that you shouldn't\n" + .string "catch POKéMON.\p" + .string "I just want people to raise their\n" + .string "POKéMON responsibly.$" + +SixIsland_PatternBush_Text_GarretIntro:: + .string "I caught a BUG POKéMON that lives\n" + .string "only around here!$" + +SixIsland_PatternBush_Text_GarretDefeat:: + .string "Heheh…\n" + .string "Isn't my POKéMON awesome?$" + +SixIsland_PatternBush_Text_GarretPostBattle:: + .string "There's a girl near the BUSH who\n" + .string "measures HERACROSS for TRAINERS.$" + +SixIsland_PatternBush_Text_JonahIntro:: + .string "You know, it just doesn't feel right\n" + .string "if I don't use BUG POKéMON.$" + +SixIsland_PatternBush_Text_JonahDefeat:: + .string "It's okay, losing is a fun part of\n" + .string "POKéMON's appeal, too.$" + +SixIsland_PatternBush_Text_JonahPostBattle:: + .string "By the way, “appeal” is a weird\n" + .string "word, if you think about it.\p" + .string "Like, is it like an orange peel?\n" + .string "Or like a ringing bell?$" + +SixIsland_PatternBush_Text_VanceIntro:: + .string "Yeah, yeah, yeah!\n" + .string "Look at all the BUG POKéMON!$" + +SixIsland_PatternBush_Text_VanceDefeat:: + .string "I got beat while I was still busy\n" + .string "celebrating!$" + +SixIsland_PatternBush_Text_VancePostBattle:: + .string "I'm going to bring my little brother\n" + .string "here next time.$" + +SixIsland_PatternBush_Text_NashIntro:: + .string "Look, look! There are funny\n" + .string "patterns on the ground.$" + +SixIsland_PatternBush_Text_NashDefeat:: + .string "Super awesome!$" + +SixIsland_PatternBush_Text_NashPostBattle:: + .string "The funny patterns on the ground…\p" + .string "They look like the patterns on my\n" + .string "grandpa's clothes.$" + +SixIsland_PatternBush_Text_CordellIntro:: + .string "I bet you think I'm just some guy,\n" + .string "don't you, eh?$" + +SixIsland_PatternBush_Text_CordellDefeat:: + .string "I bet you think I'm weak,\n" + .string "don't you, eh?$" + +SixIsland_PatternBush_Text_CordellPostBattle:: + .string "Ayup, you townies come around all\n" + .string "so dandy with a hat that flashy…\p" + .string "How about giving me that?$" + +SixIsland_PatternBush_Text_DaliaIntro:: + .string "Take a deep breath.\n" + .string "Isn't the air delicious?$" + +SixIsland_PatternBush_Text_DaliaDefeat:: + .string "If you'd like, I can teach you how\n" + .string "to breathe properly.$" + +SixIsland_PatternBush_Text_DaliaPostBattle:: + .string "First, exhale.\n" + .string "Blow everything out.\p" + .string "When you can't exhale anymore,\n" + .string "inhale the clean air!\p" + .string "Isn't it refreshing?$" + +SixIsland_PatternBush_Text_JoanaIntro:: + .string "I love BUG POKéMON.\n" + .string "That's why I'm here all the time.\p" + .string "Am I the only girl like that?$" + +SixIsland_PatternBush_Text_JoanaDefeat:: + .string "I lost, but I'm still laughing.\n" + .string "Am I the only girl like that?$" + +SixIsland_PatternBush_Text_JoanaPostBattle:: + .string "I'm going to keep on collecting\n" + .string "BUG POKéMON.\p" + .string "Am I the only girl like that?$" + +SixIsland_PatternBush_Text_RileyIntro:: + .string "This is a good spot.\n" + .string "I'll pitch my tent here.$" + +SixIsland_PatternBush_Text_RileyDefeat:: + .string "Wimped out…$" + +SixIsland_PatternBush_Text_RileyPostBattle:: + .string "I'm going to observe the night sky\n" + .string "here.$" + +SixIsland_PatternBush_Text_MarcyIntro:: + .string "Oh, yuck!\n" + .string "I think a bug stung me!$" + +SixIsland_PatternBush_Text_MarcyDefeat:: + .string "It wasn't a bug.\n" + .string "I cut my shin on some grass.$" + +SixIsland_PatternBush_Text_MarcyPostBattle:: + .string "A little cut like that…\n" + .string "A little spit's enough to cure it!$" + +SixIsland_PatternBush_Text_LaytonIntro:: + .string "Have you noticed something odd\n" + .string "about these parts?$" + +SixIsland_PatternBush_Text_LaytonDefeat:: + .string "Have you taken a good look around\n" + .string "your feet?$" + +SixIsland_PatternBush_Text_LaytonPostBattle:: + .string "There are places here in PATTERN\n" + .string "BUSH where grass won't grow.\p" + .string "What could be the cause of such\n" + .string "a phenomenon?$" + diff --git a/data/maps/SixIsland_PokemonCenter_1F/scripts.inc b/data/maps/SixIsland_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..79665d1240e9 --- /dev/null +++ b/data/maps/SixIsland_PokemonCenter_1F/scripts.inc @@ -0,0 +1,115 @@ +SixIsland_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, SixIsland_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + map_script MAP_SCRIPT_ON_FRAME_TABLE, SixIsland_PokemonCenter_1F_OnFrame + .byte 0 + +SixIsland_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_SIX_ISLAND + call_if_eq VAR_MAP_SCENE_SIX_ISLAND_POKEMON_CENTER_1F, 0, SixIsland_PokemonCenter_1F_EventScript_ShowRival + end + +SixIsland_PokemonCenter_1F_EventScript_ShowRival:: + clearflag FLAG_HIDE_SIX_ISLAND_POKECENTER_RIVAL + return + +SixIsland_PokemonCenter_1F_OnFrame:: + map_script_2 VAR_MAP_SCENE_SIX_ISLAND_POKEMON_CENTER_1F, 0, SixIsland_PokemonCenter_1F_EventScript_RivalScene + .2byte 0 + +SixIsland_PokemonCenter_1F_EventScript_RivalScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_SIX_ISLAND_RIVAL, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + playbgm MUS_RG_ENCOUNTER_RIVAL, 0 + applymovement LOCALID_SIX_ISLAND_RIVAL, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_SIX_ISLAND_RIVAL, Common_Movement_Delay48 + waitmovement 0 + delay 25 + applymovement LOCALID_SIX_ISLAND_RIVAL, SixIsland_PokemonCenter_1F_Movement_RivalApproach + waitmovement 0 + msgbox SixIsland_PokemonCenter_1F_Text_RivalImpossibleToGetAllMonsAroundHere + closemessage + applymovement LOCALID_PLAYER, SixIsland_PokemonCenter_1F_Movement_PlayerWatchRivalExit + applymovement LOCALID_SIX_ISLAND_RIVAL, SixIsland_PokemonCenter_1F_Movement_RivalExit + waitmovement 0 + fadedefaultbgm + playse SE_EXIT + delay 35 + removeobject LOCALID_SIX_ISLAND_RIVAL + setvar VAR_MAP_SCENE_SIX_ISLAND_POKEMON_CENTER_1F, 1 + setvar VAR_MAP_SCENE_FOUR_ISLAND, 1 + releaseall + end + +SixIsland_PokemonCenter_1F_Movement_RivalApproach:: + walk_right + walk_right + walk_down + walk_down + step_end + +SixIsland_PokemonCenter_1F_Movement_RivalExit:: + delay_16 + delay_4 + walk_down + step_end + +SixIsland_PokemonCenter_1F_Movement_PlayerWatchRivalExit:: + walk_left + walk_in_place_faster_right + step_end + +SixIsland_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +SixIsland_PokemonCenter_1F_EventScript_Hiker:: + msgbox SixIsland_PokemonCenter_1F_Text_SomethingHiddenOnThisIsland, MSGBOX_NPC + end + +SixIsland_PokemonCenter_1F_EventScript_OldMan:: + msgbox SixIsland_PokemonCenter_1F_Text_SomeMonsEvolveByTradingWithHeldItem, MSGBOX_NPC + end + +SixIsland_PokemonCenter_1F_Text_SomethingHiddenOnThisIsland:: + .string "For ten years, I've searched for\n" + .string "RUINS.\p" + .string "No, make that twenty years.\p" + .string "I get this feeling that there's\n" + .string "something hidden on this island.$" + +SixIsland_PokemonCenter_1F_Text_SomeMonsEvolveByTradingWithHeldItem:: + .string "You know of POKéMON that evolve\n" + .string "only upon trading, yes?\p" + .string "But did you know that there are\n" + .string "still others?\p" + .string "Some POKéMON evolve only when\n" + .string "traded while holding specific items.$" + +SixIsland_PokemonCenter_1F_Text_RivalImpossibleToGetAllMonsAroundHere:: + .string "{RIVAL}: Hey, {PLAYER}!\n" + .string "How's your POKéDEX filling up?\p" + .string "It looks like it's impossible to get\n" + .string "all the POKéMON by hanging around\l" + .string "just these parts.\p" + .string "Maybe there are POKéMON we don't\n" + .string "know about somewhere far away…\p" + .string "… … … … … … … … …\p" + .string "Well, if I can't do it, there's no\n" + .string "way for you to get it done.\p" + .string "I'm not going to get all desperate\n" + .string "over this.\p" + .string "I'll keep collecting POKéMON at my\n" + .string "own pace while I train them.\p" + .string "That's what I'll do.\n" + .string "So there's no point staying here.\l" + .string "I may as well leave for home.\p" + .string "That's that, then!\n" + .string "Smell ya later!$" + diff --git a/data/maps/SixIsland_PokemonCenter_2F/scripts.inc b/data/maps/SixIsland_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..cb7a00ad217d --- /dev/null +++ b/data/maps/SixIsland_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +SixIsland_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +SixIsland_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +SixIsland_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +SixIsland_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/SixIsland_RuinValley/scripts.inc b/data/maps/SixIsland_RuinValley/scripts.inc new file mode 100644 index 000000000000..75595f8aed49 --- /dev/null +++ b/data/maps/SixIsland_RuinValley/scripts.inc @@ -0,0 +1,130 @@ +SixIsland_RuinValley_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, SixIsland_RuinValley_OnLoad + .byte 0 + +SixIsland_RuinValley_OnLoad:: + call_if_set FLAG_USED_CUT_ON_RUIN_VALLEY_BRAILLE, SixIsland_RuinValley_EventScript_OpenDottedHoleDoor + end + +SixIsland_RuinValley_EventScript_OpenDottedHoleDoor:: + setmetatile 24, 24, METATILE_SeviiIslands67_DottedHoleDoor_Open, 0 + return + +SixIsland_RuinValley_EventScript_Scientist:: + lock + msgbox SixIsland_RuinValley_Text_CantFigureOutHowToGetInside + applymovement LOCALID_RUIN_VALLEY_SCIENTIST, Common_Movement_FacePlayer + waitmovement 0 + msgbox SixIsland_RuinValley_Text_IFoundThisPlace + applymovement LOCALID_RUIN_VALLEY_SCIENTIST, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +SixIsland_RuinValley_EventScript_DottedHoleDoor:: + lockall + goto_if_set FLAG_USED_CUT_ON_RUIN_VALLEY_BRAILLE, SixIsland_RuinValley_EventScript_DottedHoleDoorOpen + msgbox SixIsland_RuinValley_Text_CheckDoorMoreThoroughly, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, SixIsland_RuinValley_EventScript_IgnoreDottedHoleDoor + msgbox SixIsland_RuinValley_Text_SeveralDotsOnTheDoor + braillemsgbox Braille_Text_Cut + releaseall + end + +SixIsland_RuinValley_EventScript_DottedHoleDoorOpen:: + msgbox SixIsland_RuinValley_Text_DoorIsOpen + releaseall + end + +SixIsland_RuinValley_EventScript_IgnoreDottedHoleDoor:: + msgbox SixIsland_RuinValley_Text_LeftDoorAlone + releaseall + end + +SixIsland_RuinValley_Text_CantFigureOutHowToGetInside:: + .string "I can't figure out how I'm supposed\n" + .string "to get inside.$" + +SixIsland_RuinValley_Text_IFoundThisPlace:: + .string "Let me tell you, I found this\n" + .string "place.\p" + .string "Don't look so envious, will you?$" + +SixIsland_RuinValley_Text_CheckDoorMoreThoroughly:: + .string "The door doesn't budge at all.\n" + .string "Check it more thoroughly?$" + +SixIsland_RuinValley_Text_LeftDoorAlone:: + .string "{PLAYER} left the door alone.$" + +SixIsland_RuinValley_Text_SeveralDotsOnTheDoor:: + .string "On closer inspection, there are\n" + .string "several dots on the door…$" + +SixIsland_RuinValley_Text_DoorIsOpen:: + .string "The door is open.$" + +SixIsland_RuinValley_Text_StanlyIntro:: + .string "There appear to be many secrets\n" + .string "still unsolved in this world.$" + +SixIsland_RuinValley_Text_StanlyDefeat:: + .string "Hmm…$" + +SixIsland_RuinValley_Text_StanlyPostBattle:: + .string "I suggest to you that you, too,\n" + .string "give a thought to the secrets and\l" + .string "mysteries of our world once a day.$" + +SixIsland_RuinValley_Text_FosterIntro:: + .string "I'm curious, what compelled you to\n" + .string "come here?$" + +SixIsland_RuinValley_Text_FosterDefeat:: + .string "It's been so long since I battled,\n" + .string "my instincts are off.$" + +SixIsland_RuinValley_Text_FosterPostBattle:: + .string "There are several ruins on the\n" + .string "SEVII ISLANDS.\p" + .string "The majority of them date back\n" + .string "a long way.$" + +SixIsland_RuinValley_Text_LarryIntro:: + .string "It's been said that there are\n" + .string "mysterious stones on this island.\p" + .string "I suspect it has something to do\n" + .string "with the ruins here.$" + +SixIsland_RuinValley_Text_LarryDefeat:: + .string "Oh, interesting.$" + +SixIsland_RuinValley_Text_LarryPostBattle:: + .string "Those ruins over there…\p" + .string "I haven't had any luck in finding\n" + .string "how I can get inside.$" + +SixIsland_RuinValley_Text_DarylIntro:: + .string "A battle with you, so high up!$" + +SixIsland_RuinValley_Text_DarylDefeat:: + .string "Oh, the heartbreak of losing so\n" + .string "easily to you!$" + +SixIsland_RuinValley_Text_DarylPostBattle:: + .string "Experience the joy of climbing!$" + +SixIsland_RuinValley_Text_HectorIntro:: + .string "I'm pretty familiar with the land\n" + .string "around these parts.$" + +SixIsland_RuinValley_Text_HectorDefeat:: + .string "You don't need to be so pushy.\n" + .string "I'll be happy to tell you.$" + +SixIsland_RuinValley_Text_HectorPostBattle:: + .string "The door to the ruins…\n" + .string "It has these strange patterns\l" + .string "engraved on the outside.\p" + .string "I don't know what they mean,\n" + .string "though.$" diff --git a/data/maps/SixIsland_WaterPath/scripts.inc b/data/maps/SixIsland_WaterPath/scripts.inc new file mode 100644 index 000000000000..b89ea41fc0d7 --- /dev/null +++ b/data/maps/SixIsland_WaterPath/scripts.inc @@ -0,0 +1,113 @@ +SixIsland_WaterPath_MapScripts:: + .byte 0 + +SixIsland_WaterPath_EventScript_HornWantedSign:: + msgbox SixIsland_WaterPath_Text_WantedUltimateHorn, MSGBOX_SIGN + end + +SixIsland_WaterPath_EventScript_RouteSign:: + msgbox SixIsland_WaterPath_Text_RouteSign, MSGBOX_SIGN + end + +SixIsland_WaterPath_Text_RoseIntro:: + .string "I let a pleasant breeze lead me\n" + .string "all the way here.$" + +SixIsland_WaterPath_Text_RoseDefeat:: + .string "Giggle… You're so cute when you're\n" + .string "determined.$" + +SixIsland_WaterPath_Text_RosePostBattle:: + .string "I want to go to the woods over\n" + .string "there, but…\p" + .string "There are lots of BUG POKéMON.\n" + .string "They scare me a little.$" + +SixIsland_WaterPath_Text_EdwardIntro:: + .string "I'm practicing in secret so no one\n" + .string "can see me.$" + +SixIsland_WaterPath_Text_EdwardDefeat:: + .string "Nobody saw me losing, right?$" + +SixIsland_WaterPath_Text_EdwardPostBattle:: + .string "As a performer, I don't want people\n" + .string "to know about the effort I put in.$" + +SixIsland_WaterPath_Text_SamirIntro:: + .string "What, you're suggesting that you're\n" + .string "sick of seeing SWIMMERS like me?\p" + .string "Aww, don't be hatin'!$" + +SixIsland_WaterPath_Text_SamirDefeat:: + .string "Oh, no, no, no.$" + +SixIsland_WaterPath_Text_SamirPostBattle:: + .string "I couldn't lift the stigma of being\n" + .string "a SWIMMER…$" + +SixIsland_WaterPath_Text_DeniseIntro:: + .string "My boyfriend's always busy, so I\n" + .string "come swimming by myself.$" + +SixIsland_WaterPath_Text_DeniseDefeat:: + .string "Awww, I knew this would happen!$" + +SixIsland_WaterPath_Text_DenisePostBattle:: + .string "When I can't be with my boyfriend,\n" + .string "I spend time with the POKéMON he\l" + .string "gave me.$" + +SixIsland_WaterPath_Text_EarlIntro:: + .string "Tell me, where are the mountains\n" + .string "around these parts?$" + +SixIsland_WaterPath_Text_EarlDefeat:: + .string "I lost my way while I was busy\n" + .string "battling!$" + +SixIsland_WaterPath_Text_EarlPostBattle:: + .string "Aren't there any mountains around\n" + .string "these parts?$" + +SixIsland_WaterPath_Text_MiuIntro:: + .string "MIU: Hello, POKéMON!\n" + .string "It's time to play!$" + +SixIsland_WaterPath_Text_MiuDefeat:: + .string "MIU: Oh, no!\n" + .string "Mommy!$" + +SixIsland_WaterPath_Text_MiuPostBattle:: + .string "MIU: It makes me all sad inside\n" + .string "when we lose…$" + +SixIsland_WaterPath_Text_MiuNotEnoughMons:: + .string "MIU: MIA and I are TWINS.\n" + .string "We want to battle together.$" + +SixIsland_WaterPath_Text_MiaIntro:: + .string "MIA: Hello, POKéMON!\n" + .string "It's time to battle!$" + +SixIsland_WaterPath_Text_MiaDefeat:: + .string "MIA: You're mean!\n" + .string "You're bad for winning!$" + +SixIsland_WaterPath_Text_MiaPostBattle:: + .string "MIA: Ohh…\n" + .string "I'm sorry, my POKéMON…$" + +SixIsland_WaterPath_Text_MiaNotEnoughMons:: + .string "MIA: Oh, you only have one\n" + .string "POKéMON?\p" + .string "Don't you feel lonesome?$" + +SixIsland_WaterPath_Text_WantedUltimateHorn:: + .string "Wanted!\n" + .string "The Ultimate Horn!$" + +SixIsland_WaterPath_Text_RouteSign:: + .string "WATER PATH\n" + .string "Leads to RUIN VALLEY$" + diff --git a/data/maps/SixIsland_WaterPath_House1/scripts.inc b/data/maps/SixIsland_WaterPath_House1/scripts.inc new file mode 100644 index 000000000000..0160705053cc --- /dev/null +++ b/data/maps/SixIsland_WaterPath_House1/scripts.inc @@ -0,0 +1,127 @@ +SixIsland_WaterPath_House1_MapScripts:: + .byte 0 + +SixIsland_WaterPath_House1_EventScript_Beauty:: + lock + faceplayer + setvar VAR_0x8004, SPECIES_HERACROSS + specialvar VAR_RESULT, DoesPlayerPartyContainSpecies + goto_if_eq VAR_RESULT, FALSE, SixIsland_WaterPath_House1_EventScript_NoHeracrossInParty + special GetHeracrossSizeRecordInfo + msgbox SixIsland_WaterPath_House1_Text_MayIMeasureHeracross + special ChoosePartyMon + waitstate + copyvar VAR_RESULT, VAR_0x8004 + goto_if_ge VAR_RESULT, PARTY_SIZE, SixIsland_WaterPath_House1_EventScript_DontShowMon + special CompareHeracrossSize + goto_if_eq VAR_RESULT, 1, SixIsland_WaterPath_House1_EventScript_ShownNonHeracross + goto_if_eq VAR_RESULT, 2, SixIsland_WaterPath_House1_EventScript_ShownSmallHeracross + goto_if_eq VAR_RESULT, 3, SixIsland_WaterPath_House1_EventScript_ShownBigHeracross + goto_if_eq VAR_RESULT, 4, SixIsland_WaterPath_House1_EventScript_ShownTiedHeracross + release + end + +SixIsland_WaterPath_House1_EventScript_NoHeracrossInParty:: + msgbox SixIsland_WaterPath_House1_Text_LoveItNeedItHeracross + release + end + +SixIsland_WaterPath_House1_EventScript_DontShowMon:: + release + end + +SixIsland_WaterPath_House1_EventScript_ShownNonHeracross:: + msgbox SixIsland_WaterPath_House1_Text_ThisWontDo + release + end + +SixIsland_WaterPath_House1_EventScript_ShownSmallHeracross:: + goto_if_unset FLAG_GOT_NEST_BALL_FROM_WATER_PATH_HOUSE_1, SixIsland_WaterPath_House1_EventScript_ShownBigHeracross + msgbox SixIsland_WaterPath_House1_Text_ItsXInchesYInchesWasBiggest + release + end + +SixIsland_WaterPath_House1_EventScript_ShownTiedHeracross:: + goto_if_unset FLAG_GOT_NEST_BALL_FROM_WATER_PATH_HOUSE_1, SixIsland_WaterPath_House1_EventScript_ShownBigHeracross + msgbox SixIsland_WaterPath_House1_Text_ItsXInchesSameAsBefore + release + end + +SixIsland_WaterPath_House1_EventScript_ShownBigHeracross:: + setflag FLAG_GOT_NEST_BALL_FROM_WATER_PATH_HOUSE_1 + msgbox SixIsland_WaterPath_House1_Text_ItsXInchesDeserveReward + giveitem ITEM_NEST_BALL + goto_if_eq VAR_RESULT, FALSE, SixIsland_WaterPath_House1_EventScript_NoRoomForNestBall + msgbox SixIsland_WaterPath_House1_Text_WantToSeeBiggerOne + release + end + +SixIsland_WaterPath_House1_EventScript_NoRoomForNestBall:: + msgbox SixIsland_WaterPath_House1_Text_YourBagIsFull + release + end + +SixIsland_WaterPath_House1_EventScript_SizeRecord:: + lockall + goto_if_set FLAG_GOT_NEST_BALL_FROM_WATER_PATH_HOUSE_1, SixIsland_WaterPath_House1_EventScript_SizeRecordNonEmpty + msgbox SixIsland_WaterPath_House1_Text_BlankChartOfSomeSort + releaseall + end + +SixIsland_WaterPath_House1_EventScript_SizeRecordNonEmpty:: + special GetHeracrossSizeRecordInfo + msgbox SixIsland_WaterPath_House1_Text_BiggestHeracrossIsXInches + releaseall + end + +SixIsland_WaterPath_House1_Text_LoveItNeedItHeracross:: + .string "Hera, hera, HERACROSS!\n" + .string "Big and shiny, it's the bug boss!\l" + .string "Love it, need it, HERACROSS!$" + +SixIsland_WaterPath_House1_Text_MayIMeasureHeracross:: + .string "Eeeeek!\n" + .string "That's a HERACROSS!\p" + .string "Please, please, may I measure how\n" + .string "big it is?$" + +SixIsland_WaterPath_House1_Text_ItsXInchesDeserveReward:: + .string "Eeeek, it's {STR_VAR_2} inches!\n" + .string "I've never seen anything like this!\l" + .string "You deserve a reward!$" + +SixIsland_WaterPath_House1_Text_WantToSeeBiggerOne:: + .string "I want to see a much, much bigger\n" + .string "HERACROSS than that one.\p" + .string "Oh, how I adore them, big\n" + .string "HERACROSS!$" + +SixIsland_WaterPath_House1_Text_ItsXInchesSameAsBefore:: + .string "Huh? This {STR_VAR_2}-inch measurement…\n" + .string "Oh, boo! It's the same as before.$" + +SixIsland_WaterPath_House1_Text_ItsXInchesYInchesWasBiggest:: + .string "Oh, it's just {STR_VAR_2} inches.\n" + .string "The HERACROSS before was bigger.\p" + .string "It was {STR_VAR_3} inches, the biggest\n" + .string "HERACROSS you've brought me.$" + +SixIsland_WaterPath_House1_Text_ThisWontDo:: + .string "Oh, no! This won't do!\p" + .string "HERACROSS looks much more macho\n" + .string "and cool, and has a lovely horn!$" + +SixIsland_WaterPath_House1_Text_YourBagIsFull:: + .string "Your BAG is full.\n" + .string "My reward won't fit.$" + +SixIsland_WaterPath_House1_Text_BiggestHeracrossIsXInches:: + .string "The biggest HERACROSS that I have\n" + .string "ever seen measured so far is:\p" + .string "{STR_VAR_3} inches!$" + +SixIsland_WaterPath_House1_Text_BlankChartOfSomeSort:: + .string "It's a blank chart of some sort.\p" + .string "It has spaces for writing in\n" + .string "records of some kind.$" + diff --git a/data/maps/SixIsland_WaterPath_House2/scripts.inc b/data/maps/SixIsland_WaterPath_House2/scripts.inc new file mode 100644 index 000000000000..1dbabaed77da --- /dev/null +++ b/data/maps/SixIsland_WaterPath_House2/scripts.inc @@ -0,0 +1,13 @@ +SixIsland_WaterPath_House2_MapScripts:: + .byte 0 + +SixIsland_WaterPath_House2_EventScript_Man:: + msgbox SixIsland_WaterPath_House2_Text_MyNeighborMeasuredMe, MSGBOX_NPC + end + +SixIsland_WaterPath_House2_Text_MyNeighborMeasuredMe:: + .string "My height is 67.0 inches on the\n" + .string "button.\p" + .string "I know it is this precisely because\n" + .string "my neighbor measured me.$" + diff --git a/data/maps/ThreeIsland/scripts.inc b/data/maps/ThreeIsland/scripts.inc new file mode 100644 index 000000000000..f3be17c802de --- /dev/null +++ b/data/maps/ThreeIsland/scripts.inc @@ -0,0 +1,554 @@ +ThreeIsland_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, ThreeIsland_OnTransition + .byte 0 + +ThreeIsland_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_THREE_ISLAND + call_if_set FLAG_RESCUED_LOSTELLE, ThreeIsland_EventScript_HideAntiBikers + call_if_eq VAR_MAP_SCENE_THREE_ISLAND, 4, ThreeIsland_EventScript_SetAntiBikersMovementAfterBikers + end + +ThreeIsland_EventScript_HideAntiBikers:: + setflag FLAG_HIDE_THREE_ISLAND_ANTIBIKERS + return + +ThreeIsland_EventScript_SetAntiBikersMovementAfterBikers:: + setobjectmovementtype LOCALID_THREE_ISLAND_ANTIBIKER1, MOVEMENT_TYPE_LOOK_AROUND + setobjectmovementtype LOCALID_THREE_ISLAND_ANTIBIKER2, MOVEMENT_TYPE_LOOK_AROUND + return + +ThreeIsland_EventScript_Biker:: + lock + setvar VAR_TEMP_1, 2 + call ThreeIsland_EventScript_BikerArgumentScene + release + end + +ThreeIsland_EventScript_AntiBiker1:: + lock + goto_if_set FLAG_GOT_FULL_RESTORE_FROM_THREE_ISLAND_DEFENDER, ThreeIsland_EventScript_AntiBiker1GotFullRestore + goto_if_eq VAR_MAP_SCENE_THREE_ISLAND, 4, ThreeIsland_EventScript_GiveFullRestore + setvar VAR_TEMP_1, 0 + call ThreeIsland_EventScript_BikerArgumentScene + release + end + +ThreeIsland_EventScript_AntiBiker1GotFullRestore:: + applymovement LOCALID_THREE_ISLAND_ANTIBIKER1, Common_Movement_FacePlayer + waitmovement 0 + msgbox ThreeIsland_Text_YouveGotImpressiveMons + release + end + +ThreeIsland_EventScript_GiveFullRestore:: + applymovement LOCALID_THREE_ISLAND_ANTIBIKER1, Common_Movement_FacePlayer + waitmovement 0 + msgbox ThreeIsland_Text_ThankYouOhYourMonGotHurt + checkitemspace ITEM_FULL_RESTORE + goto_if_eq VAR_RESULT, FALSE, ThreeIsland_EventScript_NoRoomForFullRestore + msgreceiveditem ThreeIsland_Text_GivenFullRestore, ITEM_FULL_RESTORE + additem ITEM_FULL_RESTORE + setflag FLAG_GOT_FULL_RESTORE_FROM_THREE_ISLAND_DEFENDER + msgbox ThreeIsland_Text_YouveGotImpressiveMons + release + end + +ThreeIsland_EventScript_NoRoomForFullRestore:: + msgbox ThreeIsland_Text_OhYourBagIsFull + release + end + +ThreeIsland_EventScript_BikerArgumentScene:: + call_if_eq VAR_TEMP_1, 1, ThreeIsland_EventScript_PlayerFaceLeft + call_if_eq VAR_TEMP_1, 2, ThreeIsland_EventScript_PlayerFaceLeft + applymovement LOCALID_THREE_ISLAND_ANTIBIKER1, ThreeIsland_Movement_SpeakRight + waitmovement 0 + msgbox ThreeIsland_Text_GoBackToKanto + call_if_eq VAR_TEMP_1, 0, ThreeIsland_EventScript_PlayerFaceRight + call_if_eq VAR_TEMP_1, 1, ThreeIsland_EventScript_PlayerFaceRight + call_if_eq VAR_TEMP_1, 2, ThreeIsland_EventScript_PlayerFaceBiker + applymovement LOCALID_THREE_ISLAND_BIKER1, ThreeIsland_Movement_SpeakLeft + waitmovement 0 + msgbox ThreeIsland_Text_BossIsOnHisWay + call_if_eq VAR_TEMP_1, 0, ThreeIsland_EventScript_PlayerFaceUp + call_if_eq VAR_TEMP_1, 1, ThreeIsland_EventScript_PlayerFaceUp + call_if_eq VAR_TEMP_1, 2, ThreeIsland_EventScript_PlayerFaceAntiBiker + applymovement LOCALID_THREE_ISLAND_ANTIBIKER2, ThreeIsland_Movement_SpeakRight + waitmovement 0 + msgbox ThreeIsland_Text_GetOffIslandNow + call_if_eq VAR_TEMP_1, 0, ThreeIsland_EventScript_PlayerFaceRight + call_if_eq VAR_TEMP_1, 1, ThreeIsland_EventScript_PlayerFaceRight + call_if_eq VAR_TEMP_1, 2, ThreeIsland_EventScript_PlayerFaceBiker + applymovement LOCALID_THREE_ISLAND_BIKER3, ThreeIsland_Movement_SpeakLeft + waitmovement 0 + msgbox ThreeIsland_Text_WhosGonnaMakeMe + return + +ThreeIsland_EventScript_PlayerFaceUp:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + return + +@ Unused +ThreeIsland_EventScript_PlayerFaceDown:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + return + +ThreeIsland_EventScript_PlayerFaceLeft:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + return + +ThreeIsland_EventScript_PlayerFaceRight:: + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + return + +ThreeIsland_EventScript_PlayerFaceBiker:: + getplayerxy VAR_0x8004, VAR_0x8005 + goto_if_ge VAR_0x8004, 9, ThreeIsland_EventScript_PlayerFaceUp + goto ThreeIsland_EventScript_PlayerFaceRight + end + +ThreeIsland_EventScript_PlayerFaceAntiBiker:: + getplayerxy VAR_0x8004, VAR_0x8005 + goto_if_ge VAR_0x8004, 9, ThreeIsland_EventScript_PlayerFaceLeft + goto ThreeIsland_EventScript_PlayerFaceUp + end + +ThreeIsland_EventScript_AntiBiker2:: + lock + goto_if_eq VAR_MAP_SCENE_THREE_ISLAND, 4, ThreeIsland_EventScript_AntiBiker2BikersGone + setvar VAR_TEMP_1, 1 + call ThreeIsland_EventScript_BikerArgumentScene + release + end + +ThreeIsland_EventScript_AntiBiker2BikersGone:: + applymovement LOCALID_THREE_ISLAND_ANTIBIKER2, Common_Movement_FacePlayer + waitmovement 0 + msgbox ThreeIsland_Text_LostelleWentOffTowardsBondBridge + release + end + +ThreeIsland_EventScript_BikerBossIntroTrigger:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_THREE_ISLAND_ANTIBIKER1, ThreeIsland_Movement_SpeakRight + waitmovement 0 + msgbox ThreeIsland_Text_AreYouBossGoBackToKanto + applymovement LOCALID_PAXTON, ThreeIsland_Movement_SpeakLeft + waitmovement 0 + msgbox ThreeIsland_Text_JustGotHerePal + applymovement LOCALID_THREE_ISLAND_ANTIBIKER1, ThreeIsland_Movement_SpeakRight + waitmovement 0 + msgbox ThreeIsland_Text_FollowersRaisingHavoc + applymovement LOCALID_PAXTON, ThreeIsland_Movement_SpeakLeft + waitmovement 0 + msgbox ThreeIsland_Text_OughtToBeThankingUs + applymovement LOCALID_THREE_ISLAND_ANTIBIKER1, ThreeIsland_Movement_SpeakRight + waitmovement 0 + msgbox ThreeIsland_Text_YouCowardsToughInPack + setvar VAR_MAP_SCENE_THREE_ISLAND, 3 + releaseall + end + +ThreeIsland_Movement_SpeakLeft:: + walk_in_place_left + step_end + +ThreeIsland_Movement_SpeakRight:: + walk_in_place_right + step_end + +ThreeIsland_EventScript_BattleBikersTriggerLeft:: + lockall + setvar VAR_TEMP_1, 0 + goto ThreeIsland_EventScript_BattleBikersScene + end + +ThreeIsland_EventScript_BattleBikersTriggerMidLeft:: + lockall + setvar VAR_TEMP_1, 1 + goto ThreeIsland_EventScript_BattleBikersScene + end + +ThreeIsland_EventScript_BattleBikersTriggerMid:: + lockall + setvar VAR_TEMP_1, 2 + goto ThreeIsland_EventScript_BattleBikersScene + end + +ThreeIsland_EventScript_BattleBikersTriggerMidRight:: + lockall + setvar VAR_TEMP_1, 3 + goto ThreeIsland_EventScript_BattleBikersScene + end + +ThreeIsland_EventScript_BattleBikersTriggerRight:: + lockall + setvar VAR_TEMP_1, 4 + goto ThreeIsland_EventScript_BattleBikersScene + end + +ThreeIsland_EventScript_BattleBikersScene:: + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_THREE_ISLAND_BIKER1, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + playse SE_PIN + applymovement LOCALID_THREE_ISLAND_BIKER1, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_THREE_ISLAND_BIKER1, Common_Movement_Delay48 + waitmovement 0 + applymovement LOCALID_THREE_ISLAND_BIKER1, ThreeIsland_Movement_BikerApproach + waitmovement 0 + playbgm MUS_RG_ENCOUNTER_BOY, 0 + msgbox ThreeIsland_Text_WannaMakeSomethingOfYourStaring, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, ThreeIsland_EventScript_LeaveBikersAlone + msgbox ThreeIsland_Text_Biker1Intro + setvar VAR_LAST_TALKED, LOCALID_THREE_ISLAND_BIKER1 + trainerbattle_no_intro TRAINER_BIKER_GOON, ThreeIsland_Text_Biker1Defeat + applymovement LOCALID_THREE_ISLAND_BIKER1, ThreeIsland_Movement_BikerSpeak + waitmovement 0 + msgbox ThreeIsland_Text_Biker1PostBattle + closemessage + applymovement LOCALID_THREE_ISLAND_BIKER2, ThreeIsland_Movement_BikerApproach + waitmovement 0 + playbgm MUS_RG_ENCOUNTER_BOY, 0 + msgbox ThreeIsland_Text_Biker2Intro + setvar VAR_LAST_TALKED, LOCALID_THREE_ISLAND_BIKER2 + trainerbattle_no_intro TRAINER_BIKER_GOON_2, ThreeIsland_Text_Biker2Defeat + applymovement LOCALID_THREE_ISLAND_BIKER2, ThreeIsland_Movement_BikerSpeak + waitmovement 0 + msgbox ThreeIsland_Text_Biker2PostBattle + closemessage + applymovement LOCALID_THREE_ISLAND_BIKER3, ThreeIsland_Movement_BikerApproach + waitmovement 0 + playbgm MUS_RG_ENCOUNTER_BOY, 0 + msgbox ThreeIsland_Text_Biker3Intro + setvar VAR_LAST_TALKED, LOCALID_THREE_ISLAND_BIKER3 + trainerbattle_no_intro TRAINER_BIKER_GOON_3, ThreeIsland_Text_Biker3Defeat + applymovement LOCALID_THREE_ISLAND_BIKER3, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + applymovement LOCALID_THREE_ISLAND_BIKER4, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_THREE_ISLAND_BIKER5, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + msgbox ThreeIsland_Text_Biker3PostBattle + closemessage + delay 45 + call_if_eq VAR_TEMP_1, 0, ThreeIsland_EventScript_PaxtonApproachLeft + call_if_eq VAR_TEMP_1, 1, ThreeIsland_EventScript_PaxtonApproachMidLeft + call_if_eq VAR_TEMP_1, 2, ThreeIsland_EventScript_PaxtonApproachMid + call_if_eq VAR_TEMP_1, 3, ThreeIsland_EventScript_PaxtonApproachMidRight + call_if_eq VAR_TEMP_1, 4, ThreeIsland_EventScript_PaxtonApproachRight + playbgm MUS_RG_ENCOUNTER_BOY, 0 + msgbox ThreeIsland_Text_PaxtonIntro + setvar VAR_LAST_TALKED, LOCALID_PAXTON + trainerbattle_no_intro TRAINER_CUE_BALL_PAXTON, ThreeIsland_Text_PaxtonDefeat + msgbox ThreeIsland_Text_PaxtonPostBattle + closemessage + fadescreenswapbuffers FADE_TO_BLACK + removeobject LOCALID_PAXTON + removeobject LOCALID_THREE_ISLAND_BIKER1 + removeobject LOCALID_THREE_ISLAND_BIKER2 + removeobject LOCALID_THREE_ISLAND_BIKER3 + removeobject LOCALID_THREE_ISLAND_BIKER4 + removeobject LOCALID_THREE_ISLAND_BIKER5 + removeobject LOCALID_THREE_ISLAND_BIKER6 + fadescreenswapbuffers FADE_FROM_BLACK + setvar VAR_MAP_SCENE_THREE_ISLAND, 4 + releaseall + end + +ThreeIsland_EventScript_PaxtonApproachLeft:: + applymovement LOCALID_THREE_ISLAND_BIKER3, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PAXTON, ThreeIsland_Movement_PaxtonApproachLeft + waitmovement 0 + return + +ThreeIsland_EventScript_PaxtonApproachMidLeft:: + applymovement LOCALID_THREE_ISLAND_BIKER3, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PAXTON, ThreeIsland_Movement_PaxtonApproachMidLeft + waitmovement 0 + return + +ThreeIsland_EventScript_PaxtonApproachMid:: + applymovement LOCALID_THREE_ISLAND_BIKER3, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PAXTON, ThreeIsland_Movement_PaxtonApproachMid + applymovement LOCALID_PLAYER, ThreeIsland_Movement_PlayerFacePaxton + waitmovement 0 + return + +ThreeIsland_EventScript_PaxtonApproachMidRight:: + applymovement LOCALID_THREE_ISLAND_BIKER3, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PLAYER, ThreeIsland_Movement_PlayerFacePaxton + applymovement LOCALID_PAXTON, ThreeIsland_Movement_PaxtonApproachMidRight + waitmovement 0 + return + +ThreeIsland_EventScript_PaxtonApproachRight:: + applymovement LOCALID_THREE_ISLAND_BIKER3, Common_Movement_WalkInPlaceFasterDown + applymovement LOCALID_PLAYER, ThreeIsland_Movement_PlayerFacePaxton + applymovement LOCALID_PAXTON, ThreeIsland_Movement_PaxtonApproachRight + waitmovement 0 + return + +ThreeIsland_EventScript_LeaveBikersAlone:: + msgbox ThreeIsland_Text_ThatsSmart + closemessage + applymovement LOCALID_PLAYER, ThreeIsland_Movement_PlayerLeaveBikers + waitmovement 0 + applymovement LOCALID_THREE_ISLAND_BIKER1, ThreeIsland_Movement_Biker1ReturnToPack + waitmovement 0 + fadedefaultbgm + releaseall + end + +ThreeIsland_Movement_PlayerLeaveBikers:: + walk_down + step_end + +ThreeIsland_Movement_BikerApproach:: + walk_down + step_end + +ThreeIsland_Movement_Biker1ReturnToPack:: + walk_up + walk_in_place_faster_left + step_end + +ThreeIsland_Movement_BikerSpeak:: + walk_in_place_down + step_end + +ThreeIsland_Movement_PaxtonApproachLeft:: + walk_down + walk_left + walk_in_place_faster_down + step_end + +ThreeIsland_Movement_PaxtonApproachMidLeft:: + walk_down + step_end + +ThreeIsland_Movement_PaxtonApproachMid:: + walk_down + walk_down + walk_in_place_faster_right + step_end + +ThreeIsland_Movement_PlayerFacePaxton:: + delay_16 + delay_16 + walk_in_place_faster_left + step_end + +ThreeIsland_Movement_PaxtonApproachMidRight:: + walk_down + walk_down + walk_right + walk_in_place_faster_right + step_end + +ThreeIsland_Movement_PaxtonApproachRight:: + walk_down + walk_down + walk_right + walk_right + walk_in_place_faster_right + step_end + +ThreeIsland_EventScript_Woman:: + msgbox ThreeIsland_Text_WouldntWantToSeeBikersHereAgain, MSGBOX_NPC + end + +ThreeIsland_EventScript_LittleBoy:: + msgbox ThreeIsland_Text_WhenDodouEvolvesGoingToPlayGame, MSGBOX_NPC + end + +ThreeIsland_EventScript_Doduo:: + lock + faceplayer + waitse + playmoncry SPECIES_DODUO, CRY_MODE_NORMAL + msgbox ThreeIsland_Text_Doduo + waitmoncry + release + end + +ThreeIsland_EventScript_IslandSign:: + msgbox ThreeIsland_Text_IslandSign, MSGBOX_SIGN + end + +ThreeIsland_EventScript_Biker6:: + msgbox ThreeIsland_Text_IslandBelongsToUs, MSGBOX_NPC + end + +ThreeIsland_Text_IslandSign:: + .string "THREE ISLAND\n" + .string "Kin Island of Family Bonding$" + +ThreeIsland_Text_IslandBelongsToUs:: + .string "Hyahoo!\p" + .string "From this day on, this island\n" + .string "belongs to us!$" + +ThreeIsland_Text_GoBackToKanto:: + .string "We don't need you people bringing\n" + .string "your noise and trouble here!\p" + .string "We're asking you to go back to\n" + .string "KANTO!$" + +ThreeIsland_Text_BossIsOnHisWay:: + .string "Hey, go cry somewhere else.\n" + .string "Our boss is on his way.\p" + .string "When he gets here, we'll give you\n" + .string "a k-rad motorbike show you won't\l" + .string "soon forget!$" + +ThreeIsland_Text_GetOffIslandNow:: + .string "W-what!? Not on your life!\n" + .string "Get off the island now!$" + +ThreeIsland_Text_WhosGonnaMakeMe:: + .string "Who's gonna make me?$" + +ThreeIsland_Text_AreYouBossGoBackToKanto:: + .string "Are you the boss?\n" + .string "Go back to KANTO right now!$" + +ThreeIsland_Text_JustGotHerePal:: + .string "Hah?\p" + .string "I just got here, pal.\p" + .string "What's with the hostile attitude?\n" + .string "It's mighty cold of you!$" + +ThreeIsland_Text_FollowersRaisingHavoc:: + .string "Your gang of followers have been\n" + .string "raising havoc on their bikes.\p" + .string "Do you have any idea how much\n" + .string "trouble they've caused us on the\l" + .string "island?$" + +ThreeIsland_Text_OughtToBeThankingUs:: + .string "No, man, I don't get it at all.\p" + .string "Look at this place.\n" + .string "What do you do for entertainment?\p" + .string "You ought to be thanking us for\n" + .string "livening up this sleepy village.\p" + .string "But hey, if you insist, you can try\n" + .string "making us leave.$" + +ThreeIsland_Text_YouCowardsToughInPack:: + .string "Grr… You cowards…\n" + .string "So tough in a pack…$" + +ThreeIsland_Text_WannaMakeSomethingOfYourStaring:: + .string "You, what are you staring at?\n" + .string "Don't you know it's not polite?\p" + .string "You wanna make something of it\n" + .string "or what?$" + +ThreeIsland_Text_ThatsSmart:: + .string "That's smart.\n" + .string "Keep your nose out of this.$" + +ThreeIsland_Text_Biker1Intro:: + .string "Heh, I like your guts.\n" + .string "You'll be losing money to me, but…$" + +ThreeIsland_Text_Biker1Defeat:: + .string "Wha…\n" + .string "What is this kid?!$" + +ThreeIsland_Text_Biker1PostBattle:: + .string "Aww, man…\n" + .string "Don't you dare laugh!$" + +ThreeIsland_Text_Biker2Intro:: + .string "Aren't you from KANTO?\n" + .string "You should be on our side!$" + +ThreeIsland_Text_Biker2Defeat:: + .string "Stop fooling around!$" + +ThreeIsland_Text_Biker2PostBattle:: + .string "What's the matter with you,\n" + .string "getting all hot like that?\p" + .string "Totally uncool, man!$" + +ThreeIsland_Text_Biker3Intro:: + .string "We invited the boss out here,\n" + .string "but you had to mess it up!\p" + .string "You embarrassed us, man!$" + +ThreeIsland_Text_Biker3Defeat:: + .string "… … … … … …$" + +ThreeIsland_Text_Biker3PostBattle:: + .string "Boss, I'm telling you, you've gotta\n" + .string "do something about this kid!$" + +ThreeIsland_Text_PaxtonIntro:: + .string "I've been watching you, and I'd say\n" + .string "you've done enough.\p" + .string "What are you, their friend or\n" + .string "something?\p" + .string "Then I guess you'll be battling me\n" + .string "in their place.$" + +ThreeIsland_Text_PaxtonDefeat:: + .string "All right, enough!\n" + .string "We'll leave like you wanted!\p" + .string "We'll be happy to see the last of\n" + .string "this boring island!$" + +ThreeIsland_Text_PaxtonPostBattle:: + .string "Humph! Yeah, go right on hanging\n" + .string "around with these hayseeds!$" + +ThreeIsland_Text_ThankYouOhYourMonGotHurt:: + .string "Thank you! Those goons were\n" + .string "nothing but bad trouble.\p" + .string "Oh, look, your POKéMON got hurt\n" + .string "on my account.$" + +ThreeIsland_Text_GivenFullRestore:: + .string "{PLAYER} was given\n" + .string "a FULL RESTORE.$" + +ThreeIsland_Text_OhYourBagIsFull:: + .string "Oh?\n" + .string "Your BAG is full.$" + +ThreeIsland_Text_YouveGotImpressiveMons:: + .string "You've got seriously impressive\n" + .string "POKéMON with you.$" + +ThreeIsland_Text_LostelleWentOffTowardsBondBridge:: + .string "It'd be fantastic if someone as\n" + .string "strong as you lived here.\p" + .string "I hope you'll at least stay here\n" + .string "a while.\p" + .string "…I beg your pardon?\n" + .string "You're looking for LOSTELLE?\p" + .string "LOSTELLE went off towards BOND\n" + .string "BRIDGE a while ago.$" + +ThreeIsland_Text_WouldntWantToSeeBikersHereAgain:: + .string "THREE ISLAND is actually the most\n" + .string "populous of the islands here.\p" + .string "Still, it could be less sleepy.\p" + .string "But I wouldn't want to see goons\n" + .string "like those BIKERS here again.$" + +ThreeIsland_Text_WhenDodouEvolvesGoingToPlayGame:: + .string "I'm going to train my DODUO in the\n" + .string "BERRY FOREST.\p" + .string "When it evolves, I'm going to play\n" + .string "a game on TWO ISLAND.$" + +ThreeIsland_Text_Doduo:: + .string "DODUO: Gigiih!$" + diff --git a/data/maps/ThreeIsland_BerryForest/scripts.inc b/data/maps/ThreeIsland_BerryForest/scripts.inc new file mode 100644 index 000000000000..998ed57ed3d0 --- /dev/null +++ b/data/maps/ThreeIsland_BerryForest/scripts.inc @@ -0,0 +1,104 @@ +ThreeIsland_BerryForest_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, ThreeIsland_BerryForest_OnTransition + .byte 0 + +ThreeIsland_BerryForest_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_THREE_ISLAND_BERRY_FOREST + setescapewarp MAP_THREE_ISLAND_BOND_BRIDGE, 12, 6 + end + +ThreeIsland_BerryForest_EventScript_Lostelle:: + lock + faceplayer + msgbox ThreeIsland_BerryForest_Text_HelpScaryPokemon + playse SE_PIN + applymovement LOCALID_BERRY_FOREST_LOSTELLE, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_BERRY_FOREST_LOSTELLE, ThreeIsland_BerryForest_Movement_LostelleLookAround + waitmovement 0 + msgbox ThreeIsland_BerryForest_Text_HereItComesAgain + waitse + playmoncry SPECIES_HYPNO, CRY_MODE_ENCOUNTER + waitmoncry + setwildbattle SPECIES_HYPNO, 30 + dowildbattle + applymovement LOCALID_BERRY_FOREST_LOSTELLE, Common_Movement_FacePlayer + waitmovement 0 + msgbox ThreeIsland_BerryForest_Text_ThankYouHaveThis + giveitem ITEM_IAPAPA_BERRY + call_if_eq VAR_RESULT, FALSE, ThreeIsland_BerryForest_EventScript_NoRoomForBerry + special GetPlayerBigGuyGirlString + msgbox ThreeIsland_BerryForest_Text_LetsGoHome + closemessage + setflag FLAG_RESCUED_LOSTELLE + setflag FLAG_HIDE_LOSTELLE_IN_BERRY_FOREST + setvar VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 2 + clearflag FLAG_HIDE_TWO_ISLAND_GAME_CORNER_LOSTELLE + warp MAP_TWO_ISLAND_JOYFUL_GAME_CORNER, 6, 6 + waitstate + release + end + +ThreeIsland_BerryForest_EventScript_NoRoomForBerry:: + msgbox ThreeIsland_BerryForest_Text_BerryPouchIsFull + return + +ThreeIsland_BerryForest_Movement_LostelleLookAround:: + walk_in_place_faster_left + delay_16 + walk_in_place_faster_right + delay_8 + walk_in_place_faster_left + step_end + +ThreeIsland_BerryForest_EventScript_WelcomeSign:: + msgbox ThreeIsland_BerryForest_Text_WelcomeToBerryForest, MSGBOX_SIGN + end + +ThreeIsland_BerryForest_EventScript_BewareSign:: + msgbox ThreeIsland_BerryForest_Text_BewareWildBerryLovingMons, MSGBOX_SIGN + end + +ThreeIsland_BerryForest_Text_HelpScaryPokemon:: + .string "LOSTELLE: Whimper… Sniff…\n" + .string "Oh! Please, help!\p" + .string "A scary POKéMON appeared there\n" + .string "a little while ago.\p" + .string "It kept scaring.\n" + .string "It made LOSTELLE scared.\p" + .string "I'm too scared to move!\n" + .string "But I want to go home…$" + +ThreeIsland_BerryForest_Text_HereItComesAgain:: + .string "Oh! Here it comes again!\n" + .string "No! Go away! It's scaring me!\p" + .string "Waaaaaaah!\n" + .string "I want my daddy!$" + +ThreeIsland_BerryForest_Text_ThankYouHaveThis:: + .string "Ohh! That was so scary!\n" + .string "Thank you!\p" + .string "LOSTELLE came to pick some\n" + .string "BERRIES.\p" + .string "You can have this!$" + +ThreeIsland_BerryForest_Text_LetsGoHome:: + .string "What's your name?\p" + .string "LOSTELLE's scared, so can I go\n" + .string "with you to my daddy's house?\p" + .string "Okay!\n" + .string "Let's go home!$" + +ThreeIsland_BerryForest_Text_BerryPouchIsFull:: + .string "Your BERRY POUCH is full.\n" + .string "I guess you don't want this.$" + +ThreeIsland_BerryForest_Text_WelcomeToBerryForest:: + .string "Welcome to the BERRY FOREST\p" + .string "Be friendly and share BERRIES with\n" + .string "others and POKéMON.$" + +ThreeIsland_BerryForest_Text_BewareWildBerryLovingMons:: + .string "Beware of wild, BERRY-loving\n" + .string "POKéMON!$" + diff --git a/data/maps/ThreeIsland_BondBridge/scripts.inc b/data/maps/ThreeIsland_BondBridge/scripts.inc new file mode 100644 index 000000000000..732d237e5fe3 --- /dev/null +++ b/data/maps/ThreeIsland_BondBridge/scripts.inc @@ -0,0 +1,112 @@ +ThreeIsland_BondBridge_MapScripts:: + .byte 0 + +ThreeIsland_BondBridge_EventScript_BerryForestSign:: + msgbox ThreeIsland_BondBridge_Text_BerryForestAhead, MSGBOX_SIGN + end + +ThreeIsland_BondBridge_EventScript_BondBridgeSign:: + msgbox ThreeIsland_BondBridge_Text_BondBridgeSign, MSGBOX_SIGN + end + +ThreeIsland_BondBridge_Text_NikkiIntro:: + .string "The salty tang of the sea…\n" + .string "It tickles my heart.$" + +ThreeIsland_BondBridge_Text_NikkiDefeat:: + .string "…Sniff, sniff…\n" + .string "Something smells unpleasant…$" + +ThreeIsland_BondBridge_Text_NikkiPostBattle:: + .string "Perhaps that reek is your sweaty\n" + .string "POKéMON's body odor…$" + +ThreeIsland_BondBridge_Text_VioletIntro:: + .string "Where are you off to in such\n" + .string "a hurry?$" + +ThreeIsland_BondBridge_Text_VioletDefeat:: + .string "You're raising some wonderful\n" + .string "POKéMON.$" + +ThreeIsland_BondBridge_Text_VioletPostBattle:: + .string "If you keep going this way, you'll\n" + .string "eventually reach BERRY FOREST.$" + +ThreeIsland_BondBridge_Text_AmiraIntro:: + .string "My mommy said that I can't swim\n" + .string "without my float ring.$" + +ThreeIsland_BondBridge_Text_AmiraDefeat:: + .string "Waaah!\n" + .string "Waaah!$" + +ThreeIsland_BondBridge_Text_AmiraPostBattle:: + .string "This year, I'm going to finally\n" + .string "learn how to swim!$" + +ThreeIsland_BondBridge_Text_AlexisIntro:: + .string "Yay, yay!\n" + .string "POKéMON!$" + +ThreeIsland_BondBridge_Text_AlexisDefeat:: + .string "What happens now?$" + +ThreeIsland_BondBridge_Text_AlexisPostBattle:: + .string "Did I just win?\n" + .string "Or did I lose?$" + +ThreeIsland_BondBridge_Text_TishaIntro:: + .string "Oh, no, don't come here!\n" + .string "Please, stay away from me!$" + +ThreeIsland_BondBridge_Text_TishaDefeat:: + .string "Okay, you've won!\n" + .string "Now will you please go away?$" + +ThreeIsland_BondBridge_Text_TishaPostBattle:: + .string "A POKéMON bit through my \n" + .string "swimsuit.\p" + .string "I can't get out of the water!$" + +ThreeIsland_BondBridge_Text_JoyIntro:: + .string "JOY: We'll teach you what our\n" + .string "favorite POKéMON is!$" + +ThreeIsland_BondBridge_Text_JoyDefeat:: + .string "JOY: Ohh…\n" + .string "MEG!$" + +ThreeIsland_BondBridge_Text_JoyPostBattle:: + .string "JOY: Wasn't that fun?\n" + .string "I hope we can battle again!$" + +ThreeIsland_BondBridge_Text_JoyNotEnoughMons:: + .string "JOY: I really want to battle with\n" + .string "MEG.\p" + .string "One POKéMON isn't enough.$" + +ThreeIsland_BondBridge_Text_MegIntro:: + .string "MEG: We'll show you our favorite\n" + .string "POKéMON.$" + +ThreeIsland_BondBridge_Text_MegDefeat:: + .string "MEG: Ohh…\n" + .string "JOY!$" + +ThreeIsland_BondBridge_Text_MegPostBattle:: + .string "MEG: JOY, wasn't that fun?$" + +ThreeIsland_BondBridge_Text_MegNotEnoughMons:: + .string "MEG: I want to battle together\n" + .string "with JOY.\p" + .string "One POKéMON isn't enough.$" + +ThreeIsland_BondBridge_Text_BerryForestAhead:: + .string "BERRY FOREST AHEAD$" + +ThreeIsland_BondBridge_Text_BondBridgeSign:: + .string "BOND BRIDGE\n" + .string "Please be quiet when crossing.\p" + .string "BERRY FOREST AHEAD$" + diff --git a/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc b/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc new file mode 100644 index 000000000000..0687ca83de5a --- /dev/null +++ b/data/maps/ThreeIsland_DunsparceTunnel/scripts.inc @@ -0,0 +1,79 @@ +ThreeIsland_DunsparceTunnel_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, ThreeIsland_DunsparceTunnel_OnTransition + .byte 0 + +ThreeIsland_DunsparceTunnel_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_THREE_ISLAND_DUNSPARCE_TUNNEL + specialvar VAR_RESULT, IsNationalPokedexEnabled + copyvar VAR_0x8008, VAR_RESULT + call_if_eq VAR_0x8008, TRUE, ThreeIsland_DunsparceTunnel_EventScript_SetLayoutDugOut + call_if_eq VAR_0x8008, FALSE, ThreeIsland_DunsparceTunnel_EventScript_MoveProspectorToWall + end + +ThreeIsland_DunsparceTunnel_EventScript_SetLayoutDugOut:: + setmaplayoutindex LAYOUT_THREE_ISLAND_DUNSPARCE_TUNNEL_DUG_OUT + return + +ThreeIsland_DunsparceTunnel_EventScript_MoveProspectorToWall:: + setobjectxyperm LOCALID_PROSPECTOR, 6, 3 + setobjectmovementtype LOCALID_PROSPECTOR, MOVEMENT_TYPE_FACE_RIGHT + return + +ThreeIsland_DunsparceTunnel_EventScript_Prospector:: + lock + faceplayer + goto_if_set FLAG_GOT_NUGGET_FROM_DUNSPARCE_TUNNEL, ThreeIsland_DunsparceTunnel_EventScript_ProspectorAlreadyGaveNugget + specialvar VAR_RESULT, IsNationalPokedexEnabled + goto_if_eq VAR_RESULT, TRUE, ThreeIsland_DunsparceTunnel_EventScript_ProspectorStruckGold + msgbox ThreeIsland_DunsparceTunnel_Text_ProspectingForGold + closemessage + applymovement LOCALID_PROSPECTOR, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +ThreeIsland_DunsparceTunnel_EventScript_ProspectorStruckGold:: + msgbox ThreeIsland_DunsparceTunnel_Text_StruckGoldThisIsForYou + giveitem ITEM_NUGGET + goto_if_eq VAR_RESULT, FALSE, ThreeIsland_DunsparceTunnel_EventScript_NoRoomForNugget + setflag FLAG_GOT_NUGGET_FROM_DUNSPARCE_TUNNEL + goto ThreeIsland_DunsparceTunnel_EventScript_ProspectorAlreadyGaveNugget + end + +ThreeIsland_DunsparceTunnel_EventScript_NoRoomForNugget:: + msgbox ThreeIsland_DunsparceTunnel_Text_WhoopsBagCrammedFull + release + end + +ThreeIsland_DunsparceTunnel_EventScript_ProspectorAlreadyGaveNugget:: + msgbox ThreeIsland_DunsparceTunnel_Text_ThatsANugget + release + end + +ThreeIsland_DunsparceTunnel_Text_ProspectingForGold:: + .string "Hey, there!\n" + .string "How's it going?\p" + .string "What am I doing here, you ask?\n" + .string "Why, I'm prospecting for gold!\p" + .string "When I strike it rich, I'm buying\n" + .string "a house in KANTO.$" + +ThreeIsland_DunsparceTunnel_Text_StruckGoldThisIsForYou:: + .string "Hey, there! How's it going?\n" + .string "Did you hear? I've struck gold!\p" + .string "You remembered that I was\n" + .string "prospecting, didn't you?\p" + .string "You can't begin to imagine just\n" + .string "how happy I am.\p" + .string "So, I'll show you!\n" + .string "This is for you!$" + +ThreeIsland_DunsparceTunnel_Text_ThatsANugget:: + .string "That's a NUGGET!\p" + .string "I can't give you any nuggets of\n" + .string "wisdom, so that'll have to do!$" + +ThreeIsland_DunsparceTunnel_Text_WhoopsBagCrammedFull:: + .string "Whoops, your BAG is crammed full!\n" + .string "I'll give this to you later.$" + diff --git a/data/maps/ThreeIsland_Harbor/scripts.inc b/data/maps/ThreeIsland_Harbor/scripts.inc new file mode 100644 index 000000000000..dac73ea506b9 --- /dev/null +++ b/data/maps/ThreeIsland_Harbor/scripts.inc @@ -0,0 +1,11 @@ +ThreeIsland_Harbor_MapScripts:: + .byte 0 + +ThreeIsland_Harbor_EventScript_Sailor:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_THREE_ISLAND + goto EventScript_ChooseDestFromIsland + end diff --git a/data/maps/ThreeIsland_House1/scripts.inc b/data/maps/ThreeIsland_House1/scripts.inc new file mode 100644 index 000000000000..010d2ea97d3a --- /dev/null +++ b/data/maps/ThreeIsland_House1/scripts.inc @@ -0,0 +1,24 @@ +ThreeIsland_House1_MapScripts:: + .byte 0 + +ThreeIsland_House1_EventScript_Lostelle:: + lock + faceplayer + special GetPlayerBigGuyGirlString + msgbox ThreeIsland_House1_Text_YoureAlwaysSoCool + release + end + +ThreeIsland_House1_EventScript_DisplayCase:: + msgbox ThreeIsland_House1_Text_RareRocksGemsDisplayed, MSGBOX_SIGN + end + +ThreeIsland_House1_Text_YoureAlwaysSoCool:: + .string "LOSTELLE: Hi, {PLAYER}!\n" + .string "You're always so cool!\p" + .string "I'll make lunch for you, too, one\n" + .string "day, {PLAYER}.$" + +ThreeIsland_House1_Text_RareRocksGemsDisplayed:: + .string "Rare rocks and gems are displayed.$" + diff --git a/data/maps/ThreeIsland_House2/scripts.inc b/data/maps/ThreeIsland_House2/scripts.inc new file mode 100644 index 000000000000..ee512cb9284b --- /dev/null +++ b/data/maps/ThreeIsland_House2/scripts.inc @@ -0,0 +1,32 @@ +ThreeIsland_House2_MapScripts:: + .byte 0 + +ThreeIsland_House2_EventScript_Man:: + lock + faceplayer + famechecker FAMECHECKER_SABRINA, 1 + msgbox ThreeIsland_House2_Text_IAdmireSabrina + release + end + +ThreeIsland_House2_EventScript_Rocker:: + msgbox ThreeIsland_House2_Text_CantMakeThisSpoonBend, MSGBOX_NPC + end + +ThreeIsland_House2_Text_CantMakeThisSpoonBend:: + .string "Urrrrrrrrgggghhhh…\n" + .string "Kwaaaaah!\p" + .string "…It's useless! I can't make this\n" + .string "spoon bend with my mind.\p" + .string "Maybe I really don't have any\n" + .string "psychic powers.$" + +ThreeIsland_House2_Text_IAdmireSabrina:: + .string "You know about a girl GYM LEADER\n" + .string "in SAFFRON CITY?\p" + .string "She uses PSYCHIC-type POKéMON,\n" + .string "right?\p" + .string "I admire her, I really do.\p" + .string "I've heard that she's one cool\n" + .string "customer and beautiful, too.$" + diff --git a/data/maps/ThreeIsland_House3/scripts.inc b/data/maps/ThreeIsland_House3/scripts.inc new file mode 100644 index 000000000000..1a5171e80dc2 --- /dev/null +++ b/data/maps/ThreeIsland_House3/scripts.inc @@ -0,0 +1,12 @@ +ThreeIsland_House3_MapScripts:: + .byte 0 + +ThreeIsland_House3_EventScript_Beauty:: + msgbox ThreeIsland_House3_Text_WantedToLiveSomewhereQuiet, MSGBOX_NPC + end + +ThreeIsland_House3_Text_WantedToLiveSomewhereQuiet:: + .string "I bought this house because I\n" + .string "wanted to live somewhere quiet.\p" + .string "Today, I think I'll go out fishing.$" + diff --git a/data/maps/ThreeIsland_House4/scripts.inc b/data/maps/ThreeIsland_House4/scripts.inc new file mode 100644 index 000000000000..7719da9ec9b1 --- /dev/null +++ b/data/maps/ThreeIsland_House4/scripts.inc @@ -0,0 +1,21 @@ +ThreeIsland_House4_MapScripts:: + .byte 0 + +ThreeIsland_House4_EventScript_BaldingMan:: + msgbox ThreeIsland_House4_Text_GhostsInBerryForest, MSGBOX_NPC + end + +ThreeIsland_House4_EventScript_LittleBoy:: + msgbox ThreeIsland_House4_Text_PapaKeepsLyingToMe, MSGBOX_NPC + end + +ThreeIsland_House4_Text_GhostsInBerryForest:: + .string "You must never, ever go out to\n" + .string "the BERRY FOREST alone.\p" + .string "Why?\n" + .string "There are ghosts there.$" + +ThreeIsland_House4_Text_PapaKeepsLyingToMe:: + .string "Papa keeps lying to me, and won't\n" + .string "let me go out and play!$" + diff --git a/data/maps/ThreeIsland_House5/scripts.inc b/data/maps/ThreeIsland_House5/scripts.inc new file mode 100644 index 000000000000..cdbee4c74686 --- /dev/null +++ b/data/maps/ThreeIsland_House5/scripts.inc @@ -0,0 +1,28 @@ +ThreeIsland_House5_MapScripts:: + .byte 0 + +ThreeIsland_House5_EventScript_LittleGirl:: + lock + faceplayer + goto_if_set FLAG_RESCUED_LOSTELLE, ThreeIsland_House5_EventScript_LittleGirlLostelleFound + msgbox ThreeIsland_House5_Text_ImNotLostelle + release + end + +ThreeIsland_House5_EventScript_LittleGirlLostelleFound:: + msgbox ThreeIsland_House5_Text_IllGoPlayWithLostelle + release + end + +ThreeIsland_House5_Text_ImNotLostelle:: + .string "Me?\n" + .string "I'm not LOSTELLE.\p" + .string "She's probably gone to the\n" + .string "BERRY FOREST, I think.\p" + .string "She picks BERRIES there for making\n" + .string "lunch.$" + +ThreeIsland_House5_Text_IllGoPlayWithLostelle:: + .string "I think I'll go play with LOSTELLE\n" + .string "today.$" + diff --git a/data/maps/ThreeIsland_Mart/scripts.inc b/data/maps/ThreeIsland_Mart/scripts.inc new file mode 100644 index 000000000000..6fde6dc3a38b --- /dev/null +++ b/data/maps/ThreeIsland_Mart/scripts.inc @@ -0,0 +1,54 @@ +ThreeIsland_Mart_MapScripts:: + .byte 0 + +ThreeIsland_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart ThreeIsland_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +ThreeIsland_Mart_Items:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_HYPER_POTION + .2byte ITEM_REVIVE + .2byte ITEM_FULL_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_MAX_REPEL + .2byte ITEM_NONE + release + end + +ThreeIsland_Mart_EventScript_Picnicker:: + msgbox ThreeIsland_Mart_Text_TrueThatCeldadonDeptStoreBigger, MSGBOX_NPC + end + +ThreeIsland_Mart_EventScript_BugCatcher:: + msgbox ThreeIsland_Mart_Text_PeopleHealWithBerriesFromForest, MSGBOX_NPC + end + +ThreeIsland_Mart_EventScript_Youngster:: + msgbox ThreeIsland_Mart_Text_BikersWereAboutToTrashMart, MSGBOX_NPC + end + +ThreeIsland_Mart_Text_TrueThatCeldadonDeptStoreBigger:: + .string "Is it true?\p" + .string "CELADON DEPT. STORE is several\n" + .string "times bigger than this shop?$" + +ThreeIsland_Mart_Text_PeopleHealWithBerriesFromForest:: + .string "I sometimes buy medicine here.\p" + .string "But a lot of people heal POKéMON\n" + .string "with BERRIES from BERRY FOREST.\p" + .string "After all, BERRIES are free and\n" + .string "they never run out.$" + +ThreeIsland_Mart_Text_BikersWereAboutToTrashMart:: + .string "Those BIKERS were about to trash\n" + .string "this POKéMON MART.\p" + .string "Am I glad they decided to leave!$" + diff --git a/data/maps/ThreeIsland_PokemonCenter_1F/scripts.inc b/data/maps/ThreeIsland_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..5bebb15aaf9d --- /dev/null +++ b/data/maps/ThreeIsland_PokemonCenter_1F/scripts.inc @@ -0,0 +1,47 @@ +ThreeIsland_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, ThreeIsland_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +ThreeIsland_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_THREE_ISLAND + end + +ThreeIsland_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +ThreeIsland_PokemonCenter_1F_EventScript_Sailor:: + msgbox ThreeIsland_PokemonCenter_1F_Text_ImpossibleToSurfBetweenIslands, MSGBOX_NPC + end + +ThreeIsland_PokemonCenter_1F_EventScript_Lass:: + msgbox ThreeIsland_PokemonCenter_1F_Text_AlwaysBerriesInBerryForest, MSGBOX_NPC + end + +ThreeIsland_PokemonCenter_1F_EventScript_Rocker:: + msgbox ThreeIsland_PokemonCenter_1F_Text_PCNetworkCanLinkWithKanto, MSGBOX_NPC + end + +ThreeIsland_PokemonCenter_1F_Text_PCNetworkCanLinkWithKanto:: + .string "Hey, did you hear the news?\p" + .string "The PC network here can now link\n" + .string "with PCs in KANTO.\p" + .string "I don't know how that came about,\n" + .string "but it's fantastic!$" + +ThreeIsland_PokemonCenter_1F_Text_ImpossibleToSurfBetweenIslands:: + .string "It's impossible to SURF between the\n" + .string "islands around these parts.\p" + .string "The tides are too fast and\n" + .string "treacherous.$" + +ThreeIsland_PokemonCenter_1F_Text_AlwaysBerriesInBerryForest:: + .string "Let's crush BERRIES!\n" + .string "…That'd be wasting BERRIES?\p" + .string "You can always find some BERRIES\n" + .string "on the ground in BERRY FOREST.$" + diff --git a/data/maps/ThreeIsland_PokemonCenter_2F/scripts.inc b/data/maps/ThreeIsland_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..e59326fa4a57 --- /dev/null +++ b/data/maps/ThreeIsland_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +ThreeIsland_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +ThreeIsland_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +ThreeIsland_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +ThreeIsland_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/ThreeIsland_Port/scripts.inc b/data/maps/ThreeIsland_Port/scripts.inc new file mode 100644 index 000000000000..0a20c987286d --- /dev/null +++ b/data/maps/ThreeIsland_Port/scripts.inc @@ -0,0 +1,64 @@ +ThreeIsland_Port_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, ThreeIsland_Port_OnTransition + .byte 0 + +ThreeIsland_Port_OnTransition:: + clearflag FLAG_SYS_PC_STORAGE_DISABLED + setflag FLAG_SEVII_DETOUR_FINISHED + end + +ThreeIsland_Port_EventScript_Woman:: + lock + faceplayer + goto_if_ge VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 2, ThreeIsland_Port_EventScript_WomanLostelleFound + goto_if_ge VAR_MAP_SCENE_THREE_ISLAND, 4, ThreeIsland_Port_EventScript_WomanBikersGone + msgbox ThreeIsland_Port_Text_IllCallThePolice + release + end + +ThreeIsland_Port_EventScript_WomanLostelleFound:: + msgbox ThreeIsland_Port_Text_EverythingTurnedOutForBest + release + end + +ThreeIsland_Port_EventScript_WomanBikersGone:: + msgbox ThreeIsland_Port_Text_ThankGoodnessBikersGone + release + end + +ThreeIsland_Port_EventScript_Biker1:: + msgbox ThreeIsland_Port_Text_WereKantoRiderFederation, MSGBOX_NPC + end + +ThreeIsland_Port_EventScript_Biker2:: + lock + msgbox ThreeIsland_Port_Text_ForkOverMoney + release + end + +ThreeIsland_Port_Text_WereKantoRiderFederation:: + .string "We're the KANTO RIDER FEDERATION!\n" + .string "Vroom! Vavavavooom! Vroom!\p" + .string "My bike's wimpy, so I have to\n" + .string "make exhaust noises myself!$" + +ThreeIsland_Port_Text_ForkOverMoney:: + .string "Hey, hey, lady!\n" + .string "Fork over some spending money!$" + +ThreeIsland_Port_Text_IllCallThePolice:: + .string "Aiyeeh!\p" + .string "Wh-who are you?!\n" + .string "I… I'll call the police!$" + +ThreeIsland_Port_Text_ThankGoodnessBikersGone:: + .string "Those BIKERS…\n" + .string "Are they gone?\p" + .string "Oh, thank goodness!\n" + .string "They certainly had me terrified!$" + +ThreeIsland_Port_Text_EverythingTurnedOutForBest:: + .string "Those BIKERS ran off, and\n" + .string "LOSTELLE was found safe.\p" + .string "Everything turned out for the best!$" + diff --git a/data/maps/TradeCenter_Frlg/scripts.inc b/data/maps/TradeCenter_Frlg/scripts.inc new file mode 100644 index 000000000000..bcc7777d89e6 --- /dev/null +++ b/data/maps/TradeCenter_Frlg/scripts.inc @@ -0,0 +1,2 @@ +TradeCenter_Frlg_MapScripts:: + .byte 0 diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index 0ab5545175d2..a223a8884516 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -215,6 +215,7 @@ TrainerHill_Entrance_Movement_PlayerExitElevator: TrainerHill_Entrance_EventScript_Records:: lockall fadescreen FADE_TO_BLACK + setvar VAR_0x8004, 0 special ShowTrainerHillRecords waitstate releaseall diff --git a/data/maps/TrainerTower_1F/scripts.inc b/data/maps/TrainerTower_1F/scripts.inc new file mode 100644 index 000000000000..372c44088964 --- /dev/null +++ b/data/maps/TrainerTower_1F/scripts.inc @@ -0,0 +1,27 @@ +TrainerTower_1F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ All Trainer Tower floors/roof share these scripts for their object events + +TrainerTower_EventScript_DoublesTrainer1:: + call TrainerTower_EventScript_SpeakToDoublesTrainer1 + end + +TrainerTower_EventScript_SinglesTrainer:: + call TrainerTower_EventScript_SpeakToSinglesTrainer + end + +TrainerTower_EventScript_KnockoutTrainer:: + call TrainerTower_EventScript_SpeakToKnockoutTrainer + end + +TrainerTower_EventScript_DoublesTrainer2:: + call TrainerTower_EventScript_SpeakToDoublesTrainer2 + end + +TrainerTower_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TrainerTower_2F/scripts.inc b/data/maps/TrainerTower_2F/scripts.inc new file mode 100644 index 000000000000..53656a9cd0f1 --- /dev/null +++ b/data/maps/TrainerTower_2F/scripts.inc @@ -0,0 +1,27 @@ +TrainerTower_2F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ Below scripts are unused, the identical versions in the 1F script are used instead + +TrainerTower_2F_EventScript_DoublesTrainer1:: + call TrainerTower_EventScript_SpeakToDoublesTrainer1 + end + +TrainerTower_2F_EventScript_SinglesTrainer:: + call TrainerTower_EventScript_SpeakToSinglesTrainer + end + +TrainerTower_2F_EventScript_KnockoutTrainer:: + call TrainerTower_EventScript_SpeakToKnockoutTrainer + end + +TrainerTower_2F_EventScript_DoublesTrainer2:: + call TrainerTower_EventScript_SpeakToDoublesTrainer2 + end + +TrainerTower_2F_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TrainerTower_3F/scripts.inc b/data/maps/TrainerTower_3F/scripts.inc new file mode 100644 index 000000000000..4a05c3d206ad --- /dev/null +++ b/data/maps/TrainerTower_3F/scripts.inc @@ -0,0 +1,27 @@ +TrainerTower_3F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ Below scripts are unused, the identical versions in the 1F script are used instead + +TrainerTower_3F_EventScript_DoublesTrainer1:: + call TrainerTower_EventScript_SpeakToDoublesTrainer1 + end + +TrainerTower_3F_EventScript_SinglesTrainer:: + call TrainerTower_EventScript_SpeakToSinglesTrainer + end + +TrainerTower_3F_EventScript_KnockoutTrainer:: + call TrainerTower_EventScript_SpeakToKnockoutTrainer + end + +TrainerTower_3F_EventScript_DoublesTrainer2:: + call TrainerTower_EventScript_SpeakToDoublesTrainer2 + end + +TrainerTower_3F_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TrainerTower_4F/scripts.inc b/data/maps/TrainerTower_4F/scripts.inc new file mode 100644 index 000000000000..fe739642eea3 --- /dev/null +++ b/data/maps/TrainerTower_4F/scripts.inc @@ -0,0 +1,27 @@ +TrainerTower_4F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ Below scripts are unused, the identical versions in the 1F script are used instead + +TrainerTower_4F_EventScript_DoublesTrainer1:: + call TrainerTower_EventScript_SpeakToDoublesTrainer1 + end + +TrainerTower_4F_EventScript_SinglesTrainer:: + call TrainerTower_EventScript_SpeakToSinglesTrainer + end + +TrainerTower_4F_EventScript_KnockoutTrainer:: + call TrainerTower_EventScript_SpeakToKnockoutTrainer + end + +TrainerTower_4F_EventScript_DoublesTrainer2:: + call TrainerTower_EventScript_SpeakToDoublesTrainer2 + end + +TrainerTower_4F_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TrainerTower_5F/scripts.inc b/data/maps/TrainerTower_5F/scripts.inc new file mode 100644 index 000000000000..499884160c08 --- /dev/null +++ b/data/maps/TrainerTower_5F/scripts.inc @@ -0,0 +1,27 @@ +TrainerTower_5F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ Below scripts are unused, the identical versions in the 1F script are used instead + +TrainerTower_5F_EventScript_DoublesTrainer1:: + call TrainerTower_EventScript_SpeakToDoublesTrainer1 + end + +TrainerTower_5F_EventScript_SinglesTrainer:: + call TrainerTower_EventScript_SpeakToSinglesTrainer + end + +TrainerTower_5F_EventScript_KnockoutTrainer:: + call TrainerTower_EventScript_SpeakToKnockoutTrainer + end + +TrainerTower_5F_EventScript_DoublesTrainer2:: + call TrainerTower_EventScript_SpeakToDoublesTrainer2 + end + +TrainerTower_5F_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TrainerTower_6F/scripts.inc b/data/maps/TrainerTower_6F/scripts.inc new file mode 100644 index 000000000000..44f0ddce87b5 --- /dev/null +++ b/data/maps/TrainerTower_6F/scripts.inc @@ -0,0 +1,27 @@ +TrainerTower_6F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ Below scripts are unused, the identical versions in the 1F script are used instead + +TrainerTower_6F_EventScript_DoublesTrainer1:: + call TrainerTower_EventScript_SpeakToDoublesTrainer1 + end + +TrainerTower_6F_EventScript_SinglesTrainer:: + call TrainerTower_EventScript_SpeakToSinglesTrainer + end + +TrainerTower_6F_EventScript_KnockoutTrainer:: + call TrainerTower_EventScript_SpeakToKnockoutTrainer + end + +TrainerTower_6F_EventScript_DoublesTrainer2:: + call TrainerTower_EventScript_SpeakToDoublesTrainer2 + end + +TrainerTower_6F_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TrainerTower_7F/scripts.inc b/data/maps/TrainerTower_7F/scripts.inc new file mode 100644 index 000000000000..2f2f5cde794c --- /dev/null +++ b/data/maps/TrainerTower_7F/scripts.inc @@ -0,0 +1,27 @@ +TrainerTower_7F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ Below scripts are unused, the identical versions in the 1F script are used instead + +TrainerTower_7F_EventScript_DoublesTrainer1:: + call TrainerTower_EventScript_SpeakToDoublesTrainer1 + end + +TrainerTower_7F_EventScript_SinglesTrainer:: + call TrainerTower_EventScript_SpeakToSinglesTrainer + end + +TrainerTower_7F_EventScript_KnockoutTrainer:: + call TrainerTower_EventScript_SpeakToKnockoutTrainer + end + +TrainerTower_7F_EventScript_DoublesTrainer2:: + call TrainerTower_EventScript_SpeakToDoublesTrainer2 + end + +TrainerTower_7F_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TrainerTower_8F/scripts.inc b/data/maps/TrainerTower_8F/scripts.inc new file mode 100644 index 000000000000..8f97efe21719 --- /dev/null +++ b/data/maps/TrainerTower_8F/scripts.inc @@ -0,0 +1,27 @@ +TrainerTower_8F_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ Below scripts are unused, the identical versions in the 1F script are used instead + +TrainerTower_8F_EventScript_DoublesTrainer1:: + call TrainerTower_EventScript_SpeakToDoublesTrainer1 + end + +TrainerTower_8F_EventScript_SinglesTrainer:: + call TrainerTower_EventScript_SpeakToSinglesTrainer + end + +TrainerTower_8F_EventScript_KnockoutTrainer:: + call TrainerTower_EventScript_SpeakToKnockoutTrainer + end + +TrainerTower_8F_EventScript_DoublesTrainer2:: + call TrainerTower_EventScript_SpeakToDoublesTrainer2 + end + +TrainerTower_8F_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TrainerTower_Elevator/scripts.inc b/data/maps/TrainerTower_Elevator/scripts.inc new file mode 100644 index 000000000000..1732dc64211c --- /dev/null +++ b/data/maps/TrainerTower_Elevator/scripts.inc @@ -0,0 +1,79 @@ +TrainerTower_Elevator_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +TrainerTower_Elevator_EventScript_FloorSelect:: + lockall + setvar VAR_0x8004, 6 + call_if_unset FLAG_TEMP_2, EventScript_GetElevatorFloor + copyvar VAR_0x8005, VAR_ELEVATOR_FLOOR + special DrawElevatorCurrentFloorWindow + message gText_WantWhichFloor + waitmessage + setvar VAR_0x8004, 6 + specialvar VAR_RESULT, InitElevatorFloorSelectMenuPos + switch VAR_RESULT + case 0, TrainerTower_Elevator_EventScript_FloorSelectFromRoof + case 1, TrainerTower_Elevator_EventScript_FloorSelectFromLobby + end + +TrainerTower_Elevator_EventScript_FloorSelectFromRoof:: + multichoicedefault 0, 0, MULTI_ROOFTOP_B1F, 0, FALSE + goto TrainerTower_Elevator_EventScript_ChooseFloor + end + +TrainerTower_Elevator_EventScript_FloorSelectFromLobby:: + multichoicedefault 0, 0, MULTI_ROOFTOP_B1F, 1, FALSE + goto TrainerTower_Elevator_EventScript_ChooseFloor + end + +TrainerTower_Elevator_EventScript_ChooseFloor:: + switch VAR_RESULT + case 0, TrainerTower_Elevator_EventScript_SelectRoof + case 1, TrainerTower_Elevator_EventScript_SelectLobby + case 2, TrainerTower_Elevator_EventScript_CloseFloorSelect + case MULTI_B_PRESSED, TrainerTower_Elevator_EventScript_CloseFloorSelect + end + +TrainerTower_Elevator_EventScript_SelectLobby:: + setvar VAR_0x8006, 3 + setdynamicwarp MAP_TRAINER_TOWER_LOBBY, 17, 8 + goto_if_eq VAR_ELEVATOR_FLOOR, 3, TrainerTower_Elevator_EventScript_CloseFloorSelect + call TrainerTower_Elevator_EventScript_MoveElevator + setvar VAR_ELEVATOR_FLOOR, 3 + special CloseElevatorCurrentFloorWindow + delay 25 + applymovement LOCALID_PLAYER, TrainerTower_Elevator_Movement_ExitElevator + waitmovement 0 + warp MAP_TRAINER_TOWER_LOBBY, 17, 8 + waitstate + releaseall + end + +TrainerTower_Elevator_EventScript_SelectRoof:: + goto TrainerTower_Elevator_EventScript_CloseFloorSelect + end + +TrainerTower_Elevator_EventScript_CloseFloorSelect:: + special CloseElevatorCurrentFloorWindow + releaseall + end + +TrainerTower_Elevator_EventScript_MoveElevator:: + special CloseElevatorCurrentFloorWindow + closemessage + waitse + special AnimateElevator + waitstate + setflag FLAG_TEMP_2 + return + +TrainerTower_Elevator_Movement_ExitElevator:: + walk_in_place_faster_down + delay_16 + walk_down + walk_right + walk_right + walk_down + step_end diff --git a/data/maps/TrainerTower_Lobby/scripts.inc b/data/maps/TrainerTower_Lobby/scripts.inc new file mode 100644 index 000000000000..dbc53151f466 --- /dev/null +++ b/data/maps/TrainerTower_Lobby/scripts.inc @@ -0,0 +1,342 @@ +TrainerTower_Lobby_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_Lobby_OnResume + map_script MAP_SCRIPT_ON_RETURN_TO_FIELD, TrainerTower_Lobby_OnReturnToField + map_script MAP_SCRIPT_ON_TRANSITION, TrainerTower_Lobby_OnTransition + map_script MAP_SCRIPT_ON_LOAD, TrainerTower_Lobby_OnLoad + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_Lobby_OnFrame + .byte 0 + +TrainerTower_Lobby_OnResume:: + setvar VAR_TEMP_2, 0 + ttower_resumetimer + ttower_shouldexit + goto_if_eq VAR_RESULT, FALSE, TrainerTower_Lobby_OnResumeEnd + @ Never reached, above always FALSE + setvar VAR_TEMP_0, 0 + setobjectxy LOCALID_PLAYER, 9, 7 + applymovement LOCALID_PLAYER, TrainerTower_Lobby_Movement_FaceReceptionist +TrainerTower_Lobby_OnResumeEnd:: + end + +TrainerTower_Lobby_OnReturnToField:: + addobject LOCALID_TOWER_NURSE + addobject LOCALID_TOWER_MART_CLERK + addobject LOCALID_TOWER_RECEPTIONIST + addobject LOCALID_TOWER_COOLTRAINER_F + addobject LOCALID_TOWER_BALDING_MAN + end + +TrainerTower_Lobby_OnLoad:: + call_if_eq VAR_TEMP_D, 17, TrainerTower_Lobby_OpenCounterBarrier + end + +TrainerTower_Lobby_OpenCounterBarrier:: + setmetatile 17, 10, METATILE_TrainerTower_Floor_ShadeBottomLeft, 0 + return + +TrainerTower_Lobby_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_TRAINER_TOWER_LOBBY + getplayerxy VAR_TEMP_D, VAR_RESULT + end + +TrainerTower_Lobby_OnFrame:: + map_script_2 VAR_TEMP_0, 0, TrainerTower_Lobby_EventScript_Enter + map_script_2 VAR_TEMP_D, 17, TrainerTower_Lobby_EventScript_ExitElevator + .2byte 0 + +TrainerTower_Lobby_EventScript_ExitElevator:: + lockall + applymovement LOCALID_PLAYER, TrainerTower_Lobby_Movement_ExitElevator + waitmovement 0 + setmetatile 17, 10, METATILE_TrainerTower_CounterBarrier, 1 + special DrawWholeMapView + playse SE_CLICK + waitse + setvar VAR_TEMP_D, 0 + releaseall + end + +TrainerTower_Lobby_Movement_ExitElevator:: + walk_down + walk_down + step_end + +TrainerTower_Lobby_EventScript_Enter:: + setvar VAR_TEMP_0, 1 + ttower_getchallengestatus + switch VAR_RESULT + case TT_CHALLENGE_STATUS_LOST, TrainerTower_Lobby_EventScript_LostChallenge + case TT_CHALLENGE_STATUS_UNK, TrainerTower_Lobby_EventScript_ExitChallengeSpeakToReceptionist + case TT_CHALLENGE_STATUS_NORMAL, TrainerTower_Lobby_EventScript_EnterEnd + +TrainerTower_Lobby_EventScript_LostChallenge:: + lock + faceplayer + applymovement LOCALID_PLAYER, TrainerTower_Lobby_Movement_FaceReceptionist + textcolor NPC_TEXT_COLOR_FEMALE + msgbox TrainerTower_Lobby_Text_TooBadComeBackTryAgain + goto TrainerTower_Lobby_EventScript_ExitChallenge + +@ Presumably E-Reader related +TrainerTower_Lobby_EventScript_ExitChallengeSpeakToReceptionist:: + lock + faceplayer + applymovement LOCALID_PLAYER, TrainerTower_Lobby_Movement_FaceReceptionist + textcolor NPC_TEXT_COLOR_FEMALE + msgbox TrainerTower_Lobby_Text_MoveCounterHereWhenTrainersSwitch +TrainerTower_Lobby_EventScript_ExitChallenge:: + closemessage + applymovement LOCALID_PLAYER, TrainerTower_Lobby_Movement_WalkDown + waitmovement 0 + setvar VAR_MAP_SCENE_TRAINER_TOWER, 0 + release +TrainerTower_Lobby_EventScript_EnterEnd:: + end + +TrainerTower_Lobby_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +TrainerTower_Lobby_EventScript_Receptionist:: + lock + faceplayer + ttower_getbeatchallenge + goto_if_eq VAR_RESULT, TRUE, TrainerTower_Lobby_EventScript_ThanksForCompeting + msgbox TrainerTower_Lobby_Text_GiveItYourBest + goto TrainerTower_Lobby_EventScript_ReceptionistEnd + +TrainerTower_Lobby_EventScript_ThanksForCompeting:: + msgbox TrainerTower_Lobby_Text_ThanksForCompeting +TrainerTower_Lobby_EventScript_ReceptionistEnd:: + release + end + +TrainerTower_Lobby_EventScript_MartClerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart TrainerTower_Lobby_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +TrainerTower_Lobby_Mart_Items:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_GREAT_BALL + .2byte ITEM_FULL_RESTORE + .2byte ITEM_MAX_POTION + .2byte ITEM_HYPER_POTION + .2byte ITEM_REVIVE + .2byte ITEM_FULL_HEAL + .2byte ITEM_ESCAPE_ROPE + .2byte ITEM_MAX_REPEL + .2byte ITEM_NONE + release + end + +TrainerTower_Lobby_EventScript_EntryTrigger:: + lockall + applymovement LOCALID_PLAYER, TrainerTower_Lobby_Movement_FaceReceptionist + textcolor NPC_TEXT_COLOR_FEMALE + msgbox TrainerTower_Lobby_Text_WelcomeToTrainerTower + ttower_getnumfloors + goto_if_eq VAR_RESULT, FALSE, TrainerTower_Lobby_EventScript_AllFloorsUsed + msgbox TrainerTower_Lobby_Text_TrainersUpToFloorNum + goto TrainerTower_Lobby_EventScript_AskEnterChallenge + +TrainerTower_Lobby_EventScript_AllFloorsUsed:: + msgbox TrainerTower_Lobby_Text_TrainersUpEighthFloor +TrainerTower_Lobby_EventScript_AskEnterChallenge:: + message TrainerTower_Lobby_Text_LikeToChallengeTrainers + waitmessage + multichoice 18, 6, MULTI_YESNOINFO, FALSE + switch VAR_RESULT + case 0, TrainerTower_Lobby_EventScript_ChooseChallenge + case 1, TrainerTower_Lobby_EventScript_DeclineChallenge + case 2, TrainerTower_Lobby_EventScript_ChallengeInfo + case MULTI_B_PRESSED, TrainerTower_Lobby_EventScript_DeclineChallenge + end + +TrainerTower_Lobby_EventScript_ChallengeInfo:: + msgbox TrainerTower_Lobby_Text_ExplainTrainerTower + goto TrainerTower_Lobby_EventScript_AskEnterChallenge + end + +TrainerTower_Lobby_EventScript_ChooseChallenge:: + multichoice 13, 3, MULTI_TRAINER_TOWER_MODE, FALSE + switch VAR_RESULT + case 0, TrainerTower_Lobby_EventScript_BeginChallenge + case 1, TrainerTower_Lobby_EventScript_BeginChallenge + case 2, TrainerTower_Lobby_EventScript_BeginChallenge + case 3, TrainerTower_Lobby_EventScript_BeginChallenge + case 4, TrainerTower_Lobby_EventScript_DeclineChallenge + case MULTI_B_PRESSED, TrainerTower_Lobby_EventScript_DeclineChallenge + end + +TrainerTower_Lobby_EventScript_BeginChallenge:: + copyvar VAR_0x8005, VAR_RESULT + setvar VAR_MAP_SCENE_TRAINER_TOWER, 1 + special HealPlayerParty + msgbox TrainerTower_Lobby_Text_StartClockGetSetGo + ttower_startchallenge + releaseall + end + +TrainerTower_Lobby_EventScript_DeclineChallenge:: + msgbox TrainerTower_Lobby_Text_PleaseVisitUsAgain + closemessage + applymovement LOCALID_PLAYER, TrainerTower_Lobby_Movement_WalkDown + waitmovement 0 + releaseall + end + +TrainerTower_Lobby_Movement_FaceReceptionist:: + face_right + step_end + +TrainerTower_Lobby_Movement_WalkDown:: + walk_down + step_end + +TrainerTower_Lobby_EventScript_ShowRecords:: + lockall + fadescreen FADE_TO_BLACK + setvar VAR_0x8004, 1 + special ShowTrainerHillRecords + waitstate + releaseall + end + +TrainerTower_Lobby_EventScript_CooltrainerF:: + msgbox TrainerTower_Lobby_Text_WonderWhatKindsOfTrainers, MSGBOX_NPC + end + +TrainerTower_Lobby_EventScript_BaldingMan:: + msgbox TrainerTower_Lobby_Text_StairsTougherThanAnyBattle, MSGBOX_NPC + end + +@ All Trainer Tower text (Lobby and Roof) is interleaved here + +TrainerTower_Lobby_Text_WelcomeToTrainerTower:: + .string "Hello!\p" + .string "Welcome to TRAINER TOWER where\n" + .string "TRAINERS gather from all over!$" + +TrainerTower_Lobby_Text_TrainersUpToFloorNum:: + .string "TRAINERS from all over the world\n" + .string "gather here to battle.\p" + .string "Let me see…\p" + .string "Right now, there are TRAINERS only\n" + .string "up to Floor {STR_VAR_1}.$" + +TrainerTower_Lobby_Text_TrainersUpEighthFloor:: + .string "TRAINERS are awaiting your\n" + .string "challenge up to the eighth floor.$" + +TrainerTower_Lobby_Text_LikeToChallengeTrainers:: + .string "Would you like to challenge the\n" + .string "waiting TRAINERS?$" + +TrainerTower_Lobby_Text_StartClockGetSetGo:: + .string "Okay, I'll get the clock started,\n" + .string "so give it everything you have.\p" + .string "On your marks…\p" + .string "Get set…\p" + .string "Go!$" + +TrainerTower_Lobby_Text_PleaseVisitUsAgain:: + .string "Please do visit us again!$" + +TrainerTower_Lobby_Text_TooBadComeBackTryAgain:: + .string "That was too bad.\p" + .string "I think you put in a tremendous\n" + .string "effort in your battling.\p" + .string "Please come back and try again!$" + +TrainerTower_Lobby_Text_GiveItYourBest:: + .string "I hope you give it your best.$" + +TrainerTower_Lobby_Text_MoveCounterHereWhenTrainersSwitch:: + .string "When the TRAINERS switch places,\n" + .string "the movement can be hectic.\p" + .string "To avoid the stampede, we moved\n" + .string "the reception counter here.\p" + .string "I'm sorry for the inconvenience.$" + +TrainerTower_Roof_Text_ImOwnerBattledPerfectly:: + .string "Hello…\p" + .string "I am the owner of this TOWER…\p" + .string "How the sky soars above this\n" + .string "rooftop…\p" + .string "The caress of the winds up here…\p" + .string "It's all so perfect…\p" + .string "The way you battled…\n" + .string "It, too, was perfection…$" + +TrainerTower_Roof_Text_ThisIsForYou:: + .string "This is for you…$" + +TrainerTower_Roof_Text_DoneItInRecordTime:: + .string "Oh!\n" + .string "Stupendous!\p" + .string "It's marvelous how you've come up\n" + .string "here so quickly.\p" + .string "The fact is, you've done it in\n" + .string "record time…\p" + .string "I'll have your record posted at\n" + .string "the reception counter.$" + +TrainerTower_Roof_Text_TookSweetTimeGettingHere:: + .string "You seem to have taken your sweet\n" + .string "time getting here…$" + +TrainerTower_Roof_Text_IdLikeToSeeBetterTime:: + .string "What I would like to see is a\n" + .string "better time out of you…\p" + .string "I'm counting on you.\p" + .string "Until then, farewell…$" + +TrainerTower_Text_XMinYZSec:: + .string "{STR_VAR_1} min. {STR_VAR_2}.{STR_VAR_3} sec.$" + +TrainerTower_Lobby_Text_HereAreTheResults:: + .string "せいせきひょうです$" + +TrainerTower_Lobby_Text_NeedTwoMonsForDouble:: + .string "This is a two-on-two battle.\p" + .string "You may not battle unless you have\n" + .string "at least two POKéMON.$" + +TrainerTower_Lobby_Text_ExplainTrainerTower:: + .string "Here at TRAINER TOWER, there is an\n" + .string "event called TIME ATTACK.\p" + .string "You will be timed on how quickly\n" + .string "you can get from the reception\l" + .string "counter to the OWNER on the roof.\p" + .string "The best times will be recorded on\n" + .string "the Time Board.\p" + .string "Try competing with friends to see\n" + .string "who can beat it the fastest.\p" + .string "You will not earn any EXP. Points\n" + .string "or money by beating TRAINERS here.$" + +TrainerTower_Lobby_Text_ThanksForCompeting:: + .string "Thank you for competing!$" + +TrainerTower_Lobby_Text_WonderWhatKindsOfTrainers:: + .string "I'm here to see how good I am.\p" + .string "I wonder what kinds of TRAINERS\n" + .string "are waiting for me?\p" + .string "It's nerve-racking!$" + +TrainerTower_Lobby_Text_StairsTougherThanAnyBattle:: + .string "Gasp, gasp…\n" + .string "Gasp…\p" + .string "Never mind battling! These stairs…\n" + .string "They're tougher than any battle…$" + diff --git a/data/maps/TrainerTower_Roof/scripts.inc b/data/maps/TrainerTower_Roof/scripts.inc new file mode 100644 index 000000000000..f6fb4c122d92 --- /dev/null +++ b/data/maps/TrainerTower_Roof/scripts.inc @@ -0,0 +1,10 @@ +TrainerTower_Roof_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, TrainerTower_OnResume + map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerTower_OnFrame + .byte 0 + +@ Below script is unused, the identical version in the 1F script is used instead + +TrainerTower_Roof_EventScript_Owner:: + call TrainerTower_EventScript_SpeakToOwner + end diff --git a/data/maps/TwoIsland/scripts.inc b/data/maps/TwoIsland/scripts.inc new file mode 100644 index 000000000000..8a6beb690ace --- /dev/null +++ b/data/maps/TwoIsland/scripts.inc @@ -0,0 +1,303 @@ +TwoIsland_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, TwoIsland_OnTransition + .byte 0 + +TwoIsland_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_TWO_ISLAND + setflag FLAG_VISITED_TWO_ISLAND + call TwoIsland_EventScript_SetShopState + end + +TwoIsland_EventScript_SetShopState:: + goto_if_set FLAG_IS_CHAMPION, TwoIsland_EventScript_SetShopStateAfterHoennLink + goto_if_set FLAG_SYS_GAME_CLEAR, TwoIsland_EventScript_SetShopStateAfterChampion + goto_if_set FLAG_RESCUED_LOSTELLE, TwoIsland_EventScript_SetShopStateAfterLostelleRescue + goto TwoIsland_EventScript_SetShopStateDefault + end + +TwoIsland_EventScript_SetShopStateAfterHoennLink:: + goto_if_unset FLAG_TWO_ISLAND_SHOP_INTRODUCED, TwoIsland_EventScript_SetShopInitial + goto_if_unset FLAG_TWO_ISLAND_SHOP_EXPANDED_1, TwoIsland_EventScript_SetShopExpanded1 + goto_if_unset FLAG_TWO_ISLAND_SHOP_EXPANDED_2, TwoIsland_EventScript_SetShopExpanded2 + goto TwoIsland_EventScript_SetShopExpanded3 + end + +TwoIsland_EventScript_SetShopStateAfterChampion:: + goto_if_unset FLAG_TWO_ISLAND_SHOP_INTRODUCED, TwoIsland_EventScript_SetShopInitial + goto_if_unset FLAG_RESCUED_LOSTELLE, TwoIsland_EventScript_SetShopInitial + goto_if_unset FLAG_TWO_ISLAND_SHOP_EXPANDED_1, TwoIsland_EventScript_SetShopExpanded1 + goto TwoIsland_EventScript_SetShopExpanded2 + end + +TwoIsland_EventScript_SetShopStateAfterLostelleRescue:: + goto_if_unset FLAG_TWO_ISLAND_SHOP_INTRODUCED, TwoIsland_EventScript_SetShopInitial + goto TwoIsland_EventScript_SetShopExpanded1 + end + +TwoIsland_EventScript_SetShopStateDefault:: + goto TwoIsland_EventScript_SetShopInitial + end + +TwoIsland_EventScript_SetShopInitial:: + setvar VAR_MAP_SCENE_TWO_ISLAND, 1 + return + +TwoIsland_EventScript_SetShopExpanded1:: + setvar VAR_MAP_SCENE_TWO_ISLAND, 2 + clearflag FLAG_HIDE_TWO_ISLAND_WOMAN + return + +TwoIsland_EventScript_SetShopExpanded2:: + setvar VAR_MAP_SCENE_TWO_ISLAND, 3 + clearflag FLAG_HIDE_TWO_ISLAND_BEAUTY + return + +TwoIsland_EventScript_SetShopExpanded3:: + setvar VAR_MAP_SCENE_TWO_ISLAND, 4 + clearflag FLAG_HIDE_TWO_ISLAND_SUPER_NERD + return + +TwoIsland_EventScript_Clerk:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND, 4, TwoIsland_EventScript_ClerkShopExpanded3 + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND, 3, TwoIsland_EventScript_ClerkShopExpanded2 + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND, 2, TwoIsland_EventScript_ClerkShopExpanded1 + goto TwoIsland_EventScript_ClerkShopInitial + end + +TwoIsland_EventScript_ClerkShopExpanded3:: + goto_if_set FLAG_TWO_ISLAND_SHOP_EXPANDED_3, TwoIsland_EventScript_ClerkShopSkipIntro + setflag FLAG_TWO_ISLAND_SHOP_EXPANDED_3 + message TwoIsland_Text_BringingItemsFromDistantLands + waitmessage + goto TwoIsland_EventScript_ShopExpanded3 + end + +TwoIsland_EventScript_ClerkShopExpanded2:: + goto_if_set FLAG_TWO_ISLAND_SHOP_EXPANDED_2, TwoIsland_EventScript_ClerkShopSkipIntro + setflag FLAG_TWO_ISLAND_SHOP_EXPANDED_2 + message TwoIsland_Text_HopeYouGiveItYourBest + waitmessage + goto TwoIsland_EventScript_ShopExpanded2 + end + +TwoIsland_EventScript_ClerkShopExpanded1:: + goto_if_set FLAG_TWO_ISLAND_SHOP_EXPANDED_1, TwoIsland_EventScript_ClerkShopSkipIntro + setflag FLAG_TWO_ISLAND_SHOP_EXPANDED_1 + message TwoIsland_Text_AddedMerchandiseForLostelle + waitmessage + goto TwoIsland_EventScript_ShopExpanded1 + end + +TwoIsland_EventScript_ClerkShopInitial:: + goto_if_set FLAG_TWO_ISLAND_SHOP_INTRODUCED, TwoIsland_EventScript_ClerkShopSkipIntro + setflag FLAG_TWO_ISLAND_SHOP_INTRODUCED + message TwoIsland_Text_WelcomeToShopMerchandiseLimited + waitmessage + goto TwoIsland_EventScript_ShopInitial + end + +TwoIsland_EventScript_ClerkShopSkipIntro:: + message gText_HowMayIServeYou + waitmessage + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND, 4, TwoIsland_EventScript_ShopExpanded3 + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND, 3, TwoIsland_EventScript_ShopExpanded2 + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND, 2, TwoIsland_EventScript_ShopExpanded1 + goto TwoIsland_EventScript_ShopInitial + end + +TwoIsland_EventScript_ShopInitial:: + pokemart TwoIsland_Items_ShopInitial + msgbox gText_PleaseComeAgain + release + end + + .align 2 +TwoIsland_Items_ShopInitial:: + .2byte ITEM_GREAT_BALL + .2byte ITEM_FRESH_WATER + .2byte ITEM_NONE + release + end + +TwoIsland_EventScript_ShopExpanded1:: + pokemart TwoIsland_Items_ShopExpanded1 + msgbox gText_PleaseComeAgain + release + end + + .align 2 +TwoIsland_Items_ShopExpanded1:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_GREAT_BALL + .2byte ITEM_SODA_POP + .2byte ITEM_FRESH_WATER + .2byte ITEM_NONE + release + end + +TwoIsland_EventScript_ShopExpanded2:: + pokemart TwoIsland_Items_ShopExpanded2 + msgbox gText_PleaseComeAgain + release + end + + .align 2 +TwoIsland_Items_ShopExpanded2:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_GREAT_BALL + .2byte ITEM_LEMONADE + .2byte ITEM_SODA_POP + .2byte ITEM_FRESH_WATER + .2byte ITEM_MOOMOO_MILK + .2byte ITEM_NONE + release + end + +TwoIsland_EventScript_ShopExpanded3:: + pokemart TwoIsland_Items_ShopExpanded3 + msgbox gText_PleaseComeAgain + release + end + + .align 2 +TwoIsland_Items_ShopExpanded3:: + .2byte ITEM_ULTRA_BALL + .2byte ITEM_REPEAT_BALL + .2byte ITEM_TIMER_BALL + .2byte ITEM_LEMONADE + .2byte ITEM_SODA_POP + .2byte ITEM_FRESH_WATER + .2byte ITEM_MOOMOO_MILK + .2byte ITEM_LAVA_COOKIE + .2byte ITEM_NONE + release + end + +TwoIsland_EventScript_Sailor:: + msgbox TwoIsland_Text_FellowMovedFromCeladonCity, MSGBOX_NPC + end + +TwoIsland_EventScript_Woman:: + msgbox TwoIsland_Text_ShopkeepersBrotherWorksGameCorner, MSGBOX_NPC + end + +TwoIsland_EventScript_Beauty:: + lock + faceplayer + famechecker FAMECHECKER_BRUNO, 4 + msgbox TwoIsland_Text_BrunoCameToIslandWhileBack + release + end + +TwoIsland_EventScript_SuperNerd:: + msgbox TwoIsland_Text_BuyRareItemsHere, MSGBOX_NPC + end + +TwoIsland_EventScript_Boy:: + msgbox TwoIsland_Text_OldWomanLivesOutOnCape, MSGBOX_NPC + end + +TwoIsland_EventScript_LittleBoy:: + msgbox TwoIsland_Text_HaveYouTriedJumpingGame, MSGBOX_NPC + end + +TwoIsland_EventScript_IslandSign:: + msgbox TwoIsland_Text_IslandSign, MSGBOX_SIGN + end + +TwoIsland_EventScript_JoyfulGameCornerSign:: + msgbox TwoIsland_Text_JoyfulGameCornerSign, MSGBOX_SIGN + end + +TwoIsland_EventScript_FastCurrentSign:: + msgbox TwoIsland_Text_DangerFastCurrent, MSGBOX_SIGN + end + +TwoIsland_Text_IslandSign:: + .string "TWO ISLAND\n" + .string "Boon Island for Two$" + +TwoIsland_Text_JoyfulGameCornerSign:: + .string "Skip & Chomp!\n" + .string "Joyful GAME CORNER$" + +TwoIsland_Text_DangerFastCurrent:: + .string "DANGER! FAST CURRENT!\n" + .string "Fishing and surfing prohibited!$" + +TwoIsland_Text_WelcomeToShopMerchandiseLimited:: + .string "Oh!\n" + .string "Hello, welcome to my shop!\p" + .string "We've only opened up recently.\p" + .string "Our merchandise is limited, but I\n" + .string "hope we can serve your needs.$" + +TwoIsland_Text_AddedMerchandiseForLostelle:: + .string "I can't tell you how grateful I am\n" + .string "for your rescue of LOSTELLE.\p" + .string "Thanks to your feat, the people of\n" + .string "THREE ISLAND have changed their\l" + .string "attitudes about KANTO people.\p" + .string "And, I'm from KANTO, you see.\p" + .string "The people of THREE ISLAND\n" + .string "helped me add to my merchandise.$" + +TwoIsland_Text_HopeYouGiveItYourBest:: + .string "Hi! I'm giving it my best here.\n" + .string "I hope you do too, {PLAYER}.$" + +TwoIsland_Text_BringingItemsFromDistantLands:: + .string "Oh, hello, {PLAYER}!\n" + .string "Welcome!\p" + .string "I've started bringing in items from\n" + .string "distant lands.\p" + .string "I've got some rare items in, too.\n" + .string "Please have a look!$" + +TwoIsland_Text_FellowMovedFromCeladonCity:: + .string "That fellow there, he moved here\n" + .string "from CELADON CITY.\p" + .string "He started up a shop with his\n" + .string "younger brother.\p" + .string "You have to wonder if he knew what\n" + .string "he was getting into.$" + +TwoIsland_Text_ShopkeepersBrotherWorksGameCorner:: + .string "The shopkeeper's brother took\n" + .string "a job at the GAME CORNER.\p" + .string "He's trying to pull together money\n" + .string "so they can buy more merchandise.$" + +TwoIsland_Text_BrunoCameToIslandWhileBack:: + .string "Listen, listen.\n" + .string "Did you know?\p" + .string "A famous TRAINER came to the\n" + .string "ISLAND a little while back.\p" + .string "He's one of the ELITE FOUR.\n" + .string "His name is BRUNO.\p" + .string "He went away disappointed when he\n" + .string "found out that they were all sold\l" + .string "out of Rage Candybars.$" + +TwoIsland_Text_BuyRareItemsHere:: + .string "The discerning TRAINER knows to\n" + .string "buy rare items here!$" + +TwoIsland_Text_OldWomanLivesOutOnCape:: + .string "There's an old woman who lives in\n" + .string "a cottage out on the cape.\p" + .string "She gives the eye to POKéMON.\n" + .string "It's a bit unnerving.$" + +TwoIsland_Text_HaveYouTriedJumpingGame:: + .string "Boing! Boing!\n" + .string "Have you tried the jumping game?\p" + .string "The POKéMON you can enter…\n" + .string "Boing!\p" + .string "Some go boing!\p" + .string "And some go boooooooing!\p" + .string "Did you know that?\n" + .string "Boing!$" + diff --git a/data/maps/TwoIsland_CapeBrink/scripts.inc b/data/maps/TwoIsland_CapeBrink/scripts.inc new file mode 100644 index 000000000000..4c6b6972fe50 --- /dev/null +++ b/data/maps/TwoIsland_CapeBrink/scripts.inc @@ -0,0 +1,2 @@ +TwoIsland_CapeBrink_MapScripts:: + .byte 0 diff --git a/data/maps/TwoIsland_CapeBrink_House/scripts.inc b/data/maps/TwoIsland_CapeBrink_House/scripts.inc new file mode 100644 index 000000000000..f815c484b535 --- /dev/null +++ b/data/maps/TwoIsland_CapeBrink_House/scripts.inc @@ -0,0 +1,58 @@ +TwoIsland_CapeBrink_House_MapScripts:: + .byte 0 + +@ See move_tutors.inc + +Text_UltimateMoveThatMon:: + .string "I perfected the ultimate move of\n" + .string "its type…\p" + .string "But will no one take it for\n" + .string "future use?\p" + .string "…Hm? Hmmm!\p" + .string "Y-you…\n" + .string "Th-that {STR_VAR_1}…$" + +Text_JustMistaken:: + .string "…No…\n" + .string "I was just mistaken.$" + +Text_AllowMeToTeachMonUltimateMove:: + .string "Oh! This is the one!\n" + .string "This is the POKéMON!\p" + .string "This {STR_VAR_1} is worthy of\n" + .string "learning my ultimate move!\p" + .string "Will you allow it?\p" + .string "Will you allow your {STR_VAR_1} to\n" + .string "learn my {STR_VAR_2}?$" + +Text_YouRejectIt:: + .string "Gaah! You reject it?\n" + .string "No, I won't be dissuaded!$" + +Text_LetMeConferUltimateMove:: + .string "You will allow it?\p" + .string "Then, let me confer my ultimate\n" + .string "{STR_VAR_2} on your {STR_VAR_1}.\p" + .string "Ggggrah-awooo!$" + +Text_TaughtMove:: + .string "Gasp, gasp, gasp…\p" + .string "I didn't think I could teach that\n" + .string "move while I still lived…$" + +Text_MakeBestUseOfMove:: + .string "I implore you to make the best\n" + .string "use of that move and gain power!$" + +Text_PassedOnEverythingIKnow:: + .string "Gasp, gasp, gasp…\p" + .string "I have no regrets now.\n" + .string "I've passed on everything I know.\p" + .string "Now I can live out my life knowing\n" + .string "my work is done.$" + +Text_FeelRejuvenated:: + .string "After I passed on my knowledge to\n" + .string "you, I felt so much relief.\p" + .string "In fact, I feel rejuvenated,\n" + .string "as if I were younger again!$" diff --git a/data/maps/TwoIsland_Harbor/scripts.inc b/data/maps/TwoIsland_Harbor/scripts.inc new file mode 100644 index 000000000000..0cb91f783417 --- /dev/null +++ b/data/maps/TwoIsland_Harbor/scripts.inc @@ -0,0 +1,11 @@ +TwoIsland_Harbor_MapScripts:: + .byte 0 + +TwoIsland_Harbor_EventScript_Sailor:: + lock + faceplayer + message Text_WhereDoYouWantToSail + waitmessage + setvar VAR_0x8004, SEAGALLOP_TWO_ISLAND + goto EventScript_ChooseDestFromTwoIsland + end diff --git a/data/maps/TwoIsland_House/scripts.inc b/data/maps/TwoIsland_House/scripts.inc new file mode 100644 index 000000000000..fda4a88de9e9 --- /dev/null +++ b/data/maps/TwoIsland_House/scripts.inc @@ -0,0 +1,166 @@ +.equ CHECKED_MUSHROOMS, FLAG_TEMP_1 +.equ HAS_BIG_MUSHROOM, FLAG_TEMP_2 +.equ HAS_TINY_MUSHROOMS, FLAG_TEMP_3 +.equ HAS_BOTH_MUSHROOMS, FLAG_TEMP_4 + +TwoIsland_House_MapScripts:: + .byte 0 + +TwoIsland_House_EventScript_MoveManiac:: + lock + faceplayer + clearflag HAS_BIG_MUSHROOM + clearflag HAS_TINY_MUSHROOMS + clearflag HAS_BOTH_MUSHROOMS + goto_if_set CHECKED_MUSHROOMS, TwoIsland_House_EventScript_CheckPlayerHasMushrooms + msgbox TwoIsland_House_Text_TeachMonMoveForMushroom + setflag CHECKED_MUSHROOMS + goto TwoIsland_House_EventScript_CheckPlayerHasMushrooms + end + +TwoIsland_House_EventScript_CheckPlayerHasMushrooms:: + checkitem ITEM_BIG_MUSHROOM + call_if_eq VAR_RESULT, TRUE, TwoIsland_House_EventScript_SetHasBigMushroom + checkitem ITEM_TINY_MUSHROOM, 2 + call_if_eq VAR_RESULT, TRUE, TwoIsland_House_EventScript_SetHasTinyMushrooms + goto_if_set HAS_BIG_MUSHROOM, TwoIsland_House_EventScript_CheckAlsoHasTinyMushrooms + goto_if_set HAS_TINY_MUSHROOMS, TwoIsland_House_EventScript_CheckAlsoHasBigMushroom + goto TwoIsland_House_EventScript_EndTutorMove + end + +TwoIsland_House_EventScript_CheckAlsoHasTinyMushrooms:: + call_if_set HAS_TINY_MUSHROOMS, TwoIsland_House_EventScript_SetHasBothMushrooms + goto TwoIsland_House_EventScript_AskTutorMon + end + +TwoIsland_House_EventScript_CheckAlsoHasBigMushroom:: + call_if_set HAS_BIG_MUSHROOM, TwoIsland_House_EventScript_SetHasBothMushrooms + goto TwoIsland_House_EventScript_AskTutorMon + end + +TwoIsland_House_EventScript_AskTutorMon:: + msgbox TwoIsland_House_Text_WantMeToTeachMove, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, TwoIsland_House_EventScript_EndTutorMove + goto TwoIsland_House_EventScript_ChooseMonToTutor + end + +TwoIsland_House_EventScript_ChooseMonToTutor:: + msgbox TwoIsland_House_Text_TutorWhichMon + special ChooseMonForMoveRelearner + waitstate + goto_if_ge VAR_0x8004, PARTY_SIZE, TwoIsland_House_EventScript_EndTutorMove + special IsSelectedMonEgg + goto_if_eq VAR_RESULT, TRUE, TwoIsland_House_EventScript_CantTutorEgg + goto_if_eq VAR_0x8005, 0, TwoIsland_House_EventScript_NoMoveToTutorMon + goto TwoIsland_House_EventScript_ChooseMoveToTeach + end + +TwoIsland_House_EventScript_ChooseMoveToTeach:: + msgbox TwoIsland_House_Text_TeachWhichMove + special TeachMoveRelearnerMove + waitstate + goto_if_eq VAR_0x8004, 0, TwoIsland_House_EventScript_ChooseMonToTutor + goto_if_set HAS_BOTH_MUSHROOMS, TwoIsland_House_EventScript_ChooseMushroom + goto_if_set HAS_BIG_MUSHROOM, TwoIsland_House_EventScript_GiveBigMushroom + goto_if_set HAS_TINY_MUSHROOMS, TwoIsland_House_EventScript_GiveTinyMushrooms + end + +TwoIsland_House_EventScript_GiveBigMushroom:: + removeitem ITEM_BIG_MUSHROOM + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox TwoIsland_House_Text_HandedOverOneBigMushroom + call EventScript_RestorePrevTextColor + goto TwoIsland_House_EventScript_EndTutorMove + end + +TwoIsland_House_EventScript_GiveTinyMushrooms:: + removeitem ITEM_TINY_MUSHROOM, 2 + textcolor NPC_TEXT_COLOR_NEUTRAL + msgbox TwoIsland_House_Text_HandedOverTwoTinyMushrooms + call EventScript_RestorePrevTextColor + goto TwoIsland_House_EventScript_EndTutorMove + end + +TwoIsland_House_EventScript_ChooseMushroom:: + message TwoIsland_House_Text_IllNeedMushroomOrTwo + waitmessage + multichoice 0, 0, MULTI_MUSHROOMS, TRUE + switch VAR_RESULT + case 0, TwoIsland_House_EventScript_GiveTinyMushrooms + case 1, TwoIsland_House_EventScript_GiveBigMushroom + end + +TwoIsland_House_EventScript_NoMoveToTutorMon:: + msgbox TwoIsland_House_Text_NoMoveICanTeachThatMon + goto TwoIsland_House_EventScript_ChooseMonToTutor + end + +TwoIsland_House_EventScript_CantTutorEgg:: + msgbox TwoIsland_House_Text_CantTeachAnEgg + goto TwoIsland_House_EventScript_ChooseMonToTutor + end + +TwoIsland_House_EventScript_EndTutorMove:: + msgbox TwoIsland_House_Text_NeedMushroomOrTwoToLearnMove + release + end + +TwoIsland_House_EventScript_SetHasBigMushroom:: + setflag HAS_BIG_MUSHROOM + return + +TwoIsland_House_EventScript_SetHasTinyMushrooms:: + setflag HAS_TINY_MUSHROOMS + return + +TwoIsland_House_EventScript_SetHasBothMushrooms:: + setflag HAS_BOTH_MUSHROOMS + return + +TwoIsland_House_Text_TeachMonMoveForMushroom:: + .string "I'm the POKéMON MOVE MANIAC.\p" + .string "I know every single move that\n" + .string "POKéMON learn growing up.\p" + .string "I'm also a mushroom maniac.\p" + .string "Bring me two TINYMUSHROOMS,\n" + .string "or one BIG MUSHROOM.\p" + .string "If you do that for me, I'll teach\n" + .string "a move to one POKéMON.$" + +TwoIsland_House_Text_WantMeToTeachMove:: + .string "Sniff, sniff…\n" + .string "Hm! You smell of MUSHROOMS!\p" + .string "Do you want me to teach a move\n" + .string "to a POKéMON of yours?$" + +TwoIsland_House_Text_TutorWhichMon:: + .string "Which POKéMON needs tutoring?$" + +TwoIsland_House_Text_TeachWhichMove:: + .string "Which move should I teach?$" + +TwoIsland_House_Text_NoMoveICanTeachThatMon:: + .string "Sorry…\p" + .string "It doesn't appear as if I have a\n" + .string "move I can teach that POKéMON.$" + +TwoIsland_House_Text_IllNeedMushroomOrTwo:: + .string "Then, I'll need a MUSHROOM or two.\n" + .string "What are you going to give me?$" + +TwoIsland_House_Text_HandedOverTwoTinyMushrooms:: + .string "{PLAYER} handed over two\n" + .string "TINYMUSHROOMS in exchange.$" + +TwoIsland_House_Text_HandedOverOneBigMushroom:: + .string "{PLAYER} handed over one\n" + .string "BIG MUSHROOM in exchange.$" + +TwoIsland_House_Text_NeedMushroomOrTwoToLearnMove:: + .string "If your POKéMON need to learn a\n" + .string "move, I need a MUSHROOM or two.$" + +TwoIsland_House_Text_CantTeachAnEgg:: + .string "Hunh? There isn't a single move\n" + .string "that I can teach an EGG.$" + diff --git a/data/maps/TwoIsland_JoyfulGameCorner/scripts.inc b/data/maps/TwoIsland_JoyfulGameCorner/scripts.inc new file mode 100644 index 000000000000..16ea9c1b7947 --- /dev/null +++ b/data/maps/TwoIsland_JoyfulGameCorner/scripts.inc @@ -0,0 +1,303 @@ +TwoIsland_JoyfulGameCorner_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, TwoIsland_JoyfulGameCorner_OnTransition + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, TwoIsland_JoyfulGameCorner_OnWarp + map_script MAP_SCRIPT_ON_FRAME_TABLE, TwoIsland_JoyfulGameCorner_OnFrame + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + .byte 0 + +TwoIsland_JoyfulGameCorner_OnTransition:: + call_if_set FLAG_GOT_MOON_STONE_FROM_JOYFUL_GAME_CORNER, TwoIsland_JoyfulGameCorner_EventScript_SetLostelleReturnedPos + end + +TwoIsland_JoyfulGameCorner_EventScript_SetLostelleReturnedPos:: + setobjectxyperm LOCALID_JOYFUL_GAME_CORNER_DADDY, 6, 2 + setobjectmovementtype LOCALID_JOYFUL_GAME_CORNER_DADDY, MOVEMENT_TYPE_FACE_DOWN + setobjectmovementtype LOCALID_JOYFUL_GAME_CORNER_LOSTELLE, MOVEMENT_TYPE_LOOK_AROUND + setvar VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 4 + return + +TwoIsland_JoyfulGameCorner_OnWarp:: + map_script_2 VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 2, TwoIsland_JoyfulGameCorner_EventScript_TurnPlayerNorth + map_script_2 VAR_CABLE_CLUB_STATE, USING_MINIGAME, EventScript_CheckTurnAttendant_Frlg + .2byte 0 + +TwoIsland_JoyfulGameCorner_EventScript_TurnPlayerNorth:: + turnobject LOCALID_PLAYER, DIR_NORTH + end + +TwoIsland_JoyfulGameCorner_OnFrame:: + map_script_2 VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 0, TwoIsland_JoyfulGameCorner_EventScript_HelpFindLostelleScene + map_script_2 VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 2, TwoIsland_JoyfulGameCorner_EventScript_FoundLostelleScene + map_script_2 VAR_CABLE_CLUB_STATE, USING_MINIGAME, CableClub_EventScript_ExitMinigameRoom + .2byte 0 + +TwoIsland_JoyfulGameCorner_EventScript_FoundLostelleScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + msgbox TwoIsland_JoyfulGameCorner_Text_YouRescuedLostelle + textcolor NPC_TEXT_COLOR_FEMALE + special GetPlayerBigGuyGirlString + msgbox TwoIsland_JoyfulGameCorner_Text_LostelleItsOkayDaddy + closemessage + applymovement LOCALID_JOYFUL_GAME_CORNER_LOSTELLE, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + setvar VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 3 + releaseall + end + +TwoIsland_JoyfulGameCorner_EventScript_HelpFindLostelleScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_JOYFUL_GAME_CORNER_DADDY, TwoIsland_JoyfulGameCorner_Movement_DaddyPacing + waitmovement 0 + msgbox TwoIsland_JoyfulGameCorner_Text_WhereHasLostelleGottenTo + closemessage + applymovement LOCALID_JOYFUL_GAME_CORNER_DADDY, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + playse SE_PIN + applymovement LOCALID_JOYFUL_GAME_CORNER_DADDY, Common_Movement_ExclamationMark + waitmovement 0 + applymovement LOCALID_JOYFUL_GAME_CORNER_DADDY, Common_Movement_Delay48 + waitmovement 0 + applymovement LOCALID_JOYFUL_GAME_CORNER_DADDY, TwoIsland_JoyfulGameCorner_Movement_DaddyApproachPlayer + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + msgbox TwoIsland_JoyfulGameCorner_Text_PleaseHelpFindLostelle + closemessage + playse SE_DOOR + waitse + applymovement LOCALID_PLAYER, TwoIsland_JoyfulGameCorner_Movement_PlayerFaceDaddy + waitmovement 0 + playbgm MUS_RG_ENCOUNTER_BOY, 0 + addobject LOCALID_JOYFUL_GAME_CORNER_BIKER + applymovement LOCALID_JOYFUL_GAME_CORNER_BIKER, TwoIsland_JoyfulGameCorner_Movement_BikerLookAround + waitmovement 0 + msgbox TwoIsland_JoyfulGameCorner_Text_IsThisOnlyThreeIsland + applymovement LOCALID_JOYFUL_GAME_CORNER_BIKER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + msgbox TwoIsland_JoyfulGameCorner_Text_ThisIsTwoIslandMoveIt + msgbox TwoIsland_JoyfulGameCorner_Text_TheseIslandsAreConfusing + closemessage + applymovement LOCALID_JOYFUL_GAME_CORNER_BIKER, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + playse SE_EXIT + removeobject LOCALID_JOYFUL_GAME_CORNER_BIKER + fadedefaultbgm + delay 60 + msgbox TwoIsland_JoyfulGameCorner_Text_PunkScuffedUpMyFloor + clearflag FLAG_HIDE_THREE_ISLAND_LONE_BIKER + setvar VAR_MAP_SCENE_THREE_ISLAND, 2 + setvar VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 1 + releaseall + end + +TwoIsland_JoyfulGameCorner_Movement_DaddyPacing:: + walk_left + walk_right + walk_right + delay_8 + walk_in_place_faster_up + delay_16 + step_end + +TwoIsland_JoyfulGameCorner_Movement_DaddyApproachPlayer:: + walk_down + walk_down + walk_down + walk_in_place_faster_left + step_end + +TwoIsland_JoyfulGameCorner_Movement_PlayerFaceDaddy:: + walk_left + walk_in_place_faster_right + step_end + +TwoIsland_JoyfulGameCorner_Movement_BikerLookAround:: + walk_in_place_faster_left + delay_8 + walk_in_place_faster_right + delay_8 + walk_in_place_faster_up + step_end + +TwoIsland_JoyfulGameCorner_EventScript_InfoMan:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 4, JoyfulGameCorner_EventScript_InfoMan2_Frlg + goto_if_set FLAG_RESCUED_LOSTELLE, TwoIsland_JoyfulGameCorner_EventScript_GetGamesGoingSoon + msgbox TwoIsland_JoyfulGameCorner_Text_NotRunningAnyGamesToday + release + end + +TwoIsland_JoyfulGameCorner_EventScript_GetGamesGoingSoon:: + msgbox TwoIsland_JoyfulGameCorner_Text_GetGamesGoingSoon + release + end + +@ Only referred to as Lostelles Daddy in text +TwoIsland_JoyfulGameCorner_EventScript_LostellesDaddy:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 4, JoyfulGameCorner_EventScript_MinigameAttendant_Frlg + goto_if_set FLAG_GOT_MOON_STONE_FROM_JOYFUL_GAME_CORNER, TwoIsland_JoyfulGameCorner_EventScript_GetGameCornerRunning + goto_if_eq VAR_MAP_SCENE_TWO_ISLAND_JOYFUL_GAME_CORNER, 3, TwoIsland_JoyfulGameCorner_EventScript_GiveDaddyMeteorite + msgbox TwoIsland_JoyfulGameCorner_Text_PleaseGoToThreeIsland + release + end + +TwoIsland_JoyfulGameCorner_EventScript_GiveDaddyMeteorite:: + goto_if_set FLAG_NO_ROOM_FOR_JOYFUL_GAME_CORNER_MOON_STONE, TwoIsland_JoyfulGameCorner_EventScript_ReceiveMoonStone + msgbox TwoIsland_JoyfulGameCorner_Text_ThisIsForMe + setvar VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 2 + textcolor NPC_TEXT_COLOR_NEUTRAL + playfanfare MUS_OBTAIN_TMHM + message TwoIsland_JoyfulGameCorner_Text_HandedMeteoriteToLostellesDaddy + waitmessage + waitfanfare + call EventScript_RestorePrevTextColor + removeitem ITEM_METEORITE + msgbox TwoIsland_JoyfulGameCorner_Text_OhThisIsFromBill + goto TwoIsland_JoyfulGameCorner_EventScript_ReceiveMoonStone + end + +TwoIsland_JoyfulGameCorner_EventScript_ReceiveMoonStone:: + checkitemspace ITEM_MOON_STONE + goto_if_eq VAR_RESULT, FALSE, TwoIsland_JoyfulGameCorner_EventScript_NoRoomForMoonStone + additem ITEM_MOON_STONE + setflag FLAG_GOT_MOON_STONE_FROM_JOYFUL_GAME_CORNER + msgreceiveditem TwoIsland_JoyfulGameCorner_Text_ReceivedMoonStoneFromLostellesDaddy, ITEM_MOON_STONE + release + end + +TwoIsland_JoyfulGameCorner_EventScript_GetGameCornerRunning:: + msgbox TwoIsland_JoyfulGameCorner_Text_IllGetGameCornerRunning + release + end + +TwoIsland_JoyfulGameCorner_EventScript_NoRoomForMoonStone:: + setflag FLAG_NO_ROOM_FOR_JOYFUL_GAME_CORNER_MOON_STONE + msgbox TwoIsland_JoyfulGameCorner_Text_NotGoingToFitInBag + release + end + +TwoIsland_JoyfulGameCorner_EventScript_Lostelle:: + lock + faceplayer + msgbox TwoIsland_JoyfulGameCorner_Text_PleaseShowMeYouBeingCool + release + end + +TwoIsland_JoyfulGameCorner_Text_WhereHasLostelleGottenTo:: + .string "Now, where's LOSTELLE gotten to\n" + .string "today?\p" + .string "She always brings me lunch every\n" + .string "day right about now…$" + +TwoIsland_JoyfulGameCorner_Text_PleaseHelpFindLostelle:: + .string "Hm? You, there!\n" + .string "Are you a friend of LOSTELLE's?\p" + .string "Have you seen LOSTELLE around?\n" + .string "I don't know where she might be.\l" + .string "She should've been here long ago.\p" + .string "LOSTELLE's a cutie - she got my\n" + .string "looks - so what if someone…\p" + .string "What if something's happened to\n" + .string "my LOSTELLE?!\p" + .string "Please, help me find her!\n" + .string "Please go search THREE ISLAND!$" + +TwoIsland_JoyfulGameCorner_Text_IsThisOnlyThreeIsland:: + .string "Hah? What is this GAME CORNER?\n" + .string "How much sadder can this get?\p" + .string "Those clowns…\p" + .string "They said they'd be waiting on the\n" + .string "island, so where are they?\p" + .string "Hey, you! Is this the only THREE\n" + .string "ISLAND around here?$" + +TwoIsland_JoyfulGameCorner_Text_ThisIsTwoIslandMoveIt:: + .string "Try waking up before you crawl out\n" + .string "of bed, you punk.\p" + .string "This is TWO ISLAND!\p" + .string "Move it! Get your filthy motorbike\n" + .string "out of my place!$" + +TwoIsland_JoyfulGameCorner_Text_TheseIslandsAreConfusing:: + .string "Huh…\n" + .string "Oh, oh, gotcha.\p" + .string "Tch…\n" + .string "These islands are confusing…$" + +TwoIsland_JoyfulGameCorner_Text_PunkScuffedUpMyFloor:: + .string "Would you look at that?\n" + .string "That punk scuffed up my floor.$" + +TwoIsland_JoyfulGameCorner_Text_PleaseGoToThreeIsland:: + .string "Hey, but listen! I'm begging you,\n" + .string "you have to go to THREE ISLAND.\p" + .string "If anything were to happen to my\n" + .string "LOSTELLE…\p" + .string "My place is the house with the red\n" + .string "roof on THREE ISLAND.\p" + .string "She may just show up late here,\n" + .string "so I can't run off anywhere.\p" + .string "That's why I have to get you to do\n" + .string "me this big favor.$" + +TwoIsland_JoyfulGameCorner_Text_NotRunningAnyGamesToday:: + .string "I'm sorry.\n" + .string "We're not running any games today.$" + +TwoIsland_JoyfulGameCorner_Text_GetGamesGoingSoon:: + .string "We'll get the games going soon\n" + .string "for you!$" + +TwoIsland_JoyfulGameCorner_Text_YouRescuedLostelle:: + .string "So you rescued LOSTELLE?\n" + .string "How can I thank you?\p" + .string "LOSTELLE, darling, forgive me!\p" + .string "Daddy didn't know you were scared\n" + .string "and in trouble!$" + +TwoIsland_JoyfulGameCorner_Text_LostelleItsOkayDaddy:: + .string "LOSTELLE: It's okay, Daddy.\n" + .string "I got to be friends with {PLAYER}!$" + +TwoIsland_JoyfulGameCorner_Text_ThisIsForMe:: + .string "Oh, what's that?\n" + .string "You're saying that this is for me?\p" + .string "How did you know that I love rare\n" + .string "rocks and gems?\p" + .string "You sure know how to make a guy\n" + .string "happy.$" + +TwoIsland_JoyfulGameCorner_Text_HandedMeteoriteToLostellesDaddy:: + .string "{PLAYER} handed the METEORITE\n" + .string "to LOSTELLE's daddy.$" + +TwoIsland_JoyfulGameCorner_Text_OhThisIsFromBill:: + .string "Oh, I see, this is from BILL!\n" + .string "You have to thank him for me!\p" + .string "You know, you've been fantastic.\n" + .string "I want you to have this.$" + +TwoIsland_JoyfulGameCorner_Text_ReceivedMoonStoneFromLostellesDaddy:: + .string "{PLAYER} received a MOON STONE\n" + .string "from LOSTELLE's daddy.$" + +TwoIsland_JoyfulGameCorner_Text_NotGoingToFitInBag:: + .string "Your BAG's not going to fit another\n" + .string "thing…$" + +TwoIsland_JoyfulGameCorner_Text_IllGetGameCornerRunning:: + .string "All right, I'll get the GAME CORNER\n" + .string "running right away.\p" + .string "You have to come visit with a\n" + .string "friend.$" + +TwoIsland_JoyfulGameCorner_Text_PleaseShowMeYouBeingCool:: + .string "Listen, listen!\p" + .string "Please show me you being cool\n" + .string "again!$" + diff --git a/data/maps/TwoIsland_PokemonCenter_1F/scripts.inc b/data/maps/TwoIsland_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..48bb94020c75 --- /dev/null +++ b/data/maps/TwoIsland_PokemonCenter_1F/scripts.inc @@ -0,0 +1,38 @@ +TwoIsland_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, TwoIsland_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +TwoIsland_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_TWO_ISLAND + end + +TwoIsland_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +TwoIsland_PokemonCenter_1F_EventScript_GBAKid:: + msgbox TwoIsland_PokemonCenter_1F_Text_HaveYouVisitedGameCorner, MSGBOX_NPC + end + +TwoIsland_PokemonCenter_1F_EventScript_BugCatcher:: + msgbox TwoIsland_PokemonCenter_1F_Text_OldLadyLivesOutOnCape, MSGBOX_NPC + end + +TwoIsland_PokemonCenter_1F_Text_HaveYouVisitedGameCorner:: + .string "Have you visited the GAME CORNER\n" + .string "already?\p" + .string "It's no good to go alone.\n" + .string "You have to take a friend along.$" + +TwoIsland_PokemonCenter_1F_Text_OldLadyLivesOutOnCape:: + .string "Not many people live on\n" + .string "TWO ISLAND.\p" + .string "There is this old lady who lives\n" + .string "out on the cape.\p" + .string "She's been there since I don't know\n" + .string "when.$" + diff --git a/data/maps/TwoIsland_PokemonCenter_2F/scripts.inc b/data/maps/TwoIsland_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..99db222c242d --- /dev/null +++ b/data/maps/TwoIsland_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +TwoIsland_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +TwoIsland_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +TwoIsland_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +TwoIsland_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/UndergroundPath_EastEntrance/scripts.inc b/data/maps/UndergroundPath_EastEntrance/scripts.inc new file mode 100644 index 000000000000..b5694469a9d0 --- /dev/null +++ b/data/maps/UndergroundPath_EastEntrance/scripts.inc @@ -0,0 +1,12 @@ +UndergroundPath_EastEntrance_MapScripts:: + .byte 0 + +UndergroundPath_EastEntrance_EventScript_Woman:: + msgbox UndergroundPath_EastEntrance_Text_DoYouGoToCeladonDeptStore, MSGBOX_NPC + end + +UndergroundPath_EastEntrance_Text_DoYouGoToCeladonDeptStore:: + .string "The DEPARTMENT STORE in CELADON\n" + .string "has a great selection.\p" + .string "Do you go there very often?$" + diff --git a/data/maps/UndergroundPath_EastWestTunnel/scripts.inc b/data/maps/UndergroundPath_EastWestTunnel/scripts.inc new file mode 100644 index 000000000000..9b0bb62443fc --- /dev/null +++ b/data/maps/UndergroundPath_EastWestTunnel/scripts.inc @@ -0,0 +1,7 @@ +UndergroundPath_EastWestTunnel_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, UndergroundPath_EastWestTunnel_OnTransition + .byte 0 + +UndergroundPath_EastWestTunnel_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_UNDERGROUND_PATH_EAST_WEST_TUNNEL + end diff --git a/data/maps/UndergroundPath_NorthEntrance/scripts.inc b/data/maps/UndergroundPath_NorthEntrance/scripts.inc new file mode 100644 index 000000000000..6719484491bb --- /dev/null +++ b/data/maps/UndergroundPath_NorthEntrance/scripts.inc @@ -0,0 +1,36 @@ +UndergroundPath_NorthEntrance_MapScripts:: + .byte 0 + +UndergroundPath_NorthEntrance_EventScript_Saige:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_NIDORAN + call EventScript_GetInGameTradeSpeciesInfo + goto_if_set FLAG_DID_MS_NIDO_TRADE, UndergroundPath_NorthEntrance_EventScript_AlreadyTraded + msgbox Trade_Text_DoYouHaveMonWantToTradeForMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, UndergroundPath_NorthEntrance_EventScript_DeclineTrade + call EventScript_ChooseMonForInGameTrade + goto_if_ge VAR_0x8004, PARTY_SIZE, UndergroundPath_NorthEntrance_EventScript_DeclineTrade + call EventScript_GetInGameTradeSpecies + goto_if_ne VAR_RESULT, VAR_0x8009, UndergroundPath_NorthEntrance_EventScript_NotRequestedMon + call EventScript_DoInGameTrade + msgbox Trade_Text_ThanksYoureAPal + setflag FLAG_DID_MS_NIDO_TRADE + release + end + +UndergroundPath_NorthEntrance_EventScript_DeclineTrade:: + msgbox Trade_Text_ThatsTooBad + release + end + +UndergroundPath_NorthEntrance_EventScript_NotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox Trade_Text_ThisIsNoMon + release + end + +UndergroundPath_NorthEntrance_EventScript_AlreadyTraded:: + msgbox Trade_Text_HowIsMyOldMon + release + end diff --git a/data/maps/UndergroundPath_NorthSouthTunnel/scripts.inc b/data/maps/UndergroundPath_NorthSouthTunnel/scripts.inc new file mode 100644 index 000000000000..fb676d76e2f4 --- /dev/null +++ b/data/maps/UndergroundPath_NorthSouthTunnel/scripts.inc @@ -0,0 +1,7 @@ +UndergroundPath_NorthSouthTunnel_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, UndergroundPath_NorthSouthTunnel_OnTransition + .byte 0 + +UndergroundPath_NorthSouthTunnel_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_UNDERGROUND_PATH_NORTH_SOUTH_TUNNEL + end diff --git a/data/maps/UndergroundPath_SouthEntrance/scripts.inc b/data/maps/UndergroundPath_SouthEntrance/scripts.inc new file mode 100644 index 000000000000..6172487b4318 --- /dev/null +++ b/data/maps/UndergroundPath_SouthEntrance/scripts.inc @@ -0,0 +1,11 @@ +UndergroundPath_SouthEntrance_MapScripts:: + .byte 0 + +UndergroundPath_SouthEntrance_EventScript_Woman:: + msgbox UndergroundPath_SouthEntrance_Text_PeopleLoseThingsInTheDarkness, MSGBOX_NPC + end + +UndergroundPath_SouthEntrance_Text_PeopleLoseThingsInTheDarkness:: + .string "People often lose things in the\n" + .string "darkness of the UNDERGROUND PATH.$" + diff --git a/data/maps/UndergroundPath_WestEntrance/scripts.inc b/data/maps/UndergroundPath_WestEntrance/scripts.inc new file mode 100644 index 000000000000..ab786def20db --- /dev/null +++ b/data/maps/UndergroundPath_WestEntrance/scripts.inc @@ -0,0 +1,11 @@ +UndergroundPath_WestEntrance_MapScripts:: + .byte 0 + +UndergroundPath_WestEntrance_EventScript_BaldingMan:: + msgbox UndergroundPath_WestEntrance_Text_SleepyMonNearCeladon, MSGBOX_NPC + end + +UndergroundPath_WestEntrance_Text_SleepyMonNearCeladon:: + .string "I heard a sleepy POKéMON appeared\n" + .string "out near CELADON CITY, too.$" + diff --git a/data/maps/UnionRoom_Frlg/scripts.inc b/data/maps/UnionRoom_Frlg/scripts.inc new file mode 100644 index 000000000000..5412274032f8 --- /dev/null +++ b/data/maps/UnionRoom_Frlg/scripts.inc @@ -0,0 +1,107 @@ +UnionRoom_Frlg_MapScripts:: + map_script MAP_SCRIPT_ON_RESUME, UnionRoom_OnResume_Frlg + map_script MAP_SCRIPT_ON_TRANSITION, UnionRoom_OnTransition_Frlg + .byte 0 + +UnionRoom_OnResume_Frlg:: + setflag FLAG_HIDE_UNION_ROOM_PLAYER_1 + setflag FLAG_HIDE_UNION_ROOM_PLAYER_2 + setflag FLAG_HIDE_UNION_ROOM_PLAYER_3 + setflag FLAG_HIDE_UNION_ROOM_PLAYER_4 + setflag FLAG_HIDE_UNION_ROOM_PLAYER_5 + setflag FLAG_HIDE_UNION_ROOM_PLAYER_6 + setflag FLAG_HIDE_UNION_ROOM_PLAYER_7 + setflag FLAG_HIDE_UNION_ROOM_PLAYER_8 + removeobject LOCALID_UNION_ROOM_PLAYER_1 + removeobject LOCALID_UNION_ROOM_PLAYER_2 + removeobject LOCALID_UNION_ROOM_PLAYER_3 + removeobject LOCALID_UNION_ROOM_PLAYER_4 + removeobject LOCALID_UNION_ROOM_PLAYER_5 + removeobject LOCALID_UNION_ROOM_PLAYER_6 + removeobject LOCALID_UNION_ROOM_PLAYER_7 + removeobject LOCALID_UNION_ROOM_PLAYER_8 + special RunUnionRoom + end + +UnionRoom_OnTransition_Frlg:: + setflag FLAG_TEMP_HIDE_FOLLOWER + end + +UnionRoom_EventScript_Player1_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 1 + waitstate + release + end + +UnionRoom_EventScript_Player2_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 2 + waitstate + release + end + +UnionRoom_EventScript_Player3_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 3 + waitstate + release + end + +UnionRoom_EventScript_Player4_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 4 + waitstate + release + end + +UnionRoom_EventScript_Player5_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 5 + waitstate + release + end + +UnionRoom_EventScript_Player6_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 6 + waitstate + release + end + +UnionRoom_EventScript_Player7_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 7 + waitstate + release + end + +UnionRoom_EventScript_Player8_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 8 + waitstate + release + end + +UnionRoom_EventScript_Attendant_Frlg:: + lock + faceplayer + setvar VAR_RESULT, 9 + waitstate + release + end + +UnionRoom_EventScript_Unused_Frlg:: + lockall + setvar VAR_RESULT, 10 + waitstate + releaseall + end diff --git a/data/maps/VermilionCity/scripts.inc b/data/maps/VermilionCity/scripts.inc new file mode 100644 index 000000000000..d15bf160fbdb --- /dev/null +++ b/data/maps/VermilionCity/scripts.inc @@ -0,0 +1,396 @@ +VermilionCity_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, VermilionCity_OnTransition + map_script MAP_SCRIPT_ON_FRAME_TABLE, VermilionCity_OnFrame + .byte 0 + +VermilionCity_OnFrame:: + map_script_2 VAR_MAP_SCENE_VERMILION_CITY, 2, VermilionCity_EventScript_ExitSSAnne + .2byte 0 + +VermilionCity_EventScript_ExitSSAnne:: + lockall + applymovement LOCALID_PLAYER, VermilionCity_Movement_ExitSSAnne + waitmovement 0 + setvar VAR_MAP_SCENE_VERMILION_CITY, 3 + releaseall + end + +VermilionCity_Movement_ExitSSAnne:: + walk_up + walk_up + step_end + +VermilionCity_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_VERMILION_CITY + call_if_set FLAG_TALKED_TO_OAKS_AIDE_IN_VERMILION, VermilionCity_EventScript_HideOaksAide + end + +VermilionCity_EventScript_HideOaksAide:: + setflag FLAG_HIDE_VERMILION_CITY_OAKS_AIDE + return + +VermilionCity_EventScript_Woman:: + msgbox VermilionCity_Text_GrimerMultipliesInSludge, MSGBOX_NPC + end + +VermilionCity_EventScript_OldMan1:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_VERMILION_CITY, 3, VermilionCity_EventScript_OldMan1SSAnneLeft + msgbox VermilionCity_Text_DidYouSeeSSAnneInHarbor + release + end + +VermilionCity_EventScript_OldMan1SSAnneLeft:: + msgbox VermilionCity_Text_SSAnneHasDepartedForYear + release + end + +VermilionCity_EventScript_FerrySailor:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_VERMILION_CITY, 3, VermilionCity_EventScript_CheckSeagallopPresent + msgbox VermilionCity_Text_WelcomeToTheSSAnne + release + end + +VermilionCity_EventScript_CheckHasMysticTicket:: + goto_if_unset FLAG_ENABLE_SHIP_NAVEL_ROCK, EventScript_SetResultFalse + checkitem ITEM_MYSTIC_TICKET + goto_if_eq VAR_RESULT, FALSE, EventScript_SetResultFalse + goto EventScript_SetResultTrue + end + +VermilionCity_EventScript_CheckHasAuroraTicket:: + goto_if_unset FLAG_ENABLE_SHIP_BIRTH_ISLAND, EventScript_SetResultFalse + checkitem ITEM_AURORA_TICKET + goto_if_eq VAR_RESULT, FALSE, EventScript_SetResultFalse + goto EventScript_SetResultTrue + end + +VermilionCity_EventScript_CheckSeagallopPresent:: + setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY + goto_if_ge VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5, VermilionCity_EventScript_ChooseSeagallopDestRainbowPass + goto_if_ge VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 1, VermilionCity_EventScript_ChooseSeagallopDestTriPass + msgbox VermilionCity_Text_TheShipSetSail + release + end + +VermilionCity_EventScript_ChooseSeagallopDestRainbowPass:: + call VermilionCity_EventScript_CheckHasMysticTicket + goto_if_eq VAR_RESULT, TRUE, VermilionCity_EventScript_HasMysticTicket + call VermilionCity_EventScript_CheckHasAuroraTicket + goto_if_eq VAR_RESULT, TRUE, VermilionCity_EventScript_HasAuroraTicket + setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY + message VermilionCity_Text_BoardSeagallopRainbowPass + waitmessage + goto EventScript_SeviiDestinationsPage1 + end + +VermilionCity_EventScript_HasMysticTicket:: + call VermilionCity_EventScript_CheckHasAuroraTicket + goto_if_eq VAR_RESULT, TRUE, VermilionCity_EventScript_HasMysticAndAuroraTickets + call_if_unset FLAG_SHOWN_MYSTIC_TICKET, VermilionCity_EventScript_ShowMysticTicket + message VermilionCity_Text_BoardSeagallopFerry + waitmessage + multichoice 17, 6, MULTI_SEVII_NAVEL, FALSE + switch VAR_RESULT + case 0, EventScript_SeviiDestinationsPage1 + case 1, EventScript_SailToNavelRock + case 2, EventScript_CancelSail + case 127, EventScript_CancelSail + end + +VermilionCity_EventScript_ShowMysticTicket:: + setflag FLAG_SHOWN_MYSTIC_TICKET + msgbox VermilionCity_Text_OhMysticTicketTakeYouToNavelRock + return + +VermilionCity_EventScript_HasAuroraTicket:: + call_if_unset FLAG_SHOWN_AURORA_TICKET, VermilionCity_EventScript_ShowAuroraTicket + message VermilionCity_Text_BoardSeagallopFerry + waitmessage + multichoice 13, 6, MULTI_SEVII_BIRTH, FALSE + switch VAR_RESULT + case 0, EventScript_SeviiDestinationsPage1 + case 1, EventScript_SailToBirthIsland + case 2, EventScript_CancelSail + case 127, EventScript_CancelSail + end + +VermilionCity_EventScript_ShowAuroraTicket:: + setflag FLAG_SHOWN_AURORA_TICKET + msgbox VermilionCity_Text_OhAuroraTicketTakeYouToBirthIsland + return + +VermilionCity_EventScript_HasMysticAndAuroraTickets:: + call_if_unset FLAG_SHOWN_MYSTIC_TICKET, VermilionCity_EventScript_ShowMysticTicket + call_if_unset FLAG_SHOWN_AURORA_TICKET, VermilionCity_EventScript_ShowAuroraTicket + message VermilionCity_Text_BoardSeagallopFerry + waitmessage + multichoice 13, 5, MULTI_SEVII_NAVEL_BIRTH, FALSE + switch VAR_RESULT + case 0, EventScript_SeviiDestinationsPage1 + case 1, EventScript_SailToNavelRock + case 2, EventScript_SailToBirthIsland + case 3, EventScript_CancelSail + case 127, EventScript_CancelSail + end + +EventScript_SailToNavelRock:: + msgbox VermilionCity_Text_Seagallop10Departing + setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY + setvar VAR_0x8006, SEAGALLOP_NAVEL_ROCK + goto EventScript_SetSail + end + +EventScript_SailToBirthIsland:: + msgbox VermilionCity_Text_Seagallop12Departing + setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY + setvar VAR_0x8006, SEAGALLOP_BIRTH_ISLAND + goto EventScript_SetSail + end + +VermilionCity_EventScript_ChooseSeagallopDestTriPass:: + message VermilionCity_Text_BoardSeagallopTriPass + waitmessage + setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY + multichoice 19, 5, MULTI_SEAGALLOP_123, FALSE + switch VAR_RESULT + case 0, EventScript_SailToOneIsland2 + case 1, EventScript_SailToTwoIsland2 + case 2, EventScript_SailToThreeIsland2 + case 3, EventScript_CancelSail + case 127, EventScript_CancelSail + end + +@ Unreachable +Vermilion_EventScript_Unused:: + release + end + +VermilionCity_EventScript_CheckTicketLeft:: + lockall + goto VermilionCity_EventScript_CheckTicket + end + +VermilionCity_EventScript_CheckTicketRight:: + lockall + goto VermilionCity_EventScript_CheckTicket + end + +VermilionCity_EventScript_ExitedTicketCheck:: + lockall + setvar VAR_VERMILION_CITY_TICKET_CHECK_TRIGGER, 0 + releaseall + end + +VermilionCity_EventScript_CheckTicket:: + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_VERMILION_FERRY_SAILOR, Common_Movement_WalkInPlaceFasterLeft + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + goto_if_eq VAR_MAP_SCENE_VERMILION_CITY, 3, VermilionCity_EventScript_CheckSeagallopPresentTrigger + msgbox VermilionCity_Text_DoYouHaveATicket + goto_if_unset FLAG_GOT_SS_TICKET, VermilionCity_EventScript_DontHaveSSTicket + msgbox VermilionCity_Text_FlashedSSTicket + setvar VAR_VERMILION_CITY_TICKET_CHECK_TRIGGER, 1 + releaseall + end + +VermilionCity_EventScript_DontHaveSSTicket:: + msgbox VermilionCity_Text_DontHaveNeededSSTicket + closemessage + goto VermilionCity_EventScript_WalkUpPier + end + +VermilionCity_EventScript_CheckSeagallopPresentTrigger:: + setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY + goto_if_ge VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5, VermilionCity_EventScript_ChooseSeagallopDestRainbowPass + goto_if_ge VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 1, VermilionCity_EventScript_ChooseSeagallopDestTriPass + msgbox VermilionCity_Text_TheShipSetSail + closemessage + goto VermilionCity_EventScript_WalkUpPier + end + +VermilionCity_EventScript_Sailor:: + msgbox VermilionCity_Text_SSAnneVisitsOnceAYear, MSGBOX_NPC + end + +VermilionCity_EventScript_OaksAide:: + lock + faceplayer + setflag FLAG_TALKED_TO_OAKS_AIDE_IN_VERMILION + msgbox VermilionCity_Text_Route2AideHasPackageForYou + release + end + +VermilionCity_EventScript_OldMan2:: + msgbox VermilionCity_Text_BuildingOnThisLand, MSGBOX_NPC + end + +VermilionCity_EventScript_Machop:: + lock + faceplayer + waitse + playmoncry SPECIES_MACHOP, CRY_MODE_NORMAL + msgbox VermilionCity_Text_Machop + waitmoncry + msgbox VermilionCity_Text_MachopStompingLandFlat + release + end + +VermilionCity_EventScript_CitySign:: + msgbox VermilionCity_Text_CitySign, MSGBOX_SIGN + end + +VermilionCity_EventScript_SnorlaxNotice:: + msgbox VermilionCity_Text_SnorlaxBlockingRoute12, MSGBOX_SIGN + end + +VermilionCity_EventScript_PokemonFanClubSign:: + msgbox VermilionCity_Text_PokemonFanClubSign, MSGBOX_SIGN + end + +VermilionCity_EventScript_GymSign:: + lockall + famechecker FAMECHECKER_LTSURGE, 0 + msgbox VermilionCity_Text_GymSign + releaseall + end + +VermilionCity_EventScript_HarborSign:: + msgbox VermilionCity_Text_VermilionHarbor, MSGBOX_SIGN + end + +VermilionCity_Text_GrimerMultipliesInSludge:: + .string "We're careful about pollution here.\p" + .string "We've heard GRIMER multiplies in\n" + .string "toxic sludge.$" + +VermilionCity_Text_DidYouSeeSSAnneInHarbor:: + .string "Did you see the S.S. ANNE moored\n" + .string "in the harbor?$" + +VermilionCity_Text_SSAnneHasDepartedForYear:: + .string "So, the S.S. ANNE has departed?\p" + .string "She'll be back in VERMILION about\n" + .string "this time next year.$" + +VermilionCity_Text_BuildingOnThisLand:: + .string "I'm putting up a building on this\n" + .string "plot of land. I own it all.\p" + .string "My POKéMON is tamping the land\n" + .string "to lay the foundation.$" + +VermilionCity_Text_Machop:: + .string "MACHOP: Guoh! Gogogoh!$" + +VermilionCity_Text_MachopStompingLandFlat:: + .string "A MACHOP is stomping the land flat.$" + +VermilionCity_Text_SSAnneVisitsOnceAYear:: + .string "The S.S. ANNE is a famous luxury\n" + .string "cruise ship.\p" + .string "It visits VERMILION once a year.$" + +VermilionCity_Text_CitySign:: + .string "VERMILION CITY\n" + .string "The Port of Exquisite Sunsets$" + +VermilionCity_Text_SnorlaxBlockingRoute12:: + .string "NOTICE!\p" + .string "ROUTE 12 may be blocked off by a\n" + .string "sleeping POKéMON.\p" + .string "Detour through ROCK TUNNEL to\n" + .string "LAVENDER TOWN.\p" + .string "VERMILION POLICE$" + +VermilionCity_Text_PokemonFanClubSign:: + .string "POKéMON FAN CLUB\n" + .string "All POKéMON fans welcome!$" + +VermilionCity_Text_GymSign:: + .string "VERMILION CITY POKéMON GYM\n" + .string "LEADER: LT. SURGE\l" + .string "The Lightning American!$" + +VermilionCity_Text_VermilionHarbor:: + .string "VERMILION HARBOR$" + +VermilionCity_Text_WelcomeToTheSSAnne:: + .string "Welcome to the S.S. ANNE!$" + +VermilionCity_Text_DoYouHaveATicket:: + .string "Welcome to the S.S. ANNE!\p" + .string "Excuse me, do you have a ticket?$" + +VermilionCity_Text_FlashedSSTicket:: + .string "{FONT_NORMAL}{PLAYER} flashed the S.S. TICKET!\p" + .string "{FONT_MALE}Great!\n" + .string "Welcome to the S.S. ANNE!$" + +VermilionCity_Text_DontHaveNeededSSTicket:: + .string "{FONT_NORMAL}{PLAYER} doesn't have the needed\n" + .string "S.S. TICKET.\p" + .string "{FONT_MALE}Sorry!\p" + .string "You need a ticket to get aboard.$" + +VermilionCity_Text_TheShipSetSail:: + .string "The ship set sail.$" + +VermilionCity_Text_BoardSeagallopTriPass:: + .string "Ah, you have a TRI-PASS.\p" + .string "Would you like to board\n" + .string "a SEAGALLOP ferry?$" + +VermilionCity_Text_Seagallop7Departing:: + .string "Okay, everything's in order.\p" + .string "SEAGALLOP HI-SPEED 7 will be\n" + .string "departing immediately.$" + +VermilionCity_Text_BoardSeagallopRainbowPass:: + .string "Ah, you have a RAINBOW PASS.\p" + .string "Would you like to board\n" + .string "a SEAGALLOP ferry?$" + +VermilionCity_Text_OhMysticTicketTakeYouToNavelRock:: + .string "Oh! That's a MYSTICTICKET!\n" + .string "Now that is rare.\p" + .string "We'll be happy to take you to\n" + .string "NAVEL ROCK anytime.$" + +VermilionCity_Text_OhAuroraTicketTakeYouToBirthIsland:: + .string "Oh! That's an AURORATICKET!\n" + .string "Now that is rare.\p" + .string "We'll be happy to take you to\n" + .string "BIRTH ISLAND anytime.$" + +VermilionCity_Text_BoardSeagallopFerry:: + .string "Would you like to board\n" + .string "a SEAGALLOP ferry?$" + +VermilionCity_Text_Seagallop10Departing:: + .string "Okay, everything's in order for you\n" + .string "to board a special ferry.\p" + .string "SEAGALLOP HI-SPEED 10 will be\n" + .string "departing immediately.$" + +VermilionCity_Text_Seagallop12Departing:: + .string "Okay, everything's in order for you\n" + .string "to board a special ferry.\p" + .string "SEAGALLOP HI-SPEED 12 will be\n" + .string "departing immediately.$" + +VermilionCity_Text_Route2AideHasPackageForYou:: + .string "Oh, hello, {PLAYER}!\n" + .string "How are you doing?\p" + .string "It's me, one of PROF. OAK's AIDES.\p" + .string "Did you meet the other AIDE?\p" + .string "He had a package from PROF. OAK\n" + .string "for you, {PLAYER}.\p" + .string "He said he'd look for you around\n" + .string "ROUTE 2, {PLAYER}.\p" + .string "If you're in the ROUTE 2 area,\n" + .string "please look for him.$" + diff --git a/data/maps/VermilionCity_Gym/scripts.inc b/data/maps/VermilionCity_Gym/scripts.inc new file mode 100644 index 000000000000..e056d54eb57b --- /dev/null +++ b/data/maps/VermilionCity_Gym/scripts.inc @@ -0,0 +1,421 @@ +.equ FOUND_FIRST_SWITCH, FLAG_TEMP_1 +.equ SWITCH1_ID, VAR_0x8004 +.equ SWITCH2_ID, VAR_0x8005 +.equ TRASH_CAN_ID, VAR_0x8008 + +VermilionCity_Gym_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, VermilionCity_Gym_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, VermilionCity_Gym_OnTransition + .byte 0 + +VermilionCity_Gym_OnLoad:: + call_if_set FOUND_FIRST_SWITCH, VermilionCity_Gym_EventScript_SetOneBeamOff + call_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, VermilionCity_Gym_EventScript_SetBeamsOff + end + +VermilionCity_Gym_EventScript_SetOneBeamOff:: + setmetatile 3, 6, METATILE_VermilionGym_Beam_Node_TopLeft_HalfOn, 1 + setmetatile 4, 6, METATILE_VermilionGym_Beam_Node_TopLeft_Edge_HalfOn, 1 + setmetatile 5, 6, METATILE_VermilionGym_Beam_MidTop_HalfOn, 1 + setmetatile 6, 6, METATILE_VermilionGym_Beam_Node_TopRight_Edge_HalfOn, 1 + setmetatile 7, 6, METATILE_VermilionGym_Beam_Node_TopRight_HalfOn, 1 + setmetatile 3, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_HalfOn, 1 + setmetatile 4, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_HalfOn, 1 + setmetatile 5, 7, METATILE_VermilionGym_Beam_MidBottom_HalfOn, 1 + setmetatile 6, 7, METATILE_VermilionGym_Beam_Node_BottomRight_Edge_HalfOn, 1 + setmetatile 7, 7, METATILE_VermilionGym_Beam_Node_BottomRight_HalfOn, 1 + return + +VermilionCity_Gym_EventScript_SetBeamsOff:: + setmetatile 3, 6, METATILE_VermilionGym_Beam_Node_TopLeft_Off, 1 + setmetatile 4, 6, METATILE_VermilionGym_Beam_Node_TopLeft_Edge_Off, 0 + setmetatile 5, 6, METATILE_VermilionGym_Floor, 0 + setmetatile 6, 6, METATILE_VermilionGym_Beam_Node_TopRight_Edge_Off, 0 + setmetatile 7, 6, METATILE_VermilionGym_Beam_Node_TopRight_Off, 1 + setmetatile 3, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_Off, 1 + setmetatile 4, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_Off, 0 + setmetatile 5, 7, METATILE_VermilionGym_Floor, 0 + setmetatile 6, 7, METATILE_VermilionGym_Beam_Node_BottomRight_Edge_Off, 0 + setmetatile 7, 7, METATILE_VermilionGym_Beam_Node_BottomRight_Off, 1 + return + +VermilionCity_Gym_OnTransition:: + call VermilionCity_Gym_EventScript_InitTrashCans + end + +VermilionCity_Gym_EventScript_InitTrashCans:: + goto_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, Common_EventScript_NopReturn + special SetVermilionTrashCans + copyvar VAR_TEMP_0, SWITCH1_ID + copyvar VAR_TEMP_1, SWITCH2_ID + return + +VermilionCity_Gym_EventScript_TrashCan1:: + lockall + setvar TRASH_CAN_ID, 1 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan2:: + lockall + setvar TRASH_CAN_ID, 2 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan3:: + lockall + setvar TRASH_CAN_ID, 3 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan4:: + lockall + setvar TRASH_CAN_ID, 4 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan5:: + lockall + setvar TRASH_CAN_ID, 5 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan6:: + lockall + setvar TRASH_CAN_ID, 6 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan7:: + lockall + setvar TRASH_CAN_ID, 7 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan8:: + lockall + setvar TRASH_CAN_ID, 8 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan9:: + lockall + setvar TRASH_CAN_ID, 9 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan10:: + lockall + setvar TRASH_CAN_ID, 10 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan11:: + lockall + setvar TRASH_CAN_ID, 11 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan12:: + lockall + setvar TRASH_CAN_ID, 12 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan13:: + lockall + setvar TRASH_CAN_ID, 13 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan14:: + lockall + setvar TRASH_CAN_ID, 14 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan15:: + lockall + setvar TRASH_CAN_ID, 15 + goto VermilionCity_Gym_EventScript_TrashCan + end + +VermilionCity_Gym_EventScript_TrashCan:: + copyvar SWITCH1_ID, VAR_TEMP_0 + copyvar SWITCH2_ID, VAR_TEMP_1 + goto_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, VermilionCity_Gym_EventScript_LocksAlreadyOpen + goto_if_set FOUND_FIRST_SWITCH, VermilionCity_Gym_EventScript_TrySwitchTwo + goto_if_eq SWITCH1_ID, TRASH_CAN_ID, VermilionCity_Gym_EventScript_FoundSwitchOne + msgbox VermilionCity_Gym_Text_NopeOnlyTrashHere + releaseall + end + +VermilionCity_Gym_EventScript_FoundSwitchOne:: + msgbox VermilionCity_Gym_Text_SwitchUnderTrashFirstLockOpened + playse SE_PIN + waitse + call VermilionCity_Gym_EventScript_SetOneBeamOff + special DrawWholeMapView + setflag FOUND_FIRST_SWITCH + releaseall + end + +VermilionCity_Gym_EventScript_TrySwitchTwo:: + goto_if_eq SWITCH2_ID, TRASH_CAN_ID, VermilionCity_Gym_EventScript_FoundSwitchTwo + msgbox VermilionCity_Gym_Text_OnlyTrashLocksWereReset + clearflag FOUND_FIRST_SWITCH + special SetVermilionTrashCans + copyvar VAR_TEMP_0, SWITCH1_ID + copyvar VAR_TEMP_1, SWITCH2_ID + call VermilionCity_Gym_EventScript_SetBeamsOn + special DrawWholeMapView + releaseall + end + +VermilionCity_Gym_EventScript_FoundSwitchTwo:: + msgbox VermilionCity_Gym_Text_SecondLockOpened + closemessage + call VermilionCity_Gym_EventScript_SetBeamsOff + special DrawWholeMapView + playse SE_UNLOCK + waitse + setflag FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES + releaseall + end + +VermilionCity_Gym_EventScript_LocksAlreadyOpen:: + msgbox VermilionCity_Gym_Text_NopeOnlyTrashHere + releaseall + end + +VermilionCity_Gym_EventScript_SetBeamsOn:: + setmetatile 3, 6, METATILE_VermilionGym_Beam_Node_TopLeft_On, 1 + setmetatile 4, 6, METATILE_VermilionGym_Beam_Node_TopLeft_Edge_On, 1 + setmetatile 5, 6, METATILE_VermilionGym_Beam_MidTop, 1 + setmetatile 6, 6, METATILE_VermilionGym_Beam_Node_TopRight_Edge_On, 1 + setmetatile 7, 6, METATILE_VermilionGym_Beam_Node_TopRight_On, 1 + setmetatile 3, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_On, 1 + setmetatile 4, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_On, 1 + setmetatile 5, 7, METATILE_VermilionGym_Beam_MidBottom, 1 + setmetatile 6, 7, METATILE_VermilionGym_Beam_Node_BottomRight_Edge_On, 1 + setmetatile 7, 7, METATILE_VermilionGym_Beam_Node_BottomRight_On, 1 + return + +VermilionCity_Gym_EventScript_LtSurge:: + famechecker FAMECHECKER_LTSURGE, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + trainerbattle_single TRAINER_LEADER_LT_SURGE, VermilionCity_Gym_Text_LtSurgeIntro, VermilionCity_Gym_Text_LtSurgeDefeat, VermilionCity_Gym_EventScript_DefeatedLtSurge, NO_MUSIC + goto_if_unset FLAG_GOT_TM34_FROM_SURGE, VermilionCity_Gym_EventScript_GiveTM34 + msgbox VermilionCity_Gym_Text_LtSurgePostBattle + release + end + +VermilionCity_Gym_EventScript_DefeatedLtSurge:: + famechecker FAMECHECKER_LTSURGE, 1 + call_if_unset FLAG_GOT_HM05, VermilionCity_Gym_EventScript_ShowOaksAide + clearflag FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL + setflag FLAG_DEFEATED_LT_SURGE + setflag FLAG_BADGE03_GET + set_gym_trainers_frlg 3 + goto VermilionCity_Gym_EventScript_GiveTM34 + end + +VermilionCity_Gym_EventScript_ShowOaksAide:: + clearflag FLAG_HIDE_VERMILION_CITY_OAKS_AIDE + return + +VermilionCity_Gym_EventScript_GiveTM34:: + msgbox VermilionCity_Gym_Text_ExplainThunderBadgeTakeThis + checkitemspace ITEM_TM34 + goto_if_eq VAR_RESULT, FALSE, VermilionCity_Gym_EventScript_NoRoomForTM34 + giveitem_msg VermilionCity_Gym_Text_ReceivedTM34FromLtSurge, ITEM_TM34 + setflag FLAG_GOT_TM34_FROM_SURGE + msgbox VermilionCity_Gym_Text_ExplainTM34 + release + end + +VermilionCity_Gym_EventScript_NoRoomForTM34:: + msgbox VermilionCity_Gym_Text_MakeRoomInYourBag + release + end + +VermilionCity_Gym_EventScript_Dwayne:: + trainerbattle_single TRAINER_SAILOR_DWAYNE, VermilionCity_Gym_Text_DwayneIntro, VermilionCity_Gym_Text_DwayneDefeat + famechecker FAMECHECKER_LTSURGE, 4 + msgbox VermilionCity_Gym_Text_DwaynePostBattle, MSGBOX_AUTOCLOSE + end + +VermilionCity_Gym_EventScript_Baily:: + trainerbattle_single TRAINER_ENGINEER_BAILY, VermilionCity_Gym_Text_BailyIntro, VermilionCity_Gym_Text_BailyDefeat + msgbox VermilionCity_Gym_Text_BailyPostBattle, MSGBOX_AUTOCLOSE + end + +VermilionCity_Gym_EventScript_Tucker:: + trainerbattle_single TRAINER_GENTLEMAN_TUCKER, VermilionCity_Gym_Text_TuckerIntro, VermilionCity_Gym_Text_TuckerDefeat, VermilionCity_Gym_EventScript_DefeatedTucker + famechecker FAMECHECKER_LTSURGE, 3 + msgbox VermilionCity_Gym_Text_TuckerPostBattle, MSGBOX_AUTOCLOSE + end + +VermilionCity_Gym_EventScript_DefeatedTucker:: + famechecker FAMECHECKER_LTSURGE, 2 + release + end + +VermilionCity_Gym_EventScript_GymGuy:: + lock + faceplayer + goto_if_set FLAG_DEFEATED_LT_SURGE, VermilionCity_Gym_EventScript_GymGuyPostVictory + msgbox VermilionCity_Gym_Text_GymGuyAdvice + release + end + +VermilionCity_Gym_EventScript_GymGuyPostVictory:: + msgbox VermilionCity_Gym_Text_GymGuyPostVictory + release + end + +VermilionCity_Gym_EventScript_GymStatue:: + lockall + goto_if_set FLAG_BADGE03_GET, VermilionCity_Gym_EventScript_GymStatuePostVictory + msgbox VermilionCity_Gym_Text_GymStatue + releaseall + end + +VermilionCity_Gym_EventScript_GymStatuePostVictory:: + msgbox VermilionCity_Gym_Text_GymStatuePlayerWon + releaseall + end + +VermilionCity_Gym_Text_LtSurgeIntro:: + .string "Hey, kid! What do you think you're\n" + .string "doing here?\p" + .string "You won't live long in combat!\n" + .string "Not with your puny power!\p" + .string "I tell you, kid, electric POKéMON\n" + .string "saved me during the war!\p" + .string "They zapped my enemies into\n" + .string "paralysis!\p" + .string "The same as I'll do to you!{PLAY_BGM}{MUS_RG_ENCOUNTER_GYM_LEADER}$" + +VermilionCity_Gym_Text_LtSurgePostBattle:: + .string "A little word of advice, kid!\p" + .string "Electricity is sure powerful!\p" + .string "But, it's useless against GROUND-\n" + .string "type POKéMON!$" + +VermilionCity_Gym_Text_ExplainThunderBadgeTakeThis:: + .string "The THUNDERBADGE cranks up your\n" + .string "POKéMON's SPEED!\p" + .string "It also lets your POKéMON FLY\n" + .string "lightning-quick anytime, kid!\p" + .string "You're special, kid!\n" + .string "Take this!$" + +VermilionCity_Gym_Text_ReceivedTM34FromLtSurge:: + .string "{PLAYER} received TM34\n" + .string "from LT. SURGE.$" + +VermilionCity_Gym_Text_ExplainTM34:: + .string "TM34 contains SHOCK WAVE!\p" + .string "Teach it to an ELECTRIC POKéMON!$" + +VermilionCity_Gym_Text_MakeRoomInYourBag:: + .string "Yo, kid, make room in your BAG!$" + +VermilionCity_Gym_Text_LtSurgeDefeat:: + .string "Now that's a shocker!\p" + .string "You're the real deal, kid!\p" + .string "Fine, then, take the THUNDERBADGE!$" + +VermilionCity_Gym_Text_TuckerIntro:: + .string "When I was in the Army, LT. SURGE\n" + .string "was my strict CO.\p" + .string "He was a hard taskmaster.$" + +VermilionCity_Gym_Text_TuckerDefeat:: + .string "Stop!\n" + .string "You're very good!$" + +VermilionCity_Gym_Text_TuckerPostBattle:: + .string "It's not easy opening that door.\p" + .string "LT. SURGE was always famous for\n" + .string "his cautious nature in the Army.$" + +VermilionCity_Gym_Text_BailyIntro:: + .string "I'm a lightweight, but I'm good\n" + .string "with electricity!\p" + .string "That's why I joined this GYM.$" + +VermilionCity_Gym_Text_BailyDefeat:: + .string "Fried!$" + +VermilionCity_Gym_Text_BailyPostBattle:: + .string "Okay, I'll talk!\p" + .string "LT. SURGE said he hid door\n" + .string "switches inside something.$" + +VermilionCity_Gym_Text_DwayneIntro:: + .string "This is no place for kids!\n" + .string "Not even if you're good!$" + +VermilionCity_Gym_Text_DwayneDefeat:: + .string "Wow!\n" + .string "Surprised me!$" + +VermilionCity_Gym_Text_DwaynePostBattle:: + .string "LT. SURGE installed the traps in\n" + .string "the GYM himself.\p" + .string "He set up double locks everywhere.\n" + .string "Let me give you a hint.\p" + .string "When you open the first lock, the\n" + .string "second lock is right next to it.$" + +VermilionCity_Gym_Text_GymGuyAdvice:: + .string "Yo!\n" + .string "Champ in the making!\p" + .string "LT. SURGE has a nickname.\p" + .string "People refer to him as the\n" + .string "Lightning American!\p" + .string "He's an expert on electric\n" + .string "POKéMON.\p" + .string "BIRD/WATER-type POKéMON match\n" + .string "poorly against the ELECTRIC type.\p" + .string "Beware of paralysis, too.\p" + .string "LT. SURGE is very cautious.\p" + .string "He's locked himself in, so it won't\n" + .string "be easy getting to him.$" + +VermilionCity_Gym_Text_GymGuyPostVictory:: + .string "Whew!\n" + .string "That match was electric!$" + +VermilionCity_Gym_Text_GymStatue:: + .string "VERMILION POKéMON GYM\n" + .string "LEADER: LT. SURGE\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}$" + +VermilionCity_Gym_Text_GymStatuePlayerWon:: + .string "VERMILION POKéMON GYM\n" + .string "LEADER: LT. SURGE\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}, {PLAYER}$" + +VermilionCity_Gym_Text_NopeOnlyTrashHere:: + .string "Nope!\n" + .string "There's only trash here.$" + +VermilionCity_Gym_Text_SwitchUnderTrashFirstLockOpened:: + .string "Hey! There's a switch under the\n" + .string "trash! Turn it on!\p" + .string "The first electric lock opened!$" + +VermilionCity_Gym_Text_SecondLockOpened:: + .string "The second electric lock opened!\n" + .string "The motorized door opened!$" + +VermilionCity_Gym_Text_OnlyTrashLocksWereReset:: + .string "Nope!\n" + .string "There's only trash here.\p" + .string "Hey!\n" + .string "The electric locks were reset!$" + diff --git a/data/maps/VermilionCity_House1/scripts.inc b/data/maps/VermilionCity_House1/scripts.inc new file mode 100644 index 000000000000..7fa14f05ef9b --- /dev/null +++ b/data/maps/VermilionCity_House1/scripts.inc @@ -0,0 +1,68 @@ +VermilionCity_House1_MapScripts:: + .byte 0 + +VermilionCity_House1_EventScript_FishingGuru:: + lock + faceplayer + goto_if_set FLAG_GOT_OLD_ROD, VermilionCity_House1_EventScript_AlreadyGotOldRod + msgbox VermilionCity_House1_Text_ImFishingGuruDoYouLikeToFish, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, VermilionCity_House1_EventScript_GiveOldRod + msgbox VermilionCity_House1_Text_OhThatsSoDisappointing + release + end + +VermilionCity_House1_EventScript_AlreadyGotOldRod:: + msgbox VermilionCity_House1_Text_HowAreTheFishBiting + release + end + +VermilionCity_House1_EventScript_GiveOldRod:: + checkitemspace ITEM_OLD_ROD + goto_if_eq VAR_RESULT, FALSE, VermilionCity_House1_EventScript_NoRoomForOldRod + additem ITEM_OLD_ROD + msgbox VermilionCity_House1_Text_TakeThisAndFish + msgreceiveditem VermilionCity_House1_Text_ReceivedOldRodFromFishingGuru, ITEM_OLD_ROD + setflag FLAG_GOT_OLD_ROD + msgbox VermilionCity_House1_Text_FishingIsAWayOfLife + release + end + +VermilionCity_House1_EventScript_NoRoomForOldRod:: + msgbox VermilionCity_House1_Text_NoRoomForNiceGift + release + end + +VermilionCity_House1_Text_ImFishingGuruDoYouLikeToFish:: + .string "I'm the FISHING GURU!\p" + .string "I simply looove fishing!\n" + .string "I can't bear to go without.\p" + .string "Tell me, do you like to fish?$" + +VermilionCity_House1_Text_TakeThisAndFish:: + .string "Grand! I like your style.\n" + .string "I think we can be friends.\p" + .string "Take this and fish, young friend!$" + +VermilionCity_House1_Text_ReceivedOldRodFromFishingGuru:: + .string "{PLAYER} received an OLD ROD from\n" + .string "the FISHING GURU.$" + +VermilionCity_House1_Text_FishingIsAWayOfLife:: + .string "Fishing is a way of life!\n" + .string "It is like the finest poetry.\p" + .string "From the seas to rivers, go out\n" + .string "and land the big one, my friend.$" + +VermilionCity_House1_Text_OhThatsSoDisappointing:: + .string "Oh…\n" + .string "That's so disappointing…$" + +VermilionCity_House1_Text_HowAreTheFishBiting:: + .string "Hello there, {PLAYER}!\p" + .string "How are the fish biting?$" + +VermilionCity_House1_Text_NoRoomForNiceGift:: + .string "Oh, no!\p" + .string "I had a nice gift for you, but you\n" + .string "have no room for it!$" + diff --git a/data/maps/VermilionCity_House2/scripts.inc b/data/maps/VermilionCity_House2/scripts.inc new file mode 100644 index 000000000000..bae1faf09b99 --- /dev/null +++ b/data/maps/VermilionCity_House2/scripts.inc @@ -0,0 +1,57 @@ +VermilionCity_House2_MapScripts:: + .byte 0 + +VermilionCity_House2_EventScript_Elyssa:: + lock + faceplayer + setvar VAR_0x8008, INGAME_TRADE_FARFETCHD + call EventScript_GetInGameTradeSpeciesInfo + goto_if_set FLAG_DID_CH_DING_TRADE, VermilionCity_House2_EventScript_AlreadyTraded + msgbox VermilionCity_House2_Text_DoYouHaveMonWantToTradeForMyMon, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, VermilionCity_House2_EventScript_DeclineTrade + call EventScript_ChooseMonForInGameTrade + goto_if_ge VAR_0x8004, PARTY_SIZE, VermilionCity_House2_EventScript_DeclineTrade + call EventScript_GetInGameTradeSpecies + goto_if_ne VAR_RESULT, VAR_0x8009, VermilionCity_House2_EventScript_NotRequestedMon + call EventScript_DoInGameTrade + msgbox VermilionCity_House2_Text_ThankYou + setflag FLAG_DID_CH_DING_TRADE + release + end + +VermilionCity_House2_EventScript_DeclineTrade:: + msgbox VermilionCity_House2_Text_ThatsTooBad + release + end + +VermilionCity_House2_EventScript_NotRequestedMon:: + bufferspeciesname STR_VAR_1, VAR_0x8009 + msgbox VermilionCity_House2_Text_ThisIsNoMon + release + end + +VermilionCity_House2_EventScript_AlreadyTraded:: + msgbox VermilionCity_House2_Text_HowIsMyOldMon + release + end + +VermilionCity_House2_Text_DoYouHaveMonWantToTradeForMyMon:: + .string "Hi!\n" + .string "Do you have a {STR_VAR_1}?\p" + .string "Want to trade it for my\n" + .string "{STR_VAR_2}?$" + +VermilionCity_House2_Text_ThatsTooBad:: + .string "That's too bad.$" + +VermilionCity_House2_Text_ThisIsNoMon:: + .string "…This is no {STR_VAR_1}.\p" + .string "If you get one, please trade it\n" + .string "to me!$" + +VermilionCity_House2_Text_ThankYou:: + .string "Thank you!$" + +VermilionCity_House2_Text_HowIsMyOldMon:: + .string "How is my old {STR_VAR_2}?\p" + .string "My {STR_VAR_1} is doing great!$" diff --git a/data/maps/VermilionCity_House3/scripts.inc b/data/maps/VermilionCity_House3/scripts.inc new file mode 100644 index 000000000000..a3292ace0838 --- /dev/null +++ b/data/maps/VermilionCity_House3/scripts.inc @@ -0,0 +1,45 @@ +VermilionCity_House3_MapScripts:: + .byte 0 + +VermilionCity_House3_EventScript_Boy:: + msgbox VermilionCity_House3_Text_PidgeyFlyLetterToSaffron, MSGBOX_NPC + end + +VermilionCity_House3_EventScript_Lass:: + msgbox VermilionCity_House3_Text_SendMyPidgeyToUnionRoom, MSGBOX_NPC + end + +VermilionCity_House3_EventScript_Pidgey:: + lock + faceplayer + waitse + playmoncry SPECIES_PIDGEY, CRY_MODE_NORMAL + msgbox VermilionCity_House3_Text_Pidgey + waitmoncry + release + end + +VermilionCity_House3_EventScript_Letter:: + msgbox VermilionCity_House3_Text_DearPippiLetter, MSGBOX_SIGN + end + +VermilionCity_House3_Text_PidgeyFlyLetterToSaffron:: + .string "I'm getting my PIDGEY to fly a\n" + .string "letter to SAFFRON in the north.$" + +VermilionCity_House3_Text_Pidgey:: + .string "PIDGEY: Kurukkoo!$" + +VermilionCity_House3_Text_DearPippiLetter:: + .string "Dear PIPPI,\n" + .string "I hope to see you soon.\p" + .string "I heard SAFFRON has problems with\n" + .string "TEAM ROCKET.\p" + .string "VERMILION appears to be safe.$" + +VermilionCity_House3_Text_SendMyPidgeyToUnionRoom:: + .string "I want to exchange MAIL with all\n" + .string "sorts of people.\p" + .string "I send my PIDGEY to a UNION ROOM\n" + .string "to exchange MAIL for me.$" + diff --git a/data/maps/VermilionCity_Mart/scripts.inc b/data/maps/VermilionCity_Mart/scripts.inc new file mode 100644 index 000000000000..f8ec8e3ee090 --- /dev/null +++ b/data/maps/VermilionCity_Mart/scripts.inc @@ -0,0 +1,48 @@ +VermilionCity_Mart_MapScripts:: + .byte 0 + +VermilionCity_Mart_EventScript_CooltrainerF:: + msgbox VermilionCity_Mart_Text_MonsGoodOrBadDependingOnTrainer, MSGBOX_NPC + end + +VermilionCity_Mart_EventScript_BaldingMan:: + msgbox VermilionCity_Mart_Text_TeamRocketAreWickedPeople, MSGBOX_NPC + end + +VermilionCity_Mart_EventScript_Clerk:: + lock + faceplayer + message gText_HowMayIServeYou + waitmessage + pokemart VermilionCity_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +VermilionCity_Mart_Items:: + .2byte ITEM_POKE_BALL + .2byte ITEM_SUPER_POTION + .2byte ITEM_ANTIDOTE + .2byte ITEM_PARALYZE_HEAL + .2byte ITEM_AWAKENING + .2byte ITEM_ICE_HEAL + .2byte ITEM_REPEL + .2byte ITEM_NONE + release + end + +VermilionCity_Mart_Text_TeamRocketAreWickedPeople:: + .string "There are wicked people who will\n" + .string "use POKéMON for criminal acts.\p" + .string "TEAM ROCKET traffics in rare\n" + .string "POKéMON, for example.\p" + .string "They also abandon POKéMON that\n" + .string "they consider unpopular or useless.\p" + .string "That's the sort of horrid people\n" + .string "they are, TEAM ROCKET.$" + +VermilionCity_Mart_Text_MonsGoodOrBadDependingOnTrainer:: + .string "I think POKéMON can be good or\n" + .string "bad. It depends on the TRAINER.$" + diff --git a/data/maps/VermilionCity_PokemonCenter_1F/scripts.inc b/data/maps/VermilionCity_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..fa195bc85eef --- /dev/null +++ b/data/maps/VermilionCity_PokemonCenter_1F/scripts.inc @@ -0,0 +1,89 @@ +VermilionCity_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, VermilionCity_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +VermilionCity_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_VERMILION_CITY + end + +VermilionCity_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +VermilionCity_PokemonCenter_1F_EventScript_Man:: + msgbox VermilionCity_PokemonCenter_1F_Text_PoisonedMonFaintedWhileWalking, MSGBOX_NPC + end + +VermilionCity_PokemonCenter_1F_EventScript_Hiker:: + msgbox VermilionCity_PokemonCenter_1F_Text_TrainerMonsStrongerThanWild, MSGBOX_NPC + end + +VermilionCity_PokemonCenter_1F_EventScript_Youngster:: + msgbox VermilionCity_PokemonCenter_1F_Text_AllMonWeakToSpecificTypes, MSGBOX_NPC + end + +VermilionCity_PokemonCenter_1F_EventScript_VSSeekerWoman:: + lock + faceplayer + goto_if_set FLAG_GOT_VS_SEEKER, VermilionCity_PokemonCenter_1F_EventScript_ExplainVSSeeker + msgbox VermilionCity_PokemonCenter_1F_Text_UrgeToBattleSomeoneAgain + setflag FLAG_GOT_VS_SEEKER + giveitem ITEM_VS_SEEKER + goto_if_eq VAR_RESULT, FALSE, EventScript_BagIsFull + msgbox VermilionCity_PokemonCenter_1F_Text_UseDeviceForRematches + release + end + +VermilionCity_PokemonCenter_1F_EventScript_ExplainVSSeeker:: + msgbox VermilionCity_PokemonCenter_1F_Text_ExplainVSSeeker + release + end + +VermilionCity_PokemonCenter_1F_Text_TrainerMonsStrongerThanWild:: + .string "Even if they are the same level,\n" + .string "POKéMON can have very different\l" + .string "stats and abilities.\p" + .string "A POKéMON raised by a TRAINER is\n" + .string "stronger than one in the wild.$" + +VermilionCity_PokemonCenter_1F_Text_PoisonedMonFaintedWhileWalking:: + .string "My POKéMON was poisoned!\n" + .string "It fainted while we were walking!$" + +VermilionCity_PokemonCenter_1F_Text_AllMonWeakToSpecificTypes:: + .string "It is true that a higher-level\n" + .string "POKéMON will be more powerful…\p" + .string "But, all POKéMON will have weak\n" + .string "points against specific types.\p" + .string "So, there appears to be no\n" + .string "universally strong POKéMON.$" + +VermilionCity_PokemonCenter_1F_Text_UrgeToBattleSomeoneAgain:: + .string "The urge to battle with someone\n" + .string "you've tangled with before…\p" + .string "Have you ever had that urge?\n" + .string "I'm sure you have.\p" + .string "I wanted to battle certain people\n" + .string "again over and over, too.\p" + .string "So, I've been giving these away.\n" + .string "Please, take one!$" + +VermilionCity_PokemonCenter_1F_Text_UseDeviceForRematches:: + .string "Use that device and you'll find\n" + .string "TRAINERS looking for a rematch.\p" + .string "You have to charge its battery to\n" + .string "use it, though.$" + +VermilionCity_PokemonCenter_1F_Text_ExplainVSSeeker:: + .string "How do you use the VS SEEKER?\n" + .string "There's nothing to it.\p" + .string "Use it like beep-beep-beep, and\n" + .string "TRAINERS around you will notice.\p" + .string "If any TRAINER wants a rematch,\n" + .string "it will let you know immediately.\p" + .string "Charge its battery and use it\n" + .string "while you're on a road.$" diff --git a/data/maps/VermilionCity_PokemonCenter_2F/scripts.inc b/data/maps/VermilionCity_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..edb5616abccf --- /dev/null +++ b/data/maps/VermilionCity_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +VermilionCity_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +VermilionCity_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +VermilionCity_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +VermilionCity_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/VermilionCity_PokemonFanClub/scripts.inc b/data/maps/VermilionCity_PokemonFanClub/scripts.inc new file mode 100644 index 000000000000..3121c08aca3f --- /dev/null +++ b/data/maps/VermilionCity_PokemonFanClub/scripts.inc @@ -0,0 +1,216 @@ +.set SPOKE_TO_WOMAN_LAST, FLAG_TEMP_2 +.set SPOKE_TO_FAT_MAN_LAST, FLAG_TEMP_3 + +VermilionCity_PokemonFanClub_MapScripts:: + .byte 0 + +VermilionCity_PokemonFanClub_EventScript_Chairman:: + lock + faceplayer + goto_if_set FLAG_GOT_BIKE_VOUCHER, VermilionCity_PokemonFanClub_EventScript_AlreadyHeardStory + msgbox VermilionCity_PokemonFanClub_Text_DidYouComeToHearAboutMyMons, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, VermilionCity_PokemonFanClub_EventScript_ChairmanStory + msgbox VermilionCity_PokemonFanClub_Text_ComeBackToHearStory + release + end + +VermilionCity_PokemonFanClub_EventScript_AlreadyHeardStory:: + msgbox VermilionCity_PokemonFanClub_Text_DidntComeToSeeAboutMonsAgain + release + end + +VermilionCity_PokemonFanClub_EventScript_ChairmanStory:: + msgbox VermilionCity_PokemonFanClub_Text_ChairmansStory + checkitemspace ITEM_BIKE_VOUCHER + goto_if_eq VAR_RESULT, FALSE, VermilionCity_PokemonFanClub_EventScript_NoRoomForBikeVoucher + setflag FLAG_GOT_BIKE_VOUCHER + giveitem_msg VermilionCity_PokemonFanClub_Text_ReceivedBikeVoucherFromChairman, ITEM_BIKE_VOUCHER, 1, MUS_RG_OBTAIN_KEY_ITEM + msgbox VermilionCity_PokemonFanClub_Text_ExplainBikeVoucher + release + end + +VermilionCity_PokemonFanClub_EventScript_NoRoomForBikeVoucher:: + msgbox VermilionCity_PokemonFanClub_Text_MakeRoomForThis + release + end + +VermilionCity_PokemonFanClub_EventScript_WorkerF:: + lock + faceplayer + goto_if_set FLAG_SYS_GAME_CLEAR, VermilionCity_PokemonFanClub_EventScript_WorkerFGameClear + msgbox VermilionCity_PokemonFanClub_Text_ChairmanVeryVocalAboutPokemon + release + end + +VermilionCity_PokemonFanClub_EventScript_WorkerFGameClear:: + famechecker FAMECHECKER_DAISY, 1 + msgbox VermilionCity_PokemonFanClub_Text_ChairmanReallyAdoresHisMons + release + end + +VermilionCity_PokemonFanClub_EventScript_Woman:: + lock + faceplayer + goto_if_set SPOKE_TO_FAT_MAN_LAST, VermilionCity_PokemonFanClub_EventScript_WomanSpokeToFatMan + msgbox VermilionCity_PokemonFanClub_Text_AdoreMySeel + closemessage + applymovement LOCALID_POKEMON_FAN_CLUB_WOMAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + setflag SPOKE_TO_WOMAN_LAST + release + end + +VermilionCity_PokemonFanClub_EventScript_WomanSpokeToFatMan:: + msgbox VermilionCity_PokemonFanClub_Text_SeelFarMoreAttractive + closemessage + applymovement LOCALID_POKEMON_FAN_CLUB_WOMAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + clearflag SPOKE_TO_FAT_MAN_LAST + release + end + +VermilionCity_PokemonFanClub_EventScript_FatMan:: + lock + faceplayer + goto_if_set SPOKE_TO_WOMAN_LAST, VermilionCity_PokemonFanClub_EventScript_FatManSpokeToWoman + msgbox VermilionCity_PokemonFanClub_Text_AdmirePikachusTail + closemessage + applymovement LOCALID_POKEMON_FAN_CLUB_FAT_MAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + setflag SPOKE_TO_FAT_MAN_LAST + release + end + +VermilionCity_PokemonFanClub_EventScript_FatManSpokeToWoman:: + msgbox VermilionCity_PokemonFanClub_Text_PikachuTwiceAsCute + closemessage + applymovement LOCALID_POKEMON_FAN_CLUB_FAT_MAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + clearflag SPOKE_TO_WOMAN_LAST + release + end + +VermilionCity_PokemonFanClub_EventScript_Pikachu:: + lock + faceplayer + waitse + playmoncry SPECIES_PIKACHU, CRY_MODE_NORMAL + msgbox VermilionCity_PokemonFanClub_Text_Pikachu + waitmoncry + release + end + +VermilionCity_PokemonFanClub_EventScript_Seel:: + lock + faceplayer + waitse + playmoncry SPECIES_SEEL, CRY_MODE_NORMAL + msgbox VermilionCity_PokemonFanClub_Text_Seel + waitmoncry + release + end + +VermilionCity_PokemonFanClub_EventScript_RulesSign1:: + msgbox VermilionCity_PokemonFanClub_Text_ListenPolitelyToOtherTrainers, MSGBOX_SIGN + end + +VermilionCity_PokemonFanClub_EventScript_RulesSign2:: + msgbox VermilionCity_PokemonFanClub_Text_SomeoneBragsBragBack, MSGBOX_SIGN + end + +VermilionCity_PokemonFanClub_Text_AdmirePikachusTail:: + .string "Won't you admire my PIKACHU's\n" + .string "adorable tail?$" + +VermilionCity_PokemonFanClub_Text_PikachuTwiceAsCute:: + .string "Humph!\p" + .string "My PIKACHU is twice as cute as\n" + .string "that one!$" + +VermilionCity_PokemonFanClub_Text_AdoreMySeel:: + .string "I just adore my SEEL!\n" + .string "It's so lovable!\p" + .string "It squeals, “Kyuuuh,” when I\n" + .string "hug it!$" + +VermilionCity_PokemonFanClub_Text_SeelFarMoreAttractive:: + .string "Oh, dear!\p" + .string "My SEEL is far more attractive.\n" + .string "By double, I would say.$" + +VermilionCity_PokemonFanClub_Text_Pikachu:: + .string "PIKACHU: Chu! Pikachu!$" + +VermilionCity_PokemonFanClub_Text_Seel:: + .string "SEEL: Kyuoo!$" + +VermilionCity_PokemonFanClub_Text_DidYouComeToHearAboutMyMons:: + .string "I chair the POKéMON Fan Club!\p" + .string "I raise more than a hundred\n" + .string "POKéMON!\p" + .string "I'm very fussy when it comes to\n" + .string "POKéMON! I surely am!\p" + .string "So…\p" + .string "Did you come visit to hear about\n" + .string "my POKéMON?$" + +VermilionCity_PokemonFanClub_Text_ChairmansStory:: + .string "Good!\n" + .string "Then listen up!\p" + .string "My favorite RAPIDASH…\p" + .string "It's…cute…lovely…smart… \n" + .string "plus…amazing…you think so?…\l" + .string "oh yes…it's…stunning…\l" + .string "kindly…love it!\p" + .string "Hug it…when…sleeping…warm\n" + .string "and cuddly…spectacular…\l" + .string "ravishing…\l" + .string "…Oops! Look at the time!\l" + .string "I kept you too long!\p" + .string "Thanks for hearing me out!\n" + .string "I want you to have this!$" + +VermilionCity_PokemonFanClub_Text_ReceivedBikeVoucherFromChairman:: + .string "{PLAYER} received a BIKE VOUCHER\n" + .string "from the CHAIRMAN.$" + +VermilionCity_PokemonFanClub_Text_ExplainBikeVoucher:: + .string "Take that BIKE VOUCHER to the\n" + .string "BIKE SHOP in CERULEAN CITY.\p" + .string "Exchange that for a BICYCLE\n" + .string "free of charge!\p" + .string "Don't worry, my favorite FEAROW\n" + .string "will FLY me anywhere I need to go.\p" + .string "So, I have no need for a BICYCLE.\p" + .string "I hope you like cycling!$" + +VermilionCity_PokemonFanClub_Text_ComeBackToHearStory:: + .string "Oh. Come back when you want to\n" + .string "hear my story!$" + +VermilionCity_PokemonFanClub_Text_DidntComeToSeeAboutMonsAgain:: + .string "Hello, {PLAYER}!\p" + .string "Did you come see me about my\n" + .string "POKéMON again?\p" + .string "No?\n" + .string "Too bad!$" + +VermilionCity_PokemonFanClub_Text_MakeRoomForThis:: + .string "Make room for this!$" + +VermilionCity_PokemonFanClub_Text_ChairmanVeryVocalAboutPokemon:: + .string "Our CHAIRMAN is very vocal about\n" + .string "POKéMON.$" + +VermilionCity_PokemonFanClub_Text_ListenPolitelyToOtherTrainers:: + .string "Let's all listen politely to other\n" + .string "TRAINERS!$" + +VermilionCity_PokemonFanClub_Text_SomeoneBragsBragBack:: + .string "If someone brags, brag right back!$" + +VermilionCity_PokemonFanClub_Text_ChairmanReallyAdoresHisMons:: + .string "Our CHAIRMAN really does adore his\n" + .string "POKéMON.\p" + .string "But the person who is most liked by\n" + .string "POKéMON is DAISY, I think.$" diff --git a/data/maps/VictoryRoad_1F_Frlg/scripts.inc b/data/maps/VictoryRoad_1F_Frlg/scripts.inc new file mode 100644 index 000000000000..af943a7e40ce --- /dev/null +++ b/data/maps/VictoryRoad_1F_Frlg/scripts.inc @@ -0,0 +1,67 @@ +VictoryRoad_1F_Frlg_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, VictoryRoad_1F_Frlg_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, VictoryRoad_1F_Frlg_OnTransition + .byte 0 + +VictoryRoad_1F_Frlg_OnLoad:: + call_if_ne VAR_MAP_SCENE_VICTORY_ROAD_1F, 100, VictoryRoad_1F_EventScript_SetRockBarrier + end + +VictoryRoad_1F_EventScript_SetRockBarrier:: + setmetatile 12, 14, METATILE_Cave_RockBarrier_Top, 1 + setmetatile 12, 15, METATILE_Cave_RockBarrier_Bottom, 1 + return + +VictoryRoad_1F_Frlg_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_VICTORY_ROAD_1F + end + +VictoryRoad_1F_EventScript_FloorSwitch:: + lockall + goto_if_eq VAR_MAP_SCENE_VICTORY_ROAD_1F, 100, VictoryRoad_1F_EventScript_FloorSwitchAlreadyPressed + setmetatile 12, 14, METATILE_Cave_Floor_Ledge_Top, 0 + setmetatile 12, 15, METATILE_Cave_Floor_Ledge_Bottom, 0 + playse SE_ICE_BREAK + special DrawWholeMapView + waitse + copyobjectxytoperm LOCALID_VICTORY_ROAD_1F_BOULDER + setvar VAR_MAP_SCENE_VICTORY_ROAD_1F, 100 + releaseall + end + +VictoryRoad_1F_EventScript_FloorSwitchAlreadyPressed:: + releaseall + end + +VictoryRoad_1F_EventScript_Naomi:: + trainerbattle_single TRAINER_COOLTRAINER_NAOMI, VictoryRoad_1F_Text_NaomiIntro, VictoryRoad_1F_Text_NaomiDefeat + msgbox VictoryRoad_1F_Text_NaomiPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_1F_EventScript_Rolando:: + trainerbattle_single TRAINER_COOLTRAINER_ROLANDO, VictoryRoad_1F_Text_RolandoIntro, VictoryRoad_1F_Text_RolandoDefeat + msgbox VictoryRoad_1F_Text_RolandoPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_1F_Text_NaomiIntro:: + .string "I wonder if you are good enough\n" + .string "for me?$" + +VictoryRoad_1F_Text_NaomiDefeat:: + .string "I lost out…$" + +VictoryRoad_1F_Text_NaomiPostBattle:: + .string "I never wanted to lose to anybody,\n" + .string "especially to a younger kid…$" + +VictoryRoad_1F_Text_RolandoIntro:: + .string "I can see you're good.\n" + .string "Let me see exactly how good!$" + +VictoryRoad_1F_Text_RolandoDefeat:: + .string "I had a chance…$" + +VictoryRoad_1F_Text_RolandoPostBattle:: + .string "Tch!\n" + .string "I concede, you are better than I!$" + diff --git a/data/maps/VictoryRoad_2F/scripts.inc b/data/maps/VictoryRoad_2F/scripts.inc new file mode 100644 index 000000000000..8dd8de5b6f59 --- /dev/null +++ b/data/maps/VictoryRoad_2F/scripts.inc @@ -0,0 +1,136 @@ +VictoryRoad_2F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, VictoryRoad_2F_OnLoad + .byte 0 + +VictoryRoad_2F_OnLoad:: + call_if_ne VAR_MAP_SCENE_VICTORY_ROAD_2F_BOULDER1, 100, VictoryRoad_2F_EventScript_SetRockBarrier1 + call_if_ne VAR_MAP_SCENE_VICTORY_ROAD_2F_BOULDER2, 100, VictoryRoad_2F_EventScript_SetRockBarrier2 + end + +VictoryRoad_2F_EventScript_SetRockBarrier1:: + setmetatile 13, 10, METATILE_Cave_RockBarrier_Top, 1 + setmetatile 13, 11, METATILE_Cave_RockBarrier_Bottom, 1 + return + +VictoryRoad_2F_EventScript_SetRockBarrier2:: + setmetatile 33, 16, METATILE_Cave_RockBarrier_Top, 1 + setmetatile 33, 17, METATILE_Cave_RockBarrier_Bottom, 1 + return + +VictoryRoad_2F_EventScript_FloorSwitch1:: + lockall + goto_if_eq VAR_MAP_SCENE_VICTORY_ROAD_2F_BOULDER1, 100, VictoryRoad_2F_EventScript_FloorSwitch1AlreadyPressed + setmetatile 13, 10, METATILE_Cave_Floor_Ledge_Top, 0 + setmetatile 13, 11, METATILE_Cave_Floor_Ledge_Bottom, 0 + playse SE_ICE_BREAK + special DrawWholeMapView + waitse + copyobjectxytoperm LOCALID_VICTORY_ROAD_2F_BOULDER1 + setvar VAR_MAP_SCENE_VICTORY_ROAD_2F_BOULDER1, 100 + releaseall + end + +VictoryRoad_2F_EventScript_FloorSwitch1AlreadyPressed:: + releaseall + end + +VictoryRoad_2F_EventScript_FloorSwitch2:: + lockall + goto_if_eq VAR_MAP_SCENE_VICTORY_ROAD_2F_BOULDER2, 100, VictoryRoad_2F_EventScript_FloorSwitch2AlreadyPressed + setmetatile 33, 16, METATILE_Cave_Floor_Ledge_Top, 0 + setmetatile 33, 17, METATILE_Cave_Floor_Ledge_Bottom, 0 + playse SE_ICE_BREAK + special DrawWholeMapView + waitse + copyobjectxytoperm LOCALID_VICTORY_ROAD_2F_BOULDER2 + setvar VAR_MAP_SCENE_VICTORY_ROAD_2F_BOULDER2, 100 + releaseall + end + +VictoryRoad_2F_EventScript_FloorSwitch2AlreadyPressed:: + releaseall + end + +VictoryRoad_2F_EventScript_Dawson:: + trainerbattle_single TRAINER_POKEMANIAC_DAWSON, VictoryRoad_2F_Text_DawsonIntro, VictoryRoad_2F_Text_DawsonDefeat + msgbox VictoryRoad_2F_Text_DawsonPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_2F_EventScript_Daisuke:: + trainerbattle_single TRAINER_BLACK_BELT_DAISUKE, VictoryRoad_2F_Text_DaisukeIntro, VictoryRoad_2F_Text_DaisukeDefeat + msgbox VictoryRoad_2F_Text_DaisukePostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_2F_EventScript_Nelson:: + trainerbattle_single TRAINER_JUGGLER_NELSON, VictoryRoad_2F_Text_NelsonIntro, VictoryRoad_2F_Text_NelsonDefeat + msgbox VictoryRoad_2F_Text_NelsonPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_2F_EventScript_Gregory:: + trainerbattle_single TRAINER_JUGGLER_GREGORY, VictoryRoad_2F_Text_GregoryIntro, VictoryRoad_2F_Text_GregoryDefeat + msgbox VictoryRoad_2F_Text_GregoryPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_2F_EventScript_Vincent:: + trainerbattle_single TRAINER_TAMER_VINCENT, VictoryRoad_2F_Text_VincentIntro, VictoryRoad_2F_Text_VincentDefeat + msgbox VictoryRoad_2F_Text_VincentPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_2F_Text_DawsonIntro:: + .string "If you can get through here,\n" + .string "you can go meet the ELITE FOUR.$" + +VictoryRoad_2F_Text_DawsonDefeat:: + .string "No!\n" + .string "Unbelievable!$" + +VictoryRoad_2F_Text_DawsonPostBattle:: + .string "I can beat you when it comes to\n" + .string "knowledge about POKéMON!$" + +VictoryRoad_2F_Text_DaisukeIntro:: + .string "This here is VICTORY ROAD.\n" + .string "It's the final test for TRAINERS!$" + +VictoryRoad_2F_Text_DaisukeDefeat:: + .string "Atcho!$" + +VictoryRoad_2F_Text_DaisukePostBattle:: + .string "If you get stuck, try moving some\n" + .string "boulders around.$" + +VictoryRoad_2F_Text_NelsonIntro:: + .string "Ah, so you wish to challenge the\n" + .string "ELITE FOUR?$" + +VictoryRoad_2F_Text_NelsonDefeat:: + .string "You got me!$" + +VictoryRoad_2F_Text_NelsonPostBattle:: + .string "{RIVAL} also came through here.$" + +VictoryRoad_2F_Text_VincentIntro:: + .string "Come on!\n" + .string "I'll whip you!$" + +VictoryRoad_2F_Text_VincentDefeat:: + .string "I got whipped!$" + +VictoryRoad_2F_Text_VincentPostBattle:: + .string "You earned the right to be on\n" + .string "VICTORY ROAD…$" + +VictoryRoad_2F_Text_GregoryIntro:: + .string "Is VICTORY ROAD too tough?$" + +VictoryRoad_2F_Text_GregoryDefeat:: + .string "Well done!$" + +VictoryRoad_2F_Text_GregoryPostBattle:: + .string "Many TRAINERS give up their\n" + .string "challenge here and go home.$" + +@ Unused, old text for Moltres +VictoryRoad_2F_Text_Gyaoo:: + .string "ギヤーオ!$" + diff --git a/data/maps/VictoryRoad_3F/scripts.inc b/data/maps/VictoryRoad_3F/scripts.inc new file mode 100644 index 000000000000..20080f954a4d --- /dev/null +++ b/data/maps/VictoryRoad_3F/scripts.inc @@ -0,0 +1,161 @@ +VictoryRoad_3F_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, VictoryRoad_3F_OnLoad + .byte 0 + +VictoryRoad_3F_OnLoad:: + call_if_ne VAR_MAP_SCENE_VICTORY_ROAD_3F, 100, VictoryRoad_3F_EventScript_SetRockBarrier + end + +VictoryRoad_3F_EventScript_SetRockBarrier:: + setmetatile 12, 12, METATILE_Cave_RockBarrier_Top, 1 + setmetatile 12, 13, METATILE_Cave_RockBarrier_Bottom, 1 + return + +VictoryRoad_3F_EventScript_FloorSwitch:: + lockall + goto_if_eq VAR_MAP_SCENE_VICTORY_ROAD_3F, 100, VictoryRoad_3F_EventScript_FloorSwitchAlreadyPressed + setmetatile 12, 12, METATILE_Cave_Floor_Ledge_Top, 0 + setmetatile 12, 13, METATILE_Cave_Floor_Ledge_Bottom, 0 + playse SE_ICE_BREAK + special DrawWholeMapView + waitse + copyobjectxytoperm LOCALID_VICTORY_ROAD_3F_BOULDER1 + copyobjectxytoperm LOCALID_VICTORY_ROAD_3F_BOULDER2 + setvar VAR_MAP_SCENE_VICTORY_ROAD_3F, 100 + releaseall + end + +VictoryRoad_3F_EventScript_FloorSwitchAlreadyPressed:: + releaseall + end + +VictoryRoad_3F_EventScript_George:: + trainerbattle_single TRAINER_COOLTRAINER_GEORGE, VictoryRoad_3F_Text_GeorgeIntro, VictoryRoad_3F_Text_GeorgeDefeat + msgbox VictoryRoad_3F_Text_GeorgePostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_3F_EventScript_Colby:: + trainerbattle_single TRAINER_COOLTRAINER_COLBY, VictoryRoad_3F_Text_ColbyIntro, VictoryRoad_3F_Text_ColbyDefeat + msgbox VictoryRoad_3F_Text_ColbyPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_3F_EventScript_Caroline:: + trainerbattle_single TRAINER_COOLTRAINER_CAROLINE, VictoryRoad_3F_Text_CarolineIntro, VictoryRoad_3F_Text_CarolineDefeat + msgbox VictoryRoad_3F_Text_CarolinePostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_3F_EventScript_Alexa:: + trainerbattle_single TRAINER_COOLTRAINER_ALEXA, VictoryRoad_3F_Text_AlexaIntro, VictoryRoad_3F_Text_AlexaDefeat + msgbox VictoryRoad_3F_Text_AlexaPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_3F_EventScript_Ray:: + trainerbattle_double TRAINER_COOL_COUPLE_RAY_TYRA, VictoryRoad_3F_Text_RayIntro, VictoryRoad_3F_Text_RayDefeat, VictoryRoad_3F_Text_RayNotEnoughMons + msgbox VictoryRoad_3F_Text_RayPostBattle, MSGBOX_AUTOCLOSE + end + +VictoryRoad_3F_EventScript_Tyra:: + trainerbattle_double TRAINER_COOL_COUPLE_RAY_TYRA, VictoryRoad_3F_Text_TyraIntro, VictoryRoad_3F_Text_TyraDefeat, VictoryRoad_3F_Text_TyraNotEnoughMons + msgbox VictoryRoad_3F_Text_TyraPostBattle, MSGBOX_AUTOCLOSE + end + +Text_DoubleEdgeTeach:: + .string "You should be proud of yourself,\n" + .string "having battled your way through\l" + .string "VICTORY ROAD so courageously.\p" + .string "In recognition of your feat,\n" + .string "I'll teach you DOUBLE-EDGE.\p" + .string "Would you like me to teach that\n" + .string "technique?$" + +Text_DoubleEdgeDeclined:: + .string "I'll teach you the technique\n" + .string "anytime.$" + +Text_DoubleEdgeWhichMon:: + .string "Which POKéMON should I teach\n" + .string "DOUBLE-EDGE?$" + +Text_DoubleEdgeTaught:: + .string "Keep that drive going for the\n" + .string "POKéMON LEAGUE!\p" + .string "Take a run at them and knock 'em\n" + .string "out!$" + +VictoryRoad_3F_Text_GeorgeIntro:: + .string "I heard rumors of a child prodigy.$" + +VictoryRoad_3F_Text_GeorgeDefeat:: + .string "The rumors were true!$" + +VictoryRoad_3F_Text_GeorgePostBattle:: + .string "So, it was you who beat GIOVANNI\n" + .string "of TEAM ROCKET?$" + +VictoryRoad_3F_Text_AlexaIntro:: + .string "TRAINERS live to seek stronger\n" + .string "opponents.$" + +VictoryRoad_3F_Text_AlexaDefeat:: + .string "Oh!\n" + .string "So strong!$" + +VictoryRoad_3F_Text_AlexaPostBattle:: + .string "By fighting tough battles, you get\n" + .string "stronger.$" + +VictoryRoad_3F_Text_CarolineIntro:: + .string "I'll show you just how good you\n" + .string "are. Not!$" + +VictoryRoad_3F_Text_CarolineDefeat:: + .string "I'm furious!$" + +VictoryRoad_3F_Text_CarolinePostBattle:: + .string "You showed me just how good\n" + .string "I was…$" + +VictoryRoad_3F_Text_ColbyIntro:: + .string "Only the chosen can pass here!$" + +VictoryRoad_3F_Text_ColbyDefeat:: + .string "I don't believe it!$" + +VictoryRoad_3F_Text_ColbyPostBattle:: + .string "All TRAINERS here are headed to\n" + .string "the POKéMON LEAGUE.\p" + .string "Don't let down your guard.$" + +VictoryRoad_3F_Text_RayIntro:: + .string "RAY: Together, the two of us are\n" + .string "destined for greatness!$" + +VictoryRoad_3F_Text_RayDefeat:: + .string "RAY: Ludicrous!\n" + .string "This can't be!$" + +VictoryRoad_3F_Text_RayPostBattle:: + .string "RAY: You've beaten us.\n" + .string "Greatness remains elusive…$" + +VictoryRoad_3F_Text_RayNotEnoughMons:: + .string "RAY: Together, the two of us are\n" + .string "striving for the pinnacle.\p" + .string "We need you to bring two POKéMON\n" + .string "into battle with us.$" + +VictoryRoad_3F_Text_TyraIntro:: + .string "TYRA: We're trying to become\n" + .string "champions together.$" + +VictoryRoad_3F_Text_TyraDefeat:: + .string "TYRA: Oh, but…$" + +VictoryRoad_3F_Text_TyraPostBattle:: + .string "TYRA: You've taught me that power\n" + .string "can be infinite in shape and form.$" + +VictoryRoad_3F_Text_TyraNotEnoughMons:: + .string "TYRA: You can't battle with us if\n" + .string "you have only one POKéMON.$" + diff --git a/data/maps/ViridianCity/scripts.inc b/data/maps/ViridianCity/scripts.inc new file mode 100644 index 000000000000..5ddbe72e547a --- /dev/null +++ b/data/maps/ViridianCity/scripts.inc @@ -0,0 +1,359 @@ +ViridianCity_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, ViridianCity_OnTransition + .byte 0 + +ViridianCity_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_VIRIDIAN_CITY + call_if_eq VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0, ViridianCity_EventScript_SetOldManBlockingRoad + call_if_eq VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 1, ViridianCity_EventScript_SetOldManStandingByRoad + call_if_ge VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2, ViridianCity_EventScript_SetOldManNormal + call_if_eq VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 0, ViridianCity_EventScript_TryUnlockGym + end + +ViridianCity_EventScript_SetOldManNormal:: + setvar VAR_OBJ_GFX_ID_0, OBJ_EVENT_GFX_OLD_MAN_1 + return + +ViridianCity_EventScript_SetOldManStandingByRoad:: + setvar VAR_OBJ_GFX_ID_0, OBJ_EVENT_GFX_OLD_MAN_1 + setobjectxyperm LOCALID_TUTORIAL_MAN, 21, 8 + setobjectmovementtype LOCALID_TUTORIAL_MAN, MOVEMENT_TYPE_LOOK_AROUND + return + +ViridianCity_EventScript_SetOldManBlockingRoad:: + setvar VAR_OBJ_GFX_ID_0, OBJ_EVENT_GFX_OLD_MAN_LYING_DOWN + setobjectxyperm LOCALID_TUTORIAL_MAN, 21, 11 + setobjectmovementtype LOCALID_TUTORIAL_MAN, MOVEMENT_TYPE_FACE_DOWN + return + +ViridianCity_EventScript_TryUnlockGym:: + goto_if_unset FLAG_BADGE02_GET, Common_EventScript_NopReturn + goto_if_unset FLAG_BADGE03_GET, Common_EventScript_NopReturn + goto_if_unset FLAG_BADGE04_GET, Common_EventScript_NopReturn + goto_if_unset FLAG_BADGE05_GET, Common_EventScript_NopReturn + goto_if_unset FLAG_BADGE06_GET, Common_EventScript_NopReturn + goto_if_unset FLAG_BADGE07_GET, Common_EventScript_NopReturn + setvar VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 1 + return + +ViridianCity_EventScript_GymDoorLocked:: + lockall + textcolor NPC_TEXT_COLOR_NEUTRAL + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + delay 20 + msgbox ViridianCity_Text_GymDoorsAreLocked + closemessage + applymovement LOCALID_PLAYER, ViridianCity_Movement_JumpDownLedge + waitmovement 0 + releaseall + end + +ViridianCity_Movement_JumpDownLedge:: + jump_2_down + step_end + +ViridianCity_EventScript_CitySign:: + msgbox ViridianCity_Text_CitySign, MSGBOX_SIGN + end + +ViridianCity_EventScript_TrainerTips1:: + msgbox ViridianCity_Text_CatchMonsForEasierBattles, MSGBOX_SIGN + end + +ViridianCity_EventScript_TrainerTips2:: + msgbox ViridianCity_Text_MovesLimitedByPP, MSGBOX_SIGN + end + +ViridianCity_EventScript_GymSign:: + msgbox ViridianCity_Text_GymSign, MSGBOX_SIGN + end + +ViridianCity_EventScript_GymDoor:: + msgbox ViridianCity_Text_GymDoorsAreLocked, MSGBOX_SIGN + end + +ViridianCity_EventScript_Boy:: + msgbox ViridianCity_Text_CanCarryMonsAnywhere, MSGBOX_NPC + end + +@ Other old man, not the tutorial old man +ViridianCity_EventScript_OldMan:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 1, ViridianCity_EventScript_OldManGymLeaderReturned + msgbox ViridianCity_Text_GymClosedWonderWhoLeaderIs + closemessage + applymovement LOCALID_VIRIDIAN_OLD_MAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +ViridianCity_EventScript_OldManGymLeaderReturned:: + msgbox ViridianCity_Text_ViridiansGymLeaderReturned + release + end + +ViridianCity_EventScript_TutorialOldMan:: + lock + faceplayer + goto_if_set FLAG_BADGE01_GET, ViridianCity_EventScript_AskIfTeachyTVHelpful + goto_if_ge VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2, ViridianCity_EventScript_TutorialCompleted + goto_if_eq VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 1, ViridianCity_EventScript_TutorialStart + goto_if_eq VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0, ViridianCity_EventScript_TutorialNotReady + end + +ViridianCity_EventScript_AskIfTeachyTVHelpful:: + msgbox ViridianCity_Text_HowsTeachyTVHelping, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, ViridianCity_EventScript_TeachyTVNotHelpful + msgbox ViridianCity_Text_MyGrandsonOnTheShow + release + end + +ViridianCity_EventScript_TeachyTVNotHelpful:: + msgbox ViridianCity_Text_TooBusyForTeachyTV + release + end + +ViridianCity_EventScript_TutorialCompleted:: + msgbox ViridianCity_Text_WeakenMonsFirstToCatch + release + end + +ViridianCity_EventScript_TutorialStart:: + call ViridianCity_EventScript_DoTutorialBattle + release + end + +@ Unused +ViridianCity_EventScript_WatchToLearnBasics:: + msgbox ViridianCity_Text_WatchThatToLearnBasics + release + end + +@ Unused. Starts battle after the post battle text, which is odd. +ViridianCity_EventScript_TutorialUnused:: + msgbox ViridianCity_Text_ThatWasEducationalTakeThis + special StartOldManTutorialBattle + waitstate + release + end + +ViridianCity_EventScript_TutorialNotReady:: + msgbox ViridianCity_Text_ThisIsPrivateProperty + closemessage + release + end + +ViridianCity_EventScript_Youngster:: + lock + faceplayer + msgbox ViridianCity_Text_WantToKnowAboutCaterpillarMons, MSGBOX_YESNO + goto_if_eq VAR_RESULT, YES, ViridianCity_EventScript_YoungsterExplainCaterpillars + goto_if_eq VAR_RESULT, NO, ViridianCity_EventScript_YoungsterDeclineExplanation + end + +ViridianCity_EventScript_YoungsterExplainCaterpillars:: + msgbox ViridianCity_Text_ExplainCaterpieWeedle + release + end + +ViridianCity_EventScript_YoungsterDeclineExplanation:: + msgbox ViridianCity_Text_OhOkayThen + release + end + +ViridianCity_EventScript_Woman:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0, ViridianCity_EventScript_WomanRoadBlocked + msgbox ViridianCity_Text_GoShoppingInPewterOccasionally + release + end + +ViridianCity_EventScript_WomanRoadBlocked:: + msgbox ViridianCity_Text_GrandpaHasntHadCoffeeYet + closemessage + applymovement LOCALID_VIRIDIAN_WOMAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +ViridianCity_EventScript_DreamEaterTutor:: + goto EventScript_DreamEaterTutor + end + +ViridianCity_EventScript_RoadBlocked:: + lockall + textcolor NPC_TEXT_COLOR_MALE + msgbox ViridianCity_Text_ThisIsPrivateProperty + closemessage + applymovement LOCALID_PLAYER, ViridianCity_Movement_WalkDown + waitmovement 0 + releaseall + end + +ViridianCity_Movement_WalkDown:: + walk_down + step_end + +ViridianCity_EventScript_TutorialTriggerLeft:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_TUTORIAL_MAN, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + call ViridianCity_EventScript_DoTutorialBattle + release + end + +ViridianCity_EventScript_TutorialTriggerRight:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_TUTORIAL_MAN, Common_Movement_WalkInPlaceFasterRight + waitmovement 0 + applymovement LOCALID_PLAYER, Common_Movement_WalkInPlaceFasterLeft + waitmovement 0 + call ViridianCity_EventScript_DoTutorialBattle + release + end + +ViridianCity_EventScript_DoTutorialBattle:: + msgbox ViridianCity_Text_ShowYouHowToCatchMons + closemessage + special StartOldManTutorialBattle + waitstate + lock + faceplayer + msgbox ViridianCity_Text_ThatWasEducationalTakeThis + setvar VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2 + giveitem ITEM_TEACHY_TV + msgbox ViridianCity_Text_WatchThatToLearnBasics + return + +ViridianCity_Text_CanCarryMonsAnywhere:: + .string "Those POKé BALLS at your waist!\n" + .string "You have POKéMON, don't you?\p" + .string "It's great that you can carry and\n" + .string "use POKéMON anytime, anywhere.$" + +ViridianCity_Text_GymClosedWonderWhoLeaderIs:: + .string "This POKéMON GYM is always closed.\p" + .string "I wonder who the LEADER is?$" + +ViridianCity_Text_ViridiansGymLeaderReturned:: + .string "VIRIDIAN GYM's LEADER returned!$" + +ViridianCity_Text_WantToKnowAboutCaterpillarMons:: + .string "You want to know about the two\n" + .string "kinds of caterpillar POKéMON?$" + +ViridianCity_Text_OhOkayThen:: + .string "Oh, okay then!$" + +ViridianCity_Text_ExplainCaterpieWeedle:: + .string "CATERPIE has no poison,\n" + .string "but WEEDLE does.\p" + .string "Watch that your POKéMON aren't\n" + .string "stabbed by WEEDLE's POISON STING.$" + +ViridianCity_Text_GrandpaHasntHadCoffeeYet:: + .string "Oh, Grandpa!\n" + .string "Don't be so mean!\p" + .string "I'm so sorry.\n" + .string "He hasn't had his coffee yet.$" + +ViridianCity_Text_GoShoppingInPewterOccasionally:: + .string "I go shopping in PEWTER CITY\n" + .string "occasionally.\p" + .string "I have to take the winding trail in\n" + .string "VIRIDIAN FOREST when I go.$" + +ViridianCity_Text_ThisIsPrivateProperty:: + .string "I absolutely forbid you from\n" + .string "going through here!\p" + .string "This is private property!$" + +ViridianCity_Text_ShowYouHowToCatchMons:: + .string "Well, now, I've had my coffee, and\n" + .string "that's what I need to get going!\p" + .string "Hm?\n" + .string "What is that red box you have?\p" + .string "Ah, so you're working on your\n" + .string "POKéDEX.\p" + .string "Then let me give you a word of\n" + .string "advice.\p" + .string "Whenever you catch a POKéMON,\n" + .string "the POKéDEX automatically updates\l" + .string "its data.\p" + .string "…You don't know how to catch\n" + .string "a POKéMON?\p" + .string "I suppose I had better show you\n" + .string "then!$" + +ViridianCity_Text_ThatWasEducationalTakeThis:: + .string "There! Now tell me, that was\n" + .string "educational, was it not?\p" + .string "And here, take this, too.$" + +ViridianCity_Text_WatchThatToLearnBasics:: + .string "If there's something you don't\n" + .string "understand, watch that.\p" + .string "It will teach you about the basics\n" + .string "of being a POKéMON TRAINER.$" + +ViridianCity_Text_WeakenMonsFirstToCatch:: + .string "Well, now, I've had my coffee, and\n" + .string "that's what I need to get going!\p" + .string "But I made it too strong.\n" + .string "It gave me a headache…\p" + .string "Incidentally, are you filling your\n" + .string "POKéDEX?\p" + .string "At first, focus on weakening the\n" + .string "POKéMON before trying to catch it.$" + +ViridianCity_Text_HowsTeachyTVHelping:: + .string "Well, now, I've had my coffee, and\n" + .string "that's what I need to get going!\p" + .string "But I made it too strong.\n" + .string "It gave me a headache…\p" + .string "Incidentally, is my old TEACHY TV\n" + .string "helping you?$" + +ViridianCity_Text_MyGrandsonOnTheShow:: + .string "Wahaha!\n" + .string "It's my grandson on the show!\p" + .string "Since he's the one doing the\n" + .string "teaching, you're bound to learn.$" + +ViridianCity_Text_TooBusyForTeachyTV:: + .string "Hm… You're too busy to not even\n" + .string "have the time for TEACHY TV…\p" + .string "Time is money, and neither should\n" + .string "be ill spent…$" + +ViridianCity_Text_CitySign:: + .string "VIRIDIAN CITY \n" + .string "The Eternally Green Paradise$" + +ViridianCity_Text_CatchMonsForEasierBattles:: + .string "TRAINER TIPS\p" + .string "Catch POKéMON and expand your\n" + .string "collection.\p" + .string "The more you have, the easier it\n" + .string "is to battle.$" + +ViridianCity_Text_MovesLimitedByPP:: + .string "TRAINER TIPS\p" + .string "The battle moves of POKéMON are\n" + .string "limited by their POWER POINTS, PP.\p" + .string "To replenish PP, rest your tired\n" + .string "POKéMON at a POKéMON CENTER.$" + +ViridianCity_Text_GymSign:: + .string "VIRIDIAN CITY POKéMON GYM$" + +ViridianCity_Text_GymDoorsAreLocked:: + .string "VIRIDIAN GYM's doors are locked…$" + diff --git a/data/maps/ViridianCity_Gym/scripts.inc b/data/maps/ViridianCity_Gym/scripts.inc new file mode 100644 index 000000000000..1555ccb212f4 --- /dev/null +++ b/data/maps/ViridianCity_Gym/scripts.inc @@ -0,0 +1,277 @@ +ViridianCity_Gym_MapScripts:: + .byte 0 + +ViridianCity_Gym_EventScript_Giovanni:: + famechecker FAMECHECKER_GIOVANNI, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 + trainerbattle_single TRAINER_LEADER_GIOVANNI, ViridianCity_Gym_Text_GiovanniIntro, ViridianCity_Gym_Text_GiovanniDefeat, ViridianCity_Gym_EventScript_DefeatedGiovanni, NO_MUSIC + goto_if_unset FLAG_GOT_TM26_FROM_GIOVANNI, ViridianCity_Gym_EventScript_GiveTM26 + msgbox ViridianCity_Gym_Text_GiovanniPostBattle + closemessage + fadescreen FADE_TO_BLACK + removeobject LOCALID_VIRIDIAN_GIOVANNI + fadescreen FADE_FROM_BLACK + release + end + +ViridianCity_Gym_EventScript_DefeatedGiovanni:: + famechecker FAMECHECKER_GIOVANNI, 3 + setflag FLAG_HIDE_MISC_KANTO_ROCKETS + setflag FLAG_DEFEATED_LEADER_GIOVANNI + setflag FLAG_BADGE08_GET + setvar VAR_MAP_SCENE_ROUTE22, 3 + set_gym_trainers_frlg 8 + goto ViridianCity_Gym_EventScript_GiveTM26 + end + +ViridianCity_Gym_EventScript_GiveTM26:: + msgbox ViridianCity_Gym_Text_ExplainEarthBadgeTakeThis + checkitemspace ITEM_TM26 + goto_if_eq VAR_RESULT, FALSE, ViridianCity_Gym_EventScript_NoRoomForTM26 + giveitem_msg ViridianCity_Gym_Text_ReceivedTM26FromGiovanni, ITEM_TM26 + setflag FLAG_GOT_TM26_FROM_GIOVANNI + msgbox ViridianCity_Gym_Text_ExplainTM26 + release + end + +ViridianCity_Gym_EventScript_NoRoomForTM26:: + msgbox ViridianCity_Gym_Text_YouDoNotHaveSpace + release + end + +ViridianCity_Gym_EventScript_Jason:: + trainerbattle_single TRAINER_TAMER_JASON, ViridianCity_Gym_Text_JasonIntro, ViridianCity_Gym_Text_JasonDefeat + msgbox ViridianCity_Gym_Text_JasonPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianCity_Gym_EventScript_Cole:: + trainerbattle_single TRAINER_TAMER_COLE, ViridianCity_Gym_Text_ColeIntro, ViridianCity_Gym_Text_ColeDefeat + msgbox ViridianCity_Gym_Text_ColePostBattle, MSGBOX_AUTOCLOSE + end + +ViridianCity_Gym_EventScript_Atsushi:: + trainerbattle_single TRAINER_BLACK_BELT_ATSUSHI, ViridianCity_Gym_Text_AtsushiIntro, ViridianCity_Gym_Text_AtsushiDefeat + msgbox ViridianCity_Gym_Text_AtsushiPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianCity_Gym_EventScript_Kiyo:: + trainerbattle_single TRAINER_BLACK_BELT_KIYO, ViridianCity_Gym_Text_KiyoIntro, ViridianCity_Gym_Text_KiyoDefeat + msgbox ViridianCity_Gym_Text_KiyoPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianCity_Gym_EventScript_Takashi:: + trainerbattle_single TRAINER_BLACK_BELT_TAKASHI, ViridianCity_Gym_Text_TakashiIntro, ViridianCity_Gym_Text_TakashiDefeat + msgbox ViridianCity_Gym_Text_TakashiPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianCity_Gym_EventScript_Samuel:: + trainerbattle_single TRAINER_COOLTRAINER_SAMUEL, ViridianCity_Gym_Text_SamuelIntro, ViridianCity_Gym_Text_SamuelDefeat + msgbox ViridianCity_Gym_Text_SamuelPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianCity_Gym_EventScript_Yuji:: + trainerbattle_single TRAINER_COOLTRAINER_YUJI, ViridianCity_Gym_Text_YujiIntro, ViridianCity_Gym_Text_YujiDefeat + msgbox ViridianCity_Gym_Text_YujiPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianCity_Gym_EventScript_Warren:: + trainerbattle_single TRAINER_COOLTRAINER_WARREN, ViridianCity_Gym_Text_WarrenIntro, ViridianCity_Gym_Text_WarrenDefeat + msgbox ViridianCity_Gym_Text_WarrenPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianCity_Gym_EventScript_GymGuy:: + lock + faceplayer + goto_if_set FLAG_DEFEATED_LEADER_GIOVANNI, ViridianCity_Gym_EventScript_GymGuyPostVictory + msgbox ViridianCity_Gym_Text_GymGuyAdvice + release + end + +ViridianCity_Gym_EventScript_GymGuyPostVictory:: + famechecker FAMECHECKER_GIOVANNI, 4 + msgbox ViridianCity_Gym_Text_GymGuyPostVictory + release + end + +ViridianCity_Gym_EventScript_GymStatue:: + lockall + goto_if_set FLAG_BADGE08_GET, ViridianCity_Gym_EventScript_GymStatuePostVictory + msgbox ViridianCity_Gym_Text_GymStatue + releaseall + end + +ViridianCity_Gym_EventScript_GymStatuePostVictory:: + msgbox ViridianCity_Gym_Text_GymStatuePlayerWon + releaseall + end + +ViridianCity_Gym_Text_GiovanniIntro:: + .string "Fwahahaha!\n" + .string "Welcome to my hideout!\p" + .string "It shall be so until I can restore\n" + .string "TEAM ROCKET to its former glory.\p" + .string "But, you have found me again.\n" + .string "So be it.\l" + .string "This time, I'm not holding back!\p" + .string "Once more, you shall face\n" + .string "GIOVANNI, the greatest TRAINER!{PLAY_BGM}{MUS_RG_ENCOUNTER_ROCKET}$" + +ViridianCity_Gym_Text_GiovanniDefeat:: + .string "Ha!\n" + .string "That was a truly intense fight.\l" + .string "You have won!\p" + .string "As proof, here is the EARTHBADGE!\n" + .string "{PAUSE_MUSIC}{PLAY_BGM}{MUS_OBTAIN_BADGE}{PAUSE 0xFE}{PAUSE 0x56}{RESUME_MUSIC}$" + +ViridianCity_Gym_Text_GiovanniPostBattle:: + .string "Having lost in this fashion, \n" + .string "I can't face my followers.\l" + .string "I have betrayed their trust.\p" + .string "As of today, TEAM ROCKET is\n" + .string "finished forever!\p" + .string "As for myself, I shall dedicate\n" + .string "my life to training again.\p" + .string "Let us meet again someday!\n" + .string "Farewell!$" + +ViridianCity_Gym_Text_ExplainEarthBadgeTakeThis:: + .string "The EARTHBADGE makes POKéMON of\n" + .string "any level obey without question.\p" + .string "It is evidence of your mastery as\n" + .string "a POKéMON TRAINER.\p" + .string "With it, you can challenge the\n" + .string "POKéMON LEAGUE.\p" + .string "Also, take this TM.\p" + .string "Consider it a gift for your POKéMON\n" + .string "LEAGUE challenge.$" + +ViridianCity_Gym_Text_ReceivedTM26FromGiovanni:: + .string "{PLAYER} received TM26\n" + .string "from GIOVANNI.$" + +ViridianCity_Gym_Text_ExplainTM26:: + .string "TM26 contains EARTHQUAKE.\p" + .string "It is a powerful attack that causes\n" + .string "a massive tremor.\p" + .string "I made it when I ran the GYM here,\n" + .string "far too long ago… $" + +ViridianCity_Gym_Text_YouDoNotHaveSpace:: + .string "You do not have space for this!$" + +ViridianCity_Gym_Text_YujiIntro:: + .string "Heh!\n" + .string "You must be running out of steam\l" + .string "by now!$" + +ViridianCity_Gym_Text_YujiDefeat:: + .string "I ran out of gas!$" + +ViridianCity_Gym_Text_YujiPostBattle:: + .string "You'll need power to keep up with\n" + .string "our GYM LEADER.$" + +ViridianCity_Gym_Text_AtsushiIntro:: + .string "Rrrroar!\n" + .string "I'm working myself into a rage!$" + +ViridianCity_Gym_Text_AtsushiDefeat:: + .string "Wargh!$" + +ViridianCity_Gym_Text_AtsushiPostBattle:: + .string "I'm still not worthy!$" + +ViridianCity_Gym_Text_JasonIntro:: + .string "POKéMON and I, we make wonderful\n" + .string "music together!$" + +ViridianCity_Gym_Text_JasonDefeat:: + .string "You are in perfect harmony!$" + +ViridianCity_Gym_Text_JasonPostBattle:: + .string "Do you know the identity of our\n" + .string "GYM LEADER?$" + +ViridianCity_Gym_Text_KiyoIntro:: + .string "Karate is the ultimate form of\n" + .string "martial arts!$" + +ViridianCity_Gym_Text_KiyoDefeat:: + .string "Aiyah!$" + +ViridianCity_Gym_Text_KiyoPostBattle:: + .string "If my POKéMON were as good at\n" + .string "karate as I…$" + +ViridianCity_Gym_Text_WarrenIntro:: + .string "The truly talented win with style.$" + +ViridianCity_Gym_Text_WarrenDefeat:: + .string "I lost my grip!$" + +ViridianCity_Gym_Text_WarrenPostBattle:: + .string "The LEADER will scold me for\n" + .string "losing this way…$" + +ViridianCity_Gym_Text_TakashiIntro:: + .string "I'm the KARATE KING!\n" + .string "Your fate rests with me!$" + +ViridianCity_Gym_Text_TakashiDefeat:: + .string "Ayah!$" + +ViridianCity_Gym_Text_TakashiPostBattle:: + .string "The POKéMON LEAGUE?\n" + .string "You? Don't get cocky!$" + +ViridianCity_Gym_Text_ColeIntro:: + .string "Your POKéMON will cower at the\n" + .string "crack of my whip!$" + +ViridianCity_Gym_Text_ColeDefeat:: + .string "Yowch!\n" + .string "Whiplash!$" + +ViridianCity_Gym_Text_ColePostBattle:: + .string "Wait!\n" + .string "I was just careless!$" + +ViridianCity_Gym_Text_SamuelIntro:: + .string "VIRIDIAN GYM was closed for a\n" + .string "long time.\p" + .string "But now, our LEADER is back!$" + +ViridianCity_Gym_Text_SamuelDefeat:: + .string "I was beaten?$" + +ViridianCity_Gym_Text_SamuelPostBattle:: + .string "You can go on to the POKéMON\n" + .string "LEAGUE only by defeating our GYM\l" + .string "LEADER!$" + +ViridianCity_Gym_Text_GymGuyAdvice:: + .string "Yo!\n" + .string "Champ in the making!\p" + .string "Even I don't know the VIRIDIAN\n" + .string "LEADER's identity.\p" + .string "But one thing's certain.\n" + .string "This will be the toughest of all\l" + .string "the GYM LEADERS.\p" + .string "Also, I heard that the TRAINERS\n" + .string "here like GROUND-type POKéMON.$" + +ViridianCity_Gym_Text_GymGuyPostVictory:: + .string "Blow me away! GIOVANNI was the\n" + .string "GYM LEADER of VIRIDIAN?$" + +ViridianCity_Gym_Text_GymStatue:: + .string "VIRIDIAN POKéMON GYM\n" + .string "LEADER: ?\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}$" + +ViridianCity_Gym_Text_GymStatuePlayerWon:: + .string "VIRIDIAN POKéMON GYM\n" + .string "LEADER: GIOVANNI\p" + .string "WINNING TRAINERS:\n" + .string "{RIVAL}, {PLAYER}$" + diff --git a/data/maps/ViridianCity_House/scripts.inc b/data/maps/ViridianCity_House/scripts.inc new file mode 100644 index 000000000000..defc4e0df3a6 --- /dev/null +++ b/data/maps/ViridianCity_House/scripts.inc @@ -0,0 +1,41 @@ +ViridianCity_House_MapScripts:: + .byte 0 + +ViridianCity_House_EventScript_BaldingMan:: + msgbox ViridianCity_House_Text_NicknamingIsFun, MSGBOX_NPC + end + +ViridianCity_House_EventScript_LittleGirl:: + msgbox ViridianCity_House_Text_MyDaddyLovesMonsToo, MSGBOX_NPC + end + +ViridianCity_House_EventScript_Speary:: + lock + faceplayer + waitse + playmoncry SPECIES_SPEAROW, CRY_MODE_NORMAL + msgbox ViridianCity_House_Text_Speary + waitmoncry + release + end + +ViridianCity_House_EventScript_NicknameSign:: + msgbox ViridianCity_House_Text_SpearowNameSpeary, MSGBOX_SIGN + end + +ViridianCity_House_Text_NicknamingIsFun:: + .string "Coming up with nicknames is fun,\n" + .string "but it's not so easy to do.\p" + .string "Clever names are nice, but simple\n" + .string "names are easier to remember.$" + +ViridianCity_House_Text_MyDaddyLovesMonsToo:: + .string "My daddy loves POKéMON, too.$" + +ViridianCity_House_Text_Speary:: + .string "SPEARY: Tetweet!$" + +ViridianCity_House_Text_SpearowNameSpeary:: + .string "SPEAROW\n" + .string "Name: SPEARY$" + diff --git a/data/maps/ViridianCity_Mart/scripts.inc b/data/maps/ViridianCity_Mart/scripts.inc new file mode 100644 index 000000000000..98e3b1401ade --- /dev/null +++ b/data/maps/ViridianCity_Mart/scripts.inc @@ -0,0 +1,111 @@ +ViridianCity_Mart_MapScripts:: + map_script MAP_SCRIPT_ON_LOAD, ViridianCity_Mart_OnLoad + map_script MAP_SCRIPT_ON_FRAME_TABLE, ViridianCity_Mart_OnFrame + .byte 0 + +ViridianCity_Mart_OnLoad:: + goto_if_unset FLAG_SYS_POKEDEX_GET, ViridianCity_Mart_EventScript_HideQuestionnaire + end + +ViridianCity_Mart_EventScript_HideQuestionnaire:: + setmetatile 1, 3, METATILE_Mart_CounterMid_Top, 1 + setmetatile 1, 4, METATILE_Mart_CounterMid_Bottom, 1 + end + +ViridianCity_Mart_OnFrame:: + map_script_2 VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 0, ViridianCity_Mart_EventScript_ParcelScene + .2byte 0 + +ViridianCity_Mart_EventScript_ParcelScene:: + lockall + textcolor NPC_TEXT_COLOR_MALE + applymovement LOCALID_VIRIDIAN_MART_CLERK, Common_Movement_WalkInPlaceFasterDown + waitmovement 0 + msgbox ViridianCity_Mart_Text_YouCameFromPallet + closemessage + applymovement LOCALID_VIRIDIAN_MART_CLERK, ViridianCity_Mart_Movement_FacePlayer + applymovement LOCALID_PLAYER, ViridianCity_Mart_Movement_ApproachCounter + waitmovement 0 + msgbox ViridianCity_Mart_Text_TakeThisToProfOak + setvar VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 1 + giveitem_msg ViridianCity_Mart_Text_ReceivedOaksParcelFromClerk, ITEM_OAKS_PARCEL, 1, MUS_RG_OBTAIN_KEY_ITEM + setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 5 + releaseall + end + +ViridianCity_Mart_Movement_ApproachCounter:: + walk_up + walk_up + walk_up + walk_up + walk_in_place_faster_left + step_end + +ViridianCity_Mart_Movement_FacePlayer:: + delay_16 + delay_16 + delay_16 + delay_16 + walk_in_place_faster_right + step_end + +ViridianCity_Mart_EventScript_Clerk:: + lock + faceplayer + goto_if_eq VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 1, ViridianCity_Mart_EventScript_SayHiToOak + message gText_HowMayIServeYou + waitmessage + pokemart ViridianCity_Mart_Items + msgbox gText_PleaseComeAgain + release + end + + .align 2 +ViridianCity_Mart_Items:: + .2byte ITEM_POKE_BALL + .2byte ITEM_POTION + .2byte ITEM_ANTIDOTE + .2byte ITEM_PARALYZE_HEAL + .2byte ITEM_NONE + release + end + +ViridianCity_Mart_EventScript_SayHiToOak:: + msgbox ViridianCity_Mart_Text_SayHiToOakForMe + release + end + +ViridianCity_Mart_EventScript_Woman:: + msgbox ViridianCity_Mart_Text_ShopDoesGoodBusinessInAntidotes, MSGBOX_NPC + end + +ViridianCity_Mart_EventScript_Youngster:: + msgbox ViridianCity_Mart_Text_GotToBuySomePotions, MSGBOX_NPC + end + +ViridianCity_Mart_Text_YouCameFromPallet:: + .string "Hey!\n" + .string "You came from PALLET TOWN?$" + +ViridianCity_Mart_Text_TakeThisToProfOak:: + .string "You know PROF. OAK, right?\p" + .string "His order came in.\n" + .string "Can I get you to take it to him?$" + +ViridianCity_Mart_Text_ReceivedOaksParcelFromClerk:: + .string "{PLAYER} received OAK'S PARCEL\n" + .string "from the POKéMON MART clerk.$" + +ViridianCity_Mart_Text_SayHiToOakForMe:: + .string "Okay, thanks! Please say hi to\n" + .string "PROF. OAK for me, too.$" + +ViridianCity_Mart_Text_ShopDoesGoodBusinessInAntidotes:: + .string "This shop does good business in\n" + .string "ANTIDOTES, I've heard.$" + +ViridianCity_Mart_Text_GotToBuySomePotions:: + .string "I've got to buy some POTIONS.\p" + .string "You never know when your POKéMON\n" + .string "will need quick healing.$" + diff --git a/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc b/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc new file mode 100644 index 000000000000..0663b74130c7 --- /dev/null +++ b/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc @@ -0,0 +1,46 @@ +ViridianCity_PokemonCenter_1F_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, ViridianCity_PokemonCenter_1F_OnTransition + map_script MAP_SCRIPT_ON_RESUME, CableClub_OnResume + .byte 0 + +ViridianCity_PokemonCenter_1F_OnTransition:: + setrespawn HEAL_LOCATION_VIRIDIAN_CITY + end + +ViridianCity_PokemonCenter_1F_EventScript_Nurse:: + lock + faceplayer + call Common_EventScript_PkmnCenterNurse + release + end + +ViridianCity_PokemonCenter_1F_EventScript_Boy:: + msgbox ViridianCity_PokemonCenter_1F_Text_PokeCenterInEveryTown, MSGBOX_NPC + end + +ViridianCity_PokemonCenter_1F_EventScript_Gentleman:: + msgbox ViridianCity_PokemonCenter_1F_Text_FeelFreeToUsePC, MSGBOX_NPC + end + +ViridianCity_PokemonCenter_1F_EventScript_Youngster:: + msgbox ViridianCity_PokemonCenter_1F_Text_PokeCentersHealMons, MSGBOX_NPC + end + +ViridianCity_PokemonCenter_1F_Text_FeelFreeToUsePC:: + .string "Please feel free to use that PC in\n" + .string "the corner.\p" + .string "The receptionist told me so.\n" + .string "It's so kind of her!$" + +ViridianCity_PokemonCenter_1F_Text_PokeCenterInEveryTown:: + .string "There's a POKéMON CENTER in every\n" + .string "town ahead.\p" + .string "They charge no money, so don't\n" + .string "be shy about healing POKéMON.$" + +ViridianCity_PokemonCenter_1F_Text_PokeCentersHealMons:: + .string "POKéMON CENTERS heal your tired,\n" + .string "hurt, or fainted POKéMON.\p" + .string "They make all POKéMON completely\n" + .string "healthy.$" + diff --git a/data/maps/ViridianCity_PokemonCenter_2F/scripts.inc b/data/maps/ViridianCity_PokemonCenter_2F/scripts.inc new file mode 100644 index 000000000000..a732914ca639 --- /dev/null +++ b/data/maps/ViridianCity_PokemonCenter_2F/scripts.inc @@ -0,0 +1,19 @@ +ViridianCity_PokemonCenter_2F_MapScripts:: + map_script MAP_SCRIPT_ON_FRAME_TABLE, CableClub_OnFrame + map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, CableClub_OnWarp + map_script MAP_SCRIPT_ON_LOAD, CableClub_OnLoad + map_script MAP_SCRIPT_ON_TRANSITION, CableClub_OnTransition + .byte 0 + +@ The below 3 are unused and leftover from RS +ViridianCity_PokemonCenter_2F_EventScript_Colosseum:: + call CableClub_EventScript_Colosseum + end + +ViridianCity_PokemonCenter_2F_EventScript_TradeCenter:: + call CableClub_EventScript_TradeCenter + end + +ViridianCity_PokemonCenter_2F_EventScript_RecordCorner:: + call CableClub_EventScript_RecordCorner + end diff --git a/data/maps/ViridianCity_School/scripts.inc b/data/maps/ViridianCity_School/scripts.inc new file mode 100644 index 000000000000..85265e1612b6 --- /dev/null +++ b/data/maps/ViridianCity_School/scripts.inc @@ -0,0 +1,188 @@ +ViridianCity_School_MapScripts:: + .byte 0 + +ViridianCity_School_EventScript_Lass:: + lock + faceplayer + msgbox ViridianCity_School_Text_TryingToMemorizeNotes + closemessage + applymovement LOCALID_SCHOOL_LASS, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + release + end + +ViridianCity_School_EventScript_Woman:: + lock + faceplayer + msgbox ViridianCity_School_Text_ReadBlackboardCarefully + closemessage + applymovement LOCALID_SCHOOL_WOMAN, Common_Movement_FaceOriginalDirection + waitmovement 0 + release + end + +ViridianCity_School_EventScript_Notebook:: + lockall + msgbox ViridianCity_School_Text_NotebookFirstPage + msgbox ViridianCity_School_Text_TurnThePage, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, ViridianCity_School_EventScript_StopReadingNotebook + msgbox ViridianCity_School_Text_NotebookSecondPage + msgbox ViridianCity_School_Text_TurnThePage, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, ViridianCity_School_EventScript_StopReadingNotebook + msgbox ViridianCity_School_Text_NotebookThirdPage + msgbox ViridianCity_School_Text_TurnThePage, MSGBOX_YESNO + goto_if_eq VAR_RESULT, NO, ViridianCity_School_EventScript_StopReadingNotebook + msgbox ViridianCity_School_Text_NotebookFourthPage + applymovement LOCALID_SCHOOL_LASS, Common_Movement_WalkInPlaceFasterUp + waitmovement 0 + textcolor NPC_TEXT_COLOR_FEMALE + msgbox ViridianCity_School_Text_HeyDontLookAtMyNotes + releaseall + end + +ViridianCity_School_EventScript_StopReadingNotebook:: + releaseall + end + +ViridianCity_School_EventScript_Blackboard:: + lockall + msgbox ViridianCity_School_Text_BlackboardListsStatusProblems + goto ViridianCity_School_EventScript_ChooseBlackboardTopic + end + +ViridianCity_School_EventScript_ChooseBlackboardTopic:: + message ViridianCity_School_Text_ReadWhichTopic + waitmessage + multichoicegrid 7, 1, MULTI_STATUS_INFO, 3, FALSE + switch VAR_RESULT + case 0, ViridianCity_School_EventScript_ReadSleep + case 1, ViridianCity_School_EventScript_ReadPoison + case 2, ViridianCity_School_EventScript_ReadParalysis + case 3, ViridianCity_School_EventScript_ReadBurn + case 4, ViridianCity_School_EventScript_ReadFreeze + case 5, ViridianCity_School_EventScript_ExitBlackboard + case 127, ViridianCity_School_EventScript_ExitBlackboard + end + +ViridianCity_School_EventScript_ReadSleep:: + msgbox ViridianCity_School_Text_ExplainSleep + goto ViridianCity_School_EventScript_ChooseBlackboardTopic + end + +ViridianCity_School_EventScript_ReadBurn:: + msgbox ViridianCity_School_Text_ExplainBurn + goto ViridianCity_School_EventScript_ChooseBlackboardTopic + end + +ViridianCity_School_EventScript_ReadPoison:: + msgbox ViridianCity_School_Text_ExplainPoison + goto ViridianCity_School_EventScript_ChooseBlackboardTopic + end + +ViridianCity_School_EventScript_ReadFreeze:: + msgbox ViridianCity_School_Text_ExplainFreeze + goto ViridianCity_School_EventScript_ChooseBlackboardTopic + end + +ViridianCity_School_EventScript_ReadParalysis:: + msgbox ViridianCity_School_Text_ExplainParalysis + goto ViridianCity_School_EventScript_ChooseBlackboardTopic + end + +ViridianCity_School_EventScript_ExitBlackboard:: + releaseall + end + +ViridianCity_School_Text_TryingToMemorizeNotes:: + .string "Whew! I'm trying to memorize all my\n" + .string "notes.$" + +ViridianCity_School_Text_ReadBlackboardCarefully:: + .string "Okay!\p" + .string "Be sure to read what's on the\n" + .string "blackboard carefully!$" + +ViridianCity_School_Text_NotebookFirstPage:: + .string "Let's check out the notebook.\p" + .string "First page…\p" + .string "POKé BALLS are used to catch\n" + .string "POKéMON.\p" + .string "Up to six POKéMON can be carried\n" + .string "in your party.\p" + .string "People who raise and battle\n" + .string "with POKéMON are called TRAINERS.$" + +ViridianCity_School_Text_NotebookSecondPage:: + .string "Second page…\p" + .string "A healthy POKéMON may be hard to\n" + .string "catch, so weaken it first.\p" + .string "Poison, burn, or cause another\n" + .string "status problem to weaken it.$" + +ViridianCity_School_Text_NotebookThirdPage:: + .string "Third page…\p" + .string "POKéMON TRAINERS seek others to\n" + .string "engage in POKéMON battles.\p" + .string "To TRAINERS, the taste of victory\n" + .string "is sweet, indeed.\p" + .string "Battles are constantly waged at\n" + .string "POKéMON GYMS everywhere.$" + +ViridianCity_School_Text_NotebookFourthPage:: + .string "Fourth page…\p" + .string "The ultimate goal for all POKéMON\n" + .string "TRAINERS is simple.\p" + .string "It is to defeat the top eight\n" + .string "POKéMON GYM LEADERS.\p" + .string "Do so to earn the right to face…\p" + .string "The ELITE FOUR of the POKéMON\n" + .string "LEAGUE!$" + +ViridianCity_School_Text_TurnThePage:: + .string "Turn the page?$" + +ViridianCity_School_Text_HeyDontLookAtMyNotes:: + .string "GIRL: Hey!\n" + .string "Don't look at my notes!$" + +ViridianCity_School_Text_BlackboardListsStatusProblems:: + .string "The blackboard lists POKéMON\n" + .string "STATUS problems during battles.$" + +ViridianCity_School_Text_ReadWhichTopic:: + .string "Which topic do you want to read?$" + +ViridianCity_School_Text_ExplainSleep:: + .string "A POKéMON can't attack if it's\n" + .string "asleep.\p" + .string "POKéMON will stay asleep even\n" + .string "after battles.\p" + .string "Use AWAKENING to awaken one\n" + .string "from sleep.$" + +ViridianCity_School_Text_ExplainBurn:: + .string "A burn reduces ATTACK power.\n" + .string "It also causes ongoing HP loss.\p" + .string "A burn remains after a battle.\n" + .string "Use BURN HEAL to cure a burn.$" + +ViridianCity_School_Text_ExplainPoison:: + .string "When poisoned, a POKéMON's health\n" + .string "steadily drops.\p" + .string "Poison lingers after battles.\n" + .string "Use an ANTIDOTE to cure poison!$" + +ViridianCity_School_Text_ExplainFreeze:: + .string "A frozen POKéMON becomes\n" + .string "helplessly immobile.\p" + .string "It stays frozen even after the\n" + .string "battle ends.\p" + .string "Use ICE HEAL to thaw out the\n" + .string "suffering POKéMON.$" + +ViridianCity_School_Text_ExplainParalysis:: + .string "Paralysis reduces SPEED and may\n" + .string "prevent the POKéMON from moving.\p" + .string "Paralysis remains after battles.\n" + .string "Use PARLYZ HEAL for treatment.$" + diff --git a/data/maps/ViridianForest/scripts.inc b/data/maps/ViridianForest/scripts.inc new file mode 100644 index 000000000000..4c8f6e7abb9a --- /dev/null +++ b/data/maps/ViridianForest/scripts.inc @@ -0,0 +1,170 @@ +ViridianForest_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, ViridianForest_OnTransition + .byte 0 + +ViridianForest_OnTransition:: + setworldmapflag FLAG_WORLD_MAP_VIRIDIAN_FOREST + end + +ViridianForest_EventScript_Youngster:: + msgbox ViridianForest_Text_FriendsItchingToBattle, MSGBOX_NPC + end + +ViridianForest_EventScript_Boy:: + msgbox ViridianForest_Text_RanOutOfPokeBalls, MSGBOX_NPC + end + +ViridianForest_EventScript_TrainerTips1:: + msgbox ViridianForest_Text_AvoidGrassyAreasWhenWeak, MSGBOX_SIGN + end + +ViridianForest_EventScript_TrainerTips2:: + msgbox ViridianForest_Text_UseAntidoteForPoison, MSGBOX_SIGN + end + +ViridianForest_EventScript_TrainerTips3:: + msgbox ViridianForest_Text_ContactOakViaPCToRatePokedex, MSGBOX_SIGN + end + +ViridianForest_EventScript_TrainerTips4:: + msgbox ViridianForest_Text_CantCatchOwnedMons, MSGBOX_SIGN + end + +ViridianForest_EventScript_TrainerTips5:: + msgbox ViridianForest_Text_WeakenMonsBeforeCapture, MSGBOX_SIGN + end + +ViridianForest_EventScript_ExitSign:: + msgbox ViridianForest_Text_LeavingViridianForest, MSGBOX_SIGN + end + +ViridianForest_EventScript_Rick:: + trainerbattle_single TRAINER_BUG_CATCHER_RICK, ViridianForest_Text_RickIntro, ViridianForest_Text_RickDefeat + msgbox ViridianForest_Text_RickPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianForest_EventScript_Doug:: + trainerbattle_single TRAINER_BUG_CATCHER_DOUG, ViridianForest_Text_DougIntro, ViridianForest_Text_DougDefeat + msgbox ViridianForest_Text_DougPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianForest_EventScript_Sammy:: + trainerbattle_single TRAINER_BUG_CATCHER_SAMMY, ViridianForest_Text_SammyIntro, ViridianForest_Text_SammyDefeat + msgbox ViridianForest_Text_SammyPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianForest_EventScript_Anthony:: + trainerbattle_single TRAINER_BUG_CATCHER_ANTHONY, ViridianForest_Text_AnthonyIntro, ViridianForest_Text_AnthonyDefeat + msgbox ViridianForest_Text_AnthonyPostBattle, MSGBOX_AUTOCLOSE + end + +ViridianForest_EventScript_Charlie:: + trainerbattle_single TRAINER_BUG_CATCHER_CHARLIE, ViridianForest_Text_CharlieIntro, ViridianForest_Text_CharlieDefeat + msgbox ViridianForest_Text_CharliePostBattle, MSGBOX_AUTOCLOSE + end + +ViridianForest_Text_FriendsItchingToBattle:: + .string "I came here with some friends to\n" + .string "catch us some BUG POKéMON!\p" + .string "They're all itching to get into\n" + .string "some POKéMON battles!$" + +ViridianForest_Text_RickIntro:: + .string "Hey! You have POKéMON!\n" + .string "Come on!\l" + .string "Let's battle 'em!$" + +ViridianForest_Text_RickDefeat:: + .string "No!\nCATERPIE can't hack it!$" + +ViridianForest_Text_RickPostBattle:: + .string "Ssh! You'll scare the bugs away.\n" + .string "Another time, okay?$" + +ViridianForest_Text_DougIntro:: + .string "Yo!\n" + .string "You can't jam out if you're a\l" + .string "POKéMON TRAINER!$" + +ViridianForest_Text_DougDefeat:: + .string "Huh?\n" + .string "I ran out of POKéMON!$" + +ViridianForest_Text_DougPostBattle:: + .string "That totally stinks! I'm going to\n" + .string "catch some stronger ones!$" + +ViridianForest_Text_SammyIntro:: + .string "Hey, wait up!\n" + .string "What's the hurry? Why the rush?$" + +ViridianForest_Text_SammyDefeat:: + .string "I give!\n" + .string "You're good at this!$" + +ViridianForest_Text_SammyPostBattle:: + .string "Sometimes, you can find stuff on\n" + .string "the ground.\p" + .string "I'm looking for the stuff I\n" + .string "dropped. Can you help me?$" + +ViridianForest_Text_AnthonyIntro:: + .string "I might be little, but I won't like\n" + .string "it if you go easy on me!$" + +ViridianForest_Text_AnthonyDefeat:: + .string "Oh, boo.\n" + .string "Nothing went right.$" + +ViridianForest_Text_AnthonyPostBattle:: + .string "I lost some of my allowance…$" + +ViridianForest_Text_CharlieIntro:: + .string "Did you know that POKéMON evolve?$" + +ViridianForest_Text_CharlieDefeat:: + .string "Oh!\n" + .string "I lost!$" + +ViridianForest_Text_CharliePostBattle:: + .string "BUG POKéMON evolve quickly.\n" + .string "They're a lot of fun!$" + +ViridianForest_Text_RanOutOfPokeBalls:: + .string "I was throwing POKé BALLS to\n" + .string "catch POKéMON, and I ran out.\p" + .string "That's why you can never have too\n" + .string "many POKé BALLS.$" + +ViridianForest_Text_AvoidGrassyAreasWhenWeak:: + .string "TRAINER TIPS\p" + .string "If your POKéMON are weak and you\n" + .string "want to avoid battles, stay away\l" + .string "from grassy areas!$" + +ViridianForest_Text_UseAntidoteForPoison:: + .string "For poison, use ANTIDOTE!\n" + .string "Get it at POKéMON MARTS!$" + +ViridianForest_Text_ContactOakViaPCToRatePokedex:: + .string "TRAINER TIPS\p" + .string "Contact PROF. OAK via a PC to\n" + .string "get your POKéDEX evaluated!$" + +ViridianForest_Text_CantCatchOwnedMons:: + .string "TRAINER TIPS\p" + .string "You can't catch a POKéMON that\n" + .string "belongs to someone else.\p" + .string "Throw POKé BALLS only at wild\n" + .string "POKéMON to catch them!$" + +ViridianForest_Text_WeakenMonsBeforeCapture:: + .string "TRAINER TIPS\p" + .string "Weaken POKéMON before attempting\n" + .string "capture!\p" + .string "When healthy, they may escape!$" + +ViridianForest_Text_LeavingViridianForest:: + .string "LEAVING VIRIDIAN FOREST\n" + .string "PEWTER CITY AHEAD$" + diff --git a/data/text/braille.inc b/data/text/braille.inc index 4518c5769dd3..a8a549312ec9 100644 --- a/data/text/braille.inc +++ b/data/text/braille.inc @@ -115,3 +115,161 @@ AncientTomb_Braille_ShineInTheMiddle: .braille "INHERIT OUR\n" .braille "WILL, SHINE\n" .braille "IN THE MIDDLE.$" + +@ FRLG +Braille_Text_Up:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "UP$" + +Braille_Text_Down:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "DOWN$" + +Braille_Text_Right:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "RIGHT$" + +Braille_Text_Left:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "LEFT$" + +Braille_Text_Cut:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "CUT$" + +Braille_Text_ABC:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "ABC$" + +Braille_Text_GHI:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "GHI$" + +Braille_Text_MNO:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "MNO$" + +Braille_Text_TUV:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "TUV$" + +Braille_Text_DEF:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "DEF$" + +Braille_Text_JKL:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "JKL$" + +Braille_Text_PQRS:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "PQRS$" + +Braille_Text_WXYZ:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "WXYZ$" + +Braille_Text_Period:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille ".$" + +Braille_Text_Comma:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille ",$" + +Braille_Text_Everything:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "EVERYTHING$" + +Braille_Text_HasMeaning1:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "HAS MEANING$" + +Braille_Text_Existence:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "EXISTENCE$" + +Braille_Text_HasMeaning2:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "HAS MEANING$" + +Braille_Text_BeingAlive:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "BEING ALIVE$" + +Braille_Text_HasMeaning3:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "HAS MEANING$" + +Braille_Text_HaveDreams:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "HAVE DREAMS$" + +Braille_Text_UsePower:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "USE POWER.$" + +Braille_Text_LetTheTwo:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "LET THE TWO$" + +Braille_Text_Glittering:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "GLITTERING$" + +Braille_Text_Stones:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "STONES$" + +Braille_Text_OneInRed:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "ONE IN RED$" + +Braille_Text_OneInBlue:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "ONE IN BLUE$" + +Braille_Text_ConnectThe:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "CONNECT THE$" + +Braille_Text_Past:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "PAST.$" + +Braille_Text_TwoFriends:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "TWO FRIENDS$" + +Braille_Text_Sharing:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "SHARING$" + +Braille_Text_PowerOpen:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "POWER OPEN$" + +Braille_Text_AWindowTo:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "A WINDOW TO$" + +Braille_Text_ANewWorld:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "A NEW WORLD$" + +Braille_Text_ThatGlows:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "THAT GLOWS.$" + +Braille_Text_TheNext:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "THE NEXT$" + +Braille_Text_WorldWaits:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "WORLD WAITS$" + +Braille_Text_ForYou:: + brailleformat 3, 0, 25, 19, 6, 3 + .braille "FOR YOU.$" + diff --git a/data/text/day_care_frlg.inc b/data/text/day_care_frlg.inc new file mode 100644 index 000000000000..3de4f4fe3d47 --- /dev/null +++ b/data/text/day_care_frlg.inc @@ -0,0 +1,130 @@ +@ Same as Hoenn's day-care text, used by the Four Island Day-Care. Unused text translated in Emerald + +DayCare_Text_ImDaycareManSpeakToMyWife:: + .string "I'm the DAY-CARE MAN.\p" + .string "I help take care of the precious\n" + .string "POKéMON of TRAINERS.\p" + .string "If you'd like me to raise your\n" + .string "POKéMON, have a word with my wife.$" + +DayCare_Text_DoYouWantEgg:: + .string "Ah, it's you!\p" + .string "We were raising your POKéMON, and\n" + .string "my goodness, were we surprised!\p" + .string "Your POKéMON had an EGG!\p" + .string "We don't know how it got there,\n" + .string "but your POKéMON had it.\p" + .string "You do want it, yes?$" + +DayCare_Text_YourMonIsDoingFine:: + .string "Ah, it's you! Good to see you.\n" + .string "Your {STR_VAR_1}'s doing fine.$" + +DayCare_Text_IllKeepIt:: + .string "Well then, I'll keep it.\n" + .string "Thanks!$" + +DayCare_Text_YouHaveNoRoomForIt:: + .string "You have no room for it…\n" + .string "Come back when you've made room.$" + +DayCare_Text_ReceivedEgg:: + .string "{PLAYER} received the EGG from\n" + .string "the DAY-CARE MAN.$" + +DayCare_Text_TakeGoodCareOfIt:: + .string "Take good care of it.$" + +DayCare_Text_SeeWifeIfYouWantToPickUpMon:: + .string "ポケモンを ひきとりたい ときは\n" + .string "ばさんに いって おくれ$" + +DayCare_Text_YourMonsAreDoingFine:: + .string "Ah, it's you! Your {STR_VAR_1} and\n" + .string "{STR_VAR_2} are doing fine.$" + +DayCare_Text_IWillKeepDoYouWantIt:: + .string "I really will keep it.\n" + .string "You do want this, yes?$" + +DayCare_Text_WouldYouLikeUsToRaiseMon:: + .string "I'm the DAY-CARE LADY.\p" + .string "We can raise POKéMON for you.\p" + .string "Would you like us to raise one?$" + +DayCare_Text_WhichMonShouldWeRaise:: + .string "Which POKéMON should we raise for\n" + .string "you?$" + +DayCare_Text_WellRaiseYourMon:: + .string "Fine, we'll raise your {STR_VAR_1}\n" + .string "for a while.\p" + .string "Come back for it later.$" + +DayCare_Text_WeCanRaiseOneMore:: + .string "We can raise two of your POKéMON.\p" + .string "Would you like us to raise one\n" + .string "more POKéMON for you?$" + +DayCare_Text_HusbandWasLookingForYou:: + .string "My husband was looking for you.$" + +DayCare_Text_FineThenComeAgain:: + .string "Oh, fine, then.\n" + .string "Come again.$" + +DayCare_Text_NotEnoughMoney:: + .string "You don't have enough money…$" + +DayCare_Text_TakeOtherOneBackToo:: + .string "Will you take back the other one,\n" + .string "too?$" + +DayCare_Text_ComeAgain:: + .string "Fine.\n" + .string "Come again.$" + +DayCare_Text_GoodToSeeYou:: + .string "Ah, it's you!\n" + .string "Good to see you.\p" + .string "Your POKéMON can only be doing\n" + .string "good!$" + +DayCare_Text_YourMonHasGrownXLevels:: + .string "By level, your {STR_VAR_1} has\n" + .string "grown by {STR_VAR_2}.$" + +DayCare_Text_YourPartyIsFull:: + .string "Your POKéMON party is full.\n" + .string "Make room, then come see me.$" + +DayCare_Text_TakeBackWhichMon:: + .string "どっちの ポケモンを ひきとるかい?$" + +DayCare_Text_ItWillCostX:: + .string "If you want your {STR_VAR_1} back,\n" + .string "it will cost ¥{STR_VAR_2}.$" + +DayCare_Text_HeresYourMon:: + .string "Perfect!\n" + .string "Here's your POKéMON.$" + +DayCare_Text_TookBackMon:: + .string "{PLAYER} took back {STR_VAR_1} from\n" + .string "the DAY-CARE LADY.$" + +DayCare_Text_YouHaveJustOneMon:: + .string "Oh? But you have just one\n" + .string "POKéMON.\p" + .string "Come back another time.$" + +DayCare_Text_TakeYourMonBack:: + .string "Will you take your POKéMON back?$" + +DayCare_Text_WhatWillYouBattleWith:: + .string "If you leave me that POKéMON,\n" + .string "what will you battle with?\p" + .string "Come back another time.$" + +DayCare_Text_Huh:: + .string "Huh?$" diff --git a/data/text/fame_checker.inc b/data/text/fame_checker.inc new file mode 100644 index 000000000000..b4d52b2082bc --- /dev/null +++ b/data/text/fame_checker.inc @@ -0,0 +1,1487 @@ +gFameCheckerFlavorText_ProfOak0:: @ 0x81AD106 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}OAK POKéMON RESEARCH LAB$" + +gFameCheckerFlavorText_ProfOak1:: @ 0x81AD145 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}To make a complete guide on all\n" + .string "the POKéMON in the world…\p" + .string "That was my dream!$" + +gFameCheckerFlavorText_ProfOak2:: @ 0x81AD1BB + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PROF. OAK may not look like much,\n" + .string "but he's the authority on POKéMON.\p" + .string "Many POKéMON TRAINERS hold him in\n" + .string "high regard.$" + +gFameCheckerFlavorText_ProfOak3:: @ 0x81AD258 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PROF. OAK reportedly lives with his\n" + .string "grandchildren, DAISY and {RIVAL}.$" + +gFameCheckerFlavorText_ProfOak4:: @ 0x81AD2B9 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear OAK's taken a lot of\n" + .string "interest in you, child.\p" + .string "That old duff was once tough and\n" + .string "handsome.\p" + .string "But that was decades ago.\n" + .string "He's a shadow of his former self.$" + +gFameCheckerFlavorText_ProfOak5:: @ 0x81AD377 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PROF. OAK is going to have his own\n" + .string "radio show soon.\p" + .string "The program will be called PROF.\n" + .string "OAK'S POKéMON SEMINAR.$" + +gFameCheckerFlavorText_Daisy0:: @ 0x81AD40C + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}If you show DAISY your POKéMON,\n" + .string "she can tell how much it likes you.\p" + .string "Occasionally, she will even groom\n" + .string "a POKéMON for you.$" + +gFameCheckerFlavorText_Daisy1:: @ 0x81AD4AE + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}But the person who is most liked by\n" + .string "POKéMON is DAISY, I think.$" + +gFameCheckerFlavorText_Daisy2:: @ 0x81AD516 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}She was gently grooming POKéMON…\n" + .string "She was a little angel.\p" + .string "That little girl's name…\n" + .string "I think it was DAISY.$" + +gFameCheckerFlavorText_Daisy3:: @ 0x81AD5A7 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PROF. OAK reportedly lives with his\n" + .string "grandchildren, DAISY and {RIVAL}.$" + +gFameCheckerFlavorText_Daisy4:: @ 0x81AD608 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}A girl from PALLET TOWN, DAISY,\n" + .string "she enjoys TEA every day.\p" + .string "She visits the CELADON DEPT. STORE\n" + .string "to buy some TEA.$" + +gFameCheckerFlavorText_Daisy5:: @ 0x81AD69F + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The Spring POKéMON CONTEST's\n" + .string "Grand Champion is DAISY OAK of\l" + .string "PALLET TOWN!$" + +gFameCheckerFlavorText_Brock0:: @ 0x81AD705 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}PEWTER CITY POKéMON GYM\n" + .string "LEADER: BROCK\l" + .string "The Rock-Solid POKéMON TRAINER!$" + +gFameCheckerFlavorText_Brock1:: @ 0x81AD771 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My rock-hard willpower is evident\n" + .string "in even my POKéMON.\p" + .string "My POKéMON are all rock hard and\n" + .string "have true-grit determination.\p" + .string "That's right - my POKéMON are all\n" + .string "the ROCK type!$" + +gFameCheckerFlavorText_Brock2:: @ 0x81AD840 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}There aren't many serious POKéMON\n" + .string "TRAINERS here.\p" + .string "They're all like BUG CATCHERS,\n" + .string "you know, just hobbyists.\p" + .string "But PEWTER GYM's BROCK isn't like\n" + .string "that, not one bit.$" + +gFameCheckerFlavorText_Brock3:: @ 0x81AD908 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BROCK is cool. He's not just tough.\n" + .string "People like and respect him.\p" + .string "I want to become a GYM LEADER\n" + .string "like him.$" + +gFameCheckerFlavorText_Brock4:: @ 0x81AD99A + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hi, I'm excavating for fossils here\n" + .string "under MT. MOON.\p" + .string "Sometimes, BROCK of PEWTER GYM\n" + .string "lends me a hand.$" + +gFameCheckerFlavorText_Brock5:: @ 0x81ADA27 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BROCK rarely laughs, but is said to\n" + .string "be unable to stop if he starts.$" + +gFameCheckerFlavorText_Misty0:: @ 0x81ADA91 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}CERULEAN CITY POKéMON GYM\n" + .string "LEADER: MISTY\l" + .string "The Tomboyish Mermaid!$" + +gFameCheckerFlavorText_Misty1:: @ 0x81ADAF6 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My policy is an all-out offensive\n" + .string "with WATER-type POKéMON!$" + +gFameCheckerFlavorText_Misty2:: @ 0x81ADB5A + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}MISTY is a TRAINER who's going to\n" + .string "keep improving.\p" + .string "She won't lose to someone like you!$" + +gFameCheckerFlavorText_Misty3:: @ 0x81ADBD9 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Strong TRAINERS and WATER POKéMON\n" + .string "are common sights in these parts.\p" + .string "They say that MISTY of the\n" + .string "CERULEAN GYM trains here.$" + +gFameCheckerFlavorText_Misty4:: @ 0x81ADC72 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}This cape is a famous date spot.\p" + .string "MISTY, the GYM LEADER, has high\n" + .string "hopes about this place.$" + +gFameCheckerFlavorText_Misty5:: @ 0x81ADCEB + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}MISTY is said to worship LORELEI\n" + .string "of the ELITE FOUR.$" + +gFameCheckerFlavorText_LtSurge0:: @ 0x81ADD3C + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}VERMILION CITY POKéMON GYM\n" + .string "LEADER: LT. SURGE\l" + .string "The Lightning American!$" + +gFameCheckerFlavorText_LtSurge1:: @ 0x81ADDA7 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I tell you, kid, electric POKéMON\n" + .string "saved me during the war!$" + +gFameCheckerFlavorText_LtSurge2:: @ 0x81ADE0B + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}When I was in the Army, LT. SURGE\n" + .string "was my strict CO.\p" + .string "He was a hard taskmaster.$" + +gFameCheckerFlavorText_LtSurge3:: @ 0x81ADE82 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}LT. SURGE was always famous for\n" + .string "his cautious nature in the Army.$" + +gFameCheckerFlavorText_LtSurge4:: @ 0x81ADEEC + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}LT. SURGE installed the traps in\n" + .string "the GYM himself.\p" + .string "He set up double locks everywhere.$" + +gFameCheckerFlavorText_LtSurge5:: @ 0x81ADF6A + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}LT. SURGE is rumored to have been\n" + .string "a pilot while home in America.\p" + .string "He used the electricity generated\n" + .string "by POKéMON to power his plane.$" + +gFameCheckerFlavorText_Erika0:: @ 0x81AE009 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}CELADON CITY POKéMON GYM\n" + .string "LEADER: ERIKA\l" + .string "The Nature-Loving Princess!$" + +gFameCheckerFlavorText_Erika1:: @ 0x81AE072 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am a student of the art of\n" + .string "flower arranging.\p" + .string "My POKéMON are solely of the\n" + .string "GRASS type.$" + +gFameCheckerFlavorText_Erika2:: @ 0x81AE0F3 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Our LEADER ERIKA might be quiet,\n" + .string "but she's famous around here.$" + +gFameCheckerFlavorText_Erika3:: @ 0x81AE15B + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We only use GRASS-type POKéMON at\n" + .string "our GYM.\p" + .string "Why? We also use them for making\n" + .string "flower arrangements!$" + +gFameCheckerFlavorText_Erika4:: @ 0x81AE1E5 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I would never collect POKéMON if\n" + .string "they were unattractive.$" + +gFameCheckerFlavorText_Erika5:: @ 0x81AE247 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Rumor has it that if you peek into\n" + .string "CELADON GYM, you can often\l" + .string "see ERIKA snoozing.$" + +gFameCheckerFlavorText_Koga0:: @ 0x81AE2B6 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}FUCHSIA CITY POKéMON GYM\n" + .string "LEADER: KOGA\l" + .string "The Poisonous Ninja Master$" + +gFameCheckerFlavorText_Koga1:: @ 0x81AE31D + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Despair to the creeping horror of\n" + .string "POISON-type POKéMON!$" + +gFameCheckerFlavorText_Koga2:: @ 0x81AE37D + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Even though I've lost, I will keep\n" + .string "training according to the teachings\l" + .string "of KOGA, my ninja master.$" + +gFameCheckerFlavorText_Koga3:: @ 0x81AE407 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My father is the GYM LEADER of\n" + .string "this town.\p" + .string "I'm training to use POISON POKéMON\n" + .string "as well as my father.$" + +gFameCheckerFlavorText_Koga4:: @ 0x81AE48D + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}KOGA is said to have a thorough\n" + .string "knowledge of medicine.\p" + .string "He even concocts medicine to nurse\n" + .string "his POKéMON to health.$" + +gFameCheckerFlavorText_Koga5:: @ 0x81AE51B + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The SAFARI ZONE's huge, wouldn't\n" + .string "you say?\p" + .string "FUCHSIA's GYM LEADER, KOGA, \n" + .string "patrols the grounds every so often.\p" + .string "Thanks to him, we can play here\n" + .string "knowing that we're safe.$" + +gFameCheckerFlavorText_Sabrina0:: @ 0x81AE5E8 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}SAFFRON CITY POKéMON GYM\n" + .string "LEADER: SABRINA\l" + .string "The Master of PSYCHIC POKéMON!$" + +gFameCheckerFlavorText_Sabrina1:: @ 0x81AE656 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You know about a girl GYM LEADER\n" + .string "in SAFFRON CITY?\p" + .string "She uses PSYCHIC-type POKéMON,\n" + .string "right?$" + +gFameCheckerFlavorText_Sabrina2:: @ 0x81AE6D7 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I have had psychic powers since\n" + .string "I was a child.\p" + .string "It started when a spoon I\n" + .string "carelessly tossed, bent.$" + +gFameCheckerFlavorText_Sabrina3:: @ 0x81AE762 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I dislike battling, but if you wish,\n" + .string "I will show you my powers!$" + +gFameCheckerFlavorText_Sabrina4:: @ 0x81AE7CB + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}People say that SABRINA can\n" + .string "communicate with her POKéMON\l" + .string "during battle without speaking.$" + +gFameCheckerFlavorText_Sabrina5:: @ 0x81AE841 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}SABRINA just wiped out the KARATE\n" + .string "MASTER next door.$" + +gFameCheckerFlavorText_Blaine0:: @ 0x81AE89E + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}CINNABAR ISLAND POKéMON GYM\n" + .string "LEADER: BLAINE\l" + .string "The Hotheaded Quiz Master!$" + +gFameCheckerFlavorText_Blaine1:: @ 0x81AE90A + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My fiery POKéMON are all rough\n" + .string "and ready with intense heat!\p" + .string "They incinerate all challengers!$" + +gFameCheckerFlavorText_Blaine2:: @ 0x81AE990 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Our LEADER, BLAINE, became lost\n" + .string "in the mountains but good.\p" + .string "Night fell when a fiery bird\n" + .string "POKéMON appeared.\p" + .string "Its light allowed BLAINE to find\n" + .string "his way down safely.$" + +gFameCheckerFlavorText_Blaine3:: @ 0x81AEA59 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}CINNABAR GYM's BLAINE is quite the\n" + .string "odd fellow.\p" + .string "He's lived on the island since way\n" + .string "before the LAB was built.$" + +gFameCheckerFlavorText_Blaine4:: @ 0x81AEAEE + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}It's a photo of BLAINE and\n" + .string "MR. FUJI.\p" + .string "They're standing shoulder to\n" + .string "shoulder with big grins.$" + +gFameCheckerFlavorText_Blaine5:: @ 0x81AEB69 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BLAINE is said to remove his dark\n" + .string "shades only when he is thinking up\l" + .string "new quiz questions.$" + +gFameCheckerFlavorText_Lorelei0:: @ 0x81AEBDF + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am LORELEI of the ELITE FOUR.$" + +gFameCheckerFlavorText_Lorelei1:: @ 0x81AEC28 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}No one can best me when it comes\n" + .string "to icy POKéMON.$" + +gFameCheckerFlavorText_Lorelei2:: @ 0x81AEC82 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Where was this person born?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We've had a great and powerful\n" + .string "TRAINER grow up on this island.\p" + .string "I bet even you'd know her.\n" + .string "It's LORELEI of the ELITE FOUR!$" + +gFameCheckerFlavorText_Lorelei3:: @ 0x81AED27 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Known for her logical, calculated,\n" + .string "and cool battling style, LORELEI\l" + .string "has a surprising secret!$" + +gFameCheckerFlavorText_Lorelei4:: @ 0x81AEDAA + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Did you know that LORELEI has lots\n" + .string "and lots of stuffed dolls?\p" + .string "Every time she comes back to\n" + .string "FOUR ISLAND, her collection grows!$" + +gFameCheckerFlavorText_Lorelei5:: @ 0x81AEE51 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The LAPRAS she has, I imagine it\n" + .string "to be the one she met as a child.\p" + .string "I believe it was in ICEFALL CAVE\n" + .string "that she caught it.\p" + .string "Perhaps that POKéMON has been with\n" + .string "her ever since.$" + +gFameCheckerFlavorText_Bruno0:: @ 0x81AEF25 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am BRUNO of the ELITE FOUR!$" + +gFameCheckerFlavorText_Bruno1:: @ 0x81AEF6C + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I've lived and trained with my\n" + .string "fighting POKéMON!$" + +gFameCheckerFlavorText_Bruno2:: @ 0x81AEFC6 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BRUNO apparently joined the ELITE\n" + .string "FOUR out of his burning ambition to\l" + .string "battle the best TRAINERS.$" + +gFameCheckerFlavorText_Bruno3:: @ 0x81AF04C + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BRUNO, who's a senior ahead of me,\n" + .string "visits the SPA on occasion.\p" + .string "He comes to rehab injuries, both\n" + .string "his own and his POKéMON's.$" + +gFameCheckerFlavorText_Bruno4:: @ 0x81AF0F0 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's one of the ELITE FOUR.\n" + .string "His name is BRUNO.\p" + .string "He went away disappointed when he\n" + .string "found out that they were all sold\l" + .string "out of Rage Candybars.$" + +gFameCheckerFlavorText_Bruno5:: @ 0x81AF19A + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Even BRUNO…\n" + .string "He trained with a fellow by the\l" + .string "name of BRAWLY before.$" + +gFameCheckerFlavorText_Agatha0:: @ 0x81AF200 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am AGATHA of the ELITE FOUR.$" + +gFameCheckerFlavorText_Agatha1:: @ 0x81AF248 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}AGATHA's GHOST-type POKéMON are\n" + .string "horrifically terrifying in toughness.$" + +gFameCheckerFlavorText_Agatha2:: @ 0x81AF2B7 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}That old lady's also got a really\n" + .string "short fuse, too.\p" + .string "It doesn't take anything to get\n" + .string "that scary lady hollering.$" + +gFameCheckerFlavorText_Agatha3:: @ 0x81AF34E + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}In her youth, AGATHA and PROF.\n" + .string "OAK were rivals who vied for\l" + .string "supremacy as TRAINERS.$" + +gFameCheckerFlavorText_Agatha4:: @ 0x81AF3BE + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear OAK's taken a lot of\n" + .string "interest in you, child.\p" + .string "That old duff was once tough and\n" + .string "handsome.\p" + .string "But that was decades ago.\n" + .string "He's a shadow of his former self.$" + +gFameCheckerFlavorText_Agatha5:: @ 0x81AF47C + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Take AGATHA, for example.\p" + .string "She set a record for being the\n" + .string "oldest-ever ELITE FOUR member.$" + +gFameCheckerFlavorText_Lance0:: @ 0x81AF4FD + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I lead the ELITE FOUR.\p" + .string "You can call me LANCE the dragon\n" + .string "TRAINER.$" + +gFameCheckerFlavorText_Lance1:: @ 0x81AF567 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You know that dragons are\n" + .string "mythical POKéMON.\p" + .string "They're hard to catch and raise,\n" + .string "but their powers are superior.\p" + .string "They're virtually indestructible.\n" + .string "There's no being clever with them.$" + +gFameCheckerFlavorText_Lance2:: @ 0x81AF641 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He stands for justice!\n" + .string "He's cool, and yet passionate!\l" + .string "He's the greatest, LANCE!$" + +gFameCheckerFlavorText_Lance3:: @ 0x81AF6BA + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}We have a customer, LANCE, who\n" + .string "occasionally comes.\p" + .string "He always buys capes.\p" + .string "I wonder… Does he have many\n" + .string "identical capes at home?$" + +gFameCheckerFlavorText_Lance4:: @ 0x81AF758 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}LANCE's grandfather is thought to\n" + .string "be the elder of a famous clan of\l" + .string "dragon masters.$" + +gFameCheckerFlavorText_Lance5:: @ 0x81AF7CB + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}From what I've heard, LANCE has\n" + .string "a cousin who's a GYM LEADER\l" + .string "somewhere far away.$" + +gFameCheckerFlavorText_Bill0:: @ 0x81AF83E + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}After all, BILL's world-famous as a\n" + .string "POKéMANIAC.\p" + .string "He invented the POKéMON Storage\n" + .string "System on PC, too.$" + +gFameCheckerFlavorText_Bill1:: @ 0x81AF8CA + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL has lots of POKéMON!\n" + .string "He collects rare ones, too!$" + +gFameCheckerFlavorText_Bill2:: @ 0x81AF929 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's my grandson!\p" + .string "He always liked collecting things,\n" + .string "even as a child!$" + +gFameCheckerFlavorText_Bill3:: @ 0x81AF998 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL is a POKéMANIAC, so he loves\n" + .string "every kind.\p" + .string "Apparently, the first one he caught\n" + .string "was an ABRA.$" + +gFameCheckerFlavorText_Bill4:: @ 0x81AFA20 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}BILL's hometown is GOLDENROD CITY,\n" + .string "where his folks still live.\p" + .string "I've heard that it's quite the\n" + .string "festive, bustling city.$" + +gFameCheckerFlavorText_Bill5:: @ 0x81AFAB9 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Apparently, BILL simply can't\n" + .string "stomach milk at all.$" + +gFameCheckerFlavorText_MrFuji0:: @ 0x81AFB0C + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}He's really kind.\p" + .string "He looks after abandoned and\n" + .string "orphaned POKéMON.$" + +gFameCheckerFlavorText_MrFuji1:: @ 0x81AFB76 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}This old guy marched right up to\n" + .string "our HIDEOUT.\p" + .string "Then, he starts ranting about how\n" + .string "TEAM ROCKET's abusing POKéMON.\p" + .string "So, we're just talking it over as\n" + .string "adults.$" + +gFameCheckerFlavorText_MrFuji2:: @ 0x81AFC38 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}POKéMON FAN MAGAZINE\n" + .string "Monthly Grand Prize Drawing!\p" + .string "The application form is…\p" + .string "Gone! It's been clipped out.\n" + .string "Someone must have applied already.$" + +gFameCheckerFlavorText_MrFuji3:: @ 0x81AFCE9 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}There's a rumor…\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I hear that MR. FUJI's not from\n" + .string "these parts originally, either.$" + +gFameCheckerFlavorText_MrFuji4:: @ 0x81AFD49 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}It's a photo of BLAINE and\n" + .string "MR. FUJI.\p" + .string "They're standing shoulder to\n" + .string "shoulder with big grins.$" + +gFameCheckerFlavorText_MrFuji5:: @ 0x81AFDC4 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Editor: The shy MR. FUJI turned\n" + .string "down our interview requests.\p" + .string "He is a kindly man who is adored\n" + .string "and respected in LAVENDER TOWN.$" + +gFameCheckerFlavorText_Giovanni0:: @ 0x81AFE68 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}TEAM ROCKET captures POKéMON from\n" + .string "around the world.\p" + .string "They're important tools for keeping\n" + .string "our criminal enterprise going.\p" + .string "I am the leader, GIOVANNI!$" + +gFameCheckerFlavorText_Giovanni1:: @ 0x81AFF23 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Favorite kind of POKéMON?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Those thugs that took over our\n" + .string "building…\p" + .string "Their BOSS said he was looking for\n" + .string "strong POKéMON.$" + +gFameCheckerFlavorText_Giovanni2:: @ 0x81AFFA8 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What is this person like?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}TEAM ROCKET's BOSS is terribly\n" + .string "cruel!\p" + .string "To him, POKéMON are just tools to\n" + .string "be used.$" + +gFameCheckerFlavorText_Giovanni3:: @ 0x81B0022 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Welcome to my hideout!\p" + .string "It shall be so until I can restore\n" + .string "TEAM ROCKET to its former glory.$" + +gFameCheckerFlavorText_Giovanni4:: @ 0x81B00A6 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}What does this person do?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Blow me away! GIOVANNI was the\n" + .string "GYM LEADER of VIRIDIAN?$" + +gFameCheckerFlavorText_Giovanni5:: @ 0x81B0106 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}Family and friends?\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You… You're not GIOVANNI's kid,\n" + .string "are you?\p" + .string "No, that can't be right.\n" + .string "GIOVANNI's kid has red hair.$" + + +gFameCheckerPersonName_ProfOak:: @ 0x81B0188 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}PROF. OAK$" + +gFameCheckerPersonQuote_ProfOak:: @ 0x81B0198 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: PROF. OAK\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Why do POKéMON compete and battle\n" + .string "so hard for you?\p" + .string "They do so because they can see\n" + .string "the love and trust you have\l" + .string "towards POKéMON.\p" + .string "Never forget that.$" + +gFameCheckerPersonName_Daisy:: @ 0x81B0251 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}DAISY$" + +gFameCheckerPersonQuote_Daisy:: @ 0x81B025D + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: DAISY\n" + .string "To: {PLAYER}\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}While I was comfortably enjoying\n" + .string "my tea breaks, you've grown very\l" + .string "skilled and powerful.\p" + .string "I hope you'll remain a good rival\n" + .string "to my little brother.$" + +gFameCheckerPersonName_Brock:: @ 0x81B030F + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}BROCK$" + +gFameCheckerPersonQuote_Brock:: @ 0x81B031B + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: BROCK\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}In this big world of ours, there\n" + .string "must be many tough TRAINERS.\p" + .string "Let's both keep training and\n" + .string "making ourselves stronger!$" + +gFameCheckerPersonName_Misty:: @ 0x81B03B3 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}MISTY$" + +gFameCheckerPersonQuote_Misty:: @ 0x81B03BF + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: MISTY\n" + .string "To: {PLAYER}\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I'm going to keep training here at\n" + .string "this GYM.\p" + .string "When I get better, I'd love to hit\n" + .string "the road and travel.$" + +gFameCheckerPersonName_LtSurge:: @ 0x81B0446 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}LT. SURGE$" + +gFameCheckerPersonQuote_LtSurge:: @ 0x81B0456 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: LT. SURGE\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hey, kid!\n" + .string "You electrified me in our battle!\p" + .string "I didn't know that there were\n" + .string "gutsy TRAINERS like you.\p" + .string "It made me change my mind about\n" + .string "you!$" + +gFameCheckerPersonName_Erika:: @ 0x81B0504 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}ERIKA$" + +gFameCheckerPersonQuote_Erika:: @ 0x81B0510 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: ERIKA\n" + .string "To: {PLAYER}\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I am so glad that there are strong\n" + .string "TRAINERS like you.\p" + .string "That awareness alone inspires and\n" + .string "motivates me to try harder.\p" + .string "Please visit me again.\n" + .string "Zzz…$" + +gFameCheckerPersonName_Koga:: @ 0x81B05C2 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}KOGA$" + +gFameCheckerPersonQuote_Koga:: @ 0x81B05CD + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: KOGA\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}You and I, we must both set our\n" + .string "sights higher and work towards\l" + .string "meeting our challenges.\p" + .string "Now, I must go train my daughter.$" + +gFameCheckerPersonName_Sabrina:: @ 0x81B0667 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}SABRINA$" + +gFameCheckerPersonQuote_Sabrina:: @ 0x81B0675 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: SABRINA\n" + .string "To: {PLAYER}\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The love you have towards your\n" + .string "POKéMON…\p" + .string "It was a power that was never\n" + .string "bested by my psychic power.$" + +gFameCheckerPersonName_Blaine:: @ 0x81B06FB + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}BLAINE$" + +gFameCheckerPersonQuote_Blaine:: @ 0x81B0708 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: BLAINE\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}My fire POKéMON!\n" + .string "They'll become even more powerful!\p" + .string "And now, a quiz. How many kinds of\n" + .string "FIRE-type POKéMON are there?$" + +gFameCheckerPersonName_Lorelei:: @ 0x81B079F + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}LORELEI$" + +gFameCheckerPersonQuote_Lorelei:: @ 0x81B07AD + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: LORELEI\n" + .string "To: {PLAYER}\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I needed to thank you for your\n" + .string "help.\p" + .string "But that has nothing to do with our\n" + .string "battles.\p" + .string "You'd better watch out next time!$" + +gFameCheckerPersonName_Bruno:: @ 0x81B0845 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}BRUNO$" + +gFameCheckerPersonQuote_Bruno:: @ 0x81B0851 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: BRUNO\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}The super power of your POKéMON\n" + .string "and you I've experienced myself.\p" + .string "Next time, maybe I should show you\n" + .string "how to train yourself.$" + +gFameCheckerPersonName_Agatha:: @ 0x81B08EE + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}AGATHA$" + +gFameCheckerPersonQuote_Agatha:: @ 0x81B08FB + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: AGATHA\n" + .string "To: {PLAYER}\p" + .string "{FONT_FEMALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}When you grow older, don't you\n" + .string "dare go soft like that coot OAK!\p" + .string "Be like me and keep battling on!$" + +gFameCheckerPersonName_Lance:: @ 0x81B097F + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}LANCE$" + +gFameCheckerPersonQuote_Lance:: @ 0x81B098B + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: LANCE\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}I'm considering going back to my\n" + .string "hometown.\p" + .string "I want to retrain my DRAGON-type\n" + .string "POKéMON and strengthen them.\p" + .string "I'd like to invite you to my\n" + .string "hometown one day.$" + +gFameCheckerPersonName_Bill:: @ 0x81B0A45 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}BILL$" + +gFameCheckerPersonQuote_Bill:: @ 0x81B0A50 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: BILL\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Hey, there! CELIO had nothing but\n" + .string "praise for you.\p" + .string "Hearing that makes me happy.\p" + .string "When you catch some rare POKéMON,\n" + .string "come show me, okay? Promise!$" + +gFameCheckerPersonName_MrFuji:: @ 0x81B0AFF + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}MR. FUJI$" + +gFameCheckerPersonQuote_MrFuji:: @ 0x81B0B0E + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: MR. FUJI\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}Instead of hoping for the happiness\n" + .string "of just your POKéMON…\p" + .string "…Can I get you to wish for the\n" + .string "happiness of all POKéMON?$" + +gFameCheckerPersonName_Giovanni:: @ 0x81B0BA6 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}GIOVANNI$" + +gFameCheckerPersonQuote_Giovanni:: @ 0x81B0BB5 + .string "{COLOR BLUE}{SHADOW LIGHT_BLUE}From: GIOVANNI\n" + .string "To: {PLAYER}\p" + .string "{FONT_MALE}{COLOR DARK_GRAY}{SHADOW LIGHT_GRAY}There is nothing that I wish to say\n" + .string "to you.\p" + .string "I will concentrate solely on\n" + .string "bettering myself, and none other.$" + +gFameCheckerFlavorTextOriginLocation_ProfOak0:: @ 0x81B0C45 + .string "PALLET TOWN$" + +gFameCheckerFlavorTextOriginLocation_ProfOak1:: + .string "RESEARCH LAB$" + +gFameCheckerFlavorTextOriginLocation_ProfOak2:: + .string "RESEARCH LAB$" + +gFameCheckerFlavorTextOriginLocation_ProfOak3:: + .string "VIRIDIAN CITY$" + +gFameCheckerFlavorTextOriginLocation_ProfOak4:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_ProfOak5:: + .string "RESEARCH LAB$" + +gFameCheckerFlavorTextOriginLocation_Daisy0:: + .string "RESEARCH LAB$" + +gFameCheckerFlavorTextOriginLocation_Daisy1:: + .string "VERMILION CITY$" + +gFameCheckerFlavorTextOriginLocation_Daisy2:: + .string "WATER LABYRINTH$" + +gFameCheckerFlavorTextOriginLocation_Daisy3:: + .string "VIRIDIAN CITY$" + +gFameCheckerFlavorTextOriginLocation_Daisy4:: + .string "CELADON MANSION$" + +gFameCheckerFlavorTextOriginLocation_Daisy5:: + .string "FOUR ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Brock0:: + .string "PEWTER CITY$" + +gFameCheckerFlavorTextOriginLocation_Brock1:: + .string "PEWTER GYM$" + +gFameCheckerFlavorTextOriginLocation_Brock2:: + .string "PEWTER CITY$" + +gFameCheckerFlavorTextOriginLocation_Brock3:: + .string "ROUTE 4$" + +gFameCheckerFlavorTextOriginLocation_Brock4:: + .string "MT. MOON$" + +gFameCheckerFlavorTextOriginLocation_Brock5:: + .string "PEWTER MUSEUM$" + +gFameCheckerFlavorTextOriginLocation_Misty0:: + .string "CERULEAN CITY$" + +gFameCheckerFlavorTextOriginLocation_Misty1:: + .string "CERULEAN GYM$" + +gFameCheckerFlavorTextOriginLocation_Misty2:: + .string "CERULEAN GYM$" + +gFameCheckerFlavorTextOriginLocation_Misty3:: + .string "SEAFOAM ISLANDS$" + +gFameCheckerFlavorTextOriginLocation_Misty4:: + .string "CERULEAN CAPE$" + +gFameCheckerFlavorTextOriginLocation_Misty5:: + .string "CERULEAN CITY$" + +gFameCheckerFlavorTextOriginLocation_LtSurge0:: + .string "VERMILION CITY$" + +gFameCheckerFlavorTextOriginLocation_LtSurge1:: + .string "VERMILION GYM$" + +gFameCheckerFlavorTextOriginLocation_LtSurge2:: + .string "VERMILION GYM$" + +gFameCheckerFlavorTextOriginLocation_LtSurge3:: + .string "VERMILION GYM$" + +gFameCheckerFlavorTextOriginLocation_LtSurge4:: + .string "VERMILION GYM$" + +gFameCheckerFlavorTextOriginLocation_LtSurge5:: + .string "VERMILION CITY$" + +gFameCheckerFlavorTextOriginLocation_Erika0:: + .string "CELADON CITY$" + +gFameCheckerFlavorTextOriginLocation_Erika1:: + .string "CELADON GYM$" + +gFameCheckerFlavorTextOriginLocation_Erika2:: + .string "CELADON GYM$" + +gFameCheckerFlavorTextOriginLocation_Erika3:: + .string "CELADON GYM$" + +gFameCheckerFlavorTextOriginLocation_Erika4:: + .string "CELADON GYM$" + +gFameCheckerFlavorTextOriginLocation_Erika5:: + .string "CELADON MANSION$" + +gFameCheckerFlavorTextOriginLocation_Koga0:: + .string "FUCHSIA CITY$" + +gFameCheckerFlavorTextOriginLocation_Koga1:: + .string "FUCHSIA GYM$" + +gFameCheckerFlavorTextOriginLocation_Koga2:: + .string "FUCHSIA GYM$" + +gFameCheckerFlavorTextOriginLocation_Koga3:: + .string "FUCHSIA CITY$" + +gFameCheckerFlavorTextOriginLocation_Koga4:: + .string "FUCHSIA CITY$" + +gFameCheckerFlavorTextOriginLocation_Koga5:: + .string "SAFARI ZONE$" + +gFameCheckerFlavorTextOriginLocation_Sabrina0:: + .string "SAFFRON CITY$" + +gFameCheckerFlavorTextOriginLocation_Sabrina1:: + .string "THREE ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Sabrina2:: + .string "SAFFRON GYM$" + +gFameCheckerFlavorTextOriginLocation_Sabrina3:: + .string "SAFFRON GYM$" + +gFameCheckerFlavorTextOriginLocation_Sabrina4:: + .string "SAFFRON CITY$" + +gFameCheckerFlavorTextOriginLocation_Sabrina5:: + .string "SAFFRON GYM$" + +gFameCheckerFlavorTextOriginLocation_Blaine0:: + .string "CINNABAR ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Blaine1:: + .string "CINNABAR GYM$" + +gFameCheckerFlavorTextOriginLocation_Blaine2:: + .string "CINNABAR GYM$" + +gFameCheckerFlavorTextOriginLocation_Blaine3:: + .string "CINNABAR ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Blaine4:: + .string "CINNABAR GYM$" + +gFameCheckerFlavorTextOriginLocation_Blaine5:: + .string "RESORT GORGEOUS$" + +gFameCheckerFlavorTextOriginLocation_Lorelei0:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_Lorelei1:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_Lorelei2:: + .string "FOUR ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Lorelei3:: + .string "FIVE ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Lorelei4:: + .string "FOUR ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Lorelei5:: + .string "FOUR ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Bruno0:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_Bruno1:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_Bruno2:: + .string "SAFFRON CITY$" + +gFameCheckerFlavorTextOriginLocation_Bruno3:: + .string "EMBER SPA$" + +gFameCheckerFlavorTextOriginLocation_Bruno4:: + .string "TWO ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Bruno5:: + .string "SEVAULT CANYON$" + +gFameCheckerFlavorTextOriginLocation_Agatha0:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_Agatha1:: + .string "INDIGO PLATEAU$" + +gFameCheckerFlavorTextOriginLocation_Agatha2:: + .string "INDIGO PLATEAU$" + +gFameCheckerFlavorTextOriginLocation_Agatha3:: + .string "SEVEN ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Agatha4:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_Agatha5:: + .string "SIX ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Lance0:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_Lance1:: + .string "POKéMON LEAGUE$" + +gFameCheckerFlavorTextOriginLocation_Lance2:: + .string "SAFFRON CITY$" + +gFameCheckerFlavorTextOriginLocation_Lance3:: + .string "CELADON DEPT.$" + +gFameCheckerFlavorTextOriginLocation_Lance4:: + .string "INDIGO PLATEAU$" + +gFameCheckerFlavorTextOriginLocation_Lance5:: + .string "INDIGO PLATEAU$" + +gFameCheckerFlavorTextOriginLocation_Bill0:: + .string "CERULEAN CITY$" + +gFameCheckerFlavorTextOriginLocation_Bill1:: + .string "CERULEAN CITY$" + +gFameCheckerFlavorTextOriginLocation_Bill2:: + .string "FUCHSIA CITY$" + +gFameCheckerFlavorTextOriginLocation_Bill3:: + .string "ONE ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Bill4:: + .string "ONE ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Bill5:: + .string "ONE ISLAND$" + +gFameCheckerFlavorTextOriginLocation_MrFuji0:: + .string "LAVENDER TOWN$" + +gFameCheckerFlavorTextOriginLocation_MrFuji1:: + .string "POKéMON TOWER$" + +gFameCheckerFlavorTextOriginLocation_MrFuji2:: + .string "LAVENDER TOWN$" + +gFameCheckerFlavorTextOriginLocation_MrFuji3:: + .string "LAVENDER TOWN$" + +gFameCheckerFlavorTextOriginLocation_MrFuji4:: + .string "CINNABAR GYM$" + +gFameCheckerFlavorTextOriginLocation_MrFuji5:: + .string "CINNABAR ISLAND$" + +gFameCheckerFlavorTextOriginLocation_Giovanni0:: + .string "ROCKET HIDEOUT$" + +gFameCheckerFlavorTextOriginLocation_Giovanni1:: + .string "SILPH CO.$" + +gFameCheckerFlavorTextOriginLocation_Giovanni2:: + .string "SILPH CO.$" + +gFameCheckerFlavorTextOriginLocation_Giovanni3:: + .string "VIRIDIAN GYM$" + +gFameCheckerFlavorTextOriginLocation_Giovanni4:: + .string "VIRIDIAN GYM$" + +gFameCheckerFlavorTextOriginLocation_Giovanni5:: + .string "ROCKET WAREHOUSE$" + +gFameCheckerFlavorTextOriginObjectName_ProfOak0:: + .string "SIGN$" + +gFameCheckerFlavorTextOriginObjectName_ProfOak1:: + .string "PROF. OAK$" + +gFameCheckerFlavorTextOriginObjectName_ProfOak2:: + .string "AIDE$" + +gFameCheckerFlavorTextOriginObjectName_ProfOak3:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_ProfOak4:: + .string "AGATHA$" + +gFameCheckerFlavorTextOriginObjectName_ProfOak5:: + .string "AIDE$" + +gFameCheckerFlavorTextOriginObjectName_Daisy0:: + .string "AIDE$" + +gFameCheckerFlavorTextOriginObjectName_Daisy1:: + .string "WOMAN$" + +gFameCheckerFlavorTextOriginObjectName_Daisy2:: + .string "MAN$" + +gFameCheckerFlavorTextOriginObjectName_Daisy3:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Daisy4:: + .string "OLD LADY$" + +gFameCheckerFlavorTextOriginObjectName_Daisy5:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Brock0:: + .string "SIGN$" + +gFameCheckerFlavorTextOriginObjectName_Brock1:: + .string "BROCK$" + +gFameCheckerFlavorTextOriginObjectName_Brock2:: + .string "YOUNG MAN$" + +gFameCheckerFlavorTextOriginObjectName_Brock3:: + .string "BOY$" + +gFameCheckerFlavorTextOriginObjectName_Brock4:: + .string "MAN$" + +gFameCheckerFlavorTextOriginObjectName_Brock5:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Misty0:: + .string "SIGN$" + +gFameCheckerFlavorTextOriginObjectName_Misty1:: + .string "MISTY$" + +gFameCheckerFlavorTextOriginObjectName_Misty2:: + .string "LUIS$" + +gFameCheckerFlavorTextOriginObjectName_Misty3:: + .string "YOUNG MAN$" + +gFameCheckerFlavorTextOriginObjectName_Misty4:: + .string "DAME$" + +gFameCheckerFlavorTextOriginObjectName_Misty5:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_LtSurge0:: + .string "SIGN$" + +gFameCheckerFlavorTextOriginObjectName_LtSurge1:: + .string "LT. SURGE$" + +gFameCheckerFlavorTextOriginObjectName_LtSurge2:: + .string "TUCKER$" + +gFameCheckerFlavorTextOriginObjectName_LtSurge3:: + .string "TUCKER$" + +gFameCheckerFlavorTextOriginObjectName_LtSurge4:: + .string "DWAYNE$" + +gFameCheckerFlavorTextOriginObjectName_LtSurge5:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Erika0:: + .string "SIGN$" + +gFameCheckerFlavorTextOriginObjectName_Erika1:: + .string "ERIKA$" + +gFameCheckerFlavorTextOriginObjectName_Erika2:: + .string "LOLA$" + +gFameCheckerFlavorTextOriginObjectName_Erika3:: + .string "TAMIA$" + +gFameCheckerFlavorTextOriginObjectName_Erika4:: + .string "ERIKA$" + +gFameCheckerFlavorTextOriginObjectName_Erika5:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Koga0:: + .string "SIGN$" + +gFameCheckerFlavorTextOriginObjectName_Koga1:: + .string "KOGA$" + +gFameCheckerFlavorTextOriginObjectName_Koga2:: + .string "KIRK$" + +gFameCheckerFlavorTextOriginObjectName_Koga3:: + .string "CHARINE$" + +gFameCheckerFlavorTextOriginObjectName_Koga4:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Koga5:: + .string "MAN$" + +gFameCheckerFlavorTextOriginObjectName_Sabrina0:: + .string "SIGN$" + +gFameCheckerFlavorTextOriginObjectName_Sabrina1:: + .string "YOUNG MAN$" + +gFameCheckerFlavorTextOriginObjectName_Sabrina2:: + .string "SABRINA$" + +gFameCheckerFlavorTextOriginObjectName_Sabrina3:: + .string "SABRINA$" + +gFameCheckerFlavorTextOriginObjectName_Sabrina4:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Sabrina5:: + .string "TYRON$" + +gFameCheckerFlavorTextOriginObjectName_Blaine0:: + .string "SIGN$" + +gFameCheckerFlavorTextOriginObjectName_Blaine1:: + .string "BLAINE$" + +gFameCheckerFlavorTextOriginObjectName_Blaine2:: + .string "DEREK$" + +gFameCheckerFlavorTextOriginObjectName_Blaine3:: + .string "WOMAN$" + +gFameCheckerFlavorTextOriginObjectName_Blaine4:: + .string "PHOTO$" + +gFameCheckerFlavorTextOriginObjectName_Blaine5:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Lorelei0:: + .string "LORELEI$" + +gFameCheckerFlavorTextOriginObjectName_Lorelei1:: + .string "LORELEI$" + +gFameCheckerFlavorTextOriginObjectName_Lorelei2:: + .string "OLD MAN$" + +gFameCheckerFlavorTextOriginObjectName_Lorelei3:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Lorelei4:: + .string "LITTLE GIRL$" + +gFameCheckerFlavorTextOriginObjectName_Lorelei5:: + .string "OLD LADY$" + +gFameCheckerFlavorTextOriginObjectName_Bruno0:: + .string "BRUNO$" + +gFameCheckerFlavorTextOriginObjectName_Bruno1:: + .string "BRUNO$" + +gFameCheckerFlavorTextOriginObjectName_Bruno2:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Bruno3:: + .string "CRUSHER$" + +gFameCheckerFlavorTextOriginObjectName_Bruno4:: + .string "WOMAN$" + +gFameCheckerFlavorTextOriginObjectName_Bruno5:: + .string "CRUSHER$" + +gFameCheckerFlavorTextOriginObjectName_Agatha0:: + .string "AGATHA$" + +gFameCheckerFlavorTextOriginObjectName_Agatha1:: + .string "CRUSHER$" + +gFameCheckerFlavorTextOriginObjectName_Agatha2:: + .string "CRUSHER$" + +gFameCheckerFlavorTextOriginObjectName_Agatha3:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Agatha4:: + .string "AGATHA$" + +gFameCheckerFlavorTextOriginObjectName_Agatha5:: + .string "OLD LADY$" + +gFameCheckerFlavorTextOriginObjectName_Lance0:: + .string "LANCE$" + +gFameCheckerFlavorTextOriginObjectName_Lance1:: + .string "LANCE$" + +gFameCheckerFlavorTextOriginObjectName_Lance2:: + .string "WOMAN$" + +gFameCheckerFlavorTextOriginObjectName_Lance3:: + .string "LITTLE GIRL$" + +gFameCheckerFlavorTextOriginObjectName_Lance4:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Lance5:: + .string "YOUNG MAN$" + +gFameCheckerFlavorTextOriginObjectName_Bill0:: + .string "{RIVAL}$" + +gFameCheckerFlavorTextOriginObjectName_Bill1:: + .string "LITTLE BOY$" + +gFameCheckerFlavorTextOriginObjectName_Bill2:: + .string "OLD MAN$" + +gFameCheckerFlavorTextOriginObjectName_Bill3:: + .string "CELIO$" + +gFameCheckerFlavorTextOriginObjectName_Bill4:: + .string "CELIO$" + +gFameCheckerFlavorTextOriginObjectName_Bill5:: + .string "CELIO$" + +gFameCheckerFlavorTextOriginObjectName_MrFuji0:: + .string "LITTLE GIRL$" + +gFameCheckerFlavorTextOriginObjectName_MrFuji1:: + .string "TEAM ROCKET$" + +gFameCheckerFlavorTextOriginObjectName_MrFuji2:: + .string "MAGAZINE$" + +gFameCheckerFlavorTextOriginObjectName_MrFuji3:: + .string "MAN$" + +gFameCheckerFlavorTextOriginObjectName_MrFuji4:: + .string "PHOTO$" + +gFameCheckerFlavorTextOriginObjectName_MrFuji5:: + .string "POKéMON JOURNAL$" + +gFameCheckerFlavorTextOriginObjectName_Giovanni0:: + .string "GIOVANNI$" + +gFameCheckerFlavorTextOriginObjectName_Giovanni1:: + .string "SCIENTIST$" + +gFameCheckerFlavorTextOriginObjectName_Giovanni2:: + .string "SCIENTIST$" + +gFameCheckerFlavorTextOriginObjectName_Giovanni3:: + .string "GIOVANNI$" + +gFameCheckerFlavorTextOriginObjectName_Giovanni4:: + .string "MAN$" + +gFameCheckerFlavorTextOriginObjectName_Giovanni5:: + .string "GIDEON$" + +PokemonJournal_Text_SpecialFeatureBrock:: + .string "POKéMON JOURNAL\p" + .string "Special Feature: PEWTER GYM\n" + .string "LEADER BROCK!\p" + .string "BROCK rarely laughs, but is said to\n" + .string "be unable to stop if he starts.$" + +PokemonJournal_Text_SpecialFeatureMisty:: + .string "POKéMON JOURNAL\p" + .string "Special Feature: CERULEAN GYM\n" + .string "LEADER MISTY!\p" + .string "MISTY is said to worship LORELEI\n" + .string "of the ELITE FOUR.$" + +PokemonJournal_Text_SpecialFeatureLtSurge:: + .string "POKéMON JOURNAL\p" + .string "Special Feature: VERMILION GYM\n" + .string "LEADER LT. SURGE!\p" + .string "LT. SURGE is rumored to have been\n" + .string "a pilot while home in America.\p" + .string "He used the electricity generated\n" + .string "by POKéMON to power his plane.$" + +PokemonJournal_Text_SpecialFeatureErika:: + .string "POKéMON JOURNAL\p" + .string "Special Feature: CELADON GYM\n" + .string "LEADER ERIKA!\p" + .string "Rumor has it that if you peek into\n" + .string "CELADON GYM, you can often\l" + .string "see ERIKA snoozing.$" + +PokemonJournal_Text_SpecialFeatureKoga:: + .string "POKéMON JOURNAL\p" + .string "Special Feature: FUCHSIA GYM\n" + .string "LEADER KOGA!\p" + .string "KOGA is said to have a thorough\n" + .string "knowledge of medicine.\p" + .string "He even concocts medicine to nurse\n" + .string "his POKéMON to health.$" + +PokemonJournal_Text_SpecialFeatureSabrina:: + .string "POKéMON JOURNAL\p" + .string "Special Feature: SAFFRON GYM\n" + .string "LEADER SABRINA!\p" + .string "People say that SABRINA can\n" + .string "communicate with her POKéMON\l" + .string "during battle without speaking.$" + +PokemonJournal_Text_SpecialFeatureBlaine:: + .string "POKéMON JOURNAL\p" + .string "Special Feature: CINNABAR GYM\n" + .string "LEADER BLAINE!\p" + .string "BLAINE is said to remove his dark\n" + .string "shades only when he is thinking up\l" + .string "new quiz questions.$" + +PokemonJournal_Text_SpecialFeatureLorelei:: + .string "POKéMON JOURNAL\p" + .string "Special Feature:\n" + .string "ELITE FOUR's LORELEI!\p" + .string "Known for her logical, calculated,\n" + .string "and cool battling style, LORELEI\l" + .string "has a surprising secret!$" + +PokemonJournal_Text_SpecialFeatureBruno:: + .string "POKéMON JOURNAL\p" + .string "Special Feature:\n" + .string "ELITE FOUR's BRUNO!\p" + .string "BRUNO apparently joined the ELITE\n" + .string "FOUR out of his burning ambition to\l" + .string "battle the best TRAINERS.$" + +PokemonJournal_Text_SpecialFeatureAgatha:: + .string "POKéMON JOURNAL\p" + .string "Special Feature:\n" + .string "ELITE FOUR's AGATHA!\p" + .string "In her youth, AGATHA and PROF.\n" + .string "OAK were rivals who vied for\l" + .string "supremacy as TRAINERS.$" + +PokemonJournal_Text_SpecialFeatureLance:: + .string "POKéMON JOURNAL\p" + .string "Special Feature:\n" + .string "ELITE FOUR's LANCE!\p" + .string "LANCE's grandfather is thought to\n" + .string "be the elder of a famous clan of\l" + .string "dragon masters.$" + +PokemonJournal_Text_SpecialFeatureProfOak:: + .string "POKéMON JOURNAL\p" + .string "Special Feature: PROF. OAK,\n" + .string "the POKéMON Researcher!\p" + .string "PROF. OAK reportedly lives with his\n" + .string "grandchildren DAISY and {RIVAL}.$" + +PokemonJournal_Text_SpecialFeatureDaisyOak:: + .string "This is a POKéMON JOURNAL from\n" + .string "years ago…\p" + .string "POKéMON JOURNAL\n" + .string "CONTEST Special!\p" + .string "The Spring POKéMON CONTEST's\n" + .string "Grand Champion is DAISY OAK of\l" + .string "PALLET TOWN!$" + +PokemonJournal_Text_SpecialFeatureMrFuji:: + .string "POKéMON JOURNAL\p" + .string "Special Feature:\n" + .string "MR. FUJI of POKéMON HOUSE!\p" + .string "Editor: The shy MR. FUJI turned\n" + .string "down our interview requests.\p" + .string "He is a kindly man who is adored\n" + .string "and respected in LAVENDER TOWN.$" diff --git a/data/text/ingame_trade.inc b/data/text/ingame_trade.inc new file mode 100644 index 000000000000..0b800bad8cc1 --- /dev/null +++ b/data/text/ingame_trade.inc @@ -0,0 +1,60 @@ +Trade_Text_LookingForMonWannaTradeForMon:: + .string "I'm looking for the POKéMON\n" + .string "{STR_VAR_1}!\p" + .string "Wanna trade one for my\n" + .string "{STR_VAR_2}?$" + +Trade_Text_AwwOhWell:: + .string "Awww!\n" + .string "Oh, well…$" + +Trade_Text_WhatThatsNoMon:: + .string "What?\n" + .string "That's no {STR_VAR_1}!$" + +Trade_Text_HeyThanks:: + .string "Hey, thanks!$" + +Trade_Text_IsntMyOldMonGreat:: + .string "Isn't my old {STR_VAR_2} great?$" + +Trade_Text_DoYouHaveMonWouldYouTradeForMon:: + .string "Hello, there! Do you happen to\n" + .string "have a {STR_VAR_1}?\p" + .string "Would you agree to a trade for\n" + .string "my {STR_VAR_2}?$" + +Trade_Text_WellIfYouDontWantTo:: + .string "Well, if you don't want to…$" + +Trade_Text_ThisIsntMon:: + .string "Hmmm?\n" + .string "This isn't a {STR_VAR_1}.\p" + .string "Think of me if you get one.$" + +Trade_Text_Thanks:: + .string "Thanks!$" + +Trade_Text_HasTradedMonGrownStronger:: + .string "The {STR_VAR_2} that I traded you,\n" + .string "has it grown stronger?$" + +Trade_Text_DoYouHaveMonWantToTradeForMon:: + .string "Hi!\n" + .string "Do you have a {STR_VAR_1}?\p" + .string "Want to trade it for my\n" + .string "{STR_VAR_2}?$" + +Trade_Text_ThatsTooBad:: + .string "That's too bad.$" + +Trade_Text_ThisIsNoMon:: + .string "…This is no {STR_VAR_1}.\p" + .string "If you get one, trade it with me.$" + +Trade_Text_ThanksYoureAPal:: + .string "Thanks, you're a pal!$" + +Trade_Text_HowIsMyOldMon:: + .string "How is my old {STR_VAR_2}?\n" + .string "My {STR_VAR_1} is doing great!$" diff --git a/data/text/new_game_intro_frlg.inc b/data/text/new_game_intro_frlg.inc new file mode 100644 index 000000000000..e667b68d92f7 --- /dev/null +++ b/data/text/new_game_intro_frlg.inc @@ -0,0 +1,243 @@ +gOtherText_NewName:: + .string "NEW NAME$" + +gNameChoice_Green:: + .string "GREEN$" + +gNameChoice_Red:: + .string "RED$" + +gNameChoice_Leaf:: + .string "LEAF$" + +gNameChoice_Fire:: + .string "FIRE$" + +gNameChoice_Gary:: + .string "GARY$" + +gNameChoice_Kaz:: + .string "KAZ$" + +gNameChoice_Toru:: + .string "TORU$" + +gNameChoice_Ash:: + .string "ASH$" + +gNameChoice_Kene:: + .string "KENE$" + +gNameChoice_Geki:: + .string "GEKI$" + +gNameChoice_Jak:: + .string "JAK$" + +gNameChoice_Janne:: + .string "JANNE$" + +gNameChoice_Jonn:: + .string "JONN$" + +gNameChoice_Kamon:: + .string "KAMON$" + +gNameChoice_Karl:: + .string "KARL$" + +gNameChoice_Taylor:: + .string "TAYLOR$" + +gNameChoice_Oscar:: + .string "OSCAR$" + +gNameChoice_Hiro:: + .string "HIRO$" + +gNameChoice_Max:: + .string "MAX$" + +gNameChoice_Jon:: + .string "JON$" + +gNameChoice_Ralph:: + .string "RALPH$" + +gNameChoice_Kay:: + .string "KAY$" + +gNameChoice_Tosh:: + .string "TOSH$" + +gNameChoice_Roak:: + .string "ROAK$" + +gNameChoice_Omi:: + .string "OMI$" + +gNameChoice_Jodi:: + .string "JODI$" + +gNameChoice_Amanda:: + .string "AMANDA$" + +gNameChoice_Hillary:: + .string "HILLARY$" + +gNameChoice_Makey:: + .string "MAKEY$" + +gNameChoice_Michi:: + .string "MICHI$" + +gNameChoice_Paula:: + .string "PAULA$" + +gNameChoice_June:: + .string "JUNE$" + +gNameChoice_Cassie:: + .string "CASSIE$" + +gNameChoice_Rey:: + .string "REY$" + +gNameChoice_Seda:: + .string "SEDA$" + +gNameChoice_Kiko:: + .string "KIKO$" + +gNameChoice_Mina:: + .string "MINA$" + +gNameChoice_Norie:: + .string "NORIE$" + +gNameChoice_Sai:: + .string "SAI$" + +gNameChoice_Momo:: + .string "MOMO$" + +gNameChoice_Suzi:: + .string "SUZI$" + +gControlsGuide_Text_Intro:: + .string "The various buttons will be explained in\n" + .string "the order of their importance.$" + +gControlsGuide_Text_DPad:: + .string "Moves the main character.\n" + .string "Also used to choose various data\n" + .string "headings.$" + +gControlsGuide_Text_AButton:: + .string "Used to confirm a choice, check\n" + .string "things, chat, and scroll text.$" + +gControlsGuide_Text_BButton:: + .string "Used to exit, cancel a choice,\n" + .string "and cancel a mode.$" + +gControlsGuide_Text_StartButton:: + .string "Press this button to open the\n" + .string "MENU.$" + +gControlsGuide_Text_SelectButton:: + .string "Used to shift items and to use\n" + .string "a registered item.$" + +gControlsGuide_Text_LRButtons:: + .string "If you need help playing the\n" + .string "game, or on how to do things,\n" + .string "press the L or R Button.$" + +gOakSpeech_Text_AskPlayerGender:: + .string "Now tell me. Are you a boy?\n" + .string "Or are you a girl?$" + +gPikachuIntro_Text_Page1:: + .string "In the world which you are about to\n" + .string "enter, you will embark on a grand\n" + .string "adventure with you as the hero.\n" + .string "\n" + .string "Speak to people and check things\n" + .string "wherever you go, be it towns, roads,\n" + .string "or caves. Gather information and\n" + .string "hints from every source.$" + +gPikachuIntro_Text_Page2:: + .string "New paths will open to you by helping\n" + .string "people in need, overcoming challenges,\n" + .string "and solving mysteries.\n" + .string "\n" + .string "At times, you will be challenged by\n" + .string "others and attacked by wild creatures.\n" + .string "Be brave and keep pushing on.$" + +gPikachuIntro_Text_Page3:: + .string "Through your adventure, we hope\n" + .string "that you will interact with all sorts\n" + .string "of people and achieve personal growth.\n" + .string "That is our biggest objective.\n" + .string "\n" + .string "Press the A Button, and let your\n" + .string "adventure begin!$" + +gOakSpeech_Text_WelcomeToTheWorld:: + .string "Hello, there!\n" + .string "Glad to meet you!\p" + .string "Welcome to the world of POKéMON!\p" + .string "My name is OAK.\p" + .string "People affectionately refer to me\n" + .string "as the POKéMON PROFESSOR.\p$" + +gOakSpeech_Text_ThisWorld:: + .string "This world…$" + +gOakSpeech_Text_IsInhabitedFarAndWide:: + .string "…is inhabited far and wide by\n" + .string "creatures called POKéMON.\p$" + +gOakSpeech_Text_IStudyPokemon:: + .string "For some people, POKéMON are pets.\n" + .string "Others use them for battling.\p" + .string "As for myself…\p" + .string "I study POKéMON as a profession.\p$" + +gOakSpeech_Text_TellMeALittleAboutYourself:: + .string "But first, tell me a little about\n" + .string "yourself.\p$" + +gOakSpeech_Text_YourNameWhatIsIt:: + .string "Let's begin with your name.\n" + .string "What is it?\p$" + +gOakSpeech_Text_SoYourNameIsPlayer:: + .string "Right…\n" + .string "So your name is {PLAYER}.$" + +gOakSpeech_Text_WhatWasHisName:: + .string "This is my grandson.\p" + .string "He's been your rival since you both\n" + .string "were babies.\p" + .string "…Erm, what was his name now?$" + +gOakSpeech_Text_YourRivalsNameWhatWasIt:: + .string "Your rival's name, what was it now?$" + +gOakSpeech_Text_ConfirmRivalName:: + .string "…Er, was it {RIVAL}?$" + +gOakSpeech_Text_RememberRivalsName:: + .string "That's right! I remember now!\n" + .string "His name is {RIVAL}!\p$" + +gOakSpeech_Text_LetsGo:: + .string "{PLAYER}!\p" + .string "Your very own POKéMON legend is\n" + .string "about to unfold!\p" + .string "A world of dreams and adventures\n" + .string "with POKéMON awaits! Let's go!$" diff --git a/data/text/pc_transfer.inc b/data/text/pc_transfer.inc index b6995d1111c4..98ad98c06b6f 100644 --- a/data/text/pc_transfer.inc +++ b/data/text/pc_transfer.inc @@ -28,6 +28,10 @@ gText_PkmnSentToPCAfterCatch:: .string "It was placed in \n" .string "BOX “{STR_VAR_1}”.$" +gText_PlayerObtainedTheMon:: + .string "{PLAYER} obtained\n" + .string "the {STR_VAR_1}!$" + gText_NoMoreRoomForPokemon:: .string "There's no more room for POKéMON!\p" .string "The POKéMON BOXES are full and\n" diff --git a/data/text/pokedex_rating.inc b/data/text/pokedex_rating.inc index 175aaccc6b0c..a2e5397dd49e 100644 --- a/data/text/pokedex_rating.inc +++ b/data/text/pokedex_rating.inc @@ -113,3 +113,128 @@ gBirchDexRatingText_OnANationwideBasis:: .string "On a nationwide basis…\p" .string "You've seen {STR_VAR_1} POKéMON,\n" .string "and you've caught {STR_VAR_2} POKéMON…$" + +@ FRLG + +PokedexRating_Text_HowIsPokedexComingAlong:: + .string "OAK: Good to see you!\n" + .string "How is your POKéDEX coming along?\p" + .string "Here, let me take a look.$" + +PokedexRating_Text_SeenXOwnedY:: + .string "The amount of progress you've made\n" + .string "on your POKéDEX is:\p" + .string "{STR_VAR_1} POKéMON seen and\n" + .string "{STR_VAR_2} POKéMON owned.\p" + .string "{FONT_NORMAL}PROF. OAK's rating:$" + +PokedexRating_Text_LessThan10:: + .string "You still have lots to do.\p" + .string "Go into every patch of grass you\n" + .string "see and look for POKéMON!$" + +PokedexRating_Text_LessThan20:: + .string "It looks as if you're getting on\n" + .string "the right track!\p" + .string "I've given one of my AIDES a FLASH\n" + .string "HM. Make sure you go get it!$" + +PokedexRating_Text_LessThan30:: + .string "Your POKéDEX could use a bit more\n" + .string "volume still!\p" + .string "Try to catch other species of\n" + .string "POKéMON!$" + +PokedexRating_Text_LessThan40:: + .string "Good, it's apparent that you're\n" + .string "trying hard!\p" + .string "I've given one of my AIDES an\n" + .string "ITEMFINDER. Be sure to collect it!$" + +PokedexRating_Text_LessThan50:: + .string "Your POKéDEX is coming along quite\n" + .string "well!\p" + .string "I've given one of my AIDES an\n" + .string "AMULET COIN. Be sure to get it!$" + +PokedexRating_Text_LessThan60:: + .string "Ah, you've finally topped 50\n" + .string "species!\p" + .string "I've given one of my AIDES an EXP.\n" + .string "SHARE. Be sure to go get it!$" + +PokedexRating_Text_LessThan70:: + .string "Hoho! This is turning into quite the\n" + .string "respectable POKéDEX!$" + +PokedexRating_Text_LessThan80:: + .string "Very good!\p" + .string "I think you'll collect even more\n" + .string "POKéMON by going fishing!$" + +PokedexRating_Text_LessThan90:: + .string "Wonderful! Let me guess… You\n" + .string "like to collect things, don't you?$" + +PokedexRating_Text_LessThan100:: + .string "I'm impressed!\n" + .string "It must have been difficult to do!$" + +PokedexRating_Text_LessThan110:: + .string "You've finally hit 100 species!\n" + .string "I can't believe how good you are!$" + +PokedexRating_Text_LessThan120:: + .string "You even have the evolved forms\n" + .string "of POKéMON! Super!$" + +PokedexRating_Text_LessThan130:: + .string "Excellent! Trade with friends to\n" + .string "get some more!$" + +PokedexRating_Text_LessThan140:: + .string "Outstanding!\n" + .string "You've become a real pro at this!$" + +PokedexRating_Text_LessThan150:: + .string "I have nothing left to say!\n" + .string "You're the POKéMON PROFESSOR now!$" + +PokedexRating_Text_Complete:: + .string "Your POKéDEX is entirely complete!\n" + .string "Congratulations!!$" + +PokedexRating_Text_NationalDexSeenXOwnedY:: + .string "And your NATIONAL POKéDEX is:\p" + .string "{STR_VAR_1} POKéMON seen and\n" + .string "{STR_VAR_2} POKéMON owned.$" + +PokedexRating_Text_LookForwardToFilledNationalDex:: + .string "I'll be looking forward to seeing\n" + .string "you fill the NATIONAL POKéDEX!$" + +PokedexRating_Text_YouveCompletedDex:: + .string "Finally…\p" + .string "You've finally completed the\n" + .string "POKéDEX!\p" + .string "It's magnificent!\n" + .string "Truly, this is a fantastic feat!$" + +PokedexRating_Text_Wroooaaarrr:: + .string "Wroooooooaaaaaarrrr!$" + +PokedexRating_Text_ThankYouMadeDreamReality:: + .string "Thank you, {PLAYER}!\n" + .string "Sincerely, thank you!\l" + .string "You've made my dream a reality!$" + +PokedexRating_Text_LoveSeeingYourPokedex:: + .string "OAK: Ah, welcome!\p" + .string "Tell me, how is your POKéDEX\n" + .string "coming along?\p" + .string "Wahaha!\p" + .string "Actually, I know how it is, but I\n" + .string "love seeing it anyway!\p" + .string "Let's see…$" + + diff --git a/data/text/surf.inc b/data/text/surf.inc index 13854f7aa7d3..80a4dc6605aa 100644 --- a/data/text/surf.inc +++ b/data/text/surf.inc @@ -4,3 +4,7 @@ gText_WantToUseSurf:: gText_PlayerUsedSurf:: .string "{STR_VAR_1} used SURF!$" + +Text_CurrentTooFast:: + .string "The current is much too fast!\n" + .string "SURF can't be used here…$" diff --git a/data/text/trainer_card.inc b/data/text/trainer_card.inc new file mode 100644 index 000000000000..b61e6100a498 --- /dev/null +++ b/data/text/trainer_card.inc @@ -0,0 +1,167 @@ +CeladonCity_GameCorner_Text_TryPokemonPrinter:: + .string "It's a POKéMON PRINTER!\p" + .string "It can put a print of your POKéMON\n" + .string "on the back of your TRAINER CARD.\p" + .string "It costs only ¥50.\n" + .string "Would you like to try it?$" + +CeladonCity_GameCorner_Text_DontHaveEnoughMoney:: + .string "You don't have enough money.$" + +CeladonCity_GameCorner_Text_ChoosePrintType:: + .string "Please choose the print type.$" + +CeladonCity_GameCorner_Text_BigSmileForPhoto:: + .string "A big smile for the photo, please!\n" + .string "Three… Two… One…\p" + .string "Flash!$" + +CeladonCity_GameCorner_Text_PrintIsReadyCheckTrainerCard:: + .string "Your POKéMON print is ready!\n" + .string "Check your TRAINER CARD.$" + +FourIsland_House2_Text_WishICouldShowOffStickers:: + .string "Giggle…\n" + .string "I collected a ton of STICKERS.\l" + .string "I wish I could show them off…$" + +FourIsland_House2_Text_GiveYouStickerIfYouBrag:: + .string "Oh, excellent!\n" + .string "You've come to the right place!\p" + .string "Look, look! See? See?\n" + .string "These are my STICKERS!\l" + .string "Look how many I got!\p" + .string "I bet you want some.\n" + .string "I bet you do!\p" + .string "I'll give a STICKER if you can tell\n" + .string "me something awesome about\l" + .string "yourself.\p" + .string "What will you brag about?$" + +FourIsland_House2_Text_BragAboutSomethingForMe:: + .string "Brag about something for me.\n" + .string "I'll give you a STICKER.$" + +FourIsland_House2_Text_BragAboutWhatToday:: + .string "Oh, hi!\n" + .string "Here comes the braggart.\p" + .string "What are you going to brag about\n" + .string "today?$" + +FourIsland_House2_Text_WowHoFLowest:: + .string "Oh, wow, you made it into the\n" + .string "HALL OF FAME.\p" + .string "That's pretty good, yup!\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowHoFLow:: + .string "Oh, wow, you've entered the\n" + .string "HALL OF FAME often!\p" + .string "That's impressive, yup!\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowHoFHigh:: + .string "Whoa! You've made it into the\n" + .string "HALL OF FAME that often?\l" + .string "That's seriously incredible, yup!\p" + .string "You own the POKéMON LEAGUE!\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowHoFHighest:: + .string "No way! You've gone into the\n" + .string "HALL OF FAME that many times?\p" + .string "You're beyond incredible, yup!\n" + .string "That's it, I have to give you this.$" + +FourIsland_House2_Text_HoFStickerApplied:: + .string "The HALL OF FAME STICKER was\n" + .string "applied to the TRAINER CARD.$" + +FourIsland_House2_Text_ComeBackWithBetterStoryHoF:: + .string "Hmm…\p" + .string "Come back with a better story next\n" + .string "time, okay?$" + +FourIsland_House2_Text_LivingLegendHoF:: + .string "Oh, no, no can do.\p" + .string "You're practically a living legend.\n" + .string "I have no SITCKERS left to give.$" + +FourIsland_House2_Text_WowEggsLowest:: + .string "Oh, wow, there are POKéMON EGGS?\n" + .string "I didn't know that!\p" + .string "That's pretty good, yup!\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowEggsLow:: + .string "You've hatched that many EGGS?\n" + .string "You really must like them!\p" + .string "That's impressive, yup!\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowEggsHigh:: + .string "Whoa! You've hatched a whole\n" + .string "bunch of EGGS!\p" + .string "You're an EGG-hatching machine!\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowEggsHighest:: + .string "Wh… You hatched that many EGGS?\p" + .string "What's behind your love of EGGS?\n" + .string "It's beyond incredible, yup!\p" + .string "You're too awesome, I tell you.\n" + .string "That's it, I have to give you this.$" + +FourIsland_House2_Text_EggStickerApplied:: + .string "The EGG STICKER was applied\n" + .string "to the TRAINER CARD.$" + +FourIsland_House2_Text_ComeBackWithBetterStoryEggs:: + .string "Hmm…\p" + .string "Come back with a better story next\n" + .string "time, okay?$" + +FourIsland_House2_Text_LivingLegendEggs:: + .string "Oh, no, no can do.\p" + .string "You're practically a living legend.\n" + .string "I have no SITCKERS left to give.$" + +FourIsland_House2_Text_WowLinkWinsLowest:: + .string "Oh, wow, you've had success\n" + .string "link battling?\p" + .string "You're pretty strong, yup!\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowLinkWinsLow:: + .string "You've beaten your friends a lot\n" + .string "link battling, huh?\p" + .string "You're impressively strong, yup!\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowLinkWinsHigh:: + .string "Whoa! You've beaten your friends\n" + .string "a frightful number of times.\p" + .string "Have you lost friends over this?\n" + .string "I'll give you one of these.$" + +FourIsland_House2_Text_WowLinkWinsHighest:: + .string "Wh… Wickedly whoa!\n" + .string "You've won mind-blowingly often!\p" + .string "It just knocks me out thinking\n" + .string "about how tough you are.\p" + .string "You're the stuff of nightmares!\n" + .string "That's it, I have to give you this.$" + +FourIsland_House2_Text_VictoryStickerApplied:: + .string "The VICTORY STICKER was applied\n" + .string "to the TRAINER CARD.$" + +FourIsland_House2_Text_ComeBackWithBetterStoryLinkWins:: + .string "Hmm…\p" + .string "Come back with a better story next\n" + .string "time, okay?$" + +FourIsland_House2_Text_LivingLegendLinkWins:: + .string "Oh, no, no can do.\p" + .string "You're practically a living legend.\n" + .string "I have no SITCKERS left to give.$" diff --git a/data/text/trainers_frlg.inc b/data/text/trainers_frlg.inc new file mode 100644 index 000000000000..393c5da457a0 --- /dev/null +++ b/data/text/trainers_frlg.inc @@ -0,0 +1,992 @@ +Route3_Text_ColtonRematchIntro:: + .string "Hey!\n" + .string "I saw you in VIRIDIAN FOREST!$" + +Route3_Text_BenRematchIntro:: + .string "Hi! I like shorts!\n" + .string "They're comfy and easy to wear!\p" + .string "You should be wearing shorts, too!$" + +Route3_Text_JaniceRematchIntro:: + .string "Excuse me!\n" + .string "You keep looking at me, don't you?$" + +Route3_Text_GregRematchIntro:: + .string "You're a TRAINER, aren't you?\n" + .string "Let's get with it right away!$" + +Route3_Text_SallyRematchIntro:: + .string "That look you give me…\n" + .string "It intrigues me so!$" + +Route3_Text_CalvinRematchIntro:: + .string "Hey! What's wrong with you?\n" + .string "You're still not wearing shorts!$" + +Route3_Text_JamesRematchIntro:: + .string "I'll battle you with the POKéMON\n" + .string "I started raising.$" + +Route3_Text_RobinRematchIntro:: + .string "Eek!\n" + .string "Did you push me?$" + +Route4_Text_CrissyRematchIntro:: + .string "I always catch mushroom POKéMON\n" + .string "on MT. MOON.$" + +Route6_Text_RickyRematchIntro:: + .string "Oh! You're that nosy kid who\n" + .string "eavesdropped on us!$" + +Route6_Text_NancyRematchIntro:: + .string "Excuse me! Didn't I tell you that\n" + .string "this is a private conversation?\p" + .string "You shouldn't be listening in,\n" + .string "you uncouth person!$" + +Route6_Text_KeigoRematchIntro:: + .string "I'm trying to find something good\n" + .string "that's not a BUG POKéMON, but…$" + +Route6_Text_JeffRematchIntro:: + .string "Huh?\n" + .string "You want to go with me again?$" + +Route6_Text_IsabelleRematchIntro:: + .string "Me?\n" + .string "Well, okay. I'll play this once.$" + +Route6_Text_ElijahRematchIntro:: + .string "Hey, long time!\n" + .string "Have you gotten better?$" + +Route8_Text_AidanRematchIntro:: + .string "You are good at POKéMON, but how\n" + .string "is your chemistry grade?$" + +Route8_Text_StanRematchIntro:: + .string "All right!\n" + .string "Let's play another game!$" + +Route8_Text_GlennRematchIntro:: + .string "You need strategy to win at\n" + .string "battling.\p" + .string "Are you following my advice?$" + +Route8_Text_PaigeRematchIntro:: + .string "I've collected many NIDORAN.\n" + .string "I don't want them to evolve, but…$" + +Route8_Text_LeslieRematchIntro:: + .string "School is fun, but I still think\n" + .string "POKéMON are fun, too.$" + +Route8_Text_AndreaRematchIntro:: + .string "MEOWTH and PERSIAN are so cute,\n" + .string "meow, meow, meow!$" + +Route8_Text_MeganRematchIntro:: + .string "We may look silly standing here\n" + .string "like this, but I can still battle.$" + +Route8_Text_RichRematchIntro:: + .string "I'm a rambling, gaming dude!\n" + .string "I'm on a winning streak!$" + +Route8_Text_JuliaRematchIntro:: + .string "What's a cute, round, and fluffy\n" + .string "POKéMON?\p" + .string "You already know, don't you?$" + +Route8_Text_RicardoRematchIntro:: + .string "My bike's still acting up, man.$" + +Route8_Text_JarenRematchIntro:: + .string "Okay, kid!\n" + .string "Don't expect mercy this time!$" + +Route8_Text_EliRematchIntro:: + .string "ELI: Our twin power became even\n" + .string "better!$" + +Route8_Text_AnneRematchIntro:: + .string "ANNE: Our twin power powered up!$" + +Route9_Text_AliciaRematchIntro:: + .string "We're to battle again?\n" + .string "This time, you're mine!$" + +Route9_Text_ChrisRematchIntro:: + .string "I haven't forgotten you were with\n" + .string "those good-looking POKéMON.$" + +Route9_Text_DrewRematchIntro:: + .string "I'm taking ROCK TUNNEL to go to\n" + .string "LAVENDER…\p" + .string "But I keep getting stopped by\n" + .string "everyone along the way…$" + +Route9_Text_CaitlinRematchIntro:: + .string "Don't you dare patronize me today!\n" + .string "We're playing for keeps!$" + +Route9_Text_JeremyRematchIntro:: + .string "Bwahaha!\n" + .string "Great! I was bored again, eh!$" + +Route9_Text_BriceRematchIntro:: + .string "Hahaha!\n" + .string "A little toughie, as always!$" + +Route9_Text_BrentRematchIntro:: + .string "I got up early every day to train\n" + .string "my POKéMON from cocoons!$" + +Route9_Text_AlanRematchIntro:: + .string "Hahahaha!\n" + .string "I'll win this time!$" + +Route9_Text_ConnerRematchIntro:: + .string "Go win, my super BUG POKéMON!$" + +Route10_Text_MarkRematchIntro:: + .string "Wow, you came here again?\n" + .string "Maybe you're a POKéMANIAC, too?\l" + .string "Want to see my collection?$" + +Route10_Text_ClarkRematchIntro:: + .string "Ha-hahah-ah-ha!\n" + .string "I can't stop sneezing!$" + +Route10_Text_HermanRematchIntro:: + .string "Hi, kid!\n" + .string "Did I show you my POKéMON?$" + +Route10_Text_HeidiRematchIntro:: + .string "I went out to a POKéMON GYM again.\p" + .string "…But I lost as usual.$" + +Route10_Text_TrentRematchIntro:: + .string "Ah!\n" + .string "This mountain air is delicious!\l" + .string "It's so good, I can't leave!$" + +Route10_Text_CarolRematchIntro:: + .string "My head is starting to spin.\n" + .string "I've been hiking for too long…$" + +Route11_Text_HugoRematchIntro:: + .string "Win, lose, or draw!\n" + .string "Now for our rematch!$" + +Route11_Text_JasperRematchIntro:: + .string "Competing is the ultimate thrill.\n" + .string "I still can't get enough!$" + +Route11_Text_EddieRematchIntro:: + .string "You know, right?\n" + .string "Let's go, but don't cheat!$" + +Route11_Text_BraxtonRematchIntro:: + .string "Hi, there!\p" + .string "But be careful!\n" + .string "I'm still laying down some cables!$" + +Route11_Text_DillonRematchIntro:: + .string "I became a TRAINER a while ago.\n" + .string "But, I think I can win.$" + +Route11_Text_DirkRematchIntro:: + .string "Fwahaha!\n" + .string "I have never lost!\p" + .string "…And if I did, I've forgotten all\n" + .string "about it!$" + +Route11_Text_DarianRematchIntro:: + .string "I have never won before…\p" + .string "Perhaps I am destined to remain\n" + .string "that way…$" + +Route11_Text_YasuRematchIntro:: + .string "I'm the best in my class.\n" + .string "I train every morning and night!$" + +Route11_Text_BernieRematchIntro:: + .string "Keep your eyes out for live wires!$" + +Route11_Text_DaveRematchIntro:: + .string "I raised my POKéMON carefully.\n" + .string "They should be ready by now.\l" + .string "This time, they should win, too.$" + +Route12_Text_NedRematchIntro:: + .string "Yeah!\n" + .string "I got a bite, here!\l" + .string "Th-this might be the real thing!$" + +Route12_Text_ChipRematchIntro:: + .string "You're finally here.\n" + .string "Fishing is a waiting game.$" + +Route12_Text_JustinRematchIntro:: + .string "Still can't find a MOON STONE…\n" + .string "Have you found one?$" + +Route12_Text_LucaRematchIntro:: + .string "Electricity has always been my\n" + .string "specialty.\p" + .string "I don't know a thing about POKéMON\n" + .string "of the sea, though.$" + +Route12_Text_HankRematchIntro:: + .string "The FISHING FOOL vs. POKéMON KID!\n" + .string "Another round, fight!$" + +Route12_Text_ElliotRematchIntro:: + .string "I love fishing, don't get me wrong.\n" + .string "But, I wish I had more work…\l" + .string "…It's hard to give up fishing!$" + +Route12_Text_AndrewRematchIntro:: + .string "What's catching?\p" + .string "You'll never know unless you beat\n" + .string "me!$" + +Route12_Text_JesRematchIntro:: + .string "JES: I'll win here today and\n" + .string "propose to my GIA.$" + +Route12_Text_GiaRematchIntro:: + .string "GIA: Hey, JES…\n" + .string "I've been waiting a long time now.\p" + .string "If we win today, I'll marry you!$" + +Route13_Text_SebastianRematchIntro:: + .string "My bird POKéMON remember you!$" + +Route13_Text_SusieRematchIntro:: + .string "I want to be the best TRAINER \n" + .string "while I'm a kid!$" + +Route13_Text_ValerieRematchIntro:: + .string "Wow!\n" + .string "You got more cool BADGES!$" + +Route13_Text_GwenRematchIntro:: + .string "My cutely grown POKéMON wish to\n" + .string "become reacquainted with you.$" + +Route13_Text_AlmaRematchIntro:: + .string "I cleaned out my savings and\n" + .string "bought more CARBOS.$" + +Route13_Text_PerryRematchIntro:: + .string "I'm not going to lose this time.\n" + .string "The wind's blowing my way!$" + +Route13_Text_LolaRematchIntro:: + .string "Oh, you're back?\p" + .string "Sure, I'll play again with you,\n" + .string "sweetie.$" + +Route13_Text_SheilaRematchIntro:: + .string "Can't you forget that you battled\n" + .string "with me?$" + +Route13_Text_JaredRematchIntro:: + .string "What're you starin' at?$" + +Route13_Text_RobertRematchIntro:: + .string "I always go with bird POKéMON.\n" + .string "I've dedicated myself to them.$" + +Route14_Text_CarterRematchIntro:: + .string "I used TMs to teach good moves\n" + .string "to my POKéMON.$" + +Route14_Text_MitchRematchIntro:: + .string "My bird POKéMON should be ready\n" + .string "for battle this time.$" + +Route14_Text_BeckRematchIntro:: + .string "Are you using TMs on POKéMON?\n" + .string "Just holding them is useless.$" + +Route14_Text_MarlonRematchIntro:: + .string "Have you taught your bird POKéMON\n" + .string "how to FLY?\p" + .string "You'll be able to soar with it into\n" + .string "the sky! Give it a try.$" + +Route14_Text_DonaldRematchIntro:: + .string "The legend of the winged mirages…\n" + .string "You've heard it, right?$" + +Route14_Text_BennyRematchIntro:: + .string "I'm really not into it, but okay.\n" + .string "Let's go!$" + +Route14_Text_LukasRematchIntro:: + .string "Hey!\n" + .string "I remember you!\p" + .string "C'mon, c'mon.\n" + .string "Let's go, let's go, let's go!$" + +Route14_Text_IsaacRematchIntro:: + .string "You're here again, huh?\n" + .string "Shut up and battle.$" + +Route14_Text_GeraldRematchIntro:: + .string "We've been riding here because of\n" + .string "the wide-open spaces.$" + +Route14_Text_MalikRematchIntro:: + .string "POKéMON battle, right?\n" + .string "Cool! Rumble!$" + +Route14_Text_KiriRematchIntro:: + .string "KIRI: JAN, I hope we win today.$" + +Route14_Text_JanRematchIntro:: + .string "JAN: KIRI, here we go!\n" + .string "Let's win for sure this time!$" + +Route15_Text_KindraRematchIntro:: + .string "I'm going to keep battling with the\n" + .string "POKéMON I got in trades.$" + +Route15_Text_BeckyRematchIntro:: + .string "You look gentle, so I think I can\n" + .string "beat you.\p" + .string "I'll give it one more go!$" + +Route15_Text_EdwinRematchIntro:: + .string "When I whistle, bird POKéMON\n" + .string "gather around.\p" + .string "They're amazingly cute!$" + +Route15_Text_ChesterRematchIntro:: + .string "Hmm? My birds are shivering!\n" + .string "Wait, aren't you that TRAINER…$" + +Route15_Text_GraceRematchIntro:: + .string "Oh, you're a little cutie!\n" + .string "So like a darling POKéMON!\l" + .string "I remember you now!$" + +Route15_Text_OliviaRematchIntro:: + .string "I raise POKéMON for protection\n" + .string "because I live alone.\p" + .string "That hasn't changed.$" + +Route15_Text_ErnestRematchIntro:: + .string "Hey, kid! C'mon!\n" + .string "I got these off some loser!$" + +Route15_Text_AlexRematchIntro:: + .string "Fork over all your cash when you\n" + .string "lose to me, kid!$" + +Route15_Text_CeliaRematchIntro:: + .string "What's cool and happening?\n" + .string "Trading POKéMON, of course.$" + +Route15_Text_YazminRematchIntro:: + .string "Want to play with my POKéMON\n" + .string "again?$" + +Route15_Text_MyaRematchIntro:: + .string "MYA: Hi, we keep meeting,\n" + .string "don't we?\p" + .string "Help me train my little brother\n" + .string "again?$" + +Route15_Text_RonRematchIntro:: + .string "RON: My sister's gotten more\n" + .string "powerful…$" + +Route16_Text_LaoRematchIntro:: + .string "What do you want?$" + +Route16_Text_KojiRematchIntro:: + .string "Nice BIKE!\n" + .string "Hand it over quick!$" + +Route16_Text_LukeRematchIntro:: + .string "Come out and play, little mouse.\n" + .string "I'll treat you right!$" + +Route16_Text_HideoRematchIntro:: + .string "Hey, wait a second!\n" + .string "Don't call me and then run away!$" + +Route16_Text_CamronRematchIntro:: + .string "I'm feeling hungry and mean!\n" + .string "I really need a punching bag!$" + +Route16_Text_RubenRematchIntro:: + .string "Hey, there!\n" + .string "We'll have ourselves a good time!$" + +Route16_Text_JedRematchIntro:: + .string "JED: Are you here to see our\n" + .string "love, which knows no bounds?$" + +Route16_Text_LeaRematchIntro:: + .string "LEA: Sometimes, the intensity of\n" + .string "our love scares me.$" + +Route17_Text_RaulRematchIntro:: + .string "I told you, there's no getting rich\n" + .string "quick in battling kids.$" + +Route17_Text_IsaiahRematchIntro:: + .string "I'm mighty proud of my bod, kiddo.\n" + .string "Come on!$" + +Route17_Text_VirgilRematchIntro:: + .string "You out for a stroll?$" + +Route17_Text_BillyRematchIntro:: + .string "We're BIKERS!\n" + .string "We rule the roads, man!$" + +Route17_Text_NikolasRematchIntro:: + .string "VOLTORB's going to seriously\n" + .string "electrify you today!$" + +Route17_Text_ZeekRematchIntro:: + .string "I leveled up my POKéMON, but it\n" + .string "absolutely won't evolve. Why?$" + +Route17_Text_JamalRematchIntro:: + .string "Gaah! I really need to exercise\n" + .string "and seriously trim some flab!$" + +Route17_Text_CoreyRematchIntro:: + .string "Be a rebel!$" + +Route17_Text_JaxonRematchIntro:: + .string "Yep, that's a nice BIKE!\n" + .string "How's it handle?$" + +Route17_Text_WilliamRematchIntro:: + .string "Get lost, kid!\n" + .string "I'm bushed!$" + +Route18_Text_WiltonRematchIntro:: + .string "I've been checking every grassy\n" + .string "area for new POKéMON.\p" + .string "But it's not always easy…$" + +Route18_Text_RamiroRematchIntro:: + .string "Koorukukukoo!\n" + .string "Is my birdcall getting better?$" + +Route18_Text_JacobRematchIntro:: + .string "I warned you before, this is my\n" + .string "turf!\p" + .string "I don't want you coming around.$" + +Route19_Text_RichardRematchIntro:: + .string "I'm almost warmed up to go\n" + .string "out for a swim.$" + +Route19_Text_ReeceRematchIntro:: + .string "Wait! Slow down!\n" + .string "What if you have a heart attack?$" + +Route19_Text_MatthewRematchIntro:: + .string "I love swimming!\n" + .string "I guess you're the surfing type.$" + +Route19_Text_DouglasRematchIntro:: + .string "What's beyond the horizon?\n" + .string "Have you seen?$" + +Route19_Text_DavidRematchIntro:: + .string "I tried diving for POKéMON again,\n" + .string "but it was a no-go like before.$" + +Route19_Text_TonyRematchIntro:: + .string "I look at the sea to forget all\n" + .string "the bad things that happened.\p" + .string "…Like losing to you the last time!$" + +Route19_Text_AnyaRematchIntro:: + .string "You always get to ride your\n" + .string "POKéMON…\p" + .string "It looks so relaxing.\n" + .string "Can I have it if I win?$" + +Route19_Text_AliceRematchIntro:: + .string "Swimming's great!\n" + .string "Sunburns aren't!$" + +Route19_Text_AxleRematchIntro:: + .string "These waters are treacherous!\n" + .string "You shouldn't come back here!$" + +Route19_Text_ConnieRematchIntro:: + .string "I swam here with my friends…\n" + .string "I'm tired…\l" + .string "Must we really battle again?$" + +Route19_Text_LiaRematchIntro:: + .string "LIA: You know my brother just\n" + .string "became a TRAINER, right?\p" + .string "I want to make him better, so I\n" + .string "need your help again.$" + +Route19_Text_LucRematchIntro:: + .string "LUC: My big sis taught me all\n" + .string "about POKéMON.\p" + .string "I wonder if I'm better?$" + +Route20_Text_BarryRematchIntro:: + .string "The water is shallow here.\n" + .string "There are many people swimming.$" + +Route20_Text_ShirleyRematchIntro:: + .string "Are you jealous that I'm\n" + .string "vacationing on SEAFOAM?$" + +Route20_Text_TiffanyRematchIntro:: + .string "I love floating with the fishes\n" + .string "here among the waves.$" + +Route20_Text_IreneRematchIntro:: + .string "Were you on vacation, too?$" + +Route20_Text_DeanRematchIntro:: + .string "Check out my physique!\p" + .string "It's even more buff than ever\n" + .string "before!$" + +Route20_Text_DarrinRematchIntro:: + .string "Why are you riding a POKéMON?\n" + .string "Haven't you learned to swim yet?$" + +Route20_Text_RogerRematchIntro:: + .string "I rode my bird POKéMON here.$" + +Route20_Text_NoraRematchIntro:: + .string "My boyfriend gave me big pearls.\n" + .string "And, they've grown bigger!$" + +Route20_Text_MissyRematchIntro:: + .string "I swam here from CINNABAR ISLAND.\n" + .string "It wasn't easy, like I said.$" + +Route20_Text_MelissaRematchIntro:: + .string "CINNABAR, in the west, has a LAB\n" + .string "for POKéMON.\p" + .string "My daddy works there.$" + +Route21_North_Text_RonaldRematchIntro:: + .string "You want to know if the fish are\n" + .string "biting?$" + +Route21_North_Text_WadeRematchIntro:: + .string "I got a big haul again!\n" + .string "Wanna go for it once more?$" + +Route21_North_Text_SpencerRematchIntro:: + .string "The sea cleanses my body and soul!$" + +@ Unused trainer from RB that had a rematch intro added +Route21_North_Text_CueBallRematchIntro:: + .string "きょうも およぎに\n" + .string "きちまったぜ$" + +Route21_South_Text_JackRematchIntro:: + .string "I caught my POKéMON at sea.\n" + .string "And that's where I train them.$" + +Route21_South_Text_JeromeRematchIntro:: + .string "Right now, I'm in another triathlon\n" + .string "meet!$" + +Route21_South_Text_RolandRematchIntro:: + .string "Ahh!\n" + .string "Feel the sun and the wind!$" + +Route21_South_Text_ClaudeRematchIntro:: + .string "Hey, cut it out already.\n" + .string "You always scare away the fish!$" + +Route21_South_Text_NolanRematchIntro:: + .string "Keep me company till I get a hit.$" + +Route21_North_Text_LilRematchIntro:: + .string "LIL: Huh? A battle again?\n" + .string "IAN, can't you do it alone?$" + +Route21_North_Text_IanRematchIntro:: + .string "IAN: My sis is still a slob.\n" + .string "Help me get her into shape!$" + +Route25_Text_JoeyRematchIntro:: + .string "I won't lose while I'm here!$" + +Route25_Text_DanRematchIntro:: + .string "Dad took me to a great party on\n" + .string "the S.S. ANNE at VERMILION CITY.$" + +Route25_Text_FlintRematchIntro:: + .string "I'm a cool guy.\n" + .string "I've got a girlfriend!\p" + .string "I'll show her how cool I am for\n" + .string "sure this time!$" + +Route25_Text_KelseyRematchIntro:: + .string "Hi!\n" + .string "My boyfriend is cool!\l" + .string "My conditioning's good today!$" + +Route25_Text_ChadRematchIntro:: + .string "I had this feeling…\n" + .string "I knew I had to battle you again!$" + +Route25_Text_HaleyRematchIntro:: + .string "My friend has many cute POKéMON.\n" + .string "I'm so jealous!$" + +Route25_Text_FranklinRematchIntro:: + .string "I just trained up on MT. MOON,\n" + .string "but I've still got gas in the tank!$" + +Route25_Text_NobRematchIntro:: + .string "A POKéMANIAC lives on the cape.\n" + .string "Have you seen his collection?$" + +Route25_Text_WayneRematchIntro:: + .string "You're going to see BILL again?\n" + .string "First, we battle!$" + +Route24_Text_ShaneRematchIntro:: + .string "I saw your feat from the grass!$" + +Route24_Text_EthanRematchIntro:: + .string "Okay!\n" + .string "I'll stomp you!$" + +Route24_Text_ReliRematchIntro:: + .string "You always look so busy…\n" + .string "Aren't you getting tired?$" + +Route24_Text_TimmyRematchIntro:: + .string "You really must love coming to\n" + .string "NUGGET BRIDGE.$" + +Route24_Text_AliRematchIntro:: + .string "The time we battled…\p" + .string "Even though I was the second in\n" + .string "line, I was the best, wasn't I?$" + +Route24_Text_CaleRematchIntro:: + .string "People call this the NUGGET\n" + .string "BRIDGE!\p" + .string "You've already beaten us, so you're\n" + .string "not allowed to take the challenge…\p" + .string "…But, you're welcome to battle with\n" + .string "us again.$" + +OneIsland_TreasureBeach_Text_AmaraRematchIntro:: + .string "Lying back, rocked by the waves…\n" + .string "I don't notice time slipping by…$" + +OneIsland_KindleRoad_Text_MariaRematchIntro:: + .string "The weather's gorgeous!\n" + .string "I'll try not to spoil it.$" + +OneIsland_KindleRoad_Text_AbigailRematchIntro:: + .string "My sunburn is starting to hurt…$" + +OneIsland_KindleRoad_Text_FinnRematchIntro:: + .string "The fire bird's mountain casts\n" + .string "a huge shadow…$" + +OneIsland_KindleRoad_Text_GarrettRematchIntro:: + .string "I have this strong feeling that\n" + .string "I can win this time!$" + +OneIsland_KindleRoad_Text_TommyRematchIntro:: + .string "Wait! Wait a second!\n" + .string "I'm sure I've hooked a big one!$" + +OneIsland_KindleRoad_Text_SharonRematchIntro:: + .string "You'll help me out with my\n" + .string "training again?$" + +OneIsland_KindleRoad_Text_TanyaRematchIntro:: + .string "We haven't missed a single day of\n" + .string "training yet!$" + +OneIsland_KindleRoad_Text_SheaRematchIntro:: + .string "Every morning, before breakfast,\n" + .string "I swim around this island…\l" + .string "Three times!$" + +OneIsland_KindleRoad_Text_HughRematchIntro:: + .string "Dress appropriately for battle!\n" + .string "Lose that frivolous outfit, I said!$" + +OneIsland_KindleRoad_Text_BryceRematchIntro:: + .string "You know, everything tastes great\n" + .string "when you're out in the wild.$" + +OneIsland_KindleRoad_Text_ClaireRematchIntro:: + .string "I ate too much again, so will you\n" + .string "battle us for some exercise?$" + +OneIsland_KindleRoad_Text_KiaRematchIntro:: + .string "KIA: My big brother and I make\n" + .string "an awesome combination!\p" + .string "We won't lose this time!$" + +OneIsland_KindleRoad_Text_MikRematchIntro:: + .string "MIK: Together with KIA, we're\n" + .string "afraid of nothing!\p" + .string "We'll prove it to you this time!$" + +ThreeIsland_BondBridge_Text_NikkiRematchIntro:: + .string "Are we to battle again?$" + +ThreeIsland_BondBridge_Text_VioletRematchIntro:: + .string "From where have you come, and\n" + .string "where are you bound?$" + +ThreeIsland_BondBridge_Text_AmiraRematchIntro:: + .string "I want to swim without my float\n" + .string "ring soon.$" + +ThreeIsland_BondBridge_Text_AlexisRematchIntro:: + .string "Yay, yay!\n" + .string "POKéMON!$" + +ThreeIsland_BondBridge_Text_TishaRematchIntro:: + .string "Oh, no, didn't I tell you already?\n" + .string "Please, stay away from me!$" + +ThreeIsland_BondBridge_Text_JoyRematchIntro:: + .string "JOY: We've gotten stronger!\n" + .string "Lots and lots!$" + +ThreeIsland_BondBridge_Text_MegRematchIntro:: + .string "MEG: You can't beat us today!$" + +FiveIsland_WaterLabyrinth_Text_AlizeRematchIntro:: + .string "Oh, hello!\p" + .string "Are you raising your POKéMON in a\n" + .string "good environment?$" + +FiveIsland_ResortGorgeous_Text_DaisyRematchIntro:: + .string "With these hands, I will create\n" + .string "my victory today.$" + +FiveIsland_ResortGorgeous_Text_CelinaRematchIntro:: + .string "Must I repeat myself?\n" + .string "I'm trying to paint.\l" + .string "Please keep out of my sight!$" + +FiveIsland_ResortGorgeous_Text_RaynaRematchIntro:: + .string "I haven't made any progress…\n" + .string "I still can't get the right angle…$" + +FiveIsland_ResortGorgeous_Text_JackiRematchIntro:: + .string "Oh, you will give me another\n" + .string "opportunity to match wits with you?$" + +FiveIsland_ResortGorgeous_Text_GillianRematchIntro:: + .string "They're almost finished making the\n" + .string "pool for my POKéMON.\p" + .string "You must drop in for a visit.$" + +FiveIsland_ResortGorgeous_Text_DestinRematchIntro:: + .string "I'm a good runner.\n" + .string "I've gotten even faster!$" + +FiveIsland_ResortGorgeous_Text_TobyRematchIntro:: + .string "I say, friend!\n" + .string "Let us enjoy our time together!$" + +FiveIsland_MemorialPillar_Text_MiloRematchIntro:: + .string "I'm the eldest of the BIRD\n" + .string "BROTHERS. Remember me?\p" + .string "That's right, I'm the one who loves\n" + .string "birds for their beaks!$" + +FiveIsland_MemorialPillar_Text_ChazRematchIntro:: + .string "I'm the middle kid of the BIRD\n" + .string "BROTHERS.\p" + .string "I'm the one that loves wings.\n" + .string "Let's battle again!$" + +FiveIsland_MemorialPillar_Text_HaroldRematchIntro:: + .string "I'm the youngest of the BIRD\n" + .string "BROTHERS.\p" + .string "I love birds for their down.\n" + .string "I didn't think I'd see you again!$" + +SixIsland_OutcastIsland_Text_TylorRematchIntro:: + .string "I'm still having no luck at all.\n" + .string "A battle'd be a change of pace!$" + +SixIsland_OutcastIsland_Text_MymoRematchIntro:: + .string "Gasp… Gasp…\p" + .string "I swam here from SIX ISLAND's port\n" + .string "in one go again.$" + +SixIsland_OutcastIsland_Text_NicoleRematchIntro:: + .string "You always come along while I'm\n" + .string "swimming.$" + +SixIsland_OutcastIsland_Text_AvaRematchIntro:: + .string "AVA: Let's have another\n" + .string "two-on-two marine battle today!$" + +SixIsland_OutcastIsland_Text_GebRematchIntro:: + .string "GEB: My big sister and I are way\n" + .string "tougher than before!$" + +SixIsland_GreenPath_Text_JaclynRematchIntro:: + .string "…Huh?\p" + .string "I envision my house, but TELEPORT\n" + .string "always brings me here!$" + +SixIsland_WaterPath_Text_RoseRematchIntro:: + .string "Oh, hello.\n" + .string "A pleasant breeze is blowing again.$" + +SixIsland_WaterPath_Text_EdwardRematchIntro:: + .string "Hehehe, I'm practicing in secret\n" + .string "again.$" + +SixIsland_WaterPath_Text_SamirRematchIntro:: + .string "What, you're sick of seeing\n" + .string "SWIMMERS like me?\p" + .string "Aww, don't be hatin'!\n" + .string "Battle with me again.$" + +SixIsland_WaterPath_Text_DeniseRematchIntro:: + .string "Sigh…\n" + .string "My boyfriend's busy again…$" + +SixIsland_WaterPath_Text_EarlRematchIntro:: + .string "Come on, tell me, where are the\n" + .string "mountains around these parts?$" + +SixIsland_WaterPath_Text_MiuRematchIntro:: + .string "MIU: Hello, POKéMON!\n" + .string "It's time to play again!$" + +SixIsland_WaterPath_Text_MiaRematchIntro:: + .string "MIA: Hello, POKéMON!\n" + .string "It's time to battle again!$" + +SixIsland_RuinValley_Text_StanlyRematchIntro:: + .string "There appear to be many secrets\n" + .string "still unsolved in this world.$" + +SixIsland_RuinValley_Text_FosterRematchIntro:: + .string "Hi, didn't we meet before?\n" + .string "What compelled you to come back?$" + +SixIsland_RuinValley_Text_LarryRematchIntro:: + .string "It's been said that there are\n" + .string "mysterious stones on this island.\p" + .string "Have you discovered anything since\n" + .string "we last met?$" + +SixIsland_RuinValley_Text_DarylRematchIntro:: + .string "A rematch with you, so high up!$" + +SixIsland_RuinValley_Text_HectorRematchIntro:: + .string "I'm pretty familiar with the land\n" + .string "around these parts.$" + +SevenIsland_TrainerTower_Text_DarioRematchIntro:: + .string "I sensed your approach.$" + +SevenIsland_TrainerTower_Text_RodetteRematchIntro:: + .string "Somewhere on this island, peculiar\n" + .string "POKéMON are sleeping.$" + +SevenIsland_SevaultCanyon_Entrance_Text_MiahRematchIntro:: + .string "Kyahaha!\p" + .string "Coming back won't change a thing.\n" + .string "I'll flick you away effortlessly!$" + +SevenIsland_SevaultCanyon_Entrance_Text_MasonRematchIntro:: + .string "Howdy! You're a member of my\n" + .string "fan club, isn't that right?$" + +SevenIsland_SevaultCanyon_Entrance_Text_NicolasRematchIntro:: + .string "This island is too spread out…\n" + .string "Patrolling the place is a drag…$" + +SevenIsland_SevaultCanyon_Entrance_Text_MadelineRematchIntro:: + .string "I don't forgive people who abuse\n" + .string "POKéMON!$" + +SevenIsland_SevaultCanyon_Entrance_Text_EveRematchIntro:: + .string "EVE: I'll team up with JON and\n" + .string "battle together again.$" + +SevenIsland_SevaultCanyon_Entrance_Text_JonRematchIntro:: + .string "JON: When I'm with EVE, it feels\n" + .string "like we could never lose, not ever.$" + +SevenIsland_SevaultCanyon_Text_CyndyRematchIntro:: + .string "Let's have another battle.\n" + .string "My conditioning's in top form!$" + +SevenIsland_SevaultCanyon_Text_EvanRematchIntro:: + .string "It doesn't matter if you happen to\n" + .string "have the strongest POKéMON…\p" + .string "It doesn't mean a thing if you don't\n" + .string "know how to use them properly!$" + +SevenIsland_SevaultCanyon_Text_JacksonRematchIntro:: + .string "I work to protect the environment.\n" + .string "In turn, nature protects me!$" + +SevenIsland_SevaultCanyon_Text_KatelynRematchIntro:: + .string "Every time we meet, you have those\n" + .string "snazzy shoes on.$" + +SevenIsland_SevaultCanyon_Text_LeroyRematchIntro:: + .string "You must have gotten tougher.\n" + .string "Let me battle you, please!$" + +SevenIsland_SevaultCanyon_Text_MichelleRematchIntro:: + .string "I was given the best possible\n" + .string "education to become this strong.\p" + .string "I won't lose this time.\n" + .string "Absolutely not!$" + +SevenIsland_SevaultCanyon_Text_LexRematchIntro:: + .string "LEX: My darling NYA, together\n" + .string "we will win for certain!$" + +SevenIsland_SevaultCanyon_Text_NyaRematchIntro:: + .string "NYA: I won't drag down my mentor\n" + .string "LEX! We're going to win!$" + +SevenIsland_TanobyRuins_Text_BrandonRematchIntro:: + .string "Have you discovered anything about\n" + .string "this stone chamber?$" + +SevenIsland_TanobyRuins_Text_BenjaminRematchIntro:: + .string "A mystic POKéMON is said to sleep\n" + .string "inside here.$" + +SevenIsland_TanobyRuins_Text_EdnaRematchIntro:: + .string "My teacher is showing me how to\n" + .string "paint some more.$" + +SevenIsland_TanobyRuins_Text_CliffordRematchIntro:: + .string "Today, in addition to our lesson,\n" + .string "we came to see the chamber again.$" diff --git a/data/tilesets/primary/building_frlg/metatile_attributes.bin b/data/tilesets/primary/building_frlg/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..3dbc31883fdd14f31c7b86981508cc08ed3cc395 GIT binary patch literal 2560 zcmeHHF;W9D4D?g>X=&&Jyn#tz2GUS4Ljn0KySC*hj_hz(rHE$sPF}5KTW4QNp@A%( zi7;CDtdY*};C$nv_x4;z$*D%*=lF4;IgtOTc;Q=kBi<{5dRV||Zg1dV36wk4Zz#}u zcLf~H^*;XHX|;Eu=Y5X%e@Z^73j>)3_gzicVqVw#-8#bD-);@B91Hu?{FbLT0*KG1 zvtZv{efW&^ptwQvf0eOnH2$CdwVaE1y;E%-JG*{9tzB?^Z+fruesHH4E_=)YI*2sSJBYxgPY)2N=i4@^smXK`xR u;?v}N@ZN#j?f|$vVPs%ni0;3PM{1uY`avzyXLAh4te;rl40Hq;BK!eX;Zy4X literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/building_frlg/metatiles.bin b/data/tilesets/primary/building_frlg/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..024797c8ee2b805df8566a62fb4e65f3244dac39 GIT binary patch literal 10240 zcmeI2YjhRW7035nhY$mixk)53fX+>C(|}aN1(J}oqL)W7DFH8!fD+Lb1XTL)i7${O zZ~=Lg5FTxPfLKsLOD^EZ!>%w%CiJ1@t$pYMZTq2XwTnmF5B<{aJ(K_B+{;>}{m|7f zclJ6-esj**d!K#I*=G()l>A(0=ti!QXW(rgBg42cg;VQuje&mqVKj_NXed>&0x6@Z zn7%?~P)DA=fyN8wQgfZTE^JIq7Sy9dAND8J{*8*g>)1cleg%yosUJ?a(bwn>Dreim zx6xObzRvbNeH+a6rr5xEucs`!i3)poppm6tuNUe!>8K|fz^!lb+mEHO`V^Yt*ALLS zmP^107&$DW`&KS0hp5PB`FjLKTz%qSKk83|XfU(Hd!W%@@23ye2kD3o(e0v=z;kIX zTkGZ9U81YvOKc-TBiYtnG?ngg{~kqOrYMc07)>M1(2O99=#nRyv$?jn{)W8lJj7## z-mGudTmA7j(+X;(&3=3kU(Dy1DD3L5q)K-_T;LySeB@m(4{?10-<&rjPwG{F?xva~ zuBC4zaWzd!;_);gi6<)dCQ}_X(EYys7il?tpEmm3NKMp2n|z*4_tGMI*ysCb4n0DT z`dm-5XaOzsc{jk;Jdl&Ln<@o=xKC==mgmnwBK- z6ZB*fKSg)CjQ9#{p{>4u!dtK6Z9Vf_VD>dL&3v=Kl=V=+zcX2+kNhnnf6L?5=NXyd zzTtv!ei-ZL0eXdvh zR+1E~*OmOYNH4EqTE+epn7Lf?O(H4KkNpeA{w**iK9W!Kc?0B!p%3E+@1orj0^i>5 ztN2Z~-m{-)cxFl8;joACOTHGtgZ{F9-y?^1 zG&VN2HMTTP4%P)5g7*i<2ImH+1iuqRd+5V_fDv!RBTLVsLcP$BSAV@f4b}(K0V82_ z8g@_qImnb?0uv>S19`U5>F)i5{8O!8ZLTp@UK3s&R#|*h`4n?|={}bB($jQ?zM$We zZR}_1VEYHTboG$1_v~k1I{2;F?&9LL?l68}{?L5OeA@)SWUe)TWWMb4dAdLs>5||6 zbJ|9idHuANdUA#SN@wYu&#)-9$5>$B<2Gim1?mr(hfQe%J{&&eCRi}m6Zj4Kv8z&8 zm`WyY7`|o3F_w6A*ZsQ*P(ms{>1L zx){0?!uU_nNz%1Gnz}wMdf%UqPmRxvKO28BpdVZoEsIWM!F;Ito3$01$}6?FhW&gw zbR{HxU_YXb)MWgapKdx1mH+nl%;?PMLo8?n{jJ(&P2PdGXj_w5wJ+;?7kT+Cbv*Ua zSuFLwezjiCbCt!O%5uJ|Ea$t*rGXIvmER8S38ju_L3AO@0^h#aP#?6%_W~H_I~eCX z_|CvxfvJIe0^q};BcZ*acS5Q^**ODpR9>sC)8G%zb1=Raz&PK*IN!k!1Re~?IKW3k zAGqrQ{tU^vB}eMPFKe&3^QZbFd(4}kNzw9XMYNiuBs__wf<^j!T+dX_;jf-3bs{() zz&IbkqXMG?;{y`{;L#bQGA3k<&wxMjtsr}>o^^>uu`LDd#kM?Nt*oDF*S_k%>_2sV z$$CQn>46!6d4c)9{TUh4Gv;T^%Rs#3TR|Sre!XkIyr!Z?`eVITxQz8%J+Y#uybk_j z{kuw(AF6-yI+d?=pMrn5PpSRo`&ec9KJFdAmv7-8zIVa+-j(~5><9HeC5-#j0v`QB z-mm!HM}K@DgYkU~`^fL`AK$xReD9*a#76E@D$5-TjQbS&#`|MxV@-EZLcwL>mLAL0vr>U~PhS7?v( z2<^eJ{{j7!KBSM5)<;vIIVnF%%%{aXS*k75)@vIy@T=Nu+Pm6Mv@x+UvAbEMt?aMa zvDvXjELiVe`5I9K{4I~#U)ZbdZLikLepNZOzvO?lUh==nlK)kf{11OcmpmAs zM;?n$V6;d62P6N3k^jNS|6t^Q)gPj4LuJYT@CW%HjQkHq{s$xfgOUHi$p7$%$h&WY zk^fbHWDR@sQyZy_R7Gkc-h9`$ zY9ms_wiL9-{CKr8Up20M&)--K>lZBTWj&!k@;?~)AMrx|_w2`FV!N`ks#4mEPSIE8 zvS&f;S5;Qt;ZZDx{UYtuM~$z%PvvXnfB1*|r1qEmud?KS_=A7XLVS_`!D{{&8*2U+ zM*g413Z)=Fp+E9J82KOek^kX8@;?~)AN?gZlK)kfoDW9+M}OphF!Dd_Bmb-Mk^HZ+ ze6N-Np&$7k{lQpY$p7#k`5%n@4}FL)^r`t@-bsAqL3`wTvN}UegEqkr%HadJT753UQ; zWvD#arQY=mf8jswPhi}iU=QO_=S${8Wtk6^Wj+vJ#1D-4Nqf0lim&qEp6L;h+(E?$ z@IN(A!0LTd&MVyiaDJd&`gb}4=?J7Fkd8n)0_g~(Ban_jIs)kk{Qo1cJkglgm}p6m zCjaRus5K>;6PpsPKL4*hgnd&BX{Fi--@eMOe?5*g!QcPZG5P;vq@+CC?H%?$yUq4q zx7*<3cBgIIXY6LX(QdU{>@$w-eC(WZz@5%eXE~M~z2lj|g zxITbS*&o{-c9$)BMb0@L&ROR)Tku4D>Ed@go!6cHPQp3SQv)XbQ@^eB_@(m;=TFXW z`P~&RKXa})mz|$;fjy#QZ2zP`{?qnZ`x6$}>vp=GPgua>i||foJKNvq9OIgkTy`+G zF_Zogm(QHvIltoHq+fC_IbX2+#`$#*Uu62+w=c1lG0$n5)AT5d%*TP;gSidyhWKKZ zC#}b=6;_i47M=2Lx!q)MvNyVZIy@(D*gNfnz2A+c+{IsW8ts2LEiRw8FW9~PU$97D zXJPyu_BmU|+|bm}w3wwcw<}kCxG#Qh{E_&>@u#gPthm)|fyI}n_#GH=N#*CQ=d88X zOKi)Nq1I6AS?d|swraoI?snr1f5i52+p(c z*!~9!X2zC!M@L7$fB&ADnd$HEZ*FcbD=T~Y^l5T(a$sPflarIVxw(#x&dHM}2?PQT zhx?bLyFRxI0RL~Jb2^qGPhUTc^cLt2>b_;F15+@!8^gX`GDvE;s+ev(d}A{cw$r~G zHed8sD(M%xW#5O6%R|f%EA#4NWC>a3+^xgH5_XZ{5ANW>aokl;F&8vX*C)(#+Izc$ z)((>^?QR+D_!m;)l}`bhpRf|<7qPN3BdEv2w;VyMTbuaPv~_*4ef8lwU=cUDo5@3#|($fM5g+t-?yMVW8g^z4)Gc3E2Gj_Xr zQLUZ!HSiG&rPPQbX=CvKuB0969gWt_LX^80%6TTUA_UiILvV#D?S=q?sx!@n0bY$E zf{c-Kr-+Rvu&qM_;I}ygw$RjrOq6B*I-SDL0%_;1ZZtXn7m*F?t89}V0Dv!&h4h^k zmyDpDfrh$`pn%23-2A_VR5qwlX1JkLJ zt02gR!(1a4qKI5VQ-yO~Vk{$*kQy?AaG@!k*-II<1>UAriGKuY$otgHJvK7;f8jMw zXWE6daO2uvwf~bsr+(ND1K!emHzbSIT zOS4?$4{KY45l?d8aj_vW3WEDTWkor^&NBG_6=t9ud^5jBu-=tawt5CBaNk1y=ri^> zU6~THu%kx#8;pD|$Kz7RuPIg2ym}Kwy5nd~96)>hrEgF?rNNFYJ|N3d;wAnX;O}Ni zpTn|P+sK`ndMyLK8eb}2AK>PcUr3Px7dB(WfUHUch&|+9Fd^^8=NstPh*Pdv zc>j6%ZY_|ktZoXv1`1w!e^ZP3XP-bGw6thD)#i41TdG%cHU%<|&*s^39?MotYmfrqNDw_xwcC(W0^>CEFA7ZJN|w5&rutXTDdAo#o$hKNN>95y3%&#TRC zJSsj_@@rNdG`HtE|1Z8=XfZd~3qxpdQ5`wXkE5&{k9$V4lNeNQ7qRE%Rzal-`0Bif z6TRk&JLd|+Vxr_qbE|Zk+EFnvrKLJoR12K`hFWc9u-=PBFepTiwNecK3$C_$%|iTG zP0CrYV8Uf>met!<+b>az*lt>rJ!0Z3v1Idu^`E;DhF>0^U)(;=PO8F?Lv)6Rtj~** z0#;QJMZOt*3^TFBjMnn8f5 z=dAvxJbyf|K5v1Jg^KY>0a|B-Vu3gmpxVXh?p*p`zYddlUvYI7o6n52I%hF#$pQTr z`gGkNJIZ|eM$fH=d=@GFvrxvJwG9ZY%J2#sTU)LcZ+-eF}LOdZjK0Y1*<5VE|tOPS;(rV>i z?|3ZWph6F}cM3tpt`*y{sig6etmw?yahzCo^z2O6Ch#b6Vap|bnt{{@t$F`gi9(}Y~ z^S%>UiCTdnw>JN*!QHogHV3D^uj~()eQ>usF2j3!)YlX*fV&r*=^9G9BiR3N=_D}# z2EEgK^D$MWe7|IWz3yfr-L7;>Hp(|OQp!RUn(}v|7!vB3Q#3iRBMt6fc;Z{TB&>@e z6?j~*;|l?M^rj8YpYo^^RUsyG7c=~OJ{9jgx%2Ldrul1!*H(f{h8wR8lL29X75Elo z$X`>tArPrYNf$N1!QW+M;FUSXA_wl0U_Q?AA$0Jr2t{k;FN2vm=Q;R>BqgT93JUM* zJTNYu`toujAgr}d7V4XCFf+RZG|nDFnte&{YwJ7V(eJcz_Pf5cxdxeEdOH4#^VO%xyB&Ta==OjrigN#Pm>%9S-)Ll0#Llv zI7??-|gZE+EsDrVjPC2U<9<1MN$MG*}!JPYD+ zP0DrnYgk?Tzhwy`$Jgb{8a_r`g0?FGh2R16Q0~0}wM{J=X2$#Z! zGt|W+_)jw=|+rPPP*-X0?CWq%eJ;Q}ao87OL)34Y@a7j>`K zzEuFI%(w=$&4aMKC8i6M)rD@yA|atvqy*#63WEIR+LQXD->2V3CnEpzcdaw4rwU=( z37GcA=Y)37Z?EN$%^=ph zO3;mau0747=zj(7)BmSK<4|&HX3>|^IBJp&e#J*=V|KeGZ9b&QLSnFb)BZP^Q-P9! z_1B3C+%|u#rXaJuz@oxd(Q+QUZDlH;p!$brsi6ZJQ?+lwxL|M8vBbz>=It+~t#<7d zs!`&prJZ4gsI=&G1j5)ouNTy$KkMbqcH*R;&mSjVQdm)d7wT+t)1ncg4?lcV!=?K2 z38=IZz|9f4ozdg2OLCElBPXoAM2&Y9`^^%9?RiJ#Yi(Q_*G^|LoaN9;Fd@c~!3^ip z8E9{7R-tT(4}Ogo0UPM5C`PzGbWr(3kTo>`aMF==uE+6RnxtM(5ZpAQigPBeq@?r& zIwzi^7xB;+b9jYdglHmMYBj1FD`)O2hY$9@4JC{1BHn~Ncys>o>-y?>~%R8k9Ju1a(UZjN`Jd3w0v0O};{xLH3VCj2iRV(FvAYI!jB(so@+#}B~7I6f+L}o0d=G;HTe>IY~Ot z9A&?V4-0!HORAW{_)s~sbH{sY3;h@MD-*#FE+M%eQ+@x*@7uE9@JfE&Z^aHu!m3$P z`N55`0v(|4%&Rvt5CmpyZ@Z~d^7)ZjHC{St-H^1TsR|Y3BJ$)C?L?PxNeRA+uwyFE zDcSgwi5J65FMmT)ZuqcGsZCNeg;*h)xs;`z4zMQi@kM%msF1%opH$054AxR#ssH%m zTbrpkHQU4zwus8CT+wfTyJL3mo%}rl$jZq>!VO}^GB)`o{W3(!+N=DN4oKqNjkd}8 z-nA3gz#6BE0F!|dBN(+KIrOC9yIh9FMV)f=ZBCTQTP>9`z*D3S&F{MRxae%69S2Ab zAz!tvjaMCP?3%P9p8?&}@+#HAHgB!6c;!4xh%!I~vyov&>ur-FuScf(-l9@EfE5Dx zHZA0-*FITjPSY0?hUg;?$38E*<>#cVIL~Y|K?IWtZ^5ZiCOQSmy^2xydStS$oi2vL zRuTm~>eKJYiSQ8z?(O%J{JXUSC2U^Hx72P3fu1hHC7-sIk>rh$LlGoK`SjR`nP>9* ztRr;Y>g0J<_?mWe5449O!{&lNk6{TQ<|MOtktYUA0zcqX}C(A!sJ93Xiy7FSx9%%%XajJ(F{~B-Y!?VT)@= zyMcpIh=XH`u9G;2;~7|zlB=_0QC6k93G6yzP6w61VQHTSG}5Nr(5|+7Y zHcnjnP=Xfrl-OVxT-aX8KA9Y z;GV61eG8+!FsH&}-YQ=fVBiG%_EU9*dn03BU&2%3yvBSIiOGU6>`t6VHLd?_SMfXui>rcGXQF$u@OP5B069N0I(skSR7igWV+lK3GcMKdbwr%A7@fqy8tS3 zj@p7Oi3p*53`ms6DZENnfon_`CR(%7d88yNe0(e`Oc3QHUNS-`iR;Q?JKGRZ1M$cZ zbarql9f!(k3JB*`#T_wu-5NClo8kT=`%v@?KO{9BkSjm^IHK=XBiJQ93e|Hs8OT@I zZ4F3e9w>nrk$?NhM(?mLVm^QX4wd+aolN{25u;;<|3qWOJsl3d;qI%iy_KyNJLT2h##&0;0!Vvlywd);*oX{~ zY?JhMWFnp0IWE@pPoI-t0gLK~&8if&rW-u7CfOgW2^J8l5rlJ*>eCUjZ(A+48oD_Afd z@6F`j%;En8d6Tk<>sR%M;Zak^=CJi9frK;H8m27ci+hnFcD2_jlzFW8+vpU zi7fEX*!`7k>{v$xXmbhbA)U=1f!QrdOfb~MA1--d$y@$fbwrItqnDHLqY~_wv;0R@ zZA2U{_XpEv{hm9@dB;N`k>neX_yeR6r0FveInh8FWodH#KoLZ5;(fpmol`c5|uVBhq`jcg=Q8!T%=@80=6&-Wb{uop*j z8g>PtY0Ei5I111fiz+&_xXXknzr#7_Jp#!r)w*tE;&m(h_WmS0(Ym2Q(9PY2LoshI4SiD=XZ!F2&5l=pLd6@QvvAnNd?kFdW@^sy{K z$Z)q!SwG^JJx^8et$HJ;`YI&9di9N!Dqak_A@heVNf377U@0p&#abo<+qiwIKO5oJ zJneWc=a)?u8)5if{ZZ$ax6kpX&eIvF{tl9+Z(ER?s80>FmC5xNgXVXg{V0{6%R#_F zr6ge^BFq%Hy4-Yv^S9=~g#(rc*8ZIv2CjVmTSTe-4?sF-ygJ1uU}wW%jS_I_Nb=TY zUWDQjiuSAEx*$e%U?xfnIX&RVeKp|VWDzmSqigS1pY7@%9kfqlf_^`pwh8Lo=tds% z8%t6srw*CP=93os^oanxZkXRK^i-2od{Fu`_1}d=+vUCA(`n3~hWWqwShK(&f%pZi zqTBC^3&j!s5;oIFilJ0b$=0TP{l7G<*>voz!ChH1TF6$R4OcPvI=3~LeV<`X=h)A< zqDZ=fkl+QmaiV=>3e=G)G^37K(=ia(HX+V190VbTHo9j(7Us-6b*1YzZ|;PeE?6(% zqc6VK@%w2C^6!FvB2VD&hE)f{E#}ymV~v~l(a>kN&Vw&UE5RZ8c#`&e`WQ&5`w6c5 zO`V_v>9R!=K9EwHj@ozbd!2dXgloP1JnU8+$8MG?M!n`^;LDyh4VB#bNrDuX(@_Xc z6nO|qGv-Cw+(jW0xwL0=as|vdAvR+AP(CFQKa4{R8L^Y}*=c`<$1tuYrytkj9G(wCJ_m!mzgGKy*oYzx3>zU@~nFm-Ah@E_rAt*xs zf_;t?I1+PU8E41;z6%iK9A$|p$o&4X@?L+S{w`5W4_HuX)$gS_j1BB_mN%~nxYH(> zA>A=GzC^HW8}d*tJhC)Eb}enNN~LjbIFg;h{;=@^jL+i$k}naXj`CIo$@CT;h@K10 z0l+S0ZmlIT?#pz+ooVUE(2d^pZgKh)9AqOBHMp1iJ&aCWcoPhL5PE<(FUt$Z&aFKJ z<*kqe=wQMj1=!S!ts4<^uP|8=Y84bn&Too?z#8Dcpa@N}(!W|93Bn-Wm{&VFHc20~N}WMKd14`b>n~ za1?nsgojvuO#k_jB;^YG#eO!pHdK`;qoOF?s~)HdzS?)W$#-7qgQSy}@@Y^0DCMFO zPl$_9_rAG86?zS%F6b-+y;O{+06D|*n|{#xuaH>|g(`8=SiXnbyzSnDU^Oy#-x1`w z@STJ#zx)!U(D~7k@=j5FR4nkGW^;VJ@Q1ROFBf z=yk1)?}jSYM0nIB+^&~{x|KGU(W`u3IPD|XO#~-;kB>?R`9EgmB;-x@aw+tlBHo>u zy?=Q0yczsB5auS|EW%J!W%2;|d;{;IB_%%NS^VnaN^Iz=pw8(-`BMycu^gwnlTkqCI8N;1J9*1?)U}S}a6tJ~K z9~r@eN8Rs)_t_4lK-nao!0AtkISv-lN`#2#hz=29pLdL~^0Bq|7Bv&w`LZDEY!o@N zjsC0{Rd>_*lnR0p{SMeXxgz9aQ@$HZ%yb?8r|iMErS1fq=Eyp}6lbOoZ& zA0CI=7};Re{M9DM{p)Qe8;>r?04_6*V#lRMD2s<+8kPTUZhjMWsCOCu6AH9=+0%Ld z#X|}fidNPna=Msxr4&+r%v9u>^i<;ce~A&tiF|Rzw29etj~E-Xmj(Thft<>Nk;W_A zyhh%WA54B7S)IakMU$8va$C|(nJszfUd>mgrLwae=8aG>jqmS!`nP85Q*NJ96vYcXQ86{Ah zl;mh>_@Ci__r1OUj~2gc&N^!7xa8T<;6vYcXQ86{Ah zl;mh>_@Ci__r1OUj~2gc&N^!7xa8T<;N&Z5Ld@%@@d99 S=FLDm89ZJ6T-G@yGywp^mRMr| literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/flower/2.png b/data/tilesets/primary/general_frlg/anim/flower/2.png new file mode 100644 index 0000000000000000000000000000000000000000..5e58c29a90ded30f057fcd176ada0ce037d95723 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=4%}cQ;>6vYcXQ86{Ah zl;mh>_@Ci__r1OUj~2gc&N^!7xa8T<;z1vRUfj+cD0|HX7b!C=Di53OAhYP_khq>8JH%Nc)IMsEu`e|tIqBUkIp##4vp znR=%>zB9}?8@6a$R$4)Qd)lV(9gK6NpR8s$VHv6Ridm-Pae#r}jf2dOSq$IznWlXQ P+Q{JP>gTe~DWM4f%%fHd literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/flower/3.png b/data/tilesets/primary/general_frlg/anim/flower/3.png new file mode 100644 index 0000000000000000000000000000000000000000..bac3d26ffa1c9c7999a532462d75287900d4a7a4 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=4%}cQ;>6vYcXQ86{Ah zl;mh>_@Ci__r1OUj~2gc&N^!7xa8T<;a$YR^DU-F?Yp{OJQS#qyv#e@(D?2-^{=ym P7BYCc`njxgN@xNAd}&rh literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/flower/4.png b/data/tilesets/primary/general_frlg/anim/flower/4.png new file mode 100644 index 0000000000000000000000000000000000000000..8e589150a000b42f4ce61f96dfb551b1cf48ddd0 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU1=4%}cQ;>6vYcXQ86{Ah zl;mh>_@Ci__r1OUj~2gc&N^!7xa8T<;8zbw3>+gbdnL0r>XLy_!VQyJy{h%@}l(#{S#o$W7w#Gy4UsP?p{ z>08}jHj2T#vu<|xy_|inV!wgJ#5Jcns+<`o6mQ^J-XBxG?mZV;z0G@jgIZd1F>}T4=8NXli`B(yJJ7q300044 zNkl^G-@FUq(`8*H^x{$ z@bwt6ehjz-5>s3Pi!p&mO=#u8#pL+JSueu)doUiLQb062b`$4yA#}U{tGg-3(m#` zWQ`NhWr1xAO`{kZ&@NG3Z}+rM@I-|J@1to_o&6A4OULMtYa<;<{`Q8erT)hGz00000NkvXXu0mjf D4Dr)C literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/sandwatersedge/1.png b/data/tilesets/primary/general_frlg/anim/sandwatersedge/1.png new file mode 100644 index 0000000000000000000000000000000000000000..8dac0eba76e95f396529b19260c3683d902b881c GIT binary patch literal 470 zcmV;{0V)28P);z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30004D zNkl^rN;+UiCIG8UI01Y(yxODnwA8r$q3s?mQ8?#&kv8wYwG_z_xKC z66lD2L0S6SWx<}Y2kCP6lu)QEfi2(De&xL5dmf${8gh^3PVe9kaiaB5^0D|Xs3=>VE_OC M07*qoM6N<$f|NGj3jhEB literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/sandwatersedge/2.png b/data/tilesets/primary/general_frlg/anim/sandwatersedge/2.png new file mode 100644 index 0000000000000000000000000000000000000000..ba6e93bc4e76c8a8e0abd2ceed4a810e352f3708 GIT binary patch literal 485 zcmV;z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30004S zNklZ}qKw2ROY13R@z_4ipG43nOovomoG}@i9 zF;*e>7T52)`0sAe6fWG&xBtxS&hnE|4}HDJ6e*?VS_ha8^70 zChcH404!W`KHS5kN80BALnn==2|&BX0rj+(=9HwqYC?kq8p=tf36cP})^9$XEz80K zbATJ><%jvABj&tf{-#S~R$Jx`6<&CXsmQAxn@>Ta+O4_ZcWNQ5OTbmhTyef7QRc6P zSJyZPmFvwpQ7ob)j_99d_v;U8DXo?A7EMA*AtDm^VS`I0LL>!A2#_SxyJED4u39{Yd455P7Z12RKrC8-T4FE*z&ys7M{DDj zn@0i6;S*2idgi0^-BIuz5PT;(3BJ#$5qt*(-|zM?=~5&3?!f!rB?`WigGGR2Cygl3 b=wOB)exuJ9q?vYD00000NkvXXu0mjfbcEpT literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/sandwatersedge/3.png b/data/tilesets/primary/general_frlg/anim/sandwatersedge/3.png new file mode 100644 index 0000000000000000000000000000000000000000..9436601c1f16fb9383f4c55af1cb4b979b35809a GIT binary patch literal 512 zcmV+b0{{JqP);z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30004t zNkl&pgB(-CTg?;2BRD~%DF zN?oYO*qp$MuJQ?*>&in*n|87Ty5Ljn9NL!Y6KD_4ETJRoy8VW-8eJXqY@WvJ)8qPX z1d$OwoQOQWgugfwS!_lA;3R}!uOc@{j(dmOV*4iHw}IKdZRAd#k@4EB71knKSqR*E z@et(U5PLQ^=JU-V;EXMu#eYuR9Sp|AIG9ry78x4QT1NxgJSQV$OY4edi7XT$EJKE= z_fvfk%~2n1-m}k_<7gbg<*UKi6(J*JU!g`{m~2;ra|*5>OwmJ2qsfj5wjcLlP6BSR zijj+1Hspo|&K4EJ23&#Qa)dDbNzak))5O7+??3Ut&u4n?tL{okcZE@RMw0F`d`!9% zlI{s8@(;qO`wp7x3+(<0_DQ8lihcRpRZijz1Z^K>Rj+7n%0000;z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30004c zNklil4|ZG>g}Ln_w+#JKLksndh3!ev7?|M>%BBWm@*pu- zD~;e*D-xttBmpzx|B%*lWXA!_Fc;uj*|iu8m6~_Sa&w(SV*MP_!E!YXKop?WAzHq= zcSJ;!4bcZW&OLn+-J=m66Fi)4zR0~rh&Eqqn$io7IjvU=rz@fjO$f$;9HDO8U94OC~hS0i?;)Y#&?F{7WNw72iR+T7YHWbpxyW`5TpR&JCAI9 lM*#L+R*CNyXlU@~h9A4o%d!x@egXgh002ovPDHLkV1k%C-@pI> literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/sandwatersedge/5.png b/data/tilesets/primary/general_frlg/anim/sandwatersedge/5.png new file mode 100644 index 0000000000000000000000000000000000000000..6c72f4e0e29170771edde8625ffef60873279d57 GIT binary patch literal 501 zcmV;z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30004i zNkloz`bEp1u$AY+j2Z# zPAm{PxFnjt#_u>F8gGd{a2m&pPogy@_TZt4$#}b=_|1d2-K=OrFF50}S~8q3iMBNU zgtr_&#k9EKdw6oSJ^`v;#jjTIkCH6=O0z6MruFwu>kPUOav`)9;tImQ5u)Y`#7>XD z5TmVB+k8lMZJO%(6lq?c?hNem)@+y8X9cwWK)nDSGz&1RZk>M#%eE4B2hD>CyMq=C zY?1xMvsCBSk4m-h8D{tF!1|FE_H@(@uWdEC8*;fbxZHuV%YA@DmwS&vIVii_dnmcw r8C>o?ph%m+5<|)4K7gg+?Vg7p#6SDHGY0QG00000NkvXXu0mjfrWEB@ literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/sandwatersedge/6.png b/data/tilesets/primary/general_frlg/anim/sandwatersedge/6.png new file mode 100644 index 0000000000000000000000000000000000000000..f56c55b04b7591597c086cab555249bd4d39491c GIT binary patch literal 499 zcmV;z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30004g zNklYN1bU5* zF)&fA+l?l}DAu~u5Qwzaw=M7hgC3&md%BNSDD`n8*D^wPTD&QWq5Eyw$)Jb635mtC zKaL*f6AwfI4v8LL?Hfu&xaSwSWFT+oDGaKgu8&Tu*> zN@%=d7(XQRbcX7OUD`!bM(OxL(fK>CD5)|kW&B0D38Z=cmF0Pg+_~?h1sl literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/sandwatersedge/7.png b/data/tilesets/primary/general_frlg/anim/sandwatersedge/7.png new file mode 100644 index 0000000000000000000000000000000000000000..549c44410ca8fe399e0e25676f666ecc75b36ca8 GIT binary patch literal 465 zcmV;?0WSWDP);z0G@jgIZd1F>}T4=8NXli`B(yJJ7q300048 zNklY(SDjgKkJcvoU1U5B*}QHHetxXr5^~;qev#MM`08Tr2t|45O9eh zN(5g3#5|>F!^h$z0EAM?M3Hi^Vn9#Eb5gzpa8oNvpaL=w<*R#cc17kuYY#)McklTJ z3aQb$qG6uzD?sK7+fT|;bJY1^M0e&`>P)}U1wUoMur0JUI<06@q%TJAD;j_02UD66 z4JXFvgL%f~F^zBOFX}FO&@?rY8fzOQ*)FIR!dfBjNpwLorDjN~Pj-rAXgfH!0rFpP zTkW*J&fsMH0)_#N1)QKqFf^7}i>gm&%X)$*UTC35GKk(E(xuug@Ls`pkoO(nd?y-s z-xoCSz5|@^4&eJ50N(-5_cf9Co$q+x8Lm-U;$u9u>}mK0X`l~nD`Q9{00000NkvXX Hu0mjfz+BCy literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/0.png b/data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/0.png new file mode 100644 index 0000000000000000000000000000000000000000..ce16ac050ca918038b54c6ca84a62593b84547a3 GIT binary patch literal 629 zcmV-*0*d{KP);z0G@jgIZd1F>}T4=8NXli`B(yJJ7q300062 zNkl{&qMQGMBQdg6Vr8+jcJb|!HSyAc@h1HPxLsfij)Y(f zy`9scN8%UQ4BaZ#9lC-8lOBc!|PN2MPB}L+`lXxp>vL~@f zvM22vRNR`A*h$(N7j*_s@zFhAoG%wnv~Fdn_4()gD-X<#)@uy&{9?_ra06%Gu$Y@m zov#k?%3KzDp+Di7eH2S8XG^V(p09DZoPRL-VvXQ?zA}Y5!0^x*y)y6lxiX> z?d5G*Ru8tH(aa7!azD!MjCQ^d&y_m%&({2(>}1f&F$T$=#3IRG0{^#J;#LN1u9&rV zyG@)-$1?_5l4cC1N{tyLlTFG%5h(@}q74JOJ|zZ}WyJJ$PAA(bSuES-Kq(aX~8lr{) z`Rs@>#K8Fcm*hS$d2W~|)<_9yqwv99QG8*#TSBDTULbO%{4UF%41P4tF9z+$G=wXn z8wR0ICpTeu#o(T(V!9GVT^9_(AP5-*J_zhx$JjfsO>ZJ6OD(A`J@=G9Si}@$rW@c1 P00000NkvXXu0mjf2ly)5 literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/1.png b/data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e41494c53680323ad26350b919ed21a00a67570 GIT binary patch literal 634 zcmV-=0)_pFP);z0G@jgIZd1F>}T4=8NXli`B(yJJ7q300067 zNklljA7=~X(3W6=yDTsw$kr=wcfY|#3y4YE}__}mWymVo^gdafNF0chx zLMT({bxwzV62HJfU6C+<05JF2mph}tgkR~=J@MUl_c^wVB(hOTL8->9*hH}t6>TKh zh>Eu)LhKd=iM+&H5_xG1t_uZD{tIk7aH9dH%+ZcebCG6DvF1kFu4rb%*Fj(IJob_(8I{N9rVLW^4}sEk{B68*#4! zTGDqjwH>va7%Mem5TC3P28u{AI3Zdwpqo=-Kxs-0j>n@3gEUT3rn7y#_$j~Gm-`L< z5&lr$Mpyfc6&*8nic-cdz8N!c7vdm($}jfiUF|a=HDZv`Dq%1>wLdLL+@&CX$}jfi zUF}o31fi-T2ILaN5E%x><$pyQBN<4SAh%LpGx$#Qi$U|%C`#mInKQ^;@HNjrFeqKH zZay;K!e{4aQG8+WxvG9J;ZCoKZW-(wvtU9S!lflcZSzV%yL2XgXMfiA-_lWj1E$yY U8Z7W5-2eap07*qoM6N<$f-$Tr9{>OV literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/2.png b/data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/2.png new file mode 100644 index 0000000000000000000000000000000000000000..5765ac4773d5c2a3fc354460c28ab7d2ba861e7a GIT binary patch literal 821 zcmV-51Iqk~P);z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30008O zNklNObH8DTE5IB87&ESI7g<*lyE!-MC0&Pje5jceF_0q=D`* z5+YO~m-<{}C8X;edZhRXK*!AP*mngT8RvKoz^dDkCG(bZdjuDSp z(5=;Bw~n4b7crRdZ@1n5|hmubZUOf$rUUz^;d6f%V*ud<|A(M#*5 z!KZL2J}nuE4^9Uk^giT)Df-useGn@0@IL7PXk-hlWYaN*DN4Lt5ADNEXq;v?YG7N2jhyAT=n4ID?EKe%| zI$ZJb_t=MqD({oY`2-&veUO?WF*Z`Lac;u`C$$61rDMT)U4Li6QtE$UbRPHmvDy4) zK}fT4aP8a;3$)Z0ZnVB;!JTurEa;`6>HCHSjTHQ9nlG&FoDpvOzU%t_Zu_zN({(>t z;6GI){#f|}tCVHY=QY&*L2%yLYutT&;z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30008b zNkl8S%5XT20BGF}?6fqKoO@XdNd4)){H1@S=yxX{-vA1y(s!iyklP(So zbcd0U5Dki{?SgIY0h|XwieDkj?1vpG5e!0`IKY#B?2Ej41Bn1ZvBqb3+F+pP1 zAXz3v9Jt^~YN6zb0bcUVg5*3kfNK`GEE5Y{7O4d;q=PJxPpp=2f z2TEOjuD`=8rA}L=zQI9VfB2!)3D}AE5xiTpSE~NPfVEeRI#Zt@#7DCs*eKPiQw7oH z^rBW5yYMK88GClJ3lOp3Fbd#-7+k=Xv0>P<=fLm~!vSy%A{+q6I7Ws#JP)G9`5}b$ zqOQ;D5RRlgqJ)9%t%e|8q0Wo_fkg;Wyxy{4jSwP)FM$Sn!Og*X8$|@sYReWYprZo| z_Ys1X@q>FTpo{e|ps@f2(IJB#cL1<`cO}HzyG4EUeWf)f^ipb#38Gk* zlpxDY$~2Qu6nu%^mXL}rOY<%R-fPaa=8*SQmuuaD_B#5$PU>|~Ll&fi8mW+|qm7OP zJZyEu9k3BN?Kf+Gd;z0G@jgIZd1F>}T4=8NXli`B(yJJ7q300091 zNkl(huL+o3;l<8W=R7$Tb zumvL_*ihXuiibW4HM`4>)cggY@ZR0U$fzlNLlTN}yLm&#W<+oTNRy&_GH=&}WDZbm?!n1p+#56Z9z+hupo>O$~75AI;zk#RJNuktt*w^~Q52cR5Cf+yU-HYN<=`S95#bvHe)hBpLk9 zfN>CL9RzI{x9OqBZP1!>ZLOgrWrqcemOiUmrg;r4Sriss)~$}iAi-sel)`q>P{dXOi}~nMN}<p* zK;s73wQvNxcJ2&j?niXU%$>oE^sOml0PMJ73(Tgswpsjo+r%L0bY&8yAj4Qn8B0in zh!UAb5Dw>YIFvC6L?N(DVTd>%GGLh@DFc)eNs{VBDM{KoVLY;Rgm?p8Q)f=ULsJLo zcbIVL6f;h-y(mA_HYsN=Zwmsm$ii2E7;7SedvMgSzRKjoMgdtvs98Fn_@p1mjI+UHWOqF=WbpZiYViGNlqcn%L3hxSwgxWlOWOY zC?#z{W|u~8GtbNJ?yrIFCo@YC&1+qU?uSdj$_1;z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30009S zNklljA6n+d8v5`(iEYw|y7?4PoZVZubtyINXD>c3>*=qZiENquBQYpAy zU<*d7Xs4>~mdF`;62HJD{~UeR-c<;G73OuQP}Z*l$2X z@Sw?g9qJ7cG_eHjTAf8c=YY*2Yg)j=sA)lqHJi{RA_EA82sqy5?U;J7v~NIwfSFtV z3bY$B0h$>DMf%Y^9v_Vc21sea3n`C2Ctu-#l>JP~GuTLy<8vubVPFdHHet}uE@bkh z0+s9{l>_++p5h}NA$T^DGL!vtsEqm_5_$X_d9X7*eFCsqS+8xb!#|=Z%j;QL7Eo$^ zGuOHV?E)5_r?uz30N8Gf%XufMAVZEXL@1uh?(|k2!=5#FnYKFcVaE@ z_vrbEd?#dmM__%&4(t0K0rK4f^nC{&THg^^-*;fm`i?}_cjU3Y(K}XRp>A_|pj2?v)WAj}gQ%)m7 zhGWdou!loQh9DVBVRi&cHA6!bZ)M=mvBFqxrH+~9@!O5)b}jU~RLAW{3Adjq7N*31eO@DTflsKG-j3u^(*vwlY`V~;=0R6In<@V@+ zSspRL{Wuw7^;Ir`(ppi1a{oK=VAq}Jnxbc=1SdALP?)3CZuJV zQbOtiex&IMC6q2;W?IW@C|tm=qWDe;-?aWox%#D-N?lRH%Pc#iT*;`oxC1sM#@h-= k7xxC1%*$DSujQWNH?;WRl7~M=^8f$<07*qoM6N<$f|9GP9RL6T literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/6.png b/data/tilesets/primary/general_frlg/anim/water_current_landwatersedge/6.png new file mode 100644 index 0000000000000000000000000000000000000000..c31713d3492be54e27ebbc8c1ccad0aaf6af548d GIT binary patch literal 864 zcmV-m1E2hfP);z0G@jgIZd1F>}T4=8NXli`B(yJJ7q30008( zNkl3azhUH_I+=w7!9{S@^gI<56*^vnvn0;x5-?{TW{KC%hvE}c8w*%`aT|ik?kBh1*p{naY%et-!{B_>kbtZYfp}OS_E5*xCmwX1Pt<887J3XOg+XjL zN1Zmb?Q!m>?F?zoz-6SUlES8qRN4@qSQ--_C9N8tl#4cPG>w^7r`BiIn>rty^0gp! z2T1J!r&PrE6Y*wVnD<+JKang-KL&cz4@z1#D_JtfQB>xv@miEKxi!jEB6$^J=*zo|ggQlp;yXW+hp3T(O)FS)ZsRY{S^f}#=lh-rJQtun qPmB0@wefsloi}PV)tjIEOz{`ZvI4(+@$8iV00001KIqEP);z0G@jgIZd1F>}T4=8NXli`B(yJJ7q300089 zNklTdB?G+SOl0Wx;U19XwNc*sI}@sLI0;-TGW=LPCyX*X8^ zigt6OuCj;TE7%WEAj;qeQ16ZuWgtbC_JFfK+>!tN5@mrl6v`Md8Ns*%T@a+c2S!WD zf)y|tjLI3fl@=YS4x|Leq-olLN(E>U)qodLGX;?=ObV$7103ZixxBhr&IO$FFmUeX z%i4R^7YB-7&nW?n^g!pWy{v$|b?|(z(jbR&cVMeXQK= z3Wh%xcU4&(!{DT<++Fpam4`5V4Sj4w96-}-IiYFWh7;NluuqbB=iNK#bN&0gq9e?hAM4G+}!>$fZ;AV=b zrU+;)a>6)Q#W=SG*i2iSDGM~4=JR_vS?i3F-ovRehz2HDXA{IV>(s0zI-^cUQ3f6D zbu8Z@Yoww>8fGdwxSmW&M?eusYeOwwoasUb8%p(pR;;QVPzCe2$wy*?bZRliIvI94 zJT%&fI&4+5)%XzPu~@#Hac+>tQj2bs5;j!W>Jy3bn z>5y=@eR2TYs<{=1iVc#dCtn~ZthL4Un61)bpte&$Dbaa(U_acVhXz!YB7ZFG~SctG57_R3|`l$=n8fZt{Lm9t+Hb%r76Gv_Ei48eu? kSBQfBhz{cP2>&Vm0QXZF&==gQV*mgE07*qoM6N<$g0$p(tpET3 literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/metatile_attributes.bin b/data/tilesets/primary/general_frlg/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..45f6f352ef262d9c34b0f3e5ff379d9fc6b5eee6 GIT binary patch literal 2560 zcmcIk%TB{U3|u0_i311~t}aKu0K`x5_<@SYf&V~)&t_)3lXxAcRRvg@I-VJO9VKZg z+xRTS2viZ(Fbw6$qmum(`?4^QyPzIxSyPf?*9XGn`(1 zLAOk&r}fWt`Z=GtIH|ko{4uNF>#)y)`iu<3%k&J4((6>qS$PyOd!3rs)7pLG($!Oz z!u>BVSvZ4OjQ2%lr(jKuIX2m5d%k=#9RxKZhFyXe&hYFbq%lX0b*9Hd{;FPKhl=T& z7~jeIo;Q7s1BLGWcRKiio=o@qYL4;~`ksMD-~nh}L!RLcq?7O!-g7$ri@5F&zs?l7aM1gFQD-~mE|h$s_!hD1OUu|Y*tKm=424GQXd zu87Ba?5^Sg0V3Y#svO=Yi5DnQ+;u(HbrtZyYu)#%`c+qlb^ZMI`}VKx`kKyfURC|x zQRjoP=ri4zVT?9%2L0NN$&#`id#LT&gino4i_MFj8^gK{Mx*gV(T_#{Ec&U4+Ly6i z*&eKtO?8@#xz1dtIz6CfaQcuMiJOdS_-k;@T$|bxU#&65IM$e`_zz_xSRJbu;?AtI zNw|dV#46ZsjBqI{F?+BB6sG=8HKrN!jB^dDkNTZwG#ON%PrUX!ki5I_Ue-ro)%fakm^GJ52uzv#BPmi?!2!iY|@Xt{Z z`QhN7@k&nptxl~;txvV42(L}81JtJQy3E>4Tc$Nb@->;&fYvMA&)M5Kz&Q{`n=A)A z2RjErQAEKXB;Uu`*EzyDQq|uKZ1^@A$k`^iTT|OoZNMPk*334IzcsTN&}PMdxHHNb z?@UnrA@|u(h!63}PzWRU(atdnf05dfVos5>HMKQWH-_zbR-W%SV9^q#IzZt>L0(#5) z5K334tBQ-P-)611TCL6SB5t$V;4fJMoPgiND{!JM(Ha!w)L-O`mbU~ia^p+$tB=!1 z=zwhaBKH^87GTD*Rj_Y`FY>}yaBs7=0W)AI$d5znuVBwt*4G|=(Y~*t;1}f|dLIG$ z#-cCsWA9_(2mDI*CWG6rS(a_9@$nZc4yejbIEif1Ny17bAF3Zu z@?=%gN+Nf6J6tcwKB|x075Uw4!n%Jx@jmfz{l`7!IPUY)_)L!LE8Mc$C-JF(B*ywD^HTty!?D6__&2)0yej&`{R-vpft>cU`TTr- z6<;L!!rw073;5N1vBC@ah5QKFfHs z@(1~UFIyI=Z>S&nU+;e@^cd}bdBER|A^%dojLXp_`J4H2#n+La{J$sg}>nuK(|At?p_{sk` zS{q@!5+;7~KVh<;FxgL->?ch2)4b})PyQbe+b?!VY)Fj!PwmP7gvoxwWItiDpD@`^ znE3Va_&XRcI&S7S@KgCTK98RZqe(u~`3!y@Z&H}%ADu4=mqK+sj}pe#cwVG<5IaRkTB;xeO5R4!v>4HK&C2dVX$vBt*g zdbM6dt;WWN#$0}MBh-i5tjzQ}dF5VrPqHzV1T5B9*&|@Hu6tdgLDYse87Jc$3Wdf8 zVY+{ehWV!R>+y#^V0|7G;ZFctc@QtufyOh|mAJeC;-~mO=Ra}W?*{Mz{17OJ@qX3C z>SFbVg8U6I<7I2Po>Wf=aKK+Zp}(>};dLKxj!!mFedO=d02ukMG(}Ri~XlL_DiJeS9~MSTQ!$*%za-tOuc`EPM= zb(grexio(W)BIVPYtF663H~x%)0X9yt}lY$ z75*q)9Z2FyP1djF}8}|;r@{?2e#$NFIQAk%}0e-xVE>#6|1erPy4;--$no5 z>D~?h27K;P)R^7lhx~WCH-ip@m%6I}N&b~1mSO**Ab+#ltl<@aR_?%0=LzEbJ@{Ys z5Bglm{~-D&`Q=f$E8`XDBkKQF)NcWQ1n12_pBC_c=%2OzI{zvEX|Pm2!vDhlTH-_h zyAuHg`UoujAI5LT_R=3{f6It~4K2J<2-adfUf(!GF4Xf_(`5A7Sxa_A2!gnx4&*X<|&erG+E z+Qshd5PmB4RI1e8S^498>t(Nt-LCX`#e1dhUGLpGs{eA`_f~sdw0&ns$3Iw|oiZEs zLqFh)f7ANi)9xkguQg7E{O3HQhrPSN(~Rjb+Rih2+n-sC{bt*i|@$dK6_trn4Pzi@um^!<}3k-f-XT)(*fLMSL-1o2s1e|7f4`h{7kUrAnSBlRuGZ%<+N9Q6(Dd)>k{ zmF#~V<_4~jqz`g$NqhnPiy%K$lD`&OU*lW^%*a-f$KCW|`{JZTkl!+|&0dteM(_(c zk_8Xu#3;WywxZ*B8ynZhAMwvmGRWS|PKNQnPRvh=|Mm9uVnvhpvGRuNg7r=Mt3>1v z_5Uxxd?NZpjQ8H*{FCEDA6>KCzOqqbf%_ zSjIVYUXW;{L+1sO(|JM4$AKKrcZ`Mg<#~bljsiBFAM4^na*zuCae{p$L`$9*P#1jZ zyg-=F3t@ZePu9Tm8=jv?j{GOaro;$i?SYj#KCE(JWlg1I8wdRIynwx7q4NTcPmIy= z=@Zhk({s|au6$)pPIt0rrDc2`pWvl)%ZH4a8g0%p8{CtpHet2%HOjPAKKGZ?Xf?%=P(U>z1`kJdkcP; zlhN~fiv{OXJRid8eU*Qg6`a@M{C4tDQ-zJ<{0ew#p(8$7$|L9h;5>`{1&`i8{3P!K zF3KOb^z-@?z>VkiUz;Bg`bGJCVNb|U78vkNNSA`2n&&=nn2@ z(fmLl7xrrQ==LL@3+;t{q%Y;`2vdIU*X9TQ+xz9c?tSk4?gOZwcph{gavyddQTS2! zG51gI;|f3FKIyJ@*CUJ(obKS1U`uZ-b+7S~Xc6DB#`KPi7onDVD8 zzZ0Av@UAA}jkhJZf9e?Tzb){~3K#s3w^?|E9I>d6xMjo=cXFCB zqi&V$gA7?m{uMBupnqR_5AV0jb4%a_Yy!Uta@k&1Q1|Bm0*3m?AFK~}A8wKNVXOl8 zFTDS@j1uQ1(3$wtJT3NvkpE5*6XJ*auUKzZ0zclzh_B-p>;?OUT==JDL~tJ$-a!5q zdH=@j9n@%?0QrXrVSc+ghc{L@e@Xw8wTx<(So%}l|F!&pPwNfl2PnRb$@xf_@(YBI z2WxSDO8Xo0bpOWv9%Crt37m*A<^qGpG`~9J2Ykv8{8E1Um-5Hq{Tuhg+8)5?;(W*b zb7BwNfA#&cwuipIqFl${#?n3X{WIMIao9fHcD>&9GrWPY@d+7Ou^>-|>0&40~*SLDxLcL}r7_xv|tegxR1^P<4+Ybw9g4)gVG zl}q4?OF?q*oU2)~6ru=jnyF6bx5Gv<@lyPz-d z)A?^xZbMG+OFnZWV6h%3yb1DGLLZSo4BN}|C-qO~PmsINzsgq%Ibb>;2JK-zljleD zzu?F9JXq895ny>358xN8A!8T~p&zcdP%Ma*z_PVT{OC^n|0lucN8*G2fN071ApfQj zfj>om=x-gr?QU>4DSnJc`wscFb{P*dh&R}K1-}x!9mGTUI}#sPi;s`-`ML2C#M7nw zguu{0-6sMJ<4N8pqV|U4fqW|B5!esEl?CyD@$fV8+;RN47+=+2hw&8X3;oIGKVWg5 s3;5M|5c)y?+ISIslrM(*0@MCNnD!IF=i>NgOrH;dIy65}e=$G)1sX?dlmGw# literal 0 HcmV?d00001 diff --git a/data/tilesets/primary/general_frlg/palettes/00.pal b/data/tilesets/primary/general_frlg/palettes/00.pal new file mode 100644 index 000000000000..2f3f97d6fdb7 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +189 255 139 +131 213 98 +57 148 49 +57 90 16 +115 98 98 +65 57 49 +255 0 255 +139 222 189 +255 197 115 +238 131 106 +197 49 65 +164 230 197 +115 205 164 +65 180 139 +24 164 106 diff --git a/data/tilesets/primary/general_frlg/palettes/01.pal b/data/tilesets/primary/general_frlg/palettes/01.pal new file mode 100644 index 000000000000..09828f4f1f27 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 230 +197 205 213 +172 189 205 +123 123 131 +32 49 57 +230 238 238 +90 189 139 +90 90 115 +238 213 197 +222 197 164 +189 148 139 +148 106 106 +123 74 74 +90 57 65 +115 205 164 diff --git a/data/tilesets/primary/general_frlg/palettes/02.pal b/data/tilesets/primary/general_frlg/palettes/02.pal new file mode 100644 index 000000000000..6b019b884c96 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +156 123 98 +197 172 139 +255 205 139 +238 148 115 +222 106 98 +205 82 74 +172 32 41 +74 131 197 diff --git a/data/tilesets/primary/general_frlg/palettes/03.pal b/data/tilesets/primary/general_frlg/palettes/03.pal new file mode 100644 index 000000000000..205c464c79d6 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +205 180 106 +156 213 255 +115 189 246 +98 164 222 +74 131 197 +49 98 164 +115 205 164 diff --git a/data/tilesets/primary/general_frlg/palettes/04.pal b/data/tilesets/primary/general_frlg/palettes/04.pal new file mode 100644 index 000000000000..9b094a6aaa24 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +230 246 255 +189 222 255 +139 164 255 +106 164 230 +74 148 222 +74 123 222 +82 156 230 +205 222 238 +172 189 205 +123 123 131 +90 90 115 +49 115 197 +238 230 139 +230 213 139 +213 197 106 diff --git a/data/tilesets/primary/general_frlg/palettes/05.pal b/data/tilesets/primary/general_frlg/palettes/05.pal new file mode 100644 index 000000000000..c5a653979a01 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 238 +172 189 205 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +213 197 131 +197 172 106 +172 148 74 +238 230 139 +222 197 139 +213 189 106 +189 230 164 +172 222 164 +115 205 164 diff --git a/data/tilesets/primary/general_frlg/palettes/06.pal b/data/tilesets/primary/general_frlg/palettes/06.pal new file mode 100644 index 000000000000..cdf41b2983e5 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 0 +205 230 246 +180 213 255 +123 156 238 +98 139 213 +65 123 189 +49 98 180 +82 123 205 +238 246 246 +205 222 238 +49 115 197 +139 189 255 +115 164 255 +65 139 222 +57 115 222 +82 148 230 diff --git a/data/tilesets/primary/general_frlg/palettes/07.pal b/data/tilesets/primary/general_frlg/palettes/07.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/palettes/08.pal b/data/tilesets/primary/general_frlg/palettes/08.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/palettes/09.pal b/data/tilesets/primary/general_frlg/palettes/09.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/palettes/10.pal b/data/tilesets/primary/general_frlg/palettes/10.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/palettes/11.pal b/data/tilesets/primary/general_frlg/palettes/11.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/palettes/12.pal b/data/tilesets/primary/general_frlg/palettes/12.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/palettes/13.pal b/data/tilesets/primary/general_frlg/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/palettes/14.pal b/data/tilesets/primary/general_frlg/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/palettes/15.pal b/data/tilesets/primary/general_frlg/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/primary/general_frlg/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/primary/general_frlg/tiles.png b/data/tilesets/primary/general_frlg/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..84ba7b2f987ce0134e5936faf083f7df15665a64 GIT binary patch literal 8671 zcmX9^bx@Sw_kK5Emyo49mJmeg28ku48&r^5;6t}`zk~<^0@5KRf*`C&i^QT5N=iwy zpp>K_T|d9`o4GURo_U@#bLReWXU=n;1Vep|8>Gyn007+3(o{447eN4kVBoNSx40CS zlYc?PP}lU{_4W16&d$QZ!r#+g4FGt?@$ z%ID7ft-M-_O$OQ!mnHW$NBF1zflAWc64|HHI>bGjkv; zv=|%1i1TAqLuU1JXjxlAt0wEUTw^qj!xuPeCR4f=ex-zNKb-%)b38VDF8}X%U5_~D z3Fu~J2|OyR&SM(;mNVP9v)_k1lAEC?eKXETORwPBEhbI{x*Q?e%!^gFE7c%ft}_j~ zCfW`?%W8d&_dH;v)c8^`itS`Ci!=JeOMs=}Mk}s&XPh|wb7*A~gc2`ETj*i64Q$ON zp(1a3JkO~C-tr3)frTT){^7zCQb4j5EmY=2SeoytR`i{6y4m_wH6REozwL_jfYjShH`4@_(2J);CXOH3an0iT3&d}7X65*u+jj$!o^az#nq z#Jb#RV!Dv2KpI2~+3UJ7M5@?NcznKczix7JvU?}?i+#SB<89mWA94GqQXq3}p%D2x zKPTpsjrqjW-hu5k6D`$`(2Axe8|HyeDaZ3=S{Npf{bt@D#%%OzSGrU_x7*h*W-8~| zg8ijkq|r^+4+OcCo0)q5{`Z21k^Lw}bY3^7E7O$pv$M(DM)lk51N-02UUVxmr@nK8 zQ~trOi4+LQvW}S)Hv7srl*RD;?VZxT#*$IM)86*6ZEwU|V`be+{-sZw|)Y64Vp zz~qpbwgEbbF@b*ahIl=nea?Hb>*9kt7nh|MQuPk+c!|vFI8_i>_y6E8^2(`FnrjQS zosO!@Yu;y;!83H=ed;{L6eM^%`}ZXtj9n!@e);k~Jh^>I4Px9#T_2)1Y7jC`FvAR& zac3sygSb|Ea_`SOX3b)i3ijSzNzgX`vljvDP1YnTN+KrZg|Q6XafiU>t zes&9!mHBOl=KnYY?0-Fy%jLJ{(e;bgaCl^pA1d~M%R?Q=XZ%PDEpQ!-qSPqL>0h(G zYmXhk7qhH_4%OVX?;HeTo36kjc^$;i3TlX>sM$m8Dh}S(!-F>~bb!v!kd~fT50!_BA2`ABM8nOn}}najJ-2(+REe zP1hU4YwI|9;Wsnj2lO$F9GP=bf<^2c@R6QTes0?`zt}^`YHnPpvZEW45eX&hsI4{% zeW;D)h~&Lq|NgU-jHHDvr0XN-ADh;Q4bINY(jFJ+j}{hq`T%*eHiZNr_j*lD5*|DH zQEP+kbI^})PAq-~a!<&uKjXaj%|~u}_xAkYfscu&x*ioCt`Q@30S+XXa-L&wS0veJ zxv}~^RpN|=^YB7Mt}SQtn3SZFSz~}64Z0hWpQXLWmTaY&KX*xpb##mtJ=p0N7Ou#h z(VzWwf%TyK8k?c{on3ae(&(2RL+zay<>-U_NzZ`q;itZ9*L^QjXHTVMm9WT)th(s( zcAGN}R&UYd@{O1IAF|QBk%R^RuIuxUD*@?V7Mw1)y3C1N#pY-4Siw0IB>nTaLBSKN z|JJf$W7)I(@5J*sa*(vvZjw-MH~ACm*whC-&w2$sH{UW?tOol|&j>aIE0;HLJw6i>I1M*zr9)i;f83e z3Q)fL$|EcSEC7El=h8Mu8zHt>gE{>Jb9clI37bA zaXa?Z@~gV$O50UW94x4C6tWU4v5H`#v4vi9hEE*0c&dG{8G`jqE?8Ojw1!R}Xn`uCyqSV|l#9<7UhUG00+n zDT4U;gf~0o?9Wp#iw9s{)OXn~_frWs5pnJZ`yK6%_p+TRFdaU(?#(imoek-Ka9isj=75KeL>(-j z6yor;883Zp9H1>>??1o+W;j_|q->RT0(<;;3?+R``h(+>v*4T%#EoN&^ zafsmT!|arlPSlT|(D1EikYz4cKF&-8z3w-UzHd*UwftlZjV?~Ogc|aX$#-{GY8r)A zeLlSZdur#y^C{HgA6ejB7Kn?EuEPCHEq^PNfPwmXMcN33uW|+<*taW=SlB%4pD^19 zwS;x7WmNfB+Bz9oD-&ftn;O=HE(Sik7vVCF_N)vV<@cGDEksb=?oPk4kJ=I{td^9p z3);saI?nTzu+HRXk@4@{WwX+ATiQyGT=`Y&ayVgj^(aq-#6`aCDr-?P5Ab=(e0 zZnm-QD*IP%6;O-oKji>p3^Mgq<^L;G|D)DuCf6&Hjf5imj!lGrx3K})Z*vG4NP;&f zz2z`Bex)kFzA=c~yw2>b15veBd6^3S2>{%qAAX?ox%y2lJ!{@noq1Ka;hOwV-(4W9 zkFH8)?REW@!Uv8;dDmt*o4cL=gLL0^*W}fB&v}~#qmaT6%y^bl-KGoqCnK%bg>xLK z;t)(WQR+QQyVSAqFPH-Wd?^*(oF9ub9Rdg+7D69KqIDD4U0@w+Qjj;^mm?>E^K!ub zMSH!9zn3AEZKk-);c*2e%ssI`44Z>;_Kn@eQDg`}=wq!$?m0Epw=J=u+8C6a)1QLQ z21A^+B8x!r;*_=9OHRK1J*tyEO=zl+Rw56yCp34JF=~Z4VyxypvEoa)E$gcEapmnI zsKn<$=d`%-dr%3&(f*d-<$XRmpnAGmnyoXcPZ=m+pPjcEa{`m7PvB+{@V=Xb`^kyT zGKh!ao%D((zR@^upLgv;U53c!#+JWn(zb8|yB~Kf%AkG93YEq)zpUPzR~xgVJBhrz z9C%tnd0WPb-Tj80VKjQp`jfB!7(`_u-Z}tzi8OC(*m$=^E*3Vms79HBn#Gwovz0H|V76*W(5S9)9-TN3lV!7pUc>1h%)$#;teVDX(s$uv$@TJGKFS@ zp@z4-P6tL21Ka?b%9gvRi5@d}dI_SjTb>U(P)fxmQR;;cD}+Q|V9vk*CjaQPduqr1 zIufk6*a7_Sk8a*P`#fYz)7&@Cga#9*%r{^&$+gf6VzBPpvF55jgZTDu^IKJqxDqzx zF4eP%7zkx0d<&nweuY<8-GH+XU~JV^!z-RC`rZ*~LI##jEeVts6{c+CSanhudsNNZ zP!EqTdADvIwD+A?57msg%lrp1ed-H!4?O*%&GO0A_bu-Qa1;mlr|mi{IDJAfYr57( zg?+|U+hs!&Mm6_^Hh*i`TlBX?lF}|3taCzY?Szk=*-UO+#Ywjy|&X&iS@@Y6p{>6_=)R5P|4`(TW zxGu=g$?5kV0qiBybU@+m2Jk_R+;Z>C0|E5Ry0aAwCJiemht)@w+c?@Zg%$UJip$w%`q; zlE9CI|Ekgy zqEq(F=h1h6vFGLCxi%ydT%$dZ8G{kV}1W~o4{R;qCl zN;x#3xhNDy5893itQY0Ts)E7-<1AE|WZb|jAQYzqg@!emeaWLBfo^xnIXD@`dNfXl zd*BtsXW{4{Sy;b@TR<{qs=Z`LXh(Ozu@w9~8_V%)hC1naL}Ff~9r61*7~%KxSFhTc zh^FQ)pp@F^%y_C0oC);!cv+fffCB&B=}Z$n*thd);Q z5d@RKxvrg-&p~=lJ`_0()uE$xs}8{!B!(;L(LA_#P5x~-sc0h#m}7w86Z+CfQM8@> zJSSTr;4mfHj6uYV{G+7Hupi`PTb6d7QjXE1cS@_VuB3f%K#@t@A9-5D$TqWt!;OJQn@4k$+PQm<_=Kpyp;mIpt zse>~n<-xJ74gC__U~H|*GoZ-MgAM!qhj%Gpk>P^_61Pj#sM>V(`FW=f=##3^;ns2W0%v z-Nj@D{1r4847~*LNDM)&v44S?2y|S%5D&qzthf5ZV2C@?i2x46*P)h7 zas*%T7pk4|^8KuL|X&?hA4wU!}zc2t%ARQ!WeM%O2H!9h(-M zxw;E|{Dz+y{hj%6%-y0}6 z662@ZuIZN$c}9{kt4weRfoZm|h)jmC78Q^q8X|?nys)1Ce(m$$R-&m=%Q%Ga1U*i~Lfrrf%w6qY zJ@x3!aItLPZVbRN6lZ9ztnH4DUv6Hj-?i-A#2u{Vb7I=Pc#EbFA>QIMU6EyPP7tXC z-y(6Fh|?91PTc@)j6$*U!HTs;-DhXDd;DpzROtA*<0fqNE~Nh0JfrsU9O-A#ONOk& ziq0I?%dtbiaJj%^_)r_0$o@qZyQpUc-kU^1x-Pojz?Xhu^RV zmgnUhkY}m5xzcP0l-EzMVG>}5>`4q7pfyd?ILrwerW;$bWT|axs2$Cl-tR`yf-`Fe zW9u-g1w&i5F*|OYQtT^F#<9b+-dXT*0x^2OByU^4rR!aEwv9OQF<2P52E^i)DBM8Qx`8_dJ(4ebtj~Fnz)sLr>yO+uM z61#Ptj<6yDibbcqV@hmJkNu0Gj-!QxJ2g5l0cK%p?|mX@{9wx1OW`ryHHl0!88EEN z3W2uUe62cWf4uN9Qpw+Tyos+@GIQoZ4E~>t)2tZuUI`=5+2QAWeN`D+u|tIAbzn^J z5!A&YC-8)R#HNeZ#$%|yQS5k~B})YF$A-*-dNl3@C|Lyw^g zt^$RgYJMUyL#ULeQ8%AX>FYd$(PCOJ(OaL~wj?tmK--95bss_{5_8(sL#mJ|pmCGX z{H;ODzn`qUOo0~Re1RH@ZxO~ln5EXtRKP8Vu%wPZl?9h6dpe=1e(;fB_a6%-V&(H^ zb<#F8DY~>Ebx-{xY%xAyPb3Oc&+H^H@O}(nW#5H?`bhBTgE=MfE8h+Q05*9oYrl<= zD}Gncnwq~2kduLWv)h5h4o)r{^za_1RZIidw4Nn?1ys zUdYuLS+Ro>#xx;gn*=jFD1*0T7%5Q;nd@D5NWYD?#{b6shFaB(nWfzNBUSYh__Ipd zuC9vu+UUGNOgQr?05p2;wi3qdbsTyYfxUte<(1Enxv+D)QZgfa{x6~}X6oW?+h7ub zoAK)eS?VsQzY*uHfJ~RI!xMJkr`KW-$L%O)H4iWzhEz4j0kO{f_@}TpRFLr+*cY+- zP?@()@`~|y*QP5ss?A=p{hj&5_forZukn*jeQkBwtmM8McknJ7O))>o2?Jlpv83KP zn}l$k>MUexAf(;ajouVX73{28^nshv?*>Gm59R zJW|Evcr-)pX$ZhVfnv!%SN>QkPv&`VV zw{EkZ4eSMjfu__ToiyeYEla}v8JNqWQFFJvHb24=X5j5IP4kTd-Vd4d}yBX}X?aKEGZU|NGBRi^h< zZ)zDZ6yQp^at*vji{k+Ekc>CXRX9tBEw1|$bVP=e&ag5jI!x|CWaA?aLqQ_t1XpD0 z>l#?zH+{B-`qR%YkFK58hzg_1_odLQEqdVQAekM~S>w$F?Miu@UhL)&nY7{EUr%B* zG`%AZZhKiAZTYVeeW%FXNc%&X8VUa&zmyF?jJ2WKI1s(t|5DY`c~u~Xr=OOATglVL z%bJmT`-rR2K{NRR3V&4lPFk2eAt1C-+4lO#!1MZpgW=S5GsOG+dKJ){x|a5OM{<5m z4`|mT0x#%+sVIZ2tIo`@hqA?+7Di89!u?ClEe=IAR)uBnUc7Gd_LGa$6n-o0S_jFj zLCoB*n90MsOBQGE%M|khH>iXK-5MWT0gGORBsM!l#Y-9V->*J(Pbfs5G*g^=<2{Rb zoC{Y$-p&u*>kaUhR@d$KN0yh~_^RQXCz4h+-*t9a!7pQGWkQygjn!EJ==}K*jPAfa z`%|{fS2YtP|3sf_+LOPZHvcJ41$ImfUP+AsHdY>1^RH|}WF!Rv6S(1`Y_S8;TkHB6 zxzDcmL%tUQ&Q`aLg^w)f>erS%Yi47=`?prYP2~Qj!>&wV5X??lc95{y)L_Gdhu@_N zO|B(|kHfUNe)GcTD{Hx)>_|TaZ4#8MMrKYXT@H5(pabi+)AU3mm#dU}9QrTH823u7fRRYq>D<_iYU2;XR!Czari zWDnaKnce>1)}W*E#?@1MZi}naI0~@UmxgHE)rRu)`tXq;JQaQb9fcIbTBwsPPK0Ij zIHTY)6rG&oXPGkRub}(Mo+Pah9*74Y2^?$v*GBtKa_?O2#kz|_k0*(DK-J#?<#hmf z0d=bpZnj~()K>z2bZzEY@R98ipb~~tcKR02U?zU z_`%i*hdk?>2qR$PJh6Mjlf*Oi)gLKE=8qSIN1!nYa9YmTUNZXgAAYJV4ZfEG1;+oE z%*;|#K3AtG);f%gG;YhA{fVFgPNRVan6@xM^#aIu`Uv6ayRq-k>~;pJ&e7I1^l&!qGN% zrQw9e;KDzdAJTJXj-Z~aU*MlNR9J|!j_4EB^C+XR?Lm~#Z~KBnGmD4Wgojj0@wc3_ z3iq@ydKsOYshE?f3<8UoMiYnTuag+i zEM!5&qp|%wx#FicHX+njAZPH{dsV0~Z5Il%E*4&vR0A#c6ZxBSKDzDM(Mhqc-w0HaLPvaC0F6g;HJQzjdTd>H0L;dcX>8q~fisxF~kE9N<9umR>@I(se10l!NfB5WVYp(u* zaxTWpm3 zfq=roNW16P8%>o}IpvY}1iq5`P6c|Ko_vKw)f+rO{hpYZ$65NYKQ>-+Xshf#VJ>d;_wCNDUfm4Nbd|;;v`?l)OKo;6)gNGGtU=vT_3@+djs#v8K zwn*|8w5dWKHK`H!NozIT&=`wyohQ!Yysp=ia;EZIOQr>DXbK~CaezZqxJyVw8U*wD z)J0eDDt`}qRKilgcd3tMaw*OeIh{wX-+EHpF`rE3N8%@em5$1neJ$E Xh#UFdvM1ti`@8<0pMiI6{eSoYRA1rN literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/berry_forest/palettes/00.pal b/data/tilesets/secondary/berry_forest/palettes/00.pal new file mode 100644 index 000000000000..7af5bb7d2167 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +189 255 139 +131 213 98 +57 148 49 +57 82 0 +115 98 98 +65 57 49 +255 0 255 +139 222 189 +255 197 115 +238 131 106 +197 49 65 +164 230 197 +115 205 164 +65 180 139 +24 164 106 diff --git a/data/tilesets/secondary/berry_forest/palettes/01.pal b/data/tilesets/secondary/berry_forest/palettes/01.pal new file mode 100644 index 000000000000..391d1e3d17b8 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 230 +197 205 213 +172 189 205 +131 131 139 +65 49 65 +230 238 238 +90 189 139 +255 0 255 +238 213 197 +222 189 164 +189 148 139 +156 115 115 +123 82 82 +90 57 74 +115 205 164 diff --git a/data/tilesets/secondary/berry_forest/palettes/02.pal b/data/tilesets/secondary/berry_forest/palettes/02.pal new file mode 100644 index 000000000000..6b019b884c96 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +156 123 98 +197 172 139 +255 205 139 +238 148 115 +222 106 98 +205 82 74 +172 32 41 +74 131 197 diff --git a/data/tilesets/secondary/berry_forest/palettes/03.pal b/data/tilesets/secondary/berry_forest/palettes/03.pal new file mode 100644 index 000000000000..9581f2cd8be5 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +230 222 131 +205 180 106 +156 213 255 +115 189 246 +98 164 222 +74 131 197 +49 98 164 +115 205 164 diff --git a/data/tilesets/secondary/berry_forest/palettes/04.pal b/data/tilesets/secondary/berry_forest/palettes/04.pal new file mode 100644 index 000000000000..702db8a907c6 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 222 172 +189 189 139 +156 156 106 +115 115 65 +255 255 213 +255 238 180 +238 222 156 +172 197 197 +148 189 189 +123 180 180 +230 246 255 +189 222 222 +172 213 222 +148 205 205 +255 255 255 diff --git a/data/tilesets/secondary/berry_forest/palettes/05.pal b/data/tilesets/secondary/berry_forest/palettes/05.pal new file mode 100644 index 000000000000..3a2db72a7f32 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 238 +172 189 205 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +222 205 131 +205 180 106 +180 139 74 +238 230 139 +222 197 139 +213 189 106 +189 230 164 +172 222 164 +115 205 164 diff --git a/data/tilesets/secondary/berry_forest/palettes/06.pal b/data/tilesets/secondary/berry_forest/palettes/06.pal new file mode 100644 index 000000000000..93518605a9ef --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 diff --git a/data/tilesets/secondary/berry_forest/palettes/07.pal b/data/tilesets/secondary/berry_forest/palettes/07.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/berry_forest/palettes/08.pal b/data/tilesets/secondary/berry_forest/palettes/08.pal new file mode 100644 index 000000000000..650a35cc894c --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +189 255 139 +131 213 98 +57 148 49 +57 82 0 +57 115 24 +98 65 74 +131 106 82 +65 57 49 +255 0 255 +255 0 255 +255 0 255 +164 230 197 +115 205 164 +65 180 139 +24 164 106 diff --git a/data/tilesets/secondary/berry_forest/palettes/09.pal b/data/tilesets/secondary/berry_forest/palettes/09.pal new file mode 100644 index 000000000000..df2d04037372 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +213 230 189 +57 172 131 +222 230 246 +230 172 123 +106 205 164 diff --git a/data/tilesets/secondary/berry_forest/palettes/10.pal b/data/tilesets/secondary/berry_forest/palettes/10.pal new file mode 100644 index 000000000000..7464374928c5 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +222 230 246 +189 197 222 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +49 139 49 +57 82 0 +49 180 98 +238 230 164 +222 205 131 +213 180 106 +205 156 82 +106 205 164 diff --git a/data/tilesets/secondary/berry_forest/palettes/11.pal b/data/tilesets/secondary/berry_forest/palettes/11.pal new file mode 100644 index 000000000000..6fe747b2d77a --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +255 255 148 +222 213 98 +57 148 49 +57 82 0 +57 115 24 +98 65 74 +131 106 82 +65 57 49 +164 164 49 +115 106 49 +255 0 255 +164 230 197 +115 205 164 +65 180 139 +24 164 106 diff --git a/data/tilesets/secondary/berry_forest/palettes/12.pal b/data/tilesets/secondary/berry_forest/palettes/12.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/berry_forest/palettes/13.pal b/data/tilesets/secondary/berry_forest/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/berry_forest/palettes/14.pal b/data/tilesets/secondary/berry_forest/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/berry_forest/palettes/15.pal b/data/tilesets/secondary/berry_forest/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/berry_forest/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/berry_forest/tiles.png b/data/tilesets/secondary/berry_forest/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..dacbc0120342b541f1ddf9ac3cbf39cc11cc3f64 GIT binary patch literal 986 zcmV<0110>4P)p3VMHhUOwdMW$X)MPMWS)L~||G z72=*9t-tiWJBK8x>{)kCT1r-6FlI8+Nl79#RP{NYBxAPk`<&&8Yl%5rpVUhzD2~^k zi=(Ub{D}};VVd1|@5+0<$0oVpg57=W`7rvNt2e*oMO;DT055dc0;0eJsWLIh~M4ldYmRwe_Y z^&R&BSqk34g(}1efKBjws>(nBPG2yaUPADnEj1pbf1k|Mob8sveVzgcew(Gz&<`0U zS9-qx-^70a+u--MR0`!QSA*8#w+uk=dn>X3r64DqN|^=lo3&Y#3J$LPTUpG0$tfWK zun|Pmk#tVV41fuKqY|a4>xiVpSX_h4Ixhe{6|074cA_RC*&!JV}OsI&>RRbc6UQ) z4g(C1P<;i!SWh@T8~_3uWH$~4ID*}eUje{A_;ENOh{yu`4W%+3ZOi>O$N&HU07*qo IM6N<$f{r=TumAu6 literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/bike_shop_frlg/metatile_attributes.bin b/data/tilesets/secondary/bike_shop_frlg/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..d1a4900c56a96fba8abad83d1ad2b05012337099 GIT binary patch literal 168 zcmZQz00RXeiHyO5NCdJRhz$n~5PfhyIs+sR!$3I&CS!wE0gRNT8+nGF*Tv~Tg-XgkD_QTU~>#$8EH6(GPR)>Tl-q;41fh?erR_F5JyKDK+J;#FwFoV zX&Jzg1d+Tc#)<$UCW>PvQ@gkG2dfd309&am>lBUF#vwn714XtuG&q1TSYR2T!^iM3 z16b)fHW7b{*BM|Y{xZPc2@w|t?5D30U_uFv`msJrF+RM!jDtYK+LBTw0BOtK0u2HL zh%X6Xxv2`Ef8NChM{E0D$BsCOy?KQ848${HFOsVPmZT2ZV7G`C-rduC^sw<>;`2PV z?FGKfl(R#5%K=Z(QwiWw2tq0sw-A*=5COVqBZeV@9W5fMVEe~(+86a!_MHIzY`4v{WLeYy&uPji`+407DZ0 z;*$oXLj)E=_eK}=^(q5QbNvG4UJt1FRe+$t{s-_t732PQssO&; zYJfCxs-U<5oO&6#h&4d<2h;P+3&e{Ne>$dTdc~ZXUabmsz_1_&&`7&@;~|fD1E5m| zjH({_S&lsAdV6ZG31FTVJ)Y5quJ4n(FS{z|)nHPds|ei2>5(=W$Oaq|EH?~07A#=*Uc!dm?d1Igeh8x?VuIbw;6_22RtgHj z3f&+Cl^Ic{h6Y4r7SzNln)|T%0p63B%2##nJ$0*uh^}mvt@2!XcZ*SiGybVc5u-gW zq#`;}$Lfl{dcvOnm)jAmg*fvIQHHz!^b2th*!)y^TLwf>e4(%Oowlr>=kk^FhcV)QJs}S0kS_Tz+x%%WW!6mC2wz0w zX3T`lvgKJbV>ZmX`4OKi&tm~Uux)t}OW46Kc)#EHgE$#4 Uy*dB0ynJtmoAQ>-&B@LA3w)8tasU7T literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/burgled_house/palettes/00.pal b/data/tilesets/secondary/burgled_house/palettes/00.pal new file mode 100644 index 000000000000..6d876039d15c --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +172 148 65 +213 197 106 +246 238 148 +82 148 197 +172 205 246 +222 230 230 +106 197 106 +164 255 180 +205 82 65 +255 131 115 +148 148 139 diff --git a/data/tilesets/secondary/burgled_house/palettes/01.pal b/data/tilesets/secondary/burgled_house/palettes/01.pal new file mode 100644 index 000000000000..66561f6d3326 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +197 197 148 +213 213 172 +189 230 255 +139 180 222 +131 115 16 +164 148 49 +197 180 74 +222 205 106 +246 238 148 +222 213 230 +90 131 180 diff --git a/data/tilesets/secondary/burgled_house/palettes/02.pal b/data/tilesets/secondary/burgled_house/palettes/02.pal new file mode 100644 index 000000000000..87a022102f19 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +197 189 213 +255 255 255 +106 197 106 +230 213 123 +255 205 90 +255 238 197 +90 90 115 +230 238 246 +156 205 246 +98 156 238 +246 238 164 +230 139 98 +189 98 74 diff --git a/data/tilesets/secondary/burgled_house/palettes/03.pal b/data/tilesets/secondary/burgled_house/palettes/03.pal new file mode 100644 index 000000000000..783496dcd9bf --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +172 172 164 +255 255 255 +230 180 74 +255 246 131 +65 98 156 +90 123 180 +115 156 197 +222 213 131 +164 164 172 +205 205 213 +238 238 246 +106 172 115 +156 205 139 diff --git a/data/tilesets/secondary/burgled_house/palettes/04.pal b/data/tilesets/secondary/burgled_house/palettes/04.pal new file mode 100644 index 000000000000..89eace6050ad --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +172 172 164 +255 255 255 +230 238 246 +172 197 180 +197 222 205 +90 189 172 +246 238 156 +205 189 131 +189 164 123 +148 131 106 +106 106 106 +213 222 230 +238 180 115 diff --git a/data/tilesets/secondary/burgled_house/palettes/05.pal b/data/tilesets/secondary/burgled_house/palettes/05.pal new file mode 100644 index 000000000000..0eef3df8e8fb --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +172 172 164 +255 255 255 +213 222 222 +164 180 189 +255 0 255 +131 115 74 +213 213 148 +197 189 139 +172 156 115 +148 131 90 +255 0 255 +255 0 255 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/palettes/06.pal b/data/tilesets/secondary/burgled_house/palettes/06.pal new file mode 100644 index 000000000000..1d08ce9a2024 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/palettes/07.pal b/data/tilesets/secondary/burgled_house/palettes/07.pal new file mode 100644 index 000000000000..c1e7c3d5c579 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 diff --git a/data/tilesets/secondary/burgled_house/palettes/08.pal b/data/tilesets/secondary/burgled_house/palettes/08.pal new file mode 100644 index 000000000000..c1e7c3d5c579 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 diff --git a/data/tilesets/secondary/burgled_house/palettes/09.pal b/data/tilesets/secondary/burgled_house/palettes/09.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/palettes/10.pal b/data/tilesets/secondary/burgled_house/palettes/10.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/palettes/11.pal b/data/tilesets/secondary/burgled_house/palettes/11.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/palettes/12.pal b/data/tilesets/secondary/burgled_house/palettes/12.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/palettes/13.pal b/data/tilesets/secondary/burgled_house/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/palettes/14.pal b/data/tilesets/secondary/burgled_house/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/palettes/15.pal b/data/tilesets/secondary/burgled_house/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/burgled_house/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/burgled_house/tiles.png b/data/tilesets/secondary/burgled_house/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..9fcf94314319ab5a1cce8301301354c6ea903c6d GIT binary patch literal 1994 zcmV;*2Q~PKP)^b_MoP093cfG)MII^Rzxb&A`EAOY7P~LR4sd{ zkVr3HwUq{NIDJu1mzCz$0Tf;ktnvo@d1Zry@$)!y z{Cq7y;h7nV9poc!1K{+)zStl~mv6M&?W4=}fHq!4yRod;+fimcn-TT);FZ1i4uBK? z4h9$LI{@h5_F(VLI{+9+c%PApYdB}(n&UJI07KgT0K*t8ztJuJOT%y*wTY%}uci1DXI97OD!S2ZNn7 zB^1N!c;2Mvd3OvYWQGe%$L0|b?xSG$<={1q5lTy3xFC)RaqmH^7C5ljz+U|e* zECv)6i~tbZ)boMzS4RjD^~1=1jer@LJb`g5Y#|AwEDg*Tbt@HAu z+?mkgEtJA|?A}8mP>AV2&Lt>x_fOY-?1tg*F~D&%K*@;!_z?lh)~35uZ~~o{BHSO{i;0rTanbb2R+jRH)5_mStx-Z~YIvC3uTz{eBm3)x$Z?!11` z>>A^i1>PVip+>+V?1-I~fML9i0PKe!$Dh=<6_81ID*>n=l`ztLX|p~gZ-5!>`}BGzrnc~FMt5R_|aSr2u1-o-@^G4z*9gV0UH~9BLnpM z67b${M8W@Xd^89i#C^`^(h`sZ_%0py@VmlT0{$R#SVp!rHcy~A33*eHftwd=oIi!{ z;HFZ_PrwuL7{$#>K%XLDTw9p88bUO2jVUinfXR~uJOKaQhihUj27sCu5)gI!AfD38 z)>uQ%zt5lIb=|C4<>22vT?ve zlbdGLKSjy- z0_8fyeLIbF5XT(1n#Dazz9{6uT-2w>yI}*`CcI#X#QfyeGA&FP!@!TD0zooyEPVw6 zfEd!LE;eAO(E`9v0YMW1!E6c;;Zp(o*opxJw$=}ihfJ;?0{Gw#{JbW|vIP9>`lfUT z0th!Fkig;>q)OZm7!&CPICTuBC)F5k73-asOu6B9;BXLy0#;!b<>?C=^bfNLa7w1M zD}eYZS5N!FM(pi46L~El-FvPfUr!D}Zktd>$E6Fk}L<yaupvjviW?GVp6@UY;61VmNV5h{M5QW=OuP0mJkf~a` zqChrA#^C{b4f9|_RvXrOxIGuT?vng*XX0N~yNUve09EKifUMpjjwS$Ho-Dr3;h$>6 z&Kv^3I(RtfWB}Q5lGX-ma3SY2?$S8~@c4;o2!Ik)hA$~Zo(pq)Zmt&}0eDmQ%*+ye zn!$~@D&=JWIVM&SfDckhHA2_rNxe&e%(ED#I5ay@QlmmNhziu^S^|Ljo#nGRAaS+? zP=}QOYU`M|LsX4%u~z5@y%&B0xSq`B=mX^oja?fCH188Ei%$ngI6| z>lz-;9YHVEDOfTxzzimYIy^za>R!i3_*1J&M<-<~11b{~4*)9&;EhR{lm8cRsw377 zeCnf^%oQ&z9SFGOi4_e2+9YUMttgl|06^%ZXHXr2gzF)r%77)F19)vC;VZJKs|<9*1(JNOE0cc|VWB62B^Ab?(KIKkS0cbVFbU46j>?otU15)fh cEklcyi{G&YO~}3Hdu-HDU@l>Iov(^fk(b@1=Fq;ZrJ%o zBHH)fHT1hs9y;fo_GbOc+!<6L@G28@2S|(;x8Ee**8N6g2<< literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cable_club_frlg/metatiles.bin b/data/tilesets/secondary/cable_club_frlg/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..0e2f2a6c34611b69b3235dbbab718998012b560b GIT binary patch literal 4096 zcmZ{mTT>fH7RNhV``~?(xAc&QeTerPY(5E}rKy^&;(;o)E)XC#(%=;VJ6_a+VNozc zOKPzgd}*>1nP__!gX0NYy4@+qpgDe`eIJ5w+2&Bk4Ei^!a!9oSquSSSGga zZ%!uGy_#v8wh3W9-ZzKaN86SU%)RJn`~I%wd*;C0PsR76wmI59bn&=e)T>9e)Ai~9 zCd}5mX>OUjDSea9XL&y~%c!;-P5AHnC4aO^(SA4l9Ep6KPPjNOWEg6~GQ zegiRb%VE?&yb-Z1EW@&-y_cF#GP_Hr;`@HVFZ!F%zGN;(fAg#UsQ(W1H_c^p$;|k( z{yWu6h=-s}<5w%yVzp2u?M<^s`f+{Q?V>31RgGsF{Y*f3lE=d;{iKgkl3` z`OqApUT?pS%>7v3#_uCe`j(HPL&SR=q8`~B?04)e`y*R4i)IaG^VzA7&9|4SR=PiE z?HgvpjVJ9ipYC58v+{GlGAkx$we zwkUrDTs3rek)Iifrc5=vfp$kK*;0 zgS7r+Fd1O&LtQ;m$UGZ<3N`5c2?l-=Q&%6n3hl9!zMcQy2cZS;&3A5)y}3FV@|XOW zKX>bSiM@R89eZ|tulQ^JYUuTl<=5UT@AdGjVY|NLq31*4(90pLJ+|k=$HOm&L&xrZ zU~V`aJmGw-C-6<2=Lu6r!UZ=U;vz5halwo8<9>DHyZfE6-G70dC_{73jj!-WyvFNY z{x5$FmRwT- z71w;6N5r@rI4``(7x+AXW6*K{?hwa2w#XOx8qDekUXypcc{@JaHy)arD=*^X9>&Kz zk{OtR{*oI%i}TY+^>1>%di~ty`+eu@fFJbnzIXck&7xx()GzVBVUo(OLK>mCT6sP*MzG|rFJ$9yIO+W(v+XDlZeD+@gB;Zs6@ zD)5*}^!yhkmZ{)hcSH%<@VqF9snUq(?tiu@ieeOI??<7O7bB%9VtT_uejfQfM(+vq z0F;u9nvg;Xjr?8s=b|oZB`s9x--2bofX|hX4Y&2`qAFS<5QsCx*|eAzi!j7vtCpk) zO3hR~iToz=cf}Xtb7+sjXPo}Hh{UXDyYZ12FSW%i)}HL>7_?_n`U|3i?0uWh*2J1P zfLZ-cX z%5uZa~swR(5uo_r)9 z%d28VTo*UQKKKdP#`l5)`8as$;(Nh8@G}>$Nhy_VI7BmADSiM7e zB)^o$uKxF@_$YWGkAp8={!#G1J~nboF37-*|4@DyEXsfUCT|7*l1sAT=4uk`z*&DXLcBl(fjTa*8kx8B8PCV9{!wgp8tc84dT@_SQXPSsJ#92`l)!F9RW-N}cqAu!~=``b0 z&~=^ZG%-KaXD1wQW6+;*`r|56v#RYlQscUrtfQEm-Z7r+ z%-|>d%-~nt@~8Y$?`!^tLCc?bXa4#XJdX~m!)U!9tB*lF-qAbVYN`FuVQgh+Q!i4z z4VXJ0-4Traz-bSx-jDo8%&x~j#KagL8mgt5>OZh=`L~|shx(y9@lN=HnnyRFAG#k~ KZ&H@ybMq_o`HZUo literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/00.pal b/data/tilesets/secondary/cable_club_frlg/palettes/00.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/01.pal b/data/tilesets/secondary/cable_club_frlg/palettes/01.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/02.pal b/data/tilesets/secondary/cable_club_frlg/palettes/02.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/03.pal b/data/tilesets/secondary/cable_club_frlg/palettes/03.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/04.pal b/data/tilesets/secondary/cable_club_frlg/palettes/04.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/05.pal b/data/tilesets/secondary/cable_club_frlg/palettes/05.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/06.pal b/data/tilesets/secondary/cable_club_frlg/palettes/06.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/07.pal b/data/tilesets/secondary/cable_club_frlg/palettes/07.pal new file mode 100644 index 000000000000..00ca6903faef --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 106 +255 213 131 +246 180 82 +213 148 41 +180 172 148 +148 139 123 +255 255 222 +230 230 197 +180 74 24 +213 98 49 +90 156 139 +131 197 180 +172 230 205 +156 222 115 +148 189 106 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/08.pal b/data/tilesets/secondary/cable_club_frlg/palettes/08.pal new file mode 100644 index 000000000000..43d6db90dcd5 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 106 +230 238 255 +213 205 246 +164 164 180 +156 197 156 +106 156 139 +246 255 255 +0 0 0 +180 74 24 +213 98 49 +123 106 164 +156 156 197 +197 197 230 +156 222 115 +148 189 106 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/09.pal b/data/tilesets/secondary/cable_club_frlg/palettes/09.pal new file mode 100644 index 000000000000..87857607f77a --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 106 +238 255 255 +213 222 238 +189 205 197 +156 164 172 +0 0 0 +189 139 90 +222 172 106 +246 189 115 +82 156 164 +115 197 222 +213 98 82 +246 148 131 +148 205 90 +49 131 24 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/10.pal b/data/tilesets/secondary/cable_club_frlg/palettes/10.pal new file mode 100644 index 000000000000..ab8f75e5a1d1 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 106 +123 123 148 +246 255 255 +205 213 213 +0 0 0 +255 123 123 +172 123 115 +139 230 98 +115 189 57 +246 230 24 +189 180 49 +148 148 246 +123 123 180 +222 222 255 +180 172 213 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/11.pal b/data/tilesets/secondary/cable_club_frlg/palettes/11.pal new file mode 100644 index 000000000000..468d7212c795 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +49 57 74 +172 164 255 +131 123 230 +106 98 172 +82 74 180 +82 74 98 +246 255 255 +115 172 65 +123 189 74 +148 205 90 +98 90 148 +139 156 213 +57 57 106 +148 205 90 +0 255 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/12.pal b/data/tilesets/secondary/cable_club_frlg/palettes/12.pal new file mode 100644 index 000000000000..05794ac8234d --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 106 +197 238 255 +172 205 213 +131 164 180 +123 156 180 +98 139 148 +246 255 255 +164 123 115 +180 74 24 +213 98 49 +98 139 148 +172 205 213 +197 238 255 +156 222 115 +148 189 98 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/13.pal b/data/tilesets/secondary/cable_club_frlg/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/14.pal b/data/tilesets/secondary/cable_club_frlg/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/palettes/15.pal b/data/tilesets/secondary/cable_club_frlg/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cable_club_frlg/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cable_club_frlg/tiles.png b/data/tilesets/secondary/cable_club_frlg/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..f71f2943244b901263a1d74f543f0bb72af0fd8c GIT binary patch literal 2667 zcmV-x3Y7JUP)y}Kii)Tu!K z;Jy$=%DnG~-}m0{JsuxPYns$3DZA;D@J`>eeAn+9A*c9WW&m+*%IW1}j1i;KN7&^8eJr0~_o?!c>Cgpv6i^ z0C*uGfcb|6a7E{&6STr$3V`{IX4WVq0nuba0Q0+(hVg+YWdXnus;bi&59WSfm~V7R z0ZgU~J0KN+x3}PWogKPN0FU`20H+7)bWQ@`_*GbMTn1qN2*ByVt-9M3D^e2BWPnxP z1oVdyAmDmmS&^~<22@-HM)`@i8k&BC3%98EA$EfM_z&!4~>M|2&(< zbO7GiN&pNVADh7^+_J`x*|^u=yR*d)Mj?RTTlxyk{|9|MSK3;_~=D=qAY*Tl(-;*SAD+cmxSsVFAi1X|`)fba)< zysa_7LK2|wV4o;}$R9l5XCo>=@7+rR?xQ3?`eOjm?n%==W4W2y-Et;t?QxwDY^EfISt^Hlpbq%{uCgx*JT^jY^M+sj3#Wv0k_%tfH)@*5n{$u+9v%Z`#=En7@*ym znjlL(8iT=;$N2#rWAo|L;{Z;D zT4n-uuPB$)y`sDTFSg1a9U%9Lasr(Gv1%Ovdw9-sEC8PK6bXt1$4&6yn9FvdLWK$y zDpaUYp+b`-HqY?3-ov*ON}6W+wDGVw{B9Xu6*}y#Y-c9G(03MgcJ7xn!}4&GtF}1& zcHIxIdu80Vv^@FpP`&}A0(4vNvILhoz_i`;x;i)#QtZ>-oWQvr}*n-Unty9BVV(~Els_!eJdo0)(>r%lC@X4>zi0pHn|7 zDHZTS0*odD9NNzMd!v0iQUK!HGrFPEZbC_09FEfo#-sh^cR7GPK=5Dk_#A{5)3ic&H_piqitghSfdX{sbq=_QY3<0of8b$D_kO&Y2t@J!VY(uex z8@lT+CIGZ<_a^Q_@#3?3^xI=d8XI<1OT5%fY?0c9gzZ<;0FMjPyaI9MDv;ZD!>%)I=iKbfVaU< zfK5$1jR5eTQ2@G|2Ds4s!f%w9#;=wTfPWzXuN8m{;2Ip@*2QWJG6C?;mjcke$pAZ_ zO#+k!04k|A<|+f=aPV^aFe(630Py)>ytHK7um16KNbqVrFy{i4V*t`WKL)_dmu~}L zIQ-%b-25AjzWxDyXh;F@&CNstm;|q0Eg|5|vFV)c_a6e_;kko@uK@5>3{an%U_3U< zweoP_I%q!or2i1j=e|Jzp9?f>> z0Pxe;d8E@Y+K$eK5k_IZq+dP)-~ixTND^T(;)~oF_o-#03Nl0PyUR#wv3z zzii5{G4*1}_utAli56%Id%JMi&jq-^00X!@`;P%U_!(Ho0GJK{oMQki4**_X0ImUE z%_!j|7obp~LWK$yDpaUYp+bcU6)IF{mc-}Rv$Z;XmtTB-JzI@TfM?8*l?`B@U(eF+ zY9@gFUk6$0o7n*Rj(e8Ap9MIap_zapL6JcGUk6!wlm!r9e55Zw=KAUn{~j}`^}+1p z(*X88W>n=`9)K1^>%nfmZ!hW5deG0eEvr)<&~W7gw5SfKU@Ce1CtET>CD$mZ3382s znjnuKIx$L+a}=Vv@F*XEeUBOS+njSjmU7OyASYAKxp2(sT&Pf?LWTa{^?CvLF97^+ Z=wGgIXuV~1T08&%002ovPDHLkV1o2ez^?!R literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cave_frlg/metatile_attributes.bin b/data/tilesets/secondary/cave_frlg/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..510f0fdf1a5260be36cef95489450773a9de6a49 GIT binary patch literal 644 zcmb7>F|GnJ3`8C27qr~Kp@fbK#AR3zoP>k(#yF8#iQ-$Dcrs%<*{qq_#;lQC*uxjd z6FgEsnss?#20hY3Pwq0WT8M>u0b0Q}!dWLqzw+S2Kck)U9BFx{uGv7*6Ha#em8&** zHHxA<$RsaA1 literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cave_frlg/metatiles.bin b/data/tilesets/secondary/cave_frlg/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..9f35adc11270c0de8bce385a67e58192869c8ede GIT binary patch literal 2576 zcmai#cWfM05XP6@B)G%$8glfSK%Z{C}kAjp4O08B#&{!12I zi&oqY@;0)q>?wQ6)acgep6K3){x^g-hIfY3L-KXu_2C_1n={wbPHsmBp2E|c5KD@DAQ}y>86GdwAb@E?&n6_)zt?SN##Lw?n*Ryl=dp^G>S2e@37C-x5v< z?+Wh@SH_>?3;c+mT+ibC8NWC$#n<>1zu_@Fju-KgpYI7giI?$;GxzVr3+TzjKMS+< zJa77bcAwwl2RwiW@x11p`FscuSMpAN1dnRoyWGxup?xq@zgP3O41KQGjfLpPx6aG) zFV>e0r0O38J*q+uf`v-ecvp5F-V@^?^M1+9|KRsYyni2!;JJvoaH`zf~>#Uvut+y zA66=tjxHTjBAZ^{3jY20M&If0_`~0Wz0*JOm-AA5hrjWU^BY=MA8B2s@dv?Nyrp&Y zDOgVt-j1x!X6`t;%6U`8)c+*ke`nc64v+(#ca`1bAUW8X`_Iz; zVExVXhskia4^`ef$0g-`+#|twWBR8ijczyp({kLPe7f6fle!%9 zJe@j^dNT7U-MyNhbLBj_Qm*p(aK2n1SIafd^f!IW2k*63+3th$ygsR|F#8SfqgUVI zGMz{1dB-Q5zhv%5=KM8o%{=j*Y#?zQkpZ$yTzXc`jUp2n|KRh4uWB>pF literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cave_frlg/palettes/00.pal b/data/tilesets/secondary/cave_frlg/palettes/00.pal new file mode 100644 index 000000000000..2f3f97d6fdb7 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +189 255 139 +131 213 98 +57 148 49 +57 90 16 +115 98 98 +65 57 49 +255 0 255 +139 222 189 +255 197 115 +238 131 106 +197 49 65 +164 230 197 +115 205 164 +65 180 139 +24 164 106 diff --git a/data/tilesets/secondary/cave_frlg/palettes/01.pal b/data/tilesets/secondary/cave_frlg/palettes/01.pal new file mode 100644 index 000000000000..09828f4f1f27 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 230 +197 205 213 +172 189 205 +123 123 131 +32 49 57 +230 238 238 +90 189 139 +90 90 115 +238 213 197 +222 197 164 +189 148 139 +148 106 106 +123 74 74 +90 57 65 +115 205 164 diff --git a/data/tilesets/secondary/cave_frlg/palettes/02.pal b/data/tilesets/secondary/cave_frlg/palettes/02.pal new file mode 100644 index 000000000000..6b019b884c96 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +156 123 98 +197 172 139 +255 205 139 +238 148 115 +222 106 98 +205 82 74 +172 32 41 +74 131 197 diff --git a/data/tilesets/secondary/cave_frlg/palettes/03.pal b/data/tilesets/secondary/cave_frlg/palettes/03.pal new file mode 100644 index 000000000000..ef7460f41eb6 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +205 180 106 +156 213 255 +123 197 255 +98 164 222 +74 131 197 +49 98 164 +115 205 164 diff --git a/data/tilesets/secondary/cave_frlg/palettes/04.pal b/data/tilesets/secondary/cave_frlg/palettes/04.pal new file mode 100644 index 000000000000..e83c6b367a2e --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +230 246 255 +189 222 255 +139 189 255 +115 164 255 +65 139 222 +57 115 205 +82 148 230 +205 222 238 +172 189 205 +123 123 131 +90 90 115 +49 115 197 +238 230 139 +230 213 139 +213 197 106 diff --git a/data/tilesets/secondary/cave_frlg/palettes/05.pal b/data/tilesets/secondary/cave_frlg/palettes/05.pal new file mode 100644 index 000000000000..c5a653979a01 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 238 +172 189 205 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +213 197 131 +197 172 106 +172 148 74 +238 230 139 +222 197 139 +213 189 106 +189 230 164 +172 222 164 +115 205 164 diff --git a/data/tilesets/secondary/cave_frlg/palettes/06.pal b/data/tilesets/secondary/cave_frlg/palettes/06.pal new file mode 100644 index 000000000000..9bad44649513 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +205 230 246 +180 213 255 +123 180 246 +98 148 230 +65 123 189 +49 98 180 +82 131 222 +213 230 238 +172 189 205 +123 123 131 +90 90 115 +238 246 246 +238 230 139 +230 213 139 +213 197 106 diff --git a/data/tilesets/secondary/cave_frlg/palettes/07.pal b/data/tilesets/secondary/cave_frlg/palettes/07.pal new file mode 100644 index 000000000000..6b0281bd6a48 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cave_frlg/palettes/08.pal b/data/tilesets/secondary/cave_frlg/palettes/08.pal new file mode 100644 index 000000000000..1c8d33fac57f --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +32 49 57 +255 0 255 +255 0 255 +255 0 255 +222 197 189 +205 180 156 +189 148 139 +148 115 106 +115 65 74 +82 49 65 +90 90 98 diff --git a/data/tilesets/secondary/cave_frlg/palettes/09.pal b/data/tilesets/secondary/cave_frlg/palettes/09.pal new file mode 100644 index 000000000000..3795f6c6a5ab --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 222 213 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +255 238 164 +230 197 139 +205 172 123 +164 123 90 +148 115 74 +106 65 41 +74 74 57 +0 0 0 +98 139 197 +74 115 172 +57 98 156 diff --git a/data/tilesets/secondary/cave_frlg/palettes/10.pal b/data/tilesets/secondary/cave_frlg/palettes/10.pal new file mode 100644 index 000000000000..937405d15bfe --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +255 0 255 +255 0 255 +255 0 255 +0 0 0 +255 238 164 +230 197 139 +205 172 123 +172 139 106 +213 197 189 +205 180 156 +189 148 139 +148 115 106 +115 65 74 +82 49 65 +90 90 98 diff --git a/data/tilesets/secondary/cave_frlg/palettes/11.pal b/data/tilesets/secondary/cave_frlg/palettes/11.pal new file mode 100644 index 000000000000..bb4f4867c43c --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +238 222 148 +222 205 115 +205 180 98 +189 172 98 diff --git a/data/tilesets/secondary/cave_frlg/palettes/12.pal b/data/tilesets/secondary/cave_frlg/palettes/12.pal new file mode 100644 index 000000000000..583384664faa --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +0 0 0 diff --git a/data/tilesets/secondary/cave_frlg/palettes/13.pal b/data/tilesets/secondary/cave_frlg/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cave_frlg/palettes/14.pal b/data/tilesets/secondary/cave_frlg/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cave_frlg/palettes/15.pal b/data/tilesets/secondary/cave_frlg/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cave_frlg/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cave_frlg/tiles.png b/data/tilesets/secondary/cave_frlg/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..8e0f64a78c11aad7f3922527072153c8a004376b GIT binary patch literal 4193 zcmV-n5T5UeP)+cFW;L0IQLW5ff(z+g%WJXb}Y}k6^0rh z(g6KPeE#+O;&1z70IkI1I&f^;brz~6&kx@KAb$DyeE=-opH$*89n`9I*Kz8tk{60F zItlP^H@^NE0W4!1V34m?!>GqAUSo@gxqjx{K^l(xK z3}EwoCkZ1d6FCX+6##zm_-6!wtusJ)>D);j*zkgyU9C$Yz4cUP6MoPK^~K5!R^mC@ zg6mp8n)Cw(KqQbJO7Tr&#olwe2$;Cpyyg3sTHMsX5$X+EgTUoUNYec^fD?Y@YfOaR=O;6L-2 z6%B+;U>t<0OyX@%zn$K_CA<~Q5y<6V)$0JC>9*GbH!RAT+tDL5BOb|QtoB)z- zKfu3kH{=)kJ;@Su*(X?5h|GVR=L!5U6FiT05N-Pr-VegCi_b*#5|}a!HzGU~FjhYz zmC;Ji^5-g*Dw8}9?6;!rKx_wCJ_rMU14}0V0SUr&0KDaIhscvbupYxWNk0hq`3^!h zOL!gtUPaHMn7121f*zD3cE}2^0HB=~{7|I3me}cr`Z)pUc>oxM*ka!(D)c#0D2x&(C;O2QUC;`GbCnzqu;XzkBboMWpX!(pXJY$%u+p%ypV+I z7WQH%RTjKZS`+M0Wlz92&$BF_2hGGuPxQxcMhOfD0PstF*vYU}reXrn&qsgA=UFAx zzlc^c!iHpZwYvd+68haDU#K(#|2sj3#m8sAyZI>%03;e9k9R*X013)e@0kHuhuR2$ zqmZI8{@usRAAR(ZRf;7gUJc+efE1ZJ*dTsi4h%qmWJ!FELPR4f!1A@LSFc)SdNInw@p}~{_GyH}CrqVP8KsTU~10dax?t$Ol4gv!J*W1e&fQ-NZ zbrH`xAHdTg>ES)_7lTkNBIBi&wWm}DfP?P=fRRe_0TjoZC`M`8_oFUi*5m^Q2*KYE zqyFM9(r{M(?MA8r6agR~zy&`3_%o^tM@ot=?5OiW;FB9=-yZtl@ApNw{UyqhO!wB6 zO2Pl%ETc$B<<+a#mOp#yVT(uUAjxYL#XVv`#%ctBbg(btt~(&RDR&)mfL{Q>1+FEJ zJk*6F6ewZRCu$aF+yek4VH!W{p4q4PSC^t#De%81fD`~rOIQEid$i(PQ%53<<+HIL z^vKV$!+YQ-GU%RZQ~d8;!W_gxmIGt}xbgwLZcU-O^u`H^YN-YQe=+GsmWvsgYkirK z1O$+hH8Z%tfB|$kp9Ik1yoh{&RwKiFE6T(94}W4XxbA~VDT|^pkv$;?h}(YHBdJo!00Zw< ze_$0oWm%$XU<%iJ)O}iCBJMZAAB1@!MwTKj@vU>P-Q$%fMNe6V(I`)vOhd0Kjz(I& z$HBiJb3c_49|Ei(**__I$}(mMk|EDD{3b^u(h0*!lo6R~b~bwJ(F*0A`*{E9ZR#n@ zWM*1B&ou1mnF4@J7PVkh2~#L>kN7wetdOda3O!FzPq`lpq3gZStseq6+Zp-bFG^Mq z+y+%3%PtYWL@w_Ko0fbE02ItA5$o0SOe2uGWE$_@1OLq8fc)Nd6?u<8OHKLEf$Pz{A2C~kPLuAr(*e^B&%c?uut zD~R@YGOL7Y&_^SIoG5tPd6?1%X>IcqewrZokQp>U4?2*F>*MD zpn^sKy)v_-)Kik>1c&pq)n_P!vz`hMR}x={nXw-(q*Djsc$L*FBAf zzB|x&2&)|qT@%8fIN3vhO72f~%>b0{dSbT(Av&uM^nAWUXfz4{x6QO#nFRn#c;1tg@u9nyimJJ5Fsoi&dAtex$-E@z_}09tMfo&TKnKO15Y;(9Djc25^7)&!fzN8`T|sSy!8}TLJCBTj^SeBvf+p zMB5&F!oPPYh*T~C{+3m`>eKU`TGeT>1S>&+gn}+z9>5B};=4qBr+B$B2|#tNcHwQ( z!Fg@Q`a&3z2Er~JnoK={AIxfazEgbAAupZ;aAwZqLFK$tZ#lK;dKDclHST;B}m!2dm{EF`q^_}9JPtmBf5!w`ul!e?2+7YIm1;=<|IeYo9Xi~Hl z=q@q8Q}ihs3jm77S!bbM=WC)$wcaXRdFtr)&MSe0vfA0=yF`7bxE0V@U<@D=D0e}J z8bq0O3kgt>4p1u&t;Vr@041Uw(w^KV0EzWmH9){u`JI#ZP1f3)Gm#HE9qNb}U~g}a zV!^Rnt=R>;YTL6Ag(T4RqX0Ob59V|@w|Te)K+CSyY|6~8W9ml%&{=gR@kK)!$vz?l1{0$>%nnDTK>ea;6* z`5=H6DTFgSP+DXK$|qxh%a{NBasx#nr#|I_gM3gvaIkEPL0pP!hZD-m1VD%DLZ_pt z?^8Y)599*}3czT!bWn3f^Ckd_lWE?j>c(0s|1$YT$2T4_rp}EW_NgqS{HZ=FKQh{Mv|5&l@%3oO2 zOi=IeO2`<^hcdoV88+?e5W5`?pL5Pf}87CVnFAX%+w0k zc|JeioNu<9O;F^9W-XUMrV8J&0|J=7P6rnQKnKTht+3M}TGN!qkn%iWedWT!1%-Fu}Hk-;U+2p*D7K4;{)yXVG4fp~i z_?Cn~^cmk6(;}QP>Dv+ZeuRoUQrXCFP_6KNr)h#mz9uV}-y(|NBq}Ya6Ory*l)on1 z!-T)4ykA0>%sxb^+5LYB#0=o1dwVb_`aZI~4@&b&a3;Rx*jQT1{uF>SKd%%- zxrn}Rc=0z*4EplUK$K#&WB`^@zPWhwn719ogfqOT`#vYuRFvfl%uF=EhkpW~Wk-`B|L6x|ek zApD?5w}#p1Q~(oLwY=|J&FRz;19UaO!RY`dv@hm;pP^GD>>&YwjIjecSsWYsNQ*jX z4YdH7>HCWQ4*=4S=zdYX381Xc#F^Ek$ZodVdEfU(Ljmvs{QyDti!a^`z|lv)Idf() zeP7Z40RRo5Pxp)8yaB-c*k;Y6WS~IUrtd5IztIbHz1u$DFCGUdGXNnV_$<3=Ljt6T zyzet~>VH1y^F1ToFMjiPZw3GYf~h^P(A@k@-uD?g^?rWO$k&4}-T+{gc?-y#!*qz; r^4Hw={n60ko-w~)Jhp%RKMV1H-DM;PA*hNa00000NkvXXu0mjfSbouv literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/celadon_city/anim/fountain/0.png b/data/tilesets/secondary/celadon_city/anim/fountain/0.png new file mode 100644 index 0000000000000000000000000000000000000000..c5783f481655088a1559ce88588a201eab320586 GIT binary patch literal 249 zcmV8IuY0000mP)t-sbIqjx z|Nq|J=6idCQc`Ng?*FXS|9hm~VvD`@=8MI&bF7?Nd!)UTz3%_bi{^uK2AojF0001l zNkl8IuY0000mP)t-sbIqjx z|Nq|J=6idCQc`Ng?*FXS|9hm~VvD`@=8MI&bF7?Nd!)UTz3%_bi{^uK2AojF0001X zNklSj5Jb_D+>oWsfHt@eZb=-o?!X(+1=*x70SOUYPCM-Ra!Z!{lX)88 zw l#WUchYF^p1+=asi0hV%Cjyd_DjG002ovPDHLkV1j4yYncE5 literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/celadon_city/anim/fountain/2.png b/data/tilesets/secondary/celadon_city/anim/fountain/2.png new file mode 100644 index 0000000000000000000000000000000000000000..91b54ad6e4ec1b1bdffc1c55b2607f1b5aa8c052 GIT binary patch literal 266 zcmV+l0rmcgP)8IuY0000mP)t-sbIqjx z|Nq|J=6idCQc`Ng?*FXS|9hm~VvD`@=8MI&bF7?Nd!)UTz3%_bi{^uK2AojF0001$ zNklK_^muuIpZvl;6O@N_+%xS(pyCFukaT2!vRvdUzYd zIRLRUTs<&s4L9e#I~nreT$d`%xgDpGB)30F{)b1y-5>=h(jdiJXqIor54d$;#z1`m Q;{X5v07*qoM6N<$g6e*Em;e9( literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/celadon_city/anim/fountain/3.png b/data/tilesets/secondary/celadon_city/anim/fountain/3.png new file mode 100644 index 0000000000000000000000000000000000000000..45f2e40ade3315da22b73e3fbd8fbc11a6205c93 GIT binary patch literal 293 zcmV+=0owkFP)8IuY0000mP)t-sbIqjx z|Nq|J=6idCQc`Ng?*FXS|9hm~VvD`@=8MI&bF7?Nd!)UTz3%_bi{^uK2AojF00026 zNkl$U$qs=foPejm)$#~S24a&C#2$ur z2@b<=`rWln3j7z+Xqizia-}(PF~}7nH=>0IgeXQL0Tq!swuIu&q2fb}zT+xz-J@^5 zcv)+!c(P{QW6-z$jTpG{KJbXHV(&R@aLjC`T;bwu#=Vis%=8IuY0000mP)t-sbIqjx z|Nq|J=6idCQc`Ng?*FXS|9hm~VvD`@=8MI&bF7?Nd!)UTz3%_bi{^uK2AojF0001= zNklr*$BbTqF6AH>5`<3NCmAnfyEl|7FM+x1T;YS zqfiTwKFb}e*JKb%(5XT=ci-Zt$H)c5!j|BrlKr6coiNvE^Kmtj?B^%g?ix@wH2Yy8@2VHM1 zM~w<7@KzJADhkFE4`c?72cS`u@&GJF@wU7L)Y$)d+p{zB#hH4^{9gC#e|Nu`*%2am zw99!iCzr^Z)h+4)wOY-W7s!j{Qh5vU>HyzLv_`edcJj|jQ<(|}um3&qN8*^|uq5*z z#KZjD_WnJCr?SPH6ApO1FtVn4o@CV z9P#vq6CVk1dDD@^;YQ9M+J61#DX;s~4W7R4&-DSmj{3#>vqin2^6GxCe-+6QN#x7< zj5vxbn#kVE`s?!R0{Qo;dsUyhk>byz{a+&QR`;la+UV)sMf?3E?KkW9s7KXJG+0lF zrxp4!PtJ%eksXoE>KT`3M3>2q=t{XsSuV4`wwC($Ea|_f9`WL9{f9k<{)T}5bE;Rp zE~@nv2Aj^0duP{U=Fy9|C)bN+s*Cf z9&=BRC=4n5qJH&wNT2BYwfC1^UeA7<&pQW^udEMznY>)Clvm4xG~ZA2hz*ARr=$QoYyYf% z?u89GX#LMz`!(`f`MG((e2vy~JqLQeF#CI6H@O}mzBHl7c1>FU4fBnj|JLtN-`+EK zd+}sJ_Wh=Q>*aXc%~#FcJ@1<>@oXGpZCHpyk--{GEwq2@!hK4tAM};+ zwZZ*#t$7h*{|}9ijJJ#(p8q$-x5jtI_n!Yp`496u@^9t2UmqKv7(0z!2Kt45{9ycO zyluRl=YD;X|2V%Zztel4>^1fo(Bypf8~gMB82{uspMCkgdDuB0To1P^Z1x9N5W^mG zmPl~S8SB6v>tCw5e}tW--r$6Nux7AkW~3vUq2c=gf%9v>yL)jInEM46d(+ zu5ogGU2E%TLd>;Kv@f)$kX}i@!X82PR@dibJDWJk zUR?BVwkO&3_H?@?f%VNaTTeVEfh%w`Q9W7bxOU8dn*;un$^WcCedwRRUi1&~aEx+B zJ2g%%)sK8y?YWfCT#Bbjh%UOCLxaz3qAQ{GwMQ%Yw+8&%$iFS17yD1Yb^Tg@q%+DH zLm6;CpnoCt1JQ9nf3eGY2Kr$3hrYJ6e;ZjZ@~t1~EVjpZ@kcw^L@mvr9;`sTh!b)5 zztry&T!tO}t#+aTKEbIjvhIJ>(fb8|^mCLG_WV&_6%D>W;Dh=*=>2t4KnIV zjCAJEz&s8eZ?wmVhr#=WdPWEIE2*0&dj7|f?@2Vnzdt&v5d8bY%>6|FaliQcukV*u z8_yg1jpq&aSU>V@v$4Pa^>gjN-1X=x_D}a0E70|9;%~ZNl99|ve*TaHo+rEmCWzDA z=NjH^u_CYXxULiSRSS)Uup=JwMLgt-cz8b`9`empQ3l25 zANmbe+&a%nS-8fLAf6H6B=Jno-YzFtIoarA{k?b^%{0-NVztY&$wNmI!vA}U{hyUN zKhv36m|=U`T3}sbb$jtrq_)87@VLXu1oW55iPlParf28(kr0zY4HBP-nEWE=P=+N-4@jm1tmhqB0Tpb4Z5b zqADbC(&7I-0sDVXz;&cn4ZY%l`^&E%OIPQ{rc3%&q~_OeAolAwkhZH|j91zpJ;D8A zy}ER?E7UbU#|-_UIbye3A)>kJ+|XP|*H1lwzAP^*cm2ynIrPf{Too#-l)8K5|6_PC zjNfFAAL$I%hxOsgQa>9+I8e_lalYsj3wgPiHf`!O{$9l7)c7>-`w=`l(~?<~$!2i< ze~uRVn!)$XZQd6jo(3x^_p9V?<8IqE`9IJcbUJ3mJ+$^L$gEK(4x@9_@wxm z@#*oFBG<}E^P>tJzNJd6RIy*ZX8XC&W%k%Q`($mu;A|iZ!eO+8!*lf0efdPZT zpin3qr2`9ND*zC#+gr0;0}>l@M}xNx$ammRuHrSfOB}SUPZ2(BC;s~3{N-~dxjEGW zCzIPo^{v&EOOg;cE~olUxm8e;P7f~~L(6l|zPHuaw)@XgPVn1XnwdU!OKRsE1DH0@ zw?J%ky)4vEl#(#}@y>H^P=<*FTr&P@?=e++}k@8~fafMSp zNR+;*jmez7<{-IMv*-(bv39PwK1LaQa16rQL{I;0`LyF#0=j1JQK|a*H$sDnhraUK zbNxVY#Rpw(L{IHqkAgvXTnc(B{tE_pfJ2BYw) zijqeXaI}kI8DSiY@hrj|_wu$$y40_I(X5Kie0~m!k zG+^4tWTXqKu%;TRLKTk5cC33n)lqps4kbDqa>`O{RTN_}CN}3V6 zf(J8*LE#IHjBD~hLvjL4CVJ(han@}&nsi=T>KhgstB+80C3w!e*6#b{Nn27`W!ACN z#4}$|?`Eh(V-fNDvn(4@K#VB-&&oR5uDU93J0^{PBXCZ@c~)IDKi9|<^OAiI)1u|= zyQS)F^`Wu`JUH9$y>`zh!#E^nEuuHpZWFb&K4*WspvMk%I41M+gE1rN3nxvlrV7N1 z6Mt08-TcMxoqG;&f|$e$=F;c`6?E6f?0lv`Bq}oc1uXd;RqK+>` zQAPdS3dJ+kI}o}QC*7&Amrla`rQfGi1EK9Y@RSWkQ>k$?2V1jGD!jPAOuevO7RX|| z$JNBy>gwvJ!5G2yRT24X3Prc}akOk$-Ar^{q{_3f=23QQ7iMJAOcu5)8=KZ5nwk7q!~vh(Ma(jyCR**x;^2n$n^6 z_!nS*$Ul`}vJR$diXDdMtL4y1$pI5>DoTC(w;U2cqXc9^lLcWf&<^q9_kJ8=4YQJh zba$f?q0yot%tA|e)Z@Q{P{Y?6t#E8pv3s?aJBKF435c8BHv!D0ky|;+1D_yG#qty8 z&ja7p+}>8bOgMZQSYMB<%~Qcvco^pyjnP-Ol-heZJUJKS4VNiBpYZZm$Cll5uQ_hv zTy+pK+Z@3zK}l#AUbGzMybD)zBEc`=13e4GDxFo9kHc{8kB^I&`=;=^96H8w=?7i)}+-g z3Z^T3lPi{G=R>wU!25NuV4m})H`2nn*6&{w5s0A}`m(ZVTlQdUrWErsI8Qh0(UTIk zg_Q>luFPs17~r-Ng*2yqJAK1FIwm{fSVz7maL4Z~)*q~^%4&pA7H~FN6tww@L#E65 z9B2s7wE*v`EoAkcvxRENUbU-r(OGTc8aqookK|gOt80kcm?$YcWT*%g+CBb3fF*B? z&4xDdHcPjQl8g@7tUovqdcfXIc7&auy`C9$(xG8u}_z6UO$#`y?MV}NaKdv>+dGS-)rou#NbpFLNs>K6q5Dx;YDbmE> zGV`@4-K2W2`Th%`6|Dvo@VfqE9ey*>)eO506)-~7d2K1G1ZFZjv|6zIgIxhHS{dVn z_yIxBUEarU?AgN{fU01puy=K!tRc~$ht5`u2_^0<5Xf^rr-kxrtuXKJD*d9}o{eE7b zT?zJlCUINhfRXwtEU{C)sw&E9a%!2j%X%-GNT9vOijjdeI00hp+Di}yo80a@LrVn% zovu8G9Zf-eCI*vO!YY^aC?7R+YX(B&Qc{0kn8*zjxfZe62>SibT*U6DOO38nG@kgG zL}L(zi9Yhy;37>s?CL_`xv=AArYgQx=cG?Y?KAU~Bc#4Bil+SVw_H*Rw!ZzOdBqY0 z)cwb7Ps(*ikg*dAtBfB-miqK7A!Y$=?Z5+#CA0a84qG{g0B+CbF!faCl` z(@2Tf!h18LsY&rlG=)TdLT%?q}~1!jC?y~_RO*&m)!xfrZbq2|DOGO2{}+#b z-``i8QGY}64tQie11eLc0^(omG71*M*}!tNj`% zdlD0dgCxH*J1vMEf=Q$v3sTWQp6oqQXc;%%Xz#A`s77d z;ZNaT6U@?+CcIiA@CG7s*9}(X?s4|lnD^^sMi)NhM{dmnC$i$F`DP~iO199YvGSk6nf z8CxnGJ2^G|k^|4YxvTq@$ue-BiK;XaIbyLj>shDVhD$SxcRgc}Jd99Yx&96aWk z2sEc(o0Dv*(0F4sf57d0@%B zs50%W<+L(}6Bf4Fz7c#L3C~tpE>vKg_he?V)q$QZlhwnTBoi&CX@74hk@dCRnWYw> zaYOCPlQp3ZZ5uycG&X+DklNJi%P-At&=4sAboMj@CH8_>>2rWqF?hQAxvXI{Orpc!T-C6{^rIclD3aIK8A-fz#_p z9l3No;dgi+;tQ`~JriI2Ti6bI;@`oyz)fmWi@WNt(p%b~&A_Vn+`VwiZpG<&lqKG7 zDxYGxSZ-6Xyhr;Sqsvxdn}_B2fp32YtiODgBg6s4TBl_w|z*{r*?1Elqe5yRpe%^%Q0O37!7)8uI}kGy0;J){mH@ zjD8f?5e0qmFQJw>Z!N=7T*FdWKh622<0Yr;k5x=(;x`7)Gld5Gv)?D-QqGtsIX(Yy zZn!X#8!0H43hZV3M4#y={R;W_mH+>y^?2*<+#mNh)T46vU)I{99kQzTz&^B(>|>j* ef4x6?KhmuAy^b}$EjzvXlls^FT95jFmG1$a*n@5W literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/celadon_gym/palettes/00.pal b/data/tilesets/secondary/celadon_gym/palettes/00.pal new file mode 100644 index 000000000000..88e712348b43 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 32 57 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +172 148 65 +213 197 106 +246 238 148 +82 148 197 +172 205 246 +222 230 230 +106 197 106 +164 255 180 +205 82 65 +255 131 115 +148 148 139 diff --git a/data/tilesets/secondary/celadon_gym/palettes/01.pal b/data/tilesets/secondary/celadon_gym/palettes/01.pal new file mode 100644 index 000000000000..69f3f0b9e6e1 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +197 197 148 +213 213 172 +180 230 255 +156 189 213 +131 115 16 +164 148 49 +197 180 74 +222 205 106 +255 230 156 +222 213 230 +238 246 238 diff --git a/data/tilesets/secondary/celadon_gym/palettes/02.pal b/data/tilesets/secondary/celadon_gym/palettes/02.pal new file mode 100644 index 000000000000..330e35b020a6 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +82 82 106 +131 131 139 +197 189 213 +255 255 255 +139 197 139 +230 213 123 +255 205 90 +255 238 197 +115 115 123 +213 131 82 +156 205 246 +98 156 238 +57 123 222 +222 139 106 +189 98 74 diff --git a/data/tilesets/secondary/celadon_gym/palettes/03.pal b/data/tilesets/secondary/celadon_gym/palettes/03.pal new file mode 100644 index 000000000000..eac8236f17e2 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +82 82 106 +148 148 148 +180 180 180 +255 255 255 +238 246 238 +222 238 222 +197 205 197 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/palettes/04.pal b/data/tilesets/secondary/celadon_gym/palettes/04.pal new file mode 100644 index 000000000000..6f31ca776222 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/palettes/05.pal b/data/tilesets/secondary/celadon_gym/palettes/05.pal new file mode 100644 index 000000000000..6f31ca776222 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/palettes/06.pal b/data/tilesets/secondary/celadon_gym/palettes/06.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/palettes/07.pal b/data/tilesets/secondary/celadon_gym/palettes/07.pal new file mode 100644 index 000000000000..9d84ecaba099 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +139 139 148 +74 156 90 +65 139 139 +115 205 90 +148 238 74 +189 255 98 +156 131 82 +197 115 123 +255 164 123 +238 238 172 +82 115 82 +255 0 255 +255 0 255 +255 0 255 diff --git a/data/tilesets/secondary/celadon_gym/palettes/08.pal b/data/tilesets/secondary/celadon_gym/palettes/08.pal new file mode 100644 index 000000000000..085c4934413d --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +139 139 148 +222 213 246 +238 238 255 +123 156 246 +106 197 255 +131 222 255 +156 230 255 +115 90 98 +189 115 131 +246 189 115 +222 189 246 +255 230 115 +90 98 213 +255 172 197 diff --git a/data/tilesets/secondary/celadon_gym/palettes/09.pal b/data/tilesets/secondary/celadon_gym/palettes/09.pal new file mode 100644 index 000000000000..9020b628fbb0 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +156 131 57 +213 197 106 +246 238 148 +213 222 238 +222 230 255 +41 106 82 +57 131 115 +172 131 115 +197 156 148 +238 180 164 +180 139 123 diff --git a/data/tilesets/secondary/celadon_gym/palettes/10.pal b/data/tilesets/secondary/celadon_gym/palettes/10.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/palettes/11.pal b/data/tilesets/secondary/celadon_gym/palettes/11.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/palettes/12.pal b/data/tilesets/secondary/celadon_gym/palettes/12.pal new file mode 100644 index 000000000000..041512724fa0 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +123 123 123 +41 123 123 +41 156 156 +49 189 172 +65 230 189 +65 246 230 +106 90 74 +131 106 74 +156 131 65 +172 156 74 +172 156 106 +205 180 106 +222 205 98 +230 222 106 diff --git a/data/tilesets/secondary/celadon_gym/palettes/13.pal b/data/tilesets/secondary/celadon_gym/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/palettes/14.pal b/data/tilesets/secondary/celadon_gym/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/palettes/15.pal b/data/tilesets/secondary/celadon_gym/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/celadon_gym/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/celadon_gym/tiles.png b/data/tilesets/secondary/celadon_gym/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..ef08ccc83a6b81aff5c27ff5c612d9bc62441a31 GIT binary patch literal 1253 zcmV2o9RpLO>-87?Dn4tF2OOg5c$i0x(vqyRH=&x(m3G zfKBnOkHRmxz8)$Eg*}IJXRl)dbOIR%;Q3dtp8{^<6bdz{Evsh$EG{9h)iWsoV1Q;2 zl60ZK5a4#qHYN^Y044x+yaj*+Apk$803}SJ(pfNMxUVS(x00|4fbdK~@LB?Tl~S!< zDQy!&5aXJ4NV*^ZAo{W(c&z|#g}EiRO=-DUoT5??lZ+CMf(C5Dx3|9yl4}KEE+Nd_ zrse6Knf)mZNFD5{L4qa>x4<^mQM%D7bX5^;`aR#7Y5bxAqiq~w9WV&$KR_T{-zorx zJC04K0l;_00BZFl1q8^eo3x1C64sz%mpR{`=DSnl00X&8L!1NE4mA@BFhPjp5HeZj zy8vj80b~YAK6^*7+IkKqROcq42Pg?}s?{p)J&X6hAItNDFbsreW%L}+gH@}%+uWIM zDhJL+sk9+Oxdsg3aT)p{EP@ELfC8>_$0|1)J2TBj#z6wOREY6_9s;%j09|Nu1sIV| zVLTu{57ry}!>a~=IUX>O0KKi*4C3=(o%2txxB}<|G7hdJ;CS{9AU+S))gns3MqENU zVnzxO?~B<{KztsYJN(0v!&bVK+KGc0fC)eyhn_#zJ~rI{Pc zm_fS2I?!eD$8UZM06YUgWo|6laONf{toy~HcuB#40r(E%-#!Sql)H4*r*zpDEtphp z0+8@Fdwaic7vP(gA)Yb=@Kgu+D*fYUs*dyeFwqd}9v$k!C4fjOFW_l-2cS-O>3Oa4r+4wnU z5nl%g5Q}#K`P#VFmVg!%vlwexZFeizAb|mag%pe0|wwiL>vH>Ugg5enF1I{0fn=m$03l|PSkyq z6L4SvE_~5*08k;NF8Mhh01Tvne**9C-|=0zSLckk4h%pc@{T^|EWXx%+a4@M>XPg5 P00000NkvXXu0mjf5sf0h literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cerulean_cave/metatile_attributes.bin b/data/tilesets/secondary/cerulean_cave/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..45b5bef90631640f7c2dd4a1bcbe929f39c2ebb5 GIT binary patch literal 536 zcmZ{h(G3DY2t?V$4}a}|wFJL3HshISB^K@*4o)?;7`7_^hr@7D%6f@zl(=U!(dR0C6 zO09#-+qwGw@nL7jJNI9!|KOhXoei$SK*u{a Uzp9P$t{U$t|A@*N|5jT31|TpJYybcN literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cerulean_cave/metatiles.bin b/data/tilesets/secondary/cerulean_cave/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..249addbc7aad27545482076acb2d254968a711dc GIT binary patch literal 2144 zcmai#d$3J)6vuy_MKhe^M)dGH7lnKG zMii=hJg>a=Rc1t_B=U~BS2IzbWd`ea&iVe%KJFOj%${>Td#(NZuHX8twYD+2pBVt= zBLUte3udAaAA{Ufn#nWLQRaCcdP}`!9{pzpvx9}fqJaEv;=ROzL{Wmw=kMlXl;A6T z?bi3;qZCQU%drCMu>t!~(?5=feLi2yukAPV8##W!-;YQ96E6NYWSmTr$?|^iL9jUZ zBsh!T@h>ie%y@QU7Y^b_rx&0chwzi*-S`$i8bIK2SJP>BnU zZ{arTNqx!s8?#4M$i^H~%Eo)I{qUR^FPY~{X8!N4PwE{}wQ#&vKOFCU_tWWCHyguv zc~jnzDX!kCOEqaAQDMIv_DbSfM=pQVPse{C66RA8V;Dc}VYc?L|F0Txm@9A;VSj56 zv$fN|S1cYI6dN2PTfK@Z{+0Mc>+~9~yLzy7dISGCK8L^XKW;kyPW$Q??W=VB#_Y!T z+DE^E{WJqVc=NT-J@qKn>wtICvwcthQy#P)?L6}JN}@QwB;Sks@p+NCx_e_{0_2Ic zm+O`7*SDe*q6N{Z(S6vDEr873RT!VW{zfYXiO2*wqF-6sRGOd|5e>waXwt9cK}2=>!mZlr6w1 zkQQlWAh{+sUD*HRn}T^LB4I3k($(4Q3IuukJ+NLdoE5&OLv&PtXn zQR?_-mTzZ1zIpF`Z{Exr2Aa*Njhv^?rOc3x?P`X>7f3!decf;uZ#{fs$@aP&Y`2>X zAOuiaH=k+%%i0MrWM3!w{p(W;L!aMz_>DPy&NR)J)!;T`cAMT}tXIlsbAU^n-=nE_ zWDkH@k}uu(d=mcw0Ike^DhHpp+owncC{Q-54XFa=d!Bbs;t+!I$+S=M#ToyDg+%~V z0Z?ry0JVTN0aVJBhE!qHrN*11{5S6bp^3LnlKd~z-lNIIw;ukt)~J}4r2yFQi?#&F z(rVSLN`OnA=lf9M61OLPkKZ$v-kVx5h8DhUkSGGxul4;dyrxgJA zskxkcSEpPc7>l=-CXL0(FK&D}X!21s_Jl;y;8Z=H`a3%^KgB zr!C7IQ2=Dap95gS!m6sf03J>IOK)-CSi1Gly*&+p6LWXoB!KFOIc)w&0t~}|w*3Z6 zYt}l{k^pZ0es}4*?_Ea>Ed6$2h!cRJ08WiiBq)F~sbIIyr7bI+uv!w}H3jhJ*OqR- z@AE6~58Z?f`4j=1xN~iG4jNR z#PHPH^qmC2Vrvu!(gqX+SVz{f&Zc;lu2o)OqxWw=dVlH0y`eW}Kc5_uOE6A6n*I10 zFEAO3&32aI^;xDuc?<|%pRw0w{hMFB*Br9nc0b@V62SP~m(RKp4!|0iEguGS9^)MI z*{C!H8@e((^l0gZC%-)Lu^KuUEt?R=3u5pzJRq_V)@9MuPfnM+%Z}62{r3D997nAB zf76en`GnESQvP=h;5x47IF9eD-rIivDt8>tA7~wrp%`f~kmt`FyjbpHRe|rL=Y#p~ z@;vZB+(ZL_Vwg{QD!F`SoIbk>fIe#d`O4in$LC<*gU1?RbeO%wS4dwe|8|r#a9vCb zLO&FtM92Z4=ls0WUFN=4LF&s$e@Dxu4LmpW0!$Y87Xnx-Am8NldeHW($4Ubj{_->O zZ%M>mL2nNLAjrWAAY7)E_B;o}c@X7GU~HG%k{Sd8v+-95*uha2^m!M4U72^GE)SE( zIe_|(Ugit(?-L+6u8()4MNlJLkpM5Oy6}wa!HfWKgD6pMd`Zq1A-&WO@Q`4q06-)a zi13xqC4e9kagWRhO}z(#RG<(5wsaNmc6$_J$(q&dx=<+!2>@$YUdH^Bt8gn>>n=qM z_gq0LF!u5)jDs(h;RUz>mWh(I$vr=aqc{=?R_5`p2Jl?zFZA3El5GG_xdE{gJT{Uf zvjE^HQ4)z*0+1VHPX1VN5ZWuSIQL+L#{h`AadI2j2SAjprFcOY#YqyynD4pZ!buqt z^d8rzv7Gy4gyzd&XY6wg+=F*TvX*%qHb~H7n9%oo5`f}b(^CVmEdmIA4ea;|0K=dm zwNPNgSvIUVf|p5EMNgND03*^C(R^fGCEiwwIs)Qke%3$T6EVnno}a8y z94Hn7z?tv;(^dembCfdt4fYDG<#yayFx0)TuA z!8Xu9L>c6kBvGsYkd_1hV%UUJ2(CC3w=lN?h<(I?cNrXtkqWvZ$pJzE;|Pj@TWDB< z@E?GdT^UC*9{_-CAp9*D=kjB`GCBG8Za@HQ6n7E;A#mfyN6?_Pg~S3{ay1|MfC7oU z5C&Ut_v?Q`3Kj7a03eVEAP(X* z1(~940PMirg?_z!39_J|GsU2$M8IH=azjm1FhzQS4s^hR8zJjfZiDFJB9&sm0T zFOh)+c_~X`6*$z^o|0UjDN0tOQEQhK z+xC%f>N7=Y!m?^+8B56IK%r@>24+w9k#FiVMai158U$d`KTNC9P ztOx`es%a{NAO(rp^W>GXK2vNoaNsFhe>D^W8VsY)0G2BA_R864Q=cg|8r9Q{hCHCj z^8gGhdqW-mjnaO--e^**T(cS=)3N+KVC8*2;^}@p{>fuXn$}ttu@UEidcA+|0s0P| z3zP~aW8dB=nH3;p0FZ2S`<+f_Y;5epa{Xs@D%(o=i}ve{b+d9NGfJ2YfTzYvoyp3+ z&pNDLzrYWitQ07ld zA~))Sl>AvECb-gu_9)#Uzz<$gAnAiBg<{nrH~yYtfV@C=2&`8W%K9K$svtWPfFoVl zY||YA8L@~=`XHK?Ep^@EbYu+Jav^QjE26V5NK<4sWE89k^XM*7-YLR}MF6@WO-X@D z?JRl0w&mODj-k&Bmyj2v*c*{h0KnOZyh~Jkx-?c~L|u@UCMK%TL27W0DHTqYakegU zqb^91)2y?UkyaQRB}dRj&M+G*4y3#wMNYF?$hStPlarC|6d5bb2f83dAhjr6Ljzk~ zBb_VbL$i=fx*$cVrZNiRz*cM?eg%3I(>X6lso0Zp2Qi@73~wkp9|)lDl?>fFePzP) zDkT-BG<~l$0N^SFWIUd4*9-H3zE>ImP(H8+X|Yq7)(3Rf4f)^#tLs1Y!hE3VJOEhf zbUyoxb|AVe~&k1>dSUMZK+wOs$x=_4un0jGm zMt|C&>OHw*)yED|FU(ZRGsYfc)z$rBr?_4?UNOz`JA2%P-Co`w7S{{EHc`I+c+Z!0 zd7nu4X$AFy@vE|FR(`lgJvOX=oGGXmj#mhP*6^%>TJsP~u;^z3>zzGDWQR1O@$Q6ao_=+Yd-D0GirsjOe(t%r zH<084Sid-sj=yVJufDTKy*_bac(`z@BZQe59mzWkbcxB!@jo7dOwW88xJYWiesZah z&iaG4dX@>1eJ^(Y@NjU`s$lN;CINi!{Nejm|38NY(8j>r^)s9D_XPC)2Sw9%sX%TU zN8N`U)~BAf`J<>nfg|g_P1eu*BLFC$j?21llj;5l0LrI%-N$r)6aeYdyzcu}_x}fg zD%*5_6aaOU$;&p~A4LIW#Jp_N{ZSN9Zp_Oz-5*H-8Ay5Aru!o)AVXPA+|>Qi6d*E< qQ`rYHJQ4D%_Td4XqG82JAI;CYt)QU=WN~^d^+XF5S!AOLn2nIzEFtNVs4^7mWy`9^wKTJH6*}dPH zIrGiTd1Q>N0miT)aE$vW{FxH0{dx}G<=+*WV-M*$cp@|&nlh%0v|KHPxZE$q0zcu~ z_0LvqShg1{*i%U!~-_Pp|MGC(mVCeLQAB> z<6E!SYmWDfvK1-Ev+D5Pzxt3H_vQ5RIbEx5~3O`j(4TzBUj4mz~!86QNtH5|!!xq-rUxZ=-%u zlX8D)KS;R$FX@*x>Eg)ZNF0R-Dc@2|@k%lARbn?nZT^Hx_9w~iM@;?cpTS%oaS!RY z^u4l6_R2m<+*?uDPTX(ncZ%!F(hJkfPw^OYe8$9Yq2y7*W{nv$mzf@p3K5Iuz53$l zw?lv6)z5xhzoi@Whx#L3i}hPG^}GEOB8@v1*RQA@`d!?0s~|+auvvx8Z7OD31*?!p z5x%gQFU;baXgIno8jCVdI2tx%(U@7>Nc^!dUcMO5o!P7`y$xsB?)K-YIr!<4ehINR zAjB7``eZCg{oEJW7x*$Ymg0WyU4+(FA!gr`arg`l0pkhS4d20G5AQ~NxCDO;7YC2P z)j{^ZBq+o+!OwyFMchK{Pw{yoZc?@r_kPq4`6_gyo&;A9K^LMvN!+BIFL9H&=i@XS zflHD9+926aLyx>HcnYpVWq%=#A^-UlpQo<^X9GV3&IQF8~6!+1~=bH zD8QM~N%+HN`ySXcdK8Y1l6?}^$TRRg{Ao{m^?nPd;1~E6nv>05zsIoNSWA6NFTRl2 z|3zb|PiE>LGG^;{-{ZS-)$l;B4(n@odgWTDJ@=!%HuqQY&Eh?$|8}Pft$lLJZqNOV z9$Zf~+=Hth%yGYon`EVI!WTL%iJP?aeo{Ptq7vVO5ZmtI+!}1I^pgA!PWzAA0%W$v#QTLeif~!B0Y3*uO$8e2)#DpF&oRTGJWcikfgWAg{}kiIuR*89_#@W8AW z@B8fceRt-~Skrj;GBmB(mT$efXHgy|za&RxT;-=rGDQARwZo(J1OUZip@6Ttw^rw* zXFUIUS;XGK3Z8dl2tY%f?!^G*My1RFx%q7cXzwF|$%qI*31Pq&6$CVPG2h*;iKw@I zB$ykH1HYCO&=Pf5JA0`B$alL6d?Z8w%}%923WhP>=p04?NNwz5egpu77~rLW0Pab90M}_^NyNCifr?Qx)JKf!}%( zaCrXw*|Ye964swXw4S{&VC@BJKI{kZ3i82(1OUf|0z^IN6L10r!BYr(Amb!}kDINh z!{VnB%*GP}JXveSQxmwS2kw@;6?qCRZy2w83IK%T%)14E9n}DqmP;vse>k9+1PqJ` zz)!b3K^&BlfQnAYxK0{Lz$6DiJ_`Z}F+g}azlZ^_pWXTe@@Wu2SdRk!?KTw8Yk3!u z^;^Ay4i7-fVM~#GPGHdz{!@U;p8s3{JfD}q2HuI~b3znwq?&5O8}e!bP^~)k zn_V*^ahb&c9o5#MZeJ-t0idAvv%@|!Vqr30j0#`#n|`y|YKT!*LE{E5mN~3e!{%$U zKTY!oeMAq%ls<3ah_E5j0Wb>%04%t_Rzd&?1p=^Q7@uw$V7LpgRvpFwKt6Co@gteH za6n`LhU(?t4MPCfH`;f1$4t2JdM$`Q;MBs2mI2VT@?WoC0|3Us{YUi6dy^(4g#qxM z12Q}S0ACZqVQt`n%?4Jo0NDz}yafO?aR?#6?9K&tJODy0_F_@TWUD(4`DtKcJk(V% zz_#&G<>ZE-;JOa4S<}uq5Q#h{-^j*Q1;7rf$mR12uqp3&1`eC?{B57b0XuD!N%MKG zNCLi32T*t0Z?Y(0r|t7h0O0WLseo=FKxj|^$Y%;56$Bmtz*&jhUjVoU1%Q0VktM_x z0B7@YQom?!i{v170||g@6qKD8kaAD?o`oUJiS(75BiA5mHbj zdKbX_)#cFr6~JdHfP@DCaBi}<1mN>1U|#{$Qkv<3{nbiO05)&z=2;$4nBYAD`0SZ@ zj0q161jucF0-y#J_5wVr{_wuzT*G7T4mNg^YJ;t6tNJ7xfZLFEDgd=10B_L)0O~=8 z-&Cs+0A|sHu7YC#I1^Aq1fU~8DLASg^(ui1LZ@F3cG@w3m`r_p0QsF101(vUL;xPs zJ%IitJdc)uRUm*Xpma8>Amjn|KjFE*4;PGxJ%CBIlt}Xc^DT>e4uDnXTNMA1lLbh4 z!22((bzB1g>_^yrKe3Nfpa7zO<6?;#P5_V|tV8~y04xLHpnrh$palK_fIZ+X6iNt| z;S7K!KT{=?m|@(6uWtZYGz_+%>uv+00GW_epAF)y2LQXP>k0twvfx|3=sqEUs5uvW zhMN%he|Z0=PmxRKh}sg)5;D;}%EYTT#7^@{01oGmTp;;88J`LRa1xRU$63hpczaQR z<^n)?16jC$f5(gB3=;{lZ9Llcf}oCmDvt>T1irIO5mZ1%jA=rY0^5d-_A~(A#T(Cz zLJ61Q>(z7$UuLmrA0OW&FjRnB#hFnW2lN{NfS4K8=xG5OJuN_^ zrv*S2ZvqI9Kzdq$Mo$j7Ax6lgJWXvjy#euQEaQK18(zis{;2u@0000y4tD=GW n;M{1ukf+jKQk=+p+pPak_~&~MGebG)C-+-t#B;{9Pap&7LBT6qBL&Lh32j{5m$UjgIj)1b0&G z*L}xtd*#1&JMO(ZaEf;X9|ZhHa)*MljMX@s+Mn(W?bGKT_Hl&1<@W{mQ|$MA-yfO( zXLsxv+J7wX9Q0=Jt*&NSB^ieDm+=Ts@yz@t;x)n4FukWK_7gvq(0+PsXxY(;8CFP4AndT&$*rA-0Rr^pKPAmzl$ykj7+bKT|Y|nW4*+d z+iI`5wYK!#nnjQxzZ8CJ@dH|mA5A|X$*Rv6e8ms<)AmvG1$usfq4o7dYv>0ypB_q# zB%Zq$p_k86u=bbIFAQ-Si~rd2V`dWnhwjq6x#!x?^`-t@!NX)eg?OcPdZ%@+eTadl z<}Xv_sR?e^KB*ry71J+WPcN*e#Fc5CiPE*9D%{3e_e}7$FvySVssi^)ydzep_@sC0 zPj3#rUu32KANp0Iq$)h0^nP&uBiVm?y>zdPr~Jyr`Pbi@xki>fXegd<%r_Sr3r)py zO{q$(V8w4@)9!)l{p~o&yt^9W0^}M%o4l^8gp~Rj1ZhkMnpI^#- L;b8x&TW#L}Hy+Gt literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/00.pal b/data/tilesets/secondary/cerulean_gym/palettes/00.pal new file mode 100644 index 000000000000..4b44e19f441b --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 156 156 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +172 148 65 +213 197 106 +246 238 148 +82 148 197 +172 205 246 +222 230 230 +106 197 106 +164 255 180 +205 82 65 +255 131 115 +148 148 139 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/01.pal b/data/tilesets/secondary/cerulean_gym/palettes/01.pal new file mode 100644 index 000000000000..a39ca6aa86b7 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 156 156 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +197 197 148 +213 213 172 +189 230 255 +156 189 213 +131 115 16 +164 148 49 +197 180 74 +222 205 106 +246 238 148 +222 213 230 +90 131 180 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/02.pal b/data/tilesets/secondary/cerulean_gym/palettes/02.pal new file mode 100644 index 000000000000..5a4f127be79c --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 156 156 +82 82 106 +131 131 139 +197 189 213 +255 255 255 +106 197 106 +230 213 123 +255 205 90 +255 238 197 +115 115 123 +230 238 246 +156 205 246 +98 156 238 +246 238 164 +230 139 98 +189 98 74 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/03.pal b/data/tilesets/secondary/cerulean_gym/palettes/03.pal new file mode 100644 index 000000000000..c84fa4a58be0 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +205 156 156 +82 82 106 +131 131 139 +172 172 164 +255 255 255 +230 180 74 +255 246 131 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +164 164 172 +205 205 213 +238 238 246 +255 0 255 +255 0 255 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/04.pal b/data/tilesets/secondary/cerulean_gym/palettes/04.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/05.pal b/data/tilesets/secondary/cerulean_gym/palettes/05.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/06.pal b/data/tilesets/secondary/cerulean_gym/palettes/06.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/07.pal b/data/tilesets/secondary/cerulean_gym/palettes/07.pal new file mode 100644 index 000000000000..aac016a72f80 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 189 115 +156 205 246 +98 156 238 +0 0 0 +0 0 0 +123 164 172 +148 189 197 +172 205 213 +205 222 230 +98 123 148 +123 148 172 +148 172 197 +98 98 123 +148 139 131 +222 205 213 +255 255 255 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/08.pal b/data/tilesets/secondary/cerulean_gym/palettes/08.pal new file mode 100644 index 000000000000..c06a049b0e5c --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 189 115 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/09.pal b/data/tilesets/secondary/cerulean_gym/palettes/09.pal new file mode 100644 index 000000000000..c06a049b0e5c --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 189 115 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/10.pal b/data/tilesets/secondary/cerulean_gym/palettes/10.pal new file mode 100644 index 000000000000..c06a049b0e5c --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 189 115 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/11.pal b/data/tilesets/secondary/cerulean_gym/palettes/11.pal new file mode 100644 index 000000000000..c06a049b0e5c --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 189 115 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/12.pal b/data/tilesets/secondary/cerulean_gym/palettes/12.pal new file mode 100644 index 000000000000..419c00911ab7 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +172 189 115 +123 164 172 +222 189 172 +246 213 189 +246 230 180 +255 246 213 +164 189 213 +189 205 230 +222 230 246 +98 123 148 +123 148 172 +148 172 197 +98 98 123 +148 139 131 +205 189 197 +255 255 255 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/13.pal b/data/tilesets/secondary/cerulean_gym/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/14.pal b/data/tilesets/secondary/cerulean_gym/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/palettes/15.pal b/data/tilesets/secondary/cerulean_gym/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cerulean_gym/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cerulean_gym/tiles.png b/data/tilesets/secondary/cerulean_gym/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..44b7c0c34c7029e4b24cc0148348bc14a6b87cf7 GIT binary patch literal 892 zcmV-?1B3jDP)mk3NA&*zFV6rirvy<{LinMBbr zCO~kl?r8y@j4VuGR9^m5db^j z$7{U8qRV(h@GuaytPcPh1n2y?EI-14HzWc;laHeM;LTB>O5ezy;VF2-MVbOQrfiM# za1xD`G4THPEI_8fV`W|mFQc)##MB5f0iL^LY6HjtYeuKwxumBJh$a_;S4FfAE{IMN z8KU?SeZCZ3QPD)=$41;`TEC<;+*_mP8kKQ({~Lx*-BZS(d0#vcr{{>Jv#F~{)0F=LFn1Tyeidc{=rC;=rvgt5AFvz%mJT?3Gx#E(TGj<9B!10YXZ-PgK+hy~t#*9Piw04crIoiEtmlcP&8H&|%3mw=x6xe}FUbKQIC2(gN5E@V}rC8UpqLUEmLxoZB>N SG-~+(00004x8TL zu<4zrx^t?lm}pmeX1+OH=RbA2{!%KuI!%}9HGM|@?J+TPkK+z>;1~~y`+NZxA@j>f zP{we;l?G1Go#xN=EccrMr`OH(^n3LX2*-JdzVJ0%XT8MJt1{0xo<$YY0Vm7}uJE|Y z;}+ef=k$W4ew+Ui2HkwigAIH+t>4z0tvA6rb3W*wpg_SE-ozn6@97C(4E3ddgb&-xGy)jFVYWr zF6U8>&bjyqM)~0}LJi>c? zaQo5r`G1$pZ_&H-ZoNm#`>=ET{q@a!Pdy;dubH(S{L69Zm&`xedVK#?QStV_)w6!h z{O$WM^uN{j{TKRugM8kk&DiISI6n`po>EsMSx-vbHSw?bPgwS&^yec!1wEcXjmoG~ znwCEnX)#`>^;ozTPoW;?=Ydl5ky6`{65h-W7FGsV?q& zANzfYe19&}a=d~Sx4tFT4*gl93fC*^uW`H{4|^3z<>9yVqp8@;+W)@FJNl93&(}Z8 M@##Rn%K9_-3mn+R=>Px# literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/00.pal b/data/tilesets/secondary/cinnabar_gym/palettes/00.pal new file mode 100644 index 000000000000..88e712348b43 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 32 57 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +172 148 65 +213 197 106 +246 238 148 +82 148 197 +172 205 246 +222 230 230 +106 197 106 +164 255 180 +205 82 65 +255 131 115 +148 148 139 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/01.pal b/data/tilesets/secondary/cinnabar_gym/palettes/01.pal new file mode 100644 index 000000000000..69f3f0b9e6e1 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +197 197 148 +213 213 172 +180 230 255 +156 189 213 +131 115 16 +164 148 49 +197 180 74 +222 205 106 +255 230 156 +222 213 230 +238 246 238 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/02.pal b/data/tilesets/secondary/cinnabar_gym/palettes/02.pal new file mode 100644 index 000000000000..330e35b020a6 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +82 82 106 +131 131 139 +197 189 213 +255 255 255 +139 197 139 +230 213 123 +255 205 90 +255 238 197 +115 115 123 +213 131 82 +156 205 246 +98 156 238 +57 123 222 +222 139 106 +189 98 74 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/03.pal b/data/tilesets/secondary/cinnabar_gym/palettes/03.pal new file mode 100644 index 000000000000..eac8236f17e2 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +82 82 106 +148 148 148 +180 180 180 +255 255 255 +238 246 238 +222 238 222 +197 205 197 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/04.pal b/data/tilesets/secondary/cinnabar_gym/palettes/04.pal new file mode 100644 index 000000000000..6f31ca776222 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/05.pal b/data/tilesets/secondary/cinnabar_gym/palettes/05.pal new file mode 100644 index 000000000000..6f31ca776222 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/06.pal b/data/tilesets/secondary/cinnabar_gym/palettes/06.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/07.pal b/data/tilesets/secondary/cinnabar_gym/palettes/07.pal new file mode 100644 index 000000000000..5b659ef1be5b --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +139 139 148 +180 156 172 +205 189 189 +230 222 189 +90 115 90 +131 197 115 +205 238 115 +123 82 74 +180 98 98 +255 139 74 +238 246 172 +255 230 74 +106 90 82 +255 0 255 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/08.pal b/data/tilesets/secondary/cinnabar_gym/palettes/08.pal new file mode 100644 index 000000000000..f5a4ee6780d5 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +139 139 148 +205 189 189 +246 246 255 +148 131 180 +205 189 230 +123 98 255 +82 172 148 +255 98 98 +90 115 90 +131 197 115 +205 238 115 +255 0 255 +255 0 255 +255 0 255 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/09.pal b/data/tilesets/secondary/cinnabar_gym/palettes/09.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/10.pal b/data/tilesets/secondary/cinnabar_gym/palettes/10.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/11.pal b/data/tilesets/secondary/cinnabar_gym/palettes/11.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/12.pal b/data/tilesets/secondary/cinnabar_gym/palettes/12.pal new file mode 100644 index 000000000000..3f9aa94d67a2 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +123 123 123 +106 90 82 +148 115 82 +172 131 90 +213 172 90 +230 180 90 +164 90 172 +197 115 205 +230 148 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/13.pal b/data/tilesets/secondary/cinnabar_gym/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/14.pal b/data/tilesets/secondary/cinnabar_gym/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/palettes/15.pal b/data/tilesets/secondary/cinnabar_gym/palettes/15.pal new file mode 100644 index 000000000000..92e7ed30983d --- /dev/null +++ b/data/tilesets/secondary/cinnabar_gym/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +90 0 255 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_gym/tiles.png b/data/tilesets/secondary/cinnabar_gym/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..213799158f7d4c0415ee351aee7e638d32667b0f GIT binary patch literal 1318 zcmV+>1=;$EP)XR8tZ^0OS<>x|M|EdG7PW) zjHB5$9jx1B>M)E53|n2s@ysy3h{(<@>cIE$jS+(3T|Wp;`o2FjZF^vH-h)Ry!+4z} zGi)V5aECTCyJQ&v@4oka&w=9s=MV40;lPmrb~~N@+X99M(75Aq)AW8xB_A~=bRsYkm>R1M- zq+lH&S_0&iYy@ zDNuuC9Y8H8cuE!E*jBY~f`mcKweZsL>}D{6Cv26jc?Z*NTMc!TJ1c7j28K6%oaNC0U6ahZx zt^j=Z%408_;}hXRAOKkm8ZYD2-a-^Hbp(L)3BV9xcqSM8(bR37PW%iIzf~!E88^!m zq&8p_gK_(MPjjIWhvC_UI7$JYEzKD?Lv*2iHNVzfC;>npCj+n-!kodAKDgkvljOSP ztF^Hdfd7{P?n)0qf$udtZt~${((0@RzyfJA1`;5MkQZG6?lHKV+}tEBt`=7UT%3tR zD)6v$VN>ZgT5i+yxiknOYZ`pi{_yd7!qwsmfV1fABEsW>03e@v4ucD&P0s?l#1F?; z^S!5B3t|bNU@gJErU^INe zg+^BBO#$GC(0?^RJyW#v7;?xfGNNQqC)>FNx7+lPyqGZ2Ki#;G1a%( zZ2%31{)?5zQlFPA0CIB70U8!(DPV&FH9hA5mfyz|&Z;U1!yF*~1Fk#;Y)~Mo;M)`c zdIFf{IF5r(6$Q!^AW6jaD*&*6D<~)c`U-?YS$q^$1Z-^$ZT8s?AiiL00B*?Y0I-tk z0RF*M=uthuaZnTRz8>KCd2&??Fnu1!bpU_=*8L@ZR|nATK8t^@QwKkO^Q=}K)UL$3 cgQ>3l548Vu7L6M4p#T5?07*qoM6N<$g78F2B>(^b literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cinnabar_island/metatile_attributes.bin b/data/tilesets/secondary/cinnabar_island/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..d2c655c418c7ca72c48b080bb0a8351e211f6bc5 GIT binary patch literal 256 zcmY#nU{GLy0#OzQCJ+X4L1HirWD*AwAj%Yg6bwT|u#?!-z{FrQR-KtZ^IM=8s{(}m KFmqruhH?NrG6d-W literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cinnabar_island/metatiles.bin b/data/tilesets/secondary/cinnabar_island/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..0abe4b18dc7a0401880fcb204725e6bfc3334aaa GIT binary patch literal 1024 zcmZ{i$8r=g5QeAp2)@F>qes{?dziZyX78+BdnddA9Qd&fm}D9d88%>>V5q|6Sk7VB zfV07CaxgjP+#1~SR#B*HO8UB`{=22A41KoBu(6`C!sC%iHwU?NK3xcl;Z#@(TY_xb za*?^jmI<;!F31P}@*qd2!+0{m7EfN7%_l7R=lEizC%g*477&CPnaX)J(^l9T?Px#) zcC-B@&s&e<*n=yMYf*=7*zULI%tT7N%r^CAl;y8$5*MJZm~!7 ztbPl3C~WncxI^Jq9L6zhz!J4otxzk~f!T=Y$v)vu>Y@=ECE)?OMmOoUgZ`+c-VW1lhRu+X__Nsa*tgjCSds2iiQbW&U+9~VE literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/00.pal b/data/tilesets/secondary/cinnabar_island/palettes/00.pal new file mode 100644 index 000000000000..9dcb673aaf75 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +189 255 139 +131 213 98 +57 148 49 +57 82 0 +115 98 98 +65 57 49 +255 0 255 +139 222 189 +255 197 115 +238 131 106 +197 49 65 +164 230 197 +115 205 164 +65 180 139 +24 164 106 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/01.pal b/data/tilesets/secondary/cinnabar_island/palettes/01.pal new file mode 100644 index 000000000000..391d1e3d17b8 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 230 +197 205 213 +172 189 205 +131 131 139 +65 49 65 +230 238 238 +90 189 139 +255 0 255 +238 213 197 +222 189 164 +189 148 139 +156 115 115 +123 82 82 +90 57 74 +115 205 164 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/02.pal b/data/tilesets/secondary/cinnabar_island/palettes/02.pal new file mode 100644 index 000000000000..6b019b884c96 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +156 123 98 +197 172 139 +255 205 139 +238 148 115 +222 106 98 +205 82 74 +172 32 41 +74 131 197 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/03.pal b/data/tilesets/secondary/cinnabar_island/palettes/03.pal new file mode 100644 index 000000000000..205c464c79d6 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +205 180 106 +156 213 255 +115 189 246 +98 164 222 +74 131 197 +49 98 164 +115 205 164 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/04.pal b/data/tilesets/secondary/cinnabar_island/palettes/04.pal new file mode 100644 index 000000000000..702db8a907c6 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 222 172 +189 189 139 +156 156 106 +115 115 65 +255 255 213 +255 238 180 +238 222 156 +172 197 197 +148 189 189 +123 180 180 +230 246 255 +189 222 222 +172 213 222 +148 205 205 +255 255 255 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/05.pal b/data/tilesets/secondary/cinnabar_island/palettes/05.pal new file mode 100644 index 000000000000..3a2db72a7f32 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 238 +172 189 205 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +222 205 131 +205 180 106 +180 139 74 +238 230 139 +222 197 139 +213 189 106 +189 230 164 +172 222 164 +115 205 164 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/06.pal b/data/tilesets/secondary/cinnabar_island/palettes/06.pal new file mode 100644 index 000000000000..93518605a9ef --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/07.pal b/data/tilesets/secondary/cinnabar_island/palettes/07.pal new file mode 100644 index 000000000000..93518605a9ef --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 +0 0 255 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/08.pal b/data/tilesets/secondary/cinnabar_island/palettes/08.pal new file mode 100644 index 000000000000..f734cd1666d5 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +139 82 57 +164 106 82 +205 148 123 +222 164 139 +172 189 238 +213 222 246 +156 131 90 +189 164 115 +222 205 156 +255 238 189 +164 164 180 +82 82 106 +123 123 139 +205 205 222 +255 255 255 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/09.pal b/data/tilesets/secondary/cinnabar_island/palettes/09.pal new file mode 100644 index 000000000000..ca26d1b0806e --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +255 255 246 +230 230 189 +197 197 156 +172 172 131 +123 123 82 +65 74 106 +123 123 131 +123 123 131 +98 164 222 +74 131 197 +139 222 189 +106 189 156 +106 189 156 +74 156 123 +90 90 115 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/10.pal b/data/tilesets/secondary/cinnabar_island/palettes/10.pal new file mode 100644 index 000000000000..608bbc2cf85b --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/11.pal b/data/tilesets/secondary/cinnabar_island/palettes/11.pal new file mode 100644 index 000000000000..608bbc2cf85b --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/12.pal b/data/tilesets/secondary/cinnabar_island/palettes/12.pal new file mode 100644 index 000000000000..608bbc2cf85b --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 205 164 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/13.pal b/data/tilesets/secondary/cinnabar_island/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/14.pal b/data/tilesets/secondary/cinnabar_island/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_island/palettes/15.pal b/data/tilesets/secondary/cinnabar_island/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/cinnabar_island/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/cinnabar_island/tiles.png b/data/tilesets/secondary/cinnabar_island/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb9ad0cbb73352ea16e88a737c06411a6524460 GIT binary patch literal 1374 zcmV-k1)=(hP)boj+iKKf6e>scjnDJ z+o{xyaodJCjAFOoYM>1~X6L8E{U8XcG=%&~t5Iv!d1%>aKQMs(U^w^IR^!X*v_?Y< z08IqM6eI!unreG_5Ca@EYt1@8_OxvYfPfi*ad_EmRD8cigH~|tXcK_p551m1#moH0;nbe@U7fd@cp-gb{w$BSd9h) z_*2f0PDw!|jTA)PeiYBad>z;TOvFSk8J;IB<5%sr7@A2TJe^EV|CY|<$>bRU`jNJ7 zv!(4I5%4(bDd+Lys7nB#DtngH3w8)kPfmI&gz?GAJfLhD|Ec``ujTjR08pSqPzr|T zoufp66#^zsg`ksY=U^3pN?3O@=hTUPS6kPr1CvCfkO26QCZplv+knJ6u(}Z+C=UW) zi^Ty@0#zD9ei(+;u+D!l-S`IfIeEYd0dQ6fV3`8^Xr8|f^Q!o)p#XCV5&*UWY&8PF z2>~#hHXx~x2A1JQfp>Ao&>N`@u$}n`$02g$86TknJl6_l0X)G5YUx1}0`OiOV0^oZ z)OXiB?;tavE0E_{kFI>A&15_%wV`#vU*#jQBMV#2N0lp7_?}Y0s=!DCN`$nGJ{htwVx2tM+sRFdL2#!S!X=J@-#O|IP|Pn(aubJ5DZ-$KXbX6d>Ta>uLa#R?gd@v2Diy@+AT2 zkpg_X4NwzffHX~1fNa4?=P$euyKws?Jo7d`fGz2%vHy10X<707UjvL51^)0qm}?F9T%VYx1U0K!8&YeW?J~H#Rm2 zAf;OXh#*^F1|St=g3oLKPPUiP08l`IvFmWiQ6WhMC}9~u7ZL!n?;5}jr2r&U{yhr- zBS7hx90Di>sUYyD(=!3i!R5|*A;BmB2|>l51IURQkf!88>{*8hcOGd4NC*({qEH~f z$BccH47dV-oLJv`kF)|Jkb+W)YQP7Z1L(r=@Y3^Ch-!;c-+k1UgQ+owJB$Vhi)KuJ zI!Q}q9LsM055VX4m!Q|r4rohD-F7XzFb_~~S_rtc=7~S};BempfNGAjD!8>Kt=K7c z5&+6^7U27H3W^;B=yhEI_~gM82~hDDiyaI>O=NPt6+lf??iS!O8UREHivTK_>Ik+Hsmz9{qxG8zz>n`;PyJ+B z37G8#1@NUU0_Z8}tF4CUw_0oO5&$mZv^DKu{}!+TdJ|<=gFu`H!5-|XYy(rXz7U|4 gX+YZElP{(I18^i9_Ivyi5C8xG07*qoM6N<$f)KoKR{#J2 literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/condominiums/metatile_attributes.bin b/data/tilesets/secondary/condominiums/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..aa43d15ee449c8da46100f0004b9e957caab733b GIT binary patch literal 860 zcmbtQ+YJIS4C^QvfyYAp@OQurNQ{8^L#%psFNV?@A%P{=PMk!iE9EO9C#Yh!UiB5( zZOk>-tL{*RfN}gK=Z?EI^!VN6Bbj@U5i88BK_rgFoNMz0xYi)ae^IN&)h%~~(EzN&j|MxK^4{~(%WddL1d?LTdHVc!s_ LNFiVxm4DP3&#D}{ literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/condominiums/metatiles.bin b/data/tilesets/secondary/condominiums/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..117c036fa8fa50224d11b16639748bba50df8bcc GIT binary patch literal 3440 zcmai#TTE0(7{}*qwh3SwcOb_Irh#(;tLPJ_fhQ85dr9QAEw;~XwHKEA9Trqj1l5-;)? zXT(DlanQ!5GN3j(<;Tbse$h~~$N64omyBC(eKh~8{2Iras6Nc)A0H}H^;3UjwR&p( zka3P^sE6%OKFXEQlbU z*5!g5){O$v^H{wR;s>GG5W1R;H-FTs6xHrru>ML>BRa%h;or}n8(*aC?=Ow7Qn)Lx zJI~+0JHIQR*7v40ZlNaeE$em)cZfY=9~i}JMXk%UKIaUXvcJDKen{b;te>r4tY0na zKWtsFu3NuZ_+Bw5&7al_YnkAa+{eKwK4oeSvf!jSp}E;;F%BBN2GvJQdc-uook#g$ z9@F`wX1f_P59@sMe1T8%8U8qFKe8cqg7Jf6N##P8(;mzQ^8uhv$s+ zPx4cIkPEGU$~*IR0@;03hx$QY_ zHU00Ou?)B^z58;Vv#x~nmwAHU=c`(Og|C=Pd`ask%w==cys!29_#u9rpV0b;fKQ}w zpLv2GH|c#amIHU>R=6$IeYq)f(}r!C+cpr>eEf{_N#$0p&)9kxlB>_}cD9}E0HgI@ z59cu#+&|xp67N3Ff&W{<{qfh>>nZ#OdsDyvI#!P*YIfmY*q@KFvsqLR_Q(6(e}8?K z<<;{Rdz-z_KG5HbcUU?5knPfX4Xn|X^yhy$bA2YQ&nua^nb;xqK0KS{-A@;@@Q$MU z>k?>Vqw$PE9GX9WM#k8GNscan6t`i2Hx2 zc&J!?^YD8YD*J|i%h9nvnm4{lvS5#l3uRafwrfI}B3OUOhgKsim>prx!(7Rq{A=W3(=DCot-D0~Z4Lv^f(nDW)iTDcF5cn{Q~I1bgtiz^^w zJ9r%aqp@HsP@AibV_Ia3>;>zVU2cvR*$i}0q8d8sDRqyr7Js~N@ciJE7}NdFpX)m} zCZ|A4*_yE&Ltlz9hQ1PAjiOWjCpBx4r!{jC=7HGtJez+dNCaD>4yR*Z&DaOTL;$d?B8O}KH!zAN<>SsJZyyBz0Y6s+A_2-zasTOf7PKG2}`|0_;OV literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/condominiums/palettes/00.pal b/data/tilesets/secondary/condominiums/palettes/00.pal new file mode 100644 index 000000000000..5867e5ba690d --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +172 148 65 +213 197 106 +246 238 148 +82 148 197 +156 213 255 +222 230 230 +106 197 106 +164 255 180 +205 82 65 +255 131 115 +148 148 139 diff --git a/data/tilesets/secondary/condominiums/palettes/01.pal b/data/tilesets/secondary/condominiums/palettes/01.pal new file mode 100644 index 000000000000..66561f6d3326 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +197 197 148 +213 213 172 +189 230 255 +139 180 222 +131 115 16 +164 148 49 +197 180 74 +222 205 106 +246 238 148 +222 213 230 +90 131 180 diff --git a/data/tilesets/secondary/condominiums/palettes/02.pal b/data/tilesets/secondary/condominiums/palettes/02.pal new file mode 100644 index 000000000000..87a022102f19 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +197 189 213 +255 255 255 +106 197 106 +230 213 123 +255 205 90 +255 238 197 +90 90 115 +230 238 246 +156 205 246 +98 156 238 +246 238 164 +230 139 98 +189 98 74 diff --git a/data/tilesets/secondary/condominiums/palettes/03.pal b/data/tilesets/secondary/condominiums/palettes/03.pal new file mode 100644 index 000000000000..783496dcd9bf --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +172 172 164 +255 255 255 +230 180 74 +255 246 131 +65 98 156 +90 123 180 +115 156 197 +222 213 131 +164 164 172 +205 205 213 +238 238 246 +106 172 115 +156 205 139 diff --git a/data/tilesets/secondary/condominiums/palettes/04.pal b/data/tilesets/secondary/condominiums/palettes/04.pal new file mode 100644 index 000000000000..89eace6050ad --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +172 172 164 +255 255 255 +230 238 246 +172 197 180 +197 222 205 +90 189 172 +246 238 156 +205 189 131 +189 164 123 +148 131 106 +106 106 106 +213 222 230 +238 180 115 diff --git a/data/tilesets/secondary/condominiums/palettes/05.pal b/data/tilesets/secondary/condominiums/palettes/05.pal new file mode 100644 index 000000000000..c7780e5c7515 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +82 82 106 +123 123 123 +172 172 164 +255 255 255 +213 222 222 +164 180 189 +255 0 255 +131 115 74 +213 213 148 +197 189 139 +172 156 115 +148 131 90 +197 197 205 +205 82 65 +0 0 0 diff --git a/data/tilesets/secondary/condominiums/palettes/06.pal b/data/tilesets/secondary/condominiums/palettes/06.pal new file mode 100644 index 000000000000..1d08ce9a2024 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 213 172 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/condominiums/palettes/07.pal b/data/tilesets/secondary/condominiums/palettes/07.pal new file mode 100644 index 000000000000..35987db53279 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +139 139 148 +180 180 164 +255 255 255 +205 197 106 +246 238 148 +255 255 222 +98 98 123 +238 238 238 +82 222 123 +131 255 164 +82 164 57 +230 139 98 +189 98 74 +213 213 213 diff --git a/data/tilesets/secondary/condominiums/palettes/08.pal b/data/tilesets/secondary/condominiums/palettes/08.pal new file mode 100644 index 000000000000..7f33e006f849 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +123 123 123 +148 148 164 +180 180 164 +255 255 255 +213 213 213 +106 156 164 +131 189 197 +172 222 230 +238 180 222 +180 115 164 +213 213 180 +255 0 255 +156 205 246 +98 156 238 diff --git a/data/tilesets/secondary/condominiums/palettes/09.pal b/data/tilesets/secondary/condominiums/palettes/09.pal new file mode 100644 index 000000000000..75022050dcb6 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +123 123 123 +148 148 164 +180 180 164 +255 255 255 +213 213 213 +148 205 180 +115 172 148 +106 148 139 +197 238 255 +172 213 255 +123 164 222 +98 139 189 +123 164 189 +148 189 238 diff --git a/data/tilesets/secondary/condominiums/palettes/10.pal b/data/tilesets/secondary/condominiums/palettes/10.pal new file mode 100644 index 000000000000..3c091df8b340 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +148 148 164 +205 189 197 +255 255 255 +255 213 115 +189 148 49 +139 98 74 +90 106 180 +255 205 139 +230 172 90 +230 148 65 +180 98 24 +238 213 172 +222 156 139 +123 123 123 diff --git a/data/tilesets/secondary/condominiums/palettes/11.pal b/data/tilesets/secondary/condominiums/palettes/11.pal new file mode 100644 index 000000000000..79494336b9f1 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +115 115 115 +180 180 164 +238 238 238 +213 222 164 +115 156 148 +230 213 115 +180 172 90 +139 148 90 +98 123 180 +148 156 156 +189 197 197 +246 230 164 +180 189 131 +205 213 213 diff --git a/data/tilesets/secondary/condominiums/palettes/12.pal b/data/tilesets/secondary/condominiums/palettes/12.pal new file mode 100644 index 000000000000..b9b1e6061db3 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 255 +82 82 106 +123 123 123 +180 180 164 +255 255 255 +131 131 82 +164 164 98 +197 197 156 +106 164 172 +197 205 213 +205 156 32 +172 148 197 +205 164 230 +230 197 255 +205 197 106 +230 230 230 diff --git a/data/tilesets/secondary/condominiums/palettes/13.pal b/data/tilesets/secondary/condominiums/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/condominiums/palettes/14.pal b/data/tilesets/secondary/condominiums/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/condominiums/palettes/15.pal b/data/tilesets/secondary/condominiums/palettes/15.pal new file mode 100644 index 000000000000..093fbdd6c952 --- /dev/null +++ b/data/tilesets/secondary/condominiums/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +213 222 164 +180 189 131 +139 148 90 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/condominiums/tiles.png b/data/tilesets/secondary/condominiums/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..324b42c9f72756d72cacedc30430713d83d9abc2 GIT binary patch literal 3737 zcmWMpc_7n&0R4Pto3UZ;InopoIrIBPuDK<#dYzY6~a6Up^p5(RVjnFtDb7@M4P(cSD{MBZe)XQc+^OVyzSE5HZSIQmcarik7fFY( z0vA>Mlsivhu(i;6p1e|fUzwuEva!cRPU|VHlOKhpsi&F>6nYmP2`h+yT55m$q{$Wa z_A4)HjYl>o9$NO7o|=+5XZ0d^ZF4w$Bz&ZG?fi-Tc;2%e%LWEvGtN$r9JI$rlP^dS zmwt!#rf0^eV-VbEc+&OBiGoH*j_>-b%?%!I^vFx?f2}DzGxAax&4jFshEs2?c*mP9 z25qD$t%Att$~^(2Ugs8#{Cm1=wD`F6Ni|_$FLBwM5Vv=m=H(3-Q@Sr}K_T@hK9~QAryM*!1a1pL?q<1!a1ALsoGFXazhtb>M5${8RxP0-h zJ9bpdeu?eUMfI*>C6WvE4oFKs4pL@cdx$V`JnQ-g5sU@479Vj)>H!u~u{oD08&%W1 zbX!u?_V8Zu$Gz(lhlI2zxxU=VoQ=7_0z_CcUo@&s>uNchEfdns1iGXZy^fWRndKhvN?c*|qJj_<+H8yHCKP z%{QyDP5piBS<}*7kAl-{#yo5bgC3bl0!O?r7!WMAIXPFL5|fa?WL%C0EpWWrm_bm)uJIyc{-u{VR}7L1vKnZ(>#V&Xe1`^0&g8W<1|y^ z3nB)3l8B5RuPa2C9WXJ6eZwJjVRA0E}*HTRe|;@(}b|M4=Mk$gqvvU%d7ssZ)e)qJD=#Y^W% zDF?OGlbig#ynMZ|#w{JZ@l|HR1v!VDQuDH6B1w_v`_G{f%(d6b#DjPDF&2tx=Pr4v zE@VDF4oAjAZ+!zvk~^>w4^tA@W^0f6%Q72#O6_p0I*Q3NK!~aKwL7Qu;Xc@kY5R{7 zl5L~K#GD-6yd4E%Ev|!2$0A#6kF@dT+wx5$jwN@HTa;Yn_zGEQo97g_RA+Lh>Y5h2j^%a zBzleqnevZOzT0BG2eMseyqFUEP$_fWFGlg&{e}am5D}s%QB|1quY5>3<1X_I#59g9ku`=P!wK*#c@V(&oaPZwNw* zbe|TK#x+24hjQ1qM(wL?YV}`08uu4OKn1HkMWL_A4EXDV97e@RdYzXAF3!JvV0PN< zfMq)$poM&+I|btqVED0-=_O^)C&Em*QDGBztg?nOdhC7oToy;lEL#BeC8;bKU=A?+ zBVGlTbzmR^4d8s+kcCJqt2J)A* z!3!vok8a|#+RKgVW$(HMjhr%1a*l*mDucZWRWd<1>-W5?CTbl-8EC>P9@EhTVAmuL zV>%_q-#9wXtw0Mps}Dnbn&d$b9lY@`XH8#egJ9f*JpcF}C`TdyCfqQlymy@{8F(eW zLYLyn>J$>=oV|0Jp)m&b;hO`m)qRS$p(V~AMurv`uOUpngChr^>R#`y#Y@GZ{{RDO zwS_N5o|KI*W_*(b_6HjSR=YM#!TRbXG7h8r!wHRWYx$KqRLPdxd`(T$gJbl; zsf6DzKkx?Zj5<_a9%|}1QTYuU_jFMXw)wh}71C*2LaHQogftt7#{0JhP9_l3cPHJI z_yj$8y9_TmK>YL5B8{AxnW-N)2}od6yRaFlG?0izX%h9&CQAHpN;gov#jAL*6I+!e z29%r-L=)20IIZ2z&gz!=woR0o*Ot&1+6h^5!BO4W!hcBW&bkVIyj;eo&+5SN53Fsf zfX>A8X6*`cQW6st0L8Y0DB?)V_XG;3JSXK}O6fKa7dBnD0&PZ*xUGFc}y2$EK~Ih0~%j;{wEMlK-W zw2y=1hvx^1V2BkV&!kFHZX64NRrYAP@Y*ZjFi-zQC?`7}ve{k(rWZBk`Px4Rm-d|g ztbLK5!zZX7uY6`jU-gR%l3Tg))3dT64RwuU2~DHvz;|LWkpZMdfk)Kr89UjAivs zW3GNZJbuy|FtEmsd36|aDc9Bv3#}UrV=<(sqF_LEGC;a39bA0~9jM4vwi^5xbW8Jk z=Btciv*GLws~kWjL_iYnR=kzeGeYzl{>zQkfduh??FUer;# zJJ=l#sfZr@4+_{6WpAw%t3e!^Y+fTspQvvBWP9w|5N^93h$@2(aFeP0O-r+fF z1edeTY_3^>sm%hJZ4mBw`_aTBMD)T{WW?^Z>+o~dJI2z%se*O8O1O4&8`{_g7RR~- z7G1T;RhoR%+cSGE$3tc7a_E4KRm9ofao6{e;n?***6?p4djDdCK5UI6|Dn8={pi~M z*=%n1%D{ffT?A4hZkbl{^8Md^Vs`&Ko1|7|uk_}#Tz@GTz!T!5>lN&fWj?)RltM#7{pKYpLEp`7aV zcAU{}iCMNZffGtKz4xvu)>rZYTW9gpb_`#*+}fyC@b#M6_STwpK}fZV)XOQ?ufqBTH{bjU|CfwqS^vGcAV7$*jn zNxXr0(k1-@*p+F(8Y1wpH1^12tu@iSEP8VCz40i!te+4~f+RQPD2HSv-o~o@yzDeA z%6)c|PU{zh%{me6Ji!+DF-TME@7`GJ5iA*EQ3dWvp zeRnN0<@q$<*H{0ZEwr)j0@ioUjC~YK8$PDyI2n1#IVDt^K$JsqoR`oDu%C@&8m_ni z^m_|<>G4)lsuldEa1CK?3}7UDsGx%n5nK3j_Py&G*Z=l@(oql;NNV~PC9q4|7O|BM zlEP=$L19FOTjb{J!#vy*5p!oEE63)7dg@)R;c)2yT_hJz79|Z0zJRX2ScxXn2=FW1;|d-W z7if^Oi<%(>=Q!Z%AsB8f*sv-|ffow? zEg4^K??`n=Rb^pO;ZmsTip-nqs?dHSh8C>P{*$rtLGNo9^XS{utLxS5s=I3u!;gCP zzJ?p?_jfx~U?)UL)8&yh^m{UqRZO)r&Zm|SQMTIJo(t8Ehj#Ni?S;z#<8`8dH^^38KJ@J^X3qqxk)ONB_T$_??mZ&T?B6G&I&z^*dfkpMJm!>t>A$^ILv5u!aT(3& zUnMMmQQ*T4u*|omTRpw^kM6Dwt6fa(kuIz56PXsOXaSm>ksXp~t$*4F8Q%%HS(N)p{2T;A-Q<-zUCmcK|zS$os{wnJ4}K5 zcGRfm7a^kLo75*|2!fN7r)pN@=MNtYM2M%c1H8!Br!m<}tB{F`u@Z6IbYIS`d~{OX za=o-bkLH_QK50yu#Wj_!<-OuSHk_;Ycmg|0DaVpLOT!}|4B93e?hb0JSKSXw mMGc)bdV(DdLC9Y~tqZMs`87J_rn>ySjo^rdoq4_~mHt29EUo|m literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/department_store/metatile_attributes.bin b/data/tilesets/secondary/department_store/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..5eca0b5c76fd71ec7292911db38caeb801fe5722 GIT binary patch literal 984 zcmbtSK?(vf5bIO&Ho=3S>lcdn2CshAWIEFhUAqVdGMP!TtDvPE0^ib$o6k~|A5l%^ zGe9FV^6+%WE){SdUUS-nvWYzZ2KWZ?2*_b&Ka&~Aj_Nm6z{FBhpSu8?K5Dvshesyv zb?cS-GX3|`ir|BLP=N!~pj$)U%!0%1eLW|@<`{O@bjRmPX&WmSNB>@)haU z`EE0y=w{7$2`qsGN*ce5=rfDohY#Qj_|oF{(Esxc|Md9p;Cr~G$q2_I{x?t<6Mr}# z;@*V9_5}QZ=r446!_&xC9dcT2Obq%g*#vf+kkFxN`DV)yl zJjT09-3s#kHp_kJf+gvj`Sr^`>6>zXDc5mxqk((;|02D)U#U15l506pjU2p(+&N<0+|7 zhY#af!MScJk zdp6b-dod$d7X3eo*g8 zIUnjxxIaQv1tqY3rkI(5tB{+n&AL@DjV;4`&D9F65MbiRs}(jIoU(6mjijL1>Ke(! zTih_F5ow$`p8Byg=$G-BAJd4J#b$}w;&JhW?N>JDc%h%d(BxuQ@Ma=bRU0&UP{<6l9XqjD76(W=At<*;0n zy%E>vYFeKOkyz+H?-F;s!Ed1aM4l+zf$Td{_0cVZ!u>G}6q}UnK9A4H&)8``Y5%l9 zi{1%4adpniq4{{lebs#pUI*SUc`{$#Dtk-bAKV|V=Q3Q@Qb~ug;TMW><$S6CY^U7A znEZv)rg?q632y~+$orT4X+Fc4#%Exip3lqJZ%O?O?dP*_Hh6yX`-3p&b46d)IgWH} z|B>%GXaLTK_=zvPz700}hwPLe$D?}wfIp$EsXSiYR1+sVUFGrecnyj{h?~mdHBHqP zx2B#CFTu+|{pa~1{|V8F(J-FW4%bDQzoW`iRL|(9F~J*@`Nm}9_~`vJsrGVp_l=VE^8{XQvLXZ=MsL^KG{>WQr$wh{)JObb zdzhcN55gh4KKc1=_Fl9T{osKLIC${mS#t&u`|hlvR@Wi2F8mdprJ<`UJjFMK1F_8htGKbo3d^-$8bi zJ!LP;-!al5(ks$4LT|TxRbb;0E=m?$@c)0lx3Cw}jch$QR9|m0qRS8HN1mJZ(+` zTio$@zX+g-dCh6*R^9Fi@JjUJpuKpl@piieK z;-K+DbPwi+=4W2c$Y9N+>lKMYuTvKP06QO-lA`%KD*G2>uLqzqA8`-&Mp%C09^nu7 ziQBB#Qe1y1Nyk)V7CkMqX{ zJz{^+ESk??{`@^+`XNL%PUwW*gtAyK(kt}}L*%^u3Yp?=TEGflfsk zLg!;IS+A!%6~Xrj^WN-tl{PZTndnS*>Kw{}?od>^XY)<5WaB-0qh7D~2L3c=gWjO` z=-n3IjF;~-|3y8`q3<2WQ=KV@!G7+ z2!UAi5(>#-13B3AV!2SrF*+%^g|&?@g+kV#PO30D097vJwFY zuMa2&kAHpq>&u;&JM^t7ci(0k0c55V067bB1rb1A<_QA|1E=fmrvqH@cU&g`z%)X8 zkax(&1Jn=#1sL=B2w)cl95NtN9Ju=<02M?C!D9%)%c(w$_&72I1<0VwDFCG)@23C` z0Z{1sC&MVf>BbTXLSRD({sTZp850$UuKU?9BN75Sv=>3P8`$U|SHHp)&vzO3UEGQv#Hd5Fl=~?gS6tz{UcK{P{2dfdBab zSd?4;1OW6uGe8hvz16zi2?0Xntj1&j^^PADThQhAApq;3`Pt+kMgjN#QUEAi_}T;o zI%jHDrR*tyZ;QjZBp}O^qX!8S1y~U)w!S;u{R04f24GGQ;KL_#n{%7`<{bZN7fOL? z4G5HK#n#`Rx7``ij-wX>1Or3>DAxni8lIPH^q|4Dc)tT1h|X|U6->xeih*2gK_RU~ z0YU*lflQ=Xxx6*)QVTJuF=(JHhRCDR(dpHr>4=N$Wc$3wvYfdCvv67YF2 zrJw+uWkbN;o-+(S91mF5%8ME`?AdBa1#$>88#q@pup`Y`1hA|uHcaeG@FD@`rv#vM z z6A1vja#P}s0pL3Tu#y0v783xvD(%Mribm0Rvv|ZxmPS|Ocz|3BO2H9d&kj(Ly>J5r z3=y!0N|uCa3To1lfIb6M@{B4_k9TDVh)<)}j{#I7fdW*rWQfUmbhgD>U$0!(ag&<_>toDMK% z+D~zli7_Y)1Oi$u0vMi03fu_*eTD#}U|?B(0S5$tW&5KK?DEp=&Ln`L2Qk1Z=yMSJ ze#t7q|KX{C@G+*YP(%t}AH4o$&{z3@&Im~Xl(hHwRPuwC;cUdc11R|B_piwN((U-081(rkTp)= zT$J~<%r#1`v4H2WiyQ@D3{U}%hyh#nC_q<*B@KWIsCx!n1OEgds0#?V#C7ye6rk1x zDX{IW*v3*CP2=UpPl2k zw;OpcEe5;~+7$d5RJ#W42=y!ha7P>gu$9R{0eH?7Kt}*c&_x1}@fHYh1p*QPq^b8^ z5&p2A08C{U0P$)JphISn0yYdH1LQPL!4p<^J#l4aWkm&T6aXbZ2B37$Su0H>Pr-bZ>%&v_wrAas2IOD-@h3e6*MIc^)?^n~ literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/digletts_cave/metatiles.bin b/data/tilesets/secondary/digletts_cave/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..37ef8fe349d6cadb49e5b58f643344528781ccd4 GIT binary patch literal 2512 zcmai#XN**36o#+Hf|}@#*bDp^djWr7*Thj{2W(Nny4F9E*!{CWcn`6IaxZc1?%oSl z>Ru2;>X}6n1(uE?QWxFTgpM^?Jm1W|-`rUx&gN$KnRD*1CxW2qmyGiADk@0vB{4<{s-kDc}kv^SHf4rcfxnWP1uZ` z*ab56=VBg~V5!$r6tN7;JvU=MR$!&+pJMubyxytFY03G?1)fhg{R=btJpZ+DMEG9# zez-5*fQ{IW9bS)d(!Uj3up4_Y4&yNsv;6%gU?OH?j%WH$!prX#<0Z4cWahtXe^PI?sb%AJ`q_B@_de%!^l>pfERV=D z@~rQ-{bfHnQgXt1>6i9R2c`qkuJcrmzomxpI9^{91dN~dEIWJF|2vB~%We1`)N}7U zdzPJ@{#WD+`J3~%U$#OS2 zM2?f={rQK=VRC|;==n0a{6F3yOJ;9j?#V0Hz?QZPJjLxa;97)7kfTS&X!B$ zQqQdKblVSZzfp(#hs^y$=Ki@_u9Dm3Hh+XHS7 zRoLy>woaZ=il@EPf0})JrRm*jdYpeU_gS;f*A==_V@l5a3}^IYK@jqmo%d=H6+nto+oht>}< z^&ohlb04_B-KSq#TXi1yN7)(#H<^D{KReIm_xo4rHxwERZeG~mWcIUr|A|ce<@28O z@w5J_MO~)L)#=}p-s|no|Gp~jZ+w51-Q{PiZqp9ktBhB4xJEkKbAvYOB%SP;^`!q8 z9jjAxs<*Sww6hP$8+4;?*B#z}lWx|Xy32E`ZqePkM|m&mlc`UpKAHMt>XWHYraqba zebdD{AWf}bZU5QRqU%b1%zCf4h?{hv8D@?{&7$UhKlzc<67Xi2Fv ziTuPT&NuJ(ydez(gQbJM7la{)SyDXEK>sGkxtn*+-G6EvS#q?E44@`&Dh&9Zv&)YH1{V4@lzIzVR-1gQCb5cqzt=0Af7&u-Dg z2_rTZP8gB(SYcgoFH`_m0~+4rtHBS!O0XQzMC07u%!ntwU@M5%Tj9X-hSHIqM*zO> zc|WZFuzJgv6Yt&4jFE>ENPr+4&+iATw*oow-cthjP8zZJsbv)}j{(Sv zVi?B5U<%;*YOoq;>x1%p62QD%EEPXX0eVt`SVX@(!k-C%;JyS<*2gdWI|BIRGDX5? zITdyQkZg97D3LZ$vwbgk{`K?KRbN{lgY)}O&qIRw;zA<_fM`kvJlIN-WbB0iUU>c> z_i9#G6B1o z=;?4RA^49?q7OhbBa#T7Khur2VPx|WT$D`Jrlw;fk_g|*c{Ggi5F&Sx)rhJk1XgP5 z>up;NO>@(?H^iPH_9g%%f8P?X(wgxh0P(_ETi<>p*0wajj+&qGQvjD{Io#dmoaX=v zF6UkDuC3c%DuSvJOJn{kB@ssm*Rn1u2urZxnoChcn zY^v1eUTOo#yOie-l&c)99}0n_@p%R?aHU@IMyEeE;z_=&86AD zz6=Gb5lbieBP9V3d;tIFPw$9{BsN3`N%# zKR&omg8=&Eg)x8^;zj|0etY2M0Z4QKx5yEMKi*kcUS3WC+zepb@k9>5)c`Q9K9|J-JVQ6=|-oI{Ky9R)0Z~|b{4irE%005r`Ko|^%!nW5p|9wpY#9RUB zybq3FN`RQR-<|{@ejJJz<`i^im;(4R7sh!{ZYBV~ee5}T0OBW@t^ttg!YD*YM*l=T zKqSVZ1%B(TXSWO^LRua<;1OR)Dg?#A0}KK{H?*6t2VsaMEbv>$-frs+`Tyd+gGt1f z%L4@=aOci9v>Ayw@VXmRD|I~x=q3yN)-m60KM7&?_{hb78mhd`>H(5T0)XF&2lkm`a(i@z zM+$&^NkUw^cH_@$+v_#~gp}7=J)nG70AcHR;GSut{DwzYxR6HN7m_9bxc*1AwM9d} zzpDy@lL5eu;KPWnVNnQM29ISRL4|#*1r9=BAOQ*ysxy)!s|U#UL;>*jz(*iiC`8Bw zWFztSRbxSRaCRlYG4E43k$DaV?HUpQ{5GI<{(F$0_;Me}cM<>)l;3HdySx2km5t!H z`#kj1^bM&BDuDD%fxY6wQ(V2}C`mrodA>{O0)1QHxBFqJvk#_=iErpL#f3Hd>Fz@X z;A5lFc|H^o+!!f z1;U^&_zSd^g-9--^Bnsw8Do#NX7XR@GsW)imOof?D6oXOCABuq!WW!eXY!l+OtHIl zu9-)VYcHrnS) z>bLA;=<|T4N`y;>rt}CRJ(H>wy}VQbkgV`OWlHs80BoCX}!@7BN_7 z(_=k+vGbFORx6E4iJ`~U&lsivI-Odt*IQIKP@Nx(Pn4BP%&eLVCH;(HQU$w)ALt`* zAPL3>B+4qRVl|7EN~vnmd112uj{UC4)UVr#SD%XVilR z$zLfdJ38GB+7C7g_V8exj3_10AT@;Yq!D){z?@tk5;$@{*me$V5!+ihiSb?vu%lF% zbR!&8tyB<6SiQ8+WG;F^><4@x`fp){H-=6H<;mVuJwTcxqow-HYAhfU-F50GFAiQ_ zL`MmLjw%$Y9@G}6Ls{yFSYXv6Lcwvj9hXk5sLhE_fiyNiD#2tj$pJU8M$w!%sTTx- zI>}Ih?>PB-Fe9Cnj--Hz`EzMMnVlmt8>BbRst0ORiw&fuX{qN*)`#lB;w%-Uk)VKS zS|x$5lAbGN0G$&6Y(_mu)oXl@`DR1bgT5FS6k9)uqZ@lO+$aZvq-vTAW}}qVgRumi z9wy>{uUD%rF3zY2X^^OB$m&5R0qrY`wM9&>xl|LU>Om?2>H_T%x*m)HFgiFVbQ~N1 z-Kk{CG=vD`O++@Y(nAXd(H^vx^icPwC zWyMHsmJ|K4%+kdg<{<|yHm0Nay%6tzqW-IH(Zi~h`MDLtm^5BZrALQVu`}24ui92m zHLLAN=>B^|PrJ^}7mIVZjVbqeif+KxttC3P*EUV5OWB>2l*u{i%5V=9E3D$Ol+ST5Jg^>)1uYBH-{NhLrdjB98> z0HnjLIzW~*<57$zmBy$6Arf^ipl6B@Di1KL4lpzp?MMyiTy0j$MA_m8DK4^AHrD(IL6<4888T zG95^&4)n}&DV9M)&oK^5RVwgxvs^U~%k;I1Nc_sOzPvpZ%BpeMshJDyXs9KyMr4F$ zwGF`*n)RxD2WOmJS-Cx(OjpxDK#vFsev*f;(WqjkzA?d<8T!F=Rua^%vbs(l@t(Xe z9;yj9icOf)%w8Wb^%UUbyN3TefD<1bjWVx^0ZrdV(Zud?X-?N{OzbN}A8-zLA*4E4V8bbyKp3Frl@>ieJ&8W+$r>V4zs zB0&E*J{padRNpsxqUe9mtM`rHo(iB-Yf1HeM|DL<`hDZ606MXl>idq^TS-UyedDPB zI<=YV`z%fMyS`HaMoNHWN%ehAO+Ol-PMKYAx6{7wNYjr7Ku^;yV0zhkf3f>lOqd#pQWjK<@phDV6k>Nq7#{AF-&f1YMl2z tYCfIHM)8Ph3yQF1*_zUuQT`G0{|A$}Ji!T(|Aqhn002ovPDHLkV1g~;m0AD* literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_1/metatile_attributes.bin b/data/tilesets/secondary/dummy_1/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..1b1cb4d44c57c2d7a5122870fa6ac3e62ff7e94e GIT binary patch literal 8 KcmZQzfB*mh2mk>9 literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_1/metatiles.bin b/data/tilesets/secondary/dummy_1/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..274da22a637ff37d23feb9af558b4ebd602c8001 GIT binary patch literal 32 QcmZQzKn0CV5C{_m02;Ic4FCWD literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_1/palettes/00.pal b/data/tilesets/secondary/dummy_1/palettes/00.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/01.pal b/data/tilesets/secondary/dummy_1/palettes/01.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/02.pal b/data/tilesets/secondary/dummy_1/palettes/02.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/03.pal b/data/tilesets/secondary/dummy_1/palettes/03.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/04.pal b/data/tilesets/secondary/dummy_1/palettes/04.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/05.pal b/data/tilesets/secondary/dummy_1/palettes/05.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/06.pal b/data/tilesets/secondary/dummy_1/palettes/06.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/07.pal b/data/tilesets/secondary/dummy_1/palettes/07.pal new file mode 100644 index 000000000000..4172436d0b6a --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 106 +246 246 255 +205 197 213 +156 156 164 +222 230 255 +172 205 213 +156 189 172 +189 230 148 +139 205 123 +106 131 98 +238 131 106 +205 106 106 +255 246 41 +255 205 148 +189 197 115 diff --git a/data/tilesets/secondary/dummy_1/palettes/08.pal b/data/tilesets/secondary/dummy_1/palettes/08.pal new file mode 100644 index 000000000000..7fd087b3beb7 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 106 +172 172 189 +222 213 205 +238 238 238 +123 139 74 +148 205 98 +205 246 123 +255 238 230 +222 222 189 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/09.pal b/data/tilesets/secondary/dummy_1/palettes/09.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/10.pal b/data/tilesets/secondary/dummy_1/palettes/10.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/11.pal b/data/tilesets/secondary/dummy_1/palettes/11.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/12.pal b/data/tilesets/secondary/dummy_1/palettes/12.pal new file mode 100644 index 000000000000..97d3f20bd6a1 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +65 74 106 +156 156 139 +164 148 65 +213 164 106 +230 213 131 +246 238 205 +0 0 0 +197 189 123 +222 213 139 +246 238 180 +238 205 172 +205 205 213 +255 148 131 +255 255 115 +156 197 230 diff --git a/data/tilesets/secondary/dummy_1/palettes/13.pal b/data/tilesets/secondary/dummy_1/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/14.pal b/data/tilesets/secondary/dummy_1/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/palettes/15.pal b/data/tilesets/secondary/dummy_1/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_1/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_1/tiles.png b/data/tilesets/secondary/dummy_1/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b21f3e4877186e5ab3a36f8f787a65b83e1048 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^4M5Dn!VDx2e}3f)qznRlLR|m<|NrjYyL`deqoJXpf`Wp8fB;aF^OuLefRvD@i(`n!#N-4C hy#)yiWDS-uGW2RN6rOq4V*!+9@O1TaS?83{1OPm_F2Vo+ literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_2/metatile_attributes.bin b/data/tilesets/secondary/dummy_2/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..1b1cb4d44c57c2d7a5122870fa6ac3e62ff7e94e GIT binary patch literal 8 KcmZQzfB*mh2mk>9 literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_2/metatiles.bin b/data/tilesets/secondary/dummy_2/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..c15edf653d29093bf82e69162a3aad7237f9b355 GIT binary patch literal 32 TcmZqN)Ch(QPypdIZi4Xv#0UwQ literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_2/palettes/00.pal b/data/tilesets/secondary/dummy_2/palettes/00.pal new file mode 100644 index 000000000000..0fd74602ed32 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +24 41 82 +255 255 255 +222 230 238 +189 205 230 +156 180 222 +131 131 139 +98 98 123 +65 74 106 +189 189 131 +115 189 246 +98 172 238 +115 189 246 +98 164 222 +82 139 197 +74 115 172 +115 197 164 diff --git a/data/tilesets/secondary/dummy_2/palettes/01.pal b/data/tilesets/secondary/dummy_2/palettes/01.pal new file mode 100644 index 000000000000..3c6e40c2e9cd --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +24 41 82 +255 255 255 +222 230 238 +189 205 230 +156 180 222 +131 131 139 +98 98 123 +65 74 106 +41 49 90 +115 189 246 +98 172 238 +255 189 131 +238 148 115 +222 106 98 +205 65 82 +115 197 164 diff --git a/data/tilesets/secondary/dummy_2/palettes/02.pal b/data/tilesets/secondary/dummy_2/palettes/02.pal new file mode 100644 index 000000000000..4c41030f6616 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +24 41 82 +180 255 131 +131 197 98 +57 139 49 +57 82 0 +222 148 115 +106 90 90 +164 98 90 +65 57 49 +255 197 148 +222 106 98 +205 65 82 +164 213 197 +115 197 164 +65 180 131 +24 164 106 diff --git a/data/tilesets/secondary/dummy_2/palettes/03.pal b/data/tilesets/secondary/dummy_2/palettes/03.pal new file mode 100644 index 000000000000..5665ddc2287a --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +24 41 82 +255 255 255 +213 213 213 +189 189 189 +164 164 164 +131 131 139 +65 180 131 +164 213 197 +65 49 65 +238 213 205 +222 180 164 +189 148 139 +156 115 115 +131 90 90 +98 65 82 +115 197 164 diff --git a/data/tilesets/secondary/dummy_2/palettes/04.pal b/data/tilesets/secondary/dummy_2/palettes/04.pal new file mode 100644 index 000000000000..d8051b7bac42 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +24 41 82 +255 255 255 +222 230 238 +255 0 255 +255 0 255 +255 0 255 +156 164 189 +82 106 213 +65 90 189 +57 82 156 +41 65 139 +172 197 230 +139 164 222 +106 131 213 +82 106 213 +115 197 164 diff --git a/data/tilesets/secondary/dummy_2/palettes/05.pal b/data/tilesets/secondary/dummy_2/palettes/05.pal new file mode 100644 index 000000000000..4e684594ceba --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +24 41 82 +255 255 255 +222 230 238 +189 205 230 +156 180 222 +131 131 139 +98 98 123 +65 74 106 +41 49 90 +131 197 246 +106 180 222 +238 230 164 +222 205 131 +213 180 106 +205 156 82 +115 197 164 diff --git a/data/tilesets/secondary/dummy_2/palettes/06.pal b/data/tilesets/secondary/dummy_2/palettes/06.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_2/palettes/07.pal b/data/tilesets/secondary/dummy_2/palettes/07.pal new file mode 100644 index 000000000000..2064b3bd2c02 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +255 255 255 +238 222 172 +230 156 98 +197 90 65 +65 74 106 +106 106 123 +131 90 49 +90 65 49 +57 57 57 +222 222 197 +172 180 148 +131 148 115 +106 123 65 +156 205 230 +156 156 156 diff --git a/data/tilesets/secondary/dummy_2/palettes/08.pal b/data/tilesets/secondary/dummy_2/palettes/08.pal new file mode 100644 index 000000000000..42a3483c0ec6 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +255 255 255 +213 222 246 +131 131 139 +98 98 123 +65 74 106 +164 205 189 +139 180 172 +115 156 139 +98 139 131 +189 172 180 +156 139 148 +230 106 57 +205 49 24 +148 57 24 +0 0 0 diff --git a/data/tilesets/secondary/dummy_2/palettes/09.pal b/data/tilesets/secondary/dummy_2/palettes/09.pal new file mode 100644 index 000000000000..b06dfbda7cf0 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +255 255 255 +213 222 246 +164 172 222 +98 98 123 +65 74 106 +98 98 123 +65 74 106 +115 123 164 +49 49 74 +189 238 180 +106 222 115 +74 180 98 +57 131 82 +131 197 230 +98 156 172 diff --git a/data/tilesets/secondary/dummy_2/palettes/10.pal b/data/tilesets/secondary/dummy_2/palettes/10.pal new file mode 100644 index 000000000000..cd86ca4ae092 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +82 82 106 +148 148 164 +205 189 197 +255 255 255 +222 213 230 +189 172 180 +255 205 106 +230 189 106 +205 156 82 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +57 139 49 +106 106 123 diff --git a/data/tilesets/secondary/dummy_2/palettes/11.pal b/data/tilesets/secondary/dummy_2/palettes/11.pal new file mode 100644 index 000000000000..ec8e2f42d2c4 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +74 74 98 +106 106 115 +0 0 0 +0 0 0 +148 106 57 +189 139 57 +213 189 131 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_2/palettes/12.pal b/data/tilesets/secondary/dummy_2/palettes/12.pal new file mode 100644 index 000000000000..5caa038adbde --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +255 255 255 +213 222 246 +164 172 222 +98 98 123 +65 74 106 +238 213 205 +222 172 164 +205 131 123 +189 98 82 +222 222 222 +172 180 189 +139 148 164 +106 123 123 +222 74 0 +213 213 57 diff --git a/data/tilesets/secondary/dummy_2/palettes/13.pal b/data/tilesets/secondary/dummy_2/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_2/palettes/14.pal b/data/tilesets/secondary/dummy_2/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_2/palettes/15.pal b/data/tilesets/secondary/dummy_2/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_2/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_2/tiles.png b/data/tilesets/secondary/dummy_2/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..c00ba0d61c9e4123786844469fe5f3b9a28b19a7 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^4M5Dn!VDx2e}3f)qznRlLR|m<|NrjYyL`deqoJXpf`Wp8fB;aF^OuLefRvc0i(`n!#N-5q lrvDBH95^LR6IMtwFf0g_f4FMy^HiV;22WQ%mvv4FO#l)hF$@3z literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_3/metatile_attributes.bin b/data/tilesets/secondary/dummy_3/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..1b1cb4d44c57c2d7a5122870fa6ac3e62ff7e94e GIT binary patch literal 8 KcmZQzfB*mh2mk>9 literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_3/metatiles.bin b/data/tilesets/secondary/dummy_3/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..274da22a637ff37d23feb9af558b4ebd602c8001 GIT binary patch literal 32 QcmZQzKn0CV5C{_m02;Ic4FCWD literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_3/palettes/00.pal b/data/tilesets/secondary/dummy_3/palettes/00.pal new file mode 100644 index 000000000000..2f3f97d6fdb7 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +189 255 139 +131 213 98 +57 148 49 +57 90 16 +115 98 98 +65 57 49 +255 0 255 +139 222 189 +255 197 115 +238 131 106 +197 49 65 +164 230 197 +115 205 164 +65 180 139 +24 164 106 diff --git a/data/tilesets/secondary/dummy_3/palettes/01.pal b/data/tilesets/secondary/dummy_3/palettes/01.pal new file mode 100644 index 000000000000..d8a4e7757d1b --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 230 +197 205 213 +172 189 205 +131 131 139 +65 49 65 +230 238 238 +90 189 139 +255 0 255 +238 213 197 +222 197 164 +189 148 139 +148 106 106 +115 65 74 +82 49 65 +115 205 164 diff --git a/data/tilesets/secondary/dummy_3/palettes/02.pal b/data/tilesets/secondary/dummy_3/palettes/02.pal new file mode 100644 index 000000000000..6b019b884c96 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +156 123 98 +197 172 139 +255 205 139 +238 148 115 +222 106 98 +205 82 74 +172 32 41 +74 131 197 diff --git a/data/tilesets/secondary/dummy_3/palettes/03.pal b/data/tilesets/secondary/dummy_3/palettes/03.pal new file mode 100644 index 000000000000..205c464c79d6 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +205 180 106 +156 213 255 +115 189 246 +98 164 222 +74 131 197 +49 98 164 +115 205 164 diff --git a/data/tilesets/secondary/dummy_3/palettes/04.pal b/data/tilesets/secondary/dummy_3/palettes/04.pal new file mode 100644 index 000000000000..702db8a907c6 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 222 172 +189 189 139 +156 156 106 +115 115 65 +255 255 213 +255 238 180 +238 222 156 +172 197 197 +148 189 189 +123 180 180 +230 246 255 +189 222 222 +172 213 222 +148 205 205 +255 255 255 diff --git a/data/tilesets/secondary/dummy_3/palettes/05.pal b/data/tilesets/secondary/dummy_3/palettes/05.pal new file mode 100644 index 000000000000..c5a653979a01 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 238 +172 189 205 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +213 197 131 +197 172 106 +172 148 74 +238 230 139 +222 197 139 +213 189 106 +189 230 164 +172 222 164 +115 205 164 diff --git a/data/tilesets/secondary/dummy_3/palettes/06.pal b/data/tilesets/secondary/dummy_3/palettes/06.pal new file mode 100644 index 000000000000..995731c23cc0 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_3/palettes/07.pal b/data/tilesets/secondary/dummy_3/palettes/07.pal new file mode 100644 index 000000000000..995731c23cc0 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_3/palettes/08.pal b/data/tilesets/secondary/dummy_3/palettes/08.pal new file mode 100644 index 000000000000..6774e407f09c --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +222 197 189 +205 180 156 +189 148 139 +148 115 106 +115 65 74 +82 49 65 +90 90 98 diff --git a/data/tilesets/secondary/dummy_3/palettes/09.pal b/data/tilesets/secondary/dummy_3/palettes/09.pal new file mode 100644 index 000000000000..3795f6c6a5ab --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 222 213 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +255 238 164 +230 197 139 +205 172 123 +164 123 90 +148 115 74 +106 65 41 +74 74 57 +0 0 0 +98 139 197 +74 115 172 +57 98 156 diff --git a/data/tilesets/secondary/dummy_3/palettes/10.pal b/data/tilesets/secondary/dummy_3/palettes/10.pal new file mode 100644 index 000000000000..937405d15bfe --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +255 0 255 +255 0 255 +255 0 255 +0 0 0 +255 238 164 +230 197 139 +205 172 123 +172 139 106 +213 197 189 +205 180 156 +189 148 139 +148 115 106 +115 65 74 +82 49 65 +90 90 98 diff --git a/data/tilesets/secondary/dummy_3/palettes/11.pal b/data/tilesets/secondary/dummy_3/palettes/11.pal new file mode 100644 index 000000000000..bb4f4867c43c --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +238 222 148 +222 205 115 +205 180 98 +189 172 98 diff --git a/data/tilesets/secondary/dummy_3/palettes/12.pal b/data/tilesets/secondary/dummy_3/palettes/12.pal new file mode 100644 index 000000000000..583384664faa --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +0 0 0 diff --git a/data/tilesets/secondary/dummy_3/palettes/13.pal b/data/tilesets/secondary/dummy_3/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_3/palettes/14.pal b/data/tilesets/secondary/dummy_3/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_3/palettes/15.pal b/data/tilesets/secondary/dummy_3/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_3/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_3/tiles.png b/data/tilesets/secondary/dummy_3/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..b2d960c6012ec21439ed6c5535b78f9ee44ba225 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^4M5Dn!VDx2e}3f)qznRlLR|m<|NrjYyL`deqoJXpf`Wp8fB;aF^OuLefRwPOi(`n!#N-4C h)+9 literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_4/metatiles.bin b/data/tilesets/secondary/dummy_4/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..8f740f6af07cac01525c829d3fa1d4e051fc6ffc GIT binary patch literal 32 QcmZQzKn0CW5C{_m05Y@$4FCWD literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/dummy_4/palettes/00.pal b/data/tilesets/secondary/dummy_4/palettes/00.pal new file mode 100644 index 000000000000..2f3f97d6fdb7 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/00.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +189 255 139 +131 213 98 +57 148 49 +57 90 16 +115 98 98 +65 57 49 +255 0 255 +139 222 189 +255 197 115 +238 131 106 +197 49 65 +164 230 197 +115 205 164 +65 180 139 +24 164 106 diff --git a/data/tilesets/secondary/dummy_4/palettes/01.pal b/data/tilesets/secondary/dummy_4/palettes/01.pal new file mode 100644 index 000000000000..d8a4e7757d1b --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/01.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 230 +197 205 213 +172 189 205 +131 131 139 +65 49 65 +230 238 238 +90 189 139 +255 0 255 +238 213 197 +222 197 164 +189 148 139 +148 106 106 +115 65 74 +82 49 65 +115 205 164 diff --git a/data/tilesets/secondary/dummy_4/palettes/02.pal b/data/tilesets/secondary/dummy_4/palettes/02.pal new file mode 100644 index 000000000000..6b019b884c96 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/02.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +156 123 98 +197 172 139 +255 205 139 +238 148 115 +222 106 98 +205 82 74 +172 32 41 +74 131 197 diff --git a/data/tilesets/secondary/dummy_4/palettes/03.pal b/data/tilesets/secondary/dummy_4/palettes/03.pal new file mode 100644 index 000000000000..205c464c79d6 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/03.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +246 246 255 +205 222 238 +172 189 205 +148 164 180 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +205 180 106 +156 213 255 +115 189 246 +98 164 222 +74 131 197 +49 98 164 +115 205 164 diff --git a/data/tilesets/secondary/dummy_4/palettes/04.pal b/data/tilesets/secondary/dummy_4/palettes/04.pal new file mode 100644 index 000000000000..702db8a907c6 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/04.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 222 172 +189 189 139 +156 156 106 +115 115 65 +255 255 213 +255 238 180 +238 222 156 +172 197 197 +148 189 189 +123 180 180 +230 246 255 +189 222 222 +172 213 222 +148 205 205 +255 255 255 diff --git a/data/tilesets/secondary/dummy_4/palettes/05.pal b/data/tilesets/secondary/dummy_4/palettes/05.pal new file mode 100644 index 000000000000..c5a653979a01 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/05.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +222 230 238 +172 189 205 +123 123 131 +90 90 115 +65 74 106 +230 222 164 +213 197 131 +197 172 106 +172 148 74 +238 230 139 +222 197 139 +213 189 106 +189 230 164 +172 222 164 +115 205 164 diff --git a/data/tilesets/secondary/dummy_4/palettes/06.pal b/data/tilesets/secondary/dummy_4/palettes/06.pal new file mode 100644 index 000000000000..995731c23cc0 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/06.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_4/palettes/07.pal b/data/tilesets/secondary/dummy_4/palettes/07.pal new file mode 100644 index 000000000000..995731c23cc0 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/07.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 255 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_4/palettes/08.pal b/data/tilesets/secondary/dummy_4/palettes/08.pal new file mode 100644 index 000000000000..6774e407f09c --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/08.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +222 197 189 +205 180 156 +189 148 139 +148 115 106 +115 65 74 +82 49 65 +90 90 98 diff --git a/data/tilesets/secondary/dummy_4/palettes/09.pal b/data/tilesets/secondary/dummy_4/palettes/09.pal new file mode 100644 index 000000000000..3795f6c6a5ab --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/09.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +213 222 213 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +255 238 164 +230 197 139 +205 172 123 +164 123 90 +148 115 74 +106 65 41 +74 74 57 +0 0 0 +98 139 197 +74 115 172 +57 98 156 diff --git a/data/tilesets/secondary/dummy_4/palettes/10.pal b/data/tilesets/secondary/dummy_4/palettes/10.pal new file mode 100644 index 000000000000..937405d15bfe --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/10.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +255 0 255 +255 0 255 +255 0 255 +0 0 0 +255 238 164 +230 197 139 +205 172 123 +172 139 106 +213 197 189 +205 180 156 +189 148 139 +148 115 106 +115 65 74 +82 49 65 +90 90 98 diff --git a/data/tilesets/secondary/dummy_4/palettes/11.pal b/data/tilesets/secondary/dummy_4/palettes/11.pal new file mode 100644 index 000000000000..bb4f4867c43c --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/11.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +189 189 156 +172 172 139 +148 139 115 +123 115 90 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +238 222 148 +222 205 115 +205 180 98 +189 172 98 diff --git a/data/tilesets/secondary/dummy_4/palettes/12.pal b/data/tilesets/secondary/dummy_4/palettes/12.pal new file mode 100644 index 000000000000..583384664faa --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/12.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +74 115 172 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +255 0 255 +0 0 0 diff --git a/data/tilesets/secondary/dummy_4/palettes/13.pal b/data/tilesets/secondary/dummy_4/palettes/13.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/13.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_4/palettes/14.pal b/data/tilesets/secondary/dummy_4/palettes/14.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/14.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_4/palettes/15.pal b/data/tilesets/secondary/dummy_4/palettes/15.pal new file mode 100644 index 000000000000..4b0812f09403 --- /dev/null +++ b/data/tilesets/secondary/dummy_4/palettes/15.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/data/tilesets/secondary/dummy_4/tiles.png b/data/tilesets/secondary/dummy_4/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..201df80fb65a9f0247b5ed12fc1b2a2cd0e5ddfd GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^4M5Dn!VDx2e}3f)qznRlLR|m<|NrjYyL`deqoJXpf`Wp8fB;aF^OuLefRw1Gi(`n!#N>np kd>Rr3%x#Pk2Mib(7MC*yPL5k62UNh|>FVdQ&MBb@0Iv%!U;qFB literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/fan_club_daycare/metatile_attributes.bin b/data/tilesets/secondary/fan_club_daycare/metatile_attributes.bin new file mode 100644 index 0000000000000000000000000000000000000000..8255cca2029318d4ed235dee2b90f79de5d6ef62 GIT binary patch literal 680 zcma)&*$u)l5JX+dmcY>vKlDL96U5XqGC-+Zm+x7mAV5D1?@ zR2H^C`vl^bDZh{0{qn&-;hdWrtfVC4uJ#)(Hb1wr zyzBPwduDI)K9%WB(mt^X?OpO6N1e>61VZ2>XL;(bQW%brwOqF DK=B$Y literal 0 HcmV?d00001 diff --git a/data/tilesets/secondary/fan_club_daycare/metatiles.bin b/data/tilesets/secondary/fan_club_daycare/metatiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..63ddd975bc007583cbd4baedc447c6697511db44 GIT binary patch literal 2720 zcmZve$!}Cg5XQ^W93qH>9!EIj4mltna>+stkbRM?kOh(`8%_cN5wOX6h|9Q<1~B6u z{E)_A#%&lRR>Ne$V>}p-?IAlP`GZpRdcK~1PNvj`->ZK8RaaN{Yoh#bh)X=iRmRhj z@b~ry+vOos